1*03ce13f7SAndroid Build Coastguard Worker"""Constants and macros for spirv-tools BUILD.""" 2*03ce13f7SAndroid Build Coastguard Worker 3*03ce13f7SAndroid Build Coastguard WorkerCOMMON_COPTS = [ 4*03ce13f7SAndroid Build Coastguard Worker "-DSPIRV_CHECK_CONTEXT", 5*03ce13f7SAndroid Build Coastguard Worker "-DSPIRV_COLOR_TERMINAL", 6*03ce13f7SAndroid Build Coastguard Worker] + select({ 7*03ce13f7SAndroid Build Coastguard Worker "@platforms//os:windows": [], 8*03ce13f7SAndroid Build Coastguard Worker "//conditions:default": [ 9*03ce13f7SAndroid Build Coastguard Worker "-DSPIRV_LINUX", 10*03ce13f7SAndroid Build Coastguard Worker "-DSPIRV_TIMER_ENABLED", 11*03ce13f7SAndroid Build Coastguard Worker "-fvisibility=hidden", 12*03ce13f7SAndroid Build Coastguard Worker "-fno-exceptions", 13*03ce13f7SAndroid Build Coastguard Worker "-fno-rtti", 14*03ce13f7SAndroid Build Coastguard Worker "-Wall", 15*03ce13f7SAndroid Build Coastguard Worker "-Wextra", 16*03ce13f7SAndroid Build Coastguard Worker "-Wnon-virtual-dtor", 17*03ce13f7SAndroid Build Coastguard Worker "-Wno-missing-field-initializers", 18*03ce13f7SAndroid Build Coastguard Worker "-Werror", 19*03ce13f7SAndroid Build Coastguard Worker "-Wno-long-long", 20*03ce13f7SAndroid Build Coastguard Worker "-Wshadow", 21*03ce13f7SAndroid Build Coastguard Worker "-Wundef", 22*03ce13f7SAndroid Build Coastguard Worker "-Wconversion", 23*03ce13f7SAndroid Build Coastguard Worker "-Wno-sign-conversion", 24*03ce13f7SAndroid Build Coastguard Worker ], 25*03ce13f7SAndroid Build Coastguard Worker}) 26*03ce13f7SAndroid Build Coastguard Worker 27*03ce13f7SAndroid Build Coastguard WorkerTEST_COPTS = COMMON_COPTS + [ 28*03ce13f7SAndroid Build Coastguard Worker] + select({ 29*03ce13f7SAndroid Build Coastguard Worker "@platforms//os:windows": [ 30*03ce13f7SAndroid Build Coastguard Worker # Disable C4503 "decorated name length exceeded" warning, 31*03ce13f7SAndroid Build Coastguard Worker # triggered by some heavily templated types. 32*03ce13f7SAndroid Build Coastguard Worker # We don't care much about that in test code. 33*03ce13f7SAndroid Build Coastguard Worker # Important to do since we have warnings-as-errors. 34*03ce13f7SAndroid Build Coastguard Worker "/wd4503", 35*03ce13f7SAndroid Build Coastguard Worker ], 36*03ce13f7SAndroid Build Coastguard Worker "//conditions:default": [ 37*03ce13f7SAndroid Build Coastguard Worker "-Wno-undef", 38*03ce13f7SAndroid Build Coastguard Worker "-Wno-self-assign", 39*03ce13f7SAndroid Build Coastguard Worker "-Wno-shadow", 40*03ce13f7SAndroid Build Coastguard Worker "-Wno-unused-parameter", 41*03ce13f7SAndroid Build Coastguard Worker ], 42*03ce13f7SAndroid Build Coastguard Worker}) 43*03ce13f7SAndroid Build Coastguard Worker 44*03ce13f7SAndroid Build Coastguard Workerdef incompatible_with(incompatible_constraints): 45*03ce13f7SAndroid Build Coastguard Worker return select(_merge_dicts([{"//conditions:default": []}, { 46*03ce13f7SAndroid Build Coastguard Worker constraint: ["@platforms//:incompatible"] 47*03ce13f7SAndroid Build Coastguard Worker for constraint in incompatible_constraints 48*03ce13f7SAndroid Build Coastguard Worker }])) 49*03ce13f7SAndroid Build Coastguard Worker 50*03ce13f7SAndroid Build Coastguard WorkerDEBUGINFO_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_debuginfo_grammar_unified1" 51*03ce13f7SAndroid Build Coastguard WorkerCLDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_opencl_debuginfo_100_grammar_unified1" 52*03ce13f7SAndroid Build Coastguard WorkerSHDEBUGINFO100_GRAMMAR_JSON_FILE = "@spirv_headers//:spirv_ext_inst_nonsemantic_shader_debuginfo_100_grammar_unified1" 53*03ce13f7SAndroid Build Coastguard Worker 54*03ce13f7SAndroid Build Coastguard Workerdef _merge_dicts(dicts): 55*03ce13f7SAndroid Build Coastguard Worker merged = {} 56*03ce13f7SAndroid Build Coastguard Worker for d in dicts: 57*03ce13f7SAndroid Build Coastguard Worker merged.update(d) 58*03ce13f7SAndroid Build Coastguard Worker return merged 59*03ce13f7SAndroid Build Coastguard Worker 60*03ce13f7SAndroid Build Coastguard Workerdef generate_core_tables(version): 61*03ce13f7SAndroid Build Coastguard Worker if not version: 62*03ce13f7SAndroid Build Coastguard Worker fail("Must specify version", "version") 63*03ce13f7SAndroid Build Coastguard Worker 64*03ce13f7SAndroid Build Coastguard Worker grammars = dict( 65*03ce13f7SAndroid Build Coastguard Worker core_grammar = "@spirv_headers//:spirv_core_grammar_{}".format(version), 66*03ce13f7SAndroid Build Coastguard Worker debuginfo_grammar = DEBUGINFO_GRAMMAR_JSON_FILE, 67*03ce13f7SAndroid Build Coastguard Worker cldebuginfo_grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, 68*03ce13f7SAndroid Build Coastguard Worker ) 69*03ce13f7SAndroid Build Coastguard Worker 70*03ce13f7SAndroid Build Coastguard Worker outs = dict( 71*03ce13f7SAndroid Build Coastguard Worker core_insts_output = "core.insts-{}.inc".format(version), 72*03ce13f7SAndroid Build Coastguard Worker operand_kinds_output = "operand.kinds-{}.inc".format(version), 73*03ce13f7SAndroid Build Coastguard Worker ) 74*03ce13f7SAndroid Build Coastguard Worker 75*03ce13f7SAndroid Build Coastguard Worker cmd = ( 76*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_grammar_tables)" + 77*03ce13f7SAndroid Build Coastguard Worker " --spirv-core-grammar=$(location {core_grammar})" + 78*03ce13f7SAndroid Build Coastguard Worker " --extinst-debuginfo-grammar=$(location {debuginfo_grammar})" + 79*03ce13f7SAndroid Build Coastguard Worker " --extinst-cldebuginfo100-grammar=$(location {cldebuginfo_grammar})" + 80*03ce13f7SAndroid Build Coastguard Worker " --core-insts-output=$(location {core_insts_output})" + 81*03ce13f7SAndroid Build Coastguard Worker " --operand-kinds-output=$(location {operand_kinds_output})" + 82*03ce13f7SAndroid Build Coastguard Worker " --output-language=c++" 83*03ce13f7SAndroid Build Coastguard Worker ).format(**_merge_dicts([grammars, outs])) 84*03ce13f7SAndroid Build Coastguard Worker 85*03ce13f7SAndroid Build Coastguard Worker native.genrule( 86*03ce13f7SAndroid Build Coastguard Worker name = "gen_core_tables_" + version, 87*03ce13f7SAndroid Build Coastguard Worker srcs = grammars.values(), 88*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 89*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 90*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 91*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_grammar_tables"], 92*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 93*03ce13f7SAndroid Build Coastguard Worker ) 94*03ce13f7SAndroid Build Coastguard Worker 95*03ce13f7SAndroid Build Coastguard Workerdef generate_enum_string_mapping(version): 96*03ce13f7SAndroid Build Coastguard Worker if not version: 97*03ce13f7SAndroid Build Coastguard Worker fail("Must specify version", "version") 98*03ce13f7SAndroid Build Coastguard Worker 99*03ce13f7SAndroid Build Coastguard Worker grammars = dict( 100*03ce13f7SAndroid Build Coastguard Worker core_grammar = "@spirv_headers//:spirv_core_grammar_{}".format(version), 101*03ce13f7SAndroid Build Coastguard Worker debuginfo_grammar = DEBUGINFO_GRAMMAR_JSON_FILE, 102*03ce13f7SAndroid Build Coastguard Worker cldebuginfo_grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, 103*03ce13f7SAndroid Build Coastguard Worker ) 104*03ce13f7SAndroid Build Coastguard Worker 105*03ce13f7SAndroid Build Coastguard Worker outs = dict( 106*03ce13f7SAndroid Build Coastguard Worker extension_enum_ouput = "extension_enum.inc", 107*03ce13f7SAndroid Build Coastguard Worker enum_string_mapping_output = "enum_string_mapping.inc", 108*03ce13f7SAndroid Build Coastguard Worker ) 109*03ce13f7SAndroid Build Coastguard Worker 110*03ce13f7SAndroid Build Coastguard Worker cmd = ( 111*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_grammar_tables)" + 112*03ce13f7SAndroid Build Coastguard Worker " --spirv-core-grammar=$(location {core_grammar})" + 113*03ce13f7SAndroid Build Coastguard Worker " --extinst-debuginfo-grammar=$(location {debuginfo_grammar})" + 114*03ce13f7SAndroid Build Coastguard Worker " --extinst-cldebuginfo100-grammar=$(location {cldebuginfo_grammar})" + 115*03ce13f7SAndroid Build Coastguard Worker " --extension-enum-output=$(location {extension_enum_ouput})" + 116*03ce13f7SAndroid Build Coastguard Worker " --enum-string-mapping-output=$(location {enum_string_mapping_output})" + 117*03ce13f7SAndroid Build Coastguard Worker " --output-language=c++" 118*03ce13f7SAndroid Build Coastguard Worker ).format(**_merge_dicts([grammars, outs])) 119*03ce13f7SAndroid Build Coastguard Worker 120*03ce13f7SAndroid Build Coastguard Worker native.genrule( 121*03ce13f7SAndroid Build Coastguard Worker name = "gen_enum_string_mapping", 122*03ce13f7SAndroid Build Coastguard Worker srcs = grammars.values(), 123*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 124*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 125*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 126*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_grammar_tables"], 127*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 128*03ce13f7SAndroid Build Coastguard Worker ) 129*03ce13f7SAndroid Build Coastguard Worker 130*03ce13f7SAndroid Build Coastguard Workerdef generate_opencl_tables(version): 131*03ce13f7SAndroid Build Coastguard Worker if not version: 132*03ce13f7SAndroid Build Coastguard Worker fail("Must specify version", "version") 133*03ce13f7SAndroid Build Coastguard Worker 134*03ce13f7SAndroid Build Coastguard Worker grammars = dict( 135*03ce13f7SAndroid Build Coastguard Worker opencl_grammar = "@spirv_headers//:spirv_opencl_grammar_{}".format(version), 136*03ce13f7SAndroid Build Coastguard Worker ) 137*03ce13f7SAndroid Build Coastguard Worker 138*03ce13f7SAndroid Build Coastguard Worker outs = dict( 139*03ce13f7SAndroid Build Coastguard Worker opencl_insts_output = "opencl.std.insts.inc", 140*03ce13f7SAndroid Build Coastguard Worker ) 141*03ce13f7SAndroid Build Coastguard Worker 142*03ce13f7SAndroid Build Coastguard Worker cmd = ( 143*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_grammar_tables)" + 144*03ce13f7SAndroid Build Coastguard Worker " --extinst-opencl-grammar=$(location {opencl_grammar})" + 145*03ce13f7SAndroid Build Coastguard Worker " --opencl-insts-output=$(location {opencl_insts_output})" 146*03ce13f7SAndroid Build Coastguard Worker ).format(**_merge_dicts([grammars, outs])) 147*03ce13f7SAndroid Build Coastguard Worker 148*03ce13f7SAndroid Build Coastguard Worker native.genrule( 149*03ce13f7SAndroid Build Coastguard Worker name = "gen_opencl_tables_" + version, 150*03ce13f7SAndroid Build Coastguard Worker srcs = grammars.values(), 151*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 152*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 153*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 154*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_grammar_tables"], 155*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 156*03ce13f7SAndroid Build Coastguard Worker ) 157*03ce13f7SAndroid Build Coastguard Worker 158*03ce13f7SAndroid Build Coastguard Workerdef generate_glsl_tables(version): 159*03ce13f7SAndroid Build Coastguard Worker if not version: 160*03ce13f7SAndroid Build Coastguard Worker fail("Must specify version", "version") 161*03ce13f7SAndroid Build Coastguard Worker 162*03ce13f7SAndroid Build Coastguard Worker grammars = dict( 163*03ce13f7SAndroid Build Coastguard Worker gsls_grammar = "@spirv_headers//:spirv_glsl_grammar_{}".format(version), 164*03ce13f7SAndroid Build Coastguard Worker ) 165*03ce13f7SAndroid Build Coastguard Worker outs = dict( 166*03ce13f7SAndroid Build Coastguard Worker gsls_insts_outs = "glsl.std.450.insts.inc", 167*03ce13f7SAndroid Build Coastguard Worker ) 168*03ce13f7SAndroid Build Coastguard Worker 169*03ce13f7SAndroid Build Coastguard Worker cmd = ( 170*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_grammar_tables)" + 171*03ce13f7SAndroid Build Coastguard Worker " --extinst-glsl-grammar=$(location {gsls_grammar})" + 172*03ce13f7SAndroid Build Coastguard Worker " --glsl-insts-output=$(location {gsls_insts_outs})" + 173*03ce13f7SAndroid Build Coastguard Worker " --output-language=c++" 174*03ce13f7SAndroid Build Coastguard Worker ).format(**_merge_dicts([grammars, outs])) 175*03ce13f7SAndroid Build Coastguard Worker 176*03ce13f7SAndroid Build Coastguard Worker native.genrule( 177*03ce13f7SAndroid Build Coastguard Worker name = "gen_glsl_tables_" + version, 178*03ce13f7SAndroid Build Coastguard Worker srcs = grammars.values(), 179*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 180*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 181*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 182*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_grammar_tables"], 183*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 184*03ce13f7SAndroid Build Coastguard Worker ) 185*03ce13f7SAndroid Build Coastguard Worker 186*03ce13f7SAndroid Build Coastguard Workerdef generate_vendor_tables(extension, operand_kind_prefix = ""): 187*03ce13f7SAndroid Build Coastguard Worker if not extension: 188*03ce13f7SAndroid Build Coastguard Worker fail("Must specify extension", "extension") 189*03ce13f7SAndroid Build Coastguard Worker 190*03ce13f7SAndroid Build Coastguard Worker extension_rule = extension.replace("-", "_").replace(".", "_") 191*03ce13f7SAndroid Build Coastguard Worker grammars = dict( 192*03ce13f7SAndroid Build Coastguard Worker vendor_grammar = "@spirv_headers//:spirv_ext_inst_{}_grammar_unified1".format(extension_rule), 193*03ce13f7SAndroid Build Coastguard Worker ) 194*03ce13f7SAndroid Build Coastguard Worker outs = dict( 195*03ce13f7SAndroid Build Coastguard Worker vendor_insts_output = "{}.insts.inc".format(extension), 196*03ce13f7SAndroid Build Coastguard Worker ) 197*03ce13f7SAndroid Build Coastguard Worker cmd = ( 198*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_grammar_tables)" + 199*03ce13f7SAndroid Build Coastguard Worker " --extinst-vendor-grammar=$(location {vendor_grammar})" + 200*03ce13f7SAndroid Build Coastguard Worker " --vendor-insts-output=$(location {vendor_insts_output})" + 201*03ce13f7SAndroid Build Coastguard Worker " --vendor-operand-kind-prefix={operand_kind_prefix}" 202*03ce13f7SAndroid Build Coastguard Worker ).format(operand_kind_prefix = operand_kind_prefix, **_merge_dicts([grammars, outs])) 203*03ce13f7SAndroid Build Coastguard Worker 204*03ce13f7SAndroid Build Coastguard Worker native.genrule( 205*03ce13f7SAndroid Build Coastguard Worker name = "gen_vendor_tables_" + extension_rule, 206*03ce13f7SAndroid Build Coastguard Worker srcs = grammars.values(), 207*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 208*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 209*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 210*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_grammar_tables"], 211*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 212*03ce13f7SAndroid Build Coastguard Worker ) 213*03ce13f7SAndroid Build Coastguard Worker 214*03ce13f7SAndroid Build Coastguard Workerdef generate_extinst_lang_headers(name, grammar = None): 215*03ce13f7SAndroid Build Coastguard Worker if not grammar: 216*03ce13f7SAndroid Build Coastguard Worker fail("Must specify grammar", "grammar") 217*03ce13f7SAndroid Build Coastguard Worker outs = dict( 218*03ce13f7SAndroid Build Coastguard Worker extinst_output_path = name + ".h", 219*03ce13f7SAndroid Build Coastguard Worker ) 220*03ce13f7SAndroid Build Coastguard Worker cmd = ( 221*03ce13f7SAndroid Build Coastguard Worker "$(location :generate_language_headers)" + 222*03ce13f7SAndroid Build Coastguard Worker " --extinst-grammar=$<" + 223*03ce13f7SAndroid Build Coastguard Worker " --extinst-output-path=$(location {extinst_output_path})" 224*03ce13f7SAndroid Build Coastguard Worker ).format(**outs) 225*03ce13f7SAndroid Build Coastguard Worker 226*03ce13f7SAndroid Build Coastguard Worker native.genrule( 227*03ce13f7SAndroid Build Coastguard Worker name = "gen_extinst_lang_headers_{}".format(name), 228*03ce13f7SAndroid Build Coastguard Worker srcs = [grammar], 229*03ce13f7SAndroid Build Coastguard Worker outs = outs.values(), 230*03ce13f7SAndroid Build Coastguard Worker cmd = cmd, 231*03ce13f7SAndroid Build Coastguard Worker cmd_bat = cmd, 232*03ce13f7SAndroid Build Coastguard Worker tools = [":generate_language_headers"], 233*03ce13f7SAndroid Build Coastguard Worker visibility = ["//visibility:private"], 234*03ce13f7SAndroid Build Coastguard Worker ) 235