| package( |
| default_visibility = ["//visibility:public"], |
| ) |
| |
| # Description: |
| # |
| # Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator. |
| |
| licenses(["notice"]) |
| |
| exports_files(["LICENSE"]) |
| |
| COMMON_COPTS = select({ |
| "@bazel_tools//src/conditions:windows": [""], |
| "//conditions:default": [ |
| "-Wall", |
| "-Wuninitialized", |
| "-Wunused", |
| "-Wunused-local-typedefs", |
| "-Wunused-parameter", |
| "-Wunused-value", |
| "-Wunused-variable", |
| "-Wno-reorder", |
| "-std=c++11", |
| "-fvisibility=hidden", |
| "-fvisibility-inlines-hidden", |
| "-fno-exceptions", |
| "-fno-rtti", |
| ], |
| }) |
| |
| cc_library( |
| name = "glslang", |
| srcs = glob( |
| [ |
| "glslang/GenericCodeGen/*.cpp", |
| "glslang/MachineIndependent/*.cpp", |
| "glslang/MachineIndependent/preprocessor/*.cpp", |
| "hlsl/*.cpp", |
| ], |
| exclude = [ |
| "glslang/MachineIndependent/pch.cpp", |
| "glslang/MachineIndependent/pch.h", |
| "hlsl/pch.cpp", |
| "hlsl/pch.h", |
| ], |
| ) + [ |
| "OGLCompilersDLL/InitializeDll.cpp", |
| ] + select({ |
| "@bazel_tools//src/conditions:windows": |
| ["glslang/OSDependent/Windows/ossource.cpp"], |
| "//conditions:default": |
| ["glslang/OSDependent/Unix/ossource.cpp"], |
| }), |
| hdrs = glob([ |
| "glslang/Include/*.h", |
| "glslang/MachineIndependent/*.h", |
| "glslang/MachineIndependent/preprocessor/*.h", |
| "hlsl/*.h", |
| ]) + [ |
| "OGLCompilersDLL/InitializeDll.h", |
| "StandAlone/DirStackFileIncluder.h", |
| "glslang/OSDependent/osinclude.h", |
| "glslang/Public/ShaderLang.h", |
| ], |
| copts = COMMON_COPTS, |
| defines = [ |
| "AMD_EXTENSIONS", |
| "ENABLE_HLSL=0", |
| "ENABLE_OPT=0", |
| "NV_EXTENSIONS", |
| ], |
| linkopts = select({ |
| "@bazel_tools//src/conditions:windows": [""], |
| "//conditions:default": ["-lm", "-lpthread"], |
| }), |
| linkstatic = 1, |
| ) |
| |
| genrule( |
| name = "export_spirv_headers", |
| srcs = [ |
| "SPIRV/GLSL.ext.AMD.h", |
| "SPIRV/GLSL.ext.EXT.h", |
| "SPIRV/GLSL.ext.KHR.h", |
| "SPIRV/GLSL.ext.NV.h", |
| "SPIRV/GLSL.std.450.h", |
| "SPIRV/NonSemanticDebugPrintf.h", |
| "SPIRV/spirv.hpp", |
| ], |
| outs = [ |
| "include/SPIRV/GLSL.ext.AMD.h", |
| "include/SPIRV/GLSL.ext.EXT.h", |
| "include/SPIRV/GLSL.ext.KHR.h", |
| "include/SPIRV/GLSL.ext.NV.h", |
| "include/SPIRV/GLSL.std.450.h", |
| "include/SPIRV/NonSemanticDebugPrintf.h", |
| "include/SPIRV/spirv.hpp", |
| ], |
| cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", |
| ) |
| |
| cc_library( |
| name = "SPIRV_headers", |
| hdrs = [":export_spirv_headers"], |
| copts = COMMON_COPTS, |
| includes = [ |
| "include", |
| "include/SPIRV", |
| ], |
| linkstatic = 1, |
| ) |
| |
| cc_library( |
| name = "SPIRV", |
| srcs = glob( |
| ["SPIRV/*.cpp"], |
| exclude = [ |
| "SPIRV/SpvTools.cpp", |
| ], |
| ), |
| hdrs = [ |
| "SPIRV/GlslangToSpv.h", |
| "SPIRV/Logger.h", |
| "SPIRV/SPVRemapper.h", |
| "SPIRV/SpvBuilder.h", |
| "SPIRV/SpvTools.h", |
| "SPIRV/bitutils.h", |
| "SPIRV/disassemble.h", |
| "SPIRV/doc.h", |
| "SPIRV/hex_float.h", |
| "SPIRV/spvIR.h", |
| ], |
| copts = COMMON_COPTS, |
| includes = ["SPIRV"], |
| linkopts = select({ |
| "@bazel_tools//src/conditions:windows": [""], |
| "//conditions:default": ["-lm"], |
| }), |
| linkstatic = 1, |
| deps = [ |
| ":SPIRV_headers", |
| ":glslang", |
| ], |
| ) |
| |
| cc_library( |
| name = "glslang-default-resource-limits", |
| srcs = ["StandAlone/ResourceLimits.cpp"], |
| hdrs = ["StandAlone/ResourceLimits.h"], |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| deps = [":glslang"], |
| ) |
| |
| cc_binary( |
| name = "glslangValidator", |
| srcs = [ |
| "StandAlone/StandAlone.cpp", |
| "StandAlone/Worklist.h", |
| ], |
| copts = COMMON_COPTS, |
| deps = [ |
| ":SPIRV", |
| ":glslang", |
| ":glslang-default-resource-limits", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-remap", |
| srcs = ["StandAlone/spirv-remap.cpp"], |
| copts = COMMON_COPTS, |
| deps = [ |
| ":SPIRV", |
| ":glslang", |
| ":glslang-default-resource-limits", |
| ], |
| ) |
| |
| filegroup( |
| name = "test_files", |
| srcs = glob( |
| ["Test/**"], |
| exclude = [ |
| "Test/bump", |
| "Test/glslangValidator", |
| "Test/runtests", |
| ], |
| ), |
| ) |
| |
| cc_library( |
| name = "glslang_test_lib", |
| testonly = 1, |
| srcs = [ |
| "gtests/HexFloat.cpp", |
| "gtests/Initializer.h", |
| "gtests/Settings.cpp", |
| "gtests/Settings.h", |
| "gtests/TestFixture.cpp", |
| "gtests/TestFixture.h", |
| "gtests/main.cpp", |
| ], |
| copts = COMMON_COPTS, |
| data = [":test_files"], |
| defines = select({ |
| # Unfortunately we can't use $(location) in cc_library at the moment. |
| # See https://github.com/bazelbuild/bazel/issues/1023 |
| # So we'll specify the path manually. |
| "@bazel_tools//src/conditions:windows": |
| ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], |
| "//conditions:default": |
| ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], |
| }), |
| linkstatic = 1, |
| deps = [ |
| ":SPIRV", |
| ":glslang", |
| ":glslang-default-resource-limits", |
| "@com_google_googletest//:gtest", |
| ], |
| ) |
| |
| GLSLANG_TESTS = glob( |
| ["gtests/*.FromFile.cpp"], |
| # Since we are not building the SPIRV-Tools dependency, the following tests |
| # cannot be performed. |
| exclude = [ |
| "gtests/Hlsl.FromFile.cpp", |
| "gtests/Spv.FromFile.cpp", |
| ], |
| ) |
| |
| [cc_test( |
| name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", |
| srcs = [test_file], |
| copts = COMMON_COPTS, |
| data = [ |
| ":test_files", |
| ], |
| deps = [ |
| ":SPIRV", |
| ":glslang", |
| ":glslang_test_lib", |
| ], |
| ) for test_file in GLSLANG_TESTS] |