|
@@ -0,0 +1,240 @@
|
|
|
+package(
|
|
|
+ default_visibility = ["//visibility:public"],
|
|
|
+)
|
|
|
+
|
|
|
+# Description:
|
|
|
+#
|
|
|
+# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
|
|
|
+
|
|
|
+licenses(["notice"]) # Mixed: BSD, MIT, Khronos, Apache 2.0
|
|
|
+
|
|
|
+exports_files(["LICENSE"])
|
|
|
+
|
|
|
+COMMON_COPTS = [
|
|
|
+ "-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",
|
|
|
+ "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",
|
|
|
+ "GLSLANG_OSINCLUDE_UNIX",
|
|
|
+ "NV_EXTENSIONS",
|
|
|
+ ],
|
|
|
+ linkopts = [
|
|
|
+ "-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/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/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 = ["-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",
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+)
|
|
|
+
|
|
|
+filegroup(
|
|
|
+ name = "test_dir",
|
|
|
+ srcs = ["Test"],
|
|
|
+)
|
|
|
+
|
|
|
+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 = [
|
|
|
+ 'GLSLANG_TEST_DIRECTORY=\\"\\"',
|
|
|
+ ],
|
|
|
+ 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],
|
|
|
+ args = [
|
|
|
+ "--test-root",
|
|
|
+ "$(location :test_dir)",
|
|
|
+ ],
|
|
|
+ copts = COMMON_COPTS,
|
|
|
+ data = [
|
|
|
+ ":test_dir",
|
|
|
+ ":test_files",
|
|
|
+ ],
|
|
|
+ deps = [
|
|
|
+ ":SPIRV",
|
|
|
+ ":glslang",
|
|
|
+ ":glslang_test_lib",
|
|
|
+ ],
|
|
|
+) for test_file in GLSLANG_TESTS]
|