2022-12-20 15:54:46 +00:00
|
|
|
"""Constants and macros for spirv-tools BUILD."""
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
COMMON_COPTS = [
|
2022-12-20 15:54:46 +00:00
|
|
|
"-DSPIRV_CHECK_CONTEXT",
|
|
|
|
"-DSPIRV_COLOR_TERMINAL",
|
|
|
|
] + select({
|
2022-12-22 13:13:40 +00:00
|
|
|
"@platforms//os:windows": [],
|
2019-09-24 19:56:59 +00:00
|
|
|
"//conditions:default": [
|
|
|
|
"-DSPIRV_LINUX",
|
|
|
|
"-DSPIRV_TIMER_ENABLED",
|
2022-12-20 15:54:46 +00:00
|
|
|
"-fvisibility=hidden",
|
|
|
|
"-fno-exceptions",
|
|
|
|
"-fno-rtti",
|
2019-09-24 19:56:59 +00:00
|
|
|
"-Wall",
|
|
|
|
"-Wextra",
|
|
|
|
"-Wnon-virtual-dtor",
|
|
|
|
"-Wno-missing-field-initializers",
|
|
|
|
"-Werror",
|
|
|
|
"-Wno-long-long",
|
|
|
|
"-Wshadow",
|
|
|
|
"-Wundef",
|
|
|
|
"-Wconversion",
|
|
|
|
"-Wno-sign-conversion",
|
|
|
|
],
|
|
|
|
})
|
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
TEST_COPTS = COMMON_COPTS + [
|
|
|
|
] + select({
|
2022-12-22 13:13:40 +00:00
|
|
|
"@platforms//os:windows": [
|
2019-09-27 13:13:32 +00:00
|
|
|
# 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.
|
2022-12-20 15:54:46 +00:00
|
|
|
"/wd4503",
|
2019-09-27 13:13:32 +00:00
|
|
|
],
|
2019-09-24 19:56:59 +00:00
|
|
|
"//conditions:default": [
|
|
|
|
"-Wno-undef",
|
|
|
|
"-Wno-self-assign",
|
|
|
|
"-Wno-shadow",
|
2022-12-20 15:54:46 +00:00
|
|
|
"-Wno-unused-parameter",
|
2019-09-24 19:56:59 +00:00
|
|
|
],
|
|
|
|
})
|
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
def incompatible_with(incompatible_constraints):
|
|
|
|
return select(_merge_dicts([{"//conditions:default": []}, {
|
|
|
|
constraint: ["@platforms//:incompatible"]
|
|
|
|
for constraint in incompatible_constraints
|
|
|
|
}]))
|
|
|
|
|
2020-07-30 16:08:53 +00:00
|
|
|
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"
|
2021-09-15 18:38:53 +00:00
|
|
|
SHDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_nonsemantic_shader_debuginfo_100_grammar_unified1"
|
2019-09-24 19:56:59 +00:00
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
def _merge_dicts(dicts):
|
|
|
|
merged = {}
|
|
|
|
for d in dicts:
|
|
|
|
merged.update(d)
|
|
|
|
return merged
|
|
|
|
|
|
|
|
def generate_core_tables(version):
|
2019-09-24 19:56:59 +00:00
|
|
|
if not version:
|
|
|
|
fail("Must specify version", "version")
|
2022-12-20 15:54:46 +00:00
|
|
|
|
|
|
|
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]))
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
native.genrule(
|
|
|
|
name = "gen_core_tables_" + version,
|
2022-12-20 15:54:46 +00:00
|
|
|
srcs = grammars.values(),
|
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_grammar_tables"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
def generate_enum_string_mapping(version):
|
2019-09-24 19:56:59 +00:00
|
|
|
if not version:
|
|
|
|
fail("Must specify version", "version")
|
2022-12-20 15:54:46 +00:00
|
|
|
|
|
|
|
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]))
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
native.genrule(
|
|
|
|
name = "gen_enum_string_mapping",
|
2022-12-20 15:54:46 +00:00
|
|
|
srcs = grammars.values(),
|
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_grammar_tables"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
def generate_opencl_tables(version):
|
2019-09-24 19:56:59 +00:00
|
|
|
if not version:
|
|
|
|
fail("Must specify version", "version")
|
2022-12-20 15:54:46 +00:00
|
|
|
|
|
|
|
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]))
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
native.genrule(
|
|
|
|
name = "gen_opencl_tables_" + version,
|
2022-12-20 15:54:46 +00:00
|
|
|
srcs = grammars.values(),
|
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_grammar_tables"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|
|
|
|
|
2022-12-20 15:54:46 +00:00
|
|
|
def generate_glsl_tables(version):
|
2019-09-24 19:56:59 +00:00
|
|
|
if not version:
|
|
|
|
fail("Must specify version", "version")
|
2022-12-20 15:54:46 +00:00
|
|
|
|
|
|
|
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]))
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
native.genrule(
|
|
|
|
name = "gen_glsl_tables_" + version,
|
2022-12-20 15:54:46 +00:00
|
|
|
srcs = grammars.values(),
|
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_grammar_tables"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|
|
|
|
|
2019-12-19 22:16:26 +00:00
|
|
|
def generate_vendor_tables(extension, operand_kind_prefix = ""):
|
2019-09-24 19:56:59 +00:00
|
|
|
if not extension:
|
|
|
|
fail("Must specify extension", "extension")
|
2022-12-20 15:54:46 +00:00
|
|
|
|
2019-12-19 22:16:26 +00:00
|
|
|
extension_rule = extension.replace("-", "_").replace(".", "_")
|
2022-12-20 15:54:46 +00:00
|
|
|
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]))
|
|
|
|
|
2021-07-12 09:51:08 +00:00
|
|
|
native.genrule(
|
|
|
|
name = "gen_vendor_tables_" + extension_rule,
|
2022-12-20 15:54:46 +00:00
|
|
|
srcs = grammars.values(),
|
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_grammar_tables"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|
|
|
|
|
|
|
|
def generate_extinst_lang_headers(name, grammar = None):
|
|
|
|
if not grammar:
|
|
|
|
fail("Must specify grammar", "grammar")
|
2022-12-20 15:54:46 +00:00
|
|
|
outs = dict(
|
|
|
|
extinst_output_path = name + ".h",
|
|
|
|
)
|
|
|
|
cmd = (
|
|
|
|
"$(location :generate_language_headers)" +
|
|
|
|
" --extinst-grammar=$<" +
|
|
|
|
" --extinst-output-path=$(location {extinst_output_path})"
|
|
|
|
).format(**outs)
|
|
|
|
|
2019-09-24 19:56:59 +00:00
|
|
|
native.genrule(
|
2022-12-20 15:54:46 +00:00
|
|
|
name = "gen_extinst_lang_headers_{}".format(name),
|
2019-09-24 19:56:59 +00:00
|
|
|
srcs = [grammar],
|
2022-12-20 15:54:46 +00:00
|
|
|
outs = outs.values(),
|
|
|
|
cmd = cmd,
|
|
|
|
cmd_bat = cmd,
|
2023-06-21 19:32:27 +00:00
|
|
|
tools = [":generate_language_headers"],
|
2019-09-24 19:56:59 +00:00
|
|
|
visibility = ["//visibility:private"],
|
|
|
|
)
|