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)", 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) $$(dirname $(location CHANGES)) $(location build-version.inc)", cmd_bat = "set SOURCE_DATE_EPOCH=0 && $(location //:update_build_version) \"$(location CHANGES)\\..\" $(location build-version.inc)", 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. ], )]