| COMMON_COPTS = [ |
| "-DSPIRV_CHECK_CONTEXT", |
| "-DSPIRV_COLOR_TERMINAL", |
| ] + select({ |
| "@bazel_tools//src/conditions:windows": [""], |
| "//conditions:default": [ |
| "-DSPIRV_LINUX", |
| "-DSPIRV_TIMER_ENABLED", |
| "-Wall", |
| "-Wextra", |
| "-Wnon-virtual-dtor", |
| "-Wno-missing-field-initializers", |
| "-Werror", |
| "-std=c++11", |
| "-fvisibility=hidden", |
| "-fno-exceptions", |
| "-fno-rtti", |
| "-Wno-long-long", |
| "-Wshadow", |
| "-Wundef", |
| "-Wconversion", |
| "-Wno-sign-conversion", |
| ], |
| }) |
| |
| TEST_COPTS = COMMON_COPTS + select({ |
| "@bazel_tools//src/conditions:windows": [ |
| # Disable C4503 "decorated name length exceeded" warning, |
| # triggered by some heavily templated types. |
| # We don't care much about that in test code. |
| # Important to do since we have warnings-as-errors. |
| "/wd4503" |
| ], |
| "//conditions:default": [ |
| "-Wno-undef", |
| "-Wno-self-assign", |
| "-Wno-shadow", |
| "-Wno-unused-parameter" |
| ], |
| }) |
| |
| DEBUGINFO_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_debuginfo_grammar_unified1" |
| CLDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_opencl_debuginfo_100_grammar_unified1" |
| VKDEBUGINFO100_GRAMMAR_JSON_FILE = "source/extinst.nonsemantic.vulkan.debuginfo.100.grammar.json" |
| |
| def generate_core_tables(version = None): |
| if not version: |
| fail("Must specify version", "version") |
| grammars = [ |
| "@spirv_headers//:spirv_core_grammar_" + version, |
| DEBUGINFO_GRAMMAR_JSON_FILE, |
| CLDEBUGINFO100_GRAMMAR_JSON_FILE, |
| ] |
| outs = [ |
| "core.insts-{}.inc".format(version), |
| "operand.kinds-{}.inc".format(version), |
| ] |
| fmtargs = grammars + outs |
| native.genrule( |
| name = "gen_core_tables_" + version, |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--spirv-core-grammar=$(location {0}) " + |
| "--extinst-debuginfo-grammar=$(location {1}) " + |
| "--extinst-cldebuginfo100-grammar=$(location {2}) " + |
| "--core-insts-output=$(location {3}) " + |
| "--operand-kinds-output=$(location {4})" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_enum_string_mapping(version = None): |
| if not version: |
| fail("Must specify version", "version") |
| grammars = [ |
| "@spirv_headers//:spirv_core_grammar_" + version, |
| DEBUGINFO_GRAMMAR_JSON_FILE, |
| CLDEBUGINFO100_GRAMMAR_JSON_FILE, |
| ] |
| outs = [ |
| "extension_enum.inc", |
| "enum_string_mapping.inc", |
| ] |
| fmtargs = grammars + outs |
| native.genrule( |
| name = "gen_enum_string_mapping", |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--spirv-core-grammar=$(location {0}) " + |
| "--extinst-debuginfo-grammar=$(location {1}) " + |
| "--extinst-cldebuginfo100-grammar=$(location {2}) " + |
| "--extension-enum-output=$(location {3}) " + |
| "--enum-string-mapping-output=$(location {4})" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_opencl_tables(version = None): |
| if not version: |
| fail("Must specify version", "version") |
| grammars = [ |
| "@spirv_headers//:spirv_opencl_grammar_" + version, |
| ] |
| outs = ["opencl.std.insts.inc"] |
| fmtargs = grammars + outs |
| native.genrule( |
| name = "gen_opencl_tables_" + version, |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--extinst-opencl-grammar=$(location {0}) " + |
| "--opencl-insts-output=$(location {1})" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_glsl_tables(version = None): |
| if not version: |
| fail("Must specify version", "version") |
| grammars = [ |
| "@spirv_headers//:spirv_glsl_grammar_" + version, |
| ] |
| outs = ["glsl.std.450.insts.inc"] |
| fmtargs = grammars + outs |
| native.genrule( |
| name = "gen_glsl_tables_" + version, |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--extinst-glsl-grammar=$(location {0}) " + |
| "--glsl-insts-output=$(location {1})" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_vendor_tables(extension, operand_kind_prefix = ""): |
| if not extension: |
| fail("Must specify extension", "extension") |
| extension_rule = extension.replace("-", "_").replace(".", "_") |
| grammars = ["@spirv_headers//:spirv_ext_inst_{}_grammar_unified1".format(extension_rule)] |
| outs = ["{}.insts.inc".format(extension)] |
| prefices = [operand_kind_prefix] |
| fmtargs = grammars + outs + prefices |
| native.genrule( |
| name = "gen_vendor_tables_" + extension_rule, |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--extinst-vendor-grammar=$(location {0}) " + |
| "--vendor-insts-output=$(location {1}) " + |
| "--vendor-operand-kind-prefix={2}" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_vendor_tables_local(extension, operand_kind_prefix = ""): |
| if not extension: |
| fail("Must specify extension", "extension") |
| extension_rule = extension.replace("-", "_").replace(".", "_") |
| grammars = ["source/extinst.{}.grammar.json".format(extension)] |
| outs = ["{}.insts.inc".format(extension)] |
| prefices = [operand_kind_prefix] |
| fmtargs = grammars + outs + prefices |
| native.genrule( |
| name = "gen_vendor_tables_" + extension_rule, |
| srcs = grammars, |
| outs = outs, |
| cmd = ( |
| "$(location :generate_grammar_tables) " + |
| "--extinst-vendor-grammar=$(location {0}) " + |
| "--vendor-insts-output=$(location {1}) " + |
| "--vendor-operand-kind-prefix={2}" |
| ).format(*fmtargs), |
| tools = [":generate_grammar_tables"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def generate_extinst_lang_headers(name, grammar = None): |
| if not grammar: |
| fail("Must specify grammar", "grammar") |
| outs = [name + ".h"] |
| fmtargs = outs |
| native.genrule( |
| name = "gen_extinst_lang_headers_" + name, |
| srcs = [grammar], |
| outs = outs, |
| cmd = ( |
| "$(location :generate_language_headers) " + |
| "--extinst-grammar=$< " + |
| "--extinst-output-path=$(location {0})" |
| ).format(*fmtargs), |
| tools = [":generate_language_headers"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| def base_test(name, srcs, deps = []): |
| if srcs == []: |
| return |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "base_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":test_common", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def lint_test(name, srcs, deps = []): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "lint_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":spirv_tools_lint", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def link_test(name, srcs, deps = []): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "link_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":link_test_common", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def opt_test(name, srcs, deps = []): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "opt_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":opt_test_common", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def reduce_test(name, srcs, deps = []): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "reduce_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":reduce_test_common", |
| ":spirv_tools_reduce", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def util_test(name, srcs, deps = []): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| native.cc_test( |
| name = "util_" + name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS, |
| size = "large", |
| deps = [ |
| ":opt_test_common", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| ) |
| |
| def val_test(name, srcs = [], copts = [], deps = [], **kwargs): |
| if name[-5:] != "_test": |
| name = name + "_test" |
| if name[:4] != "val_": |
| name = "val_" + name |
| native.cc_test( |
| name = name, |
| srcs = srcs, |
| compatible_with = [], |
| copts = TEST_COPTS + copts, |
| size = "large", |
| deps = [ |
| ":val_test_common", |
| "@com_google_googletest//:gtest_main", |
| "@com_google_googletest//:gtest", |
| "@com_google_effcee//:effcee", |
| ] + deps, |
| **kwargs |
| ) |