| load( |
| ":build_defs.bzl", |
| "COMMON_COPTS", |
| "DEBUGINFO_GRAMMAR_JSON_FILE", |
| "CLDEBUGINFO100_GRAMMAR_JSON_FILE", |
| "SHDEBUGINFO100_GRAMMAR_JSON_FILE", |
| "TEST_COPTS", |
| "base_test", |
| "generate_core_tables", |
| "generate_enum_string_mapping", |
| "generate_extinst_lang_headers", |
| "generate_glsl_tables", |
| "generate_opencl_tables", |
| "generate_vendor_tables", |
| "link_test", |
| "lint_test", |
| "opt_test", |
| "reduce_test", |
| "util_test", |
| "val_test", |
| ) |
| |
| package( |
| default_visibility = ["//visibility:private"], |
| ) |
| |
| licenses(["notice"]) |
| |
| exports_files([ |
| "CHANGES", |
| "LICENSE", |
| ]) |
| |
| py_binary( |
| name = "generate_grammar_tables", |
| srcs = ["utils/generate_grammar_tables.py"], |
| ) |
| |
| py_binary( |
| name = "generate_language_headers", |
| srcs = ["utils/generate_language_headers.py"], |
| ) |
| |
| generate_core_tables("unified1") |
| |
| generate_enum_string_mapping("unified1") |
| |
| generate_opencl_tables("unified1") |
| |
| generate_glsl_tables("unified1") |
| |
| generate_vendor_tables("spv-amd-shader-explicit-vertex-parameter") |
| |
| generate_vendor_tables("spv-amd-shader-trinary-minmax") |
| |
| generate_vendor_tables("spv-amd-gcn-shader") |
| |
| generate_vendor_tables("spv-amd-shader-ballot") |
| |
| generate_vendor_tables("debuginfo") |
| |
| generate_vendor_tables("opencl.debuginfo.100", "CLDEBUG100_") |
| |
| generate_vendor_tables("nonsemantic.shader.debuginfo.100", "SHDEBUG100_") |
| |
| generate_vendor_tables("nonsemantic.clspvreflection") |
| |
| generate_extinst_lang_headers("DebugInfo", DEBUGINFO_GRAMMAR_JSON_FILE) |
| |
| generate_extinst_lang_headers("OpenCLDebugInfo100", CLDEBUGINFO100_GRAMMAR_JSON_FILE) |
| |
| generate_extinst_lang_headers("NonSemanticShaderDebugInfo100", SHDEBUGINFO100_GRAMMAR_JSON_FILE) |
| |
| py_binary( |
| name = "generate_registry_tables", |
| srcs = ["utils/generate_registry_tables.py"], |
| ) |
| |
| genrule( |
| name = "gen_registry_tables", |
| srcs = ["@spirv_headers//:spirv_xml_registry"], |
| outs = ["generators.inc"], |
| cmd = "$(location generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)", |
| cmd_bat = "$(location //:generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)", |
| exec_tools = [":generate_registry_tables"], |
| ) |
| |
| py_binary( |
| name = "update_build_version", |
| srcs = ["utils/update_build_version.py"], |
| ) |
| |
| genrule( |
| name = "gen_build_version", |
| srcs = ["CHANGES"], |
| outs = ["build-version.inc"], |
| cmd = "SOURCE_DATE_EPOCH=0 $(location update_build_version) $(location CHANGES) $(location build-version.inc)", |
| cmd_bat = "set SOURCE_DATE_EPOCH=0 && $(location //:update_build_version) $(location CHANGES) $(location build-version.inc)", |
| exec_tools = [":update_build_version"], |
| ) |
| |
| # Libraries |
| |
| cc_library( |
| name = "generated_headers", |
| hdrs = [ |
| ":gen_build_version", |
| ":gen_core_tables_unified1", |
| ":gen_enum_string_mapping", |
| ":gen_extinst_lang_headers_DebugInfo", |
| ":gen_extinst_lang_headers_OpenCLDebugInfo100", |
| ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100", |
| ":gen_glsl_tables_unified1", |
| ":gen_opencl_tables_unified1", |
| ":gen_registry_tables", |
| ":gen_vendor_tables_debuginfo", |
| ":gen_vendor_tables_nonsemantic_clspvreflection", |
| ":gen_vendor_tables_opencl_debuginfo_100", |
| ":gen_vendor_tables_nonsemantic_shader_debuginfo_100", |
| ":gen_vendor_tables_spv_amd_gcn_shader", |
| ":gen_vendor_tables_spv_amd_shader_ballot", |
| ":gen_vendor_tables_spv_amd_shader_explicit_vertex_parameter", |
| ":gen_vendor_tables_spv_amd_shader_trinary_minmax", |
| ], |
| copts = COMMON_COPTS, |
| ) |
| |
| cc_library( |
| name = "spirv_tools_headers", |
| hdrs = glob([ |
| "include/spirv-tools/libspirv.h", |
| "include/spirv-tools/libspirv.hpp", |
| "source/*.h", |
| "source/util/*.h", |
| "source/val/*.h", |
| ]), |
| copts = COMMON_COPTS, |
| includes = ["source"], |
| deps = [ |
| "@spirv_headers//:spirv_c_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools", |
| srcs = glob([ |
| "source/*.cpp", |
| "source/util/*.cpp", |
| "source/val/*.cpp", |
| ]), |
| hdrs = [ |
| "include/spirv-tools/libspirv.h", |
| "include/spirv-tools/libspirv.hpp", |
| ], |
| copts = COMMON_COPTS + select({ |
| "@bazel_tools//src/conditions:windows": [""], |
| "//conditions:default": ["-Wno-implicit-fallthrough"], |
| }), |
| includes = ["include"], |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":generated_headers", |
| ":spirv_tools_headers", |
| "@spirv_headers//:spirv_c_headers", |
| "@spirv_headers//:spirv_common_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_comp", |
| srcs = glob([ |
| "source/comp/*.cpp", |
| "source/comp/*.h", |
| ]), |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":generated_headers", |
| ":spirv_tools", |
| ":spirv_tools_headers", |
| "@spirv_headers//:spirv_common_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_opt_headers", |
| hdrs = glob(["source/opt/*.h"]), |
| copts = COMMON_COPTS, |
| ) |
| |
| cc_library( |
| name = "spirv_tools_opt", |
| srcs = glob(["source/opt/*.cpp"]), |
| hdrs = [ |
| "include/spirv-tools/instrument.hpp", |
| "include/spirv-tools/optimizer.hpp", |
| ], |
| copts = COMMON_COPTS, |
| includes = ["include"], |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_headers", |
| ":spirv_tools_opt_headers", |
| "@spirv_headers//:spirv_common_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_reduce", |
| srcs = glob(["source/reduce/*.cpp"]), |
| hdrs = glob(["source/reduce/*.h"]), |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_link", |
| srcs = glob(["source/link/*.cpp"]), |
| hdrs = ["include/spirv-tools/linker.hpp"], |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_lint", |
| srcs = glob(["source/lint/*.cpp", "source/lint/*.h"]), |
| hdrs = ["include/spirv-tools/linter.hpp"], |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt", |
| ], |
| ) |
| |
| cc_library( |
| name = "tools_util", |
| srcs = glob(["tools/util/*.cpp"]), |
| hdrs = glob(["tools/util/*.h"]), |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [":spirv_tools"], |
| ) |
| |
| # Tools |
| |
| cc_binary( |
| name = "spirv-as", |
| srcs = [ |
| "tools/as/as.cpp", |
| "tools/io.h", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-dis", |
| srcs = [ |
| "tools/dis/dis.cpp", |
| "tools/io.h", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-val", |
| srcs = [ |
| "tools/io.h", |
| "tools/val/val.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-opt", |
| srcs = [ |
| "tools/io.h", |
| "tools/opt/opt.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-reduce", |
| srcs = [ |
| "tools/io.h", |
| "tools/reduce/reduce.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt", |
| ":spirv_tools_reduce", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-link", |
| srcs = [ |
| "tools/io.h", |
| "tools/link/linker.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_link", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-lint", |
| srcs = [ |
| "tools/io.h", |
| "tools/lint/lint.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_lint", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-cfg", |
| srcs = [ |
| "tools/cfg/bin_to_dot.cpp", |
| "tools/cfg/bin_to_dot.h", |
| "tools/cfg/cfg.cpp", |
| "tools/io.h", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [":spirv_tools"], |
| ) |
| |
| # Unit tests |
| |
| cc_library( |
| name = "test_common", |
| testonly = 1, |
| srcs = [ |
| "test/test_fixture.h", |
| "test/unit_spirv.cpp", |
| "test/unit_spirv.h", |
| ], |
| compatible_with = [], |
| copts = TEST_COPTS, |
| includes = ["test"], |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools", |
| "@com_google_googletest//:gtest", |
| ], |
| ) |
| |
| cc_library( |
| name = "link_test_common", |
| testonly = 1, |
| srcs = ["test/link/linker_fixture.h"], |
| compatible_with = [], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_link", |
| ":test_common", |
| ], |
| ) |
| |
| cc_library( |
| name = "opt_test_common", |
| testonly = 1, |
| srcs = ["test/opt/pass_utils.cpp"], |
| hdrs = [ |
| "test/opt/assembly_builder.h", |
| "test/opt/function_utils.h", |
| "test/opt/module_utils.h", |
| "test/opt/pass_fixture.h", |
| "test/opt/pass_utils.h", |
| ], |
| compatible_with = [], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_opt", |
| ":test_common", |
| ], |
| ) |
| |
| cc_library( |
| name = "reduce_test_common", |
| testonly = 1, |
| srcs = [ |
| "test/reduce/reduce_test_util.cpp", |
| "tools/io.h", |
| ], |
| hdrs = ["test/reduce/reduce_test_util.h"], |
| compatible_with = [], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_reduce", |
| ":test_common", |
| ], |
| ) |
| |
| cc_library( |
| name = "val_test_common", |
| testonly = 1, |
| srcs = [ |
| "test/val/val_code_generator.cpp", |
| "test/val/val_fixtures.h", |
| ], |
| hdrs = [ |
| "test/val/val_code_generator.h", |
| ], |
| compatible_with = [], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [":test_common"], |
| ) |
| |
| # PCH (precompiled header) tests only work when using CMake and MSVC on Windows, |
| # so they will be skipped in the Bazel builds. |
| |
| [base_test( |
| name = f[5:-4], # strip test/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/*.cpp"], |
| exclude = [ |
| "test/cpp_interface_test.cpp", # has its own base_test below. |
| "test/log_test.cpp", # has its own base_test below. |
| "test/pch_test.cpp", # pch tests are skipped. |
| "test/timer_test.cpp", # has its own base_test below. |
| ], |
| )] |
| |
| # This test uses unistd.h and does not run on Windows. |
| base_test( |
| name = "timer_test", |
| srcs = select({ |
| "@bazel_tools//src/conditions:windows": [], |
| "//conditions:default": ["test/timer_test.cpp"], |
| }), |
| ) |
| |
| base_test( |
| name = "cpp_interface_test", |
| srcs = ["test/cpp_interface_test.cpp"], |
| deps = [":spirv_tools_opt"], |
| ) |
| |
| base_test( |
| name = "log_test", |
| srcs = ["test/log_test.cpp"], |
| deps = [":spirv_tools_opt"], |
| ) |
| |
| [link_test( |
| name = f[10:-4], # strip test/link/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/link/*.cpp"], |
| )] |
| |
| [lint_test( |
| name = f[10:-4], # strip test/lint/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/lint/*.cpp"], |
| )] |
| |
| [opt_test( |
| name = f[9:-4], # strip test/opt/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/opt/*.cpp"], |
| # pch tests are skipped. |
| exclude = ["test/opt/pch_test_opt.cpp"], |
| )] |
| |
| [opt_test( |
| name = "dom_tree_" + f[24:-4], # strip test/opt/dominator_tree/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/opt/dominator_tree/*.cpp"], |
| # pch tests are skipped. |
| exclude = ["test/opt/dominator_tree/pch_test_opt_dom.cpp"], |
| )] |
| |
| [opt_test( |
| name = "loop_" + f[28:-4], # strip test/opt/loop_optimizations/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/opt/loop_optimizations/*.cpp"], |
| # pch tests are skipped. |
| exclude = ["test/opt/loop_optimizations/pch_test_opt_loop.cpp"], |
| )] |
| |
| [reduce_test( |
| name = f[12:-4], # strip test/reduce/, .cpp |
| srcs = [f], |
| ) for f in glob(["test/reduce/*.cpp"])] |
| |
| [util_test( |
| name = f[10:-4], # strip test/util/, .cpp |
| srcs = [f], |
| ) for f in glob(["test/util/*.cpp"])] |
| |
| [val_test( |
| name = f[9:-4], # strip test/val/, .cpp |
| srcs = [f], |
| ) for f in glob( |
| ["test/val/*.cpp"], |
| exclude = [ |
| "test/val/pch_test_val.cpp", # pch tests are skipped. |
| ], |
| )] |
| |