1617a3babSopenharmony_ci# Copyright (C) 2020 The Khronos Group Inc. 2617a3babSopenharmony_ci# 3617a3babSopenharmony_ci# All rights reserved. 4617a3babSopenharmony_ci# 5617a3babSopenharmony_ci# Redistribution and use in source and binary forms, with or without 6617a3babSopenharmony_ci# modification, are permitted provided that the following conditions 7617a3babSopenharmony_ci# are met: 8617a3babSopenharmony_ci# 9617a3babSopenharmony_ci# Redistributions of source code must retain the above copyright 10617a3babSopenharmony_ci# notice, this list of conditions and the following disclaimer. 11617a3babSopenharmony_ci# 12617a3babSopenharmony_ci# Redistributions in binary form must reproduce the above 13617a3babSopenharmony_ci# copyright notice, this list of conditions and the following 14617a3babSopenharmony_ci# disclaimer in the documentation and/or other materials provided 15617a3babSopenharmony_ci# with the distribution. 16617a3babSopenharmony_ci# 17617a3babSopenharmony_ci# Neither the name of The Khronos Group Inc. nor the names of its 18617a3babSopenharmony_ci# contributors may be used to endorse or promote products derived 19617a3babSopenharmony_ci# from this software without specific prior written permission. 20617a3babSopenharmony_ci# 21617a3babSopenharmony_ci# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22617a3babSopenharmony_ci# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23617a3babSopenharmony_ci# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24617a3babSopenharmony_ci# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25617a3babSopenharmony_ci# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26617a3babSopenharmony_ci# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27617a3babSopenharmony_ci# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28617a3babSopenharmony_ci# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 29617a3babSopenharmony_ci# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30617a3babSopenharmony_ci# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 31617a3babSopenharmony_ci# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32617a3babSopenharmony_ci# POSSIBILITY OF SUCH DAMAGE. 33617a3babSopenharmony_ci 34617a3babSopenharmony_cipackage( 35617a3babSopenharmony_ci default_visibility = ["//visibility:public"], 36617a3babSopenharmony_ci) 37617a3babSopenharmony_ci 38617a3babSopenharmony_ci# Description: 39617a3babSopenharmony_ci# 40617a3babSopenharmony_ci# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator. 41617a3babSopenharmony_ci 42617a3babSopenharmony_cilicenses(["notice"]) 43617a3babSopenharmony_ci 44617a3babSopenharmony_ciexports_files(["LICENSE"]) 45617a3babSopenharmony_ci 46617a3babSopenharmony_ci# Build information generation script 47617a3babSopenharmony_cipy_binary( 48617a3babSopenharmony_ci name = "build_info", 49617a3babSopenharmony_ci srcs = ["build_info.py"], 50617a3babSopenharmony_ci) 51617a3babSopenharmony_ci 52617a3babSopenharmony_cipy_binary( 53617a3babSopenharmony_ci name = "gen_extension_headers", 54617a3babSopenharmony_ci srcs = ["gen_extension_headers.py"], 55617a3babSopenharmony_ci) 56617a3babSopenharmony_ci 57617a3babSopenharmony_cigenrule( 58617a3babSopenharmony_ci name = "gen_build_info_h", 59617a3babSopenharmony_ci srcs = ["CHANGES.md", "build_info.h.tmpl"], 60617a3babSopenharmony_ci outs = ["glslang/build_info.h"], 61617a3babSopenharmony_ci cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", 62617a3babSopenharmony_ci 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)", 63617a3babSopenharmony_ci tools = [":build_info"], 64617a3babSopenharmony_ci) 65617a3babSopenharmony_ci 66617a3babSopenharmony_cigenrule( 67617a3babSopenharmony_ci name = "gen_extension_headers_h", 68617a3babSopenharmony_ci srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"], 69617a3babSopenharmony_ci outs = ["glslang/glsl_intrinsic_header.h"], 70617a3babSopenharmony_ci cmd_bash = "$(location gen_extension_headers) -i $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)", 71617a3babSopenharmony_ci tools = [":gen_extension_headers"], 72617a3babSopenharmony_ci) 73617a3babSopenharmony_ci 74617a3babSopenharmony_ciCOMMON_COPTS = select({ 75617a3babSopenharmony_ci "@bazel_tools//src/conditions:windows": [""], 76617a3babSopenharmony_ci "//conditions:default": [ 77617a3babSopenharmony_ci "-Wall", 78617a3babSopenharmony_ci "-Wuninitialized", 79617a3babSopenharmony_ci "-Wunused", 80617a3babSopenharmony_ci "-Wunused-local-typedefs", 81617a3babSopenharmony_ci "-Wunused-parameter", 82617a3babSopenharmony_ci "-Wunused-value", 83617a3babSopenharmony_ci "-Wunused-variable", 84617a3babSopenharmony_ci "-Wno-reorder", 85617a3babSopenharmony_ci "-std=c++11", 86617a3babSopenharmony_ci "-fvisibility=hidden", 87617a3babSopenharmony_ci "-fvisibility-inlines-hidden", 88617a3babSopenharmony_ci "-fno-exceptions", 89617a3babSopenharmony_ci "-fno-rtti", 90617a3babSopenharmony_ci ], 91617a3babSopenharmony_ci}) 92617a3babSopenharmony_ci 93617a3babSopenharmony_cicc_library( 94617a3babSopenharmony_ci name = "glslang", 95617a3babSopenharmony_ci srcs = glob( 96617a3babSopenharmony_ci [ 97617a3babSopenharmony_ci "glslang/GenericCodeGen/*.cpp", 98617a3babSopenharmony_ci "glslang/HLSL/*.cpp", 99617a3babSopenharmony_ci "glslang/MachineIndependent/*.cpp", 100617a3babSopenharmony_ci "glslang/MachineIndependent/preprocessor/*.cpp", 101617a3babSopenharmony_ci ], 102617a3babSopenharmony_ci exclude = [ 103617a3babSopenharmony_ci "glslang/HLSL/pch.h", 104617a3babSopenharmony_ci "glslang/MachineIndependent/pch.h", 105617a3babSopenharmony_ci ], 106617a3babSopenharmony_ci ) + [ 107617a3babSopenharmony_ci "OGLCompilersDLL/InitializeDll.cpp", 108617a3babSopenharmony_ci ] + select({ 109617a3babSopenharmony_ci "@bazel_tools//src/conditions:windows": 110617a3babSopenharmony_ci ["glslang/OSDependent/Windows/ossource.cpp"], 111617a3babSopenharmony_ci "//conditions:default": 112617a3babSopenharmony_ci ["glslang/OSDependent/Unix/ossource.cpp"], 113617a3babSopenharmony_ci }), 114617a3babSopenharmony_ci hdrs = glob([ 115617a3babSopenharmony_ci "glslang/HLSL/*.h", 116617a3babSopenharmony_ci "glslang/Include/*.h", 117617a3babSopenharmony_ci "glslang/MachineIndependent/*.h", 118617a3babSopenharmony_ci "glslang/MachineIndependent/preprocessor/*.h", 119617a3babSopenharmony_ci ]) + [ 120617a3babSopenharmony_ci "OGLCompilersDLL/InitializeDll.h", 121617a3babSopenharmony_ci "StandAlone/DirStackFileIncluder.h", 122617a3babSopenharmony_ci "glslang/OSDependent/osinclude.h", 123617a3babSopenharmony_ci "glslang/Public/ShaderLang.h", 124617a3babSopenharmony_ci ":gen_build_info_h", 125617a3babSopenharmony_ci ], 126617a3babSopenharmony_ci copts = COMMON_COPTS, 127617a3babSopenharmony_ci defines = [ 128617a3babSopenharmony_ci "AMD_EXTENSIONS", 129617a3babSopenharmony_ci "ENABLE_HLSL=0", 130617a3babSopenharmony_ci "ENABLE_OPT=0", 131617a3babSopenharmony_ci "NV_EXTENSIONS", 132617a3babSopenharmony_ci ], 133617a3babSopenharmony_ci linkopts = select({ 134617a3babSopenharmony_ci "@bazel_tools//src/conditions:windows": [""], 135617a3babSopenharmony_ci "//conditions:default": ["-lm", "-lpthread"], 136617a3babSopenharmony_ci }), 137617a3babSopenharmony_ci linkstatic = 1, 138617a3babSopenharmony_ci) 139617a3babSopenharmony_ci 140617a3babSopenharmony_cigenrule( 141617a3babSopenharmony_ci name = "export_spirv_headers", 142617a3babSopenharmony_ci srcs = [ 143617a3babSopenharmony_ci "SPIRV/GLSL.ext.AMD.h", 144617a3babSopenharmony_ci "SPIRV/GLSL.ext.EXT.h", 145617a3babSopenharmony_ci "SPIRV/GLSL.ext.KHR.h", 146617a3babSopenharmony_ci "SPIRV/GLSL.ext.NV.h", 147617a3babSopenharmony_ci "SPIRV/GLSL.ext.ARM.h", 148617a3babSopenharmony_ci "SPIRV/GLSL.std.450.h", 149617a3babSopenharmony_ci "SPIRV/NonSemanticDebugPrintf.h", 150617a3babSopenharmony_ci "SPIRV/NonSemanticShaderDebugInfo100.h", 151617a3babSopenharmony_ci "SPIRV/spirv.hpp", 152617a3babSopenharmony_ci ], 153617a3babSopenharmony_ci outs = [ 154617a3babSopenharmony_ci "include/SPIRV/GLSL.ext.AMD.h", 155617a3babSopenharmony_ci "include/SPIRV/GLSL.ext.EXT.h", 156617a3babSopenharmony_ci "include/SPIRV/GLSL.ext.KHR.h", 157617a3babSopenharmony_ci "include/SPIRV/GLSL.ext.NV.h", 158617a3babSopenharmony_ci "include/SPIRV/GLSL.ext.ARM.h", 159617a3babSopenharmony_ci "include/SPIRV/GLSL.std.450.h", 160617a3babSopenharmony_ci "include/SPIRV/NonSemanticDebugPrintf.h", 161617a3babSopenharmony_ci "include/SPIRV/NonSemanticShaderDebugInfo100.h", 162617a3babSopenharmony_ci "include/SPIRV/spirv.hpp", 163617a3babSopenharmony_ci ], 164617a3babSopenharmony_ci cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", 165617a3babSopenharmony_ci cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)", 166617a3babSopenharmony_ci) 167617a3babSopenharmony_ci 168617a3babSopenharmony_cicc_library( 169617a3babSopenharmony_ci name = "SPIRV_headers", 170617a3babSopenharmony_ci hdrs = [":export_spirv_headers"], 171617a3babSopenharmony_ci copts = COMMON_COPTS, 172617a3babSopenharmony_ci includes = [ 173617a3babSopenharmony_ci "include", 174617a3babSopenharmony_ci "include/SPIRV", 175617a3babSopenharmony_ci ], 176617a3babSopenharmony_ci linkstatic = 1, 177617a3babSopenharmony_ci) 178617a3babSopenharmony_ci 179617a3babSopenharmony_cicc_library( 180617a3babSopenharmony_ci name = "SPIRV", 181617a3babSopenharmony_ci srcs = glob( 182617a3babSopenharmony_ci ["SPIRV/*.cpp"], 183617a3babSopenharmony_ci exclude = [ 184617a3babSopenharmony_ci "SPIRV/SpvTools.cpp", 185617a3babSopenharmony_ci ], 186617a3babSopenharmony_ci ), 187617a3babSopenharmony_ci hdrs = [ 188617a3babSopenharmony_ci "SPIRV/GlslangToSpv.h", 189617a3babSopenharmony_ci "SPIRV/Logger.h", 190617a3babSopenharmony_ci "SPIRV/SPVRemapper.h", 191617a3babSopenharmony_ci "SPIRV/SpvBuilder.h", 192617a3babSopenharmony_ci "SPIRV/SpvTools.h", 193617a3babSopenharmony_ci "SPIRV/bitutils.h", 194617a3babSopenharmony_ci "SPIRV/disassemble.h", 195617a3babSopenharmony_ci "SPIRV/doc.h", 196617a3babSopenharmony_ci "SPIRV/hex_float.h", 197617a3babSopenharmony_ci "SPIRV/spvIR.h", 198617a3babSopenharmony_ci ], 199617a3babSopenharmony_ci copts = COMMON_COPTS, 200617a3babSopenharmony_ci includes = ["SPIRV"], 201617a3babSopenharmony_ci linkopts = select({ 202617a3babSopenharmony_ci "@bazel_tools//src/conditions:windows": [""], 203617a3babSopenharmony_ci "//conditions:default": ["-lm"], 204617a3babSopenharmony_ci }), 205617a3babSopenharmony_ci linkstatic = 1, 206617a3babSopenharmony_ci deps = [ 207617a3babSopenharmony_ci ":SPIRV_headers", 208617a3babSopenharmony_ci ":glslang", 209617a3babSopenharmony_ci ], 210617a3babSopenharmony_ci) 211617a3babSopenharmony_ci 212617a3babSopenharmony_cicc_library( 213617a3babSopenharmony_ci name = "glslang-default-resource-limits", 214617a3babSopenharmony_ci srcs = ["StandAlone/ResourceLimits.cpp"], 215617a3babSopenharmony_ci hdrs = ["glslang/Public/ResourceLimits.h"], 216617a3babSopenharmony_ci copts = COMMON_COPTS, 217617a3babSopenharmony_ci linkstatic = 1, 218617a3babSopenharmony_ci deps = [":glslang"], 219617a3babSopenharmony_ci) 220617a3babSopenharmony_ci 221617a3babSopenharmony_cicc_binary( 222617a3babSopenharmony_ci name = "glslangValidator", 223617a3babSopenharmony_ci srcs = [ 224617a3babSopenharmony_ci "StandAlone/StandAlone.cpp", 225617a3babSopenharmony_ci "StandAlone/Worklist.h", 226617a3babSopenharmony_ci ":glslang/glsl_intrinsic_header.h" 227617a3babSopenharmony_ci ], 228617a3babSopenharmony_ci copts = COMMON_COPTS, 229617a3babSopenharmony_ci deps = [ 230617a3babSopenharmony_ci ":SPIRV", 231617a3babSopenharmony_ci ":glslang", 232617a3babSopenharmony_ci ":glslang-default-resource-limits", 233617a3babSopenharmony_ci ], 234617a3babSopenharmony_ci) 235617a3babSopenharmony_ci 236617a3babSopenharmony_cicc_binary( 237617a3babSopenharmony_ci name = "spirv-remap", 238617a3babSopenharmony_ci srcs = ["StandAlone/spirv-remap.cpp"], 239617a3babSopenharmony_ci copts = COMMON_COPTS, 240617a3babSopenharmony_ci deps = [ 241617a3babSopenharmony_ci ":SPIRV", 242617a3babSopenharmony_ci ":glslang", 243617a3babSopenharmony_ci ":glslang-default-resource-limits", 244617a3babSopenharmony_ci ], 245617a3babSopenharmony_ci) 246617a3babSopenharmony_ci 247617a3babSopenharmony_cifilegroup( 248617a3babSopenharmony_ci name = "test_files", 249617a3babSopenharmony_ci srcs = glob( 250617a3babSopenharmony_ci ["Test/**"], 251617a3babSopenharmony_ci exclude = [ 252617a3babSopenharmony_ci "Test/bump", 253617a3babSopenharmony_ci "Test/glslangValidator", 254617a3babSopenharmony_ci "Test/runtests", 255617a3babSopenharmony_ci ], 256617a3babSopenharmony_ci ), 257617a3babSopenharmony_ci) 258617a3babSopenharmony_ci 259617a3babSopenharmony_cicc_library( 260617a3babSopenharmony_ci name = "glslang_test_lib", 261617a3babSopenharmony_ci testonly = 1, 262617a3babSopenharmony_ci srcs = [ 263617a3babSopenharmony_ci "gtests/HexFloat.cpp", 264617a3babSopenharmony_ci "gtests/Initializer.h", 265617a3babSopenharmony_ci "gtests/Settings.cpp", 266617a3babSopenharmony_ci "gtests/Settings.h", 267617a3babSopenharmony_ci "gtests/TestFixture.cpp", 268617a3babSopenharmony_ci "gtests/TestFixture.h", 269617a3babSopenharmony_ci "gtests/main.cpp", 270617a3babSopenharmony_ci ], 271617a3babSopenharmony_ci copts = COMMON_COPTS, 272617a3babSopenharmony_ci data = [":test_files"], 273617a3babSopenharmony_ci defines = select({ 274617a3babSopenharmony_ci # Unfortunately we can't use $(location) in cc_library at the moment. 275617a3babSopenharmony_ci # See https://github.com/bazelbuild/bazel/issues/1023 276617a3babSopenharmony_ci # So we'll specify the path manually. 277617a3babSopenharmony_ci "@bazel_tools//src/conditions:windows": 278617a3babSopenharmony_ci ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], 279617a3babSopenharmony_ci "//conditions:default": 280617a3babSopenharmony_ci ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], 281617a3babSopenharmony_ci }), 282617a3babSopenharmony_ci linkstatic = 1, 283617a3babSopenharmony_ci deps = [ 284617a3babSopenharmony_ci ":SPIRV", 285617a3babSopenharmony_ci ":glslang", 286617a3babSopenharmony_ci ":glslang-default-resource-limits", 287617a3babSopenharmony_ci "@com_google_googletest//:gtest", 288617a3babSopenharmony_ci ], 289617a3babSopenharmony_ci) 290617a3babSopenharmony_ci 291617a3babSopenharmony_ciGLSLANG_TESTS = glob( 292617a3babSopenharmony_ci ["gtests/*.FromFile.cpp"], 293617a3babSopenharmony_ci # Since we are not building the SPIRV-Tools dependency, the following tests 294617a3babSopenharmony_ci # cannot be performed. 295617a3babSopenharmony_ci exclude = [ 296617a3babSopenharmony_ci "gtests/Hlsl.FromFile.cpp", 297617a3babSopenharmony_ci "gtests/Spv.FromFile.cpp", 298617a3babSopenharmony_ci ], 299617a3babSopenharmony_ci) 300617a3babSopenharmony_ci 301617a3babSopenharmony_ci[cc_test( 302617a3babSopenharmony_ci name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", 303617a3babSopenharmony_ci srcs = [test_file], 304617a3babSopenharmony_ci copts = COMMON_COPTS, 305617a3babSopenharmony_ci data = [ 306617a3babSopenharmony_ci ":test_files", 307617a3babSopenharmony_ci ], 308617a3babSopenharmony_ci deps = [ 309617a3babSopenharmony_ci ":SPIRV", 310617a3babSopenharmony_ci ":glslang", 311617a3babSopenharmony_ci ":glslang_test_lib", 312617a3babSopenharmony_ci ], 313617a3babSopenharmony_ci) for test_file in GLSLANG_TESTS] 314