312 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2020-2023 The Khronos Group Inc.
 | |
| #
 | |
| # All rights reserved.
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without
 | |
| # modification, are permitted provided that the following conditions
 | |
| # are met:
 | |
| #
 | |
| #    Redistributions of source code must retain the above copyright
 | |
| #    notice, this list of conditions and the following disclaimer.
 | |
| #
 | |
| #    Redistributions in binary form must reproduce the above
 | |
| #    copyright notice, this list of conditions and the following
 | |
| #    disclaimer in the documentation and/or other materials provided
 | |
| #    with the distribution.
 | |
| #
 | |
| #    Neither the name of The Khronos Group Inc. nor the names of its
 | |
| #    contributors may be used to endorse or promote products derived
 | |
| #    from this software without specific prior written permission.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | |
| # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 | |
| # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
| # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | |
| # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | |
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | |
| # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
| # POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| package(
 | |
|     default_visibility = ["//visibility:public"],
 | |
| )
 | |
| 
 | |
| # Description:
 | |
| #
 | |
| # Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
 | |
| 
 | |
| licenses(["notice"])
 | |
| 
 | |
| exports_files(["LICENSE"])
 | |
| 
 | |
| # Build information generation script
 | |
| py_binary(
 | |
|     name = "build_info",
 | |
|     srcs = ["build_info.py"],
 | |
| )
 | |
| 
 | |
| py_binary(
 | |
|     name = "gen_extension_headers",
 | |
|     srcs = ["gen_extension_headers.py"],
 | |
| )
 | |
| 
 | |
| genrule(
 | |
|     name = "gen_build_info_h",
 | |
|     srcs = ["CHANGES.md", "build_info.h.tmpl"],
 | |
|     outs = ["glslang/build_info.h"],
 | |
|     cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
 | |
|     cmd_bat = "for %F in ($(location CHANGES.md)) do $(location build_info) %~dpF -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
 | |
|     tools = [":build_info"],
 | |
| )
 | |
| 
 | |
| genrule(
 | |
|     name = "gen_extension_headers_h",
 | |
|     srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"],
 | |
|     outs = ["glslang/glsl_intrinsic_header.h"],
 | |
|     cmd_bash = "$(location gen_extension_headers) -i  $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)",
 | |
|     tools = [":gen_extension_headers"],
 | |
| )
 | |
| 
 | |
| 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/HLSL/*.cpp",
 | |
|             "glslang/MachineIndependent/*.cpp",
 | |
|             "glslang/MachineIndependent/preprocessor/*.cpp",
 | |
|         ],
 | |
|         exclude = [
 | |
|             "glslang/HLSL/pch.h",
 | |
|             "glslang/MachineIndependent/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/HLSL/*.h",
 | |
|         "glslang/Include/*.h",
 | |
|         "glslang/MachineIndependent/*.h",
 | |
|         "glslang/MachineIndependent/preprocessor/*.h",
 | |
|     ]) + [
 | |
|         "OGLCompilersDLL/InitializeDll.h",
 | |
|         "StandAlone/DirStackFileIncluder.h",
 | |
|         "glslang/OSDependent/osinclude.h",
 | |
|         "glslang/Public/ShaderLang.h",
 | |
|         ":gen_build_info_h",
 | |
|     ],
 | |
|     copts = COMMON_COPTS,
 | |
|     defines = [
 | |
|         "ENABLE_HLSL=0",
 | |
|         "ENABLE_OPT=0",
 | |
|     ],
 | |
|     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.ext.ARM.h",
 | |
|         "SPIRV/GLSL.std.450.h",
 | |
|         "SPIRV/NonSemanticDebugPrintf.h",
 | |
|         "SPIRV/NonSemanticShaderDebugInfo100.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.ext.ARM.h",
 | |
|         "include/SPIRV/GLSL.std.450.h",
 | |
|         "include/SPIRV/NonSemanticDebugPrintf.h",
 | |
|         "include/SPIRV/NonSemanticShaderDebugInfo100.h",
 | |
|         "include/SPIRV/spirv.hpp",
 | |
|     ],
 | |
|     cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
 | |
|     cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)",
 | |
| )
 | |
| 
 | |
| 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 = ["glslang/ResourceLimits/ResourceLimits.cpp"],
 | |
|     hdrs = ["glslang/Public/ResourceLimits.h"],
 | |
|     copts = COMMON_COPTS,
 | |
|     linkstatic = 1,
 | |
|     deps = [":glslang"],
 | |
| )
 | |
| 
 | |
| cc_binary(
 | |
|     name = "glslangValidator",
 | |
|     srcs = [
 | |
|         "StandAlone/StandAlone.cpp",
 | |
|         "StandAlone/Worklist.h",
 | |
|         ":glslang/glsl_intrinsic_header.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]
 | 
