"""Constants and macros for spirv-tools BUILD.""" COMMON_COPTS = [ "-DSPIRV_CHECK_CONTEXT", "-DSPIRV_COLOR_TERMINAL", ] + select({ "@bazel_tools//src/conditions:windows": [], "//conditions:default": [ "-DSPIRV_LINUX", "-DSPIRV_TIMER_ENABLED", "-std=c++11", "-fvisibility=hidden", "-fno-exceptions", "-fno-rtti", "-Wall", "-Wextra", "-Wnon-virtual-dtor", "-Wno-missing-field-initializers", "-Werror", "-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", ], }) def incompatible_with(incompatible_constraints): return select(_merge_dicts([{"//conditions:default": []}, { constraint: ["@platforms//:incompatible"] for constraint in incompatible_constraints }])) 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" SHDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_nonsemantic_shader_debuginfo_100_grammar_unified1" def _merge_dicts(dicts): merged = {} for d in dicts: merged.update(d) return merged def generate_core_tables(version): if not version: fail("Must specify version", "version") grammars = dict( core_grammar = "@spirv_headers//:spirv_core_grammar_{}".format(version), debuginfo_grammar = DEBUGINFO_GRAMMAR_JSON_FILE, cldebuginfo_grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, ) outs = dict( core_insts_output = "core.insts-{}.inc".format(version), operand_kinds_output = "operand.kinds-{}.inc".format(version), ) cmd = ( "$(location :generate_grammar_tables)" + " --spirv-core-grammar=$(location {core_grammar})" + " --extinst-debuginfo-grammar=$(location {debuginfo_grammar})" + " --extinst-cldebuginfo100-grammar=$(location {cldebuginfo_grammar})" + " --core-insts-output=$(location {core_insts_output})" + " --operand-kinds-output=$(location {operand_kinds_output})" + " --output-language=c++" ).format(**_merge_dicts([grammars, outs])) native.genrule( name = "gen_core_tables_" + version, srcs = grammars.values(), outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_tools = [":generate_grammar_tables"], visibility = ["//visibility:private"], ) def generate_enum_string_mapping(version): if not version: fail("Must specify version", "version") grammars = dict( core_grammar = "@spirv_headers//:spirv_core_grammar_{}".format(version), debuginfo_grammar = DEBUGINFO_GRAMMAR_JSON_FILE, cldebuginfo_grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, ) outs = dict( extension_enum_ouput = "extension_enum.inc", enum_string_mapping_output = "enum_string_mapping.inc", ) cmd = ( "$(location :generate_grammar_tables)" + " --spirv-core-grammar=$(location {core_grammar})" + " --extinst-debuginfo-grammar=$(location {debuginfo_grammar})" + " --extinst-cldebuginfo100-grammar=$(location {cldebuginfo_grammar})" + " --extension-enum-output=$(location {extension_enum_ouput})" + " --enum-string-mapping-output=$(location {enum_string_mapping_output})" + " --output-language=c++" ).format(**_merge_dicts([grammars, outs])) native.genrule( name = "gen_enum_string_mapping", srcs = grammars.values(), outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_tools = [":generate_grammar_tables"], visibility = ["//visibility:private"], ) def generate_opencl_tables(version): if not version: fail("Must specify version", "version") grammars = dict( opencl_grammar = "@spirv_headers//:spirv_opencl_grammar_{}".format(version), ) outs = dict( opencl_insts_output = "opencl.std.insts.inc", ) cmd = ( "$(location :generate_grammar_tables)" + " --extinst-opencl-grammar=$(location {opencl_grammar})" + " --opencl-insts-output=$(location {opencl_insts_output})" ).format(**_merge_dicts([grammars, outs])) native.genrule( name = "gen_opencl_tables_" + version, srcs = grammars.values(), outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_tools = [":generate_grammar_tables"], visibility = ["//visibility:private"], ) def generate_glsl_tables(version): if not version: fail("Must specify version", "version") grammars = dict( gsls_grammar = "@spirv_headers//:spirv_glsl_grammar_{}".format(version), ) outs = dict( gsls_insts_outs = "glsl.std.450.insts.inc", ) cmd = ( "$(location :generate_grammar_tables)" + " --extinst-glsl-grammar=$(location {gsls_grammar})" + " --glsl-insts-output=$(location {gsls_insts_outs})" + " --output-language=c++" ).format(**_merge_dicts([grammars, outs])) native.genrule( name = "gen_glsl_tables_" + version, srcs = grammars.values(), outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_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 = dict( vendor_grammar = "@spirv_headers//:spirv_ext_inst_{}_grammar_unified1".format(extension_rule), ) outs = dict( vendor_insts_output = "{}.insts.inc".format(extension), ) cmd = ( "$(location :generate_grammar_tables)" + " --extinst-vendor-grammar=$(location {vendor_grammar})" + " --vendor-insts-output=$(location {vendor_insts_output})" + " --vendor-operand-kind-prefix={operand_kind_prefix}" ).format(operand_kind_prefix = operand_kind_prefix, **_merge_dicts([grammars, outs])) native.genrule( name = "gen_vendor_tables_" + extension_rule, srcs = grammars.values(), outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_tools = [":generate_grammar_tables"], visibility = ["//visibility:private"], ) def generate_extinst_lang_headers(name, grammar = None): if not grammar: fail("Must specify grammar", "grammar") outs = dict( extinst_output_path = name + ".h", ) cmd = ( "$(location :generate_language_headers)" + " --extinst-grammar=$<" + " --extinst-output-path=$(location {extinst_output_path})" ).format(**outs) native.genrule( name = "gen_extinst_lang_headers_{}".format(name), srcs = [grammar], outs = outs.values(), cmd = cmd, cmd_bat = cmd, exec_tools = [":generate_language_headers"], visibility = ["//visibility:private"], )