From 0608b9d6827f0169b327bc311156ae38a8a80485 Mon Sep 17 00:00:00 2001 From: Ehsan Nasiri Date: Wed, 16 Oct 2019 16:55:23 -0400 Subject: [PATCH] Add Bazel build configuration files. In order to avoid potential build failures that could arise from SPIRV-Tools/Headers, and to avoid reading known_good.json, this build configuration does not build the SPIRV-Tools dependency and hence cannot perform HLSL compilation to SPIR-V. --- BUILD.bazel | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++++ WORKSPACE | 27 ++++++ 2 files changed, 267 insertions(+) create mode 100644 BUILD.bazel create mode 100644 WORKSPACE diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000000..550dde1e19 --- /dev/null +++ b/BUILD.bazel @@ -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] diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 0000000000..3c38e61d08 --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,27 @@ +workspace(name = "org_khronos_glslang") +load( + "@bazel_tools//tools/build_defs/repo:http.bzl", + "http_archive", +) + +http_archive( + name = "com_google_googletest", + sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4", + strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a", + urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"], # 2018-07-16 +) + +http_archive( + name = "com_googlesource_code_re2", + sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e", + strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/", + urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"], +) + +http_archive( + name = "com_google_effcee", + build_file = "BUILD.effcee.bazel", + sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34", + strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/", + urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"], +)