| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- # Copyright (C) 2020 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"],
- )
- genrule(
- name = "gen_build_info_h",
- srcs = ["CHANGES.md", "build_info.h.tmpl"],
- outs = ["glslang/build_info.h"],
- cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
- tools = [":build_info"],
- )
- 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 = [
- "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]
|