xref: /llvm-project/utils/bazel/llvm-project-overlay/bolt/BUILD.bazel (revision e9fb0ad21dd3593bf641e4fb0aec6d641cb511f3)
1# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
2# See https://llvm.org/LICENSE.txt for license information.
3# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
5load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
6
7package(
8    default_visibility = ["//visibility:public"],
9)
10
11licenses(["notice"])
12
13genrule(
14    name = "generate_vcs_revision",
15    outs = ["include/VCSVersion.inc"],
16    cmd = "echo '#undef BOLT_REVISION' >> $@\n",
17)
18
19cc_binary(
20    name = "llvm-bolt-heatmap",
21    srcs = glob([
22        "tools/heatmap/*.cpp",
23    ]),
24    deps = [
25        ":Profile",
26        ":Rewrite",
27        ":Utils",
28        "//llvm:AllTargetsAsmParsers",
29        "//llvm:AllTargetsDisassemblers",
30        "//llvm:MC",
31        "//llvm:Object",
32        "//llvm:Support",
33    ],
34)
35
36cc_binary(
37    name = "merge-fdata",
38    srcs = glob([
39        "tools/merge-fdata/*.cpp",
40    ]),
41    deps = [
42        ":Profile",
43        "//llvm:Support",
44    ],
45)
46
47cc_binary(
48    name = "llvm-bolt",
49    srcs = glob([
50        "tools/driver/*.cpp",
51    ]),
52    includes = ["include"],
53    deps = [
54        ":Profile",
55        ":Rewrite",
56        ":RuntimeLibs",
57        ":TargetAArch64",
58        ":TargetX86",
59        ":Utils",
60        "//llvm:AllTargetsAsmParsers",
61        "//llvm:AllTargetsCodeGens",
62        "//llvm:AllTargetsDisassemblers",
63        "//llvm:ExecutionEngine",
64        "//llvm:MC",
65        "//llvm:Object",
66        "//llvm:Support",
67    ],
68)
69
70cc_library(
71    name = "Rewrite",
72    srcs = glob([
73        "lib/Rewrite/*.cpp",
74    ]),
75    hdrs = glob([
76        "include/bolt/Rewrite/*.h",
77    ]),
78    includes = ["include"],
79    deps = [
80        ":Core",
81        ":Passes",
82        ":Profile",
83        ":RuntimeLibs",
84        ":TargetX86",
85        ":Utils",
86        "//llvm:Analysis",
87        "//llvm:BinaryFormat",
88        "//llvm:CodeGen",
89        "//llvm:DWARFLinker",
90        "//llvm:DWP",
91        "//llvm:DebugInfoDWARF",
92        "//llvm:Demangle",
93        "//llvm:JITLink",
94        "//llvm:MC",
95        "//llvm:MCDisassembler",
96        "//llvm:MCParser",
97        "//llvm:Object",
98        "//llvm:OrcShared",
99        "//llvm:Support",
100        "//llvm:ir_headers",
101    ],
102)
103
104expand_template(
105    name = "RuntimeLibraryVariables_inc",
106    out = "include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc",
107    substitutions = {
108        # FIXME this is a total guess
109        "@LLVM_LIBDIR_SUFFIX@": "lib",
110    },
111    template = "include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc.in",
112)
113
114cc_library(
115    name = "RuntimeLibs",
116    srcs = glob([
117        "lib/RuntimeLibs/*.cpp",
118    ]),
119    defines = ["CMAKE_INSTALL_FULL_LIBDIR=\\\"\\\""],
120    includes = ["include"],
121    textual_hdrs = glob([
122        "include/bolt/RuntimeLibs/*.h",
123    ]) + ["include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc"],
124    deps = [
125        ":Core",
126        ":Passes",
127        ":Utils",
128        "//llvm:Analysis",
129        "//llvm:BinaryFormat",
130        "//llvm:CodeGen",
131        "//llvm:DWP",
132        "//llvm:DebugInfoDWARF",
133        "//llvm:Demangle",
134        "//llvm:MC",
135        "//llvm:MCDisassembler",
136        "//llvm:MCParser",
137        "//llvm:Object",
138        "//llvm:Support",
139    ],
140)
141
142cc_library(
143    name = "ProfileHeaders",
144    hdrs = glob(["include/bolt/Profile/*.h"]),
145    includes = ["include"],
146    visibility = ["//visibility:private"],
147)
148
149cc_library(
150    name = "Profile",
151    srcs = glob([
152        "lib/Profile/*.cpp",
153    ]),
154    hdrs = glob([
155        "include/bolt/Profile/*.h",
156    ]),
157    includes = ["include"],
158    deps = [
159        ":Core",
160        ":Passes",
161        ":Utils",
162        "//llvm:Analysis",
163        "//llvm:BinaryFormat",
164        "//llvm:CodeGen",
165        "//llvm:DebugInfoDWARF",
166        "//llvm:Demangle",
167        "//llvm:ExecutionEngine",
168        "//llvm:MC",
169        "//llvm:MCDisassembler",
170        "//llvm:MCParser",
171        "//llvm:Object",
172        "//llvm:Support",
173        "//llvm:TransformUtils",
174    ],
175)
176
177cc_library(
178    name = "Passes",
179    srcs = glob([
180        "lib/Passes/*.cpp",
181    ]),
182    hdrs = glob([
183        "include/bolt/Passes/*.h",
184    ]) + [
185        # To avoid circular dependency on "Profile".
186        "include/bolt/Profile/BoltAddressTranslation.h",
187    ],
188    includes = ["include"],
189    deps = [
190        ":Core",
191        ":Utils",
192        "//llvm:Analysis",
193        "//llvm:BinaryFormat",
194        "//llvm:CodeGen",
195        "//llvm:DebugInfoDWARF",
196        "//llvm:Demangle",
197        "//llvm:ExecutionEngine",
198        "//llvm:MC",
199        "//llvm:MCDisassembler",
200        "//llvm:MCParser",
201        "//llvm:Object",
202        "//llvm:Support",
203        "//llvm:Target",
204        "//llvm:TransformUtils",
205    ],
206)
207
208cc_library(
209    name = "TargetX86",
210    srcs = glob([
211        "lib/Target/X86/*.cpp",
212    ]),
213    hdrs = glob([
214        "lib/Target/X86/*.h",
215    ]),
216    includes = ["include"],
217    deps = [
218        ":Core",
219        "//llvm:Analysis",
220        "//llvm:BinaryFormat",
221        "//llvm:CodeGen",
222        "//llvm:DWP",
223        "//llvm:DebugInfoDWARF",
224        "//llvm:Demangle",
225        "//llvm:ExecutionEngine",
226        "//llvm:MC",
227        "//llvm:MCDisassembler",
228        "//llvm:MCParser",
229        "//llvm:Object",
230        "//llvm:Support",
231        "//llvm:X86CommonTableGen",
232        "//llvm:X86UtilsAndDesc",
233    ],
234)
235
236cc_library(
237    name = "TargetAArch64",
238    srcs = glob([
239        "lib/Target/AArch64/*.cpp",
240    ]),
241    includes = ["include"],
242    deps = [
243        ":Core",
244        ":Utils",
245        "//llvm:AArch64CommonTableGen",
246        "//llvm:AArch64UtilsAndDesc",
247        "//llvm:Analysis",
248        "//llvm:BinaryFormat",
249        "//llvm:CodeGen",
250        "//llvm:DWP",
251        "//llvm:DebugInfoDWARF",
252        "//llvm:Demangle",
253        "//llvm:ExecutionEngine",
254        "//llvm:MC",
255        "//llvm:MCDisassembler",
256        "//llvm:MCParser",
257        "//llvm:Object",
258        "//llvm:Support",
259    ],
260)
261
262cc_library(
263    name = "Core",
264    srcs = glob([
265        "lib/Core/*.cpp",
266    ]),
267    hdrs = glob([
268        "include/bolt/Core/*.h",
269        "include/bolt/RuntimeLibs/*.h",
270        "include/bolt/Passes/*.h",
271        "include/bolt/Rewrite/*.h",
272    ]),
273    includes = ["include"],
274    deps = [
275        ":ProfileHeaders",
276        ":Utils",
277        "//llvm:Analysis",
278        "//llvm:BinaryFormat",
279        "//llvm:CodeGen",
280        "//llvm:DebugInfoDWARF",
281        "//llvm:Demangle",
282        "//llvm:ExecutionEngine",
283        "//llvm:MC",
284        "//llvm:MCDisassembler",
285        "//llvm:MCParser",
286        "//llvm:Object",
287        "//llvm:ObjectYAML",
288        "//llvm:OrcShared",
289        "//llvm:Support",
290        "//llvm:TargetParser",
291        "//llvm:config",
292        "//llvm:ir_headers",
293    ],
294)
295
296cc_library(
297    name = "Utils",
298    srcs = glob([
299        "lib/Utils/*.cpp",
300    ]),
301    hdrs = [
302        "include/VCSVersion.inc",
303    ] + glob([
304        "include/bolt/Utils/*.h",
305    ]),
306    includes = ["include"],
307    deps = [
308        "//llvm:Analysis",
309        "//llvm:BinaryFormat",
310        "//llvm:CodeGen",
311        "//llvm:DWP",
312        "//llvm:DebugInfoDWARF",
313        "//llvm:Demangle",
314        "//llvm:ExecutionEngine",
315        "//llvm:MC",
316        "//llvm:MCDisassembler",
317        "//llvm:MCParser",
318        "//llvm:Object",
319        "//llvm:Support",
320    ],
321)
322