mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-23 20:20:06 +00:00
8966cc2b27
Co-authored-by: baldurk <baldurk@baldurk.org>
523 lines
12 KiB
Python
523 lines
12 KiB
Python
load(
|
|
":build_defs.bzl",
|
|
"COMMON_COPTS",
|
|
"DEBUGINFO_GRAMMAR_JSON_FILE",
|
|
"CLDEBUGINFO100_GRAMMAR_JSON_FILE",
|
|
"VKDEBUGINFO100_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",
|
|
"generate_vendor_tables_local",
|
|
"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("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_local("nonsemantic.vulkan.debuginfo.100", "VKDEBUG100_")
|
|
|
|
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("NonSemanticVulkanDebugInfo100", VKDEBUGINFO100_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_unified1",
|
|
":gen_enum_string_mapping",
|
|
":gen_extinst_lang_headers_DebugInfo",
|
|
":gen_extinst_lang_headers_OpenCLDebugInfo100",
|
|
":gen_extinst_lang_headers_NonSemanticVulkanDebugInfo100",
|
|
":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_vulkan_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 = "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/pch_test_val.cpp", # pch tests are skipped.
|
|
],
|
|
)]
|
|
|