1COMMON_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 26TEST_COPTS = COMMON_COPTS + select({ 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 ], 34 "//conditions:default": [ 35 "-Wno-undef", 36 "-Wno-self-assign", 37 "-Wno-shadow", 38 "-Wno-unused-parameter" 39 ], 40}) 41 42DEBUGINFO_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_debuginfo_grammar_unified1" 43CLDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_opencl_debuginfo_100_grammar_unified1" 44SHDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_nonsemantic_shader_debuginfo_100_grammar_unified1" 45 46def 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, 52 CLDEBUGINFO100_GRAMMAR_JSON_FILE, 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}) " + 67 "--extinst-cldebuginfo100-grammar=$(location {2}) " + 68 "--core-insts-output=$(location {3}) " + 69 "--operand-kinds-output=$(location {4})" 70 ).format(*fmtargs), 71 tools = [":generate_grammar_tables"], 72 visibility = ["//visibility:private"], 73 ) 74 75def 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, 81 CLDEBUGINFO100_GRAMMAR_JSON_FILE, 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}) " + 96 "--extinst-cldebuginfo100-grammar=$(location {2}) " + 97 "--extension-enum-output=$(location {3}) " + 98 "--enum-string-mapping-output=$(location {4})" 99 ).format(*fmtargs), 100 tools = [":generate_grammar_tables"], 101 visibility = ["//visibility:private"], 102 ) 103 104def 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 125def 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 146def generate_vendor_tables(extension, operand_kind_prefix = ""): 147 if not extension: 148 fail("Must specify extension", "extension") 149 extension_rule = extension.replace("-", "_").replace(".", "_") 150 grammars = ["@spirv_headers//:spirv_ext_inst_{}_grammar_unified1".format(extension_rule)] 151 outs = ["{}.insts.inc".format(extension)] 152 prefices = [operand_kind_prefix] 153 fmtargs = grammars + outs + prefices 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}) " + 161 "--vendor-insts-output=$(location {1}) " + 162 "--vendor-operand-kind-prefix={2}" 163 ).format(*fmtargs), 164 tools = [":generate_grammar_tables"], 165 visibility = ["//visibility:private"], 166 ) 167 168def generate_extinst_lang_headers(name, grammar = None): 169 if not grammar: 170 fail("Must specify grammar", "grammar") 171 outs = [name + ".h"] 172 fmtargs = outs 173 native.genrule( 174 name = "gen_extinst_lang_headers_" + name, 175 srcs = [grammar], 176 outs = outs, 177 cmd = ( 178 "$(location :generate_language_headers) " + 179 "--extinst-grammar=$< " + 180 "--extinst-output-path=$(location {0})" 181 ).format(*fmtargs), 182 tools = [":generate_language_headers"], 183 visibility = ["//visibility:private"], 184 ) 185 186def 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, 196 size = "large", 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 205def 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 222def 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, 230 size = "large", 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 239def 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, 247 size = "large", 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 256def 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, 264 size = "large", 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 274def 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, 282 size = "large", 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 291def val_test(name, srcs = [], copts = [], deps = [], **kwargs): 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, 301 size = "large", 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 ) 310