xref: /llvm-project/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel (revision 431024506c6f5597fe476e1283a08c9f8fa72ad7)
1# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
2# See https://llvm.org/LICENSE.txt for license information.
3# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
5load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
6load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
7load("@rules_python//python:defs.bzl", "py_binary")
8load("//mlir:tblgen.bzl", "td_library")
9load(":binary_alias.bzl", "binary_alias")
10load(":config.bzl", "llvm_config_defines")
11load(":driver.bzl", "generate_driver_selects", "generate_driver_tools_def", "llvm_driver_cc_binary", "select_driver_tools")
12load(":enum_targets_gen.bzl", "enum_targets_gen")
13load(":targets.bzl", "llvm_targets")
14load(":tblgen.bzl", "gentbl")
15
16package(
17    default_visibility = ["//visibility:public"],
18    features = ["layering_check"],
19)
20
21licenses(["notice"])
22
23exports_files([
24    "LICENSE.TXT",
25    "cmake/modules/llvm-driver-template.cpp.in",
26    "include/llvm/BinaryFormat/Dwarf.def",
27    "include/llvm/CodeGen/SDNodeProperties.td",
28    "include/llvm/CodeGen/ValueTypes.td",
29    "include/llvm/Frontend/Directive/DirectiveBase.td",
30    "include/llvm/Frontend/OpenACC/ACC.td",
31    "include/llvm/Frontend/OpenMP/OMP.td",
32    "include/llvm/IR/Intrinsics.td",
33    "include/llvm/Option/OptParser.td",
34    "utils/lit/lit.py",
35    # This one is needed for building and vendoring out lldb from off tree.
36    "utils/lldbDataFormatters.py",
37])
38
39# It may be tempting to add compiler flags here, but that should be avoided.
40# The necessary warnings and other compile flags should be provided by the
41# toolchain or the `.bazelrc` file. This is just a workaround until we have a
42# widely available feature to enable unlimited stack frame instead of using
43# this `Make` variable.
44llvm_copts = [
45    "$(STACK_FRAME_UNLIMITED)",
46]
47
48enum_targets_gen(
49    name = "targets_def_gen",
50    src = "include/llvm/Config/Targets.def.in",
51    out = "include/llvm/Config/Targets.def",
52    macro_name = "TARGET",
53    targets = llvm_targets,
54)
55
56# Enabled targets with ASM printers.
57llvm_target_asm_printers = [
58    t
59    for t in llvm_targets
60    if glob(["lib/Target/{}/*AsmPrinter.cpp".format(t)])
61]
62
63enum_targets_gen(
64    name = "asm_printers_def_gen",
65    src = "include/llvm/Config/AsmPrinters.def.in",
66    out = "include/llvm/Config/AsmPrinters.def",
67    macro_name = "ASM_PRINTER",
68    targets = llvm_target_asm_printers,
69)
70
71# Enabled targets with ASM parsers.
72llvm_target_asm_parsers = [
73    t
74    for t in llvm_targets
75    if glob(
76        ["lib/Target/{}/AsmParser/CMakeLists.txt".format(t)],
77        allow_empty = True,
78    )
79]
80
81enum_targets_gen(
82    name = "asm_parsers_def_gen",
83    src = "include/llvm/Config/AsmParsers.def.in",
84    out = "include/llvm/Config/AsmParsers.def",
85    macro_name = "ASM_PARSER",
86    targets = llvm_target_asm_parsers,
87)
88
89# Enabled targets with disassemblers.
90llvm_target_disassemblers = [
91    t
92    for t in llvm_targets
93    if glob(
94        ["lib/Target/{}/Disassembler/CMakeLists.txt".format(t)],
95        allow_empty = True,
96    )
97]
98
99enum_targets_gen(
100    name = "disassemblers_def_gen",
101    src = "include/llvm/Config/Disassemblers.def.in",
102    out = "include/llvm/Config/Disassemblers.def",
103    macro_name = "DISASSEMBLER",
104    targets = llvm_target_disassemblers,
105)
106
107# Enabled targets with MCA.
108llvm_target_mcas = [
109    t
110    for t in llvm_targets
111    if glob(
112        ["lib/Target/{}/MCA/CMakeLists.txt".format(t)],
113        allow_empty = True,
114    )
115]
116
117enum_targets_gen(
118    name = "target_mca_def_gen",
119    src = "include/llvm/Config/TargetMCAs.def.in",
120    out = "include/llvm/Config/TargetMCAs.def",
121    macro_name = "TARGETMCA",
122    targets = llvm_target_mcas,
123)
124
125# Enabled targets with exegesis.
126llvm_target_exegesis = [
127    t
128    for t in llvm_targets
129    if glob(
130        ["tools/llvm-exegesis/lib/{}/CMakeLists.txt".format(t)],
131        allow_empty = True,
132    )
133]
134
135enum_targets_gen(
136    name = "target_exegesis_def_gen",
137    src = "include/llvm/Config/TargetExegesis.def.in",
138    out = "include/llvm/Config/TargetExegesis.def",
139    macro_name = "EXEGESIS",
140    placeholder_name = "@LLVM_ENUM_EXEGESIS@",
141    targets = llvm_target_exegesis,
142)
143
144expand_template(
145    name = "abi_breaking_h_gen",
146    out = "include/llvm/Config/abi-breaking.h",
147    substitutions = {
148        # Define to enable checks that alter the LLVM C++ ABI
149        "#cmakedefine01 LLVM_ENABLE_ABI_BREAKING_CHECKS": "#define LLVM_ENABLE_ABI_BREAKING_CHECKS 0",
150
151        # Define to enable reverse iteration of unordered llvm containers
152        "#cmakedefine01 LLVM_ENABLE_REVERSE_ITERATION": "#define LLVM_ENABLE_REVERSE_ITERATION 0",
153    },
154    template = "include/llvm/Config/abi-breaking.h.cmake",
155)
156
157# To enable diff testing out of tree
158exports_files([
159    "include/llvm/Config/config.h.cmake",
160    "include/llvm/Config/llvm-config.h.cmake",
161    "include/llvm/Config/abi-breaking.h.cmake",
162])
163
164td_library(
165    name = "OptParserTdFiles",
166    srcs = ["include/llvm/Option/OptParser.td"],
167    includes = ["include"],
168)
169
170llvm_config_target_defines = [
171    "LLVM_HAS_{}_TARGET=1".format(t)
172    for t in llvm_targets
173]
174
175cc_library(
176    name = "config",
177    hdrs = [
178        "include/llvm/Config/abi-breaking.h",
179        "include/llvm/Config/llvm-config.h",
180    ],
181    copts = llvm_copts,
182    defines = llvm_config_defines + llvm_config_target_defines,
183    includes = ["include"],
184    textual_hdrs = [
185        "include/llvm/Config/AsmParsers.def",
186        "include/llvm/Config/AsmPrinters.def",
187        "include/llvm/Config/Disassemblers.def",
188        "include/llvm/Config/Targets.def",
189        "include/llvm/Config/TargetExegesis.def",
190        "include/llvm/Config/TargetMCAs.def",
191        # Needed for include scanner to find execinfo.h
192        "include/llvm/Config/config.h",
193    ],
194)
195
196cc_library(
197    name = "Demangle",
198    srcs = glob([
199        "lib/Demangle/*.cpp",
200    ]),
201    hdrs = glob([
202        "include/llvm/Demangle/*.h",
203        "include/llvm/Demangle/*.def",
204    ]),
205    copts = llvm_copts,
206    deps = [":config"],
207)
208
209genrule(
210    name = "generate_vcs_revision",
211    outs = ["include/llvm/Support/VCSRevision.h"],
212    cmd = "echo '#undef LLVM_REVISION' >> $@\n" +
213          "echo '#undef LLVM_REPOSITORY' >> $@\n",
214)
215
216genrule(
217    name = "generate_static_extension_registry",
218    outs = ["include/llvm/Support/Extension.def"],
219    cmd = "echo -e '// extension handlers' >> $@\n" +
220          "echo -e '#undef HANDLE_EXTENSION' >> $@\n",
221)
222
223cc_library(
224    name = "Support",
225    srcs = glob([
226        "lib/Support/*.c",
227        "lib/Support/*.cpp",
228        "lib/Support/*.h",
229        "lib/Support/*.inc",
230        # To avoid a dependency cycle.
231        "include/llvm/Option/*.h",
232    ]) + select({
233        "@platforms//os:windows": glob([
234            "lib/Support/Windows/*.inc",
235        ]),
236        "//conditions:default": glob([
237            "lib/Support/Unix/*.h",
238            "lib/Support/Unix/*.inc",
239        ]),
240    }) + [
241        "lib/Support/BLAKE3/blake3.c",
242        "lib/Support/BLAKE3/blake3_dispatch.c",
243        "lib/Support/BLAKE3/blake3_impl.h",
244        "lib/Support/BLAKE3/blake3_portable.c",
245        "lib/Support/BLAKE3/llvm_blake3_prefix.h",
246    ] + select({
247        "@platforms//cpu:aarch64": [
248            "lib/Support/BLAKE3/blake3_neon.c",
249        ],
250        "@platforms//cpu:x86_64": [
251            "lib/Support/BLAKE3/blake3_avx2_x86-64_unix.S",
252            "lib/Support/BLAKE3/blake3_avx512_x86-64_unix.S",
253            "lib/Support/BLAKE3/blake3_sse2_x86-64_unix.S",
254            "lib/Support/BLAKE3/blake3_sse41_x86-64_unix.S",
255        ],
256        "//conditions:default": [
257        ],
258    }),
259    hdrs = glob([
260        "include/llvm/Support/**/*.h",
261        "include/llvm/ADT/*.h",
262    ]) + [
263        "include/llvm-c/Core.h",
264        "include/llvm-c/DataTypes.h",
265        "include/llvm-c/Deprecated.h",
266        "include/llvm-c/DisassemblerTypes.h",
267        "include/llvm-c/Error.h",
268        "include/llvm-c/ErrorHandling.h",
269        "include/llvm-c/ExternC.h",
270        "include/llvm-c/Support.h",
271        "include/llvm-c/Types.h",
272        "include/llvm-c/blake3.h",
273        "include/llvm/ExecutionEngine/JITSymbol.h",
274        "include/llvm/Support/Extension.def",
275        "include/llvm/Support/VCSRevision.h",
276    ],
277    copts = llvm_copts,
278    defines = select({
279        "@platforms//cpu:aarch64": [
280        ],
281        "//conditions:default": [
282            "BLAKE3_USE_NEON=0",
283        ],
284    }) + select({
285        "@platforms//cpu:x86_64": [
286        ],
287        "//conditions:default": [
288            "BLAKE3_NO_AVX2",
289            "BLAKE3_NO_AVX512",
290            "BLAKE3_NO_SSE2",
291            "BLAKE3_NO_SSE41",
292        ],
293    }),
294    includes = ["include"],
295    linkopts = select({
296        "@platforms//os:windows": [
297            "ws2_32.lib",
298            "ntdll.lib",
299        ],
300        "@platforms//os:freebsd": [
301            "-pthread",
302            "-lexecinfo",
303            "-ldl",
304            "-lm",
305        ],
306        "@platforms//os:macos": [
307            "-pthread",
308            "-ldl",
309        ],
310        "//conditions:default": [
311            "-pthread",
312            "-ldl",
313            "-lm",
314        ],
315    }),
316    textual_hdrs = glob([
317        "include/llvm/Support/*.def",
318    ]),
319    deps = [
320        ":config",
321        ":Demangle",
322        # We unconditionally depend on the custom LLVM zlib wrapper. This will
323        # be an empty library unless zlib is enabled, in which case it will
324        # both provide the necessary dependencies and configuration defines.
325        "@llvm_zlib//:zlib",
326        # We unconditionally depend on the custom LLVM zstd wrapper. This will
327        # be an empty library unless zstd is enabled, in which case it will
328        # both provide the necessary dependencies and configuration defines.
329        "@llvm_zstd//:zstd",
330    ],
331)
332
333# Note: although FileCheck (the binary) is a test utility, some non-test
334# targets depend on the FileCheck library target.
335cc_library(
336    name = "FileCheckLib",
337    srcs = glob([
338        "lib/FileCheck/*.cpp",
339        "lib/FileCheck/*.h",
340    ]),
341    hdrs = glob(["include/llvm/FileCheck/*.h"]),
342    copts = llvm_copts,
343    deps = [":Support"],
344)
345
346cc_library(
347    name = "LineEditor",
348    srcs = glob([
349        "lib/LineEditor/*.cpp",
350    ]),
351    hdrs = glob(["include/llvm/LineEditor/*.h"]),
352    copts = llvm_copts,
353    deps = [
354        ":Support",
355        ":config",
356    ],
357)
358
359cc_library(
360    name = "Option",
361    srcs = glob([
362        "lib/Option/*.cpp",
363    ]),
364    hdrs = glob(["include/llvm/Option/*.h"]),
365    copts = llvm_copts,
366    deps = [
367        ":Support",
368        ":config",
369    ],
370)
371
372cc_library(
373    name = "TableGen",
374    srcs = glob([
375        "lib/TableGen/*.cpp",
376        "lib/TableGen/*.h",
377    ]),
378    hdrs = glob(["include/llvm/TableGen/*.h"]),
379    copts = llvm_copts,
380    deps = [
381        ":Support",
382        ":config",
383    ],
384)
385
386# This exists to avoid circular dependencies.
387cc_library(
388    name = "ir_headers",
389    hdrs = glob(
390        [
391            "include/llvm/*.h",
392            "include/llvm/IR/*.h",
393        ],
394        exclude = [
395            "include/llvm/LinkAllPasses.h",
396        ],
397    ) + [
398        "include/llvm-c/Comdat.h",
399        "include/llvm-c/DebugInfo.h",
400        "include/llvm/IR/Value.def",
401    ],
402    copts = llvm_copts,
403)
404
405cc_library(
406    name = "BinaryFormat",
407    srcs = glob([
408        "lib/BinaryFormat/*.cpp",
409    ]),
410    hdrs = glob([
411        "include/llvm/BinaryFormat/*.h",
412    ]),
413    copts = llvm_copts,
414    includes = ["include"],
415    textual_hdrs = glob([
416        "include/llvm/BinaryFormat/*.def",
417        "include/llvm/BinaryFormat/ELFRelocs/*.def",
418    ]),
419    deps = [
420        ":Support",
421        ":TargetParser",
422    ],
423)
424
425cc_library(
426    name = "DebugInfo",
427    hdrs = glob(["include/llvm/DebugInfo/*.h"]),
428    copts = llvm_copts,
429    deps = [
430        ":Object",
431        ":Support",
432    ],
433)
434
435cc_library(
436    name = "DebugInfoMSF",
437    srcs = glob([
438        "lib/DebugInfo/MSF/*.cpp",
439    ]),
440    hdrs = glob(["include/llvm/DebugInfo/MSF/*.h"]),
441    copts = llvm_copts,
442    deps = [":Support"],
443)
444
445cc_library(
446    name = "DebugInfoBTF",
447    srcs = glob([
448        "lib/DebugInfo/BTF/*.cpp",
449    ]),
450    hdrs = glob(["include/llvm/DebugInfo/BTF/*.h"]) + [
451        "include/llvm/DebugInfo/BTF/BTF.def",
452    ],
453    copts = llvm_copts,
454    deps = [
455        ":DebugInfo",
456        ":Object",
457        ":Support",
458    ],
459)
460
461cc_library(
462    name = "DebugInfoCodeView",
463    srcs = glob([
464        "lib/DebugInfo/CodeView/*.cpp",
465    ]),
466    hdrs = glob([
467        "include/llvm/DebugInfo/CodeView/*.h",
468    ]),
469    copts = llvm_copts,
470    textual_hdrs = glob([
471        "include/llvm/DebugInfo/CodeView/*.def",
472    ]),
473    deps = [
474        ":BinaryFormat",
475        ":DebugInfoMSF",
476        ":Support",
477    ],
478)
479
480cc_library(
481    name = "DebugInfoLogicalView",
482    srcs = glob([
483        "lib/DebugInfo/LogicalView/**/*.cpp",
484    ]),
485    hdrs = glob([
486        "include/llvm/DebugInfo/LogicalView/**/*.h",
487    ]),
488    copts = llvm_copts,
489    deps = [
490        ":BinaryFormat",
491        ":DebugInfo",
492        ":DebugInfoCodeView",
493        ":DebugInfoDWARF",
494        ":DebugInfoPDB",
495        ":Demangle",
496        ":MC",
497        ":MCDisassembler",
498        ":Object",
499        ":Support",
500    ],
501)
502
503cc_library(
504    name = "DebugInfoPDB",
505    srcs = glob([
506        "lib/DebugInfo/PDB/*.cpp",
507        "lib/DebugInfo/PDB/Native/*.cpp",
508    ]),
509    hdrs = glob([
510        "include/llvm/DebugInfo/PDB/*.h",
511        "include/llvm/DebugInfo/PDB/Native/*.h",
512    ]),
513    copts = llvm_copts,
514    deps = [
515        ":BinaryFormat",
516        ":DebugInfo",
517        ":DebugInfoBTF",
518        ":DebugInfoCodeView",
519        ":DebugInfoMSF",
520        ":Object",
521        ":Support",
522        ":config",
523    ],
524)
525
526cc_library(
527    name = "Debuginfod",
528    srcs = glob([
529        "lib/Debuginfod/*.cpp",
530    ]),
531    hdrs = glob([
532        "include/llvm/Debuginfod/*.h",
533    ]),
534    copts = llvm_copts,
535    deps = [
536        ":BinaryFormat",
537        ":DebugInfoDWARF",
538        ":Object",
539        ":Support",
540        ":Symbolize",
541    ],
542)
543
544cc_library(
545    name = "MC",
546    srcs = glob([
547        "lib/MC/*.cpp",
548    ]),
549    hdrs = glob([
550        "include/llvm/MC/*.h",
551    ]),
552    copts = llvm_copts,
553    deps = [
554        ":BinaryFormat",
555        ":DebugInfoCodeView",
556        ":Support",
557        ":TargetParser",
558        ":config",
559        ":ir_headers",
560    ],
561)
562
563cc_library(
564    name = "DebugInfoDWARF",
565    srcs = glob([
566        "lib/DebugInfo/DWARF/*.cpp",
567    ]),
568    hdrs = glob(["include/llvm/DebugInfo/DWARF/*.h"]),
569    copts = llvm_copts,
570    deps = [
571        ":BinaryFormat",
572        ":DebugInfo",
573        ":MC",
574        ":Object",
575        ":Support",
576        ":TargetParser",
577    ],
578)
579
580cc_library(
581    name = "DebugInfoGSYM",
582    srcs = glob([
583        "lib/DebugInfo/GSYM/*.cpp",
584    ]),
585    hdrs = glob(["include/llvm/DebugInfo/GSYM/*.h"]),
586    copts = llvm_copts,
587    deps = [
588        ":DebugInfo",
589        ":DebugInfoDWARF",
590        ":MC",
591        ":Object",
592        ":Support",
593    ],
594)
595
596cc_library(
597    name = "Symbolize",
598    srcs = glob([
599        "lib/DebugInfo/Symbolize/*.cpp",
600    ]),
601    hdrs = glob([
602        "include/llvm/DebugInfo/Symbolize/*.h",
603        "include/llvm/Debuginfod/*.h",
604    ]),
605    copts = llvm_copts,
606    deps = [
607        ":BinaryFormat",
608        ":DebugInfo",
609        ":DebugInfoBTF",
610        ":DebugInfoDWARF",
611        ":DebugInfoPDB",
612        ":Demangle",
613        ":Object",
614        ":Support",
615        ":TargetParser",
616    ],
617)
618
619# Command line flag to control which tools get included in the llvm driver binary.
620# The macro also generates config_setting targets used by select_driver_tools().
621generate_driver_selects(name = "driver-tools")
622
623generate_driver_tools_def(
624    name = "gen_llvm_driver_tools_def",
625    out = "LLVMDriverTools.def",
626    driver_tools = select_driver_tools(":driver-tools"),
627)
628
629# Workaround inability to put `.def` files into `srcs` with a library
630cc_library(
631    name = "llvm_driver_tools_def_lib",
632    includes = ["."],
633    textual_hdrs = ["LLVMDriverTools.def"],
634)
635
636cc_binary(
637    name = "llvm",
638    srcs = glob(["tools/llvm-driver/*.cpp"]),
639    deps = [
640        ":Support",
641        ":llvm_driver_tools_def_lib",
642    ] + select_driver_tools(":driver-tools"),
643)
644
645cc_binary(
646    name = "llvm-min-tblgen",
647    srcs = [
648        "utils/TableGen/Basic/ARMTargetDefEmitter.cpp",
649        "utils/TableGen/Basic/Attributes.cpp",
650        "utils/TableGen/Basic/CodeGenIntrinsics.cpp",
651        "utils/TableGen/Basic/CodeGenIntrinsics.h",
652        "utils/TableGen/Basic/DirectiveEmitter.cpp",
653        "utils/TableGen/Basic/IntrinsicEmitter.cpp",
654        "utils/TableGen/Basic/RISCVTargetDefEmitter.cpp",
655        "utils/TableGen/Basic/SDNodeProperties.cpp",
656        "utils/TableGen/Basic/SDNodeProperties.h",
657        "utils/TableGen/Basic/SequenceToOffsetTable.h",
658        "utils/TableGen/Basic/TableGen.cpp",
659        "utils/TableGen/Basic/TableGen.h",
660        "utils/TableGen/Basic/VTEmitter.cpp",
661        "utils/TableGen/llvm-min-tblgen.cpp",
662    ],
663    copts = llvm_copts,
664    stamp = 0,
665    deps = [
666        ":Support",
667        ":TableGen",
668        ":config",
669    ],
670)
671
672cc_library(
673    name = "TableGenGlobalISel",
674    srcs = [
675        "utils/TableGen/Common/GlobalISel/CodeExpander.cpp",
676    ],
677    hdrs = [
678        # We have to include these headers here as well as in the `hdrs` below
679        # to allow the `.cpp` files to use file-relative-inclusion to find
680        # them, even though consumers of this library use inclusion relative to
681        # `utils/TableGen` with the `strip_includes_prefix` of this library.
682        # This mixture appears to be incompatible with header modules.
683        "utils/TableGen/Common/GlobalISel/CodeExpander.h",
684        "utils/TableGen/Common/GlobalISel/CodeExpansions.h",
685    ],
686    copts = llvm_copts,
687    features = ["-header_modules"],
688    strip_include_prefix = "utils/TableGen",
689    deps = [
690        ":CodeGenTypes",
691        ":Support",
692        ":TableGen",
693        ":config",
694    ],
695)
696
697cc_library(
698    name = "llvm-tblgen-headers",
699    textual_hdrs = glob(["utils/TableGen/*.def"]),
700)
701
702cc_binary(
703    name = "llvm-tblgen",
704    srcs = glob(
705        [
706            "utils/TableGen/*.cpp",
707            "utils/TableGen/*.h",
708            "utils/TableGen/Basic/*.cpp",
709            "utils/TableGen/Basic/*.h",
710            "utils/TableGen/Common/*.cpp",
711            "utils/TableGen/Common/*.h",
712            "utils/TableGen/Common/GlobalISel/*.cpp",
713            "utils/TableGen/Common/GlobalISel/*.h",
714
715            # Some tablegen sources include headers from MC, so these have to be
716            # listed here. MC uses headers produced by tablegen, so it cannot be a
717            # regular dependency.
718            "include/llvm/MC/*.h",
719        ],
720        exclude = [
721            "utils/TableGen/Common/GlobalISel/CodeExpander.cpp",
722            "utils/TableGen/llvm-min-tblgen.cpp",
723        ],
724    ) + [
725        "include/llvm/TargetParser/SubtargetFeature.h",
726    ],
727    copts = llvm_copts,
728    includes = ["utils/TableGen"],
729    stamp = 0,
730    deps = [
731        ":CodeGenTypes",
732        ":Support",
733        ":TableGen",
734        ":TableGenGlobalISel",
735        ":TargetParser",
736        ":config",
737        ":llvm-tblgen-headers",
738        ":vt_gen",
739    ],
740)
741
742gentbl(
743    name = "intrinsic_enums_gen",
744    tbl_outs = [("-gen-intrinsic-enums", "include/llvm/IR/IntrinsicEnums.inc")],
745    tblgen = ":llvm-min-tblgen",
746    td_file = "include/llvm/IR/Intrinsics.td",
747    td_srcs = glob([
748        "include/llvm/CodeGen/*.td",
749        "include/llvm/IR/Intrinsics*.td",
750    ]),
751)
752
753gentbl(
754    name = "intrinsics_impl_gen",
755    tbl_outs = [("-gen-intrinsic-impl", "include/llvm/IR/IntrinsicImpl.inc")],
756    tblgen = ":llvm-min-tblgen",
757    td_file = "include/llvm/IR/Intrinsics.td",
758    td_srcs = glob([
759        "include/llvm/CodeGen/*.td",
760        "include/llvm/IR/Intrinsics*.td",
761    ]),
762)
763
764gentbl(
765    name = "vt_gen",
766    tbl_outs = [("-gen-vt", "include/llvm/CodeGen/GenVT.inc")],
767    tblgen = ":llvm-min-tblgen",
768    td_file = "include/llvm/CodeGen/ValueTypes.td",
769    td_srcs = [
770        "include/llvm/CodeGen/ValueTypes.td",
771    ],
772)
773
774# Note that the intrinsics are not currently set up so they can be pruned for
775# disabled targets.
776llvm_target_intrinsics_list = [
777    {
778        "name": "AArch64",
779        "intrinsic_prefix": "aarch64",
780    },
781    {
782        "name": "AMDGPU",
783        "intrinsic_prefix": "amdgcn",
784    },
785    {
786        "name": "ARM",
787        "intrinsic_prefix": "arm",
788    },
789    {
790        "name": "BPF",
791        "intrinsic_prefix": "bpf",
792    },
793    {
794        "name": "DirectX",
795        "intrinsic_prefix": "dx",
796    },
797    {
798        "name": "Hexagon",
799        "intrinsic_prefix": "hexagon",
800    },
801    {
802        "name": "LoongArch",
803        "intrinsic_prefix": "loongarch",
804    },
805    {
806        "name": "Mips",
807        "intrinsic_prefix": "mips",
808    },
809    {
810        "name": "NVPTX",
811        "intrinsic_prefix": "nvvm",
812    },
813    {
814        "name": "PowerPC",
815        "intrinsic_prefix": "ppc",
816    },
817    {
818        "name": "R600",
819        "intrinsic_prefix": "r600",
820    },
821    {
822        "name": "RISCV",
823        "intrinsic_prefix": "riscv",
824    },
825    {
826        "name": "S390",
827        "intrinsic_prefix": "s390",
828    },
829    {
830        "name": "SPIRV",
831        "intrinsic_prefix": "spv",
832    },
833    {
834        "name": "VE",
835        "intrinsic_prefix": "ve",
836    },
837    {
838        "name": "WebAssembly",
839        "intrinsic_prefix": "wasm",
840    },
841    {
842        "name": "X86",
843        "intrinsic_prefix": "x86",
844    },
845    {
846        "name": "XCore",
847        "intrinsic_prefix": "xcore",
848    },
849]
850
851[[
852    gentbl(
853        name = "intrinsic_" + target["name"] + "_gen",
854        tbl_outs = [(
855            "-gen-intrinsic-enums -intrinsic-prefix=" + target["intrinsic_prefix"],
856            "include/llvm/IR/Intrinsics" + target["name"] + ".h",
857        )],
858        tblgen = ":llvm-min-tblgen",
859        td_file = "include/llvm/IR/Intrinsics.td",
860        td_srcs = glob([
861            "include/llvm/CodeGen/*.td",
862            "include/llvm/IR/*.td",
863        ]),
864    ),
865] for target in llvm_target_intrinsics_list]
866
867gentbl(
868    name = "attributes_gen",
869    tbl_outs = [("-gen-attrs", "include/llvm/IR/Attributes.inc")],
870    tblgen = ":llvm-min-tblgen",
871    td_file = "include/llvm/IR/Attributes.td",
872    td_srcs = ["include/llvm/IR/Attributes.td"],
873)
874
875cc_library(
876    name = "BitstreamReader",
877    srcs = glob([
878        "lib/Bitstream/Reader/*.cpp",
879    ]),
880    hdrs = [
881        "include/llvm/Bitstream/BitCodeEnums.h",
882        "include/llvm/Bitstream/BitCodes.h",
883        "include/llvm/Bitstream/BitstreamReader.h",
884    ],
885    copts = llvm_copts,
886    deps = [
887        ":Support",
888    ],
889)
890
891cc_library(
892    name = "BitstreamWriter",
893    hdrs = [
894        "include/llvm/Bitstream/BitCodeEnums.h",
895        "include/llvm/Bitstream/BitCodes.h",
896        "include/llvm/Bitstream/BitstreamWriter.h",
897    ],
898    copts = llvm_copts,
899    deps = [
900        ":Support",
901    ],
902)
903
904cc_library(
905    name = "Remarks",
906    srcs = glob(
907        [
908            "lib/Remarks/*.cpp",
909            "lib/Remarks/*.h",
910        ],
911        exclude = ["lib/Remarks/RemarkLinker.cpp"],
912    ),
913    hdrs = glob(
914        [
915            "include/llvm/Remarks/*.h",
916        ],
917        exclude = ["include/llvm/Remarks/RemarkLinker.h"],
918    ) + [
919        "include/llvm-c/Remarks.h",
920    ],
921    copts = llvm_copts,
922    deps = [
923        ":BitstreamReader",
924        ":BitstreamWriter",
925        ":Support",
926    ],
927)
928
929cc_library(
930    name = "remark_linker",
931    srcs = ["lib/Remarks/RemarkLinker.cpp"],
932    hdrs = ["include/llvm/Remarks/RemarkLinker.h"],
933    copts = llvm_copts,
934    deps = [
935        ":Object",
936        ":Remarks",
937        ":Support",
938    ],
939)
940
941filegroup(
942    name = "llvm_intrinsics_headers",
943    srcs = [
944        "include/llvm/IR/Intrinsics" + target["name"] + ".h"
945        for target in llvm_target_intrinsics_list
946    ],
947)
948
949cc_library(
950    name = "Core",
951    srcs = glob([
952        "lib/IR/*.cpp",
953        "lib/IR/*.h",
954    ]),
955    hdrs = glob(
956        [
957            "include/llvm/*.h",
958            "include/llvm/IR/*.h",
959        ],
960        exclude = [
961            "include/llvm/LinkAllPasses.h",
962        ],
963    ) + [
964        "include/llvm-c/Comdat.h",
965        "include/llvm-c/DebugInfo.h",
966        "include/llvm/Analysis/SimplifyQuery.h",
967        "include/llvm/Analysis/ValueTracking.h",
968        "include/llvm/Analysis/WithCache.h",
969    ] + [":llvm_intrinsics_headers"],
970    copts = llvm_copts,
971    textual_hdrs = glob(["include/llvm/IR/*.def"]),
972    deps = [
973        ":BinaryFormat",
974        ":Demangle",
975        ":Remarks",
976        ":Support",
977        ":TargetParser",
978        ":attributes_gen",
979        ":config",
980        ":intrinsic_enums_gen",
981        ":intrinsics_impl_gen",
982    ],
983)
984
985cc_library(
986    name = "BitReader",
987    srcs = glob([
988        "lib/Bitcode/Reader/*.cpp",
989        "lib/Bitcode/Reader/*.h",
990    ]),
991    hdrs = [
992        "include/llvm-c/BitReader.h",
993        "include/llvm/Bitcode/BitcodeAnalyzer.h",
994        "include/llvm/Bitcode/BitcodeCommon.h",
995        "include/llvm/Bitcode/BitcodeReader.h",
996        "include/llvm/Bitcode/LLVMBitCodes.h",
997    ],
998    copts = llvm_copts,
999    deps = [
1000        ":BinaryFormat",
1001        ":BitstreamReader",
1002        ":Core",
1003        ":Support",
1004        ":TargetParser",
1005        ":config",
1006    ],
1007)
1008
1009cc_library(
1010    name = "MCParser",
1011    srcs = glob([
1012        "lib/MC/MCParser/*.cpp",
1013    ]),
1014    hdrs = glob(["include/llvm/MC/MCParser/*.h"]),
1015    copts = llvm_copts,
1016    deps = [
1017        ":BinaryFormat",
1018        ":DebugInfoCodeView",
1019        ":MC",
1020        ":Support",
1021        ":TargetParser",
1022        ":config",
1023    ],
1024)
1025
1026cc_library(
1027    name = "TextAPI",
1028    srcs = glob(
1029        [
1030            "lib/TextAPI/**/*.cpp",
1031        ],
1032        exclude = ["lib/TextAPI/BinaryReader/**"],
1033    ),
1034    hdrs = glob(
1035        [
1036            "include/llvm/TextAPI/**/*.h",
1037            "include/llvm/TextAPI/**/*.def",
1038            "lib/TextAPI/**/*.h",
1039        ],
1040        exclude = [
1041            "lib/TextAPI/BinaryReader/**",
1042            "include/llvm/TextAPI/DylibReader.h",
1043        ],
1044    ),
1045    copts = llvm_copts,
1046    deps = [
1047        ":BinaryFormat",
1048        ":Support",
1049        ":TargetParser",
1050    ],
1051)
1052
1053cc_library(
1054    name = "TextAPIBinaryReader",
1055    srcs = glob([
1056        "lib/TextAPI/BinaryReader/**/*.cpp",
1057    ]),
1058    hdrs = ["include/llvm/TextAPI/DylibReader.h"],
1059    copts = llvm_copts,
1060    deps = [
1061        ":DebugInfoDWARF",
1062        ":Object",
1063        ":Support",
1064        ":TargetParser",
1065        ":TextAPI",
1066    ],
1067)
1068
1069cc_library(
1070    name = "ObjCopy",
1071    srcs = glob([
1072        "lib/ObjCopy/**/*.cpp",
1073        "lib/ObjCopy/**/*.h",
1074    ]),
1075    hdrs = glob([
1076        "include/llvm/ObjCopy/**/*.h",
1077    ]),
1078    copts = llvm_copts,
1079    includes = ["lib/ObjCopy"],
1080    deps = [
1081        ":BinaryFormat",
1082        ":MC",
1083        ":Object",
1084        ":ObjectYAML",
1085        ":Option",
1086        ":Support",
1087        ":Target",
1088        ":intrinsics_impl_gen",
1089    ],
1090)
1091
1092cc_library(
1093    name = "Object",
1094    srcs = glob([
1095        "lib/Object/*.cpp",
1096        "lib/Object/*.h",
1097    ]),
1098    hdrs = glob([
1099        "include/llvm/Object/*.h",
1100    ]) + [
1101        "include/llvm-c/Object.h",
1102    ],
1103    copts = llvm_copts,
1104    deps = [
1105        ":BinaryFormat",
1106        ":BitReader",
1107        ":Core",
1108        ":IRReader",
1109        ":MC",
1110        ":MCParser",
1111        ":Support",
1112        ":TargetParser",
1113        ":TextAPI",
1114        ":config",
1115    ],
1116)
1117
1118cc_library(
1119    name = "ObjectYAML",
1120    srcs = glob([
1121        "lib/ObjectYAML/*.cpp",
1122    ]),
1123    hdrs = glob(["include/llvm/ObjectYAML/*.h"]),
1124    copts = llvm_copts,
1125    deps = [
1126        ":BinaryFormat",
1127        ":DebugInfoCodeView",
1128        ":MC",
1129        ":Object",
1130        ":Support",
1131        ":TargetParser",
1132    ],
1133)
1134
1135cc_library(
1136    name = "ProfileData",
1137    srcs = glob([
1138        "lib/ProfileData/*.cpp",
1139    ]),
1140    hdrs = glob([
1141        "include/llvm/ProfileData/*.h",
1142        "include/llvm/ProfileData/*.inc",
1143    ]),
1144    copts = llvm_copts,
1145    deps = [
1146        ":BitstreamReader",
1147        ":BitstreamWriter",
1148        ":Core",
1149        ":DebugInfo",
1150        ":DebugInfoDWARF",
1151        ":Demangle",
1152        ":Object",
1153        ":Support",
1154        ":Symbolize",
1155        ":TargetParser",
1156        ":config",
1157    ],
1158)
1159
1160cc_library(
1161    name = "Coverage",
1162    srcs = glob([
1163        "lib/ProfileData/Coverage/*.cpp",
1164    ]),
1165    hdrs = glob(["include/llvm/ProfileData/Coverage/*.h"]),
1166    copts = llvm_copts,
1167    deps = [
1168        ":BinaryFormat",
1169        ":Object",
1170        ":ProfileData",
1171        ":Support",
1172        ":TargetParser",
1173    ],
1174)
1175
1176cc_library(
1177    name = "Analysis",
1178    srcs = glob(
1179        [
1180            "lib/Analysis/*.cpp",
1181        ],
1182    ),
1183    hdrs = glob(
1184        [
1185            "include/llvm/Analysis/*.h",
1186            "include/llvm/Analysis/Utils/*.h",
1187        ],
1188    ) + [
1189        "include/llvm-c/Analysis.h",
1190    ],
1191    copts = llvm_copts,
1192    textual_hdrs = glob([
1193        "include/llvm/Analysis/*.def",
1194    ]),
1195    deps = [
1196        ":BinaryFormat",
1197        ":Core",
1198        ":Object",
1199        ":ProfileData",
1200        ":Support",
1201        ":TargetParser",
1202        ":config",
1203    ],
1204)
1205
1206cc_library(
1207    name = "BitWriter",
1208    srcs = glob([
1209        "lib/Bitcode/Writer/*.cpp",
1210        "lib/Bitcode/Writer/*.h",
1211    ]),
1212    hdrs = [
1213        "include/llvm-c/BitWriter.h",
1214        "include/llvm/Bitcode/BitcodeCommon.h",
1215        "include/llvm/Bitcode/BitcodeConvenience.h",
1216        "include/llvm/Bitcode/BitcodeWriter.h",
1217        "include/llvm/Bitcode/BitcodeWriterPass.h",
1218        "include/llvm/Bitcode/LLVMBitCodes.h",
1219    ],
1220    copts = llvm_copts,
1221    deps = [
1222        ":Analysis",
1223        ":BitReader",
1224        ":BitstreamWriter",
1225        ":Core",
1226        ":MC",
1227        ":Object",
1228        ":ProfileData",
1229        ":Support",
1230        ":TargetParser",
1231        ":config",
1232    ],
1233)
1234
1235cc_library(
1236    name = "Target",
1237    srcs = glob([
1238        "lib/Target/*.cpp",
1239    ]),
1240    hdrs = glob([
1241        "include/llvm/Target/*.h",
1242    ]) + [
1243        "include/llvm-c/Target.h",
1244        "include/llvm-c/TargetMachine.h",
1245    ],
1246    copts = llvm_copts,
1247    deps = [
1248        ":Analysis",
1249        ":BinaryFormat",
1250        ":Core",
1251        ":MC",
1252        ":Support",
1253        ":TargetParser",
1254        ":config",
1255    ],
1256)
1257
1258filegroup(
1259    name = "common_target_td_sources",
1260    srcs = glob([
1261        "include/llvm/CodeGen/*.td",
1262        "include/llvm/Frontend/Directive/*.td",
1263        "include/llvm/IR/Intrinsics*.td",
1264        "include/llvm/TableGen/*.td",
1265        "include/llvm/Target/*.td",
1266        "include/llvm/Target/GlobalISel/*.td",
1267    ]),
1268)
1269
1270td_library(
1271    name = "CommonTargetTdFiles",
1272    srcs = [":common_target_td_sources"],
1273    includes = ["include"],
1274)
1275
1276gentbl(
1277    name = "ARMTargetParserDefGen",
1278    tbl_outs = [("-gen-arm-target-def", "include/llvm/TargetParser/ARMTargetParserDef.inc")],
1279    tblgen = ":llvm-min-tblgen",
1280    td_file = "lib/Target/ARM/ARM.td",
1281    td_srcs = [
1282        ":common_target_td_sources",
1283    ] + glob([
1284        "lib/Target/ARM/**/*.td",
1285    ]),
1286)
1287
1288gentbl(
1289    name = "AArch64TargetParserDefGen",
1290    tbl_outs = [("-gen-arm-target-def", "include/llvm/TargetParser/AArch64TargetParserDef.inc")],
1291    tblgen = ":llvm-min-tblgen",
1292    td_file = "lib/Target/AArch64/AArch64.td",
1293    td_srcs = [
1294        ":common_target_td_sources",
1295    ] + glob([
1296        "lib/Target/AArch64/**/*.td",
1297    ]),
1298)
1299
1300gentbl(
1301    name = "RISCVTargetParserDefGen",
1302    tbl_outs = [("-gen-riscv-target-def", "include/llvm/TargetParser/RISCVTargetParserDef.inc")],
1303    tblgen = ":llvm-min-tblgen",
1304    td_file = "lib/Target/RISCV/RISCV.td",
1305    td_srcs = [
1306        ":common_target_td_sources",
1307    ] + glob([
1308        "lib/Target/RISCV/**/*.td",
1309    ]),
1310)
1311
1312cc_library(
1313    name = "TargetParser",
1314    srcs = glob([
1315        "lib/TargetParser/*.cpp",
1316    ]) + select({
1317        "@platforms//os:windows": glob([
1318            "lib/TargetParser/Windows/*.inc",
1319        ]),
1320        "//conditions:default": glob([
1321            "lib/TargetParser/Unix/*.inc",
1322        ]),
1323    }),
1324    hdrs = glob([
1325        "include/llvm/TargetParser/*.h",
1326    ]),
1327    copts = llvm_copts,
1328    includes = ["include"],
1329    textual_hdrs = [
1330        "include/llvm/TargetParser/AArch64CPUFeatures.inc",
1331        "include/llvm/TargetParser/AArch64FeatPriorities.inc",
1332        "include/llvm/TargetParser/AArch64TargetParserDef.inc",
1333        "include/llvm/TargetParser/ARMTargetParserDef.inc",
1334        "include/llvm/TargetParser/RISCVTargetParserDef.inc",
1335    ] + glob([
1336        "include/llvm/TargetParser/*.def",
1337    ]),
1338    deps = [
1339        ":Support",
1340        ":config",
1341    ],
1342)
1343
1344cc_library(
1345    name = "DWP",
1346    srcs = glob([
1347        "lib/DWP/*.cpp",
1348    ]),
1349    hdrs = glob(["include/llvm/DWP/*.h"]),
1350    copts = llvm_copts,
1351    deps = [
1352        ":DebugInfoDWARF",
1353        ":MC",
1354        ":Object",
1355        ":Support",
1356        ":Target",
1357    ],
1358)
1359
1360cc_library(
1361    name = "TransformUtils",
1362    srcs = glob([
1363        "lib/Transforms/Utils/*.cpp",
1364    ]),
1365    hdrs = glob(["include/llvm/Transforms/Utils/*.h"]) + [
1366        "include/llvm/Transforms/Utils.h",
1367    ],
1368    copts = llvm_copts,
1369    deps = [
1370        ":Analysis",
1371        ":BinaryFormat",
1372        ":BitWriter",
1373        ":Core",
1374        ":ProfileData",
1375        ":Support",
1376        ":Target",
1377        ":TargetParser",
1378        ":config",
1379    ],
1380)
1381
1382gentbl(
1383    name = "InstCombineTableGen",
1384    strip_include_prefix = "lib/Target/AMDGPU",
1385    tbl_outs = [(
1386        "-gen-searchable-tables",
1387        "lib/Target/AMDGPU/InstCombineTables.inc",
1388    )],
1389    tblgen = ":llvm-tblgen",
1390    td_file = "lib/Target/AMDGPU/InstCombineTables.td",
1391    td_srcs = glob([
1392        "lib/Target/AMDGPU/*.td",
1393    ]) + [
1394        ":common_target_td_sources",
1395    ],
1396)
1397
1398cc_library(
1399    name = "InstCombine",
1400    srcs = glob([
1401        "lib/Transforms/InstCombine/*.cpp",
1402        "lib/Transforms/InstCombine/*.h",
1403    ]),
1404    hdrs = glob(["include/llvm/Transforms/InstCombine/*.h"]),
1405    copts = llvm_copts,
1406    deps = [
1407        ":Analysis",
1408        ":Core",
1409        ":Support",
1410        ":Target",
1411        ":TransformUtils",
1412        ":config",
1413    ],
1414)
1415
1416cc_library(
1417    name = "AggressiveInstCombine",
1418    srcs = glob([
1419        "lib/Transforms/AggressiveInstCombine/*.cpp",
1420        "lib/Transforms/AggressiveInstCombine/*.h",
1421    ]),
1422    hdrs = [
1423        "include/llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h",
1424    ],
1425    copts = llvm_copts,
1426    deps = [
1427        ":Analysis",
1428        ":Core",
1429        ":Support",
1430        ":TransformUtils",
1431    ],
1432)
1433
1434cc_library(
1435    name = "Instrumentation",
1436    srcs = glob([
1437        "lib/Transforms/Instrumentation/*.cpp",
1438        "lib/Transforms/Instrumentation/*.h",
1439        "lib/Transforms/Instrumentation/*.inc",
1440    ]),
1441    hdrs = glob(["include/llvm/Transforms/Instrumentation/*.h"]) + [
1442        "include/llvm/Transforms/Utils/Instrumentation.h",
1443    ],
1444    copts = llvm_copts,
1445    deps = [
1446        ":Analysis",
1447        ":BinaryFormat",
1448        ":Core",
1449        ":Demangle",
1450        ":MC",
1451        ":ProfileData",
1452        ":Scalar",
1453        ":Support",
1454        ":Target",
1455        ":TargetParser",
1456        ":TransformUtils",
1457        ":config",
1458    ],
1459)
1460
1461cc_library(
1462    name = "ObjCARC",
1463    srcs = glob([
1464        "lib/Transforms/ObjCARC/*.cpp",
1465        "lib/Transforms/ObjCARC/*.h",
1466    ]),
1467    hdrs = ["include/llvm/Transforms/ObjCARC.h"],
1468    copts = llvm_copts,
1469    deps = [
1470        ":Analysis",
1471        ":Core",
1472        ":Support",
1473        ":Target",
1474        ":TransformUtils",
1475        ":config",
1476    ],
1477)
1478
1479cc_library(
1480    name = "SandboxIR",
1481    srcs = glob([
1482        "lib/SandboxIR/*.cpp",
1483    ]),
1484    hdrs = glob(["include/llvm/SandboxIR/*.h"]),
1485    copts = llvm_copts,
1486    textual_hdrs = ["include/llvm/SandboxIR/Values.def"],
1487    deps = [
1488        ":Analysis",
1489        ":Core",
1490        ":Support",
1491    ],
1492)
1493
1494cc_library(
1495    name = "Scalar",
1496    srcs = glob([
1497        "lib/Transforms/Scalar/*.cpp",
1498    ]),
1499    hdrs = glob(["include/llvm/Transforms/Scalar/*.h"]) + [
1500        "include/llvm/Transforms/Scalar.h",
1501    ],
1502    copts = llvm_copts,
1503    deps = [
1504        ":AggressiveInstCombine",
1505        ":Analysis",
1506        ":BinaryFormat",
1507        ":Core",
1508        ":InstCombine",
1509        ":ProfileData",
1510        ":Support",
1511        ":Target",
1512        ":TransformUtils",
1513        ":config",
1514    ],
1515)
1516
1517cc_library(
1518    name = "Vectorize",
1519    srcs = glob([
1520        "lib/Transforms/Vectorize/**/*.cpp",
1521        "lib/Transforms/Vectorize/**/*.h",
1522    ]),
1523    hdrs = glob([
1524        "include/llvm/Transforms/Vectorize/**/*.h",
1525    ]),
1526    copts = llvm_copts,
1527    textual_hdrs = [
1528        "lib/Transforms/Vectorize/SandboxVectorizer/Passes/PassRegistry.def",
1529    ],
1530    deps = [
1531        ":Analysis",
1532        ":Core",
1533        ":SandboxIR",
1534        ":Scalar",
1535        ":Support",
1536        ":Target",
1537        ":TransformUtils",
1538        ":config",
1539    ],
1540)
1541
1542cc_library(
1543    name = "FrontendDebug",
1544    hdrs = glob([
1545        "include/llvm/Frontend/Debug/*.h",
1546    ]),
1547    copts = llvm_copts,
1548    deps = [
1549        ":Support",
1550    ],
1551)
1552
1553cc_library(
1554    name = "FrontendDriver",
1555    srcs = glob([
1556        "lib/Frontend/Driver/*.cpp",
1557    ]),
1558    hdrs = glob([
1559        "include/llvm/Frontend/Driver/*.h",
1560    ]),
1561    copts = llvm_copts,
1562    deps = [
1563        ":Analysis",
1564        ":TargetParser",
1565    ],
1566)
1567
1568cc_library(
1569    name = "FrontendHLSL",
1570    srcs = glob([
1571        "lib/Frontend/HLSL/*.cpp",
1572    ]),
1573    hdrs = glob([
1574        "include/llvm/Frontend/HLSL/*.h",
1575    ]),
1576    copts = llvm_copts,
1577    deps = [
1578        ":Core",
1579        ":Support",
1580    ],
1581)
1582
1583cc_library(
1584    name = "FrontendOffloading",
1585    srcs = glob([
1586        "lib/Frontend/Offloading/*.cpp",
1587    ]),
1588    hdrs = glob([
1589        "include/llvm/Frontend/Offloading/*.h",
1590    ]),
1591    copts = llvm_copts,
1592    deps = [
1593        ":BinaryFormat",
1594        ":Core",
1595        ":Object",
1596        ":Support",
1597        ":TargetParser",
1598        ":TransformUtils",
1599    ],
1600)
1601
1602filegroup(
1603    name = "omp_td_files",
1604    srcs = glob([
1605        "include/llvm/Frontend/OpenMP/*.td",
1606        "include/llvm/Frontend/Directive/*.td",
1607    ]),
1608)
1609
1610gentbl(
1611    name = "omp_gen",
1612    library = False,
1613    tbl_outs = [
1614        ("--gen-directive-decl", "include/llvm/Frontend/OpenMP/OMP.h.inc"),
1615    ],
1616    tblgen = ":llvm-min-tblgen",
1617    td_file = "include/llvm/Frontend/OpenMP/OMP.td",
1618    td_srcs = [":omp_td_files"],
1619)
1620
1621gentbl(
1622    name = "omp_gen_impl",
1623    library = False,
1624    tbl_outs = [
1625        ("--gen-directive-impl", "include/llvm/Frontend/OpenMP/OMP.inc"),
1626    ],
1627    tblgen = ":llvm-min-tblgen",
1628    td_file = "include/llvm/Frontend/OpenMP/OMP.td",
1629    td_srcs = [":omp_td_files"],
1630)
1631
1632cc_library(
1633    name = "FrontendAtomic",
1634    srcs = glob([
1635        "lib/Frontend/Atomic/*.cpp",
1636    ]),
1637    hdrs = glob([
1638        "include/llvm/Frontend/Atomic/*.h",
1639    ]),
1640    copts = llvm_copts,
1641    deps = [
1642        ":Core",
1643        ":Support",
1644    ],
1645)
1646
1647cc_library(
1648    name = "FrontendOpenMP",
1649    srcs = glob([
1650        "lib/Frontend/OpenMP/*.cpp",
1651    ]),
1652    hdrs = glob([
1653        "include/llvm/Frontend/OpenMP/*.h",
1654    ]) + [
1655        "include/llvm/Frontend/OpenMP/OMP.h.inc",
1656        "include/llvm/Frontend/OpenMP/OMP.inc",
1657    ],
1658    copts = llvm_copts,
1659    textual_hdrs = glob([
1660        "include/llvm/Frontend/OpenMP/*.def",
1661    ]),
1662    deps = [
1663        ":Analysis",
1664        ":BitReader",
1665        ":Core",
1666        ":Demangle",
1667        ":FrontendAtomic",
1668        ":FrontendOffloading",
1669        ":MC",
1670        ":Scalar",
1671        ":Support",
1672        ":Target",
1673        ":TargetParser",
1674        ":TransformUtils",
1675    ],
1676)
1677
1678filegroup(
1679    name = "acc_td_files",
1680    srcs = glob([
1681        "include/llvm/Frontend/OpenACC/*.td",
1682        "include/llvm/Frontend/Directive/*.td",
1683    ]),
1684)
1685
1686gentbl(
1687    name = "acc_gen",
1688    library = False,
1689    tbl_outs = [
1690        ("--gen-directive-decl", "include/llvm/Frontend/OpenACC/ACC.h.inc"),
1691    ],
1692    tblgen = ":llvm-min-tblgen",
1693    td_file = "include/llvm/Frontend/OpenACC/ACC.td",
1694    td_srcs = [":acc_td_files"],
1695)
1696
1697gentbl(
1698    name = "acc_gen_impl",
1699    library = False,
1700    tbl_outs = [
1701        ("--gen-directive-impl", "include/llvm/Frontend/OpenACC/ACC.inc"),
1702    ],
1703    tblgen = ":llvm-min-tblgen",
1704    td_file = "include/llvm/Frontend/OpenACC/ACC.td",
1705    td_srcs = [":acc_td_files"],
1706)
1707
1708cc_library(
1709    name = "FrontendOpenACC",
1710    srcs = glob([
1711        "lib/Frontend/OpenACC/*.cpp",
1712    ]) + [
1713        "include/llvm/Frontend/OpenACC/ACC.inc",
1714    ],
1715    hdrs = ["include/llvm/Frontend/OpenACC/ACC.h.inc"],
1716    copts = llvm_copts,
1717    deps = [
1718        ":Analysis",
1719        ":Core",
1720        ":Support",
1721        ":TransformUtils",
1722    ],
1723)
1724
1725cc_library(
1726    name = "AsmParser",
1727    srcs = glob([
1728        "lib/AsmParser/*.cpp",
1729    ]),
1730    hdrs = glob(["include/llvm/AsmParser/*.h"]),
1731    copts = llvm_copts,
1732    deps = [
1733        ":BinaryFormat",
1734        ":Core",
1735        ":Support",
1736        ":attributes_gen",
1737    ],
1738)
1739
1740cc_library(
1741    name = "IRPrinter",
1742    srcs = glob([
1743        "lib/IRPrinter/*.cpp",
1744    ]),
1745    hdrs = glob([
1746        "include/llvm/IRPrinter/*.h",
1747    ]),
1748    copts = llvm_copts,
1749    deps = [
1750        ":Analysis",
1751        ":Core",
1752        ":Support",
1753    ],
1754)
1755
1756cc_library(
1757    name = "IRReader",
1758    srcs = glob([
1759        "lib/IRReader/*.cpp",
1760    ]),
1761    hdrs = glob([
1762        "include/llvm/IRReader/*.h",
1763    ]) + [
1764        "include/llvm-c/IRReader.h",
1765    ],
1766    copts = llvm_copts,
1767    deps = [
1768        ":AsmParser",
1769        ":BitReader",
1770        ":Core",
1771        ":Support",
1772        ":config",
1773    ],
1774)
1775
1776cc_library(
1777    name = "Linker",
1778    srcs = glob([
1779        "lib/Linker/*.cpp",
1780        "lib/Linker/*.h",
1781    ]),
1782    hdrs = glob([
1783        "include/llvm/Linker/*.h",
1784    ]) + [
1785        "include/llvm-c/Linker.h",
1786    ],
1787    copts = llvm_copts,
1788    deps = [
1789        ":Core",
1790        ":Object",
1791        ":Support",
1792        ":TargetParser",
1793        ":TransformUtils",
1794        ":config",
1795    ],
1796)
1797
1798cc_library(
1799    name = "IPO",
1800    srcs = glob([
1801        "lib/Transforms/IPO/*.cpp",
1802    ]),
1803    hdrs = glob([
1804        "include/llvm/Transforms/IPO/*.h",
1805    ]) + [
1806        "include/llvm/Transforms/IPO.h",
1807    ],
1808    copts = llvm_copts,
1809    deps = [
1810        ":AggressiveInstCombine",
1811        ":Analysis",
1812        ":BinaryFormat",
1813        ":BitReader",
1814        ":BitWriter",
1815        ":Core",
1816        ":FrontendOpenMP",
1817        ":IRPrinter",
1818        ":IRReader",
1819        ":InstCombine",
1820        ":Instrumentation",
1821        ":Linker",
1822        ":ObjCARC",
1823        ":Object",
1824        ":ProfileData",
1825        ":Scalar",
1826        ":Support",
1827        ":Target",
1828        ":TargetParser",
1829        ":TransformUtils",
1830        ":Vectorize",
1831        ":config",
1832        ":ir_headers",
1833    ],
1834)
1835
1836cc_library(
1837    name = "CFGuard",
1838    srcs = glob([
1839        "lib/Transforms/CFGuard/*.cpp",
1840    ]),
1841    hdrs = ["include/llvm/Transforms/CFGuard.h"],
1842    copts = llvm_copts,
1843    deps = [
1844        ":Core",
1845        ":Support",
1846        ":TargetParser",
1847    ],
1848)
1849
1850cc_library(
1851    name = "HipStdPar",
1852    srcs = glob([
1853        "lib/Transforms/HipStdPar/*.cpp",
1854    ]),
1855    hdrs = ["include/llvm/Transforms/HipStdPar/HipStdPar.h"],
1856    copts = llvm_copts,
1857    deps = [
1858        ":Analysis",
1859        ":Core",
1860        ":Support",
1861        ":TargetParser",
1862        ":TransformUtils",
1863    ],
1864)
1865
1866cc_library(
1867    name = "Coroutines",
1868    srcs = glob([
1869        "lib/Transforms/Coroutines/*.cpp",
1870        "lib/Transforms/Coroutines/*.h",
1871    ]),
1872    hdrs = glob(["include/llvm/Transforms/Coroutines/*.h"]),
1873    copts = llvm_copts,
1874    deps = [
1875        ":Analysis",
1876        ":BinaryFormat",
1877        ":Core",
1878        ":IPO",
1879        ":Scalar",
1880        ":Support",
1881        ":TransformUtils",
1882        ":config",
1883    ],
1884)
1885
1886# Meta-target for clients which depend on all of the transforms libraries.
1887cc_library(
1888    name = "common_transforms",
1889    deps = [
1890        ":AggressiveInstCombine",
1891        ":CFGuard",
1892        ":Coroutines",
1893        ":IPO",
1894        ":InstCombine",
1895        ":Instrumentation",
1896        ":ObjCARC",
1897        ":Scalar",
1898        ":Vectorize",
1899    ],
1900)
1901
1902cc_library(
1903    name = "asm_printer_defs",
1904    copts = llvm_copts,
1905    textual_hdrs = glob(["lib/CodeGen/AsmPrinter/*.def"]),
1906)
1907
1908cc_library(
1909    name = "CodeGenTypes",
1910    srcs = glob([
1911        "lib/CodeGenTypes/**/*.cpp",
1912    ]),
1913    hdrs = glob([
1914        "include/llvm/CodeGenTypes/**/*.h",
1915    ]),
1916    copts = llvm_copts,
1917    deps = [
1918        ":Support",
1919        ":vt_gen",
1920    ],
1921)
1922
1923cc_library(
1924    name = "CGData",
1925    srcs = glob(["lib/CGData/**/*.cpp"]),
1926    hdrs = glob([
1927        "include/llvm/CGData/**/*.h",
1928        "include/llvm/CGData/**/*.inc",
1929    ]),
1930    copts = llvm_copts,
1931    deps = [
1932        ":BitReader",
1933        ":BitWriter",
1934        ":Core",
1935        ":Object",
1936        ":ObjectYAML",
1937        ":Support",
1938        ":TargetParser",
1939    ],
1940)
1941
1942cc_library(
1943    name = "CodeGen",
1944    srcs = glob(
1945        [
1946            "lib/CodeGen/**/*.cpp",
1947            "lib/CodeGen/**/*.h",
1948            "lib/CodeGen/SelectionDAG/*.cpp",
1949            "lib/CodeGen/SelectionDAG/*.h",
1950        ],
1951    ),
1952    hdrs = [
1953        "include/llvm/LinkAllPasses.h",
1954    ] + glob(
1955        [
1956            "include/llvm/CodeGen/**/*.h",
1957        ],
1958    ),
1959    copts = llvm_copts,
1960    textual_hdrs = glob([
1961        "include/llvm/CodeGen/**/*.def",
1962    ]),
1963    deps = [
1964        ":AggressiveInstCombine",
1965        ":Analysis",
1966        ":AsmParser",
1967        ":BinaryFormat",
1968        ":BitReader",
1969        ":BitWriter",
1970        ":CFGuard",
1971        ":CGData",
1972        ":CodeGenTypes",
1973        ":Core",
1974        ":DebugInfoCodeView",
1975        ":DebugInfoDWARF",
1976        ":IPO",
1977        ":IRPrinter",
1978        ":Instrumentation",
1979        ":MC",
1980        ":MCParser",
1981        ":ObjCARC",
1982        ":Object",
1983        ":ProfileData",
1984        ":Remarks",
1985        ":Scalar",
1986        ":Support",
1987        ":Target",
1988        ":TargetParser",
1989        ":TransformUtils",
1990        ":asm_printer_defs",
1991        ":config",
1992        ":vt_gen",
1993    ],
1994)
1995
1996cc_library(
1997    name = "MCDisassembler",
1998    srcs = glob([
1999        "lib/MC/MCDisassembler/*.cpp",
2000        "lib/MC/MCDisassembler/*.h",
2001    ]),
2002    hdrs = glob([
2003        "include/llvm/MC/MCDisassembler/*.h",
2004    ]) + [
2005        "include/llvm-c/Disassembler.h",
2006    ],
2007    copts = llvm_copts,
2008    deps = [
2009        ":BinaryFormat",
2010        ":MC",
2011        ":Support",
2012        ":TargetParser",
2013        ":config",
2014    ],
2015)
2016
2017llvm_target_lib_list = [lib for lib in [
2018    {
2019        "name": "AArch64",
2020        "short_name": "AArch64",
2021        "tbl_outs": [
2022            ("-gen-register-bank", "lib/Target/AArch64/AArch64GenRegisterBank.inc"),
2023            ("-gen-register-info", "lib/Target/AArch64/AArch64GenRegisterInfo.inc"),
2024            ("-gen-instr-info", "lib/Target/AArch64/AArch64GenInstrInfo.inc"),
2025            ("-gen-emitter", "lib/Target/AArch64/AArch64GenMCCodeEmitter.inc"),
2026            ("-gen-pseudo-lowering", "lib/Target/AArch64/AArch64GenMCPseudoLowering.inc"),
2027            ("-gen-asm-writer", "lib/Target/AArch64/AArch64GenAsmWriter.inc"),
2028            ("-gen-asm-writer -asmwriternum=1", "lib/Target/AArch64/AArch64GenAsmWriter1.inc"),
2029            ("-gen-asm-matcher", "lib/Target/AArch64/AArch64GenAsmMatcher.inc"),
2030            ("-gen-dag-isel", "lib/Target/AArch64/AArch64GenDAGISel.inc"),
2031            ("-gen-fast-isel", "lib/Target/AArch64/AArch64GenFastISel.inc"),
2032            ("-gen-global-isel", "lib/Target/AArch64/AArch64GenGlobalISel.inc"),
2033            ("-gen-global-isel-combiner -combiners=AArch64O0PreLegalizerCombiner", "lib/Target/AArch64/AArch64GenO0PreLegalizeGICombiner.inc"),
2034            ("-gen-global-isel-combiner -combiners=AArch64PreLegalizerCombiner", "lib/Target/AArch64/AArch64GenPreLegalizeGICombiner.inc"),
2035            ("-gen-global-isel-combiner -combiners=AArch64PostLegalizerCombiner", "lib/Target/AArch64/AArch64GenPostLegalizeGICombiner.inc"),
2036            ("-gen-global-isel-combiner -combiners=AArch64PostLegalizerLowering", "lib/Target/AArch64/AArch64GenPostLegalizeGILowering.inc"),
2037            ("-gen-callingconv", "lib/Target/AArch64/AArch64GenCallingConv.inc"),
2038            ("-gen-subtarget", "lib/Target/AArch64/AArch64GenSubtargetInfo.inc"),
2039            ("-gen-disassembler", "lib/Target/AArch64/AArch64GenDisassemblerTables.inc"),
2040            ("-gen-searchable-tables", "lib/Target/AArch64/AArch64GenSystemOperands.inc"),
2041            ("-gen-exegesis", "lib/Target/AArch64/AArch64GenExegesis.inc"),
2042        ],
2043    },
2044    {
2045        "name": "ARM",
2046        "short_name": "ARM",
2047        "tbl_outs": [
2048            ("-gen-register-bank", "lib/Target/ARM/ARMGenRegisterBank.inc"),
2049            ("-gen-register-info", "lib/Target/ARM/ARMGenRegisterInfo.inc"),
2050            ("-gen-searchable-tables", "lib/Target/ARM/ARMGenSystemRegister.inc"),
2051            ("-gen-instr-info", "lib/Target/ARM/ARMGenInstrInfo.inc"),
2052            ("-gen-emitter", "lib/Target/ARM/ARMGenMCCodeEmitter.inc"),
2053            ("-gen-pseudo-lowering", "lib/Target/ARM/ARMGenMCPseudoLowering.inc"),
2054            ("-gen-asm-writer", "lib/Target/ARM/ARMGenAsmWriter.inc"),
2055            ("-gen-asm-matcher", "lib/Target/ARM/ARMGenAsmMatcher.inc"),
2056            ("-gen-dag-isel", "lib/Target/ARM/ARMGenDAGISel.inc"),
2057            ("-gen-fast-isel", "lib/Target/ARM/ARMGenFastISel.inc"),
2058            ("-gen-global-isel", "lib/Target/ARM/ARMGenGlobalISel.inc"),
2059            ("-gen-callingconv", "lib/Target/ARM/ARMGenCallingConv.inc"),
2060            ("-gen-subtarget", "lib/Target/ARM/ARMGenSubtargetInfo.inc"),
2061            ("-gen-disassembler", "lib/Target/ARM/ARMGenDisassemblerTables.inc"),
2062        ],
2063    },
2064    {
2065        "name": "AMDGPU",
2066        "short_name": "AMDGPU",
2067        "tbl_outs": [
2068            ("-gen-register-bank", "lib/Target/AMDGPU/AMDGPUGenRegisterBank.inc"),
2069            ("-gen-register-info", "lib/Target/AMDGPU/AMDGPUGenRegisterInfo.inc"),
2070            ("-gen-instr-info", "lib/Target/AMDGPU/AMDGPUGenInstrInfo.inc"),
2071            ("-gen-emitter", "lib/Target/AMDGPU/AMDGPUGenMCCodeEmitter.inc"),
2072            ("-gen-pseudo-lowering", "lib/Target/AMDGPU/AMDGPUGenMCPseudoLowering.inc"),
2073            ("-gen-asm-writer", "lib/Target/AMDGPU/AMDGPUGenAsmWriter.inc"),
2074            ("-gen-asm-matcher", "lib/Target/AMDGPU/AMDGPUGenAsmMatcher.inc"),
2075            ("-gen-dag-isel", "lib/Target/AMDGPU/AMDGPUGenDAGISel.inc"),
2076            ("-gen-callingconv", "lib/Target/AMDGPU/AMDGPUGenCallingConv.inc"),
2077            ("-gen-subtarget", "lib/Target/AMDGPU/AMDGPUGenSubtargetInfo.inc"),
2078            ("-gen-disassembler", "lib/Target/AMDGPU/AMDGPUGenDisassemblerTables.inc"),
2079            ("-gen-searchable-tables", "lib/Target/AMDGPU/AMDGPUGenSearchableTables.inc"),
2080        ],
2081        "tbl_deps": [
2082            ":InstCombineTableGen",
2083            ":amdgpu_isel_target_gen",
2084            ":r600_target_gen",
2085        ],
2086    },
2087    {
2088        "name": "AVR",
2089        "short_name": "AVR",
2090        "tbl_outs": [
2091            ("-gen-asm-matcher", "lib/Target/AVR/AVRGenAsmMatcher.inc"),
2092            ("-gen-asm-writer", "lib/Target/AVR/AVRGenAsmWriter.inc"),
2093            ("-gen-callingconv", "lib/Target/AVR/AVRGenCallingConv.inc"),
2094            ("-gen-dag-isel", "lib/Target/AVR/AVRGenDAGISel.inc"),
2095            ("-gen-disassembler", "lib/Target/AVR/AVRGenDisassemblerTables.inc"),
2096            ("-gen-emitter", "lib/Target/AVR/AVRGenMCCodeEmitter.inc"),
2097            ("-gen-instr-info", "lib/Target/AVR/AVRGenInstrInfo.inc"),
2098            ("-gen-register-info", "lib/Target/AVR/AVRGenRegisterInfo.inc"),
2099            ("-gen-subtarget", "lib/Target/AVR/AVRGenSubtargetInfo.inc"),
2100        ],
2101    },
2102    {
2103        "name": "BPF",
2104        "short_name": "BPF",
2105        "tbl_outs": [
2106            ("-gen-register-bank", "lib/Target/BPF/BPFGenRegisterBank.inc"),
2107            ("-gen-asm-writer", "lib/Target/BPF/BPFGenAsmWriter.inc"),
2108            ("-gen-asm-matcher", "lib/Target/BPF/BPFGenAsmMatcher.inc"),
2109            ("-gen-callingconv", "lib/Target/BPF/BPFGenCallingConv.inc"),
2110            ("-gen-dag-isel", "lib/Target/BPF/BPFGenDAGISel.inc"),
2111            ("-gen-global-isel", "lib/Target/BPF/BPFGenGlobalISel.inc"),
2112            ("-gen-disassembler", "lib/Target/BPF/BPFGenDisassemblerTables.inc"),
2113            ("-gen-emitter", "lib/Target/BPF/BPFGenMCCodeEmitter.inc"),
2114            ("-gen-instr-info", "lib/Target/BPF/BPFGenInstrInfo.inc"),
2115            ("-gen-register-info", "lib/Target/BPF/BPFGenRegisterInfo.inc"),
2116            ("-gen-subtarget", "lib/Target/BPF/BPFGenSubtargetInfo.inc"),
2117        ],
2118    },
2119    {
2120        "name": "Hexagon",
2121        "short_name": "Hexagon",
2122        "tbl_outs": [
2123            ("-gen-asm-matcher", "lib/Target/Hexagon/HexagonGenAsmMatcher.inc"),
2124            ("-gen-asm-writer", "lib/Target/Hexagon/HexagonGenAsmWriter.inc"),
2125            ("-gen-callingconv", "lib/Target/Hexagon/HexagonGenCallingConv.inc"),
2126            ("-gen-dag-isel", "lib/Target/Hexagon/HexagonGenDAGISel.inc"),
2127            ("-gen-dfa-packetizer", "lib/Target/Hexagon/HexagonGenDFAPacketizer.inc"),
2128            ("-gen-disassembler", "lib/Target/Hexagon/HexagonGenDisassemblerTables.inc"),
2129            ("-gen-instr-info", "lib/Target/Hexagon/HexagonGenInstrInfo.inc"),
2130            ("-gen-emitter", "lib/Target/Hexagon/HexagonGenMCCodeEmitter.inc"),
2131            ("-gen-register-info", "lib/Target/Hexagon/HexagonGenRegisterInfo.inc"),
2132            ("-gen-subtarget", "lib/Target/Hexagon/HexagonGenSubtargetInfo.inc"),
2133        ],
2134    },
2135    {
2136        "name": "Lanai",
2137        "short_name": "Lanai",
2138        "tbl_outs": [
2139            ("-gen-asm-matcher", "lib/Target/Lanai/LanaiGenAsmMatcher.inc"),
2140            ("-gen-asm-writer", "lib/Target/Lanai/LanaiGenAsmWriter.inc"),
2141            ("-gen-callingconv", "lib/Target/Lanai/LanaiGenCallingConv.inc"),
2142            ("-gen-dag-isel", "lib/Target/Lanai/LanaiGenDAGISel.inc"),
2143            ("-gen-disassembler", "lib/Target/Lanai/LanaiGenDisassemblerTables.inc"),
2144            ("-gen-emitter", "lib/Target/Lanai/LanaiGenMCCodeEmitter.inc"),
2145            ("-gen-instr-info", "lib/Target/Lanai/LanaiGenInstrInfo.inc"),
2146            ("-gen-register-info", "lib/Target/Lanai/LanaiGenRegisterInfo.inc"),
2147            ("-gen-subtarget", "lib/Target/Lanai/LanaiGenSubtargetInfo.inc"),
2148        ],
2149    },
2150    {
2151        "name": "LoongArch",
2152        "short_name": "LoongArch",
2153        "tbl_outs": [
2154            ("-gen-asm-matcher", "lib/Target/LoongArch/LoongArchGenAsmMatcher.inc"),
2155            ("-gen-asm-writer", "lib/Target/LoongArch/LoongArchGenAsmWriter.inc"),
2156            ("-gen-dag-isel", "lib/Target/LoongArch/LoongArchGenDAGISel.inc"),
2157            ("-gen-disassembler", "lib/Target/LoongArch/LoongArchGenDisassemblerTables.inc"),
2158            ("-gen-emitter", "lib/Target/LoongArch/LoongArchGenMCCodeEmitter.inc"),
2159            ("-gen-instr-info", "lib/Target/LoongArch/LoongArchGenInstrInfo.inc"),
2160            ("-gen-pseudo-lowering", "lib/Target/LoongArch/LoongArchGenMCPseudoLowering.inc"),
2161            ("-gen-register-info", "lib/Target/LoongArch/LoongArchGenRegisterInfo.inc"),
2162            ("-gen-subtarget", "lib/Target/LoongArch/LoongArchGenSubtargetInfo.inc"),
2163        ],
2164    },
2165    {
2166        "name": "Mips",
2167        "short_name": "Mips",
2168        "tbl_outs": [
2169            ("-gen-asm-matcher", "lib/Target/Mips/MipsGenAsmMatcher.inc"),
2170            ("-gen-asm-writer", "lib/Target/Mips/MipsGenAsmWriter.inc"),
2171            ("-gen-callingconv", "lib/Target/Mips/MipsGenCallingConv.inc"),
2172            ("-gen-dag-isel", "lib/Target/Mips/MipsGenDAGISel.inc"),
2173            ("-gen-disassembler", "lib/Target/Mips/MipsGenDisassemblerTables.inc"),
2174            ("-gen-emitter", "lib/Target/Mips/MipsGenMCCodeEmitter.inc"),
2175            ("-gen-exegesis", "lib/Target/Mips/MipsGenExegesis.inc"),
2176            ("-gen-fast-isel", "lib/Target/Mips/MipsGenFastISel.inc"),
2177            ("-gen-global-isel", "lib/Target/Mips/MipsGenGlobalISel.inc"),
2178            ("-gen-global-isel-combiner -combiners=MipsPostLegalizerCombiner", "lib/Target/Mips/MipsGenPostLegalizeGICombiner.inc"),
2179            ("-gen-instr-info", "lib/Target/Mips/MipsGenInstrInfo.inc"),
2180            ("-gen-pseudo-lowering", "lib/Target/Mips/MipsGenMCPseudoLowering.inc"),
2181            ("-gen-register-bank", "lib/Target/Mips/MipsGenRegisterBank.inc"),
2182            ("-gen-register-info", "lib/Target/Mips/MipsGenRegisterInfo.inc"),
2183            ("-gen-subtarget", "lib/Target/Mips/MipsGenSubtargetInfo.inc"),
2184        ],
2185    },
2186    {
2187        "name": "MSP430",
2188        "short_name": "MSP430",
2189        "tbl_outs": [
2190            ("-gen-asm-matcher", "lib/Target/MSP430/MSP430GenAsmMatcher.inc"),
2191            ("-gen-asm-writer", "lib/Target/MSP430/MSP430GenAsmWriter.inc"),
2192            ("-gen-callingconv", "lib/Target/MSP430/MSP430GenCallingConv.inc"),
2193            ("-gen-dag-isel", "lib/Target/MSP430/MSP430GenDAGISel.inc"),
2194            ("-gen-disassembler", "lib/Target/MSP430/MSP430GenDisassemblerTables.inc"),
2195            ("-gen-emitter", "lib/Target/MSP430/MSP430GenMCCodeEmitter.inc"),
2196            ("-gen-instr-info", "lib/Target/MSP430/MSP430GenInstrInfo.inc"),
2197            ("-gen-register-info", "lib/Target/MSP430/MSP430GenRegisterInfo.inc"),
2198            ("-gen-subtarget", "lib/Target/MSP430/MSP430GenSubtargetInfo.inc"),
2199        ],
2200    },
2201    {
2202        "name": "NVPTX",
2203        "short_name": "NVPTX",
2204        "tbl_outs": [
2205            ("-gen-register-info", "lib/Target/NVPTX/NVPTXGenRegisterInfo.inc"),
2206            ("-gen-instr-info", "lib/Target/NVPTX/NVPTXGenInstrInfo.inc"),
2207            ("-gen-asm-writer", "lib/Target/NVPTX/NVPTXGenAsmWriter.inc"),
2208            ("-gen-dag-isel", "lib/Target/NVPTX/NVPTXGenDAGISel.inc"),
2209            ("-gen-subtarget", "lib/Target/NVPTX/NVPTXGenSubtargetInfo.inc"),
2210        ],
2211    },
2212    {
2213        "name": "PowerPC",
2214        "short_name": "PPC",
2215        "tbl_outs": [
2216            ("-gen-asm-writer", "lib/Target/PowerPC/PPCGenAsmWriter.inc"),
2217            ("-gen-asm-matcher", "lib/Target/PowerPC/PPCGenAsmMatcher.inc"),
2218            ("-gen-emitter", "lib/Target/PowerPC/PPCGenMCCodeEmitter.inc"),
2219            ("-gen-register-info", "lib/Target/PowerPC/PPCGenRegisterInfo.inc"),
2220            ("-gen-instr-info", "lib/Target/PowerPC/PPCGenInstrInfo.inc"),
2221            ("-gen-dag-isel", "lib/Target/PowerPC/PPCGenDAGISel.inc"),
2222            ("-gen-fast-isel", "lib/Target/PowerPC/PPCGenFastISel.inc"),
2223            ("-gen-callingconv", "lib/Target/PowerPC/PPCGenCallingConv.inc"),
2224            ("-gen-subtarget", "lib/Target/PowerPC/PPCGenSubtargetInfo.inc"),
2225            ("-gen-disassembler", "lib/Target/PowerPC/PPCGenDisassemblerTables.inc"),
2226            ("-gen-register-bank", "lib/Target/PowerPC/PPCGenRegisterBank.inc"),
2227            ("-gen-global-isel", "lib/Target/PowerPC/PPCGenGlobalISel.inc"),
2228            ("-gen-exegesis", "lib/Target/PowerPC/PPCGenExegesis.inc"),
2229        ],
2230    },
2231    {
2232        "name": "RISCV",
2233        "short_name": "RISCV",
2234        "tbl_outs": [
2235            ("-gen-asm-matcher", "lib/Target/RISCV/RISCVGenAsmMatcher.inc"),
2236            ("-gen-asm-writer", "lib/Target/RISCV/RISCVGenAsmWriter.inc"),
2237            ("-gen-compress-inst-emitter", "lib/Target/RISCV/RISCVGenCompressInstEmitter.inc"),
2238            ("-gen-dag-isel", "lib/Target/RISCV/RISCVGenDAGISel.inc"),
2239            ("-gen-disassembler", "lib/Target/RISCV/RISCVGenDisassemblerTables.inc"),
2240            ("-gen-instr-info", "lib/Target/RISCV/RISCVGenInstrInfo.inc"),
2241            ("-gen-macro-fusion-pred", "lib/Target/RISCV/RISCVGenMacroFusion.inc"),
2242            ("-gen-emitter", "lib/Target/RISCV/RISCVGenMCCodeEmitter.inc"),
2243            ("-gen-pseudo-lowering", "lib/Target/RISCV/RISCVGenMCPseudoLowering.inc"),
2244            ("-gen-register-bank", "lib/Target/RISCV/RISCVGenRegisterBank.inc"),
2245            ("-gen-register-info", "lib/Target/RISCV/RISCVGenRegisterInfo.inc"),
2246            ("-gen-subtarget", "lib/Target/RISCV/RISCVGenSubtargetInfo.inc"),
2247            ("-gen-searchable-tables", "lib/Target/RISCV/RISCVGenSearchableTables.inc"),
2248            ("-gen-exegesis", "lib/Target/RISCV/RISCVGenExegesis.inc"),
2249        ],
2250        "tbl_deps": [
2251            ":riscv_isel_target_gen",
2252        ],
2253    },
2254    {
2255        "name": "Sparc",
2256        "short_name": "Sparc",
2257        "tbl_outs": [
2258            ("-gen-asm-writer", "lib/Target/Sparc/SparcGenAsmWriter.inc"),
2259            ("-gen-asm-matcher", "lib/Target/Sparc/SparcGenAsmMatcher.inc"),
2260            ("-gen-emitter", "lib/Target/Sparc/SparcGenMCCodeEmitter.inc"),
2261            ("-gen-register-info", "lib/Target/Sparc/SparcGenRegisterInfo.inc"),
2262            ("-gen-instr-info", "lib/Target/Sparc/SparcGenInstrInfo.inc"),
2263            ("-gen-dag-isel", "lib/Target/Sparc/SparcGenDAGISel.inc"),
2264            ("-gen-callingconv", "lib/Target/Sparc/SparcGenCallingConv.inc"),
2265            ("-gen-subtarget", "lib/Target/Sparc/SparcGenSubtargetInfo.inc"),
2266            ("-gen-disassembler", "lib/Target/Sparc/SparcGenDisassemblerTables.inc"),
2267            ("-gen-searchable-tables", "lib/Target/Sparc/SparcGenSearchableTables.inc"),
2268        ],
2269    },
2270    {
2271        "name": "SPIRV",
2272        "short_name": "SPIRV",
2273        "tbl_outs": [
2274            ("-gen-asm-writer", "lib/Target/SPIRV/SPIRVGenAsmWriter.inc"),
2275            ("-gen-emitter", "lib/Target/SPIRV/SPIRVGenMCCodeEmitter.inc"),
2276            ("-gen-global-isel", "lib/Target/SPIRV/SPIRVGenGlobalISel.inc"),
2277            ("-gen-global-isel-combiner -combiners=SPIRVPreLegalizerCombiner", "lib/Target/SPIRV/SPIRVGenPreLegalizeGICombiner.inc"),
2278            ("-gen-instr-info", "lib/Target/SPIRV/SPIRVGenInstrInfo.inc"),
2279            ("-gen-register-bank", "lib/Target/SPIRV/SPIRVGenRegisterBank.inc"),
2280            ("-gen-register-info", "lib/Target/SPIRV/SPIRVGenRegisterInfo.inc"),
2281            ("-gen-searchable-tables", "lib/Target/SPIRV/SPIRVGenTables.inc"),
2282            ("-gen-subtarget", "lib/Target/SPIRV/SPIRVGenSubtargetInfo.inc"),
2283        ],
2284    },
2285    {
2286        "name": "SystemZ",
2287        "short_name": "SystemZ",
2288        "tbl_outs": [
2289            ("-gen-asm-matcher", "lib/Target/SystemZ/SystemZGenAsmMatcher.inc"),
2290            ("-gen-asm-writer", "lib/Target/SystemZ/SystemZGenGNUAsmWriter.inc"),
2291            ("-gen-asm-writer -asmwriternum=1", "lib/Target/SystemZ/SystemZGenHLASMAsmWriter.inc"),
2292            ("-gen-callingconv", "lib/Target/SystemZ/SystemZGenCallingConv.inc"),
2293            ("-gen-dag-isel", "lib/Target/SystemZ/SystemZGenDAGISel.inc"),
2294            ("-gen-disassembler", "lib/Target/SystemZ/SystemZGenDisassemblerTables.inc"),
2295            ("-gen-emitter", "lib/Target/SystemZ/SystemZGenMCCodeEmitter.inc"),
2296            ("-gen-instr-info", "lib/Target/SystemZ/SystemZGenInstrInfo.inc"),
2297            ("-gen-register-info", "lib/Target/SystemZ/SystemZGenRegisterInfo.inc"),
2298            ("-gen-subtarget", "lib/Target/SystemZ/SystemZGenSubtargetInfo.inc"),
2299        ],
2300    },
2301    {
2302        "name": "VE",
2303        "short_name": "VE",
2304        "tbl_outs": [
2305            ("-gen-asm-matcher", "lib/Target/VE/VEGenAsmMatcher.inc"),
2306            ("-gen-asm-writer", "lib/Target/VE/VEGenAsmWriter.inc"),
2307            ("-gen-callingconv", "lib/Target/VE/VEGenCallingConv.inc"),
2308            ("-gen-dag-isel", "lib/Target/VE/VEGenDAGISel.inc"),
2309            ("-gen-disassembler", "lib/Target/VE/VEGenDisassemblerTables.inc"),
2310            ("-gen-emitter", "lib/Target/VE/VEGenMCCodeEmitter.inc"),
2311            ("-gen-instr-info", "lib/Target/VE/VEGenInstrInfo.inc"),
2312            ("-gen-register-info", "lib/Target/VE/VEGenRegisterInfo.inc"),
2313            ("-gen-subtarget", "lib/Target/VE/VEGenSubtargetInfo.inc"),
2314        ],
2315    },
2316    {
2317        "name": "WebAssembly",
2318        "short_name": "WebAssembly",
2319        "tbl_outs": [
2320            ("-gen-disassembler", "lib/Target/WebAssembly/WebAssemblyGenDisassemblerTables.inc"),
2321            ("-gen-asm-writer", "lib/Target/WebAssembly/WebAssemblyGenAsmWriter.inc"),
2322            ("-gen-instr-info", "lib/Target/WebAssembly/WebAssemblyGenInstrInfo.inc"),
2323            ("-gen-dag-isel", "lib/Target/WebAssembly/WebAssemblyGenDAGISel.inc"),
2324            ("-gen-fast-isel", "lib/Target/WebAssembly/WebAssemblyGenFastISel.inc"),
2325            ("-gen-emitter", "lib/Target/WebAssembly/WebAssemblyGenMCCodeEmitter.inc"),
2326            ("-gen-register-info", "lib/Target/WebAssembly/WebAssemblyGenRegisterInfo.inc"),
2327            ("-gen-subtarget", "lib/Target/WebAssembly/WebAssemblyGenSubtargetInfo.inc"),
2328            ("-gen-asm-matcher", "lib/Target/WebAssembly/WebAssemblyGenAsmMatcher.inc"),
2329        ],
2330    },
2331    {
2332        "name": "X86",
2333        "short_name": "X86",
2334        "tbl_outs": [
2335            ("-gen-register-bank", "lib/Target/X86/X86GenRegisterBank.inc"),
2336            ("-gen-register-info", "lib/Target/X86/X86GenRegisterInfo.inc"),
2337            ("-gen-disassembler", "lib/Target/X86/X86GenDisassemblerTables.inc"),
2338            ("-gen-instr-info", "lib/Target/X86/X86GenInstrInfo.inc"),
2339            ("-gen-asm-writer", "lib/Target/X86/X86GenAsmWriter.inc"),
2340            ("-gen-asm-writer -asmwriternum=1", "lib/Target/X86/X86GenAsmWriter1.inc"),
2341            ("-gen-asm-matcher", "lib/Target/X86/X86GenAsmMatcher.inc"),
2342            ("-gen-dag-isel", "lib/Target/X86/X86GenDAGISel.inc"),
2343            ("-gen-fast-isel", "lib/Target/X86/X86GenFastISel.inc"),
2344            ("-gen-global-isel", "lib/Target/X86/X86GenGlobalISel.inc"),
2345            ("-gen-callingconv", "lib/Target/X86/X86GenCallingConv.inc"),
2346            ("-gen-subtarget", "lib/Target/X86/X86GenSubtargetInfo.inc"),
2347            ("-gen-x86-fold-tables -asmwriternum=1", "lib/Target/X86/X86GenFoldTables.inc"),
2348            ("-gen-x86-instr-mapping", "lib/Target/X86/X86GenInstrMapping.inc"),
2349            ("-gen-exegesis", "lib/Target/X86/X86GenExegesis.inc"),
2350            ("-gen-x86-mnemonic-tables -asmwriternum=1", "lib/Target/X86/X86GenMnemonicTables.inc"),
2351        ],
2352    },
2353    {
2354        "name": "XCore",
2355        "short_name": "XCore",
2356        "tbl_outs": [
2357            ("-gen-asm-writer", "lib/Target/XCore/XCoreGenAsmWriter.inc"),
2358            ("-gen-callingconv", "lib/Target/XCore/XCoreGenCallingConv.inc"),
2359            ("-gen-dag-isel", "lib/Target/XCore/XCoreGenDAGISel.inc"),
2360            ("-gen-disassembler", "lib/Target/XCore/XCoreGenDisassemblerTables.inc"),
2361            ("-gen-instr-info", "lib/Target/XCore/XCoreGenInstrInfo.inc"),
2362            ("-gen-register-info", "lib/Target/XCore/XCoreGenRegisterInfo.inc"),
2363            ("-gen-subtarget", "lib/Target/XCore/XCoreGenSubtargetInfo.inc"),
2364        ],
2365    },
2366] if lib["name"] in llvm_targets]
2367
2368cc_library(
2369    name = "x86_target_layering_problem_hdrs",
2370    textual_hdrs = ["lib/Target/X86/X86InstrInfo.h"],
2371)
2372
2373gentbl(
2374    name = "amdgpu_isel_target_gen",
2375    strip_include_prefix = "lib/Target/AMDGPU",
2376    tbl_outs = [
2377        ("-gen-global-isel", "lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc"),
2378        ("-gen-global-isel-combiner -combiners=AMDGPUPreLegalizerCombiner", "lib/Target/AMDGPU/AMDGPUGenPreLegalizeGICombiner.inc"),
2379        ("-gen-global-isel-combiner -combiners=AMDGPUPostLegalizerCombiner", "lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc"),
2380        ("-gen-global-isel-combiner -combiners=AMDGPURegBankCombiner", "lib/Target/AMDGPU/AMDGPUGenRegBankGICombiner.inc"),
2381    ],
2382    tblgen = ":llvm-tblgen",
2383    td_file = "lib/Target/AMDGPU/AMDGPUGISel.td",
2384    td_srcs = [
2385        ":common_target_td_sources",
2386    ] + glob([
2387        "lib/Target/AMDGPU/*.td",
2388    ]),
2389)
2390
2391gentbl(
2392    name = "r600_target_gen",
2393    strip_include_prefix = "lib/Target/AMDGPU",
2394    tbl_outs = [
2395        ("-gen-asm-writer", "lib/Target/AMDGPU/R600GenAsmWriter.inc"),
2396        ("-gen-callingconv", "lib/Target/AMDGPU/R600GenCallingConv.inc"),
2397        ("-gen-dag-isel", "lib/Target/AMDGPU/R600GenDAGISel.inc"),
2398        ("-gen-dfa-packetizer", "lib/Target/AMDGPU/R600GenDFAPacketizer.inc"),
2399        ("-gen-instr-info", "lib/Target/AMDGPU/R600GenInstrInfo.inc"),
2400        ("-gen-emitter", "lib/Target/AMDGPU/R600GenMCCodeEmitter.inc"),
2401        ("-gen-register-info", "lib/Target/AMDGPU/R600GenRegisterInfo.inc"),
2402        ("-gen-subtarget", "lib/Target/AMDGPU/R600GenSubtargetInfo.inc"),
2403    ],
2404    tblgen = ":llvm-tblgen",
2405    td_file = "lib/Target/AMDGPU/R600.td",
2406    td_srcs = [
2407        ":common_target_td_sources",
2408    ] + glob([
2409        "lib/Target/AMDGPU/*.td",
2410    ]),
2411)
2412
2413gentbl(
2414    name = "riscv_isel_target_gen",
2415    strip_include_prefix = "lib/Target/RISCV",
2416    tbl_outs = [
2417        ("-gen-global-isel", "lib/Target/RISCV/RISCVGenGlobalISel.inc"),
2418        ("-gen-global-isel-combiner -combiners=RISCVO0PreLegalizerCombiner", "lib/Target/RISCV/RISCVGenO0PreLegalizeGICombiner.inc"),
2419        ("-gen-global-isel-combiner -combiners=RISCVPostLegalizerCombiner", "lib/Target/RISCV/RISCVGenPostLegalizeGICombiner.inc"),
2420        ("-gen-global-isel-combiner -combiners=RISCVPreLegalizerCombiner", "lib/Target/RISCV/RISCVGenPreLegalizeGICombiner.inc"),
2421    ],
2422    tblgen = ":llvm-tblgen",
2423    td_file = "lib/Target/RISCV/RISCVGISel.td",
2424    td_srcs = [
2425        ":common_target_td_sources",
2426    ] + glob([
2427        "lib/Target/RISCV/**/*.td",
2428    ]),
2429)
2430
2431[[
2432    [gentbl(
2433        name = target["name"] + "CommonTableGen",
2434        strip_include_prefix = "lib/Target/" + target["name"],
2435        tbl_outs = target["tbl_outs"],
2436        tblgen = ":llvm-tblgen",
2437        # MSVC isn't happy with long string literals, while other compilers
2438        # which support them get significant compile time improvements with
2439        # them enabled. Ideally this flag would only be enabled on Windows via
2440        # a select() on `@platforms//os:windows,`, but that would
2441        # require refactoring gentbl from a macro into a rule.
2442        # TODO(#92): Refactor gentbl to support this use
2443        tblgen_args = "--long-string-literals=0",
2444        td_file = "lib/Target/" + target["name"] + "/" + target["short_name"] + ".td",
2445        td_srcs = [
2446            ":common_target_td_sources",
2447        ] + glob(
2448            [
2449                "lib/Target/" + target["name"] + "/*.td",
2450                "lib/Target/" + target["name"] + "/GISel/*.td",
2451            ],
2452            allow_empty = True,
2453        ),
2454        deps = target.get("tbl_deps", []),
2455    )],
2456    [cc_library(
2457        name = target["name"] + "Info",
2458        srcs = ["lib/Target/" + target["name"] + "/TargetInfo/" + target["name"] + "TargetInfo.cpp"],
2459        hdrs = glob(["lib/Target/" + target["name"] + "/TargetInfo/*.h"]),
2460        copts = llvm_copts,
2461        # Workaround for https://github.com/bazelbuild/bazel/issues/3828
2462        # TODO(gcmn): Remove this when upgrading to a Bazel version containing
2463        # https://github.com/bazelbuild/bazel/commit/e3b7e17b05f1
2464        includes = ["lib/Target/" + target["name"]],
2465        strip_include_prefix = "lib/Target/" + target["name"],
2466        deps = [
2467            ":" + target["name"] + "CommonTableGen",
2468            ":MC",
2469            ":Support",
2470            ":Target",
2471        ],
2472    )],
2473    # We cannot separate the `Utils` and `MCTargetDesc` sublibraries of
2474    # a number of targets due to crisscrossing inclusion of headers.
2475    [cc_library(
2476        name = target["name"] + "UtilsAndDesc",
2477        srcs = glob(
2478            [
2479                "lib/Target/" + target["name"] + "/MCTargetDesc/*.cpp",
2480                "lib/Target/" + target["name"] + "/Utils/*.cpp",
2481
2482                # We have to include these headers here as well as in the `hdrs`
2483                # below to allow the `.cpp` files to use file-relative-inclusion to
2484                # find them, even though consumers of this library use inclusion
2485                # relative to the target with the `strip_includes_prefix` of this
2486                # library. This mixture is likely incompatible with header modules.
2487                "lib/Target/" + target["name"] + "/MCTargetDesc/*.h",
2488                "lib/Target/" + target["name"] + "/Utils/*.h",
2489            ],
2490            allow_empty = True,
2491        ),
2492        hdrs = glob(
2493            [
2494                "lib/Target/" + target["name"] + "/MCTargetDesc/*.h",
2495                "lib/Target/" + target["name"] + "/Utils/*.h",
2496
2497                # This a bit of a hack to allow us to expose common, internal
2498                # target header files to other libraries within the target via
2499                # target-relative includes. This usage of headers is inherently
2500                # non-modular as there is a mixture of target-relative inclusion
2501                # using this rule and file-relative inclusion using the repeated
2502                # listing of these headers in the `srcs` of subsequent rules.
2503                "lib/Target/" + target["name"] + "/*.h",
2504
2505                # FIXME: The entries below should be `textual_hdrs` instead of
2506                # `hdrs`, but unfortunately that doesn't work with
2507                # `strip_include_prefix`:
2508                # https://github.com/bazelbuild/bazel/issues/12424
2509                #
2510                # Once that issue is fixed and released, we can switch this to
2511                # `textual_hdrs` and remove the feature disabling the various Bazel
2512                # features (both current and under-development) that motivated the
2513                # distinction between these two.
2514                "lib/Target/" + target["name"] + "/*.def",
2515                "lib/Target/" + target["name"] + "/*.inc",
2516                "lib/Target/" + target["name"] + "/MCTargetDesc/*.def",
2517            ],
2518            allow_empty = True,
2519        ),
2520        copts = llvm_copts,
2521        features = [
2522            "-parse_headers",
2523            "-header_modules",
2524            "-layering_check",
2525        ],
2526        strip_include_prefix = "lib/Target/" + target["name"],
2527        deps = [
2528            ":BinaryFormat",
2529            ":CodeGen",
2530            ":CodeGenTypes",
2531            ":Core",
2532            ":DebugInfoCodeView",
2533            ":MC",
2534            ":MCDisassembler",
2535            ":Support",
2536            ":Target",
2537            ":config",
2538            ":" + target["name"] + "CommonTableGen",
2539            ":" + target["name"] + "Info",
2540        ],
2541    )],
2542    [cc_library(
2543        name = target["name"] + "CodeGen",
2544        srcs = glob(
2545            [
2546                "lib/Target/" + target["name"] + "/GISel/*.cpp",
2547                "lib/Target/" + target["name"] + "/GISel/*.h",
2548                "lib/Target/" + target["name"] + "/*.cpp",
2549                "lib/Target/" + target["name"] + "/*.h",
2550            ],
2551            allow_empty = True,
2552        ),
2553        hdrs = ["lib/Target/" + target["name"] + "/" + target["short_name"] + ".h"],
2554        copts = llvm_copts,
2555        features = ["-layering_check"],
2556        strip_include_prefix = "lib/Target/" + target["name"],
2557        textual_hdrs = glob(
2558            [
2559                "lib/Target/" + target["name"] + "/*.def",
2560                "lib/Target/" + target["name"] + "/*.inc",
2561            ],
2562            allow_empty = True,
2563        ),
2564        deps = [
2565            ":Analysis",
2566            ":BinaryFormat",
2567            ":CFGuard",
2568            ":CodeGen",
2569            ":CodeGenTypes",
2570            ":Core",
2571            ":IPO",
2572            ":MC",
2573            ":Passes",  # TODO(chandlerc): Likely a layering violation.
2574            ":ProfileData",
2575            ":Scalar",
2576            ":Support",
2577            ":Target",
2578            ":TransformUtils",
2579            ":Vectorize",
2580            ":config",
2581            ":" + target["name"] + "Analysis",
2582            ":" + target["name"] + "CommonTableGen",
2583            ":" + target["name"] + "Info",
2584            ":" + target["name"] + "UtilsAndDesc",
2585        ],
2586    )],
2587    [cc_library(
2588        name = target["name"] + "AsmParser",
2589        srcs = glob(
2590            [
2591                "lib/Target/" + target["name"] + "/AsmParser/*.cpp",
2592                "lib/Target/" + target["name"] + "/AsmParser/*.h",
2593            ],
2594            allow_empty = True,
2595        ),
2596        copts = llvm_copts,
2597        deps = [
2598            ":BinaryFormat",
2599            ":CodeGenTypes",
2600            ":MC",
2601            ":MCParser",
2602            ":Support",
2603            ":Target",
2604            ":TargetParser",
2605            ":" + target["name"] + "CodeGen",
2606            ":" + target["name"] + "CommonTableGen",
2607            ":" + target["name"] + "Info",
2608            ":" + target["name"] + "UtilsAndDesc",
2609        ],
2610    )],
2611    # This target is a bit of a hack to allow us to expose internal
2612    # disassembler header files via internal target-relative include paths.
2613    # This usage of headers is inherently non-modular as there is a mixture of
2614    # target-relative inclusion using this rule and same-directory inclusion
2615    # using the repeated listing of these headers in the `srcs` below.
2616    [cc_library(
2617        name = target["name"] + "DisassemblerInternalHeaders",
2618        # FIXME: This should be `textual_hdrs` instead of `hdrs`, but
2619        # unfortunately that doesn't work with `strip_include_prefix`:
2620        # https://github.com/bazelbuild/bazel/issues/12424
2621        #
2622        # Once that issue is fixed and released, we can switch this to
2623        # `textual_hdrs` and remove the feature disabling the various Bazel
2624        # features (both current and under-development) that motivated the
2625        # distinction between these two.
2626        hdrs = glob(
2627            [
2628                "lib/Target/" + target["name"] + "/Disassembler/*.h",
2629            ],
2630            allow_empty = True,
2631        ),
2632        features = [
2633            "-parse_headers",
2634            "-header_modules",
2635        ],
2636        strip_include_prefix = "lib/Target/" + target["name"],
2637    )],
2638    [cc_library(
2639        name = target["name"] + "Disassembler",
2640        srcs = glob(
2641            [
2642                "lib/Target/" + target["name"] + "/Disassembler/*.cpp",
2643                "lib/Target/" + target["name"] + "/Disassembler/*.c",
2644                "lib/Target/" + target["name"] + "/Disassembler/*.h",
2645            ],
2646            allow_empty = True,
2647        ),
2648        copts = llvm_copts,
2649        features = ["-layering_check"],
2650        deps = [
2651            ":CodeGenTypes",
2652            ":Core",
2653            ":MC",
2654            ":MCDisassembler",
2655            ":Support",
2656            ":Target",
2657            ":" + target["name"] + "CodeGen",
2658            ":" + target["name"] + "DisassemblerInternalHeaders",
2659            ":" + target["name"] + "CommonTableGen",
2660            ":" + target["name"] + "UtilsAndDesc",
2661        ],
2662    )],
2663    [cc_library(
2664        name = target["name"] + "TargetMCA",
2665        srcs = glob(
2666            [
2667                "lib/Target/" + target["name"] + "/MCA/*.cpp",
2668                "lib/Target/" + target["name"] + "/MCA/*.c",
2669                "lib/Target/" + target["name"] + "/MCA/*.h",
2670            ],
2671            allow_empty = True,
2672        ),
2673        copts = llvm_copts,
2674        features = ["-layering_check"],
2675        deps = [
2676            ":CodeGenTypes",
2677            ":MC",
2678            ":MCA",
2679            ":MCParser",
2680            ":Support",
2681            ":" + target["name"] + "DisassemblerInternalHeaders",
2682            ":" + target["name"] + "Info",
2683            ":" + target["name"] + "UtilsAndDesc",
2684        ],
2685    )],
2686    [cc_library(
2687        name = target["name"] + "Analysis",
2688        srcs = glob(
2689            [
2690                "lib/Target/" + target["name"] + "/Analysis/*.cpp",
2691                "lib/Target/" + target["name"] + "/Analysis/*.h",
2692            ],
2693            allow_empty = True,
2694        ),
2695        copts = llvm_copts,
2696        features = ["-layering_check"],
2697        deps = [
2698            ":Analysis",
2699            ":Core",
2700            ":Support",
2701            ":TransformUtils",
2702        ],
2703    )],
2704] for target in llvm_target_lib_list]
2705
2706cc_library(
2707    name = "AllTargetsCodeGens",
2708    copts = llvm_copts,
2709    deps = [
2710        target["name"] + "CodeGen"
2711        for target in llvm_target_lib_list
2712    ],
2713)
2714
2715cc_library(
2716    name = "AllTargetsAsmParsers",
2717    copts = llvm_copts,
2718    deps = [
2719        target["name"] + "AsmParser"
2720        for target in llvm_target_lib_list
2721    ],
2722)
2723
2724cc_library(
2725    name = "AllTargetsDisassemblers",
2726    copts = llvm_copts,
2727    deps = [
2728        target["name"] + "Disassembler"
2729        for target in llvm_target_lib_list
2730    ],
2731)
2732
2733cc_library(
2734    name = "AllTargetsMCAs",
2735    copts = llvm_copts,
2736    deps = [
2737        target["name"] + "TargetMCA"
2738        for target in llvm_target_lib_list
2739    ],
2740)
2741
2742cc_library(
2743    name = "pass_registry_def",
2744    copts = llvm_copts,
2745    textual_hdrs = ["lib/Passes/PassRegistry.def"],
2746)
2747
2748cc_library(
2749    name = "Passes",
2750    srcs = glob([
2751        "lib/Passes/*.cpp",
2752    ]),
2753    hdrs = glob([
2754        "include/llvm/Passes/*.h",
2755        "include/llvm/Passes/*.def",
2756        "include/llvm/Passes/*.inc",
2757    ]) + ["include/llvm-c/Transforms/PassBuilder.h"],
2758    copts = llvm_copts,
2759    deps = [
2760        ":AggressiveInstCombine",
2761        ":Analysis",
2762        ":CFGuard",
2763        ":CodeGen",
2764        ":Core",
2765        ":Coroutines",
2766        ":HipStdPar",
2767        ":IPO",
2768        ":IRPrinter",
2769        ":InstCombine",
2770        ":Instrumentation",
2771        ":MC",
2772        ":ObjCARC",
2773        ":Scalar",
2774        ":Support",
2775        ":Target",
2776        ":TransformUtils",
2777        ":Vectorize",
2778        ":common_transforms",
2779        ":config",
2780        ":pass_registry_def",
2781    ],
2782)
2783
2784cc_library(
2785    name = "LTO",
2786    srcs = glob([
2787        "lib/LTO/*.cpp",
2788    ]),
2789    hdrs = glob([
2790        "include/llvm/LTO/*.h",
2791        "include/llvm/LTO/legacy/*.h",
2792    ]) + [
2793        "include/llvm-c/lto.h",
2794    ],
2795    copts = llvm_copts,
2796    deps = [
2797        ":Analysis",
2798        ":BitReader",
2799        ":BitWriter",
2800        ":CGData",
2801        ":CodeGen",
2802        ":CodeGenTypes",
2803        ":Core",
2804        ":IPO",
2805        ":IRPrinter",
2806        ":IRReader",
2807        ":Linker",
2808        ":MC",
2809        ":MCParser",
2810        ":ObjCARC",
2811        ":Object",
2812        ":Passes",
2813        ":Remarks",
2814        ":Scalar",
2815        ":Support",
2816        ":Target",
2817        ":TargetParser",
2818        ":TransformUtils",
2819        ":common_transforms",
2820        ":config",
2821    ],
2822)
2823
2824cc_library(
2825    name = "ExecutionEngine",
2826    srcs = glob([
2827        "lib/ExecutionEngine/*.cpp",
2828        "lib/ExecutionEngine/RuntimeDyld/*.cpp",
2829        "lib/ExecutionEngine/RuntimeDyld/*.h",
2830        "lib/ExecutionEngine/RuntimeDyld/Targets/*.cpp",
2831        "lib/ExecutionEngine/RuntimeDyld/Targets/*.h",
2832    ]),
2833    hdrs = glob(
2834        [
2835            "include/llvm/ExecutionEngine/*.h",
2836        ],
2837        exclude = [
2838            "include/llvm/ExecutionEngine/MCJIT*.h",
2839            "include/llvm/ExecutionEngine/OProfileWrapper.h",
2840        ],
2841    ) + [
2842        "include/llvm-c/ExecutionEngine.h",
2843    ],
2844    copts = llvm_copts,
2845    deps = [
2846        ":BinaryFormat",
2847        ":CodeGen",
2848        ":Core",
2849        ":DebugInfo",
2850        ":MC",
2851        ":MCDisassembler",
2852        ":Object",
2853        ":OrcShared",
2854        ":OrcTargetProcess",
2855        ":Passes",
2856        ":Support",
2857        ":Target",
2858        ":TargetParser",
2859        ":config",
2860    ],
2861)
2862
2863cc_library(
2864    name = "Interpreter",
2865    srcs = glob([
2866        "lib/ExecutionEngine/Interpreter/*.cpp",
2867        "lib/ExecutionEngine/Interpreter/*.h",
2868    ]),
2869    hdrs = ["include/llvm/ExecutionEngine/Interpreter.h"],
2870    copts = llvm_copts,
2871    deps = [
2872        ":CodeGen",
2873        ":Core",
2874        ":ExecutionEngine",
2875        ":Support",
2876        ":Target",
2877        ":config",
2878    ],
2879)
2880
2881gentbl(
2882    name = "JITLinkTableGen",
2883    strip_include_prefix = "lib/ExecutionEngine/JITLink",
2884    tbl_outs = [(
2885        "-gen-opt-parser-defs",
2886        "lib/ExecutionEngine/JITLink/COFFOptions.inc",
2887    )],
2888    tblgen = ":llvm-tblgen",
2889    td_file = "lib/ExecutionEngine/JITLink/COFFOptions.td",
2890    td_srcs = ["include/llvm/Option/OptParser.td"],
2891)
2892
2893cc_library(
2894    name = "JITLink",
2895    srcs = glob([
2896        "lib/ExecutionEngine/JITLink/*.cpp",
2897        "lib/ExecutionEngine/JITLink/*.h",
2898    ]),
2899    hdrs = glob([
2900        "include/llvm/ExecutionEngine/JITLink/*.h",
2901        "include/llvm/ExecutionEngine/Orc/*.h",
2902    ]),
2903    copts = llvm_copts,
2904    deps = [
2905        ":BinaryFormat",
2906        ":ExecutionEngine",
2907        ":JITLinkTableGen",
2908        ":Object",
2909        ":Option",
2910        ":OrcShared",
2911        ":OrcTargetProcess",
2912        ":Support",
2913        ":TargetParser",
2914        ":config",
2915    ],
2916)
2917
2918cc_library(
2919    name = "MCJIT",
2920    srcs = glob([
2921        "lib/ExecutionEngine/MCJIT/*.cpp",
2922        "lib/ExecutionEngine/MCJIT/*.h",
2923    ]),
2924    hdrs = glob(["include/llvm/ExecutionEngine/MCJIT*.h"]),
2925    copts = llvm_copts,
2926    deps = [
2927        ":CodeGen",
2928        ":Core",
2929        ":ExecutionEngine",
2930        ":MC",
2931        ":Object",
2932        ":Support",
2933        ":Target",
2934        ":config",
2935    ],
2936)
2937
2938cc_library(
2939    name = "OrcJIT",
2940    srcs = glob([
2941        "lib/ExecutionEngine/Orc/*.cpp",
2942    ]),
2943    hdrs = glob([
2944        "include/llvm/ExecutionEngine/Orc/*.h",
2945    ]) + [
2946        "include/llvm-c/LLJIT.h",
2947        "include/llvm-c/Orc.h",
2948        "include/llvm-c/OrcEE.h",
2949    ],
2950    copts = llvm_copts,
2951    linkopts = select({
2952        "@platforms//os:android": [],
2953        "@platforms//os:windows": [],
2954        "@platforms//os:freebsd": [],
2955        "@platforms//os:macos": [],
2956        "//conditions:default": [
2957            "-lrt",
2958        ],
2959    }),
2960    deps = [
2961        ":Analysis",
2962        ":BinaryFormat",
2963        ":BitReader",
2964        ":BitWriter",
2965        ":Core",
2966        ":DebugInfoDWARF",
2967        ":ExecutionEngine",
2968        ":JITLink",
2969        ":MC",
2970        ":MCDisassembler",
2971        ":Object",
2972        ":OrcShared",
2973        ":OrcTargetProcess",
2974        ":Passes",
2975        ":Support",
2976        ":Target",
2977        ":TargetParser",
2978        ":TransformUtils",
2979        ":WindowsDriver",
2980        ":config",
2981    ],
2982)
2983
2984cc_library(
2985    name = "OrcShared",
2986    srcs = glob([
2987        "lib/ExecutionEngine/Orc/Shared/*.cpp",
2988    ]),
2989    hdrs = glob([
2990        "include/llvm/ExecutionEngine/Orc/Shared/*.h",
2991    ] + [
2992        "include/llvm/ExecutionEngine/Orc/SymbolStringPool.h",
2993    ]),
2994    copts = llvm_copts,
2995    deps = [
2996        ":BinaryFormat",
2997        ":CodeGen",
2998        ":Core",
2999        ":DebugInfo",
3000        ":MC",
3001        ":MCDisassembler",
3002        ":Object",
3003        ":Passes",
3004        ":Support",
3005        ":Target",
3006        ":config",
3007    ],
3008)
3009
3010cc_library(
3011    name = "OrcDebugging",
3012    srcs = glob([
3013        "lib/ExecutionEngine/Orc/Debugging/*.cpp",
3014    ]),
3015    hdrs = glob([
3016        "include/llvm/ExecutionEngine/Orc/Debugging/*.h",
3017    ]) + ["include/llvm-c/LLJITUtils.h"],
3018    copts = llvm_copts,
3019    deps = [
3020        ":BinaryFormat",
3021        ":DebugInfo",
3022        ":DebugInfoDWARF",
3023        ":JITLink",
3024        ":OrcJIT",
3025        ":OrcShared",
3026        ":Support",
3027        ":TargetParser",
3028    ],
3029)
3030
3031cc_library(
3032    name = "OrcTargetProcess",
3033    srcs = glob([
3034        "lib/ExecutionEngine/Orc/TargetProcess/*.cpp",
3035        "lib/ExecutionEngine/Orc/TargetProcess/*.h",
3036    ]),
3037    hdrs = glob([
3038        "include/llvm/ExecutionEngine/Orc/TargetProcess/*.h",
3039    ]),
3040    copts = llvm_copts,
3041    linkopts = select({
3042        "@platforms//os:android": [],
3043        "@platforms//os:windows": [],
3044        "@platforms//os:freebsd": [],
3045        "@platforms//os:macos": [],
3046        "//conditions:default": [
3047            "-lrt",
3048        ],
3049    }),
3050    deps = [
3051        ":BinaryFormat",
3052        ":CodeGen",
3053        ":Core",
3054        ":DebugInfo",
3055        ":MC",
3056        ":MCDisassembler",
3057        ":Object",
3058        ":OrcShared",
3059        ":Passes",
3060        ":Support",
3061        ":Target",
3062        ":TargetParser",
3063        ":config",
3064    ],
3065)
3066
3067cc_library(
3068    name = "DWARFLinker",
3069    srcs = glob([
3070        "lib/DWARFLinker/Classic/*.cpp",
3071    ]),
3072    hdrs = glob(["include/llvm/DWARFLinker/Classic/*.h"]),
3073    copts = llvm_copts,
3074    deps = [
3075        ":BinaryFormat",
3076        ":CodeGen",
3077        ":CodeGenTypes",
3078        ":DWARFLinkerBase",
3079        ":DebugInfoDWARF",
3080        ":MC",
3081        ":Support",
3082        ":Target",
3083        ":TargetParser",
3084    ],
3085)
3086
3087cc_library(
3088    name = "DWARFLinkerBase",
3089    srcs = glob([
3090        "lib/DWARFLinker/*.cpp",
3091    ]),
3092    hdrs = glob(["include/llvm/DWARFLinker/*.h"]),
3093    copts = llvm_copts,
3094    deps = [
3095        ":BinaryFormat",
3096        ":CodeGen",
3097        ":DebugInfoDWARF",
3098        ":Support",
3099        ":Target",
3100    ],
3101)
3102
3103cc_library(
3104    name = "DWARFLinkerParallel",
3105    srcs = glob([
3106        "lib/DWARFLinker/Parallel/*.cpp",
3107        "lib/DWARFLinker/Parallel/*.h",
3108    ]),
3109    hdrs = glob(["include/llvm/DWARFLinker/Parallel/*.h"]),
3110    copts = llvm_copts,
3111    deps = [
3112        ":BinaryFormat",
3113        ":CodeGen",
3114        ":DWARFLinkerBase",
3115        ":DebugInfoDWARF",
3116        ":MC",
3117        ":Object",
3118        ":Support",
3119        ":Target",
3120        ":TargetParser",
3121    ],
3122)
3123
3124gentbl(
3125    name = "DllOptionsTableGen",
3126    strip_include_prefix = "lib/ToolDrivers/llvm-dlltool",
3127    tbl_outs = [(
3128        "-gen-opt-parser-defs",
3129        "lib/ToolDrivers/llvm-dlltool/Options.inc",
3130    )],
3131    tblgen = ":llvm-tblgen",
3132    td_file = "lib/ToolDrivers/llvm-dlltool/Options.td",
3133    td_srcs = ["include/llvm/Option/OptParser.td"],
3134)
3135
3136cc_library(
3137    name = "DlltoolDriver",
3138    srcs = glob(["lib/ToolDrivers/llvm-dlltool/*.cpp"]),
3139    hdrs = glob(["include/llvm/ToolDrivers/llvm-dlltool/*.h"]),
3140    copts = llvm_copts,
3141    deps = [
3142        ":DllOptionsTableGen",
3143        ":Object",
3144        ":Option",
3145        ":Support",
3146        ":TargetParser",
3147    ],
3148)
3149
3150gentbl(
3151    name = "LibOptionsTableGen",
3152    strip_include_prefix = "lib/ToolDrivers/llvm-lib",
3153    tbl_outs = [(
3154        "-gen-opt-parser-defs",
3155        "lib/ToolDrivers/llvm-lib/Options.inc",
3156    )],
3157    tblgen = ":llvm-tblgen",
3158    td_file = "lib/ToolDrivers/llvm-lib/Options.td",
3159    td_srcs = ["include/llvm/Option/OptParser.td"],
3160)
3161
3162cc_library(
3163    name = "LibDriver",
3164    srcs = glob(["lib/ToolDrivers/llvm-lib/*.cpp"]),
3165    hdrs = glob(["include/llvm/ToolDrivers/llvm-lib/*.h"]),
3166    copts = llvm_copts,
3167    deps = [
3168        ":BinaryFormat",
3169        ":BitReader",
3170        ":LibOptionsTableGen",
3171        ":Object",
3172        ":Option",
3173        ":Support",
3174    ],
3175)
3176
3177cc_library(
3178    name = "InterfaceStub",
3179    srcs = glob([
3180        "lib/InterfaceStub/*.cpp",
3181    ]),
3182    hdrs = glob([
3183        "include/llvm/InterfaceStub/*.h",
3184    ]),
3185    copts = llvm_copts,
3186    deps = [
3187        ":BinaryFormat",
3188        ":MC",
3189        ":Object",
3190        ":Support",
3191        ":TargetParser",
3192        ":config",
3193    ],
3194)
3195
3196cc_library(
3197    name = "WindowsDriver",
3198    srcs = glob([
3199        "lib/WindowsDriver/*.cpp",
3200    ]),
3201    hdrs = glob([
3202        "include/llvm/WindowsDriver/*.h",
3203    ]),
3204    copts = llvm_copts,
3205    deps = [
3206        ":Option",
3207        ":Support",
3208        ":TargetParser",
3209    ],
3210)
3211
3212cc_library(
3213    name = "WindowsManifest",
3214    srcs = glob([
3215        "lib/WindowsManifest/*.cpp",
3216    ]),
3217    hdrs = glob([
3218        "include/llvm/WindowsManifest/*.h",
3219    ]),
3220    copts = llvm_copts,
3221    deps = [
3222        ":Support",
3223        ":config",
3224    ],
3225)
3226
3227cc_library(
3228    name = "MCA",
3229    srcs = glob([
3230        "lib/MCA/**/*.cpp",
3231    ]),
3232    hdrs = glob([
3233        "include/llvm/MCA/**/*.h",
3234    ]),
3235    copts = llvm_copts,
3236    deps = [
3237        ":MC",
3238        ":MCDisassembler",
3239        ":Object",
3240        ":Support",
3241    ],
3242)
3243
3244cc_library(
3245    name = "MCAApplication",
3246    srcs = glob([
3247        "tools/llvm-mca/Views/*.cpp",
3248    ]) + [
3249        mca_source
3250        for mca_source in glob(["tools/llvm-mca/*.cpp"])
3251        if mca_source != "tools/llvm-mca/llvm-mca.cpp"
3252    ],
3253    hdrs = glob([
3254        "tools/llvm-mca/*.h",
3255        "tools/llvm-mca/Views/*.h",
3256    ]),
3257    strip_include_prefix = "tools/llvm-mca",
3258    deps = [
3259        ":MC",
3260        ":MCA",
3261        ":MCParser",
3262        ":Support",
3263        ":TargetParser",
3264    ],
3265)
3266
3267cc_library(
3268    name = "XRay",
3269    srcs = glob([
3270        "lib/XRay/*.cpp",
3271    ]),
3272    hdrs = glob(["include/llvm/XRay/*.h"]),
3273    copts = llvm_copts,
3274    deps = [
3275        ":Object",
3276        ":Support",
3277        ":TargetParser",
3278    ],
3279)
3280
3281# A flag to pick which `pfm` to use for Exegesis.
3282# Usage: `--@llvm-project//llvm:pfm=<disable|external|system>`.
3283# Flag documentation: https://bazel.build/extending/config
3284string_flag(
3285    name = "pfm",
3286    build_setting_default = "external",
3287    values = [
3288        "disable",  # Don't include pfm at all
3289        "external",  # Build pfm from source
3290        "system",  # Use system pfm (non hermetic)
3291    ],
3292)
3293
3294config_setting(
3295    name = "pfm_disable",
3296    flag_values = {":pfm": "disable"},
3297)
3298
3299config_setting(
3300    name = "pfm_external",
3301    flag_values = {":pfm": "external"},
3302)
3303
3304config_setting(
3305    name = "pfm_system",
3306    flag_values = {":pfm": "system"},
3307)
3308
3309cc_library(
3310    name = "maybe_pfm",
3311    # We want dependencies of this library to have -DHAVE_LIBPFM conditionally
3312    # defined, so we set `defines` instead of `copts`.
3313    defines = select({
3314        ":pfm_external": ["HAVE_LIBPFM=1"],
3315        ":pfm_system": ["HAVE_LIBPFM=1"],
3316        "//conditions:default": [],
3317    }),
3318    deps = select({
3319        ":pfm_external": ["@pfm//:pfm_external"],
3320        ":pfm_system": ["@pfm//:pfm_system"],
3321        "//conditions:default": [],
3322    }),
3323)
3324
3325cc_library(
3326    name = "Exegesis",
3327    srcs = glob(
3328        [
3329            "tools/llvm-exegesis/lib/*.cpp",
3330            # We have to include these headers here as well as in the `hdrs` below
3331            # to allow the `.cpp` files to use file-relative-inclusion to find
3332            # them, even though consumers of this library use inclusion relative to
3333            # `tools/llvm-exegesis/lib` with the `strip_includes_prefix` of this
3334            # library. This mixture appears to be incompatible with header modules.
3335            "tools/llvm-exegesis/lib/*.h",
3336        ] + [
3337            "tools/llvm-exegesis/lib/{}/*.cpp".format(t)
3338            for t in llvm_target_exegesis
3339        ] + [
3340            "tools/llvm-exegesis/lib/{}/*.h".format(t)
3341            for t in llvm_target_exegesis
3342        ],
3343        allow_empty = True,
3344    ),
3345    hdrs = glob(["tools/llvm-exegesis/lib/*.h"]),
3346    copts = llvm_copts,
3347    features = [
3348        "-header_modules",
3349        "-layering_check",
3350    ],
3351    strip_include_prefix = "tools/llvm-exegesis/lib",
3352    deps = [
3353        ":AllTargetsAsmParsers",
3354        ":AllTargetsCodeGens",
3355        ":CodeGen",
3356        ":CodeGenTypes",
3357        ":Core",
3358        ":ExecutionEngine",
3359        ":MC",
3360        ":MCA",
3361        ":MCDisassembler",
3362        ":Object",
3363        ":ObjectYAML",
3364        ":OrcJIT",
3365        ":Support",
3366        ":Target",
3367        ":config",
3368    ] + select({
3369        "@platforms//os:linux": [":maybe_pfm"],
3370        "//conditions:default": [],
3371    }),
3372)
3373
3374################################################################################
3375# LLVM toolchain and development binaries
3376
3377gentbl(
3378    name = "DsymutilTableGen",
3379    strip_include_prefix = "tools/dsymutil",
3380    tbl_outs = [(
3381        "-gen-opt-parser-defs",
3382        "tools/dsymutil/Options.inc",
3383    )],
3384    tblgen = ":llvm-tblgen",
3385    td_file = "tools/dsymutil/Options.td",
3386    td_srcs = ["include/llvm/Option/OptParser.td"],
3387)
3388
3389cc_library(
3390    name = "dsymutil-lib",
3391    srcs = glob([
3392        "tools/dsymutil/*.cpp",
3393        "tools/dsymutil/*.h",
3394    ]),
3395    copts = llvm_copts,
3396    deps = [
3397        ":AllTargetsCodeGens",
3398        ":BinaryFormat",
3399        ":CodeGen",
3400        ":CodeGenTypes",
3401        ":DWARFLinker",
3402        ":DWARFLinkerParallel",
3403        ":DebugInfo",
3404        ":DebugInfoDWARF",
3405        ":DsymutilTableGen",
3406        ":MC",
3407        ":Object",
3408        ":Option",
3409        ":Remarks",
3410        ":Support",
3411        ":Target",
3412        ":TargetParser",
3413        ":config",
3414        ":remark_linker",
3415    ],
3416)
3417
3418llvm_driver_cc_binary(
3419    name = "dsymutil",
3420    stamp = 0,
3421    deps = [":dsymutil-lib"],
3422)
3423
3424cc_binary(
3425    name = "llc",
3426    srcs = glob([
3427        "tools/llc/*.cpp",
3428        "tools/llc/*.h",
3429    ]),
3430    copts = llvm_copts,
3431    stamp = 0,
3432    deps = [
3433        ":AllTargetsAsmParsers",
3434        ":AllTargetsCodeGens",
3435        ":Analysis",
3436        ":AsmParser",
3437        ":BitReader",
3438        ":CodeGen",
3439        ":CodeGenTypes",
3440        ":Core",
3441        ":IRPrinter",
3442        ":IRReader",
3443        ":MC",
3444        ":Passes",
3445        ":Remarks",
3446        ":Scalar",
3447        ":Support",
3448        ":Target",
3449        ":TargetParser",
3450        ":TransformUtils",
3451    ],
3452)
3453
3454cc_binary(
3455    name = "lli",
3456    srcs = glob([
3457        "tools/lli/*.cpp",
3458        "tools/lli/*.h",
3459    ]),
3460    copts = llvm_copts,
3461    # ll scripts rely on symbols from dependent
3462    # libraries being resolvable.
3463    linkopts = select({
3464        "@platforms//os:windows": [],
3465        "@platforms//os:macos": [],
3466        "//conditions:default": [
3467            "-Wl,--undefined=_ZTIi",
3468            "-Wl,--export-dynamic-symbol=_ZTIi",
3469            "-Wl,--export-dynamic-symbol=__cxa_begin_catch",
3470            "-Wl,--export-dynamic-symbol=__cxa_end_catch",
3471            "-Wl,--export-dynamic-symbol=__gxx_personality_v0",
3472            "-Wl,--export-dynamic-symbol=__cxa_allocate_exception",
3473            "-Wl,--export-dynamic-symbol=__cxa_throw",
3474            "-Wl,--export-dynamic-symbol=llvm_orc_registerJITLoaderGDBWrapper",
3475            "-Wl,--export-dynamic-symbol=llvm_orc_registerEHFrameSectionWrapper",
3476            "-Wl,--export-dynamic-symbol=llvm_orc_deregisterEHFrameSectionWrapper",
3477        ],
3478    }),
3479    stamp = 0,
3480    deps = [
3481        ":AllTargetsAsmParsers",
3482        ":AllTargetsCodeGens",
3483        ":AsmParser",
3484        ":BitReader",
3485        ":CodeGen",
3486        ":Core",
3487        ":ExecutionEngine",
3488        ":IRPrinter",
3489        ":IRReader",
3490        ":Instrumentation",
3491        ":Interpreter",
3492        ":MCJIT",
3493        ":Object",
3494        ":OrcDebugging",
3495        ":OrcJIT",
3496        ":OrcTargetProcess",
3497        ":Support",
3498        ":TargetParser",
3499        ":config",
3500    ],
3501)
3502
3503cc_library(
3504    name = "llvm-ar-lib",
3505    srcs = glob(["tools/llvm-ar/*.cpp"]),
3506    copts = llvm_copts,
3507    deps = [
3508        ":AllTargetsAsmParsers",
3509        ":AllTargetsCodeGens",
3510        ":BinaryFormat",
3511        ":Core",
3512        ":DlltoolDriver",
3513        ":LibDriver",
3514        ":Object",
3515        ":Support",
3516        ":TargetParser",
3517    ],
3518)
3519
3520llvm_driver_cc_binary(
3521    name = "llvm-ar",
3522    stamp = 0,
3523    deps = [":llvm-ar-lib"],
3524)
3525
3526# We need to run llvm-ar with different basenames to make it run with
3527# different behavior.
3528binary_alias(
3529    name = "llvm-dlltool",
3530    binary = ":llvm-ar",
3531)
3532
3533binary_alias(
3534    name = "llvm-lib",
3535    binary = ":llvm-ar",
3536)
3537
3538binary_alias(
3539    name = "llvm-ranlib",
3540    binary = ":llvm-ar",
3541)
3542
3543cc_binary(
3544    name = "llvm-as",
3545    srcs = glob([
3546        "tools/llvm-as/*.cpp",
3547    ]),
3548    copts = llvm_copts,
3549    stamp = 0,
3550    deps = [
3551        ":Analysis",
3552        ":AsmParser",
3553        ":BitWriter",
3554        ":Core",
3555        ":Support",
3556    ],
3557)
3558
3559cc_binary(
3560    name = "llvm-bcanalyzer",
3561    srcs = glob([
3562        "tools/llvm-bcanalyzer/*.cpp",
3563    ]),
3564    copts = llvm_copts,
3565    stamp = 0,
3566    deps = [
3567        ":BitReader",
3568        ":Support",
3569    ],
3570)
3571
3572cc_binary(
3573    name = "llvm-cat",
3574    srcs = glob([
3575        "tools/llvm-cat/*.cpp",
3576    ]),
3577    copts = llvm_copts,
3578    stamp = 0,
3579    deps = [
3580        ":BitReader",
3581        ":BitWriter",
3582        ":Core",
3583        ":IRPrinter",
3584        ":IRReader",
3585        ":Support",
3586    ],
3587)
3588
3589gentbl(
3590    name = "CGDataOptsTableGen",
3591    strip_include_prefix = "tools/llvm-cgdata",
3592    tbl_outs = [(
3593        "-gen-opt-parser-defs",
3594        "tools/llvm-cgdata/Opts.inc",
3595    )],
3596    tblgen = ":llvm-tblgen",
3597    td_file = "tools/llvm-cgdata/Opts.td",
3598    td_srcs = ["include/llvm/Option/OptParser.td"],
3599)
3600
3601cc_library(
3602    name = "llvm-cgdata-lib",
3603    srcs = glob(["tools/llvm-cgdata/*.cpp"]),
3604    copts = llvm_copts,
3605    deps = [
3606        ":CGData",
3607        ":CGDataOptsTableGen",
3608        ":CodeGen",
3609        ":Core",
3610        ":Object",
3611        ":Option",
3612        ":Support",
3613    ],
3614)
3615
3616llvm_driver_cc_binary(
3617    name = "llvm-cgdata",
3618    stamp = 0,
3619    deps = [":llvm-cgdata-lib"],
3620)
3621
3622cc_binary(
3623    name = "llvm-cfi-verify",
3624    srcs = glob([
3625        "tools/llvm-cfi-verify/*.cpp",
3626        "tools/llvm-cfi-verify/lib/*.cpp",
3627        "tools/llvm-cfi-verify/lib/*.h",
3628    ]),
3629    copts = llvm_copts,
3630    stamp = 0,
3631    deps = [
3632        ":AllTargetsAsmParsers",
3633        ":AllTargetsCodeGens",
3634        ":AllTargetsDisassemblers",
3635        ":BinaryFormat",
3636        ":DebugInfoDWARF",
3637        ":MC",
3638        ":MCDisassembler",
3639        ":MCParser",
3640        ":Object",
3641        ":Support",
3642        ":Symbolize",
3643    ],
3644)
3645
3646cc_binary(
3647    name = "llvm-cov",
3648    srcs = glob([
3649        "tools/llvm-cov/*.cpp",
3650        "tools/llvm-cov/*.h",
3651    ]),
3652    copts = llvm_copts,
3653    stamp = 0,
3654    deps = [
3655        ":Coverage",
3656        ":Debuginfod",
3657        ":Instrumentation",
3658        ":Object",
3659        ":ProfileData",
3660        ":Support",
3661        ":TargetParser",
3662        ":config",
3663    ],
3664)
3665
3666gentbl(
3667    name = "CvtResTableGen",
3668    strip_include_prefix = "tools/llvm-cvtres",
3669    tbl_outs = [(
3670        "-gen-opt-parser-defs",
3671        "tools/llvm-cvtres/Opts.inc",
3672    )],
3673    tblgen = ":llvm-tblgen",
3674    td_file = "tools/llvm-cvtres/Opts.td",
3675    td_srcs = ["include/llvm/Option/OptParser.td"],
3676)
3677
3678cc_binary(
3679    name = "llvm-cvtres",
3680    srcs = glob([
3681        "tools/llvm-cvtres/*.cpp",
3682    ]),
3683    copts = llvm_copts,
3684    stamp = 0,
3685    deps = [
3686        ":BinaryFormat",
3687        ":CvtResTableGen",
3688        ":Object",
3689        ":Option",
3690        ":Support",
3691    ],
3692)
3693
3694cc_binary(
3695    name = "llvm-cxxdump",
3696    srcs = glob([
3697        "tools/llvm-cxxdump/*.cpp",
3698        "tools/llvm-cxxdump/*.h",
3699    ]),
3700    copts = llvm_copts,
3701    stamp = 0,
3702    deps = [
3703        ":AllTargetsCodeGens",
3704        ":BitReader",
3705        ":MC",
3706        ":Object",
3707        ":Support",
3708    ],
3709)
3710
3711cc_binary(
3712    name = "llvm-cxxmap",
3713    srcs = glob([
3714        "tools/llvm-cxxmap/*.cpp",
3715    ]),
3716    copts = llvm_copts,
3717    stamp = 0,
3718    deps = [
3719        ":ProfileData",
3720        ":Support",
3721    ],
3722)
3723
3724gentbl(
3725    name = "CxxfiltOptsTableGen",
3726    strip_include_prefix = "tools/llvm-cxxfilt",
3727    tbl_outs = [(
3728        "-gen-opt-parser-defs",
3729        "tools/llvm-cxxfilt/Opts.inc",
3730    )],
3731    tblgen = ":llvm-tblgen",
3732    td_file = "tools/llvm-cxxfilt/Opts.td",
3733    td_srcs = ["include/llvm/Option/OptParser.td"],
3734)
3735
3736cc_library(
3737    name = "llvm-cxxfilt-lib",
3738    srcs = glob(["tools/llvm-cxxfilt/*.cpp"]),
3739    copts = llvm_copts,
3740    deps = [
3741        ":CxxfiltOptsTableGen",
3742        ":Demangle",
3743        ":Option",
3744        ":Support",
3745        ":TargetParser",
3746    ],
3747)
3748
3749llvm_driver_cc_binary(
3750    name = "llvm-cxxfilt",
3751    stamp = 0,
3752    deps = [":llvm-cxxfilt-lib"],
3753)
3754
3755cc_binary(
3756    name = "llvm-debuginfo-analyzer",
3757    srcs = glob([
3758        "tools/llvm-debuginfo-analyzer/*.cpp",
3759        "tools/llvm-debuginfo-analyzer/*.h",
3760    ]),
3761    copts = llvm_copts,
3762    stamp = 0,
3763    deps = [
3764        ":AllTargetsCodeGens",
3765        ":AllTargetsDisassemblers",
3766        ":DebugInfoLogicalView",
3767        ":Support",
3768    ],
3769)
3770
3771gentbl(
3772    name = "DebugInfodFindOptsTableGen",
3773    strip_include_prefix = "tools/llvm-debuginfod-find",
3774    tbl_outs = [(
3775        "-gen-opt-parser-defs",
3776        "tools/llvm-debuginfod-find/Opts.inc",
3777    )],
3778    tblgen = ":llvm-tblgen",
3779    td_file = "tools/llvm-debuginfod-find/Opts.td",
3780    td_srcs = ["include/llvm/Option/OptParser.td"],
3781)
3782
3783cc_library(
3784    name = "llvm-debuginfod-find-lib",
3785    srcs = glob([
3786        "tools/llvm-debuginfod-find/*.cpp",
3787    ]),
3788    copts = llvm_copts,
3789    deps = [
3790        ":BitReader",
3791        ":Core",
3792        ":DebugInfodFindOptsTableGen",
3793        ":Debuginfod",
3794        ":Option",
3795        ":Support",
3796        ":Symbolize",
3797    ],
3798)
3799
3800llvm_driver_cc_binary(
3801    name = "llvm-debuginfod-find",
3802    stamp = 0,
3803    deps = [":llvm-debuginfod-find-lib"],
3804)
3805
3806cc_binary(
3807    name = "llvm-dis",
3808    srcs = glob([
3809        "tools/llvm-dis/*.cpp",
3810    ]),
3811    copts = llvm_copts,
3812    stamp = 0,
3813    deps = [
3814        ":Analysis",
3815        ":BitReader",
3816        ":Core",
3817        ":Support",
3818    ],
3819)
3820
3821cc_binary(
3822    name = "llvm-dwarfdump",
3823    srcs = glob([
3824        "tools/llvm-dwarfdump/*.cpp",
3825        "tools/llvm-dwarfdump/*.h",
3826    ]),
3827    copts = llvm_copts,
3828    stamp = 0,
3829    deps = [
3830        ":AllTargetsCodeGens",
3831        ":BinaryFormat",
3832        ":DebugInfo",
3833        ":DebugInfoDWARF",
3834        ":MC",
3835        ":Object",
3836        ":Support",
3837        ":TargetParser",
3838    ],
3839)
3840
3841gentbl(
3842    name = "DwarfutilOptionsTableGen",
3843    strip_include_prefix = "tools/llvm-dwarfutil",
3844    tbl_outs = [(
3845        "-gen-opt-parser-defs",
3846        "tools/llvm-dwarfutil/Options.inc",
3847    )],
3848    tblgen = ":llvm-tblgen",
3849    td_file = "tools/llvm-dwarfutil/Options.td",
3850    td_srcs = ["include/llvm/Option/OptParser.td"],
3851)
3852
3853cc_binary(
3854    name = "llvm-dwarfutil",
3855    srcs = glob([
3856        "tools/llvm-dwarfutil/*.cpp",
3857        "tools/llvm-dwarfutil/*.h",
3858    ]),
3859    copts = llvm_copts,
3860    stamp = 0,
3861    deps = [
3862        ":AllTargetsAsmParsers",
3863        ":AllTargetsCodeGens",
3864        ":CodeGenTypes",
3865        ":DWARFLinker",
3866        ":DWARFLinkerParallel",
3867        ":DebugInfoDWARF",
3868        ":DwarfutilOptionsTableGen",
3869        ":MC",
3870        ":ObjCopy",
3871        ":Object",
3872        ":Option",
3873        ":Support",
3874        ":Target",
3875        ":TargetParser",
3876    ],
3877)
3878
3879gentbl(
3880    name = "DwpOptionsTableGen",
3881    strip_include_prefix = "tools/llvm-dwp",
3882    tbl_outs = [(
3883        "-gen-opt-parser-defs",
3884        "tools/llvm-dwp/Opts.inc",
3885    )],
3886    tblgen = ":llvm-tblgen",
3887    td_file = "tools/llvm-dwp/Opts.td",
3888    td_srcs = ["include/llvm/Option/OptParser.td"],
3889)
3890
3891cc_library(
3892    name = "llvm-dwp-lib",
3893    srcs = glob(["tools/llvm-dwp/*.cpp"]),
3894    copts = llvm_copts,
3895    deps = [
3896        ":AllTargetsCodeGens",
3897        ":DWP",
3898        ":DwpOptionsTableGen",
3899        ":MC",
3900        ":Option",
3901        ":Support",
3902    ],
3903)
3904
3905llvm_driver_cc_binary(
3906    name = "llvm-dwp",
3907    stamp = 0,
3908    deps = [":llvm-dwp-lib"],
3909)
3910
3911cc_binary(
3912    name = "llvm-exegesis",
3913    srcs = [
3914        "tools/llvm-exegesis/llvm-exegesis.cpp",
3915    ],
3916    copts = llvm_copts,
3917    stamp = 0,
3918    deps = [
3919        ":AllTargetsAsmParsers",
3920        ":AllTargetsCodeGens",
3921        ":AllTargetsDisassemblers",
3922        ":CodeGenTypes",
3923        ":Exegesis",
3924        ":MC",
3925        ":MCParser",
3926        ":Object",
3927        ":Support",
3928        ":TargetParser",
3929        ":config",
3930    ],
3931)
3932
3933cc_binary(
3934    name = "llvm-extract",
3935    srcs = glob([
3936        "tools/llvm-extract/*.cpp",
3937    ]),
3938    copts = llvm_copts,
3939    stamp = 0,
3940    deps = [
3941        ":AsmParser",
3942        ":BitReader",
3943        ":BitWriter",
3944        ":Core",
3945        ":IPO",
3946        ":IRPrinter",
3947        ":IRReader",
3948        ":Passes",
3949        ":Support",
3950    ],
3951)
3952
3953gentbl(
3954    name = "GSYMUtilOptionsTableGen",
3955    strip_include_prefix = "tools/llvm-gsymutil",
3956    tbl_outs = [(
3957        "-gen-opt-parser-defs",
3958        "tools/llvm-gsymutil/Opts.inc",
3959    )],
3960    tblgen = ":llvm-tblgen",
3961    td_file = "tools/llvm-gsymutil/Opts.td",
3962    td_srcs = ["include/llvm/Option/OptParser.td"],
3963)
3964
3965cc_library(
3966    name = "llvm-gsymutil-lib",
3967    srcs = glob(["tools/llvm-gsymutil/*.cpp"]),
3968    copts = llvm_copts,
3969    deps = [
3970        ":AllTargetsCodeGens",
3971        ":DebugInfo",
3972        ":DebugInfoDWARF",
3973        ":DebugInfoGSYM",
3974        ":GSYMUtilOptionsTableGen",
3975        ":MC",
3976        ":Object",
3977        ":Option",
3978        ":Support",
3979        ":Target",
3980        ":TargetParser",
3981    ],
3982)
3983
3984llvm_driver_cc_binary(
3985    name = "llvm-gsymutil",
3986    stamp = 0,
3987    deps = [":llvm-gsymutil-lib"],
3988)
3989
3990gentbl(
3991    name = "IfsOptionsTableGen",
3992    strip_include_prefix = "tools/llvm-ifs",
3993    tbl_outs = [(
3994        "-gen-opt-parser-defs",
3995        "tools/llvm-ifs/Opts.inc",
3996    )],
3997    tblgen = ":llvm-tblgen",
3998    td_file = "tools/llvm-ifs/Opts.td",
3999    td_srcs = ["include/llvm/Option/OptParser.td"],
4000)
4001
4002cc_library(
4003    name = "llvm-ifs-lib",
4004    srcs = glob([
4005        "tools/llvm-ifs/*.cpp",
4006        "tools/llvm-ifs/*.h",
4007    ]),
4008    copts = llvm_copts,
4009    deps = [
4010        ":BinaryFormat",
4011        ":IfsOptionsTableGen",
4012        ":InterfaceStub",
4013        ":ObjectYAML",
4014        ":Option",
4015        ":Support",
4016        ":TargetParser",
4017        ":TextAPI",
4018    ],
4019)
4020
4021llvm_driver_cc_binary(
4022    name = "llvm-ifs",
4023    stamp = 0,
4024    deps = [":llvm-ifs-lib"],
4025)
4026
4027cc_binary(
4028    name = "llvm-jitlink",
4029    srcs = glob([
4030        "tools/llvm-jitlink/*.cpp",
4031        "tools/llvm-jitlink/*.h",
4032    ]),
4033    copts = llvm_copts,
4034    # Make symbols from the standard library dynamically resolvable.
4035    linkopts = select({
4036        "@platforms//os:windows": [],
4037        "@platforms//os:macos": [],
4038        "//conditions:default": [
4039            "-Wl,--undefined=_ZTIi",
4040            "-Wl,--export-dynamic-symbol=_ZTIi",
4041            "-Wl,--export-dynamic-symbol=__cxa_begin_catch",
4042            "-Wl,--export-dynamic-symbol=__cxa_end_catch",
4043            "-Wl,--export-dynamic-symbol=__gxx_personality_v0",
4044            "-Wl,--export-dynamic-symbol=__cxa_allocate_exception",
4045            "-Wl,--export-dynamic-symbol=__cxa_throw",
4046            "-Wl,--export-dynamic-symbol=llvm_orc_registerJITLoaderGDBWrapper",
4047        ],
4048    }),
4049    stamp = 0,
4050    deps = [
4051        ":AllTargetsAsmParsers",
4052        ":AllTargetsCodeGens",
4053        ":AllTargetsDisassemblers",
4054        ":AsmParser",
4055        ":BinaryFormat",
4056        ":BitReader",
4057        ":CodeGen",
4058        ":ExecutionEngine",
4059        ":MC",
4060        ":MCDisassembler",
4061        ":MCJIT",
4062        ":Object",
4063        ":OrcDebugging",
4064        ":OrcJIT",
4065        ":OrcShared",
4066        ":OrcTargetProcess",
4067        ":Support",
4068        ":TargetParser",
4069        ":config",
4070    ],
4071)
4072
4073gentbl(
4074    name = "LibtoolDarwinOptionsTableGen",
4075    strip_include_prefix = "tools/llvm-libtool-darwin",
4076    tbl_outs = [(
4077        "-gen-opt-parser-defs",
4078        "tools/llvm-libtool-darwin/Opts.inc",
4079    )],
4080    tblgen = ":llvm-tblgen",
4081    td_file = "tools/llvm-libtool-darwin/Opts.td",
4082    td_srcs = ["include/llvm/Option/OptParser.td"],
4083)
4084
4085cc_library(
4086    name = "llvm-libtool-darwin-lib",
4087    srcs = glob([
4088        "tools/llvm-libtool-darwin/*.cpp",
4089        "tools/llvm-libtool-darwin/*.h",
4090    ]),
4091    copts = llvm_copts,
4092    deps = [
4093        ":AllTargetsAsmParsers",
4094        ":AllTargetsCodeGens",
4095        ":BinaryFormat",
4096        ":Core",
4097        ":LibtoolDarwinOptionsTableGen",
4098        ":Object",
4099        ":Option",
4100        ":Support",
4101        ":TextAPI",
4102    ],
4103)
4104
4105llvm_driver_cc_binary(
4106    name = "llvm-libtool-darwin",
4107    stamp = 0,
4108    deps = [":llvm-libtool-darwin-lib"],
4109)
4110
4111cc_binary(
4112    name = "llvm-link",
4113    srcs = glob([
4114        "tools/llvm-link/*.cpp",
4115    ]),
4116    copts = llvm_copts,
4117    stamp = 0,
4118    deps = [
4119        ":AsmParser",
4120        ":BinaryFormat",
4121        ":BitReader",
4122        ":BitWriter",
4123        ":Core",
4124        ":IPO",
4125        ":IRPrinter",
4126        ":IRReader",
4127        ":Linker",
4128        ":Object",
4129        ":Support",
4130        ":TransformUtils",
4131    ],
4132)
4133
4134gentbl(
4135    name = "LipoOptsTableGen",
4136    strip_include_prefix = "tools/llvm-lipo",
4137    tbl_outs = [(
4138        "-gen-opt-parser-defs",
4139        "tools/llvm-lipo/LipoOpts.inc",
4140    )],
4141    tblgen = ":llvm-tblgen",
4142    td_file = "tools/llvm-lipo/LipoOpts.td",
4143    td_srcs = ["include/llvm/Option/OptParser.td"],
4144)
4145
4146cc_library(
4147    name = "llvm-lipo-lib",
4148    srcs = ["tools/llvm-lipo/llvm-lipo.cpp"],
4149    copts = llvm_copts,
4150    deps = [
4151        ":AllTargetsAsmParsers",
4152        ":BinaryFormat",
4153        ":Core",
4154        ":LipoOptsTableGen",
4155        ":Object",
4156        ":Option",
4157        ":Support",
4158        ":TargetParser",
4159        ":TextAPI",
4160    ],
4161)
4162
4163llvm_driver_cc_binary(
4164    name = "llvm-lipo",
4165    stamp = 0,
4166    deps = [":llvm-lipo-lib"],
4167)
4168
4169cc_binary(
4170    name = "llvm-lto",
4171    srcs = glob([
4172        "tools/llvm-lto/*.cpp",
4173    ]),
4174    copts = llvm_copts,
4175    stamp = 0,
4176    deps = [
4177        ":AllTargetsAsmParsers",
4178        ":AllTargetsCodeGens",
4179        ":BitReader",
4180        ":BitWriter",
4181        ":CodeGen",
4182        ":Core",
4183        ":IRPrinter",
4184        ":IRReader",
4185        ":LTO",
4186        ":Support",
4187        ":Target",
4188    ],
4189)
4190
4191cc_binary(
4192    name = "llvm-lto2",
4193    srcs = glob([
4194        "tools/llvm-lto2/*.cpp",
4195    ]),
4196    copts = llvm_copts,
4197    stamp = 0,
4198    deps = [
4199        ":AllTargetsAsmParsers",
4200        ":AllTargetsCodeGens",
4201        ":BitReader",
4202        ":CodeGen",
4203        ":Core",
4204        ":LTO",
4205        ":Passes",
4206        ":Remarks",
4207        ":Support",
4208    ],
4209)
4210
4211cc_binary(
4212    name = "llvm-mc",
4213    srcs = glob([
4214        "tools/llvm-mc/*.cpp",
4215        "tools/llvm-mc/*.h",
4216    ]),
4217    copts = llvm_copts,
4218    stamp = 0,
4219    deps = [
4220        ":AllTargetsAsmParsers",
4221        ":AllTargetsCodeGens",
4222        ":AllTargetsDisassemblers",
4223        ":MC",
4224        ":MCDisassembler",
4225        ":MCParser",
4226        ":Object",
4227        ":Support",
4228        ":TargetParser",
4229    ],
4230)
4231
4232cc_binary(
4233    name = "llvm-mca",
4234    srcs = [
4235        "tools/llvm-mca/llvm-mca.cpp",
4236    ],
4237    copts = llvm_copts,
4238    stamp = 0,
4239    deps = [
4240        ":AllTargetsAsmParsers",
4241        ":AllTargetsCodeGens",
4242        ":AllTargetsDisassemblers",
4243        ":AllTargetsMCAs",
4244        ":MC",
4245        ":MCA",
4246        ":MCAApplication",
4247        ":MCParser",
4248        ":Support",
4249        ":TargetParser",
4250    ],
4251)
4252
4253gentbl(
4254    name = "MlTableGen",
4255    strip_include_prefix = "tools/llvm-ml",
4256    tbl_outs = [(
4257        "-gen-opt-parser-defs",
4258        "tools/llvm-ml/Opts.inc",
4259    )],
4260    tblgen = ":llvm-tblgen",
4261    td_file = "tools/llvm-ml/Opts.td",
4262    td_srcs = ["include/llvm/Option/OptParser.td"],
4263)
4264
4265cc_library(
4266    name = "llvm-ml-lib",
4267    srcs = glob([
4268        "tools/llvm-ml/*.cpp",
4269        "tools/llvm-ml/*.h",
4270    ]),
4271    copts = llvm_copts,
4272    deps = [
4273        ":AllTargetsAsmParsers",
4274        ":AllTargetsCodeGens",
4275        ":AllTargetsDisassemblers",
4276        ":MC",
4277        ":MCDisassembler",
4278        ":MCParser",
4279        ":MlTableGen",
4280        ":Option",
4281        ":Support",
4282        ":TargetParser",
4283    ],
4284)
4285
4286llvm_driver_cc_binary(
4287    name = "llvm-ml",
4288    stamp = 0,
4289    deps = [":llvm-ml-lib"],
4290)
4291
4292cc_binary(
4293    name = "llvm-modextract",
4294    srcs = glob([
4295        "tools/llvm-modextract/*.cpp",
4296    ]),
4297    copts = llvm_copts,
4298    stamp = 0,
4299    deps = [
4300        ":BitReader",
4301        ":BitWriter",
4302        ":IRPrinter",
4303        ":IRReader",
4304        ":Support",
4305    ],
4306)
4307
4308gentbl(
4309    name = "MtTableGen",
4310    strip_include_prefix = "tools/llvm-mt",
4311    tbl_outs = [(
4312        "-gen-opt-parser-defs",
4313        "tools/llvm-mt/Opts.inc",
4314    )],
4315    tblgen = ":llvm-tblgen",
4316    td_file = "tools/llvm-mt/Opts.td",
4317    td_srcs = ["include/llvm/Option/OptParser.td"],
4318)
4319
4320cc_library(
4321    name = "llvm-mt-lib",
4322    srcs = glob(["tools/llvm-mt/*.cpp"]),
4323    copts = llvm_copts,
4324    deps = [
4325        ":MtTableGen",
4326        ":Option",
4327        ":Support",
4328        ":WindowsManifest",
4329        ":config",
4330    ],
4331)
4332
4333llvm_driver_cc_binary(
4334    name = "llvm-mt",
4335    stamp = 0,
4336    deps = [":llvm-mt-lib"],
4337)
4338
4339gentbl(
4340    name = "NmOptsTableGen",
4341    strip_include_prefix = "tools/llvm-nm",
4342    tbl_outs = [(
4343        "-gen-opt-parser-defs",
4344        "tools/llvm-nm/Opts.inc",
4345    )],
4346    tblgen = ":llvm-tblgen",
4347    td_file = "tools/llvm-nm/Opts.td",
4348    td_srcs = ["include/llvm/Option/OptParser.td"],
4349)
4350
4351cc_library(
4352    name = "llvm-nm-lib",
4353    srcs = glob(["tools/llvm-nm/*.cpp"]),
4354    copts = llvm_copts,
4355    deps = [
4356        ":AllTargetsAsmParsers",
4357        ":AllTargetsCodeGens",
4358        ":BinaryFormat",
4359        ":BitReader",
4360        ":Core",
4361        ":Demangle",
4362        ":NmOptsTableGen",
4363        ":Object",
4364        ":Option",
4365        ":Support",
4366        ":Symbolize",
4367        ":TargetParser",
4368    ],
4369)
4370
4371llvm_driver_cc_binary(
4372    name = "llvm-nm",
4373    stamp = 0,
4374    deps = [":llvm-nm-lib"],
4375)
4376
4377gentbl(
4378    name = "llvm-objcopy-opts",
4379    strip_include_prefix = "tools/llvm-objcopy",
4380    tbl_outs = [(
4381        "-gen-opt-parser-defs",
4382        "tools/llvm-objcopy/ObjcopyOpts.inc",
4383    )],
4384    tblgen = ":llvm-tblgen",
4385    td_file = "tools/llvm-objcopy/ObjcopyOpts.td",
4386    td_srcs = [
4387        "include/llvm/Option/OptParser.td",
4388        "tools/llvm-objcopy/CommonOpts.td",
4389    ],
4390)
4391
4392gentbl(
4393    name = "llvm-installnametool-opts",
4394    strip_include_prefix = "tools/llvm-objcopy",
4395    tbl_outs = [(
4396        "-gen-opt-parser-defs",
4397        "tools/llvm-objcopy/InstallNameToolOpts.inc",
4398    )],
4399    tblgen = ":llvm-tblgen",
4400    td_file = "tools/llvm-objcopy/InstallNameToolOpts.td",
4401    td_srcs = [
4402        "include/llvm/Option/OptParser.td",
4403        "tools/llvm-objcopy/CommonOpts.td",
4404    ],
4405)
4406
4407gentbl(
4408    name = "llvm-strip-opts",
4409    strip_include_prefix = "tools/llvm-objcopy",
4410    tbl_outs = [(
4411        "-gen-opt-parser-defs",
4412        "tools/llvm-objcopy/StripOpts.inc",
4413    )],
4414    tblgen = ":llvm-tblgen",
4415    td_file = "tools/llvm-objcopy/StripOpts.td",
4416    td_srcs = [
4417        "include/llvm/Option/OptParser.td",
4418        "tools/llvm-objcopy/CommonOpts.td",
4419    ],
4420)
4421
4422gentbl(
4423    name = "llvm-bitcode-strip-opts",
4424    strip_include_prefix = "tools/llvm-objcopy",
4425    tbl_outs = [(
4426        "-gen-opt-parser-defs",
4427        "tools/llvm-objcopy/BitcodeStripOpts.inc",
4428    )],
4429    tblgen = ":llvm-tblgen",
4430    td_file = "tools/llvm-objcopy/BitcodeStripOpts.td",
4431    td_srcs = [
4432        "include/llvm/Option/OptParser.td",
4433        "tools/llvm-objcopy/CommonOpts.td",
4434    ],
4435)
4436
4437cc_binary(
4438    name = "llvm-stress",
4439    srcs = glob([
4440        "tools/llvm-stress/*.cpp",
4441    ]),
4442    copts = llvm_copts,
4443    stamp = 0,
4444    deps = [
4445        ":Core",
4446        ":Support",
4447    ],
4448)
4449
4450cc_library(
4451    name = "llvm-objcopy-lib",
4452    srcs = glob([
4453        "tools/llvm-objcopy/*.cpp",
4454        "tools/llvm-objcopy/*.h",
4455    ]),
4456    copts = llvm_copts,
4457    deps = [
4458        ":BinaryFormat",
4459        ":MC",
4460        ":ObjCopy",
4461        ":Object",
4462        ":ObjectYAML",
4463        ":Option",
4464        ":Support",
4465        ":Target",
4466        ":TargetParser",
4467        ":llvm-bitcode-strip-opts",
4468        ":llvm-installnametool-opts",
4469        ":llvm-objcopy-opts",
4470        ":llvm-strip-opts",
4471    ],
4472)
4473
4474llvm_driver_cc_binary(
4475    name = "llvm-objcopy",
4476    stamp = 0,
4477    deps = [":llvm-objcopy-lib"],
4478)
4479
4480binary_alias(
4481    name = "llvm-strip",
4482    binary = ":llvm-objcopy",
4483)
4484
4485binary_alias(
4486    name = "llvm-bitcode-strip",
4487    binary = ":llvm-objcopy",
4488)
4489
4490binary_alias(
4491    name = "llvm-install-name-tool",
4492    binary = ":llvm-objcopy",
4493)
4494
4495cc_library(
4496    name = "llvm-objdump-lib",
4497    srcs = glob([
4498        "tools/llvm-objdump/*.cpp",
4499        "tools/llvm-objdump/*.h",
4500    ]),
4501    copts = llvm_copts,
4502    deps = [
4503        ":AllTargetsAsmParsers",
4504        ":AllTargetsCodeGens",
4505        ":AllTargetsDisassemblers",
4506        ":BinaryFormat",
4507        ":CodeGen",
4508        ":DebugInfo",
4509        ":DebugInfoBTF",
4510        ":DebugInfoDWARF",
4511        ":Debuginfod",
4512        ":Demangle",
4513        ":MC",
4514        ":MCDisassembler",
4515        ":ObjdumpOptsTableGen",
4516        ":Object",
4517        ":Option",
4518        ":OtoolOptsTableGen",
4519        ":Support",
4520        ":Symbolize",
4521        ":TargetParser",
4522        ":config",
4523    ],
4524)
4525
4526llvm_driver_cc_binary(
4527    name = "llvm-objdump",
4528    stamp = 0,
4529    deps = [":llvm-objdump-lib"],
4530)
4531
4532gentbl(
4533    name = "ObjdumpOptsTableGen",
4534    strip_include_prefix = "tools/llvm-objdump",
4535    tbl_outs = [(
4536        "-gen-opt-parser-defs",
4537        "tools/llvm-objdump/ObjdumpOpts.inc",
4538    )],
4539    tblgen = ":llvm-tblgen",
4540    td_file = "tools/llvm-objdump/ObjdumpOpts.td",
4541    td_srcs = ["include/llvm/Option/OptParser.td"],
4542)
4543
4544binary_alias(
4545    name = "llvm-otool",
4546    binary = ":llvm-objdump",
4547)
4548
4549gentbl(
4550    name = "OtoolOptsTableGen",
4551    strip_include_prefix = "tools/llvm-objdump",
4552    tbl_outs = [(
4553        "-gen-opt-parser-defs",
4554        "tools/llvm-objdump/OtoolOpts.inc",
4555    )],
4556    tblgen = ":llvm-tblgen",
4557    td_file = "tools/llvm-objdump/OtoolOpts.td",
4558    td_srcs = ["include/llvm/Option/OptParser.td"],
4559)
4560
4561cc_binary(
4562    name = "llvm-opt-report",
4563    srcs = glob([
4564        "tools/llvm-opt-report/*.cpp",
4565    ]),
4566    copts = llvm_copts,
4567    stamp = 0,
4568    deps = [
4569        ":AllTargetsCodeGens",
4570        ":Demangle",
4571        ":Remarks",
4572        ":Support",
4573    ],
4574)
4575
4576cc_binary(
4577    name = "llvm-pdbutil",
4578    srcs = glob([
4579        "tools/llvm-pdbutil/*.cpp",
4580        "tools/llvm-pdbutil/*.h",
4581    ]),
4582    copts = llvm_copts,
4583    stamp = 0,
4584    deps = [
4585        ":BinaryFormat",
4586        ":DebugInfoBTF",
4587        ":DebugInfoCodeView",
4588        ":DebugInfoMSF",
4589        ":DebugInfoPDB",
4590        ":Object",
4591        ":ObjectYAML",
4592        ":Support",
4593        ":config",
4594    ],
4595)
4596
4597cc_library(
4598    name = "llvm-profdata-lib",
4599    srcs = glob(["tools/llvm-profdata/*.cpp"]),
4600    copts = llvm_copts,
4601    deps = [
4602        ":Core",
4603        ":Debuginfod",
4604        ":Object",
4605        ":ProfileData",
4606        ":Support",
4607    ],
4608)
4609
4610llvm_driver_cc_binary(
4611    name = "llvm-profdata",
4612    stamp = 0,
4613    deps = [":llvm-profdata-lib"],
4614)
4615
4616cc_binary(
4617    name = "llvm-profgen",
4618    srcs = glob([
4619        "tools/llvm-profgen/*.cpp",
4620        "tools/llvm-profgen/*.h",
4621    ]),
4622    copts = llvm_copts,
4623    stamp = 0,
4624    deps = [
4625        ":AllTargetsCodeGens",
4626        ":AllTargetsDisassemblers",
4627        ":Core",
4628        ":DebugInfoDWARF",
4629        ":Demangle",
4630        ":IPO",
4631        ":MC",
4632        ":MCDisassembler",
4633        ":Object",
4634        ":ProfileData",
4635        ":Support",
4636        ":Symbolize",
4637        ":TargetParser",
4638    ],
4639)
4640
4641gentbl(
4642    name = "RcTableGen",
4643    strip_include_prefix = "tools/llvm-rc",
4644    tbl_outs = [(
4645        "-gen-opt-parser-defs",
4646        "tools/llvm-rc/Opts.inc",
4647    )],
4648    tblgen = ":llvm-tblgen",
4649    td_file = "tools/llvm-rc/Opts.td",
4650    td_srcs = ["include/llvm/Option/OptParser.td"],
4651)
4652
4653gentbl(
4654    name = "WindresTableGen",
4655    strip_include_prefix = "tools/llvm-rc",
4656    tbl_outs = [(
4657        "-gen-opt-parser-defs",
4658        "tools/llvm-rc/WindresOpts.inc",
4659    )],
4660    tblgen = ":llvm-tblgen",
4661    td_file = "tools/llvm-rc/WindresOpts.td",
4662    td_srcs = ["include/llvm/Option/OptParser.td"],
4663)
4664
4665# Workaround inability to put `.def` files into `srcs` with a library.
4666cc_library(
4667    name = "llvm-rc-defs-lib",
4668    textual_hdrs = glob(["tools/llvm-rc/*.def"]),
4669)
4670
4671cc_library(
4672    name = "llvm-rc-lib",
4673    srcs = glob([
4674        "tools/llvm-rc/*.cpp",
4675        "tools/llvm-rc/*.h",
4676    ]),
4677    copts = llvm_copts,
4678    deps = [
4679        ":Object",
4680        ":Option",
4681        ":RcTableGen",
4682        ":Support",
4683        ":TargetParser",
4684        ":WindresTableGen",
4685        ":config",
4686        ":llvm-rc-defs-lib",
4687    ],
4688)
4689
4690llvm_driver_cc_binary(
4691    name = "llvm-rc",
4692    stamp = 0,
4693    deps = [":llvm-rc-lib"],
4694)
4695
4696binary_alias(
4697    name = "llvm-windres",
4698    binary = ":llvm-rc",
4699)
4700
4701gentbl(
4702    name = "ReadobjOptsTableGen",
4703    strip_include_prefix = "tools/llvm-readobj",
4704    tbl_outs = [(
4705        "-gen-opt-parser-defs",
4706        "tools/llvm-readobj/Opts.inc",
4707    )],
4708    tblgen = ":llvm-tblgen",
4709    td_file = "tools/llvm-readobj/Opts.td",
4710    td_srcs = ["include/llvm/Option/OptParser.td"],
4711)
4712
4713cc_library(
4714    name = "llvm-readobj-lib",
4715    srcs = glob([
4716        "tools/llvm-readobj/*.cpp",
4717        "tools/llvm-readobj/*.h",
4718    ]),
4719    copts = llvm_copts,
4720    deps = [
4721        ":AllTargetsCodeGens",
4722        ":BinaryFormat",
4723        ":BitReader",
4724        ":DebugInfoCodeView",
4725        ":DebugInfoDWARF",
4726        ":Demangle",
4727        ":MC",
4728        ":Object",
4729        ":Option",
4730        ":ReadobjOptsTableGen",
4731        ":Support",
4732    ],
4733)
4734
4735llvm_driver_cc_binary(
4736    name = "llvm-readobj",
4737    stamp = 0,
4738    deps = [":llvm-readobj-lib"],
4739)
4740
4741# Create an 'llvm-readelf' named binary from the 'llvm-readobj' tool.
4742binary_alias(
4743    name = "llvm-readelf",
4744    binary = ":llvm-readobj",
4745)
4746
4747cc_binary(
4748    name = "llvm-reduce",
4749    srcs = glob([
4750        "tools/llvm-reduce/**/*.cpp",
4751        "tools/llvm-reduce/**/*.h",
4752    ]),
4753    copts = llvm_copts,
4754    includes = ["tools/llvm-reduce"],
4755    stamp = 0,
4756    deps = [
4757        ":AllTargetsAsmParsers",
4758        ":AllTargetsCodeGens",
4759        ":Analysis",
4760        ":BitReader",
4761        ":BitWriter",
4762        ":CodeGen",
4763        ":CodeGenTypes",
4764        ":Core",
4765        ":IPO",
4766        ":IRReader",
4767        ":MC",
4768        ":Passes",
4769        ":Support",
4770        ":Target",
4771        ":TargetParser",
4772        ":TransformUtils",
4773        ":config",
4774    ],
4775)
4776
4777cc_binary(
4778    name = "llvm-rtdyld",
4779    srcs = glob([
4780        "tools/llvm-rtdyld/*.cpp",
4781    ]),
4782    copts = llvm_copts,
4783    stamp = 0,
4784    deps = [
4785        ":AllTargetsCodeGens",
4786        ":AllTargetsDisassemblers",
4787        ":DebugInfo",
4788        ":DebugInfoDWARF",
4789        ":ExecutionEngine",
4790        ":MC",
4791        ":MCDisassembler",
4792        ":Object",
4793        ":Support",
4794    ],
4795)
4796
4797gentbl(
4798    name = "SizeOptsTableGen",
4799    strip_include_prefix = "tools/llvm-size",
4800    tbl_outs = [(
4801        "-gen-opt-parser-defs",
4802        "tools/llvm-size/Opts.inc",
4803    )],
4804    tblgen = ":llvm-tblgen",
4805    td_file = "tools/llvm-size/Opts.td",
4806    td_srcs = ["include/llvm/Option/OptParser.td"],
4807)
4808
4809cc_library(
4810    name = "llvm-size-lib",
4811    srcs = glob(["tools/llvm-size/*.cpp"]),
4812    copts = llvm_copts,
4813    deps = [
4814        ":Object",
4815        ":Option",
4816        ":SizeOptsTableGen",
4817        ":Support",
4818    ],
4819)
4820
4821llvm_driver_cc_binary(
4822    name = "llvm-size",
4823    stamp = 0,
4824    deps = [":llvm-size-lib"],
4825)
4826
4827cc_binary(
4828    name = "llvm-split",
4829    srcs = glob([
4830        "tools/llvm-split/*.cpp",
4831    ]),
4832    copts = llvm_copts,
4833    stamp = 0,
4834    deps = [
4835        ":AllTargetsAsmParsers",
4836        ":AllTargetsCodeGens",
4837        ":BitWriter",
4838        ":Core",
4839        ":IRPrinter",
4840        ":IRReader",
4841        ":MC",
4842        ":Support",
4843        ":Target",
4844        ":TargetParser",
4845        ":TransformUtils",
4846    ],
4847)
4848
4849gentbl(
4850    name = "StringsOptsTableGen",
4851    strip_include_prefix = "tools/llvm-strings",
4852    tbl_outs = [(
4853        "-gen-opt-parser-defs",
4854        "tools/llvm-strings/Opts.inc",
4855    )],
4856    tblgen = ":llvm-tblgen",
4857    td_file = "tools/llvm-strings/Opts.td",
4858    td_srcs = ["include/llvm/Option/OptParser.td"],
4859)
4860
4861cc_binary(
4862    name = "llvm-strings",
4863    srcs = glob([
4864        "tools/llvm-strings/*.cpp",
4865    ]),
4866    copts = llvm_copts,
4867    stamp = 0,
4868    deps = [
4869        ":Object",
4870        ":Option",
4871        ":StringsOptsTableGen",
4872        ":Support",
4873    ],
4874)
4875
4876gentbl(
4877    name = "SymbolizerOptsTableGen",
4878    strip_include_prefix = "tools/llvm-symbolizer",
4879    tbl_outs = [(
4880        "-gen-opt-parser-defs",
4881        "tools/llvm-symbolizer/Opts.inc",
4882    )],
4883    tblgen = ":llvm-tblgen",
4884    td_file = "tools/llvm-symbolizer/Opts.td",
4885    td_srcs = ["include/llvm/Option/OptParser.td"],
4886)
4887
4888cc_library(
4889    name = "llvm-symbolizer-lib",
4890    srcs = glob(["tools/llvm-symbolizer/*.cpp"]),
4891    copts = llvm_copts,
4892    deps = [
4893        ":DebugInfoDWARF",
4894        ":DebugInfoPDB",
4895        ":Debuginfod",
4896        ":Object",
4897        ":Option",
4898        ":Support",
4899        ":Symbolize",
4900        ":SymbolizerOptsTableGen",
4901        ":config",
4902    ],
4903)
4904
4905llvm_driver_cc_binary(
4906    name = "llvm-symbolizer",
4907    stamp = 0,
4908    deps = [":llvm-symbolizer-lib"],
4909)
4910
4911binary_alias(
4912    name = "llvm-addr2line",
4913    binary = ":llvm-symbolizer",
4914)
4915
4916cc_binary(
4917    name = "llvm-undname",
4918    srcs = glob([
4919        "tools/llvm-undname/*.cpp",
4920    ]),
4921    copts = llvm_copts,
4922    stamp = 0,
4923    deps = [
4924        ":Demangle",
4925        ":Support",
4926    ],
4927)
4928
4929cc_binary(
4930    name = "llvm-xray",
4931    srcs = glob([
4932        "tools/llvm-xray/*.cpp",
4933        "tools/llvm-xray/*.h",
4934    ]),
4935    copts = llvm_copts,
4936    stamp = 0,
4937    deps = [
4938        ":DebugInfoDWARF",
4939        ":Object",
4940        ":Support",
4941        ":Symbolize",
4942        ":XRay",
4943    ],
4944)
4945
4946cc_library(
4947    name = "opt-driver",
4948    srcs = glob([
4949        "tools/opt/*.cpp",
4950        "tools/opt/*.h",
4951    ]),
4952    copts = llvm_copts,
4953    linkopts = select({
4954        "@platforms//os:windows": [],
4955        "@platforms//os:macos": [],
4956        "//conditions:default": ["-Wl,--export-dynamic"],
4957    }),
4958    deps = [
4959        ":AllTargetsAsmParsers",
4960        ":AllTargetsCodeGens",
4961        ":Analysis",
4962        ":AsmParser",
4963        ":BitReader",
4964        ":BitWriter",
4965        ":CodeGen",
4966        ":Core",
4967        ":IPO",
4968        ":IRPrinter",
4969        ":IRReader",
4970        ":Instrumentation",
4971        ":MC",
4972        ":Passes",
4973        ":Remarks",
4974        ":Scalar",
4975        ":Support",
4976        ":Target",
4977        ":TargetParser",
4978        ":TransformUtils",
4979        ":common_transforms",
4980        ":config",
4981    ],
4982)
4983
4984cc_binary(
4985    name = "opt",
4986    stamp = 0,
4987    deps = [":opt-driver"],
4988)
4989
4990gentbl(
4991    name = "SancovOptsTableGen",
4992    strip_include_prefix = "tools/sancov",
4993    tbl_outs = [(
4994        "-gen-opt-parser-defs",
4995        "tools/sancov/Opts.inc",
4996    )],
4997    tblgen = ":llvm-tblgen",
4998    td_file = "tools/sancov/Opts.td",
4999    td_srcs = ["include/llvm/Option/OptParser.td"],
5000)
5001
5002cc_library(
5003    name = "sancov-lib",
5004    srcs = glob(["tools/sancov/*.cpp"]),
5005    copts = llvm_copts,
5006    deps = [
5007        ":AllTargetsCodeGens",
5008        ":AllTargetsDisassemblers",
5009        ":DebugInfoDWARF",
5010        ":DebugInfoPDB",
5011        ":MC",
5012        ":MCDisassembler",
5013        ":Object",
5014        ":Option",
5015        ":SancovOptsTableGen",
5016        ":Support",
5017        ":Symbolize",
5018    ],
5019)
5020
5021llvm_driver_cc_binary(
5022    name = "sancov",
5023    stamp = 0,
5024    deps = [":sancov-lib"],
5025)
5026
5027cc_binary(
5028    name = "sanstats",
5029    srcs = glob([
5030        "tools/sanstats/*.cpp",
5031    ]),
5032    copts = llvm_copts,
5033    stamp = 0,
5034    deps = [
5035        ":Support",
5036        ":Symbolize",
5037        ":TransformUtils",
5038    ],
5039)
5040
5041cc_binary(
5042    name = "split-file",
5043    srcs = glob([
5044        "utils/split-file/*.cpp",
5045    ]),
5046    copts = llvm_copts,
5047    stamp = 0,
5048    deps = [
5049        ":Support",
5050    ],
5051)
5052
5053################################################################################
5054# Begin testonly libraries
5055
5056cc_library(
5057    name = "FuzzMutate",
5058    testonly = True,
5059    srcs = glob(["lib/FuzzMutate/*.cpp"]),
5060    hdrs = glob(["include/llvm/FuzzMutate/*.h"]),
5061    copts = llvm_copts,
5062    includes = ["include"],
5063    deps = [
5064        ":Analysis",
5065        ":BitReader",
5066        ":BitWriter",
5067        ":Core",
5068        ":Scalar",
5069        ":Support",
5070        ":TargetParser",
5071        ":TransformUtils",
5072    ],
5073)
5074
5075cc_library(
5076    name = "Diff",
5077    testonly = True,
5078    srcs = glob(["tools/llvm-diff/lib/*.cpp"]),
5079    hdrs = glob(["tools/llvm-diff/lib/*.h"]),
5080    deps = [
5081        ":Core",
5082        ":Support",
5083    ],
5084)
5085
5086py_binary(
5087    name = "lit",
5088    testonly = True,
5089    srcs = ["utils/lit/lit.py"] + glob(["utils/lit/lit/**/*.py"]),
5090    imports = ["utils/lit"],
5091)
5092
5093py_binary(
5094    name = "extract_ir",
5095    srcs = [
5096        "utils/mlgo-utils/mlgo/__init__.py",
5097        "utils/mlgo-utils/mlgo/corpus/extract_ir.py",
5098        "utils/mlgo-utils/mlgo/corpus/extract_ir_lib.py",
5099    ],
5100    imports = ["utils/mlgo-utils"],
5101)
5102
5103py_binary(
5104    name = "combine_training_corpus",
5105    srcs = [
5106        "utils/mlgo-utils/mlgo/__init__.py",
5107        "utils/mlgo-utils/mlgo/corpus/combine_training_corpus.py",
5108        "utils/mlgo-utils/mlgo/corpus/combine_training_corpus_lib.py",
5109    ],
5110    imports = ["utils/mlgo-utils"],
5111)
5112
5113py_binary(
5114    name = "make_corpus",
5115    srcs = [
5116        "utils/mlgo-utils/mlgo/__init__.py",
5117        "utils/mlgo-utils/mlgo/corpus/make_corpus.py",
5118        "utils/mlgo-utils/mlgo/corpus/make_corpus_lib.py",
5119    ],
5120    imports = ["utils/mlgo-utils"],
5121)
5122
5123cc_library(
5124    name = "TestingADT",
5125    testonly = True,
5126    hdrs = glob([
5127        "include/llvm/Testing/ADT/*.h",
5128    ]),
5129    copts = llvm_copts,
5130    deps = [
5131        ":Support",
5132        "//third-party/unittest:gmock",
5133    ],
5134)
5135
5136cc_library(
5137    name = "TestingSupport",
5138    testonly = True,
5139    srcs = glob([
5140        "lib/Testing/Support/*.cpp",
5141    ]),
5142    hdrs = glob(["include/llvm/Testing/Support/*.h"]),
5143    copts = llvm_copts,
5144    deps = [
5145        ":Support",
5146        ":config",
5147        "//third-party/unittest:gmock",
5148        "//third-party/unittest:gtest",
5149    ],
5150)
5151
5152cc_library(
5153    name = "TestingAnnotations",
5154    testonly = True,
5155    srcs = ["lib/Testing/Annotations/Annotations.cpp"],
5156    hdrs = ["include/llvm/Testing/Annotations/Annotations.h"],
5157    copts = llvm_copts,
5158    deps = [":Support"],
5159)
5160
5161################################################################################
5162# Begin testonly binary utilities
5163
5164cc_binary(
5165    name = "FileCheck",
5166    testonly = True,
5167    srcs = glob([
5168        "utils/FileCheck/*.cpp",
5169    ]),
5170    copts = llvm_copts,
5171    stamp = 0,
5172    deps = [
5173        ":FileCheckLib",
5174        ":Support",
5175    ],
5176)
5177
5178cc_binary(
5179    name = "bugpoint",
5180    srcs = glob([
5181        "tools/bugpoint/*.cpp",
5182        "tools/bugpoint/*.h",
5183    ]),
5184    copts = llvm_copts,
5185    stamp = 0,
5186    deps = [
5187        ":AllTargetsAsmParsers",
5188        ":AllTargetsCodeGens",
5189        ":Analysis",
5190        ":AsmParser",
5191        ":BitReader",
5192        ":BitWriter",
5193        ":CodeGen",
5194        ":Core",
5195        ":IPO",
5196        ":IRPrinter",
5197        ":IRReader",
5198        ":Linker",
5199        ":Passes",
5200        ":Scalar",
5201        ":Support",
5202        ":TargetParser",
5203        ":TransformUtils",
5204        ":common_transforms",
5205        ":config",
5206    ],
5207)
5208
5209cc_binary(
5210    name = "count",
5211    testonly = True,
5212    srcs = glob([
5213        "utils/count/*.c",
5214    ]),
5215    stamp = 0,
5216    deps = [":Support"],
5217)
5218
5219cc_binary(
5220    name = "lli-child-target",
5221    testonly = True,
5222    srcs = glob([
5223        "tools/lli/ChildTarget/*.cpp",
5224    ]),
5225    copts = llvm_copts,
5226    # The tests load code into this binary that expect to see symbols
5227    # from libstdc++ such as __cxa_begin_catch and _ZTIi. The latter
5228    # isn't even used in the main binary, so we also need to force it
5229    # to be included.
5230    linkopts = select({
5231        "@platforms//os:windows": [],
5232        "@platforms//os:macos": [],
5233        "//conditions:default": [
5234            "-rdynamic",
5235            "-u_ZTIi",
5236        ],
5237    }),
5238    stamp = 0,
5239    deps = [
5240        ":OrcJIT",
5241        ":OrcTargetProcess",
5242        ":Support",
5243        ":attributes_gen",
5244        ":config",
5245        ":intrinsic_enums_gen",
5246    ],
5247)
5248
5249cc_binary(
5250    name = "llvm-c-test",
5251    testonly = True,
5252    srcs = glob([
5253        "tools/llvm-c-test/*.c",
5254        "tools/llvm-c-test/*.cpp",
5255        "tools/llvm-c-test/*.h",
5256    ]),
5257    stamp = 0,
5258    deps = [
5259        ":AllTargetsAsmParsers",
5260        ":AllTargetsCodeGens",
5261        ":AllTargetsDisassemblers",
5262        ":Analysis",
5263        ":BitReader",
5264        ":BitWriter",
5265        ":Core",
5266        ":ExecutionEngine",
5267        ":IPO",
5268        ":IRReader",
5269        ":InstCombine",
5270        ":LTO",
5271        ":Linker",
5272        ":MCDisassembler",
5273        ":Object",
5274        ":OrcJIT",
5275        ":Passes",
5276        ":Remarks",
5277        ":Scalar",
5278        ":Support",
5279        ":Target",
5280        ":TransformUtils",
5281        ":Vectorize",
5282    ],
5283)
5284
5285cc_binary(
5286    name = "llvm-diff",
5287    testonly = True,
5288    srcs = glob([
5289        "tools/llvm-diff/*.cpp",
5290    ]),
5291    copts = llvm_copts,
5292    stamp = 0,
5293    deps = [
5294        ":Core",
5295        ":Diff",
5296        ":IRPrinter",
5297        ":IRReader",
5298        ":Support",
5299    ],
5300)
5301
5302cc_binary(
5303    name = "llvm-isel-fuzzer",
5304    testonly = True,
5305    srcs = glob([
5306        "tools/llvm-isel-fuzzer/*.cpp",
5307    ]),
5308    copts = llvm_copts,
5309    stamp = 0,
5310    deps = [
5311        ":AllTargetsAsmParsers",
5312        ":AllTargetsCodeGens",
5313        ":Analysis",
5314        ":BitReader",
5315        ":BitWriter",
5316        ":CodeGen",
5317        ":Core",
5318        ":FuzzMutate",
5319        ":IRPrinter",
5320        ":IRReader",
5321        ":MC",
5322        ":Support",
5323        ":Target",
5324    ],
5325)
5326
5327# This is really a Python script, but call it sh_binary to ignore the hyphen in
5328# the path, which py_binary does not allow.
5329# Also, note: llvm-locstats expects llvm-dwarfdump to be in the same directory
5330# when executed.
5331sh_binary(
5332    name = "llvm-locstats",
5333    testonly = True,
5334    srcs = glob([
5335        "utils/llvm-locstats/*.py",
5336    ]),
5337    # llvm-locstats is a thin wrapper around llvm-dwarfdump.
5338    data = [":llvm-dwarfdump"],
5339)
5340
5341sh_binary(
5342    name = "llvm-original-di-preservation",
5343    testonly = True,
5344    srcs = ["utils/llvm-original-di-preservation.py"],
5345)
5346
5347cc_binary(
5348    name = "not",
5349    testonly = True,
5350    srcs = glob([
5351        "utils/not/*.cpp",
5352    ]),
5353    copts = llvm_copts,
5354    stamp = 0,
5355    deps = [":Support"],
5356)
5357
5358cc_binary(
5359    name = "llvm-opt-fuzzer",
5360    testonly = True,
5361    srcs = glob([
5362        "tools/llvm-opt-fuzzer/*.cpp",
5363    ]),
5364    copts = llvm_copts,
5365    stamp = 0,
5366    deps = [
5367        ":AllTargetsCodeGens",
5368        ":Analysis",
5369        ":BitReader",
5370        ":BitWriter",
5371        ":CodeGen",
5372        ":Core",
5373        ":Coroutines",
5374        ":FuzzMutate",
5375        ":MC",
5376        ":Passes",
5377        ":Support",
5378        ":Target",
5379    ],
5380)
5381
5382gentbl(
5383    name = "ReadTAPIOptsTableGen",
5384    strip_include_prefix = "tools/llvm-readtapi",
5385    tbl_outs = [(
5386        "-gen-opt-parser-defs",
5387        "tools/llvm-readtapi/TapiOpts.inc",
5388    )],
5389    tblgen = ":llvm-tblgen",
5390    td_file = "tools/llvm-readtapi/TapiOpts.td",
5391    td_srcs = ["include/llvm/Option/OptParser.td"],
5392)
5393
5394cc_binary(
5395    name = "llvm-readtapi",
5396    testonly = True,
5397    srcs = glob([
5398        "tools/llvm-readtapi/*.cpp",
5399        "tools/llvm-readtapi/*.h",
5400    ]),
5401    copts = llvm_copts,
5402    stamp = 0,
5403    deps = [
5404        ":BinaryFormat",
5405        ":Object",
5406        ":Option",
5407        ":ReadTAPIOptsTableGen",
5408        ":Support",
5409        ":TextAPI",
5410        ":TextAPIBinaryReader",
5411    ],
5412)
5413
5414gentbl(
5415    name = "TLICheckerOptsTableGen",
5416    strip_include_prefix = "tools/llvm-tli-checker",
5417    tbl_outs = [(
5418        "-gen-opt-parser-defs",
5419        "tools/llvm-tli-checker/Opts.inc",
5420    )],
5421    tblgen = ":llvm-tblgen",
5422    td_file = "tools/llvm-tli-checker/Opts.td",
5423    td_srcs = ["include/llvm/Option/OptParser.td"],
5424)
5425
5426cc_binary(
5427    name = "llvm-tli-checker",
5428    testonly = True,
5429    srcs = glob([
5430        "tools/llvm-tli-checker/*.cpp",
5431    ]),
5432    copts = llvm_copts,
5433    stamp = 0,
5434    deps = [
5435        ":Analysis",
5436        ":BinaryFormat",
5437        ":BitReader",
5438        ":BitstreamReader",
5439        ":Core",
5440        ":Demangle",
5441        ":MC",
5442        ":MCParser",
5443        ":Object",
5444        ":Option",
5445        ":Remarks",
5446        ":Support",
5447        ":TLICheckerOptsTableGen",
5448        ":TargetParser",
5449        ":TextAPI",
5450        ":config",
5451    ],
5452)
5453
5454cc_binary(
5455    name = "obj2yaml",
5456    testonly = True,
5457    srcs = glob([
5458        "tools/obj2yaml/*.cpp",
5459        "tools/obj2yaml/*.h",
5460    ]),
5461    copts = llvm_copts,
5462    stamp = 0,
5463    deps = [
5464        ":BinaryFormat",
5465        ":DebugInfoCodeView",
5466        ":DebugInfoDWARF",
5467        ":Object",
5468        ":ObjectYAML",
5469        ":Support",
5470    ],
5471)
5472
5473cc_binary(
5474    name = "verify-uselistorder",
5475    srcs = glob([
5476        "tools/verify-uselistorder/*.cpp",
5477    ]),
5478    copts = llvm_copts,
5479    stamp = 0,
5480    deps = [
5481        ":AsmParser",
5482        ":BitReader",
5483        ":BitWriter",
5484        ":Core",
5485        ":IRPrinter",
5486        ":IRReader",
5487        ":Support",
5488    ],
5489)
5490
5491cc_binary(
5492    name = "yaml2obj",
5493    testonly = True,
5494    srcs = glob([
5495        "tools/yaml2obj/*.cpp",
5496    ]),
5497    copts = llvm_copts,
5498    stamp = 0,
5499    deps = [
5500        ":BinaryFormat",
5501        ":DebugInfoCodeView",
5502        ":MC",
5503        ":Object",
5504        ":ObjectYAML",
5505        ":Support",
5506    ],
5507)
5508
5509cc_binary(
5510    name = "yaml-bench",
5511    testonly = True,
5512    srcs = glob([
5513        "utils/yaml-bench/*.cpp",
5514    ]),
5515    copts = llvm_copts,
5516    stamp = 0,
5517    deps = [
5518        ":Support",
5519    ],
5520)
5521