Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 1 | COMMON_COPTS = [ |
| 2 | "-DSPIRV_CHECK_CONTEXT", |
| 3 | "-DSPIRV_COLOR_TERMINAL", |
| 4 | ] + select({ |
| 5 | "@bazel_tools//src/conditions:windows": [""], |
| 6 | "//conditions:default": [ |
| 7 | "-DSPIRV_LINUX", |
| 8 | "-DSPIRV_TIMER_ENABLED", |
| 9 | "-Wall", |
| 10 | "-Wextra", |
| 11 | "-Wnon-virtual-dtor", |
| 12 | "-Wno-missing-field-initializers", |
| 13 | "-Werror", |
| 14 | "-std=c++11", |
| 15 | "-fvisibility=hidden", |
| 16 | "-fno-exceptions", |
| 17 | "-fno-rtti", |
| 18 | "-Wno-long-long", |
| 19 | "-Wshadow", |
| 20 | "-Wundef", |
| 21 | "-Wconversion", |
| 22 | "-Wno-sign-conversion", |
| 23 | ], |
| 24 | }) |
| 25 | |
| 26 | TEST_COPTS = COMMON_COPTS + select({ |
Ehsan | bc84daf | 2019-09-27 09:13:32 -0400 | [diff] [blame] | 27 | "@bazel_tools//src/conditions:windows": [ |
| 28 | # Disable C4503 "decorated name length exceeded" warning, |
| 29 | # triggered by some heavily templated types. |
| 30 | # We don't care much about that in test code. |
| 31 | # Important to do since we have warnings-as-errors. |
| 32 | "/wd4503" |
| 33 | ], |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 34 | "//conditions:default": [ |
| 35 | "-Wno-undef", |
| 36 | "-Wno-self-assign", |
| 37 | "-Wno-shadow", |
| 38 | "-Wno-unused-parameter" |
| 39 | ], |
| 40 | }) |
| 41 | |
alan-baker | 5030045 | 2020-07-30 12:08:53 -0400 | [diff] [blame] | 42 | DEBUGINFO_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_debuginfo_grammar_unified1" |
| 43 | CLDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_opencl_debuginfo_100_grammar_unified1" |
Greg Fischer | 1454c95 | 2021-09-15 12:38:53 -0600 | [diff] [blame] | 44 | SHDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_nonsemantic_shader_debuginfo_100_grammar_unified1" |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 45 | |
| 46 | def generate_core_tables(version = None): |
| 47 | if not version: |
| 48 | fail("Must specify version", "version") |
| 49 | grammars = [ |
| 50 | "@spirv_headers//:spirv_core_grammar_" + version, |
| 51 | DEBUGINFO_GRAMMAR_JSON_FILE, |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 52 | CLDEBUGINFO100_GRAMMAR_JSON_FILE, |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 53 | ] |
| 54 | outs = [ |
| 55 | "core.insts-{}.inc".format(version), |
| 56 | "operand.kinds-{}.inc".format(version), |
| 57 | ] |
| 58 | fmtargs = grammars + outs |
| 59 | native.genrule( |
| 60 | name = "gen_core_tables_" + version, |
| 61 | srcs = grammars, |
| 62 | outs = outs, |
| 63 | cmd = ( |
| 64 | "$(location :generate_grammar_tables) " + |
| 65 | "--spirv-core-grammar=$(location {0}) " + |
| 66 | "--extinst-debuginfo-grammar=$(location {1}) " + |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 67 | "--extinst-cldebuginfo100-grammar=$(location {2}) " + |
| 68 | "--core-insts-output=$(location {3}) " + |
| 69 | "--operand-kinds-output=$(location {4})" |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 70 | ).format(*fmtargs), |
| 71 | tools = [":generate_grammar_tables"], |
| 72 | visibility = ["//visibility:private"], |
| 73 | ) |
| 74 | |
| 75 | def generate_enum_string_mapping(version = None): |
| 76 | if not version: |
| 77 | fail("Must specify version", "version") |
| 78 | grammars = [ |
| 79 | "@spirv_headers//:spirv_core_grammar_" + version, |
| 80 | DEBUGINFO_GRAMMAR_JSON_FILE, |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 81 | CLDEBUGINFO100_GRAMMAR_JSON_FILE, |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 82 | ] |
| 83 | outs = [ |
| 84 | "extension_enum.inc", |
| 85 | "enum_string_mapping.inc", |
| 86 | ] |
| 87 | fmtargs = grammars + outs |
| 88 | native.genrule( |
| 89 | name = "gen_enum_string_mapping", |
| 90 | srcs = grammars, |
| 91 | outs = outs, |
| 92 | cmd = ( |
| 93 | "$(location :generate_grammar_tables) " + |
| 94 | "--spirv-core-grammar=$(location {0}) " + |
| 95 | "--extinst-debuginfo-grammar=$(location {1}) " + |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 96 | "--extinst-cldebuginfo100-grammar=$(location {2}) " + |
| 97 | "--extension-enum-output=$(location {3}) " + |
| 98 | "--enum-string-mapping-output=$(location {4})" |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 99 | ).format(*fmtargs), |
| 100 | tools = [":generate_grammar_tables"], |
| 101 | visibility = ["//visibility:private"], |
| 102 | ) |
| 103 | |
| 104 | def generate_opencl_tables(version = None): |
| 105 | if not version: |
| 106 | fail("Must specify version", "version") |
| 107 | grammars = [ |
| 108 | "@spirv_headers//:spirv_opencl_grammar_" + version, |
| 109 | ] |
| 110 | outs = ["opencl.std.insts.inc"] |
| 111 | fmtargs = grammars + outs |
| 112 | native.genrule( |
| 113 | name = "gen_opencl_tables_" + version, |
| 114 | srcs = grammars, |
| 115 | outs = outs, |
| 116 | cmd = ( |
| 117 | "$(location :generate_grammar_tables) " + |
| 118 | "--extinst-opencl-grammar=$(location {0}) " + |
| 119 | "--opencl-insts-output=$(location {1})" |
| 120 | ).format(*fmtargs), |
| 121 | tools = [":generate_grammar_tables"], |
| 122 | visibility = ["//visibility:private"], |
| 123 | ) |
| 124 | |
| 125 | def generate_glsl_tables(version = None): |
| 126 | if not version: |
| 127 | fail("Must specify version", "version") |
| 128 | grammars = [ |
| 129 | "@spirv_headers//:spirv_glsl_grammar_" + version, |
| 130 | ] |
| 131 | outs = ["glsl.std.450.insts.inc"] |
| 132 | fmtargs = grammars + outs |
| 133 | native.genrule( |
| 134 | name = "gen_glsl_tables_" + version, |
| 135 | srcs = grammars, |
| 136 | outs = outs, |
| 137 | cmd = ( |
| 138 | "$(location :generate_grammar_tables) " + |
| 139 | "--extinst-glsl-grammar=$(location {0}) " + |
| 140 | "--glsl-insts-output=$(location {1})" |
| 141 | ).format(*fmtargs), |
| 142 | tools = [":generate_grammar_tables"], |
| 143 | visibility = ["//visibility:private"], |
| 144 | ) |
| 145 | |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 146 | def generate_vendor_tables(extension, operand_kind_prefix = ""): |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 147 | if not extension: |
| 148 | fail("Must specify extension", "extension") |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 149 | extension_rule = extension.replace("-", "_").replace(".", "_") |
alan-baker | 5030045 | 2020-07-30 12:08:53 -0400 | [diff] [blame] | 150 | grammars = ["@spirv_headers//:spirv_ext_inst_{}_grammar_unified1".format(extension_rule)] |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 151 | outs = ["{}.insts.inc".format(extension)] |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 152 | prefices = [operand_kind_prefix] |
| 153 | fmtargs = grammars + outs + prefices |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 154 | native.genrule( |
| 155 | name = "gen_vendor_tables_" + extension_rule, |
| 156 | srcs = grammars, |
| 157 | outs = outs, |
| 158 | cmd = ( |
| 159 | "$(location :generate_grammar_tables) " + |
| 160 | "--extinst-vendor-grammar=$(location {0}) " + |
David Neto | 64f36ea | 2019-12-19 17:16:26 -0500 | [diff] [blame] | 161 | "--vendor-insts-output=$(location {1}) " + |
| 162 | "--vendor-operand-kind-prefix={2}" |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 163 | ).format(*fmtargs), |
| 164 | tools = [":generate_grammar_tables"], |
| 165 | visibility = ["//visibility:private"], |
| 166 | ) |
| 167 | |
| 168 | def generate_extinst_lang_headers(name, grammar = None): |
| 169 | if not grammar: |
| 170 | fail("Must specify grammar", "grammar") |
Geoff Lang | fb6e3e4 | 2020-02-25 00:46:52 -0500 | [diff] [blame] | 171 | outs = [name + ".h"] |
| 172 | fmtargs = outs |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 173 | native.genrule( |
| 174 | name = "gen_extinst_lang_headers_" + name, |
| 175 | srcs = [grammar], |
Geoff Lang | fb6e3e4 | 2020-02-25 00:46:52 -0500 | [diff] [blame] | 176 | outs = outs, |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 177 | cmd = ( |
| 178 | "$(location :generate_language_headers) " + |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 179 | "--extinst-grammar=$< " + |
Geoff Lang | fb6e3e4 | 2020-02-25 00:46:52 -0500 | [diff] [blame] | 180 | "--extinst-output-path=$(location {0})" |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 181 | ).format(*fmtargs), |
| 182 | tools = [":generate_language_headers"], |
| 183 | visibility = ["//visibility:private"], |
| 184 | ) |
| 185 | |
| 186 | def base_test(name, srcs, deps = []): |
| 187 | if srcs == []: |
| 188 | return |
| 189 | if name[-5:] != "_test": |
| 190 | name = name + "_test" |
| 191 | native.cc_test( |
| 192 | name = "base_" + name, |
| 193 | srcs = srcs, |
| 194 | compatible_with = [], |
| 195 | copts = TEST_COPTS, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 196 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 197 | deps = [ |
| 198 | ":test_common", |
| 199 | "@com_google_googletest//:gtest_main", |
| 200 | "@com_google_googletest//:gtest", |
| 201 | "@com_google_effcee//:effcee", |
| 202 | ] + deps, |
| 203 | ) |
| 204 | |
dong-ja | 706dc27 | 2021-08-06 13:03:59 -0500 | [diff] [blame] | 205 | def lint_test(name, srcs, deps = []): |
| 206 | if name[-5:] != "_test": |
| 207 | name = name + "_test" |
| 208 | native.cc_test( |
| 209 | name = "lint_" + name, |
| 210 | srcs = srcs, |
| 211 | compatible_with = [], |
| 212 | copts = TEST_COPTS, |
| 213 | size = "large", |
| 214 | deps = [ |
| 215 | ":spirv_tools_lint", |
| 216 | "@com_google_googletest//:gtest_main", |
| 217 | "@com_google_googletest//:gtest", |
| 218 | "@com_google_effcee//:effcee", |
| 219 | ] + deps, |
| 220 | ) |
| 221 | |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 222 | def link_test(name, srcs, deps = []): |
| 223 | if name[-5:] != "_test": |
| 224 | name = name + "_test" |
| 225 | native.cc_test( |
| 226 | name = "link_" + name, |
| 227 | srcs = srcs, |
| 228 | compatible_with = [], |
| 229 | copts = TEST_COPTS, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 230 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 231 | deps = [ |
| 232 | ":link_test_common", |
| 233 | "@com_google_googletest//:gtest_main", |
| 234 | "@com_google_googletest//:gtest", |
| 235 | "@com_google_effcee//:effcee", |
| 236 | ] + deps, |
| 237 | ) |
| 238 | |
| 239 | def opt_test(name, srcs, deps = []): |
| 240 | if name[-5:] != "_test": |
| 241 | name = name + "_test" |
| 242 | native.cc_test( |
| 243 | name = "opt_" + name, |
| 244 | srcs = srcs, |
| 245 | compatible_with = [], |
| 246 | copts = TEST_COPTS, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 247 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 248 | deps = [ |
| 249 | ":opt_test_common", |
| 250 | "@com_google_googletest//:gtest_main", |
| 251 | "@com_google_googletest//:gtest", |
| 252 | "@com_google_effcee//:effcee", |
| 253 | ] + deps, |
| 254 | ) |
| 255 | |
| 256 | def reduce_test(name, srcs, deps = []): |
| 257 | if name[-5:] != "_test": |
| 258 | name = name + "_test" |
| 259 | native.cc_test( |
| 260 | name = "reduce_" + name, |
| 261 | srcs = srcs, |
| 262 | compatible_with = [], |
| 263 | copts = TEST_COPTS, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 264 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 265 | deps = [ |
| 266 | ":reduce_test_common", |
| 267 | ":spirv_tools_reduce", |
| 268 | "@com_google_googletest//:gtest_main", |
| 269 | "@com_google_googletest//:gtest", |
| 270 | "@com_google_effcee//:effcee", |
| 271 | ] + deps, |
| 272 | ) |
| 273 | |
| 274 | def util_test(name, srcs, deps = []): |
| 275 | if name[-5:] != "_test": |
| 276 | name = name + "_test" |
| 277 | native.cc_test( |
| 278 | name = "util_" + name, |
| 279 | srcs = srcs, |
| 280 | compatible_with = [], |
| 281 | copts = TEST_COPTS, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 282 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 283 | deps = [ |
| 284 | ":opt_test_common", |
| 285 | "@com_google_googletest//:gtest_main", |
| 286 | "@com_google_googletest//:gtest", |
| 287 | "@com_google_effcee//:effcee", |
| 288 | ] + deps, |
| 289 | ) |
| 290 | |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 291 | def val_test(name, srcs = [], copts = [], deps = [], **kwargs): |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 292 | if name[-5:] != "_test": |
| 293 | name = name + "_test" |
| 294 | if name[:4] != "val_": |
| 295 | name = "val_" + name |
| 296 | native.cc_test( |
| 297 | name = name, |
| 298 | srcs = srcs, |
| 299 | compatible_with = [], |
| 300 | copts = TEST_COPTS + copts, |
Ehsan | 82f84c4 | 2019-10-09 15:14:42 -0500 | [diff] [blame] | 301 | size = "large", |
Ehsan | a03cd1f | 2019-09-24 15:56:59 -0400 | [diff] [blame] | 302 | deps = [ |
| 303 | ":val_test_common", |
| 304 | "@com_google_googletest//:gtest_main", |
| 305 | "@com_google_googletest//:gtest", |
| 306 | "@com_google_effcee//:effcee", |
| 307 | ] + deps, |
| 308 | **kwargs |
| 309 | ) |