xref: /aosp_15_r20/external/swiftshader/third_party/SPIRV-Tools/BUILD.bazel (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1load(
2    ":build_defs.bzl",
3    "CLDEBUGINFO100_GRAMMAR_JSON_FILE",
4    "COMMON_COPTS",
5    "DEBUGINFO_GRAMMAR_JSON_FILE",
6    "SHDEBUGINFO100_GRAMMAR_JSON_FILE",
7    "TEST_COPTS",
8    "generate_core_tables",
9    "generate_enum_string_mapping",
10    "generate_extinst_lang_headers",
11    "generate_glsl_tables",
12    "generate_opencl_tables",
13    "generate_vendor_tables",
14    "incompatible_with",
15)
16
17package(
18    default_visibility = ["//visibility:private"],
19    features = [
20        "layering_check",
21    ],
22)
23
24licenses(["notice"])
25
26exports_files([
27    "CHANGES",
28    "LICENSE",
29])
30
31py_binary(
32    name = "generate_grammar_tables",
33    srcs = ["utils/generate_grammar_tables.py"],
34)
35
36py_binary(
37    name = "generate_language_headers",
38    srcs = ["utils/generate_language_headers.py"],
39)
40
41generate_core_tables(version = "unified1")
42
43generate_enum_string_mapping(version = "unified1")
44
45generate_opencl_tables(version = "unified1")
46
47generate_glsl_tables(version = "unified1")
48
49generate_vendor_tables(extension = "spv-amd-shader-explicit-vertex-parameter")
50
51generate_vendor_tables(extension = "spv-amd-shader-trinary-minmax")
52
53generate_vendor_tables(extension = "spv-amd-gcn-shader")
54
55generate_vendor_tables(extension = "spv-amd-shader-ballot")
56
57generate_vendor_tables(extension = "debuginfo")
58
59generate_vendor_tables(extension = "nonsemantic.clspvreflection")
60
61generate_vendor_tables(extension = "nonsemantic.vkspreflection")
62
63generate_vendor_tables(
64    extension = "opencl.debuginfo.100",
65    operand_kind_prefix = "CLDEBUG100_",
66)
67
68generate_vendor_tables(
69    extension = "nonsemantic.shader.debuginfo.100",
70    operand_kind_prefix = "SHDEBUG100_",
71)
72
73generate_extinst_lang_headers(
74    name = "DebugInfo",
75    grammar = DEBUGINFO_GRAMMAR_JSON_FILE,
76)
77
78generate_extinst_lang_headers(
79    name = "OpenCLDebugInfo100",
80    grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE,
81)
82
83generate_extinst_lang_headers(
84    name = "NonSemanticShaderDebugInfo100",
85    grammar = SHDEBUGINFO100_GRAMMAR_JSON_FILE,
86)
87
88py_binary(
89    name = "generate_registry_tables",
90    srcs = ["utils/generate_registry_tables.py"],
91)
92
93genrule(
94    name = "generators_inc",
95    srcs = ["@spirv_headers//:spirv_xml_registry"],
96    outs = ["generators.inc"],
97    cmd = "$(location :generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)",
98    cmd_bat = "$(location :generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)",
99    tools = [":generate_registry_tables"],
100)
101
102py_binary(
103    name = "update_build_version",
104    srcs = ["utils/update_build_version.py"],
105)
106
107genrule(
108    name = "build_version_inc",
109    srcs = ["CHANGES"],
110    outs = ["build-version.inc"],
111    cmd = "SOURCE_DATE_EPOCH=0 $(location :update_build_version) $(location CHANGES) $(location build-version.inc)",
112    cmd_bat = "set SOURCE_DATE_EPOCH=0  && $(location :update_build_version) $(location CHANGES) $(location build-version.inc)",
113    local = True,
114    tools = [":update_build_version"],
115)
116
117# Libraries
118
119cc_library(
120    name = "spirv_tools",
121    hdrs = [
122        "include/spirv-tools/libspirv.h",
123        "include/spirv-tools/libspirv.hpp",
124    ],
125    copts = COMMON_COPTS,
126    includes = ["include"],
127    linkstatic = 1,
128    visibility = ["//visibility:public"],
129    deps = [
130        ":spirv_tools_internal",
131    ],
132)
133
134cc_library(
135    name = "spirv_tools_internal",
136    srcs = glob([
137        "source/*.cpp",
138        "source/util/*.cpp",
139        "source/val/*.cpp",
140    ]) + [
141        ":build_version_inc",
142        ":gen_core_tables_unified1",
143        ":gen_enum_string_mapping",
144        ":gen_extinst_lang_headers_DebugInfo",
145        ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100",
146        ":gen_extinst_lang_headers_OpenCLDebugInfo100",
147        ":gen_glsl_tables_unified1",
148        ":gen_opencl_tables_unified1",
149        ":gen_vendor_tables_debuginfo",
150        ":gen_vendor_tables_nonsemantic_clspvreflection",
151        ":gen_vendor_tables_nonsemantic_vkspreflection",
152        ":gen_vendor_tables_nonsemantic_shader_debuginfo_100",
153        ":gen_vendor_tables_opencl_debuginfo_100",
154        ":gen_vendor_tables_spv_amd_gcn_shader",
155        ":gen_vendor_tables_spv_amd_shader_ballot",
156        ":gen_vendor_tables_spv_amd_shader_explicit_vertex_parameter",
157        ":gen_vendor_tables_spv_amd_shader_trinary_minmax",
158        ":generators_inc",
159    ],
160    hdrs = [
161        "include/spirv-tools/libspirv.h",
162        "include/spirv-tools/libspirv.hpp",
163        ":gen_extinst_lang_headers_DebugInfo",
164        ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100",
165        ":gen_extinst_lang_headers_OpenCLDebugInfo100",
166    ] + glob([
167        "source/*.h",
168        "source/util/*.h",
169        "source/val/*.h",
170    ]),
171    copts = COMMON_COPTS,
172    includes = ["include"],
173    deps = [
174        "@spirv_headers//:spirv_common_headers",
175        "@spirv_headers//:spirv_cpp11_headers",
176    ],
177)
178
179cc_library(
180    name = "spirv_tools_opt",
181    hdrs = [
182        "include/spirv-tools/instrument.hpp",
183        "include/spirv-tools/optimizer.hpp",
184    ],
185    copts = COMMON_COPTS,
186    linkstatic = 1,
187    visibility = ["//visibility:public"],
188    deps = [
189        ":spirv_tools",
190        ":spirv_tools_opt_internal",
191    ],
192)
193
194cc_library(
195    name = "spirv_tools_opt_internal",
196    srcs = glob(["source/opt/*.cpp"]) + [
197        ":gen_vendor_tables_spv_amd_shader_ballot",
198    ],
199    hdrs = glob(["source/opt/*.h"]) + [
200        "include/spirv-tools/instrument.hpp",
201        "include/spirv-tools/optimizer.hpp",
202    ],
203    copts = COMMON_COPTS,
204    deps = [
205        ":spirv_tools_internal",
206        "@spirv_headers//:spirv_common_headers",
207    ],
208)
209
210cc_library(
211    name = "spirv_tools_reduce",
212    srcs = glob(["source/reduce/*.cpp"]),
213    hdrs = glob(["source/reduce/*.h"]),
214    copts = COMMON_COPTS,
215    deps = [
216        ":spirv_tools_internal",
217        ":spirv_tools_opt_internal",
218    ],
219)
220
221cc_library(
222    name = "spirv_tools_link",
223    srcs = glob(["source/link/*.cpp"]),
224    hdrs = ["include/spirv-tools/linker.hpp"],
225    copts = COMMON_COPTS,
226    linkstatic = 1,
227    visibility = ["//visibility:public"],
228    deps = [
229        ":spirv_tools_internal",
230        ":spirv_tools_opt_internal",
231    ],
232)
233
234cc_library(
235    name = "spirv_tools_lint_internal",
236    srcs = glob([
237        "source/lint/*.cpp",
238        "source/lint/*.h",
239    ]),
240    hdrs = ["include/spirv-tools/linter.hpp"] + glob([
241        "source/lint/*.h",
242    ]),
243    copts = COMMON_COPTS,
244    includes = ["include"],
245    deps = [
246        ":spirv_tools_internal",
247        ":spirv_tools_opt_internal",
248    ],
249)
250
251cc_library(
252    name = "spirv_tools_lint",
253    hdrs = ["include/spirv-tools/linter.hpp"],
254    copts = COMMON_COPTS,
255    includes = ["include"],
256    linkstatic = 1,
257    visibility = ["//visibility:public"],
258    deps = [
259        ":spirv_tools",
260        ":spirv_tools_lint_internal",
261    ],
262)
263
264cc_library(
265    name = "tools_util",
266    srcs = glob(["tools/util/*.cpp"]),
267    hdrs = glob(["tools/util/*.h"]),
268    copts = COMMON_COPTS,
269    deps = [":spirv_tools"],
270)
271
272cc_library(
273    name = "tools_io",
274    hdrs = ["tools/io.h"],
275    copts = COMMON_COPTS,
276)
277
278# Tools
279
280cc_binary(
281    name = "spirv-as",
282    srcs = [
283        "tools/as/as.cpp",
284    ],
285    copts = COMMON_COPTS,
286    visibility = ["//visibility:public"],
287    deps = [
288        ":spirv_tools_internal",
289        ":tools_io",
290        ":tools_util",
291    ],
292)
293
294cc_binary(
295    name = "spirv-dis",
296    srcs = [
297        "tools/dis/dis.cpp",
298    ],
299    copts = COMMON_COPTS,
300    visibility = ["//visibility:public"],
301    deps = [
302        ":spirv_tools",
303        ":tools_io",
304        ":tools_util",
305    ],
306)
307
308cc_binary(
309    name = "spirv-objdump",
310    srcs = [
311        "tools/objdump/extract_source.cpp",
312        "tools/objdump/extract_source.h",
313        "tools/objdump/objdump.cpp",
314    ],
315    copts = COMMON_COPTS,
316    visibility = ["//visibility:public"],
317    deps = [
318        ":spirv_tools_internal",
319        ":spirv_tools_opt_internal",
320        ":tools_io",
321        ":tools_util",
322        "@spirv_headers//:spirv_cpp_headers",
323    ],
324)
325
326cc_binary(
327    name = "spirv-val",
328    srcs = [
329        "tools/val/val.cpp",
330    ],
331    copts = COMMON_COPTS,
332    visibility = ["//visibility:public"],
333    deps = [
334        ":spirv_tools_internal",
335        ":tools_io",
336        ":tools_util",
337    ],
338)
339
340cc_binary(
341    name = "spirv-opt",
342    srcs = [
343        "tools/opt/opt.cpp",
344    ],
345    copts = COMMON_COPTS,
346    visibility = ["//visibility:public"],
347    deps = [
348        ":spirv_tools_internal",
349        ":spirv_tools_opt_internal",
350        ":tools_io",
351        ":tools_util",
352    ],
353)
354
355cc_binary(
356    name = "spirv-reduce",
357    srcs = [
358        "tools/reduce/reduce.cpp",
359    ],
360    copts = COMMON_COPTS,
361    visibility = ["//visibility:public"],
362    deps = [
363        ":spirv_tools_internal",
364        ":spirv_tools_opt_internal",
365        ":spirv_tools_reduce",
366        ":tools_io",
367        ":tools_util",
368    ],
369)
370
371cc_binary(
372    name = "spirv-link",
373    srcs = [
374        "tools/link/linker.cpp",
375    ],
376    copts = COMMON_COPTS,
377    visibility = ["//visibility:public"],
378    deps = [
379        ":spirv_tools_internal",
380        ":spirv_tools_link",
381        ":tools_io",
382        ":tools_util",
383    ],
384)
385
386cc_binary(
387    name = "spirv-lint",
388    srcs = [
389        "tools/lint/lint.cpp",
390    ],
391    copts = COMMON_COPTS,
392    visibility = ["//visibility:public"],
393    deps = [
394        ":spirv_tools_lint",
395        ":spirv_tools_opt_internal",
396        ":tools_io",
397        ":tools_util",
398    ],
399)
400
401cc_binary(
402    name = "spirv-cfg",
403    srcs = [
404        "tools/cfg/bin_to_dot.cpp",
405        "tools/cfg/bin_to_dot.h",
406        "tools/cfg/cfg.cpp",
407    ],
408    copts = COMMON_COPTS,
409    visibility = ["//visibility:public"],
410    deps = [
411        ":spirv_tools_internal",
412        ":tools_io",
413        ":tools_util",
414    ],
415)
416
417# Unit tests
418
419cc_library(
420    name = "test_lib",
421    testonly = 1,
422    srcs = [
423        "test/unit_spirv.cpp",
424    ],
425    hdrs = [
426        "test/test_fixture.h",
427        "test/unit_spirv.h",
428    ],
429    copts = TEST_COPTS,
430    deps = [
431        ":spirv_tools_internal",
432        "@googletest//:gtest",
433    ],
434)
435
436# PCH (precompiled header) tests only work when using CMake and MSVC on Windows,
437# so they will be skipped in the Bazel builds.
438
439[cc_test(
440    name = "base_{testcase}_test".format(testcase = f[len("test/"):-len("_test.cpp")]),
441    size = "small",
442    srcs = [f],
443    copts = TEST_COPTS + ["-DTESTING"],
444    linkstatic = 1,
445    target_compatible_with = {
446        "test/timer_test.cpp": incompatible_with(["@bazel_tools//src/conditions:windows"]),
447    }.get(f, []),
448    deps = [
449        "tools_util",
450        ":spirv_tools_internal",
451        ":test_lib",
452        "@googletest//:gtest",
453        "@googletest//:gtest_main",
454    ],
455) for f in glob(
456    [
457        "test/*_test.cpp",
458        "test/tools/*_test.cpp",
459    ],
460    exclude = [
461        "test/cpp_interface_test.cpp",
462        "test/pch_test.cpp",
463    ],
464)]
465
466cc_test(
467    name = "base_cpp_interface_test",
468    size = "small",
469    srcs = ["test/cpp_interface_test.cpp"],
470    linkstatic = 1,
471    deps = [
472        ":spirv_tools_opt_internal",
473        "@googletest//:gtest",
474        "@googletest//:gtest_main",
475        "@spirv_headers//:spirv_cpp11_headers",
476    ],
477)
478
479cc_test(
480    name = "base_ilist_test",
481    size = "small",
482    srcs = ["test/util/ilist_test.cpp"],
483    copts = TEST_COPTS,
484    linkstatic = 1,
485    deps = [
486        ":spirv_tools_internal",
487        "@googletest//:gtest",
488        "@googletest//:gtest_main",
489    ],
490)
491
492cc_library(
493    name = "link_test_lib",
494    testonly = 1,
495    hdrs = ["test/link/linker_fixture.h"],
496    copts = TEST_COPTS,
497    deps = [
498        ":spirv_tools_internal",
499        ":spirv_tools_link",
500        ":test_lib",
501        "@com_google_effcee//:effcee",
502        "@com_googlesource_code_re2//:re2",
503    ],
504)
505
506[cc_test(
507    name = "link_{testcase}_test".format(testcase = f[len("test/link/"):-len("_test.cpp")]),
508    size = "small",
509    srcs = [f],
510    copts = TEST_COPTS,
511    linkstatic = 1,
512    deps = [
513        ":link_test_lib",
514        "@googletest//:gtest",
515        "@googletest//:gtest_main",
516    ],
517) for f in glob(
518    ["test/link/*_test.cpp"],
519)]
520
521[cc_test(
522    name = "lint_{testcase}_test".format(testcase = f[len("test/lint/"):-len("_test.cpp")]),
523    size = "small",
524    srcs = [f],
525    copts = TEST_COPTS,
526    linkstatic = 1,
527    deps = [
528        ":spirv_tools",
529        ":spirv_tools_lint_internal",
530        ":spirv_tools_opt_internal",
531        "@googletest//:gtest",
532        "@googletest//:gtest_main",
533    ],
534) for f in glob(
535    ["test/lint/*_test.cpp"],
536)]
537
538cc_library(
539    name = "opt_test_lib",
540    testonly = 1,
541    srcs = [
542        "test/opt/pass_utils.cpp",
543    ],
544    hdrs = [
545        "test/opt/assembly_builder.h",
546        "test/opt/function_utils.h",
547        "test/opt/module_utils.h",
548        "test/opt/pass_fixture.h",
549        "test/opt/pass_utils.h",
550    ],
551    copts = TEST_COPTS,
552    deps = [
553        ":spirv_tools_internal",
554        ":spirv_tools_opt_internal",
555        "@com_google_effcee//:effcee",
556        "@googletest//:gtest",
557    ],
558)
559
560[cc_test(
561    name = "opt_{testcase}_test".format(testcase = f[len("test/opt/"):-len("_test.cpp")]),
562    size = "small",
563    srcs = [f],
564    copts = TEST_COPTS,
565    linkstatic = 1,
566    deps = [
567        ":opt_test_lib",
568        ":spirv_tools_internal",
569        ":spirv_tools_opt_internal",
570        ":test_lib",
571        "@com_google_effcee//:effcee",
572        "@googletest//:gtest",
573        "@googletest//:gtest_main",
574    ],
575) for f in glob(["test/opt/*_test.cpp"])]
576
577[cc_test(
578    name = "opt_dom_tree_{testcase}_test".format(testcase = f[len("test/opt/dominator_tree/"):-len(".cpp")]),
579    size = "small",
580    srcs = [f],
581    copts = TEST_COPTS,
582    linkstatic = 1,
583    deps = [
584        ":opt_test_lib",
585        ":spirv_tools_opt_internal",
586        "@googletest//:gtest",
587        "@googletest//:gtest_main",
588    ],
589) for f in glob(
590    ["test/opt/dominator_tree/*.cpp"],
591    exclude = ["test/opt/dominator_tree/pch_test_opt_dom.cpp"],
592)]
593
594[cc_test(
595    name = "opt_loop_{testcase}_test".format(testcase = f[len("test/opt/loop_optimizations/"):-len(".cpp")]),
596    size = "small",
597    srcs = [f],
598    copts = TEST_COPTS,
599    linkstatic = 1,
600    deps = [
601        ":opt_test_lib",
602        ":spirv_tools",
603        ":spirv_tools_opt_internal",
604        "@com_google_effcee//:effcee",
605        "@googletest//:gtest",
606        "@googletest//:gtest_main",
607    ],
608) for f in glob(
609    ["test/opt/loop_optimizations/*.cpp"],
610    exclude = ["test/opt/loop_optimizations/pch_test_opt_loop.cpp"],
611)]
612
613cc_library(
614    name = "reduce_test_lib",
615    testonly = 1,
616    srcs = [
617        "test/reduce/reduce_test_util.cpp",
618    ],
619    hdrs = ["test/reduce/reduce_test_util.h"],
620    copts = TEST_COPTS,
621    deps = [
622        ":spirv_tools",
623        ":spirv_tools_opt_internal",
624        ":spirv_tools_reduce",
625        ":test_lib",
626        ":tools_io",
627        "@googletest//:gtest",
628    ],
629)
630
631[cc_test(
632    name = "reduce_{testcase}_test".format(testcase = f[len("test/reduce/"):-len("_test.cpp")]),
633    size = "small",
634    srcs = [f],
635    copts = TEST_COPTS,
636    linkstatic = 1,
637    deps = [
638        ":reduce_test_lib",
639        ":spirv_tools_internal",
640        ":spirv_tools_opt_internal",
641        ":spirv_tools_reduce",
642        "@googletest//:gtest_main",
643    ],
644) for f in glob(["test/reduce/*_test.cpp"])]
645
646[cc_test(
647    name = "util_{testcase}_test".format(testcase = f[len("test/util/"):-len("_test.cpp")]),
648    size = "small",
649    srcs = [f],
650    copts = TEST_COPTS,
651    linkstatic = 1,
652    deps = [
653        ":spirv_tools_internal",
654        "@googletest//:gtest",
655        "@googletest//:gtest_main",
656    ],
657) for f in glob(["test/util/*_test.cpp"])]
658
659cc_library(
660    name = "val_test_lib",
661    testonly = 1,
662    srcs = [
663        "test/val/val_code_generator.cpp",
664    ],
665    hdrs = [
666        "test/val/val_code_generator.h",
667        "test/val/val_fixtures.h",
668    ],
669    copts = TEST_COPTS,
670    deps = [
671        ":spirv_tools_internal",
672        ":test_lib",
673    ],
674)
675
676[cc_test(
677    name = "val_{testcase}_test".format(testcase = f[len("test/val/val_"):-len("_test.cpp")]),
678    size = "small",
679    srcs = [f],
680    copts = TEST_COPTS,
681    linkstatic = 1,
682    deps = [
683        ":spirv_tools_internal",
684        ":test_lib",
685        ":val_test_lib",
686        "@googletest//:gtest",
687        "@googletest//:gtest_main",
688    ],
689) for f in glob(
690    ["test/val/val_*_test.cpp"],
691    exclude = [
692        "test/val/val_capability_test.cpp",
693        "test/val/val_limits_test.cpp",
694    ],
695)]
696
697cc_test(
698    name = "val_capability_test",
699    size = "large",
700    timeout = "long",
701    srcs = ["test/val/val_capability_test.cpp"],
702    copts = TEST_COPTS + ["-O3"],
703    linkstatic = 1,
704    deps = [
705        ":spirv_tools_internal",
706        ":test_lib",
707        ":val_test_lib",
708        "@googletest//:gtest",
709        "@googletest//:gtest_main",
710    ],
711)
712
713cc_test(
714    name = "val_limits_test",
715    size = "large",
716    timeout = "long",
717    srcs = ["test/val/val_limits_test.cpp"],
718    copts = TEST_COPTS + [
719        "-O3",
720    ],
721    linkstatic = 1,
722    deps = [
723        ":test_lib",
724        ":val_test_lib",
725        "@googletest//:gtest",
726        "@googletest//:gtest_main",
727    ],
728)
729