6cb8889bf50ff5493b9e8f79dd8a1e4e8622c16c
[platform/upstream/llvm.git] / utils / bazel / llvm-project-overlay / clang / BUILD.bazel
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
5 load("//llvm:tblgen.bzl", "gentbl")
6 load("//llvm:binary_alias.bzl", "binary_alias")
7 load("//llvm:cc_plugin_library.bzl", "cc_plugin_library")
8 load("//llvm:template_rule.bzl", "template_rule")
9
10 package(
11     default_visibility = ["//visibility:public"],
12     licenses = ["notice"],
13 )
14
15 exports_files([
16     "tools/clang-format/clang-format.el",
17     "tools/clang-format/clang-format-test.el",
18     "tools/clang-format/clang-format.py",
19     "tools/clang-rename/clang-rename.el",
20     "tools/extra/clang-include-fixer/tool/clang-include-fixer.el",
21     "tools/extra/clang-include-fixer/tool/clang-include-fixer-test.el",
22 ])
23
24 cc_binary(
25     name = "clang-tblgen",
26     srcs = glob([
27         "utils/TableGen/*.cpp",
28         "utils/TableGen/*.h",
29     ]),
30     copts = [
31         "$(STACK_FRAME_UNLIMITED)",
32     ],
33     stamp = 0,
34     deps = [
35         ":support",
36         "//llvm:Support",
37         "//llvm:TableGen",
38         "//llvm:config",
39     ],
40 )
41
42 gentbl(
43     name = "diagnostic_defs_gen",
44     tbl_outs = [(
45         "-gen-clang-diags-defs -clang-component=%s" % c,
46         "include/clang/Basic/Diagnostic%sKinds.inc" % c,
47     ) for c in [
48         "AST",
49         "Analysis",
50         "Comment",
51         "Common",
52         "CrossTU",
53         "Driver",
54         "Frontend",
55         "Lex",
56         "Parse",
57         "Refactoring",
58         "Sema",
59         "Serialization",
60     ]] + [
61         (
62             "-gen-clang-diag-groups",
63             "include/clang/Basic/DiagnosticGroups.inc",
64         ),
65         (
66             "-gen-clang-diags-index-name",
67             "include/clang/Basic/DiagnosticIndexName.inc",
68         ),
69     ],
70     tblgen = ":clang-tblgen",
71     td_file = "include/clang/Basic/Diagnostic.td",
72     td_srcs = glob(["include/clang/Basic/*.td"]),
73 )
74
75 gentbl(
76     name = "basic_arm_neon_inc_gen",
77     tbl_outs = [(
78         "-gen-arm-neon-sema",
79         "include/clang/Basic/arm_neon.inc",
80     )],
81     tblgen = ":clang-tblgen",
82     td_file = "include/clang/Basic/arm_neon.td",
83     td_srcs = [
84         "include/clang/Basic/arm_neon.td",
85         "include/clang/Basic/arm_neon_incl.td",
86     ],
87 )
88
89 gentbl(
90     name = "basic_arm_fp16_inc_gen",
91     tbl_outs = [(
92         "-gen-arm-neon-sema",
93         "include/clang/Basic/arm_fp16.inc",
94     )],
95     tblgen = ":clang-tblgen",
96     td_file = "include/clang/Basic/arm_fp16.td",
97     td_srcs = [
98         "include/clang/Basic/arm_fp16.td",
99         "include/clang/Basic/arm_neon_incl.td",
100     ],
101 )
102
103 gentbl(
104     name = "basic_arm_mve_aliases_gen",
105     tbl_outs = [(
106         "-gen-arm-mve-builtin-aliases",
107         "include/clang/Basic/arm_mve_builtin_aliases.inc",
108     )],
109     tblgen = ":clang-tblgen",
110     td_file = "include/clang/Basic/arm_mve.td",
111     td_srcs = [
112         "include/clang/Basic/arm_mve.td",
113         "include/clang/Basic/arm_mve_defs.td",
114     ],
115 )
116
117 gentbl(
118     name = "basic_arm_sve_builtins_gen",
119     tbl_outs = [(
120         "-gen-arm-sve-builtins",
121         "include/clang/Basic/arm_sve_builtins.inc",
122     )],
123     tblgen = ":clang-tblgen",
124     td_file = "include/clang/Basic/arm_sve.td",
125     td_srcs = [
126         "include/clang/Basic/arm_sve.td",
127     ],
128 )
129
130 gentbl(
131     name = "basic_arm_sve_builtin_cg_gen",
132     tbl_outs = [(
133         "-gen-arm-sve-builtin-codegen",
134         "include/clang/Basic/arm_sve_builtin_cg.inc",
135     )],
136     tblgen = ":clang-tblgen",
137     td_file = "include/clang/Basic/arm_sve.td",
138     td_srcs = [
139         "include/clang/Basic/arm_sve.td",
140     ],
141 )
142
143 gentbl(
144     name = "basic_arm_sve_typeflags_gen",
145     tbl_outs = [(
146         "-gen-arm-sve-typeflags",
147         "include/clang/Basic/arm_sve_typeflags.inc",
148     )],
149     tblgen = ":clang-tblgen",
150     td_file = "include/clang/Basic/arm_sve.td",
151     td_srcs = [
152         "include/clang/Basic/arm_sve.td",
153     ],
154 )
155
156 gentbl(
157     name = "basic_arm_sve_sema_rangechecks_gen",
158     tbl_outs = [(
159         "-gen-arm-sve-sema-rangechecks",
160         "include/clang/Basic/arm_sve_sema_rangechecks.inc",
161     )],
162     tblgen = ":clang-tblgen",
163     td_file = "include/clang/Basic/arm_sve.td",
164     td_srcs = [
165         "include/clang/Basic/arm_sve.td",
166     ],
167 )
168
169 gentbl(
170     name = "basic_arm_mve_cg_gen",
171     tbl_outs = [(
172         "-gen-arm-mve-builtin-codegen",
173         "include/clang/Basic/arm_mve_builtin_cg.inc",
174     )],
175     tblgen = ":clang-tblgen",
176     td_file = "include/clang/Basic/arm_mve.td",
177     td_srcs = [
178         "include/clang/Basic/arm_mve.td",
179         "include/clang/Basic/arm_mve_defs.td",
180     ],
181 )
182
183 gentbl(
184     name = "basic_arm_mve_inc_gen",
185     tbl_outs = [(
186         "-gen-arm-mve-builtin-def",
187         "include/clang/Basic/arm_mve_builtins.inc",
188     )],
189     tblgen = ":clang-tblgen",
190     td_file = "include/clang/Basic/arm_mve.td",
191     td_srcs = [
192         "include/clang/Basic/arm_mve.td",
193         "include/clang/Basic/arm_mve_defs.td",
194     ],
195 )
196
197 gentbl(
198     name = "basic_arm_mve_sema_gen",
199     tbl_outs = [(
200         "-gen-arm-mve-builtin-sema",
201         "include/clang/Basic/arm_mve_builtin_sema.inc",
202     )],
203     tblgen = ":clang-tblgen",
204     td_file = "include/clang/Basic/arm_mve.td",
205     td_srcs = [
206         "include/clang/Basic/arm_mve.td",
207         "include/clang/Basic/arm_mve_defs.td",
208     ],
209 )
210
211 gentbl(
212     name = "basic_riscv_vector_builtins_gen",
213     tbl_outs = [(
214         "-gen-riscv-vector-builtins",
215         "include/clang/Basic/riscv_vector_builtins.inc",
216     )],
217     tblgen = ":clang-tblgen",
218     td_file = "include/clang/Basic/riscv_vector.td",
219     td_srcs = [
220         "include/clang/Basic/riscv_vector.td",
221     ],
222 )
223
224 gentbl(
225     name = "basic_riscv_vector_builtin_cg_gen",
226     tbl_outs = [(
227         "-gen-riscv-vector-builtin-codegen",
228         "include/clang/Basic/riscv_vector_builtin_cg.inc",
229     )],
230     tblgen = ":clang-tblgen",
231     td_file = "include/clang/Basic/riscv_vector.td",
232     td_srcs = [
233         "include/clang/Basic/riscv_vector.td",
234     ],
235 )
236
237 gentbl(
238     name = "basic_riscv_vector_builtin_sema_gen",
239     tbl_outs = [(
240         "-gen-riscv-vector-builtin-sema",
241         "include/clang/Basic/riscv_vector_builtin_sema.inc",
242     )],
243     tblgen = ":clang-tblgen",
244     td_file = "include/clang/Basic/riscv_vector.td",
245     td_srcs = [
246         "include/clang/Basic/riscv_vector.td",
247     ],
248 )
249
250 gentbl(
251     name = "basic_arm_cde_gen",
252     tbl_outs = [(
253         "-gen-arm-cde-builtin-def",
254         "include/clang/Basic/arm_cde_builtins.inc",
255     )],
256     tblgen = ":clang-tblgen",
257     td_file = "include/clang/Basic/arm_cde.td",
258     td_srcs = [
259         "include/clang/Basic/arm_cde.td",
260         "include/clang/Basic/arm_mve_defs.td",
261     ],
262 )
263
264 gentbl(
265     name = "basic_arm_cde_aliases_gen",
266     tbl_outs = [(
267         "-gen-arm-cde-builtin-aliases",
268         "include/clang/Basic/arm_cde_builtin_aliases.inc",
269     )],
270     tblgen = ":clang-tblgen",
271     td_file = "include/clang/Basic/arm_cde.td",
272     td_srcs = [
273         "include/clang/Basic/arm_cde.td",
274         "include/clang/Basic/arm_mve_defs.td",
275     ],
276 )
277
278 gentbl(
279     name = "basic_arm_cde_cg_gen",
280     tbl_outs = [(
281         "-gen-arm-cde-builtin-codegen",
282         "include/clang/Basic/arm_cde_builtin_cg.inc",
283     )],
284     tblgen = ":clang-tblgen",
285     td_file = "include/clang/Basic/arm_cde.td",
286     td_srcs = [
287         "include/clang/Basic/arm_cde.td",
288         "include/clang/Basic/arm_mve_defs.td",
289     ],
290 )
291
292 gentbl(
293     name = "basic_arm_cde_sema_gen",
294     tbl_outs = [(
295         "-gen-arm-cde-builtin-sema",
296         "include/clang/Basic/arm_cde_builtin_sema.inc",
297     )],
298     tblgen = ":clang-tblgen",
299     td_file = "include/clang/Basic/arm_cde.td",
300     td_srcs = [
301         "include/clang/Basic/arm_cde.td",
302         "include/clang/Basic/arm_mve_defs.td",
303     ],
304 )
305
306 gentbl(
307     name = "basic_attr_gen",
308     tbl_outs = [
309         (
310             "-gen-clang-attr-has-attribute-impl",
311             "include/clang/Basic/AttrHasAttributeImpl.inc",
312         ),
313         (
314             "-gen-clang-attr-list",
315             "include/clang/Basic/AttrList.inc",
316         ),
317         (
318             "-gen-clang-attr-subject-match-rule-list",
319             "include/clang/Basic/AttrSubMatchRulesList.inc",
320         ),
321     ],
322     tblgen = ":clang-tblgen",
323     td_file = "include/clang/Basic/Attr.td",
324     td_srcs = [
325         "include/clang/Basic/ASTNode.td",
326         "include/clang/Basic/Attr.td",
327         "include/clang/Basic/AttrDocs.td",
328         "include/clang/Basic/DeclNodes.td",
329         "include/clang/Basic/StmtNodes.td",
330     ],
331 )
332
333 gentbl(
334     name = "libsema_openclbuiltins_inc_gen",
335     strip_include_prefix = "lib/Sema",
336     tbl_outs = [(
337         "-gen-clang-opencl-builtins",
338         "lib/Sema/OpenCLBuiltins.inc",
339     )],
340     tblgen = ":clang-tblgen",
341     td_file = "lib/Sema/OpenCLBuiltins.td",
342     td_srcs = [
343         "lib/Sema/OpenCLBuiltins.td",
344     ],
345 )
346
347 # Table definition files can be used for documentation:
348 filegroup(
349     name = "all_table_defs",
350     srcs = glob(["include/**/*.td"]),
351 )
352
353 exports_files(
354     glob(["include/**/*.td"]),
355 )
356
357 genrule(
358     name = "basic_version_gen",
359     outs = ["include/clang/Basic/Version.inc"],
360     cmd = (
361         "echo '#define CLANG_VERSION 15.0.3' >> $@\n" +
362         "echo '#define CLANG_VERSION_MAJOR 15' >> $@\n" +
363         "echo '#define CLANG_VERSION_MINOR 0' >> $@\n" +
364         "echo '#define CLANG_VERSION_PATCHLEVEL 3' >> $@\n" +
365         "echo '#define CLANG_VERSION_STRING \"15.0.3\"' >> $@\n"
366     ),
367 )
368
369 cc_library(
370     name = "config",
371     hdrs = [
372         "include/clang/Basic/Version.inc",
373         "include/clang/Config/config.h",
374     ],
375     includes = ["include"],
376     deps = [
377         # We rely on the LLVM config library to provide configuration defines.
378         "//llvm:config",
379     ],
380 )
381
382 # TODO: This should get replaced with something that actually generates the
383 # correct version number.
384 genrule(
385     name = "vcs_version_gen",
386     # This should be under lib/Basic, but because of how the include paths
387     # are passed through bazel, it's easier to drop generated files next to
388     # the other includes.
389     outs = ["include/VCSVersion.inc"],
390     cmd = "echo '#undef CLANG_REVISION' > $@",
391 )
392
393 # A hacky library to expose some internal headers of the `basic` library to its
394 # own implementation source files using a stripped include prefix rather than
395 # file-relative-inclusion. This is inherently non-modular as these headers will
396 # be repeated in the sources below for file-relative-inclusion.
397 cc_library(
398     name = "basic_internal_headers",
399     hdrs = glob([
400         "lib/Basic/*.h",
401     ]),
402     features = ["-header_modules"],
403     strip_include_prefix = "lib/Basic",
404 )
405
406 cc_library(
407     name = "basic",
408     srcs = [
409         "include/clang/Basic/Version.inc",
410         "include/VCSVersion.inc",
411     ] + glob([
412         "lib/Basic/*.cpp",
413         "lib/Basic/*.c",
414         "lib/Basic/*.h",
415         "lib/Basic/Targets/*.cpp",
416         "lib/Basic/Targets/*.h",
417     ]),
418     hdrs = glob([
419         "include/clang/Basic/*.h",
420     ]),
421     copts = [
422         "-DHAVE_VCS_VERSION_INC",
423         "$(STACK_FRAME_UNLIMITED)",
424     ],
425     includes = ["include"],
426     textual_hdrs = [
427         "include/clang/Basic/arm_fp16.inc",
428         "include/clang/Basic/arm_mve_builtins.inc",
429         "include/clang/Basic/arm_mve_builtin_aliases.inc",
430         "include/clang/Basic/arm_mve_builtin_cg.inc",
431         "include/clang/Basic/arm_mve_builtin_sema.inc",
432         "include/clang/Basic/arm_neon.inc",
433         "include/clang/Basic/AttrHasAttributeImpl.inc",
434         "include/clang/Basic/AttrList.inc",
435         "include/clang/Basic/AttrSubMatchRulesList.inc",
436         "include/clang/Basic/DiagnosticASTKinds.inc",
437         "include/clang/Basic/DiagnosticGroups.inc",
438         "include/clang/Basic/DiagnosticRefactoringKinds.inc",
439         "include/clang/Basic/DiagnosticAnalysisKinds.inc",
440         "include/clang/Basic/DiagnosticSemaKinds.inc",
441         "include/clang/Basic/DiagnosticCommentKinds.inc",
442         "include/clang/Basic/DiagnosticParseKinds.inc",
443         "include/clang/Basic/DiagnosticLexKinds.inc",
444         "include/clang/Basic/DiagnosticSerializationKinds.inc",
445         "include/clang/Basic/DiagnosticFrontendKinds.inc",
446         "include/clang/Basic/DiagnosticDriverKinds.inc",
447         "include/clang/Basic/DiagnosticCrossTUKinds.inc",
448         "include/clang/Basic/DiagnosticCommonKinds.inc",
449         "include/clang/Basic/DiagnosticIndexName.inc",
450     ] + glob([
451         "include/clang/Basic/*.def",
452     ]),
453     deps = [
454         ":basic_arm_cde_gen",
455         ":basic_arm_fp16_inc_gen",
456         ":basic_arm_mve_aliases_gen",
457         ":basic_arm_mve_cg_gen",
458         ":basic_arm_mve_inc_gen",
459         ":basic_arm_mve_sema_gen",
460         ":basic_arm_neon_inc_gen",
461         ":basic_arm_sve_builtins_gen",
462         ":basic_arm_sve_typeflags_gen",
463         ":basic_attr_gen",
464         ":basic_internal_headers",
465         ":basic_riscv_vector_builtin_cg_gen",
466         ":basic_riscv_vector_builtins_gen",
467         ":config",
468         ":diagnostic_defs_gen",
469         ":sema_attr_gen",
470         "//llvm:Core",
471         "//llvm:FrontendOpenMP",
472         "//llvm:Instrumentation",
473         "//llvm:MC",
474         "//llvm:Support",
475         "//llvm:Target",
476         "//llvm:config",
477     ],
478 )
479
480 cc_library(
481     name = "lex",
482     srcs = glob([
483         "lib/Lex/*.cpp",
484         "lib/Lex/*.h",
485     ]),
486     hdrs = glob([
487         "include/clang/Lex/*.h",
488     ]),
489     includes = ["include"],
490     deps = [
491         ":basic",
492         ":config",
493         "//llvm:Support",
494     ],
495 )
496
497 gentbl(
498     name = "ast_attr_gen",
499     tbl_outs = [
500         (
501             "-gen-clang-attr-ast-visitor",
502             "include/clang/AST/AttrVisitor.inc",
503         ),
504         (
505             "-gen-clang-attr-classes",
506             "include/clang/AST/Attrs.inc",
507         ),
508         (
509             "-gen-clang-attr-doc-table",
510             "lib/AST/AttrDocTable.inc",
511         ),
512         (
513             "-gen-clang-attr-text-node-dump",
514             "include/clang/AST/AttrTextNodeDump.inc",
515         ),
516         (
517             "-gen-clang-attr-node-traverse",
518             "include/clang/AST/AttrNodeTraverse.inc",
519         ),
520         (
521             "-gen-clang-attr-impl",
522             "include/clang/AST/AttrImpl.inc",
523         ),
524     ],
525     tblgen = ":clang-tblgen",
526     td_file = "include/clang/Basic/Attr.td",
527     td_srcs = [
528         "include/clang/Basic/Attr.td",
529         "include/clang/Basic/AttrDocs.td",
530         "include/clang/Basic/ASTNode.td",
531         "include/clang/Basic/DeclNodes.td",
532         "include/clang/Basic/StmtNodes.td",
533     ],
534 )
535
536 gentbl(
537     name = "ast_decl_nodes_gen",
538     tbl_outs = [(
539         "-gen-clang-decl-nodes",
540         "include/clang/AST/DeclNodes.inc",
541     )],
542     tblgen = ":clang-tblgen",
543     td_file = "include/clang/Basic/DeclNodes.td",
544     td_srcs = [
545         "include/clang/Basic/ASTNode.td",
546         "include/clang/Basic/DeclNodes.td",
547     ],
548 )
549
550 gentbl(
551     name = "ast_stmt_nodes_gen",
552     tbl_outs = [(
553         "-gen-clang-stmt-nodes",
554         "include/clang/AST/StmtNodes.inc",
555     )],
556     tblgen = ":clang-tblgen",
557     td_file = "include/clang/Basic/StmtNodes.td",
558     td_srcs = [
559         "include/clang/Basic/ASTNode.td",
560         "include/clang/Basic/StmtNodes.td",
561     ],
562 )
563
564 gentbl(
565     name = "ast_comment_nodes_gen",
566     tbl_outs = [(
567         "-gen-clang-comment-nodes",
568         "include/clang/AST/CommentNodes.inc",
569     )],
570     tblgen = ":clang-tblgen",
571     td_file = "include/clang/Basic/CommentNodes.td",
572     td_srcs = [
573         "include/clang/Basic/ASTNode.td",
574         "include/clang/Basic/CommentNodes.td",
575     ],
576 )
577
578 gentbl(
579     name = "ast_comment_command_info_gen",
580     tbl_outs = [
581         (
582             "-gen-clang-comment-command-info",
583             "include/clang/AST/CommentCommandInfo.inc",
584         ),
585         (
586             "-gen-clang-comment-command-list",
587             "include/clang/AST/CommentCommandList.inc",
588         ),
589     ],
590     tblgen = ":clang-tblgen",
591     td_file = "include/clang/AST/CommentCommands.td",
592     td_srcs = ["include/clang/AST/CommentCommands.td"],
593 )
594
595 gentbl(
596     name = "ast_comment_html_tags_gen",
597     tbl_outs = [(
598         "-gen-clang-comment-html-tags",
599         "include/clang/AST/CommentHTMLTags.inc",
600     )],
601     tblgen = ":clang-tblgen",
602     td_file = "include/clang/AST/CommentHTMLTags.td",
603     td_srcs = ["include/clang/AST/CommentHTMLTags.td"],
604 )
605
606 gentbl(
607     name = "ast_comment_html_tags_properties_gen",
608     tbl_outs = [(
609         "-gen-clang-comment-html-tags-properties",
610         "include/clang/AST/CommentHTMLTagsProperties.inc",
611     )],
612     tblgen = ":clang-tblgen",
613     td_file = "include/clang/AST/CommentHTMLTags.td",
614     td_srcs = ["include/clang/AST/CommentHTMLTags.td"],
615 )
616
617 gentbl(
618     name = "ast_comment_html_named_character_references_gen",
619     tbl_outs = [(
620         "-gen-clang-comment-html-named-character-references",
621         "include/clang/AST/CommentHTMLNamedCharacterReferences.inc",
622     )],
623     tblgen = ":clang-tblgen",
624     td_file = "include/clang/AST/CommentHTMLNamedCharacterReferences.td",
625     td_srcs = ["include/clang/AST/CommentHTMLNamedCharacterReferences.td"],
626 )
627
628 gentbl(
629     name = "ast_stmt_data_collectors_gen",
630     tbl_outs = [(
631         "-gen-clang-data-collectors",
632         "include/clang/AST/StmtDataCollectors.inc",
633     )],
634     tblgen = ":clang-tblgen",
635     td_file = "include/clang/AST/StmtDataCollectors.td",
636     td_srcs = ["include/clang/AST/StmtDataCollectors.td"],
637 )
638
639 gentbl(
640     name = "ast_interp_opcodes_gen",
641     tbl_outs = [(
642         "-gen-clang-opcodes",
643         "lib/AST/Interp/Opcodes.inc",
644     )],
645     tblgen = ":clang-tblgen",
646     td_file = "lib/AST/Interp/Opcodes.td",
647     td_srcs = ["lib/AST/Interp/Opcodes.td"],
648 )
649
650 gentbl(
651     name = "ast_properties_base_gen",
652     tbl_outs = [
653         (
654             "-gen-clang-basic-reader",
655             "include/clang/AST/AbstractBasicReader.inc",
656         ),
657         (
658             "-gen-clang-basic-writer",
659             "include/clang/AST/AbstractBasicWriter.inc",
660         ),
661     ],
662     tblgen = ":clang-tblgen",
663     td_file = "include/clang/AST/PropertiesBase.td",
664     td_srcs = ["include/clang/AST/PropertiesBase.td"],
665 )
666
667 gentbl(
668     name = "ast_type_properties_gen",
669     tbl_outs = [
670         (
671             "-gen-clang-type-reader",
672             "include/clang/AST/AbstractTypeReader.inc",
673         ),
674         (
675             "-gen-clang-type-writer",
676             "include/clang/AST/AbstractTypeWriter.inc",
677         ),
678     ],
679     tblgen = ":clang-tblgen",
680     td_file = "include/clang/AST/TypeProperties.td",
681     td_srcs = [
682         "include/clang/AST/PropertiesBase.td",
683         "include/clang/AST/TypeProperties.td",
684         "include/clang/Basic/ASTNode.td",
685         "include/clang/Basic/TypeNodes.td",
686     ],
687 )
688
689 gentbl(
690     name = "type_nodes_gen",
691     tbl_outs = [(
692         "-gen-clang-type-nodes",
693         "include/clang/AST/TypeNodes.inc",
694     )],
695     tblgen = ":clang-tblgen",
696     td_file = "include/clang/Basic/TypeNodes.td",
697     td_srcs = [
698         "include/clang/Basic/ASTNode.td",
699         "include/clang/Basic/TypeNodes.td",
700     ],
701 )
702
703 cc_library(
704     name = "ast",
705     srcs = glob([
706         "lib/AST/*.cpp",
707         "lib/AST/*.h",
708         "lib/AST/Interp/*.cpp",
709         "lib/AST/Interp/*.h",
710     ]) + [
711         "lib/AST/AttrDocTable.inc",
712         "lib/AST/Interp/Opcodes.inc",
713     ],
714     hdrs = glob([
715         "include/clang/AST/*.h",
716     ]),
717     copts = [
718         # FIXME: This is necessary to allow "file relative" include paths from
719         # non-generated `srcs` to find generated `srcs` above. Bazel should
720         # either make this work automatically by creating a unified tree of
721         # `srcs` or at least provide a `local_includes` that has the path
722         # translation logic of `includes` but is only used locally (similar to
723         # `local_defines` vs. `defines`). Until one of those lands, this is the
724         # least bad approach. Using `includes` is *specifically* problematic for
725         # this library because it contains files that collide easily with system
726         # headers such as `CXXABI.h`.
727         "-I$(GENDIR)/external/llvm-project/clang/lib/AST",
728         "-I$(GENDIR)/external/llvm-project/clang/lib/AST/Interp",
729     ],
730     textual_hdrs = [
731         "include/clang/AST/AttrImpl.inc",
732         "include/clang/AST/AttrNodeTraverse.inc",
733         "include/clang/AST/Attrs.inc",
734         "include/clang/AST/AttrTextNodeDump.inc",
735         "include/clang/AST/AttrVisitor.inc",
736         "include/clang/AST/CommentCommandInfo.inc",
737         "include/clang/AST/CommentCommandList.inc",
738         "include/clang/AST/CommentHTMLNamedCharacterReferences.inc",
739         "include/clang/AST/CommentHTMLTags.inc",
740         "include/clang/AST/CommentHTMLTagsProperties.inc",
741         "include/clang/AST/CommentNodes.inc",
742         "include/clang/AST/DeclNodes.inc",
743         "include/clang/AST/StmtDataCollectors.inc",
744         "include/clang/AST/StmtNodes.inc",
745     ] + glob([
746         "include/clang/AST/*.def",
747     ]),
748     deps = [
749         ":ast_attr_gen",
750         ":ast_comment_command_info_gen",
751         ":ast_comment_html_named_character_references_gen",
752         ":ast_comment_html_tags_gen",
753         ":ast_comment_html_tags_properties_gen",
754         ":ast_comment_nodes_gen",
755         ":ast_decl_nodes_gen",
756         ":ast_interp_opcodes_gen",
757         ":ast_properties_base_gen",
758         ":ast_stmt_data_collectors_gen",
759         ":ast_stmt_nodes_gen",
760         ":ast_type_properties_gen",
761         ":basic",
762         ":lex",
763         ":type_nodes_gen",
764         "//llvm:BinaryFormat",
765         "//llvm:Core",
766         "//llvm:FrontendOpenMP",
767         "//llvm:Support",
768     ],
769 )
770
771 cc_library(
772     name = "index",
773     srcs = glob([
774         "lib/Index/*.cpp",
775         "lib/Index/*.h",
776     ]),
777     hdrs = glob([
778         "include/clang/Index/*.h",
779         "include/clang-c/*.h",
780     ]),
781     includes = ["include"],
782     deps = [
783         ":ast",
784         ":basic",
785         ":format",
786         ":frontend",
787         ":lex",
788         ":rewrite",
789         ":serialization",
790         "//llvm:Core",
791         "//llvm:Support",
792     ],
793 )
794
795 cc_library(
796     name = "analysis",
797     srcs = glob([
798         "lib/Analysis/FlowSensitive/Models/*.cpp",
799         "lib/Analysis/FlowSensitive/*.cpp",
800         "lib/Analysis/*.cpp",
801         "lib/Analysis/*.h",
802     ]),
803     hdrs = glob([
804         "include/clang/Analysis/**/*.h",
805     ]),
806     includes = ["include"],
807     textual_hdrs = glob([
808         "include/clang/Analysis/**/*.def",
809     ]),
810     deps = [
811         ":ast",
812         ":ast_matchers",
813         ":basic",
814         ":lex",
815         "//llvm:Support",
816     ],
817 )
818
819 gentbl(
820     name = "sema_attr_gen",
821     tbl_outs = [
822         (
823             "-gen-clang-attr-parsed-attr-impl",
824             "include/clang/Sema/AttrParsedAttrImpl.inc",
825         ),
826         (
827             "-gen-clang-attr-parsed-attr-kinds",
828             "include/clang/Sema/AttrParsedAttrKinds.inc",
829         ),
830         (
831             "-gen-clang-attr-parsed-attr-list",
832             "include/clang/Sema/AttrParsedAttrList.inc",
833         ),
834         (
835             "-gen-clang-attr-spelling-index",
836             "include/clang/Sema/AttrSpellingListIndex.inc",
837         ),
838         (
839             "-gen-clang-attr-template-instantiate",
840             "include/clang/Sema/AttrTemplateInstantiate.inc",
841         ),
842     ],
843     tblgen = ":clang-tblgen",
844     td_file = "include/clang/Basic/Attr.td",
845     td_srcs = [
846         "include/clang/Basic/ASTNode.td",
847         "include/clang/Basic/Attr.td",
848         "include/clang/Basic/AttrDocs.td",
849         "include/clang/Basic/DeclNodes.td",
850         "include/clang/Basic/StmtNodes.td",
851     ],
852 )
853
854 cc_library(
855     name = "sema",
856     srcs = glob([
857         "lib/Sema/*.cpp",
858         "lib/Sema/*.h",
859     ]),
860     hdrs = glob([
861         "include/clang/Sema/*.h",
862         "include/clang-c/*.h",
863     ]),
864     copts = ["$(STACK_FRAME_UNLIMITED)"],
865     includes = ["include"],
866     textual_hdrs = [
867         "include/clang/Sema/AttrParsedAttrImpl.inc",
868         "include/clang/Sema/AttrParsedAttrKinds.inc",
869         "include/clang/Sema/AttrParsedAttrList.inc",
870         "include/clang/Sema/AttrSpellingListIndex.inc",
871         "include/clang/Sema/AttrTemplateInstantiate.inc",
872         "lib/Sema/OpenCLBuiltins.inc",
873     ],
874     deps = [
875         ":analysis",
876         ":ast",
877         ":basic",
878         ":basic_arm_cde_aliases_gen",
879         ":basic_arm_cde_sema_gen",
880         ":basic_arm_sve_builtins_gen",
881         ":basic_arm_sve_sema_rangechecks_gen",
882         ":basic_riscv_vector_builtin_sema_gen",
883         ":edit",
884         ":lex",
885         ":libsema_openclbuiltins_inc_gen",
886         ":sema_attr_gen",
887         ":support",
888         ":type_nodes_gen",
889         "//llvm:AllTargetsAsmParsers",
890         "//llvm:AllTargetsCodeGens",
891         "//llvm:Core",
892         "//llvm:FrontendOpenMP",
893         "//llvm:MC",
894         "//llvm:MCParser",
895         "//llvm:Support",
896     ],
897 )
898
899 gentbl(
900     name = "parse_attr_gen",
901     tbl_outs = [
902         (
903             "-gen-clang-attr-parser-string-switches",
904             "include/clang/Parse/AttrParserStringSwitches.inc",
905         ),
906         (
907             "-gen-clang-attr-subject-match-rules-parser-string-switches",
908             "include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc",
909         ),
910     ],
911     tblgen = ":clang-tblgen",
912     td_file = "include/clang/Basic/Attr.td",
913     td_srcs = [
914         "include/clang/Basic/ASTNode.td",
915         "include/clang/Basic/Attr.td",
916         "include/clang/Basic/AttrDocs.td",
917         "include/clang/Basic/DeclNodes.td",
918         "include/clang/Basic/StmtNodes.td",
919     ],
920 )
921
922 cc_library(
923     name = "parse",
924     srcs = [
925     ] + glob([
926         "lib/Parse/*.cpp",
927         "lib/Parse/*.h",
928     ]),
929     hdrs = [
930         "include/clang/Parse/AttrParserStringSwitches.inc",
931         "include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc",
932     ] + glob(["include/clang/Parse/*.h"]),
933     includes = ["include"],
934     deps = [
935         ":ast",
936         ":basic",
937         ":lex",
938         ":parse_attr_gen",
939         ":sema",
940         "//llvm:FrontendOpenMP",
941         "//llvm:MC",
942         "//llvm:MCParser",
943         "//llvm:Support",
944     ],
945 )
946
947 cc_library(
948     name = "ast_matchers",
949     srcs = glob([
950         "lib/ASTMatchers/*.cpp",
951         "lib/ASTMatchers/*.h",
952     ]),
953     hdrs = glob(["include/clang/ASTMatchers/*.h"]),
954     includes = ["include"],
955     deps = [
956         ":ast",
957         ":basic",
958         ":lex",
959         "//llvm:Support",
960     ],
961 )
962
963 cc_library(
964     name = "ast_matchers_dynamic",
965     srcs = glob([
966         "lib/ASTMatchers/Dynamic/*.cpp",
967         "lib/ASTMatchers/Dynamic/*.h",
968     ]),
969     hdrs = glob(["include/clang/ASTMatchers/Dynamic/*.h"]),
970     copts = ["$(STACK_FRAME_UNLIMITED)"],
971     includes = ["include"],
972     deps = [
973         ":ast",
974         ":ast_matchers",
975         ":basic",
976         "//llvm:FrontendOpenMP",
977         "//llvm:Support",
978     ],
979 )
980
981 cc_library(
982     name = "rewrite",
983     srcs = glob([
984         "lib/Rewrite/*.cpp",
985         "lib/Rewrite/*.h",
986     ]),
987     hdrs = glob(["include/clang/Rewrite/Core/*.h"]),
988     includes = ["include"],
989     deps = [
990         ":ast",
991         ":basic",
992         ":edit",
993         ":lex",
994         "//llvm:Support",
995     ],
996 )
997
998 cc_library(
999     name = "testing",
1000     testonly = 1,
1001     srcs = glob([
1002         "lib/Testing/*.cpp",
1003     ]),
1004     hdrs = glob(["include/clang/Testing/*.h"]),
1005     includes = ["include"],
1006     deps = [
1007         ":basic",
1008         ":frontend",
1009         "//llvm:Support",
1010         "//llvm:gtest",
1011     ],
1012 )
1013
1014 cc_library(
1015     name = "tooling_core",
1016     srcs = glob([
1017         "lib/Tooling/Core/*.cpp",
1018         "lib/Tooling/Core/*.h",
1019     ]),
1020     hdrs = glob(["include/clang/Tooling/Core/*.h"]),
1021     includes = ["include"],
1022     deps = [
1023         ":ast",
1024         ":basic",
1025         ":lex",
1026         ":rewrite",
1027         "//llvm:Support",
1028     ],
1029 )
1030
1031 cc_library(
1032     name = "tooling",
1033     srcs = glob(
1034         [
1035             "lib/Tooling/*.cpp",
1036         ],
1037         # Temporarily disable until we support the generated file.
1038         exclude = ["lib/Tooling/NodeIntrospection.cpp"],
1039     ),
1040     hdrs = glob([
1041         "include/clang/Tooling/*.h",
1042     ]),
1043     includes = ["include"],
1044     deps = [
1045         ":ast",
1046         ":ast_matchers",
1047         ":basic",
1048         ":driver",
1049         ":format",
1050         ":frontend",
1051         ":lex",
1052         ":rewrite",
1053         ":tooling_core",
1054         "//llvm:Option",
1055         "//llvm:Support",
1056     ],
1057 )
1058
1059 cc_library(
1060     name = "tooling_inclusions",
1061     srcs = glob([
1062         "lib/Tooling/Inclusions/**/*.cpp",
1063     ]),
1064     hdrs = glob([
1065         "include/clang/Tooling/Inclusions/**/*.h",
1066         "include/clang/Tooling/Inclusions/**/*.inc",
1067     ]),
1068     deps = [
1069         ":basic",
1070         ":lex",
1071         ":rewrite",
1072         ":tooling_core",
1073         "//llvm:Support",
1074     ],
1075 )
1076
1077 cc_library(
1078     name = "tooling_refactoring",
1079     srcs = glob([
1080         "lib/Tooling/Refactoring/**/*.cpp",
1081         "lib/Tooling/Refactoring/**/*.h",
1082     ]),
1083     hdrs = glob([
1084         "include/clang/Tooling/Refactoring/**/*.h",
1085         "include/clang/Tooling/Refactoring/**/*.def",
1086     ]),
1087     deps = [
1088         ":ast",
1089         ":ast_matchers",
1090         ":basic",
1091         ":format",
1092         ":frontend",
1093         ":index",
1094         ":lex",
1095         ":rewrite",
1096         ":tooling",
1097         ":tooling_core",
1098         "//llvm:Support",
1099     ],
1100 )
1101
1102 gentbl(
1103     name = "tooling_syntax_gen",
1104     tbl_outs = [
1105         ("-gen-clang-syntax-node-list", "include/clang/Tooling/Syntax/Nodes.inc"),
1106         ("-gen-clang-syntax-node-classes", "include/clang/Tooling/Syntax/NodeClasses.inc"),
1107     ],
1108     tblgen = ":clang-tblgen",
1109     td_file = "include/clang/Tooling/Syntax/Nodes.td",
1110     td_srcs = [
1111         "include/clang/Tooling/Syntax/Nodes.td",
1112         "include/clang/Tooling/Syntax/Syntax.td",
1113     ],
1114 )
1115
1116 cc_library(
1117     name = "tooling_syntax",
1118     srcs = glob(["lib/Tooling/Syntax/**/*.cpp"]),
1119     hdrs = glob(["include/clang/Tooling/Syntax/**/*.h"]),
1120     deps = [
1121         ":ast",
1122         ":basic",
1123         ":lex",
1124         ":tooling_core",
1125         ":tooling_syntax_gen",
1126         "//llvm:Support",
1127     ],
1128 )
1129
1130 cc_library(
1131     name = "tooling_dependency_scanning",
1132     srcs = glob(["lib/Tooling/DependencyScanning/**/*.cpp"]),
1133     hdrs = glob(["include/clang/Tooling/DependencyScanning/**/*.h"]),
1134     deps = [
1135         ":basic",
1136         ":codegen",
1137         ":frontend",
1138         ":lex",
1139         ":serialization",
1140         ":tooling",
1141         "//llvm:Support",
1142     ],
1143 )
1144
1145 cc_library(
1146     name = "transformer",
1147     srcs = glob(["lib/Tooling/Transformer/**/*.cpp"]),
1148     hdrs = glob(["include/clang/Tooling/Transformer/**/*.h"]),
1149     deps = [
1150         ":ast",
1151         ":ast_matchers",
1152         ":basic",
1153         ":lex",
1154         ":rewrite",
1155         ":tooling_refactoring",
1156         "//llvm:Support",
1157     ],
1158 )
1159
1160 cc_library(
1161     name = "ast-diff",
1162     srcs = glob(["lib/Tooling/ASTDiff/*.cpp"]),
1163     hdrs = glob(["include/clang/Tooling/ASTDiff/*.h"]),
1164     deps = [
1165         ":ast",
1166         ":basic",
1167         ":lex",
1168         "//llvm:Support",
1169     ],
1170 )
1171
1172 cc_library(
1173     name = "crosstu",
1174     srcs = glob(["lib/CrossTU/*.cpp"]),
1175     hdrs = glob(["include/clang/CrossTU/*.h"]),
1176     deps = [
1177         ":ast",
1178         ":basic",
1179         ":frontend",
1180         ":index",
1181         "//llvm:Option",
1182         "//llvm:Support",
1183     ],
1184 )
1185
1186 cc_library(
1187     name = "format",
1188     srcs = glob(
1189         [
1190             "lib/Format/*.cpp",
1191             "lib/Format/*.h",
1192         ],
1193     ),
1194     hdrs = [
1195         "lib/Format/FormatTokenLexer.h",
1196         "lib/Format/Macros.h",
1197     ] + glob([
1198         "include/clang/Format/*.h",
1199     ]),
1200     includes = ["include"],
1201     deps = [
1202         ":basic",
1203         ":lex",
1204         ":tooling_core",
1205         ":tooling_inclusions",
1206         "//llvm:Support",
1207     ],
1208 )
1209
1210 cc_library(
1211     name = "edit",
1212     srcs = glob(["lib/Edit/*.cpp"]),
1213     hdrs = glob(["include/clang/Edit/*.h"]),
1214     includes = ["include"],
1215     deps = [
1216         ":ast",
1217         ":basic",
1218         ":lex",
1219         "//llvm:Support",
1220     ],
1221 )
1222
1223 cc_library(
1224     name = "static_analyzer_core_options",
1225     hdrs = [
1226         "include/clang/StaticAnalyzer/Core/AnalyzerOptions.h",
1227     ],
1228     textual_hdrs = [
1229         "include/clang/StaticAnalyzer/Core/Analyses.def",
1230         "include/clang/StaticAnalyzer/Core/AnalyzerOptions.def",
1231     ],
1232     deps = [
1233         ":basic",
1234         ":static_analyzer_checkers_gen",
1235         "//llvm:Support",
1236     ],
1237 )
1238
1239 cc_library(
1240     name = "static_analyzer_core",
1241     srcs = glob([
1242         "lib/StaticAnalyzer/Core/**/*.cpp",
1243         "lib/StaticAnalyzer/Core/**/*.h",
1244     ]),
1245     hdrs = glob([
1246         "include/clang/StaticAnalyzer/Core/**/*.h",
1247     ]),
1248     includes = ["include"],
1249     textual_hdrs = glob([
1250         "include/clang/StaticAnalyzer/Core/**/*.def",
1251     ]),
1252     deps = [
1253         ":analysis",
1254         ":ast",
1255         ":ast_matchers",
1256         ":basic",
1257         ":crosstu",
1258         ":driver",
1259         ":frontend",
1260         ":lex",
1261         ":rewrite",
1262         ":static_analyzer_checkers_gen",
1263         ":tooling",
1264         ":tooling_core",
1265         "//llvm:Support",
1266     ],
1267 )
1268
1269 gentbl(
1270     name = "static_analyzer_checkers_gen",
1271     tbl_outs = [(
1272         "-gen-clang-sa-checkers",
1273         "include/clang/StaticAnalyzer/Checkers/Checkers.inc",
1274     )],
1275     tblgen = ":clang-tblgen",
1276     td_file = "include/clang/StaticAnalyzer/Checkers/Checkers.td",
1277     td_srcs = [
1278         "include/clang/StaticAnalyzer/Checkers/CheckerBase.td",
1279         "include/clang/StaticAnalyzer/Checkers/Checkers.td",
1280     ],
1281 )
1282
1283 cc_library(
1284     name = "static_analyzer_checkers",
1285     srcs = glob([
1286         "lib/StaticAnalyzer/Checkers/**/*.cpp",
1287         "lib/StaticAnalyzer/Checkers/**/*.h",
1288     ]),
1289     hdrs = [
1290         "include/clang/StaticAnalyzer/Checkers/Checkers.inc",
1291     ] + glob([
1292         "include/clang/StaticAnalyzer/Checkers/**/*.h",
1293     ]),
1294     copts = ["$(STACK_FRAME_UNLIMITED)"],
1295     includes = ["include"],
1296     deps = [
1297         ":analysis",
1298         ":ast",
1299         ":ast_matchers",
1300         ":basic",
1301         ":driver",
1302         ":lex",
1303         ":static_analyzer_checkers_gen",
1304         ":static_analyzer_core",
1305         "//llvm:Support",
1306     ],
1307 )
1308
1309 gentbl(
1310     name = "driver_options_inc_gen",
1311     tbl_outs = [(
1312         "-gen-opt-parser-defs",
1313         "include/clang/Driver/Options.inc",
1314     )],
1315     tblgen = "//llvm:llvm-tblgen",
1316     td_file = "include/clang/Driver/Options.td",
1317     td_srcs = [
1318         "//llvm:include/llvm/Option/OptParser.td",
1319     ],
1320 )
1321
1322 cc_library(
1323     name = "driver",
1324     srcs = glob(
1325         [
1326             "lib/Driver/*.cpp",
1327             "lib/Driver/*.h",
1328             "lib/Driver/Arch/*.cpp",
1329             "lib/Driver/Arch/*.h",
1330             "lib/Driver/ToolChains/*.cpp",
1331             "lib/Driver/ToolChains/*.h",
1332             "lib/Driver/ToolChains/Arch/*.cpp",
1333             "lib/Driver/ToolChains/Arch/*.h",
1334         ],
1335         exclude = [
1336             "lib/Driver/ToolChains/MSVCSetupApi.h",
1337         ],
1338     ),
1339     hdrs = glob([
1340         "include/clang/Driver/*.h",
1341     ]),
1342     copts = ["$(STACK_FRAME_UNLIMITED)"],
1343     includes = [
1344         "include",
1345         # TODO: This is likely a layering issue, but files in Arch are currently
1346         # directly #including "Tools.h".
1347         "lib/Driver",
1348     ],
1349     linkopts = select({
1350         "@bazel_tools//src/conditions:windows": ["version.lib"],
1351         "//conditions:default": [],
1352     }),
1353     textual_hdrs = glob([
1354         "include/clang/Driver/*.def",
1355     ]),
1356     deps = [
1357         ":ast",
1358         ":basic",
1359         ":config",
1360         ":driver_options_inc_gen",
1361         ":parse",
1362         ":static_analyzer_checkers_gen",
1363         "//llvm:BinaryFormat",
1364         "//llvm:MC",
1365         "//llvm:Option",
1366         "//llvm:ProfileData",
1367         "//llvm:Support",
1368         "//llvm:Target",
1369         "//llvm:WindowsDriver",
1370         "//llvm:config",
1371     ],
1372 )
1373
1374 gentbl(
1375     name = "headers_arm_neon_gen",
1376     tbl_outs = [(
1377         "-gen-arm-neon",
1378         "lib/Headers/arm_neon.h",
1379     )],
1380     tblgen = ":clang-tblgen",
1381     td_file = "include/clang/Basic/arm_neon.td",
1382     td_srcs = [
1383         "include/clang/Basic/arm_neon.td",
1384         "include/clang/Basic/arm_neon_incl.td",
1385     ],
1386 )
1387
1388 gentbl(
1389     name = "headers_arm_fp16_gen",
1390     tbl_outs = [(
1391         "-gen-arm-fp16",
1392         "lib/Headers/arm_fp16.h",
1393     )],
1394     tblgen = ":clang-tblgen",
1395     td_file = "include/clang/Basic/arm_fp16.td",
1396     td_srcs = [
1397         "include/clang/Basic/arm_fp16.td",
1398         "include/clang/Basic/arm_neon_incl.td",
1399     ],
1400 )
1401
1402 gentbl(
1403     name = "headers_arm_mve_gen",
1404     tbl_outs = [(
1405         "-gen-arm-mve-header",
1406         "lib/Headers/arm_mve.h",
1407     )],
1408     tblgen = ":clang-tblgen",
1409     td_file = "include/clang/Basic/arm_mve.td",
1410     td_srcs = [
1411         "include/clang/Basic/arm_mve.td",
1412         "include/clang/Basic/arm_mve_defs.td",
1413     ],
1414 )
1415
1416 gentbl(
1417     name = "headers_arm_cde_gen",
1418     tbl_outs = [(
1419         "-gen-arm-cde-header",
1420         "lib/Headers/arm_cde.h",
1421     )],
1422     tblgen = ":clang-tblgen",
1423     td_file = "include/clang/Basic/arm_cde.td",
1424     td_srcs = [
1425         "include/clang/Basic/arm_cde.td",
1426         "include/clang/Basic/arm_mve_defs.td",
1427     ],
1428 )
1429
1430 gentbl(
1431     name = "headers_arm_sve_gen",
1432     tbl_outs = [(
1433         "-gen-arm-sve-header",
1434         "lib/Headers/arm_sve.h",
1435     )],
1436     tblgen = ":clang-tblgen",
1437     td_file = "include/clang/Basic/arm_sve.td",
1438     td_srcs = [
1439         "include/clang/Basic/arm_sve.td",
1440     ],
1441 )
1442
1443 gentbl(
1444     name = "headers_arm_bf16_gen",
1445     tbl_outs = [(
1446         "-gen-arm-bf16",
1447         "lib/Headers/arm_bf16.h",
1448     )],
1449     tblgen = ":clang-tblgen",
1450     td_file = "include/clang/Basic/arm_bf16.td",
1451     td_srcs = [
1452         "include/clang/Basic/arm_bf16.td",
1453         "include/clang/Basic/arm_neon_incl.td",
1454     ],
1455 )
1456
1457 gentbl(
1458     name = "headers_riscv_vector",
1459     tbl_outs = [(
1460         "-gen-riscv-vector-header",
1461         "lib/Headers/riscv_vector.h",
1462     )],
1463     tblgen = ":clang-tblgen",
1464     td_file = "include/clang/Basic/riscv_vector.td",
1465     td_srcs = [
1466         "include/clang/Basic/riscv_vector.td",
1467     ],
1468 )
1469
1470 # We generate the set of builtin headers under a special subdirectory in the
1471 # 'bin' section of the bazel output so that they can be used as data
1472 # dependencies. It requires listing explicitly all the generated inputs here.
1473 builtin_headers = glob(
1474     ["lib/Headers/**/*.h"],
1475     exclude = [
1476         # FIXME: They are not handled in CMake side.
1477         "lib/Headers/openmp_wrappers/time.h",
1478         "lib/Headers/ppc_wrappers/nmmintrin.h",
1479     ],
1480 ) + [
1481     "lib/Headers/arm_cde.h",
1482     "lib/Headers/arm_fp16.h",
1483     "lib/Headers/arm_mve.h",
1484     "lib/Headers/arm_neon.h",
1485     "lib/Headers/arm_sve.h",
1486     "lib/Headers/arm_bf16.h",
1487     "lib/Headers/riscv_vector.h",
1488 ]
1489
1490 genrule(
1491     name = "builtin_headers_gen",
1492     srcs = builtin_headers,
1493     outs = [hdr.replace("lib/Headers/", "staging/include/") for hdr in builtin_headers],
1494     cmd = """
1495        for src in $(SRCS); do
1496          relsrc=$${src/*external\\/llvm-project\\/clang\\/lib\\/Headers\\/}
1497          target=$(@D)/staging/include/$$relsrc
1498          mkdir -p $$(dirname $$target)
1499          cp $$src $$target
1500        done""",
1501     output_to_bindir = 1,
1502 )
1503
1504 cc_library(
1505     name = "frontend",
1506     srcs = glob([
1507         "lib/Frontend/*.cpp",
1508         "lib/Frontend/*.h",
1509     ]),
1510     hdrs = glob([
1511         "include/clang/Frontend/*.h",
1512     ]),
1513     copts = ["$(STACK_FRAME_UNLIMITED)"],
1514     data = [":builtin_headers_gen"],
1515     includes = ["include"],
1516     textual_hdrs = glob([
1517         "include/clang/Frontend/*.def",
1518     ]),
1519     deps = [
1520         ":ast",
1521         ":basic",
1522         ":config",
1523         ":driver",
1524         ":driver_options_inc_gen",
1525         ":edit",
1526         ":lex",
1527         ":parse",
1528         ":sema",
1529         ":serialization",
1530         ":static_analyzer_core_options",
1531         "//llvm:BinaryFormat",
1532         "//llvm:BitReader",
1533         "//llvm:BitstreamReader",
1534         "//llvm:BitstreamWriter",
1535         "//llvm:Core",
1536         "//llvm:Linker",
1537         "//llvm:MC",
1538         "//llvm:Option",
1539         "//llvm:ProfileData",
1540         "//llvm:Support",
1541         "//llvm:Target",
1542         "//llvm:config",
1543     ],
1544 )
1545
1546 cc_library(
1547     name = "frontend_rewrite",
1548     srcs = glob([
1549         "lib/Frontend/Rewrite/*.cpp",
1550         "lib/Frontend/Rewrite/*.h",
1551     ]),
1552     hdrs = glob(["include/clang/Rewrite/Frontend/*.h"]),
1553     includes = ["include"],
1554     deps = [
1555         ":ast",
1556         ":basic",
1557         ":config",
1558         ":edit",
1559         ":frontend",
1560         ":lex",
1561         ":parse",
1562         ":rewrite",
1563         ":serialization",
1564         "//llvm:Support",
1565     ],
1566 )
1567
1568 cc_library(
1569     name = "interpreter",
1570     srcs = glob([
1571         "lib/Interpreter/*.cpp",
1572         "lib/Interpreter/*.h",
1573     ]),
1574     hdrs = glob(["include/clang/Interpreter/*.h"]),
1575     includes = ["include"],
1576     deps = [
1577         ":analysis",
1578         ":ast",
1579         ":basic",
1580         ":codegen",
1581         ":driver",
1582         ":edit",
1583         ":frontend",
1584         ":frontend_tool",
1585         ":lex",
1586         ":parse",
1587         ":sema",
1588         ":serialization",
1589         "//llvm:AllTargetsAsmParsers",
1590         "//llvm:AllTargetsCodeGens",
1591         "//llvm:Core",
1592         "//llvm:ExecutionEngine",
1593         "//llvm:Option",
1594         "//llvm:OrcJIT",
1595         "//llvm:Support",
1596         "//llvm:Target",
1597     ],
1598 )
1599
1600 cc_library(
1601     name = "codegen",
1602     srcs = glob([
1603         "lib/CodeGen/*.cpp",
1604         "lib/CodeGen/*.h",
1605     ]),
1606     hdrs = glob(["include/clang/CodeGen/*.h"]),
1607     copts = ["$(STACK_FRAME_UNLIMITED)"],
1608     includes = ["include"],
1609     deps = [
1610         ":analysis",
1611         ":ast",
1612         ":basic",
1613         ":basic_arm_cde_cg_gen",
1614         ":basic_arm_sve_builtin_cg_gen",
1615         ":basic_riscv_vector_builtin_cg_gen",
1616         ":driver",
1617         ":frontend",
1618         ":lex",
1619         ":sema",
1620         ":type_nodes_gen",
1621         "//llvm:AllTargetsAsmParsers",
1622         "//llvm:Analysis",
1623         "//llvm:BitReader",
1624         "//llvm:BitWriter",
1625         "//llvm:BitstreamReader",
1626         "//llvm:CodeGen",
1627         "//llvm:Core",
1628         "//llvm:Coroutines",
1629         "//llvm:Coverage",
1630         "//llvm:DebugInfoDWARF",
1631         "//llvm:Demangle",
1632         "//llvm:FrontendOpenMP",
1633         "//llvm:IPO",
1634         "//llvm:IRReader",
1635         "//llvm:InstCombine",
1636         "//llvm:Instrumentation",
1637         "//llvm:LTO",
1638         "//llvm:Linker",
1639         "//llvm:MC",
1640         "//llvm:ObjCARC",
1641         "//llvm:Object",
1642         "//llvm:Passes",
1643         "//llvm:ProfileData",
1644         "//llvm:Scalar",
1645         "//llvm:Support",
1646         "//llvm:Target",
1647         "//llvm:TransformUtils",
1648     ],
1649 )
1650
1651 cc_library(
1652     name = "static_analyzer_frontend",
1653     srcs = glob([
1654         "lib/StaticAnalyzer/Frontend/**/*.cpp",
1655         "lib/StaticAnalyzer/Frontend/**/*.h",
1656     ]),
1657     hdrs = glob(["include/clang/StaticAnalyzer/Frontend/**/*.h"]),
1658     includes = ["include"],
1659     deps = [
1660         ":analysis",
1661         ":ast",
1662         ":basic",
1663         ":crosstu",
1664         ":driver",
1665         ":frontend",
1666         ":lex",
1667         ":rewrite",
1668         ":serialization",
1669         ":static_analyzer_checkers",
1670         ":static_analyzer_core",
1671         ":tooling",
1672         ":tooling_core",
1673         "//llvm:Support",
1674     ],
1675 )
1676
1677 gentbl(
1678     name = "serialization_attr_gen",
1679     tbl_outs = [
1680         (
1681             "-gen-clang-attr-pch-read",
1682             "include/clang/Serialization/AttrPCHRead.inc",
1683         ),
1684         (
1685             "-gen-clang-attr-pch-write",
1686             "include/clang/Serialization/AttrPCHWrite.inc",
1687         ),
1688     ],
1689     tblgen = ":clang-tblgen",
1690     td_file = "include/clang/Basic/Attr.td",
1691     td_srcs = [
1692         "include/clang/Basic/ASTNode.td",
1693         "include/clang/Basic/Attr.td",
1694         "include/clang/Basic/AttrDocs.td",
1695         "include/clang/Basic/DeclNodes.td",
1696         "include/clang/Basic/StmtNodes.td",
1697     ],
1698 )
1699
1700 cc_library(
1701     name = "support",
1702     srcs = glob([
1703         "lib/Support/*.cpp",
1704     ]),
1705     hdrs = glob([
1706         "include/clang/Support/*.h",
1707     ]),
1708     includes = ["include"],
1709     deps = [
1710         "//llvm:Support",
1711     ],
1712 )
1713
1714 cc_library(
1715     name = "serialization",
1716     srcs = [
1717         "include/clang/Serialization/AttrPCHRead.inc",
1718         "include/clang/Serialization/AttrPCHWrite.inc",
1719     ] + glob([
1720         "lib/Serialization/*.cpp",
1721         "lib/Serialization/*.h",
1722     ]),
1723     hdrs = glob([
1724         "include/clang/Serialization/*.h",
1725     ]),
1726     includes = ["include"],
1727     textual_hdrs = glob([
1728         "include/clang/Serialization/*.def",
1729     ]),
1730     deps = [
1731         ":ast",
1732         ":basic",
1733         ":lex",
1734         ":sema",
1735         ":serialization_attr_gen",
1736         ":type_nodes_gen",
1737         "//llvm:BitReader",
1738         "//llvm:BitWriter",
1739         "//llvm:BitstreamReader",
1740         "//llvm:BitstreamWriter",
1741         "//llvm:FrontendOpenMP",
1742         "//llvm:Support",
1743     ],
1744 )
1745
1746 cc_library(
1747     name = "frontend_tool",
1748     srcs = glob([
1749         "lib/FrontendTool/*.cpp",
1750         "lib/FrontendTool/*.h",
1751     ]),
1752     hdrs = glob(["include/clang/FrontendTool/*.h"]),
1753     includes = ["include"],
1754     deps = [
1755         ":arc_migrate",
1756         ":codegen",
1757         ":config",
1758         ":driver",
1759         ":extract_api",
1760         ":frontend",
1761         ":frontend_rewrite",
1762         ":static_analyzer_frontend",
1763         "//llvm:Option",
1764         "//llvm:Support",
1765     ],
1766 )
1767
1768 cc_library(
1769     name = "arc_migrate",
1770     srcs = glob([
1771         "lib/ARCMigrate/*.cpp",
1772         "lib/ARCMigrate/*.h",
1773     ]),
1774     hdrs = glob(["include/clang/ARCMigrate/*.h"]),
1775     includes = ["include"],
1776     deps = [
1777         ":analysis",
1778         ":ast",
1779         ":basic",
1780         ":edit",
1781         ":frontend",
1782         ":frontend_rewrite",
1783         ":lex",
1784         ":parse",
1785         ":rewrite",
1786         ":sema",
1787         ":serialization",
1788         ":static_analyzer_checkers",
1789         ":static_analyzer_core",
1790         "//llvm:Support",
1791     ],
1792 )
1793
1794 cc_library(
1795     name = "libclang_static",
1796     srcs = glob([
1797         "tools/libclang/*.cpp",
1798         "tools/libclang/*.h",
1799     ]),
1800     hdrs = glob(["include/clang-c/*.h"]),
1801     defines = ["CINDEX_NO_EXPORTS"],
1802     deps = [
1803         ":arc_migrate",
1804         ":ast",
1805         ":basic",
1806         ":codegen",
1807         ":config",
1808         ":driver",
1809         ":frontend",
1810         ":index",
1811         ":lex",
1812         ":rewrite",
1813         ":sema",
1814         ":tooling",
1815         "//llvm:BitstreamReader",
1816         "//llvm:FrontendOpenMP",
1817         "//llvm:Support",
1818         "//llvm:config",
1819     ],
1820 )
1821
1822 cc_plugin_library(
1823     name = "libclang",
1824     srcs = glob([
1825         "tools/libclang/*.cpp",
1826         "tools/libclang/*.h",
1827     ]),
1828     hdrs = glob(["include/clang-c/*.h"]),
1829     copts = select({
1830         "@bazel_tools//src/conditions:windows": ["-D_CINDEX_LIB_"],
1831         "//conditions:default": [],
1832     }),
1833     strip_include_prefix = "include",
1834     deps = [
1835         ":arc_migrate",
1836         ":ast",
1837         ":basic",
1838         ":codegen",
1839         ":config",
1840         ":driver",
1841         ":frontend",
1842         ":index",
1843         ":lex",
1844         ":rewrite",
1845         ":sema",
1846         ":tooling",
1847         "//llvm:BitstreamReader",
1848         "//llvm:FrontendOpenMP",
1849         "//llvm:Support",
1850         "//llvm:config",
1851     ],
1852 )
1853
1854 filegroup(
1855     name = "python-sources",
1856     srcs = [
1857         "bindings/python/clang/cindex.py",
1858         "bindings/python/clang/enumerations.py",
1859     ],
1860 )
1861
1862 filegroup(
1863     name = "python-cindex-examples",
1864     srcs = [
1865         "bindings/python/examples/cindex/cindex-dump.py",
1866         "bindings/python/examples/cindex/cindex-includes.py",
1867     ],
1868 )
1869
1870 cc_binary(
1871     name = "c-index-test",
1872     testonly = 1,
1873     srcs = [
1874         "tools/c-index-test/c-index-test.c",
1875         "tools/c-index-test/core_main.cpp",
1876     ],
1877     copts = [
1878         "-Wno-uninitialized",
1879     ],
1880     stamp = 0,
1881     deps = [
1882         ":ast",
1883         ":basic",
1884         ":codegen",
1885         ":config",
1886         ":frontend",
1887         ":index",
1888         ":lex",
1889         ":libclang",
1890         ":serialization",
1891         "//llvm:Core",
1892         "//llvm:MC",
1893         "//llvm:Support",
1894     ],
1895 )
1896
1897 cc_binary(
1898     name = "arcmt-test",
1899     testonly = 1,
1900     srcs = ["tools/arcmt-test/arcmt-test.cpp"],
1901     stamp = 0,
1902     deps = [
1903         ":arc_migrate",
1904         ":ast",
1905         ":basic",
1906         ":frontend",
1907         ":frontend_rewrite",
1908         ":lex",
1909         "//llvm:Support",
1910     ],
1911 )
1912
1913 cc_binary(
1914     name = "c-arcmt-test",
1915     testonly = 1,
1916     srcs = ["tools/c-arcmt-test/c-arcmt-test.c"],
1917     copts = select({
1918         "@bazel_tools//src/conditions:windows": [],
1919         "//conditions:default": ["-std=gnu99"],
1920     }),
1921     stamp = 0,
1922     deps = [
1923         ":codegen",
1924         ":libclang",
1925         "//llvm:MC",
1926         "//llvm:Support",
1927     ],
1928 )
1929
1930 cc_binary(
1931     name = "clang-import-test",
1932     testonly = 1,
1933     srcs = glob([
1934         "tools/clang-import-test/*.cpp",
1935         "tools/clang-import-test/*.h",
1936     ]),
1937     stamp = 0,
1938     deps = [
1939         ":ast",
1940         ":basic",
1941         ":codegen",
1942         ":driver",
1943         ":frontend",
1944         ":lex",
1945         ":parse",
1946         "//llvm:Core",
1947         "//llvm:Support",
1948     ],
1949 )
1950
1951 template_rule(
1952     name = "clang_main",
1953     src = "//llvm:cmake/modules/llvm-driver-template.cpp.in",
1954     out = "clang-driver.cpp",
1955     substitutions = {
1956         "@TOOL_NAME@": "clang",
1957     },
1958 )
1959
1960 cc_library(
1961     name = "clang-driver",
1962     srcs = glob([
1963         "tools/driver/*.cpp",
1964         "tools/driver/*.h",
1965     ]) + ["clang-driver.cpp"],
1966     copts = [
1967         # Disable stack frame size checks in the driver because
1968         # clang::ensureStackAddressSpace allocates a large array on the stack.
1969         "$(STACK_FRAME_UNLIMITED)",
1970     ],
1971     deps = [
1972         ":analysis",
1973         ":ast",
1974         ":basic",
1975         ":codegen",
1976         ":config",
1977         ":driver",
1978         ":frontend",
1979         ":frontend_rewrite",
1980         ":frontend_tool",
1981         ":lex",
1982         ":parse",
1983         ":sema",
1984         ":serialization",
1985         ":static_analyzer_frontend",
1986         "//llvm:AllTargetsAsmParsers",
1987         "//llvm:AllTargetsCodeGens",
1988         "//llvm:BitReader",
1989         "//llvm:BitWriter",
1990         "//llvm:CodeGen",
1991         "//llvm:Core",
1992         "//llvm:IPO",
1993         "//llvm:MC",
1994         "//llvm:MCParser",
1995         "//llvm:Option",
1996         "//llvm:Support",
1997         "//llvm:Target",
1998         "//llvm:config",
1999     ],
2000 )
2001
2002 cc_binary(
2003     name = "clang",
2004     srcs = [],
2005     stamp = 0,
2006     deps = [
2007         ":clang-driver",
2008     ],
2009 )
2010
2011 cc_binary(
2012     name = "diagtool",
2013     srcs = glob([
2014         "tools/diagtool/*.cpp",
2015         "tools/diagtool/*.h",
2016     ]),
2017     stamp = 0,
2018     deps = [
2019         ":basic",
2020         ":frontend",
2021         ":lex",
2022         ":sema",
2023         "//llvm:Support",
2024     ],
2025 )
2026
2027 filegroup(
2028     name = "exploded_graph_rewriter",
2029     testonly = 1,
2030     data = ["utils/analyzer/exploded-graph-rewriter.py"],
2031 )
2032
2033 filegroup(
2034     name = "module-deps-to-rsp",
2035     testonly = 1,
2036     data = ["utils/module-deps-to-rsp.py"],
2037 )
2038
2039 filegroup(
2040     name = "hmaptool",
2041     testonly = 1,
2042     data = ["utils/hmaptool/hmaptool"],
2043 )
2044
2045 binary_alias(
2046     name = "clang++",
2047     binary = ":clang",
2048 )
2049
2050 cc_binary(
2051     name = "clang-check",
2052     srcs = ["tools/clang-check/ClangCheck.cpp"],
2053     stamp = 0,
2054     deps = [
2055         ":ast",
2056         ":codegen",
2057         ":driver",
2058         ":frontend",
2059         ":frontend_rewrite",
2060         ":serialization",
2061         ":static_analyzer_frontend",
2062         ":tooling",
2063         ":tooling_syntax",
2064         "//llvm:Option",
2065         "//llvm:Support",
2066     ],
2067 )
2068
2069 cc_binary(
2070     name = "clang-format",
2071     srcs = [
2072         "tools/clang-format/ClangFormat.cpp",
2073     ],
2074     stamp = 0,
2075     deps = [
2076         ":basic",
2077         ":format",
2078         ":frontend",
2079         ":rewrite",
2080         "//llvm:Support",
2081     ],
2082 )
2083
2084 cc_binary(
2085     name = "clang-diff",
2086     srcs = glob(["tools/clang-diff/*.cpp"]),
2087     stamp = 0,
2088     deps = [
2089         ":ast-diff",
2090         ":tooling",
2091         "//llvm:Support",
2092     ],
2093 )
2094
2095 cc_binary(
2096     name = "clang-offload-bundler",
2097     srcs = glob(["tools/clang-offload-bundler/*.cpp"]),
2098     stamp = 0,
2099     deps = [
2100         ":basic",
2101         ":tooling",
2102         "//llvm:BitWriter",
2103         "//llvm:Core",
2104         "//llvm:Object",
2105         "//llvm:Support",
2106     ],
2107 )
2108
2109 cc_binary(
2110     name = "clang-offload-wrapper",
2111     srcs = glob(["tools/clang-offload-wrapper/*.cpp"]),
2112     stamp = 0,
2113     deps = [
2114         ":basic",
2115         "//llvm:BitWriter",
2116         "//llvm:Support",
2117         "//llvm:TransformUtils",
2118         "//llvm:ir_headers",
2119     ],
2120 )
2121
2122 cc_binary(
2123     name = "clang-refactor",
2124     srcs = glob([
2125         "tools/clang-refactor/*.cpp",
2126         "tools/clang-refactor/*.h",
2127     ]),
2128     stamp = 0,
2129     deps = [
2130         ":ast",
2131         ":basic",
2132         ":format",
2133         ":frontend",
2134         ":lex",
2135         ":rewrite",
2136         ":tooling",
2137         ":tooling_refactoring",
2138         "//llvm:Support",
2139     ],
2140 )
2141
2142 cc_binary(
2143     name = "clang-rename",
2144     srcs = glob(["tools/clang-rename/*.cpp"]),
2145     stamp = 0,
2146     deps = [
2147         ":basic",
2148         ":frontend",
2149         ":rewrite",
2150         ":tooling",
2151         ":tooling_refactoring",
2152         "//llvm:Support",
2153     ],
2154 )
2155
2156 cc_binary(
2157     name = "clang-repl",
2158     srcs = glob(["tools/clang-repl/*.cpp"]),
2159     stamp = 0,
2160     deps = [
2161         ":basic",
2162         ":frontend",
2163         ":interpreter",
2164         ":tooling",
2165         "//llvm:Core",
2166         "//llvm:LineEditor",
2167         "//llvm:Option",
2168         "//llvm:OrcJIT",
2169         "//llvm:Support",
2170     ],
2171 )
2172
2173 cc_binary(
2174     name = "clang-extdef-mapping",
2175     srcs = glob(["tools/clang-extdef-mapping/*.cpp"]),
2176     stamp = 0,
2177     deps = [
2178         ":ast",
2179         ":basic",
2180         ":crosstu",
2181         ":frontend",
2182         ":tooling",
2183         "//llvm:Support",
2184     ],
2185 )
2186
2187 cc_binary(
2188     name = "clang-scan-deps",
2189     srcs = glob(["tools/clang-scan-deps/*.cpp"]),
2190     stamp = 0,
2191     deps = [
2192         ":frontend",
2193         ":tooling",
2194         ":tooling_dependency_scanning",
2195         "//llvm:Support",
2196     ],
2197 )
2198
2199 cc_library(
2200     name = "extract_api",
2201     srcs = glob([
2202         "lib/ExtractAPI/**/*.cpp",
2203         "lib/ExtractAPI/**/*.h",
2204     ]),
2205     hdrs = glob(["include/clang/ExtractAPI/**/*.h"]),
2206     includes = ["include"],
2207     deps = [
2208         ":ast",
2209         ":basic",
2210         ":frontend",
2211         ":index",
2212         "//llvm:Option",
2213         "//llvm:Support",
2214     ],
2215 )