xref: /aosp_15_r20/external/swiftshader/third_party/SPIRV-Tools/build_defs.bzl (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
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