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]