diff options
author | Ehsan <ehsannas@gmail.com> | 2019-09-24 22:56:59 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-24 22:56:59 +0300 |
commit | a03cd1f3eb282a5d58a601ad9337a03c7eb412f4 (patch) | |
tree | 97b5aeaf47d2b36875438c6fd6c19ebf1f9bd7ec /BUILD.bazel | |
parent | 6f26d9ad81f2a6f8817ab2ae3c22a20f99955888 (diff) |
Add Bazel build configuration. (#2891)
* Add Bazel build configuration.
* fix for windows.
* Update doc file.
* Add tests that were accidentally skipped by Bazel
* Update doc file.
Diffstat (limited to 'BUILD.bazel')
-rw-r--r-- | BUILD.bazel | 526 |
1 files changed, 526 insertions, 0 deletions
diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 000000000..bac1a6606 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,526 @@ +load( + ":build_defs.bzl", + "COMMON_COPTS", + "DEBUGINFO_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", + "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("1.0") + +generate_core_tables("1.1") + +generate_core_tables("1.2") + +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_extinst_lang_headers("DebugInfo", DEBUGINFO_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)", + 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)", + tools = [":update_build_version"], +) + +# Libraries + +cc_library( + name = "generated_headers", + hdrs = [ + ":gen_build_version", + ":gen_core_tables_1.0", + ":gen_core_tables_1.1", + ":gen_core_tables_1.2", + ":gen_core_tables_unified1", + ":gen_enum_string_mapping", + ":gen_extinst_lang_headers_DebugInfo", + ":gen_glsl_tables_unified1", + ":gen_opencl_tables_unified1", + ":gen_registry_tables", + ":gen_vendor_tables_debuginfo", + ":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 = "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-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"], +)] + +[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/val_capability_test.cpp", # has its own val_test below. + "test/val/val_limits_test.cpp", # has its own val_test below. + "test/val/pch_test_val.cpp", # pch tests are skipped. + ], +)] + +val_test( + name = "capability", + size = "large", + srcs = ["test/val/val_capability_test.cpp"], +) + +val_test( + name = "limits", + size = "large", + srcs = ["test/val/val_limits_test.cpp"], +) |