--- /dev/null
+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]
--- /dev/null
+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"],
+)