SPIRV-Tools/build_defs.bzl
David Neto 64f36ea529
Support OpenCL.DebugInfo.100 extended instruction set (#3080)
* Clone opencl.debuginfo.100 grammar from debuginfo grammar

Update version number to 200 revision 2

* Apply content from OpenCL.DebugInfo.100 extension text

* Rename grammar file

* Support OpenCL.DebugInfo.100 extended instructions

Add support for prefixing operand type names, to disambiguate
them between different instruction sets.

* Add tests for OpenCL.DebugInfo.100

* Support lookup of OpenCL.DebugInfo.100 extinst

* Add tests for enum values

* Recognize 2017-2019 as copyright date range

* Android.mk: support OpenCL.DebugInfo.100 extended instruction set

Also, stop generating core instruction tables for non-unified1 versions
of the grammar.

* Imported entity operand type is concrete

* Bazel: Suppoort OpenCL.DebugInfo.100

* BUILD.gn: Support OpenCL.DebugInfo.100
2019-12-19 17:16:26 -05:00

292 lines
8.8 KiB
Python

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 = "source/extinst.debuginfo.grammar.json"
CLDEBUGINFO100_GRAMMAR_JSON_FILE = "source/extinst.opencl.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 = ["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")
fmtargs = [name]
native.genrule(
name = "gen_extinst_lang_headers_" + name,
srcs = [grammar],
outs = [name + ".h"],
cmd = (
"$(location :generate_language_headers) " +
"--extinst-name={0} " +
"--extinst-grammar=$< " +
"--extinst-output-base=$(@D)/{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 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
)