xref: /llvm-project/utils/bazel/llvm-project-overlay/clang/BUILD.bazel (revision 267e293510ad0e273443bc1b6c3655f6307e3992)
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("@rules_python//python:defs.bzl", "py_binary")
6load(
7    "//:vars.bzl",
8    "LLVM_VERSION_MAJOR",
9    "LLVM_VERSION_MINOR",
10    "LLVM_VERSION_PATCH",
11    "PACKAGE_VERSION",
12)
13load("//:workspace_root.bzl", "workspace_root")
14load("//llvm:binary_alias.bzl", "binary_alias")
15load("//llvm:cc_plugin_library.bzl", "cc_plugin_library")
16load("//llvm:driver.bzl", "llvm_driver_cc_binary")
17load("//llvm:tblgen.bzl", "gentbl")
18
19package(
20    default_visibility = ["//visibility:public"],
21    features = ["layering_check"],
22)
23
24licenses(["notice"])
25
26cc_binary(
27    name = "clang-tblgen",
28    srcs = glob([
29        "utils/TableGen/*.cpp",
30        "utils/TableGen/*.h",
31    ]),
32    copts = [
33        "$(STACK_FRAME_UNLIMITED)",
34    ],
35    stamp = 0,
36    deps = [
37        ":support",
38        "//llvm:Support",
39        "//llvm:TableGen",
40        "//llvm:config",
41    ],
42)
43
44gentbl(
45    name = "diagnostic_defs_gen",
46    tbl_outs = [out for c in [
47        "AST",
48        "Analysis",
49        "Comment",
50        "Common",
51        "CrossTU",
52        "Driver",
53        "Frontend",
54        "InstallAPI",
55        "Lex",
56        "Parse",
57        "Refactoring",
58        "Sema",
59        "Serialization",
60    ] for out in [
61        (
62            "-gen-clang-diags-defs -clang-component=%s" % c,
63            "include/clang/Basic/Diagnostic%sKinds.inc" % c,
64        ),
65        (
66            "-gen-clang-diags-enums -clang-component=%s" % c,
67            "include/clang/Basic/Diagnostic%sEnums.inc" % c,
68        ),
69    ]] + [
70        (
71            "-gen-clang-diag-groups",
72            "include/clang/Basic/DiagnosticGroups.inc",
73        ),
74        (
75            "-gen-clang-diags-index-name",
76            "include/clang/Basic/DiagnosticIndexName.inc",
77        ),
78    ],
79    tblgen = ":clang-tblgen",
80    td_file = "include/clang/Basic/Diagnostic.td",
81    td_srcs = glob(["include/clang/Basic/*.td"]),
82)
83
84gentbl(
85    name = "basic_arm_neon_inc_gen",
86    tbl_outs = [(
87        "-gen-arm-neon-sema",
88        "include/clang/Basic/arm_neon.inc",
89    )],
90    tblgen = ":clang-tblgen",
91    td_file = "include/clang/Basic/arm_neon.td",
92    td_srcs = [
93        "include/clang/Basic/arm_immcheck_incl.td",
94        "include/clang/Basic/arm_neon.td",
95        "include/clang/Basic/arm_neon_incl.td",
96    ],
97)
98
99gentbl(
100    name = "basic_arm_fp16_inc_gen",
101    tbl_outs = [(
102        "-gen-arm-neon-sema",
103        "include/clang/Basic/arm_fp16.inc",
104    )],
105    tblgen = ":clang-tblgen",
106    td_file = "include/clang/Basic/arm_fp16.td",
107    td_srcs = [
108        "include/clang/Basic/arm_fp16.td",
109        "include/clang/Basic/arm_immcheck_incl.td",
110        "include/clang/Basic/arm_neon_incl.td",
111    ],
112)
113
114gentbl(
115    name = "basic_arm_mve_aliases_gen",
116    tbl_outs = [(
117        "-gen-arm-mve-builtin-aliases",
118        "include/clang/Basic/arm_mve_builtin_aliases.inc",
119    )],
120    tblgen = ":clang-tblgen",
121    td_file = "include/clang/Basic/arm_mve.td",
122    td_srcs = [
123        "include/clang/Basic/arm_immcheck_incl.td",
124        "include/clang/Basic/arm_mve.td",
125        "include/clang/Basic/arm_mve_defs.td",
126    ],
127)
128
129gentbl(
130    name = "basic_arm_sve_builtins_gen",
131    tbl_outs = [(
132        "-gen-arm-sve-builtins",
133        "include/clang/Basic/arm_sve_builtins.inc",
134    )],
135    tblgen = ":clang-tblgen",
136    td_file = "include/clang/Basic/arm_sve.td",
137    td_srcs = [
138        "include/clang/Basic/arm_immcheck_incl.td",
139        "include/clang/Basic/arm_sve.td",
140        "include/clang/Basic/arm_sve_sme_incl.td",
141    ],
142)
143
144gentbl(
145    name = "basic_arm_sve_builtin_cg_gen",
146    tbl_outs = [(
147        "-gen-arm-sve-builtin-codegen",
148        "include/clang/Basic/arm_sve_builtin_cg.inc",
149    )],
150    tblgen = ":clang-tblgen",
151    td_file = "include/clang/Basic/arm_sve.td",
152    td_srcs = [
153        "include/clang/Basic/arm_immcheck_incl.td",
154        "include/clang/Basic/arm_sve.td",
155        "include/clang/Basic/arm_sve_sme_incl.td",
156    ],
157)
158
159gentbl(
160    name = "basic_arm_sve_immcheck_types_gen",
161    tbl_outs = [(
162        "-gen-arm-immcheck-types",
163        "include/clang/Basic/arm_immcheck_types.inc",
164    )],
165    tblgen = ":clang-tblgen",
166    td_file = "include/clang/Basic/arm_sve.td",
167    td_srcs = [
168        "include/clang/Basic/arm_immcheck_incl.td",
169        "include/clang/Basic/arm_sve.td",
170        "include/clang/Basic/arm_sve_sme_incl.td",
171    ],
172)
173
174gentbl(
175    name = "basic_arm_sve_typeflags_gen",
176    tbl_outs = [(
177        "-gen-arm-sve-typeflags",
178        "include/clang/Basic/arm_sve_typeflags.inc",
179    )],
180    tblgen = ":clang-tblgen",
181    td_file = "include/clang/Basic/arm_sve.td",
182    td_srcs = [
183        "include/clang/Basic/arm_immcheck_incl.td",
184        "include/clang/Basic/arm_sve.td",
185        "include/clang/Basic/arm_sve_sme_incl.td",
186    ],
187)
188
189gentbl(
190    name = "basic_arm_sve_sema_rangechecks_gen",
191    tbl_outs = [(
192        "-gen-arm-sve-sema-rangechecks",
193        "include/clang/Basic/arm_sve_sema_rangechecks.inc",
194    )],
195    tblgen = ":clang-tblgen",
196    td_file = "include/clang/Basic/arm_sve.td",
197    td_srcs = [
198        "include/clang/Basic/arm_immcheck_incl.td",
199        "include/clang/Basic/arm_sve.td",
200        "include/clang/Basic/arm_sve_sme_incl.td",
201    ],
202)
203
204gentbl(
205    name = "basic_arm_sve_streaming_attrs_gen",
206    tbl_outs = [(
207        "-gen-arm-sve-streaming-attrs",
208        "include/clang/Basic/arm_sve_streaming_attrs.inc",
209    )],
210    tblgen = ":clang-tblgen",
211    td_file = "include/clang/Basic/arm_sve.td",
212    td_srcs = [
213        "include/clang/Basic/arm_immcheck_incl.td",
214        "include/clang/Basic/arm_sve.td",
215        "include/clang/Basic/arm_sve_sme_incl.td",
216    ],
217)
218
219gentbl(
220    name = "basic_arm_sme_builtins_gen",
221    tbl_outs = [(
222        "-gen-arm-sme-builtins",
223        "include/clang/Basic/arm_sme_builtins.inc",
224    )],
225    tblgen = ":clang-tblgen",
226    td_file = "include/clang/Basic/arm_sme.td",
227    td_srcs = [
228        "include/clang/Basic/arm_immcheck_incl.td",
229        "include/clang/Basic/arm_sme.td",
230        "include/clang/Basic/arm_sve_sme_incl.td",
231    ],
232)
233
234gentbl(
235    name = "basic_arm_sme_builtin_cg_gen",
236    tbl_outs = [(
237        "-gen-arm-sme-builtin-codegen",
238        "include/clang/Basic/arm_sme_builtin_cg.inc",
239    )],
240    tblgen = ":clang-tblgen",
241    td_file = "include/clang/Basic/arm_sme.td",
242    td_srcs = [
243        "include/clang/Basic/arm_sme.td",
244        "include/clang/Basic/arm_sve_sme_incl.td",
245        "include/clang/Basic/arm_immcheck_incl.td",
246    ],
247)
248
249gentbl(
250    name = "basic_arm_sme_builtins_za_state_gen",
251    tbl_outs = [(
252        "-gen-arm-sme-builtin-za-state",
253        "include/clang/Basic/arm_sme_builtins_za_state.inc",
254    )],
255    tblgen = ":clang-tblgen",
256    td_file = "include/clang/Basic/arm_sme.td",
257    td_srcs = [
258        "include/clang/Basic/arm_immcheck_incl.td",
259        "include/clang/Basic/arm_sme.td",
260        "include/clang/Basic/arm_sve_sme_incl.td",
261    ],
262)
263
264gentbl(
265    name = "basic_arm_sme_sema_rangechecks_gen",
266    tbl_outs = [(
267        "-gen-arm-sme-sema-rangechecks",
268        "include/clang/Basic/arm_sme_sema_rangechecks.inc",
269    )],
270    tblgen = ":clang-tblgen",
271    td_file = "include/clang/Basic/arm_sme.td",
272    td_srcs = [
273        "include/clang/Basic/arm_immcheck_incl.td",
274        "include/clang/Basic/arm_sme.td",
275        "include/clang/Basic/arm_sve_sme_incl.td",
276    ],
277)
278
279gentbl(
280    name = "basic_arm_sme_streaming_attrs_gen",
281    tbl_outs = [(
282        "-gen-arm-sme-streaming-attrs",
283        "include/clang/Basic/arm_sme_streaming_attrs.inc",
284    )],
285    tblgen = ":clang-tblgen",
286    td_file = "include/clang/Basic/arm_sme.td",
287    td_srcs = [
288        "include/clang/Basic/arm_immcheck_incl.td",
289        "include/clang/Basic/arm_sme.td",
290        "include/clang/Basic/arm_sve_sme_incl.td",
291    ],
292)
293
294gentbl(
295    name = "basic_arm_mve_cg_gen",
296    tbl_outs = [(
297        "-gen-arm-mve-builtin-codegen",
298        "include/clang/Basic/arm_mve_builtin_cg.inc",
299    )],
300    tblgen = ":clang-tblgen",
301    td_file = "include/clang/Basic/arm_mve.td",
302    td_srcs = [
303        "include/clang/Basic/arm_mve.td",
304        "include/clang/Basic/arm_mve_defs.td",
305    ],
306)
307
308gentbl(
309    name = "basic_arm_mve_inc_gen",
310    tbl_outs = [(
311        "-gen-arm-mve-builtin-def",
312        "include/clang/Basic/arm_mve_builtins.inc",
313    )],
314    tblgen = ":clang-tblgen",
315    td_file = "include/clang/Basic/arm_mve.td",
316    td_srcs = [
317        "include/clang/Basic/arm_mve.td",
318        "include/clang/Basic/arm_mve_defs.td",
319    ],
320)
321
322gentbl(
323    name = "basic_arm_mve_sema_gen",
324    tbl_outs = [(
325        "-gen-arm-mve-builtin-sema",
326        "include/clang/Basic/arm_mve_builtin_sema.inc",
327    )],
328    tblgen = ":clang-tblgen",
329    td_file = "include/clang/Basic/arm_mve.td",
330    td_srcs = [
331        "include/clang/Basic/arm_mve.td",
332        "include/clang/Basic/arm_mve_defs.td",
333    ],
334)
335
336gentbl(
337    name = "basic_builtins_bpf_gen",
338    tbl_outs = [(
339        "-gen-clang-builtins",
340        "include/clang/Basic/BuiltinsBPF.inc",
341    )],
342    tblgen = ":clang-tblgen",
343    td_file = "include/clang/Basic/BuiltinsBPF.td",
344    td_srcs = [
345        "include/clang/Basic/BuiltinsBPF.td",
346        "include/clang/Basic/BuiltinsBase.td",
347    ],
348)
349
350gentbl(
351    name = "basic_builtins_hexagon_gen",
352    tbl_outs = [(
353        "-gen-clang-builtins",
354        "include/clang/Basic/BuiltinsHexagon.inc",
355    )],
356    tblgen = ":clang-tblgen",
357    td_file = "include/clang/Basic/BuiltinsHexagon.td",
358    td_srcs = [
359        "include/clang/Basic/BuiltinsHexagon.td",
360        "include/clang/Basic/BuiltinsBase.td",
361    ],
362)
363
364gentbl(
365    name = "basic_builtins_nvptx_gen",
366    tbl_outs = [(
367        "-gen-clang-builtins",
368        "include/clang/Basic/BuiltinsNVPTX.inc",
369    )],
370    tblgen = ":clang-tblgen",
371    td_file = "include/clang/Basic/BuiltinsNVPTX.td",
372    td_srcs = [
373        "include/clang/Basic/BuiltinsNVPTX.td",
374        "include/clang/Basic/BuiltinsBase.td",
375    ],
376)
377
378gentbl(
379    name = "basic_builtins_spirv_gen",
380    tbl_outs = [(
381        "-gen-clang-builtins",
382        "include/clang/Basic/BuiltinsSPIRV.inc",
383    )],
384    tblgen = ":clang-tblgen",
385    td_file = "include/clang/Basic/BuiltinsSPIRV.td",
386    td_srcs = [
387        "include/clang/Basic/Builtins.td",
388        "include/clang/Basic/BuiltinsBase.td",
389        "include/clang/Basic/BuiltinsSPIRV.td",
390    ],
391)
392
393gentbl(
394    name = "basic_builtins_riscv_gen",
395    tbl_outs = [(
396        "-gen-clang-builtins",
397        "include/clang/Basic/BuiltinsRISCV.inc",
398    )],
399    tblgen = ":clang-tblgen",
400    td_file = "include/clang/Basic/BuiltinsRISCV.td",
401    td_srcs = [
402        "include/clang/Basic/BuiltinsRISCV.td",
403        "include/clang/Basic/BuiltinsRISCVXCV.td",
404        "include/clang/Basic/BuiltinsBase.td",
405    ],
406)
407
408gentbl(
409    name = "basic_builtins_x86_gen",
410    tbl_outs = [(
411        "-gen-clang-builtins",
412        "include/clang/Basic/BuiltinsX86.inc",
413    )],
414    tblgen = ":clang-tblgen",
415    td_file = "include/clang/Basic/BuiltinsX86.td",
416    td_srcs = [
417        "include/clang/Basic/BuiltinsX86.td",
418        "include/clang/Basic/BuiltinsX86Base.td",
419        "include/clang/Basic/BuiltinsBase.td",
420    ],
421)
422
423gentbl(
424    name = "basic_builtins_x86_64_gen",
425    tbl_outs = [(
426        "-gen-clang-builtins",
427        "include/clang/Basic/BuiltinsX86_64.inc",
428    )],
429    tblgen = ":clang-tblgen",
430    td_file = "include/clang/Basic/BuiltinsX86_64.td",
431    td_srcs = [
432        "include/clang/Basic/BuiltinsX86_64.td",
433        "include/clang/Basic/BuiltinsX86Base.td",
434        "include/clang/Basic/BuiltinsBase.td",
435    ],
436)
437
438gentbl(
439    name = "basic_builtins_gen",
440    tbl_outs = [(
441        "-gen-clang-builtins",
442        "include/clang/Basic/Builtins.inc",
443    )],
444    tblgen = ":clang-tblgen",
445    td_file = "include/clang/Basic/Builtins.td",
446    td_srcs = [
447        "include/clang/Basic/Builtins.td",
448        "include/clang/Basic/BuiltinsBase.td",
449    ],
450)
451
452gentbl(
453    name = "basic_riscv_vector_builtins_gen",
454    tbl_outs = [(
455        "-gen-riscv-vector-builtins",
456        "include/clang/Basic/riscv_vector_builtins.inc",
457    )],
458    tblgen = ":clang-tblgen",
459    td_file = "include/clang/Basic/riscv_vector.td",
460    td_srcs = [
461        "include/clang/Basic/riscv_vector.td",
462        "include/clang/Basic/riscv_vector_common.td",
463    ],
464)
465
466gentbl(
467    name = "basic_riscv_vector_builtin_cg_gen",
468    tbl_outs = [(
469        "-gen-riscv-vector-builtin-codegen",
470        "include/clang/Basic/riscv_vector_builtin_cg.inc",
471    )],
472    tblgen = ":clang-tblgen",
473    td_file = "include/clang/Basic/riscv_vector.td",
474    td_srcs = [
475        "include/clang/Basic/riscv_vector.td",
476        "include/clang/Basic/riscv_vector_common.td",
477    ],
478)
479
480gentbl(
481    name = "basic_riscv_vector_builtin_sema_gen",
482    tbl_outs = [(
483        "-gen-riscv-vector-builtin-sema",
484        "include/clang/Basic/riscv_vector_builtin_sema.inc",
485    )],
486    tblgen = ":clang-tblgen",
487    td_file = "include/clang/Basic/riscv_vector.td",
488    td_srcs = [
489        "include/clang/Basic/riscv_vector.td",
490        "include/clang/Basic/riscv_vector_common.td",
491    ],
492)
493
494gentbl(
495    name = "basic_riscv_sifive_vector_builtins_gen",
496    tbl_outs = [(
497        "-gen-riscv-sifive-vector-builtins",
498        "include/clang/Basic/riscv_sifive_vector_builtins.inc",
499    )],
500    tblgen = ":clang-tblgen",
501    td_file = "include/clang/Basic/riscv_sifive_vector.td",
502    td_srcs = [
503        "include/clang/Basic/riscv_sifive_vector.td",
504        "include/clang/Basic/riscv_vector_common.td",
505    ],
506)
507
508gentbl(
509    name = "basic_riscv_sifive_vector_builtin_cg_gen",
510    tbl_outs = [(
511        "-gen-riscv-sifive-vector-builtin-codegen",
512        "include/clang/Basic/riscv_sifive_vector_builtin_cg.inc",
513    )],
514    tblgen = ":clang-tblgen",
515    td_file = "include/clang/Basic/riscv_sifive_vector.td",
516    td_srcs = [
517        "include/clang/Basic/riscv_sifive_vector.td",
518        "include/clang/Basic/riscv_vector_common.td",
519    ],
520)
521
522gentbl(
523    name = "basic_riscv_sifive_vector_builtin_sema_gen",
524    tbl_outs = [(
525        "-gen-riscv-sifive-vector-builtin-sema",
526        "include/clang/Basic/riscv_sifive_vector_builtin_sema.inc",
527    )],
528    tblgen = ":clang-tblgen",
529    td_file = "include/clang/Basic/riscv_sifive_vector.td",
530    td_srcs = [
531        "include/clang/Basic/riscv_sifive_vector.td",
532        "include/clang/Basic/riscv_vector_common.td",
533    ],
534)
535
536gentbl(
537    name = "basic_arm_cde_gen",
538    tbl_outs = [(
539        "-gen-arm-cde-builtin-def",
540        "include/clang/Basic/arm_cde_builtins.inc",
541    )],
542    tblgen = ":clang-tblgen",
543    td_file = "include/clang/Basic/arm_cde.td",
544    td_srcs = [
545        "include/clang/Basic/arm_cde.td",
546        "include/clang/Basic/arm_mve_defs.td",
547    ],
548)
549
550gentbl(
551    name = "basic_arm_cde_aliases_gen",
552    tbl_outs = [(
553        "-gen-arm-cde-builtin-aliases",
554        "include/clang/Basic/arm_cde_builtin_aliases.inc",
555    )],
556    tblgen = ":clang-tblgen",
557    td_file = "include/clang/Basic/arm_cde.td",
558    td_srcs = [
559        "include/clang/Basic/arm_cde.td",
560        "include/clang/Basic/arm_mve_defs.td",
561    ],
562)
563
564gentbl(
565    name = "basic_arm_cde_cg_gen",
566    tbl_outs = [(
567        "-gen-arm-cde-builtin-codegen",
568        "include/clang/Basic/arm_cde_builtin_cg.inc",
569    )],
570    tblgen = ":clang-tblgen",
571    td_file = "include/clang/Basic/arm_cde.td",
572    td_srcs = [
573        "include/clang/Basic/arm_cde.td",
574        "include/clang/Basic/arm_mve_defs.td",
575    ],
576)
577
578gentbl(
579    name = "basic_arm_cde_sema_gen",
580    tbl_outs = [(
581        "-gen-arm-cde-builtin-sema",
582        "include/clang/Basic/arm_cde_builtin_sema.inc",
583    )],
584    tblgen = ":clang-tblgen",
585    td_file = "include/clang/Basic/arm_cde.td",
586    td_srcs = [
587        "include/clang/Basic/arm_cde.td",
588        "include/clang/Basic/arm_mve_defs.td",
589    ],
590)
591
592gentbl(
593    name = "basic_attr_gen",
594    tbl_outs = [
595        (
596            "-gen-clang-attr-has-attribute-impl",
597            "include/clang/Basic/AttrHasAttributeImpl.inc",
598        ),
599        (
600            "-gen-clang-attr-list",
601            "include/clang/Basic/AttrList.inc",
602        ),
603        (
604            "-gen-clang-attr-parsed-attr-list",
605            "include/clang/Basic/AttrParsedAttrList.inc",
606        ),
607        (
608            "-gen-clang-attr-subject-match-rule-list",
609            "include/clang/Basic/AttrSubMatchRulesList.inc",
610        ),
611        (
612            "-gen-clang-regular-keyword-attr-info",
613            "include/clang/Basic/RegularKeywordAttrInfo.inc",
614        ),
615        (
616            "-gen-cxx11-attribute-info",
617            "include/clang/Basic/CXX11AttributeInfo.inc",
618        ),
619    ],
620    tblgen = ":clang-tblgen",
621    td_file = "include/clang/Basic/Attr.td",
622    td_srcs = [
623        "include/clang/Basic/ASTNode.td",
624        "include/clang/Basic/Attr.td",
625        "include/clang/Basic/AttrDocs.td",
626        "include/clang/Basic/DeclNodes.td",
627        "include/clang/Basic/StmtNodes.td",
628    ],
629)
630
631gentbl(
632    name = "libsema_openclbuiltins_inc_gen",
633    strip_include_prefix = "lib/Sema",
634    tbl_outs = [(
635        "-gen-clang-opencl-builtins",
636        "lib/Sema/OpenCLBuiltins.inc",
637    )],
638    tblgen = ":clang-tblgen",
639    td_file = "lib/Sema/OpenCLBuiltins.td",
640    td_srcs = [
641        "lib/Sema/OpenCLBuiltins.td",
642    ],
643)
644
645# Table definition files can be used for documentation:
646filegroup(
647    name = "all_table_defs",
648    srcs = glob(["include/**/*.td"]),
649)
650
651exports_files(
652    glob(["include/**/*.td"]),
653)
654
655genrule(
656    name = "basic_version_gen",
657    outs = ["include/clang/Basic/Version.inc"],
658    cmd = (
659        "echo '#define CLANG_VERSION {vers}' >> $@\n" +
660        "echo '#define CLANG_VERSION_MAJOR {major}' >> $@\n" +
661        "echo '#define CLANG_VERSION_MAJOR_STRING \"{major}\"' >> $@\n" +
662        "echo '#define CLANG_VERSION_MINOR {minor}' >> $@\n" +
663        "echo '#define CLANG_VERSION_PATCHLEVEL {patch}' >> $@\n" +
664        "echo '#define MAX_CLANG_ABI_COMPAT_VERSION {major}' >> $@\n" +
665        "echo '#define CLANG_VERSION_STRING \"{vers}\"' >> $@\n"
666    ).format(
667        major = LLVM_VERSION_MAJOR,
668        minor = LLVM_VERSION_MINOR,
669        patch = LLVM_VERSION_PATCH,
670        vers = PACKAGE_VERSION,
671    ),
672)
673
674cc_library(
675    name = "config",
676    hdrs = [
677        "include/clang/Basic/Version.inc",
678        "include/clang/Config/config.h",
679    ],
680    includes = ["include"],
681    deps = [
682        # We rely on the LLVM config library to provide configuration defines.
683        "//llvm:config",
684    ],
685)
686
687# TODO: This should get replaced with something that actually generates the
688# correct version number.
689genrule(
690    name = "vcs_version_gen",
691    # This should be under lib/Basic, but because of how the include paths
692    # are passed through bazel, it's easier to drop generated files next to
693    # the other includes.
694    outs = ["include/VCSVersion.inc"],
695    cmd = "echo '#undef CLANG_REVISION' > $@",
696)
697
698py_binary(
699    name = "bundle_resources",
700    srcs = [
701        "utils/bundle_resources.py",
702    ],
703    main = "utils/bundle_resources.py",
704)
705
706cc_library(
707    name = "basic",
708    srcs = [
709        "include/VCSVersion.inc",
710        "include/clang/Basic/Version.inc",
711    ] + glob([
712        "lib/Basic/*.cpp",
713        "lib/Basic/*.h",
714        "lib/Basic/Targets/*.cpp",
715        "lib/Basic/Targets/*.h",
716    ]),
717    hdrs = glob([
718        "include/clang/Basic/*.h",
719    ]),
720    copts = [
721        "-DHAVE_VCS_VERSION_INC",
722        "$(STACK_FRAME_UNLIMITED)",
723        "-I$(WORKSPACE_ROOT)/clang/lib/Basic",
724    ],
725    includes = ["include"],
726    textual_hdrs = [
727        # keep sorted
728        "include/clang/Basic/AllDiagnosticKinds.inc",
729        "include/clang/Basic/AttrHasAttributeImpl.inc",
730        "include/clang/Basic/AttrList.inc",
731        "include/clang/Basic/AttrSubMatchRulesList.inc",
732        "include/clang/Basic/DiagnosticASTKinds.inc",
733        "include/clang/Basic/DiagnosticAnalysisKinds.inc",
734        "include/clang/Basic/DiagnosticCommentKinds.inc",
735        "include/clang/Basic/DiagnosticCommonKinds.inc",
736        "include/clang/Basic/DiagnosticCrossTUKinds.inc",
737        "include/clang/Basic/DiagnosticDriverKinds.inc",
738        "include/clang/Basic/DiagnosticFrontendKinds.inc",
739        "include/clang/Basic/DiagnosticGroups.inc",
740        "include/clang/Basic/DiagnosticIndexName.inc",
741        "include/clang/Basic/DiagnosticInstallAPIKinds.inc",
742        "include/clang/Basic/DiagnosticLexKinds.inc",
743        "include/clang/Basic/DiagnosticParseKinds.inc",
744        "include/clang/Basic/DiagnosticRefactoringKinds.inc",
745        "include/clang/Basic/DiagnosticSemaKinds.inc",
746        "include/clang/Basic/DiagnosticSerializationKinds.inc",
747        "include/clang/Basic/arm_fp16.inc",
748        "include/clang/Basic/arm_immcheck_types.inc",
749        "include/clang/Basic/arm_mve_builtin_aliases.inc",
750        "include/clang/Basic/arm_mve_builtin_cg.inc",
751        "include/clang/Basic/arm_mve_builtin_sema.inc",
752        "include/clang/Basic/arm_mve_builtins.inc",
753        "include/clang/Basic/arm_neon.inc",
754        "include/clang/Basic/arm_sme_builtin_cg.inc",
755        "include/clang/Basic/arm_sme_builtins.inc",
756    ] + glob([
757        "include/clang/Basic/*.def",
758    ]),
759    toolchains = [":workspace_root"],
760    deps = [
761        ":basic_arm_cde_gen",
762        ":basic_arm_fp16_inc_gen",
763        ":basic_arm_mve_aliases_gen",
764        ":basic_arm_mve_cg_gen",
765        ":basic_arm_mve_inc_gen",
766        ":basic_arm_mve_sema_gen",
767        ":basic_arm_neon_inc_gen",
768        ":basic_arm_sme_builtin_cg_gen",
769        ":basic_arm_sme_builtins_gen",
770        ":basic_arm_sve_builtins_gen",
771        ":basic_arm_sve_typeflags_gen",
772        ":basic_attr_gen",
773        ":basic_builtins_bpf_gen",
774        ":basic_builtins_gen",
775        ":basic_builtins_hexagon_gen",
776        ":basic_builtins_nvptx_gen",
777        ":basic_builtins_riscv_gen",
778        ":basic_builtins_spirv_gen",
779        ":basic_builtins_x86_64_gen",
780        ":basic_builtins_x86_gen",
781        ":basic_riscv_sifive_vector_builtins_gen",
782        ":basic_riscv_vector_builtin_cg_gen",
783        ":basic_riscv_vector_builtins_gen",
784        ":config",
785        ":diagnostic_defs_gen",
786        ":sema_attr_gen",
787        ":support",
788        "//llvm:Core",
789        "//llvm:FrontendDebug",
790        "//llvm:FrontendDriver",
791        "//llvm:FrontendOpenMP",
792        "//llvm:Instrumentation",
793        "//llvm:MC",
794        "//llvm:Support",
795        "//llvm:Target",
796        "//llvm:TargetParser",
797        "//llvm:config",
798    ],
799)
800
801cc_library(
802    name = "lex",
803    srcs = glob([
804        "lib/Lex/*.cpp",
805        "lib/Lex/*.h",
806    ]),
807    hdrs = glob([
808        "include/clang/Lex/*.h",
809    ]),
810    includes = ["include"],
811    deps = [
812        ":basic",
813        ":config",
814        ":support",
815        "//llvm:Support",
816        "//llvm:TargetParser",
817    ],
818)
819
820gentbl(
821    name = "ast_attr_gen",
822    tbl_outs = [
823        (
824            "-gen-clang-attr-ast-visitor",
825            "include/clang/AST/AttrVisitor.inc",
826        ),
827        (
828            "-gen-clang-attr-classes",
829            "include/clang/AST/Attrs.inc",
830        ),
831        (
832            "-gen-clang-attr-doc-table",
833            "lib/AST/AttrDocTable.inc",
834        ),
835        (
836            "-gen-clang-attr-text-node-dump",
837            "include/clang/AST/AttrTextNodeDump.inc",
838        ),
839        (
840            "-gen-clang-attr-node-traverse",
841            "include/clang/AST/AttrNodeTraverse.inc",
842        ),
843        (
844            "-gen-clang-attr-impl",
845            "include/clang/AST/AttrImpl.inc",
846        ),
847    ],
848    tblgen = ":clang-tblgen",
849    td_file = "include/clang/Basic/Attr.td",
850    td_srcs = [
851        "include/clang/Basic/Attr.td",
852        "include/clang/Basic/AttrDocs.td",
853        "include/clang/Basic/ASTNode.td",
854        "include/clang/Basic/DeclNodes.td",
855        "include/clang/Basic/StmtNodes.td",
856    ],
857)
858
859gentbl(
860    name = "ast_decl_nodes_gen",
861    tbl_outs = [(
862        "-gen-clang-decl-nodes",
863        "include/clang/AST/DeclNodes.inc",
864    )],
865    tblgen = ":clang-tblgen",
866    td_file = "include/clang/Basic/DeclNodes.td",
867    td_srcs = [
868        "include/clang/Basic/ASTNode.td",
869        "include/clang/Basic/DeclNodes.td",
870    ],
871)
872
873gentbl(
874    name = "ast_stmt_nodes_gen",
875    tbl_outs = [(
876        "-gen-clang-stmt-nodes",
877        "include/clang/AST/StmtNodes.inc",
878    )],
879    tblgen = ":clang-tblgen",
880    td_file = "include/clang/Basic/StmtNodes.td",
881    td_srcs = [
882        "include/clang/Basic/ASTNode.td",
883        "include/clang/Basic/StmtNodes.td",
884    ],
885)
886
887gentbl(
888    name = "ast_comment_nodes_gen",
889    tbl_outs = [(
890        "-gen-clang-comment-nodes",
891        "include/clang/AST/CommentNodes.inc",
892    )],
893    tblgen = ":clang-tblgen",
894    td_file = "include/clang/Basic/CommentNodes.td",
895    td_srcs = [
896        "include/clang/Basic/ASTNode.td",
897        "include/clang/Basic/CommentNodes.td",
898    ],
899)
900
901gentbl(
902    name = "ast_comment_command_info_gen",
903    tbl_outs = [
904        (
905            "-gen-clang-comment-command-info",
906            "include/clang/AST/CommentCommandInfo.inc",
907        ),
908        (
909            "-gen-clang-comment-command-list",
910            "include/clang/AST/CommentCommandList.inc",
911        ),
912    ],
913    tblgen = ":clang-tblgen",
914    td_file = "include/clang/AST/CommentCommands.td",
915    td_srcs = ["include/clang/AST/CommentCommands.td"],
916)
917
918gentbl(
919    name = "ast_comment_html_tags_gen",
920    tbl_outs = [(
921        "-gen-clang-comment-html-tags",
922        "include/clang/AST/CommentHTMLTags.inc",
923    )],
924    tblgen = ":clang-tblgen",
925    td_file = "include/clang/AST/CommentHTMLTags.td",
926    td_srcs = ["include/clang/AST/CommentHTMLTags.td"],
927)
928
929gentbl(
930    name = "ast_comment_html_tags_properties_gen",
931    tbl_outs = [(
932        "-gen-clang-comment-html-tags-properties",
933        "include/clang/AST/CommentHTMLTagsProperties.inc",
934    )],
935    tblgen = ":clang-tblgen",
936    td_file = "include/clang/AST/CommentHTMLTags.td",
937    td_srcs = ["include/clang/AST/CommentHTMLTags.td"],
938)
939
940gentbl(
941    name = "ast_comment_html_named_character_references_gen",
942    tbl_outs = [(
943        "-gen-clang-comment-html-named-character-references",
944        "include/clang/AST/CommentHTMLNamedCharacterReferences.inc",
945    )],
946    tblgen = ":clang-tblgen",
947    td_file = "include/clang/AST/CommentHTMLNamedCharacterReferences.td",
948    td_srcs = ["include/clang/AST/CommentHTMLNamedCharacterReferences.td"],
949)
950
951gentbl(
952    name = "ast_stmt_data_collectors_gen",
953    tbl_outs = [(
954        "-gen-clang-data-collectors",
955        "include/clang/AST/StmtDataCollectors.inc",
956    )],
957    tblgen = ":clang-tblgen",
958    td_file = "include/clang/AST/StmtDataCollectors.td",
959    td_srcs = ["include/clang/AST/StmtDataCollectors.td"],
960)
961
962gentbl(
963    name = "ast_bytecode_opcodes_gen",
964    tbl_outs = [(
965        "-gen-clang-opcodes",
966        "lib/AST/ByteCode/Opcodes.inc",
967    )],
968    tblgen = ":clang-tblgen",
969    td_file = "lib/AST/ByteCode/Opcodes.td",
970    td_srcs = ["lib/AST/ByteCode/Opcodes.td"],
971)
972
973gentbl(
974    name = "ast_properties_base_gen",
975    tbl_outs = [
976        (
977            "-gen-clang-basic-reader",
978            "include/clang/AST/AbstractBasicReader.inc",
979        ),
980        (
981            "-gen-clang-basic-writer",
982            "include/clang/AST/AbstractBasicWriter.inc",
983        ),
984    ],
985    tblgen = ":clang-tblgen",
986    td_file = "include/clang/AST/PropertiesBase.td",
987    td_srcs = ["include/clang/AST/PropertiesBase.td"],
988)
989
990gentbl(
991    name = "ast_type_properties_gen",
992    tbl_outs = [
993        (
994            "-gen-clang-type-reader",
995            "include/clang/AST/AbstractTypeReader.inc",
996        ),
997        (
998            "-gen-clang-type-writer",
999            "include/clang/AST/AbstractTypeWriter.inc",
1000        ),
1001    ],
1002    tblgen = ":clang-tblgen",
1003    td_file = "include/clang/AST/TypeProperties.td",
1004    td_srcs = [
1005        "include/clang/AST/PropertiesBase.td",
1006        "include/clang/AST/TypeProperties.td",
1007        "include/clang/Basic/ASTNode.td",
1008        "include/clang/Basic/TypeNodes.td",
1009    ],
1010)
1011
1012gentbl(
1013    name = "type_nodes_gen",
1014    tbl_outs = [(
1015        "-gen-clang-type-nodes",
1016        "include/clang/AST/TypeNodes.inc",
1017    )],
1018    tblgen = ":clang-tblgen",
1019    td_file = "include/clang/Basic/TypeNodes.td",
1020    td_srcs = [
1021        "include/clang/Basic/ASTNode.td",
1022        "include/clang/Basic/TypeNodes.td",
1023    ],
1024)
1025
1026workspace_root(name = "workspace_root")
1027
1028cc_library(
1029    name = "ast",
1030    srcs = glob([
1031        "lib/AST/*.cpp",
1032        "lib/AST/*.h",
1033        "lib/AST/ByteCode/*.cpp",
1034        "lib/AST/ByteCode/*.h",
1035    ]) + [
1036        "lib/AST/AttrDocTable.inc",
1037        "lib/AST/ByteCode/Opcodes.inc",
1038    ],
1039    hdrs = glob([
1040        "include/clang/AST/*.h",
1041    ]),
1042    copts = [
1043        # FIXME: This is necessary to allow "file relative" include paths from
1044        # non-generated `srcs` to find generated `srcs` above. Bazel should
1045        # either make this work automatically by creating a unified tree of
1046        # `srcs` or at least provide a `local_includes` that has the path
1047        # translation logic of `includes` but is only used locally (similar to
1048        # `local_defines` vs. `defines`). Until one of those lands, this is the
1049        # least bad approach. Using `includes` is *specifically* problematic for
1050        # this library because it contains files that collide easily with system
1051        # headers such as `CXXABI.h`.
1052        "-I$(GENDIR)/$(WORKSPACE_ROOT)/clang/lib/AST",
1053        "-I$(GENDIR)/$(WORKSPACE_ROOT)/clang/lib/AST/ByteCode",
1054    ],
1055    textual_hdrs = [
1056        "include/clang/AST/AttrImpl.inc",
1057        "include/clang/AST/AttrNodeTraverse.inc",
1058        "include/clang/AST/Attrs.inc",
1059        "include/clang/AST/AttrTextNodeDump.inc",
1060        "include/clang/AST/AttrVisitor.inc",
1061        "include/clang/AST/CommentCommandInfo.inc",
1062        "include/clang/AST/CommentCommandList.inc",
1063        "include/clang/AST/CommentHTMLNamedCharacterReferences.inc",
1064        "include/clang/AST/CommentHTMLTags.inc",
1065        "include/clang/AST/CommentHTMLTagsProperties.inc",
1066        "include/clang/AST/CommentNodes.inc",
1067        "include/clang/AST/DeclNodes.inc",
1068        "include/clang/AST/StmtDataCollectors.inc",
1069        "include/clang/AST/StmtNodes.inc",
1070    ] + glob([
1071        "include/clang/AST/*.def",
1072    ]),
1073    toolchains = [":workspace_root"],
1074    deps = [
1075        ":ast_attr_gen",
1076        ":ast_bytecode_opcodes_gen",
1077        ":ast_comment_command_info_gen",
1078        ":ast_comment_html_named_character_references_gen",
1079        ":ast_comment_html_tags_gen",
1080        ":ast_comment_html_tags_properties_gen",
1081        ":ast_comment_nodes_gen",
1082        ":ast_decl_nodes_gen",
1083        ":ast_properties_base_gen",
1084        ":ast_stmt_data_collectors_gen",
1085        ":ast_stmt_nodes_gen",
1086        ":ast_type_properties_gen",
1087        ":basic",
1088        ":basic_builtins_gen",
1089        ":lex",
1090        ":support",
1091        ":type_nodes_gen",
1092        "//llvm:BinaryFormat",
1093        "//llvm:Core",
1094        "//llvm:FrontendHLSL",
1095        "//llvm:FrontendOpenMP",
1096        "//llvm:Support",
1097        "//llvm:TargetParser",
1098    ],
1099)
1100
1101cc_library(
1102    name = "index",
1103    srcs = glob([
1104        "lib/Index/*.cpp",
1105        "lib/Index/*.h",
1106    ]),
1107    hdrs = glob([
1108        "include/clang/Index/*.h",
1109        "include/clang-c/*.h",
1110    ]),
1111    includes = ["include"],
1112    deps = [
1113        ":ast",
1114        ":basic",
1115        ":format",
1116        ":frontend",
1117        ":lex",
1118        ":rewrite",
1119        ":serialization",
1120        "//llvm:Core",
1121        "//llvm:Support",
1122    ],
1123)
1124
1125genrule(
1126    name = "analysis_htmllogger_gen",
1127    srcs = [
1128        "lib/Analysis/FlowSensitive/HTMLLogger.html",
1129        "lib/Analysis/FlowSensitive/HTMLLogger.css",
1130        "lib/Analysis/FlowSensitive/HTMLLogger.js",
1131    ],
1132    outs = ["lib/Analysis/FlowSensitive/HTMLLogger.inc"],
1133    cmd = "$(location :bundle_resources) $@ $(SRCS)",
1134    tools = [":bundle_resources"],
1135)
1136
1137cc_library(
1138    name = "analysis",
1139    srcs = glob([
1140        "lib/Analysis/FlowSensitive/Models/*.cpp",
1141        "lib/Analysis/FlowSensitive/*.cpp",
1142        "lib/Analysis/*.cpp",
1143    ]) + [
1144        ":analysis_htmllogger_gen",
1145    ],
1146    hdrs = glob([
1147        "include/clang/Analysis/**/*.h",
1148    ]),
1149    includes = [
1150        "include",
1151        "lib/Analysis/FlowSensitive",
1152    ],
1153    textual_hdrs = glob([
1154        "include/clang/Analysis/**/*.def",
1155    ]),
1156    deps = [
1157        ":ast",
1158        ":ast_matchers",
1159        ":basic",
1160        ":lex",
1161        ":support",
1162        "//llvm:Support",
1163    ],
1164)
1165
1166gentbl(
1167    name = "sema_attr_gen",
1168    tbl_outs = [
1169        (
1170            "-gen-clang-attr-parsed-attr-impl",
1171            "include/clang/Sema/AttrParsedAttrImpl.inc",
1172        ),
1173        (
1174            "-gen-clang-attr-parsed-attr-kinds",
1175            "include/clang/Sema/AttrParsedAttrKinds.inc",
1176        ),
1177        (
1178            "-gen-clang-attr-spelling-index",
1179            "include/clang/Sema/AttrSpellingListIndex.inc",
1180        ),
1181        (
1182            "-gen-clang-attr-template-instantiate",
1183            "include/clang/Sema/AttrTemplateInstantiate.inc",
1184        ),
1185    ],
1186    tblgen = ":clang-tblgen",
1187    td_file = "include/clang/Basic/Attr.td",
1188    td_srcs = [
1189        "include/clang/Basic/ASTNode.td",
1190        "include/clang/Basic/Attr.td",
1191        "include/clang/Basic/AttrDocs.td",
1192        "include/clang/Basic/DeclNodes.td",
1193        "include/clang/Basic/StmtNodes.td",
1194    ],
1195)
1196
1197cc_library(
1198    name = "sema",
1199    srcs = glob([
1200        "lib/Sema/*.cpp",
1201        "lib/Sema/*.h",
1202    ]),
1203    hdrs = glob([
1204        "include/clang/Sema/*.h",
1205        "include/clang-c/*.h",
1206    ]),
1207    copts = ["$(STACK_FRAME_UNLIMITED)"],
1208    includes = ["include"],
1209    textual_hdrs = [
1210        "include/clang/Sema/AttrParsedAttrImpl.inc",
1211        "include/clang/Sema/AttrParsedAttrKinds.inc",
1212        "include/clang/Sema/AttrSpellingListIndex.inc",
1213        "include/clang/Sema/AttrTemplateInstantiate.inc",
1214        "lib/Sema/OpenCLBuiltins.inc",
1215    ],
1216    deps = [
1217        ":analysis",
1218        ":apinotes",
1219        ":ast",
1220        ":basic",
1221        ":basic_arm_cde_aliases_gen",
1222        ":basic_arm_cde_sema_gen",
1223        ":basic_arm_sme_builtins_gen",
1224        ":basic_arm_sme_builtins_za_state_gen",
1225        ":basic_arm_sme_sema_rangechecks_gen",
1226        ":basic_arm_sme_streaming_attrs_gen",
1227        ":basic_arm_sve_builtins_gen",
1228        ":basic_arm_sve_sema_rangechecks_gen",
1229        ":basic_arm_sve_streaming_attrs_gen",
1230        ":basic_builtins_gen",
1231        ":basic_riscv_sifive_vector_builtin_sema_gen",
1232        ":basic_riscv_vector_builtin_sema_gen",
1233        ":edit",
1234        ":lex",
1235        ":libsema_openclbuiltins_inc_gen",
1236        ":sema_attr_gen",
1237        ":support",
1238        ":type_nodes_gen",
1239        "//llvm:AllTargetsAsmParsers",
1240        "//llvm:AllTargetsCodeGens",
1241        "//llvm:Core",
1242        "//llvm:Demangle",
1243        "//llvm:FrontendHLSL",
1244        "//llvm:FrontendOpenMP",
1245        "//llvm:MC",
1246        "//llvm:MCParser",
1247        "//llvm:Support",
1248        "//llvm:TargetParser",
1249    ],
1250)
1251
1252gentbl(
1253    name = "parse_attr_gen",
1254    tbl_outs = [
1255        (
1256            "-gen-clang-attr-parser-string-switches",
1257            "include/clang/Parse/AttrParserStringSwitches.inc",
1258        ),
1259        (
1260            "-gen-clang-attr-subject-match-rules-parser-string-switches",
1261            "include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc",
1262        ),
1263    ],
1264    tblgen = ":clang-tblgen",
1265    td_file = "include/clang/Basic/Attr.td",
1266    td_srcs = [
1267        "include/clang/Basic/ASTNode.td",
1268        "include/clang/Basic/Attr.td",
1269        "include/clang/Basic/AttrDocs.td",
1270        "include/clang/Basic/DeclNodes.td",
1271        "include/clang/Basic/StmtNodes.td",
1272    ],
1273)
1274
1275cc_library(
1276    name = "parse",
1277    srcs = glob([
1278        "lib/Parse/*.cpp",
1279    ]),
1280    hdrs = [
1281        "include/clang/Parse/AttrParserStringSwitches.inc",
1282        "include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc",
1283    ] + glob(["include/clang/Parse/*.h"]),
1284    includes = ["include"],
1285    deps = [
1286        ":ast",
1287        ":basic",
1288        ":lex",
1289        ":parse_attr_gen",
1290        ":sema",
1291        "//llvm:FrontendOpenMP",
1292        "//llvm:MC",
1293        "//llvm:MCParser",
1294        "//llvm:Support",
1295    ],
1296)
1297
1298cc_library(
1299    name = "ast_matchers",
1300    srcs = glob([
1301        "lib/ASTMatchers/*.cpp",
1302    ]),
1303    hdrs = glob(["include/clang/ASTMatchers/*.h"]),
1304    includes = ["include"],
1305    deps = [
1306        ":ast",
1307        ":basic",
1308        ":lex",
1309        ":support",
1310        "//llvm:Support",
1311    ],
1312)
1313
1314cc_library(
1315    name = "ast_matchers_dynamic",
1316    srcs = glob([
1317        "lib/ASTMatchers/Dynamic/*.cpp",
1318        "lib/ASTMatchers/Dynamic/*.h",
1319    ]),
1320    hdrs = glob(["include/clang/ASTMatchers/Dynamic/*.h"]),
1321    copts = ["$(STACK_FRAME_UNLIMITED)"],
1322    includes = ["include"],
1323    deps = [
1324        ":ast",
1325        ":ast_matchers",
1326        ":basic",
1327        "//llvm:FrontendOpenMP",
1328        "//llvm:Support",
1329    ],
1330)
1331
1332cc_library(
1333    name = "rewrite",
1334    srcs = glob([
1335        "lib/Rewrite/*.cpp",
1336    ]),
1337    hdrs = glob(["include/clang/Rewrite/Core/*.h"]),
1338    includes = ["include"],
1339    deps = [
1340        ":ast",
1341        ":basic",
1342        ":edit",
1343        ":lex",
1344        "//llvm:Support",
1345    ],
1346)
1347
1348cc_library(
1349    name = "testing",
1350    testonly = 1,
1351    srcs = glob([
1352        "lib/Testing/*.cpp",
1353    ]),
1354    hdrs = glob(["include/clang/Testing/*.h"]),
1355    includes = ["include"],
1356    textual_hdrs = [
1357        "include/clang/Testing/TestLanguage.def",
1358    ],
1359    deps = [
1360        ":basic",
1361        ":frontend",
1362        "//llvm:MC",
1363        "//llvm:Support",
1364        "//third-party/unittest:gtest",
1365    ],
1366)
1367
1368cc_library(
1369    name = "tooling_core",
1370    srcs = glob([
1371        "lib/Tooling/Core/*.cpp",
1372    ]),
1373    hdrs = glob(["include/clang/Tooling/Core/*.h"]),
1374    includes = ["include"],
1375    deps = [
1376        ":ast",
1377        ":basic",
1378        ":lex",
1379        ":rewrite",
1380        "//llvm:Support",
1381    ],
1382)
1383
1384cc_library(
1385    name = "tooling",
1386    srcs = glob([
1387        "lib/Tooling/*.cpp",
1388    ]),
1389    hdrs = glob([
1390        "include/clang/Tooling/*.h",
1391    ]),
1392    includes = ["include"],
1393    deps = [
1394        ":ast",
1395        ":ast_matchers",
1396        ":basic",
1397        ":driver",
1398        ":format",
1399        ":frontend",
1400        ":lex",
1401        ":rewrite",
1402        ":support",
1403        ":tooling_core",
1404        "//llvm:Option",
1405        "//llvm:Support",
1406        "//llvm:TargetParser",
1407    ],
1408)
1409
1410cc_library(
1411    name = "tooling_inclusions",
1412    srcs = glob([
1413        "lib/Tooling/Inclusions/**/*.cpp",
1414        "lib/Tooling/Inclusions/**/*.inc",
1415    ]),
1416    hdrs = glob([
1417        "include/clang/Tooling/Inclusions/**/*.h",
1418    ]),
1419    deps = [
1420        ":ast",
1421        ":basic",
1422        ":lex",
1423        ":rewrite",
1424        ":tooling_core",
1425        "//llvm:Support",
1426    ],
1427)
1428
1429cc_library(
1430    name = "tooling_refactoring",
1431    srcs = glob([
1432        "lib/Tooling/Refactoring/**/*.cpp",
1433    ]),
1434    hdrs = glob([
1435        "include/clang/Tooling/Refactoring/**/*.h",
1436    ]),
1437    deps = [
1438        ":ast",
1439        ":ast_matchers",
1440        ":basic",
1441        ":format",
1442        ":frontend",
1443        ":index",
1444        ":lex",
1445        ":rewrite",
1446        ":tooling",
1447        ":tooling_core",
1448        "//llvm:Support",
1449    ],
1450)
1451
1452gentbl(
1453    name = "tooling_syntax_gen",
1454    tbl_outs = [
1455        ("-gen-clang-syntax-node-list", "include/clang/Tooling/Syntax/Nodes.inc"),
1456        ("-gen-clang-syntax-node-classes", "include/clang/Tooling/Syntax/NodeClasses.inc"),
1457    ],
1458    tblgen = ":clang-tblgen",
1459    td_file = "include/clang/Tooling/Syntax/Nodes.td",
1460    td_srcs = [
1461        "include/clang/Tooling/Syntax/Nodes.td",
1462        "include/clang/Tooling/Syntax/Syntax.td",
1463    ],
1464)
1465
1466cc_library(
1467    name = "tooling_syntax",
1468    srcs = glob(["lib/Tooling/Syntax/**/*.cpp"]),
1469    hdrs = glob(["include/clang/Tooling/Syntax/**/*.h"]),
1470    deps = [
1471        ":ast",
1472        ":basic",
1473        ":lex",
1474        ":tooling_core",
1475        ":tooling_syntax_gen",
1476        "//llvm:Support",
1477    ],
1478)
1479
1480cc_library(
1481    name = "tooling_dependency_scanning",
1482    srcs = glob(["lib/Tooling/DependencyScanning/**/*.cpp"]),
1483    hdrs = glob(["include/clang/Tooling/DependencyScanning/**/*.h"]),
1484    deps = [
1485        ":basic",
1486        ":driver",
1487        ":frontend",
1488        ":lex",
1489        ":serialization",
1490        ":tooling",
1491        "//llvm:Support",
1492        "//llvm:TargetParser",
1493    ],
1494)
1495
1496cc_library(
1497    name = "transformer",
1498    srcs = glob(["lib/Tooling/Transformer/**/*.cpp"]),
1499    hdrs = glob(["include/clang/Tooling/Transformer/**/*.h"]),
1500    deps = [
1501        ":ast",
1502        ":ast_matchers",
1503        ":basic",
1504        ":lex",
1505        ":rewrite",
1506        ":tooling_refactoring",
1507        "//llvm:Support",
1508    ],
1509)
1510
1511cc_library(
1512    name = "ast-diff",
1513    srcs = glob(["lib/Tooling/ASTDiff/*.cpp"]),
1514    hdrs = glob(["include/clang/Tooling/ASTDiff/*.h"]),
1515    deps = [
1516        ":ast",
1517        ":basic",
1518        ":lex",
1519        "//llvm:Support",
1520    ],
1521)
1522
1523cc_library(
1524    name = "crosstu",
1525    srcs = glob(["lib/CrossTU/*.cpp"]),
1526    hdrs = glob(["include/clang/CrossTU/*.h"]),
1527    deps = [
1528        ":analysis",
1529        ":ast",
1530        ":basic",
1531        ":frontend",
1532        ":index",
1533        "//llvm:Option",
1534        "//llvm:Support",
1535        "//llvm:TargetParser",
1536    ],
1537)
1538
1539cc_library(
1540    name = "format",
1541    srcs = glob(
1542        [
1543            "lib/Format/*.cpp",
1544            "lib/Format/*.h",
1545        ],
1546    ),
1547    hdrs = glob([
1548        "include/clang/Format/*.h",
1549    ]),
1550    includes = ["include"],
1551    deps = [
1552        ":basic",
1553        ":lex",
1554        ":tooling_core",
1555        ":tooling_inclusions",
1556        "//llvm:Support",
1557    ],
1558)
1559
1560cc_library(
1561    name = "edit",
1562    srcs = glob(["lib/Edit/*.cpp"]),
1563    hdrs = glob(["include/clang/Edit/*.h"]),
1564    includes = ["include"],
1565    deps = [
1566        ":ast",
1567        ":basic",
1568        ":lex",
1569        "//llvm:Support",
1570    ],
1571)
1572
1573cc_library(
1574    name = "static_analyzer_core_options",
1575    hdrs = [
1576        "include/clang/StaticAnalyzer/Core/AnalyzerOptions.h",
1577    ],
1578    textual_hdrs = [
1579        "include/clang/StaticAnalyzer/Core/Analyses.def",
1580        "include/clang/StaticAnalyzer/Core/AnalyzerOptions.def",
1581    ],
1582    deps = [
1583        ":analysis",
1584        ":basic",
1585        ":static_analyzer_checkers_gen",
1586        "//llvm:Support",
1587    ],
1588)
1589
1590cc_library(
1591    name = "static_analyzer_core",
1592    srcs = glob([
1593        "lib/StaticAnalyzer/Core/**/*.cpp",
1594        "lib/StaticAnalyzer/Core/**/*.h",
1595    ]),
1596    hdrs = glob([
1597        "include/clang/StaticAnalyzer/Core/**/*.h",
1598    ]),
1599    includes = ["include"],
1600    textual_hdrs = glob([
1601        "include/clang/StaticAnalyzer/Core/**/*.def",
1602    ]),
1603    deps = [
1604        ":analysis",
1605        ":ast",
1606        ":ast_matchers",
1607        ":basic",
1608        ":crosstu",
1609        ":driver",
1610        ":frontend",
1611        ":lex",
1612        ":rewrite",
1613        ":static_analyzer_checkers_gen",
1614        ":tooling",
1615        ":tooling_core",
1616        "//llvm:Support",
1617    ],
1618)
1619
1620gentbl(
1621    name = "static_analyzer_checkers_gen",
1622    tbl_outs = [(
1623        "-gen-clang-sa-checkers",
1624        "include/clang/StaticAnalyzer/Checkers/Checkers.inc",
1625    )],
1626    tblgen = ":clang-tblgen",
1627    td_file = "include/clang/StaticAnalyzer/Checkers/Checkers.td",
1628    td_srcs = [
1629        "include/clang/StaticAnalyzer/Checkers/CheckerBase.td",
1630        "include/clang/StaticAnalyzer/Checkers/Checkers.td",
1631    ],
1632)
1633
1634cc_library(
1635    name = "static_analyzer_checkers",
1636    srcs = glob([
1637        "lib/StaticAnalyzer/Checkers/**/*.cpp",
1638        "lib/StaticAnalyzer/Checkers/**/*.h",
1639    ]),
1640    hdrs = [
1641        "include/clang/StaticAnalyzer/Checkers/Checkers.inc",
1642    ] + glob([
1643        "include/clang/StaticAnalyzer/Checkers/**/*.h",
1644    ]),
1645    copts = ["$(STACK_FRAME_UNLIMITED)"],
1646    includes = ["include"],
1647    deps = [
1648        ":analysis",
1649        ":ast",
1650        ":ast_matchers",
1651        ":basic",
1652        ":driver",
1653        ":lex",
1654        ":static_analyzer_checkers_gen",
1655        ":static_analyzer_core",
1656        "//llvm:Support",
1657    ],
1658)
1659
1660gentbl(
1661    name = "driver_options_inc_gen",
1662    tbl_outs = [(
1663        "-gen-opt-parser-defs",
1664        "include/clang/Driver/Options.inc",
1665    )],
1666    tblgen = "//llvm:llvm-tblgen",
1667    td_file = "include/clang/Driver/Options.td",
1668    td_srcs = [
1669        "//llvm:include/llvm/Option/OptParser.td",
1670    ],
1671)
1672
1673cc_library(
1674    name = "driver",
1675    srcs = glob(
1676        [
1677            "lib/Driver/*.cpp",
1678            "lib/Driver/ToolChains/*.cpp",
1679            "lib/Driver/ToolChains/*.h",
1680            "lib/Driver/ToolChains/Arch/*.cpp",
1681            "lib/Driver/ToolChains/Arch/*.h",
1682        ],
1683        exclude = [
1684            "lib/Driver/ToolChains/MSVCSetupApi.h",
1685        ],
1686    ),
1687    hdrs = glob([
1688        "include/clang/Driver/*.h",
1689    ]),
1690    copts = ["$(STACK_FRAME_UNLIMITED)"],
1691    includes = [
1692        "include",
1693        # TODO: This is likely a layering issue, but files in Arch are currently
1694        # directly #including "Tools.h".
1695        "lib/Driver",
1696    ],
1697    linkopts = select({
1698        "@platforms//os:windows": ["version.lib"],
1699        "//conditions:default": [],
1700    }),
1701    textual_hdrs = glob([
1702        "include/clang/Driver/*.def",
1703    ]),
1704    deps = [
1705        ":ast",
1706        ":basic",
1707        ":config",
1708        ":driver_options_inc_gen",
1709        ":parse",
1710        ":static_analyzer_checkers_gen",
1711        "//llvm:BinaryFormat",
1712        "//llvm:FrontendDebug",
1713        "//llvm:Instrumentation",
1714        "//llvm:MC",
1715        "//llvm:Object",
1716        "//llvm:Option",
1717        "//llvm:ProfileData",
1718        "//llvm:Support",
1719        "//llvm:Target",
1720        "//llvm:TargetParser",
1721        "//llvm:WindowsDriver",
1722        "//llvm:config",
1723    ],
1724)
1725
1726gentbl(
1727    name = "headers_arm_neon_gen",
1728    tbl_outs = [(
1729        "-gen-arm-neon",
1730        "lib/Headers/arm_neon.h",
1731    )],
1732    tblgen = ":clang-tblgen",
1733    td_file = "include/clang/Basic/arm_neon.td",
1734    td_srcs = [
1735        "include/clang/Basic/arm_immcheck_incl.td",
1736        "include/clang/Basic/arm_neon.td",
1737        "include/clang/Basic/arm_neon_incl.td",
1738    ],
1739)
1740
1741gentbl(
1742    name = "headers_arm_fp16_gen",
1743    tbl_outs = [(
1744        "-gen-arm-fp16",
1745        "lib/Headers/arm_fp16.h",
1746    )],
1747    tblgen = ":clang-tblgen",
1748    td_file = "include/clang/Basic/arm_fp16.td",
1749    td_srcs = [
1750        "include/clang/Basic/arm_fp16.td",
1751        "include/clang/Basic/arm_immcheck_incl.td",
1752        "include/clang/Basic/arm_neon_incl.td",
1753    ],
1754)
1755
1756gentbl(
1757    name = "headers_arm_mve_gen",
1758    tbl_outs = [(
1759        "-gen-arm-mve-header",
1760        "lib/Headers/arm_mve.h",
1761    )],
1762    tblgen = ":clang-tblgen",
1763    td_file = "include/clang/Basic/arm_mve.td",
1764    td_srcs = [
1765        "include/clang/Basic/arm_mve.td",
1766        "include/clang/Basic/arm_mve_defs.td",
1767    ],
1768)
1769
1770gentbl(
1771    name = "headers_arm_cde_gen",
1772    tbl_outs = [(
1773        "-gen-arm-cde-header",
1774        "lib/Headers/arm_cde.h",
1775    )],
1776    tblgen = ":clang-tblgen",
1777    td_file = "include/clang/Basic/arm_cde.td",
1778    td_srcs = [
1779        "include/clang/Basic/arm_cde.td",
1780        "include/clang/Basic/arm_mve_defs.td",
1781    ],
1782)
1783
1784gentbl(
1785    name = "headers_arm_sve_gen",
1786    tbl_outs = [(
1787        "-gen-arm-sve-header",
1788        "lib/Headers/arm_sve.h",
1789    )],
1790    tblgen = ":clang-tblgen",
1791    td_file = "include/clang/Basic/arm_sve.td",
1792    td_srcs = [
1793        "include/clang/Basic/arm_immcheck_incl.td",
1794        "include/clang/Basic/arm_sve.td",
1795        "include/clang/Basic/arm_sve_sme_incl.td",
1796    ],
1797)
1798
1799gentbl(
1800    name = "headers_arm_bf16_gen",
1801    tbl_outs = [(
1802        "-gen-arm-bf16",
1803        "lib/Headers/arm_bf16.h",
1804    )],
1805    tblgen = ":clang-tblgen",
1806    td_file = "include/clang/Basic/arm_bf16.td",
1807    td_srcs = [
1808        "include/clang/Basic/arm_bf16.td",
1809        "include/clang/Basic/arm_immcheck_incl.td",
1810        "include/clang/Basic/arm_neon_incl.td",
1811    ],
1812)
1813
1814gentbl(
1815    name = "headers_arm_sme_gen",
1816    tbl_outs = [(
1817        "-gen-arm-sme-header",
1818        "lib/Headers/arm_sme.h",
1819    )],
1820    tblgen = ":clang-tblgen",
1821    td_file = "include/clang/Basic/arm_sme.td",
1822    td_srcs = [
1823        "include/clang/Basic/arm_immcheck_incl.td",
1824        "include/clang/Basic/arm_sme.td",
1825        "include/clang/Basic/arm_sve_sme_incl.td",
1826    ],
1827)
1828
1829gentbl(
1830    name = "headers_arm_vector_type_gen",
1831    tbl_outs = [(
1832        "-gen-arm-vector-type",
1833        "lib/Headers/arm_vector_types.h",
1834    )],
1835    tblgen = ":clang-tblgen",
1836    td_file = "include/clang/Basic/arm_neon.td",
1837    td_srcs = [
1838        "include/clang/Basic/arm_immcheck_incl.td",
1839        "include/clang/Basic/arm_neon.td",
1840        "include/clang/Basic/arm_neon_incl.td",
1841    ],
1842)
1843
1844gentbl(
1845    name = "headers_riscv_vector",
1846    tbl_outs = [(
1847        "-gen-riscv-vector-header",
1848        "lib/Headers/riscv_vector.h",
1849    )],
1850    tblgen = ":clang-tblgen",
1851    td_file = "include/clang/Basic/riscv_vector.td",
1852    td_srcs = [
1853        "include/clang/Basic/riscv_vector.td",
1854        "include/clang/Basic/riscv_vector_common.td",
1855    ],
1856)
1857
1858# We generate the set of builtin headers under a special subdirectory in the
1859# 'bin' section of the bazel output so that they can be used as data
1860# dependencies. It requires listing explicitly all the generated inputs here.
1861builtin_headers = glob(
1862    ["lib/Headers/**/*.h"],
1863    exclude = [
1864        # FIXME: They are not handled in CMake side.
1865        "lib/Headers/openmp_wrappers/stdlib.h",
1866        "lib/Headers/openmp_wrappers/time.h",
1867        "lib/Headers/ppc_wrappers/nmmintrin.h",
1868    ],
1869) + [
1870    # keep sorted
1871    "lib/Headers/arm_bf16.h",
1872    "lib/Headers/arm_cde.h",
1873    "lib/Headers/arm_fp16.h",
1874    "lib/Headers/arm_mve.h",
1875    "lib/Headers/arm_neon.h",
1876    "lib/Headers/arm_sme.h",
1877    "lib/Headers/arm_sve.h",
1878    "lib/Headers/arm_vector_types.h",
1879    "lib/Headers/cuda_wrappers/algorithm",
1880    "lib/Headers/cuda_wrappers/complex",
1881    "lib/Headers/cuda_wrappers/new",
1882    "lib/Headers/module.modulemap",
1883    "lib/Headers/openmp_wrappers/cmath",
1884    "lib/Headers/openmp_wrappers/complex",
1885    "lib/Headers/openmp_wrappers/new",
1886    "lib/Headers/riscv_vector.h",
1887]
1888
1889genrule(
1890    name = "builtin_headers_gen",
1891    srcs = builtin_headers,
1892    outs = [hdr.replace("lib/Headers/", "staging/include/") for hdr in builtin_headers],
1893    cmd = """
1894       for src in $(SRCS); do
1895         relsrc=$${src#*"$(WORKSPACE_ROOT)"/clang/lib/Headers}
1896         target=$(@D)/staging/include/$$relsrc
1897         mkdir -p $$(dirname $$target)
1898         cp $$src $$target
1899       done""",
1900    output_to_bindir = 1,
1901    toolchains = [":workspace_root"],
1902)
1903
1904cc_library(
1905    name = "frontend",
1906    srcs = glob([
1907        "lib/Frontend/*.cpp",
1908        "lib/Frontend/*.h",
1909    ]),
1910    hdrs = glob([
1911        "include/clang/Frontend/*.h",
1912    ]),
1913    copts = ["$(STACK_FRAME_UNLIMITED)"],
1914    data = [":builtin_headers_gen"],
1915    includes = ["include"],
1916    deps = [
1917        ":apinotes",
1918        ":ast",
1919        ":basic",
1920        ":config",
1921        ":driver",
1922        ":driver_options_inc_gen",
1923        ":edit",
1924        ":lex",
1925        ":parse",
1926        ":sema",
1927        ":serialization",
1928        ":static_analyzer_core_options",
1929        ":support",
1930        "//llvm:BinaryFormat",
1931        "//llvm:BitReader",
1932        "//llvm:BitstreamReader",
1933        "//llvm:BitstreamWriter",
1934        "//llvm:Core",
1935        "//llvm:FrontendDebug",
1936        "//llvm:Linker",
1937        "//llvm:MC",
1938        "//llvm:Option",
1939        "//llvm:ProfileData",
1940        "//llvm:Remarks",
1941        "//llvm:Support",
1942        "//llvm:Target",
1943        "//llvm:TargetParser",
1944        "//llvm:TextAPI",
1945        "//llvm:config",
1946    ],
1947)
1948
1949cc_library(
1950    name = "frontend_rewrite",
1951    srcs = glob([
1952        "lib/Frontend/Rewrite/*.cpp",
1953    ]),
1954    hdrs = glob(["include/clang/Rewrite/Frontend/*.h"]),
1955    includes = ["include"],
1956    deps = [
1957        ":ast",
1958        ":basic",
1959        ":config",
1960        ":edit",
1961        ":frontend",
1962        ":lex",
1963        ":parse",
1964        ":rewrite",
1965        ":serialization",
1966        "//llvm:Support",
1967    ],
1968)
1969
1970cc_library(
1971    name = "interpreter",
1972    srcs = glob(
1973        [
1974            "lib/Interpreter/*.cpp",
1975            "lib/Interpreter/*.h",
1976        ],
1977        exclude = [
1978            "lib/Interpreter/Wasm.cpp",
1979            "lib/Interpreter/Wasm.h",
1980        ],
1981    ),
1982    hdrs = glob(["include/clang/Interpreter/*.h"]),
1983    includes = ["include"],
1984    deps = [
1985        ":analysis",
1986        ":ast",
1987        ":basic",
1988        ":codegen",
1989        ":driver",
1990        ":edit",
1991        ":frontend",
1992        ":frontend_tool",
1993        ":lex",
1994        ":parse",
1995        ":sema",
1996        ":serialization",
1997        "//llvm:AllTargetsAsmParsers",
1998        "//llvm:AllTargetsCodeGens",
1999        "//llvm:Core",
2000        "//llvm:ExecutionEngine",
2001        "//llvm:MC",
2002        "//llvm:Option",
2003        "//llvm:OrcDebugging",
2004        "//llvm:OrcJIT",
2005        "//llvm:OrcShared",
2006        "//llvm:OrcTargetProcess",
2007        "//llvm:Support",
2008        "//llvm:Target",
2009        "//llvm:TargetParser",
2010        "//llvm:TransformUtils",
2011        "//llvm:config",
2012    ],
2013)
2014
2015cc_library(
2016    name = "codegen",
2017    srcs = glob([
2018        "lib/CodeGen/**/*.cpp",
2019        "lib/CodeGen/**/*.h",
2020    ]),
2021    hdrs = glob(["include/clang/CodeGen/*.h"]),
2022    copts = ["$(STACK_FRAME_UNLIMITED)"],
2023    includes = [
2024        "include",
2025        "lib/CodeGen",
2026    ],
2027    deps = [
2028        ":analysis",
2029        ":ast",
2030        ":basic",
2031        ":basic_arm_cde_cg_gen",
2032        ":basic_arm_sme_builtin_cg_gen",
2033        ":basic_arm_sve_builtin_cg_gen",
2034        ":basic_riscv_sifive_vector_builtin_cg_gen",
2035        ":basic_riscv_vector_builtin_cg_gen",
2036        ":driver",
2037        ":frontend",
2038        ":lex",
2039        ":sema",
2040        ":serialization",
2041        ":type_nodes_gen",
2042        "//llvm:AllTargetsAsmParsers",
2043        "//llvm:Analysis",
2044        "//llvm:BinaryFormat",
2045        "//llvm:BitReader",
2046        "//llvm:BitWriter",
2047        "//llvm:BitstreamReader",
2048        "//llvm:CodeGen",
2049        "//llvm:Core",
2050        "//llvm:Coroutines",
2051        "//llvm:Coverage",
2052        "//llvm:DebugInfoDWARF",
2053        "//llvm:Demangle",
2054        "//llvm:FrontendDriver",
2055        "//llvm:FrontendHLSL",
2056        "//llvm:FrontendOffloading",
2057        "//llvm:FrontendOpenMP",
2058        "//llvm:HipStdPar",
2059        "//llvm:IPO",
2060        "//llvm:IRPrinter",
2061        "//llvm:IRReader",
2062        "//llvm:InstCombine",
2063        "//llvm:Instrumentation",
2064        "//llvm:LTO",
2065        "//llvm:Linker",
2066        "//llvm:MC",
2067        "//llvm:ObjCARC",
2068        "//llvm:Object",
2069        "//llvm:Passes",
2070        "//llvm:ProfileData",
2071        "//llvm:Scalar",
2072        "//llvm:Support",
2073        "//llvm:Target",
2074        "//llvm:TargetParser",
2075        "//llvm:TransformUtils",
2076    ],
2077)
2078
2079cc_library(
2080    name = "static_analyzer_frontend",
2081    srcs = glob([
2082        "lib/StaticAnalyzer/Frontend/**/*.cpp",
2083        "lib/StaticAnalyzer/Frontend/**/*.h",
2084    ]),
2085    hdrs = glob(["include/clang/StaticAnalyzer/Frontend/**/*.h"]),
2086    includes = ["include"],
2087    deps = [
2088        ":analysis",
2089        ":ast",
2090        ":basic",
2091        ":crosstu",
2092        ":driver",
2093        ":frontend",
2094        ":lex",
2095        ":rewrite",
2096        ":serialization",
2097        ":static_analyzer_checkers",
2098        ":static_analyzer_core",
2099        ":tooling",
2100        ":tooling_core",
2101        "//llvm:Support",
2102    ],
2103)
2104
2105gentbl(
2106    name = "serialization_attr_gen",
2107    tbl_outs = [
2108        (
2109            "-gen-clang-attr-pch-read",
2110            "include/clang/Serialization/AttrPCHRead.inc",
2111        ),
2112        (
2113            "-gen-clang-attr-pch-write",
2114            "include/clang/Serialization/AttrPCHWrite.inc",
2115        ),
2116    ],
2117    tblgen = ":clang-tblgen",
2118    td_file = "include/clang/Basic/Attr.td",
2119    td_srcs = [
2120        "include/clang/Basic/ASTNode.td",
2121        "include/clang/Basic/Attr.td",
2122        "include/clang/Basic/AttrDocs.td",
2123        "include/clang/Basic/DeclNodes.td",
2124        "include/clang/Basic/StmtNodes.td",
2125    ],
2126)
2127
2128cc_library(
2129    name = "support",
2130    srcs = glob([
2131        "lib/Support/*.cpp",
2132    ]),
2133    hdrs = glob([
2134        "include/clang/Support/*.h",
2135    ]),
2136    includes = ["include"],
2137    deps = [
2138        "//llvm:Support",
2139    ],
2140)
2141
2142cc_library(
2143    name = "install_api",
2144    srcs = glob([
2145        "lib/InstallAPI/*.cpp",
2146        "lib/InstallAPI/*.h",
2147    ]),
2148    hdrs = glob([
2149        "include/clang/InstallAPI/*.h",
2150    ]),
2151    includes = ["include"],
2152    deps = [
2153        ":ast",
2154        ":basic",
2155        ":frontend",
2156        ":support",
2157        "//llvm:Core",
2158        "//llvm:Demangle",
2159        "//llvm:Support",
2160        "//llvm:TextAPI",
2161        "//llvm:TextAPIBinaryReader",
2162    ],
2163)
2164
2165cc_library(
2166    name = "serialization",
2167    srcs = [
2168        "include/clang/Serialization/AttrPCHRead.inc",
2169        "include/clang/Serialization/AttrPCHWrite.inc",
2170    ] + glob([
2171        "lib/Serialization/*.cpp",
2172        "lib/Serialization/*.h",
2173    ]),
2174    hdrs = glob([
2175        "include/clang/Serialization/*.h",
2176    ]),
2177    includes = ["include"],
2178    textual_hdrs = glob([
2179        "include/clang/Serialization/*.def",
2180    ]),
2181    deps = [
2182        ":ast",
2183        ":basic",
2184        ":lex",
2185        ":sema",
2186        ":serialization_attr_gen",
2187        ":type_nodes_gen",
2188        "//llvm:BitReader",
2189        "//llvm:BitWriter",
2190        "//llvm:BitstreamReader",
2191        "//llvm:BitstreamWriter",
2192        "//llvm:FrontendOpenMP",
2193        "//llvm:Object",
2194        "//llvm:Support",
2195        "//llvm:TargetParser",
2196    ],
2197)
2198
2199cc_library(
2200    name = "frontend_tool",
2201    srcs = glob([
2202        "lib/FrontendTool/*.cpp",
2203    ]),
2204    hdrs = glob(["include/clang/FrontendTool/*.h"]),
2205    includes = ["include"],
2206    deps = [
2207        ":arc_migrate",
2208        ":codegen",
2209        ":config",
2210        ":driver",
2211        ":extract_api",
2212        ":frontend",
2213        ":frontend_rewrite",
2214        ":static_analyzer_frontend",
2215        "//llvm:Option",
2216        "//llvm:Support",
2217    ],
2218)
2219
2220cc_library(
2221    name = "arc_migrate",
2222    srcs = glob([
2223        "lib/ARCMigrate/*.cpp",
2224        "lib/ARCMigrate/*.h",
2225    ]),
2226    hdrs = glob(["include/clang/ARCMigrate/*.h"]),
2227    includes = ["include"],
2228    deps = [
2229        ":analysis",
2230        ":ast",
2231        ":basic",
2232        ":edit",
2233        ":frontend",
2234        ":frontend_rewrite",
2235        ":lex",
2236        ":parse",
2237        ":rewrite",
2238        ":sema",
2239        ":serialization",
2240        ":static_analyzer_checkers",
2241        ":static_analyzer_core",
2242        "//llvm:Support",
2243        "//llvm:TargetParser",
2244    ],
2245)
2246
2247cc_library(
2248    name = "libclang_static",
2249    srcs = glob([
2250        "tools/libclang/*.cpp",
2251        "tools/libclang/*.h",
2252    ]),
2253    hdrs = glob(["include/clang-c/*.h"]),
2254    defines = ["CINDEX_NO_EXPORTS"],
2255    deps = [
2256        ":arc_migrate",
2257        ":ast",
2258        ":basic",
2259        ":codegen",
2260        ":config",
2261        ":driver",
2262        ":extract_api",
2263        ":frontend",
2264        ":index",
2265        ":lex",
2266        ":rewrite",
2267        ":sema",
2268        ":tooling",
2269        "//llvm:BitstreamReader",
2270        "//llvm:FrontendOpenMP",
2271        "//llvm:Support",
2272        "//llvm:config",
2273    ],
2274)
2275
2276cc_plugin_library(
2277    name = "libclang",
2278    srcs = glob([
2279        "tools/libclang/*.cpp",
2280        "tools/libclang/*.h",
2281    ]),
2282    hdrs = glob(["include/clang-c/*.h"]),
2283    copts = select({
2284        "@platforms//os:windows": ["-D_CINDEX_LIB_"],
2285        "//conditions:default": [],
2286    }),
2287    strip_include_prefix = "include",
2288    deps = [
2289        ":arc_migrate",
2290        ":ast",
2291        ":basic",
2292        ":codegen",
2293        ":config",
2294        ":driver",
2295        ":extract_api",
2296        ":frontend",
2297        ":index",
2298        ":lex",
2299        ":rewrite",
2300        ":sema",
2301        ":tooling",
2302        "//llvm:BitstreamReader",
2303        "//llvm:FrontendOpenMP",
2304        "//llvm:Support",
2305        "//llvm:config",
2306    ],
2307)
2308
2309filegroup(
2310    name = "python-sources",
2311    srcs = [
2312        "bindings/python/clang/cindex.py",
2313    ],
2314)
2315
2316filegroup(
2317    name = "python-cindex-examples",
2318    srcs = [
2319        "bindings/python/examples/cindex/cindex-dump.py",
2320        "bindings/python/examples/cindex/cindex-includes.py",
2321    ],
2322)
2323
2324cc_binary(
2325    name = "c-index-test",
2326    testonly = 1,
2327    srcs = [
2328        "tools/c-index-test/c-index-test.c",
2329        "tools/c-index-test/core_main.cpp",
2330    ],
2331    copts = [
2332        "-Wno-uninitialized",
2333    ],
2334    stamp = 0,
2335    deps = [
2336        ":ast",
2337        ":basic",
2338        ":codegen",
2339        ":config",
2340        ":frontend",
2341        ":index",
2342        ":lex",
2343        ":libclang",
2344        ":serialization",
2345        "//llvm:Core",
2346        "//llvm:MC",
2347        "//llvm:Support",
2348    ],
2349)
2350
2351cc_library(
2352    name = "apinotes",
2353    srcs = glob([
2354        "lib/APINotes/*.cpp",
2355        "lib/APINotes/*.h",
2356    ]),
2357    hdrs = glob(["include/clang/APINotes/*.h"]),
2358    deps = [
2359        ":basic",
2360        "//llvm:BitWriter",
2361        "//llvm:BitstreamReader",
2362        "//llvm:BitstreamWriter",
2363        "//llvm:Support",
2364    ],
2365)
2366
2367cc_binary(
2368    name = "apinotes-test",
2369    testonly = 1,
2370    srcs = ["tools/apinotes-test/APINotesTest.cpp"],
2371    stamp = 0,
2372    deps = [
2373        ":apinotes",
2374        "//llvm:Support",
2375    ],
2376)
2377
2378cc_binary(
2379    name = "arcmt-test",
2380    testonly = 1,
2381    srcs = ["tools/arcmt-test/arcmt-test.cpp"],
2382    stamp = 0,
2383    deps = [
2384        ":arc_migrate",
2385        ":ast",
2386        ":basic",
2387        ":frontend",
2388        ":frontend_rewrite",
2389        ":lex",
2390        "//llvm:Support",
2391    ],
2392)
2393
2394cc_binary(
2395    name = "c-arcmt-test",
2396    testonly = 1,
2397    srcs = ["tools/c-arcmt-test/c-arcmt-test.c"],
2398    copts = select({
2399        "@platforms//os:windows": [],
2400        "//conditions:default": ["-std=gnu99"],
2401    }),
2402    stamp = 0,
2403    deps = [
2404        ":codegen",
2405        ":libclang",
2406        "//llvm:MC",
2407        "//llvm:Support",
2408    ],
2409)
2410
2411cc_binary(
2412    name = "clang-import-test",
2413    testonly = 1,
2414    srcs = glob([
2415        "tools/clang-import-test/*.cpp",
2416    ]),
2417    stamp = 0,
2418    deps = [
2419        ":ast",
2420        ":basic",
2421        ":codegen",
2422        ":driver",
2423        ":frontend",
2424        ":lex",
2425        ":parse",
2426        "//llvm:Core",
2427        "//llvm:Support",
2428        "//llvm:TargetParser",
2429    ],
2430)
2431
2432cc_library(
2433    name = "clang-driver",
2434    srcs = glob(["tools/driver/*.cpp"]),
2435    copts = [
2436        # Disable stack frame size checks in the driver because
2437        # clang::ensureStackAddressSpace allocates a large array on the stack.
2438        "$(STACK_FRAME_UNLIMITED)",
2439    ],
2440    deps = [
2441        ":analysis",
2442        ":ast",
2443        ":basic",
2444        ":codegen",
2445        ":config",
2446        ":driver",
2447        ":frontend",
2448        ":frontend_rewrite",
2449        ":frontend_tool",
2450        ":lex",
2451        ":parse",
2452        ":sema",
2453        ":serialization",
2454        ":static_analyzer_frontend",
2455        "//llvm:AllTargetsAsmParsers",
2456        "//llvm:AllTargetsCodeGens",
2457        "//llvm:BitReader",
2458        "//llvm:BitWriter",
2459        "//llvm:CodeGen",
2460        "//llvm:Core",
2461        "//llvm:IPO",
2462        "//llvm:MC",
2463        "//llvm:MCParser",
2464        "//llvm:Option",
2465        "//llvm:Support",
2466        "//llvm:Target",
2467        "//llvm:TargetParser",
2468        "//llvm:config",
2469    ],
2470)
2471
2472llvm_driver_cc_binary(
2473    name = "clang",
2474    stamp = 0,
2475    deps = [":clang-driver"],
2476)
2477
2478cc_binary(
2479    name = "diagtool",
2480    srcs = glob([
2481        "tools/diagtool/*.cpp",
2482        "tools/diagtool/*.h",
2483    ]),
2484    stamp = 0,
2485    deps = [
2486        ":basic",
2487        ":diagnostic_defs_gen",
2488        ":frontend",
2489        ":lex",
2490        ":sema",
2491        "//llvm:Support",
2492    ],
2493)
2494
2495filegroup(
2496    name = "exploded_graph_rewriter",
2497    testonly = 1,
2498    data = ["utils/analyzer/exploded-graph-rewriter.py"],
2499)
2500
2501filegroup(
2502    name = "module-deps-to-rsp",
2503    testonly = 1,
2504    data = ["utils/module-deps-to-rsp.py"],
2505)
2506
2507filegroup(
2508    name = "hmaptool",
2509    testonly = 1,
2510    data = ["utils/hmaptool/hmaptool"],
2511)
2512
2513binary_alias(
2514    name = "clang++",
2515    binary = ":clang",
2516)
2517
2518binary_alias(
2519    name = "clang-cl",
2520    binary = ":clang",
2521)
2522
2523cc_binary(
2524    name = "clang-check",
2525    srcs = ["tools/clang-check/ClangCheck.cpp"],
2526    stamp = 0,
2527    deps = [
2528        ":ast",
2529        ":codegen",
2530        ":driver",
2531        ":frontend",
2532        ":frontend_rewrite",
2533        ":serialization",
2534        ":static_analyzer_frontend",
2535        ":tooling",
2536        ":tooling_syntax",
2537        "//llvm:Option",
2538        "//llvm:Support",
2539    ],
2540)
2541
2542cc_binary(
2543    name = "clang-format",
2544    srcs = [
2545        "lib/Format/MatchFilePath.h",
2546        "tools/clang-format/ClangFormat.cpp",
2547    ],
2548    stamp = 0,
2549    deps = [
2550        ":basic",
2551        ":format",
2552        ":frontend",
2553        ":rewrite",
2554        "//llvm:Support",
2555    ],
2556)
2557
2558cc_binary(
2559    name = "clang-diff",
2560    srcs = glob(["tools/clang-diff/*.cpp"]),
2561    stamp = 0,
2562    deps = [
2563        ":ast-diff",
2564        ":tooling",
2565        "//llvm:Support",
2566    ],
2567)
2568
2569cc_binary(
2570    name = "clang-offload-bundler",
2571    srcs = glob(["tools/clang-offload-bundler/*.cpp"]),
2572    stamp = 0,
2573    deps = [
2574        ":basic",
2575        ":driver",
2576        ":tooling",
2577        "//llvm:BitWriter",
2578        "//llvm:Core",
2579        "//llvm:Object",
2580        "//llvm:Support",
2581        "//llvm:TargetParser",
2582    ],
2583)
2584
2585cc_binary(
2586    name = "clang-offload-packager",
2587    srcs = glob(["tools/clang-offload-packager/*.cpp"]),
2588    stamp = 0,
2589    deps = [
2590        ":basic",
2591        "//llvm:BinaryFormat",
2592        "//llvm:Object",
2593        "//llvm:Support",
2594    ],
2595)
2596
2597gentbl(
2598    name = "linker_wrapper_opts_gen",
2599    tbl_outs = [(
2600        "-gen-opt-parser-defs",
2601        "tools/clang-linker-wrapper/LinkerWrapperOpts.inc",
2602    )],
2603    tblgen = "//llvm:llvm-tblgen",
2604    td_file = "tools/clang-linker-wrapper/LinkerWrapperOpts.td",
2605    td_srcs = [
2606        "tools/clang-linker-wrapper/LinkerWrapperOpts.td",
2607        "//llvm:include/llvm/Option/OptParser.td",
2608    ],
2609)
2610
2611cc_binary(
2612    name = "clang-linker-wrapper",
2613    srcs = [
2614        "tools/clang-linker-wrapper/ClangLinkerWrapper.cpp",
2615    ],
2616    copts = [
2617        "-I$(GENDIR)/$(WORKSPACE_ROOT)/clang/tools/clang-linker-wrapper",
2618    ],
2619    stamp = 0,
2620    toolchains = [":workspace_root"],
2621    deps = [
2622        ":basic",
2623        ":linker_wrapper_opts_gen",
2624        "//llvm:AllTargetsAsmParsers",
2625        "//llvm:Analysis",
2626        "//llvm:BinaryFormat",
2627        "//llvm:BitWriter",
2628        "//llvm:CodeGen",
2629        "//llvm:Core",
2630        "//llvm:FrontendOffloading",
2631        "//llvm:IRReader",
2632        "//llvm:LTO",
2633        "//llvm:MC",
2634        "//llvm:Object",
2635        "//llvm:Option",
2636        "//llvm:Passes",
2637        "//llvm:Remarks",
2638        "//llvm:Support",
2639        "//llvm:Target",
2640        "//llvm:TargetParser",
2641        "//llvm:TransformUtils",
2642    ],
2643)
2644
2645cc_binary(
2646    name = "clang-refactor",
2647    srcs = glob([
2648        "tools/clang-refactor/*.cpp",
2649        "tools/clang-refactor/*.h",
2650    ]),
2651    stamp = 0,
2652    deps = [
2653        ":ast",
2654        ":basic",
2655        ":format",
2656        ":frontend",
2657        ":lex",
2658        ":rewrite",
2659        ":tooling",
2660        ":tooling_refactoring",
2661        "//llvm:Support",
2662    ],
2663)
2664
2665cc_binary(
2666    name = "clang-repl",
2667    srcs = glob(["tools/clang-repl/*.cpp"]),
2668    stamp = 0,
2669    deps = [
2670        ":basic",
2671        ":frontend",
2672        ":interpreter",
2673        ":lex",
2674        ":sema",
2675        ":tooling",
2676        "//llvm:Core",
2677        "//llvm:LineEditor",
2678        "//llvm:Option",
2679        "//llvm:OrcJIT",
2680        "//llvm:Support",
2681    ],
2682)
2683
2684cc_binary(
2685    name = "clang-extdef-mapping",
2686    srcs = glob(["tools/clang-extdef-mapping/*.cpp"]),
2687    stamp = 0,
2688    deps = [
2689        ":ast",
2690        ":basic",
2691        ":crosstu",
2692        ":frontend",
2693        ":tooling",
2694        "//llvm:Support",
2695    ],
2696)
2697
2698gentbl(
2699    name = "ScanDepsTableGen",
2700    strip_include_prefix = "tools/clang-scan-deps",
2701    tbl_outs = [(
2702        "-gen-opt-parser-defs",
2703        "tools/clang-scan-deps/Opts.inc",
2704    )],
2705    tblgen = "//llvm:llvm-tblgen",
2706    td_file = "tools/clang-scan-deps/Opts.td",
2707    td_srcs = ["//llvm:include/llvm/Option/OptParser.td"],
2708)
2709
2710cc_library(
2711    name = "clang-scan-deps-lib",
2712    srcs = glob(["tools/clang-scan-deps/*.cpp"]),
2713    deps = [
2714        ":ScanDepsTableGen",
2715        ":driver",
2716        ":frontend",
2717        ":tooling",
2718        ":tooling_dependency_scanning",
2719        "//llvm:Support",
2720        "//llvm:TargetParser",
2721    ],
2722)
2723
2724llvm_driver_cc_binary(
2725    name = "clang-scan-deps",
2726    stamp = 0,
2727    deps = [":clang-scan-deps-lib"],
2728)
2729
2730cc_library(
2731    name = "extract_api",
2732    srcs = glob([
2733        "lib/ExtractAPI/**/*.cpp",
2734    ]),
2735    hdrs = glob([
2736        "include/clang/ExtractAPI/**/*.h",
2737    ]) + [
2738        "include/clang/ExtractAPI/APIRecords.inc",
2739    ],
2740    includes = ["include"],
2741    deps = [
2742        ":ast",
2743        ":basic",
2744        ":frontend",
2745        ":index",
2746        ":install_api",
2747        ":lex",
2748        "//llvm:Option",
2749        "//llvm:Support",
2750        "//llvm:TargetParser",
2751    ],
2752)
2753
2754cc_binary(
2755    name = "clang-fuzzer-dictionary",
2756    srcs = ["tools/clang-fuzzer/dictionary/dictionary.c"],
2757    deps = [":basic"],
2758)
2759
2760genrule(
2761    name = "fuzzer-dictionary",
2762    outs = ["fuzzer-dictionary.txt"],
2763    cmd = "$(location :clang-fuzzer-dictionary) > $@",
2764    tools = [":clang-fuzzer-dictionary"],
2765)
2766
2767cc_library(
2768    name = "handle-cxx",
2769    srcs = ["tools/clang-fuzzer/handle-cxx/handle_cxx.cpp"],
2770    hdrs = ["tools/clang-fuzzer/handle-cxx/handle_cxx.h"],
2771    deps = [
2772        ":codegen",
2773        ":frontend",
2774        ":lex",
2775        ":tooling",
2776        "//llvm:Option",
2777        "//llvm:Support",
2778    ],
2779)
2780
2781proto_library(
2782    name = "cxx-proto",
2783    srcs = ["tools/clang-fuzzer/cxx_proto.proto"],
2784)
2785
2786cc_proto_library(
2787    name = "cxx_cc_proto",
2788    deps = [":cxx-proto"],
2789)
2790
2791cc_library(
2792    name = "proto-to-cxx-lib",
2793    srcs = ["tools/clang-fuzzer/proto-to-cxx/proto_to_cxx.cpp"],
2794    hdrs = ["tools/clang-fuzzer/proto-to-cxx/proto_to_cxx.h"],
2795    includes = ["tools/clang-fuzzer"],
2796    deps = [":cxx_cc_proto"],
2797)
2798
2799cc_binary(
2800    name = "clang-proto-to-cxx",
2801    srcs = ["tools/clang-fuzzer/proto-to-cxx/proto_to_cxx_main.cpp"],
2802    deps = [":proto-to-cxx-lib"],
2803)
2804
2805cc_library(
2806    name = "clang-fuzzer-initialize",
2807    srcs = ["tools/clang-fuzzer/fuzzer-initialize/fuzzer_initialize.cpp"],
2808    hdrs = ["tools/clang-fuzzer/fuzzer-initialize/fuzzer_initialize.h"],
2809    deps = [
2810        "//llvm:Core",
2811        "//llvm:Support",
2812    ],
2813)
2814