| load( |
| ":build_defs.bzl", |
| "CLDEBUGINFO100_GRAMMAR_JSON_FILE", |
| "COMMON_COPTS", |
| "DEBUGINFO_GRAMMAR_JSON_FILE", |
| "SHDEBUGINFO100_GRAMMAR_JSON_FILE", |
| "TEST_COPTS", |
| "generate_core_tables", |
| "generate_enum_string_mapping", |
| "generate_extinst_lang_headers", |
| "generate_glsl_tables", |
| "generate_opencl_tables", |
| "generate_vendor_tables", |
| "incompatible_with", |
| ) |
| |
| package( |
| default_visibility = ["//visibility:private"], |
| features = [ |
| "layering_check", |
| ], |
| ) |
| |
| 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(version = "unified1") |
| |
| generate_enum_string_mapping(version = "unified1") |
| |
| generate_opencl_tables(version = "unified1") |
| |
| generate_glsl_tables(version = "unified1") |
| |
| generate_vendor_tables(extension = "spv-amd-shader-explicit-vertex-parameter") |
| |
| generate_vendor_tables(extension = "spv-amd-shader-trinary-minmax") |
| |
| generate_vendor_tables(extension = "spv-amd-gcn-shader") |
| |
| generate_vendor_tables(extension = "spv-amd-shader-ballot") |
| |
| generate_vendor_tables(extension = "debuginfo") |
| |
| generate_vendor_tables(extension = "nonsemantic.clspvreflection") |
| |
| generate_vendor_tables( |
| extension = "opencl.debuginfo.100", |
| operand_kind_prefix = "CLDEBUG100_", |
| ) |
| |
| generate_vendor_tables( |
| extension = "nonsemantic.shader.debuginfo.100", |
| operand_kind_prefix = "SHDEBUG100_", |
| ) |
| |
| generate_extinst_lang_headers( |
| name = "DebugInfo", |
| grammar = DEBUGINFO_GRAMMAR_JSON_FILE, |
| ) |
| |
| generate_extinst_lang_headers( |
| name = "OpenCLDebugInfo100", |
| grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, |
| ) |
| |
| generate_extinst_lang_headers( |
| name = "NonSemanticShaderDebugInfo100", |
| grammar = SHDEBUGINFO100_GRAMMAR_JSON_FILE, |
| ) |
| |
| py_binary( |
| name = "generate_registry_tables", |
| srcs = ["utils/generate_registry_tables.py"], |
| ) |
| |
| genrule( |
| name = "generators_inc", |
| 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)", |
| tools = [":generate_registry_tables"], |
| ) |
| |
| py_binary( |
| name = "update_build_version", |
| srcs = ["utils/update_build_version.py"], |
| ) |
| |
| genrule( |
| name = "build_version_inc", |
| 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)", |
| local = True, |
| tools = [":update_build_version"], |
| ) |
| |
| # Libraries |
| |
| cc_library( |
| name = "spirv_tools", |
| hdrs = [ |
| "include/spirv-tools/libspirv.h", |
| "include/spirv-tools/libspirv.hpp", |
| ], |
| copts = COMMON_COPTS, |
| includes = ["include"], |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_internal", |
| srcs = glob([ |
| "source/*.cpp", |
| "source/util/*.cpp", |
| "source/val/*.cpp", |
| ]) + [ |
| ":build_version_inc", |
| ":gen_core_tables_unified1", |
| ":gen_enum_string_mapping", |
| ":gen_extinst_lang_headers_DebugInfo", |
| ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100", |
| ":gen_extinst_lang_headers_OpenCLDebugInfo100", |
| ":gen_glsl_tables_unified1", |
| ":gen_opencl_tables_unified1", |
| ":gen_vendor_tables_debuginfo", |
| ":gen_vendor_tables_nonsemantic_clspvreflection", |
| ":gen_vendor_tables_nonsemantic_shader_debuginfo_100", |
| ":gen_vendor_tables_opencl_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", |
| ":generators_inc", |
| ], |
| hdrs = [ |
| "include/spirv-tools/libspirv.h", |
| "include/spirv-tools/libspirv.hpp", |
| ":gen_extinst_lang_headers_DebugInfo", |
| ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100", |
| ":gen_extinst_lang_headers_OpenCLDebugInfo100", |
| ] + glob([ |
| "source/*.h", |
| "source/util/*.h", |
| "source/val/*.h", |
| ]), |
| copts = COMMON_COPTS, |
| includes = ["include"], |
| deps = [ |
| "@spirv_headers//:spirv_common_headers", |
| "@spirv_headers//:spirv_cpp11_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_opt", |
| hdrs = [ |
| "include/spirv-tools/instrument.hpp", |
| "include/spirv-tools/optimizer.hpp", |
| ], |
| copts = COMMON_COPTS, |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt_internal", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_opt_internal", |
| srcs = glob(["source/opt/*.cpp"]) + [ |
| ":gen_vendor_tables_spv_amd_shader_ballot", |
| ], |
| hdrs = glob(["source/opt/*.h"]) + [ |
| "include/spirv-tools/instrument.hpp", |
| "include/spirv-tools/optimizer.hpp", |
| ], |
| copts = COMMON_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| "@spirv_headers//:spirv_common_headers", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_reduce", |
| srcs = glob(["source/reduce/*.cpp"]), |
| hdrs = glob(["source/reduce/*.h"]), |
| copts = COMMON_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ], |
| ) |
| |
| 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_internal", |
| ":spirv_tools_opt_internal", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_lint_internal", |
| srcs = glob([ |
| "source/lint/*.cpp", |
| "source/lint/*.h", |
| ]), |
| hdrs = ["include/spirv-tools/linter.hpp"] + glob([ |
| "source/lint/*.h", |
| ]), |
| copts = COMMON_COPTS, |
| includes = ["include"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ], |
| ) |
| |
| cc_library( |
| name = "spirv_tools_lint", |
| hdrs = ["include/spirv-tools/linter.hpp"], |
| copts = COMMON_COPTS, |
| includes = ["include"], |
| linkstatic = 1, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_lint_internal", |
| ], |
| ) |
| |
| cc_library( |
| name = "tools_util", |
| srcs = glob(["tools/util/*.cpp"]), |
| hdrs = glob(["tools/util/*.h"]), |
| copts = COMMON_COPTS, |
| deps = [":spirv_tools"], |
| ) |
| |
| cc_library( |
| name = "tools_io", |
| hdrs = ["tools/io.h"], |
| copts = COMMON_COPTS, |
| ) |
| |
| # Tools |
| |
| cc_binary( |
| name = "spirv-as", |
| srcs = [ |
| "tools/as/as.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-dis", |
| srcs = [ |
| "tools/dis/dis.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-objdump", |
| srcs = [ |
| "tools/objdump/extract_source.cpp", |
| "tools/objdump/extract_source.h", |
| "tools/objdump/objdump.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ":tools_io", |
| ":tools_util", |
| "@spirv_headers//:spirv_cpp_headers", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-val", |
| srcs = [ |
| "tools/val/val.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-opt", |
| srcs = [ |
| "tools/opt/opt.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-reduce", |
| srcs = [ |
| "tools/reduce/reduce.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ":spirv_tools_reduce", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-link", |
| srcs = [ |
| "tools/link/linker.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_link", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-lint", |
| srcs = [ |
| "tools/lint/lint.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_lint", |
| ":spirv_tools_opt_internal", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| cc_binary( |
| name = "spirv-cfg", |
| srcs = [ |
| "tools/cfg/bin_to_dot.cpp", |
| "tools/cfg/bin_to_dot.h", |
| "tools/cfg/cfg.cpp", |
| ], |
| copts = COMMON_COPTS, |
| visibility = ["//visibility:public"], |
| deps = [ |
| ":spirv_tools_internal", |
| ":tools_io", |
| ":tools_util", |
| ], |
| ) |
| |
| # Unit tests |
| |
| cc_library( |
| name = "test_lib", |
| testonly = 1, |
| srcs = [ |
| "test/unit_spirv.cpp", |
| ], |
| hdrs = [ |
| "test/test_fixture.h", |
| "test/unit_spirv.h", |
| ], |
| copts = TEST_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| "@com_google_googletest//:gtest", |
| ], |
| ) |
| |
| # PCH (precompiled header) tests only work when using CMake and MSVC on Windows, |
| # so they will be skipped in the Bazel builds. |
| |
| [cc_test( |
| name = "base_{testcase}_test".format(testcase = f[len("test/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS + ["-DTESTING"], |
| linkstatic = 1, |
| target_compatible_with = { |
| "test/timer_test.cpp": incompatible_with(["@bazel_tools//src/conditions:windows"]), |
| }.get(f, []), |
| deps = [ |
| "tools_util", |
| ":spirv_tools_internal", |
| ":test_lib", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| [ |
| "test/*_test.cpp", |
| "test/tools/*_test.cpp", |
| ], |
| exclude = [ |
| "test/cpp_interface_test.cpp", |
| "test/log_test.cpp", |
| "test/pch_test.cpp", |
| ], |
| )] |
| |
| cc_test( |
| name = "base_cpp_interface_test", |
| size = "small", |
| srcs = ["test/cpp_interface_test.cpp"], |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_opt_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| "@spirv_headers//:spirv_cpp11_headers", |
| ], |
| ) |
| |
| cc_test( |
| name = "base_ilist_test", |
| size = "small", |
| srcs = ["test/util/ilist_test.cpp"], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) |
| |
| cc_test( |
| name = "base_log_test", |
| size = "small", |
| srcs = ["test/log_test.cpp"], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_opt_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) |
| |
| cc_library( |
| name = "link_test_lib", |
| testonly = 1, |
| hdrs = ["test/link/linker_fixture.h"], |
| copts = TEST_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_link", |
| ":test_lib", |
| "@com_google_effcee//:effcee", |
| "@com_googlesource_code_re2//:re2", |
| ], |
| ) |
| |
| [cc_test( |
| name = "link_{testcase}_test".format(testcase = f[len("test/link/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":link_test_lib", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| ["test/link/*_test.cpp"], |
| )] |
| |
| [cc_test( |
| name = "lint_{testcase}_test".format(testcase = f[len("test/lint/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_lint_internal", |
| ":spirv_tools_opt_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| ["test/lint/*_test.cpp"], |
| )] |
| |
| cc_library( |
| name = "opt_test_lib", |
| 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", |
| ], |
| copts = TEST_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| "@com_google_effcee//:effcee", |
| "@com_google_googletest//:gtest", |
| ], |
| ) |
| |
| [cc_test( |
| name = "opt_{testcase}_test".format(testcase = f[len("test/opt/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":opt_test_lib", |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ":test_lib", |
| "@com_google_effcee//:effcee", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob(["test/opt/*_test.cpp"])] |
| |
| [cc_test( |
| name = "opt_dom_tree_{testcase}_test".format(testcase = f[len("test/opt/dominator_tree/"):-len(".cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":opt_test_lib", |
| ":spirv_tools_opt_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| ["test/opt/dominator_tree/*.cpp"], |
| exclude = ["test/opt/dominator_tree/pch_test_opt_dom.cpp"], |
| )] |
| |
| [cc_test( |
| name = "opt_loop_{testcase}_test".format(testcase = f[len("test/opt/loop_optimizations/"):-len(".cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":opt_test_lib", |
| ":spirv_tools", |
| ":spirv_tools_opt_internal", |
| "@com_google_effcee//:effcee", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| ["test/opt/loop_optimizations/*.cpp"], |
| exclude = ["test/opt/loop_optimizations/pch_test_opt_loop.cpp"], |
| )] |
| |
| cc_library( |
| name = "reduce_test_lib", |
| testonly = 1, |
| srcs = [ |
| "test/reduce/reduce_test_util.cpp", |
| ], |
| hdrs = ["test/reduce/reduce_test_util.h"], |
| copts = TEST_COPTS, |
| deps = [ |
| ":spirv_tools", |
| ":spirv_tools_opt_internal", |
| ":spirv_tools_reduce", |
| ":test_lib", |
| ":tools_io", |
| "@com_google_googletest//:gtest", |
| ], |
| ) |
| |
| [cc_test( |
| name = "reduce_{testcase}_test".format(testcase = f[len("test/reduce/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":reduce_test_lib", |
| ":spirv_tools_internal", |
| ":spirv_tools_opt_internal", |
| ":spirv_tools_reduce", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob(["test/reduce/*_test.cpp"])] |
| |
| [cc_test( |
| name = "util_{testcase}_test".format(testcase = f[len("test/util/"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_internal", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob(["test/util/*_test.cpp"])] |
| |
| cc_library( |
| name = "val_test_lib", |
| testonly = 1, |
| srcs = [ |
| "test/val/val_code_generator.cpp", |
| ], |
| hdrs = [ |
| "test/val/val_code_generator.h", |
| "test/val/val_fixtures.h", |
| ], |
| copts = TEST_COPTS, |
| deps = [ |
| ":spirv_tools_internal", |
| ":test_lib", |
| ], |
| ) |
| |
| [cc_test( |
| name = "val_{testcase}_test".format(testcase = f[len("test/val/val_"):-len("_test.cpp")]), |
| size = "small", |
| srcs = [f], |
| copts = TEST_COPTS, |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_internal", |
| ":test_lib", |
| ":val_test_lib", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) for f in glob( |
| ["test/val/val_*_test.cpp"], |
| exclude = [ |
| "test/val/val_capability_test.cpp", |
| "test/val/val_limits_test.cpp", |
| ], |
| )] |
| |
| cc_test( |
| name = "val_capability_test", |
| size = "large", |
| timeout = "long", |
| srcs = ["test/val/val_capability_test.cpp"], |
| copts = TEST_COPTS + ["-O3"], |
| linkstatic = 1, |
| deps = [ |
| ":spirv_tools_internal", |
| ":test_lib", |
| ":val_test_lib", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) |
| |
| cc_test( |
| name = "val_limits_test", |
| size = "large", |
| timeout = "long", |
| srcs = ["test/val/val_limits_test.cpp"], |
| copts = TEST_COPTS + [ |
| "-O3", |
| ], |
| linkstatic = 1, |
| deps = [ |
| ":test_lib", |
| ":val_test_lib", |
| "@com_google_googletest//:gtest", |
| "@com_google_googletest//:gtest_main", |
| ], |
| ) |