xref: /llvm-project/utils/bazel/llvm-project-overlay/lld/BUILD.bazel (revision d606f68a2e37440729f223616062b9ebb28e6482)
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(
6    "//:vars.bzl",
7    "LLVM_VERSION",
8)
9load("//llvm:binary_alias.bzl", "binary_alias")
10load("//llvm:driver.bzl", "llvm_driver_cc_binary")
11load("//llvm:tblgen.bzl", "gentbl")
12
13package(
14    default_visibility = ["//visibility:public"],
15    features = ["layering_check"],
16)
17
18licenses(["notice"])
19
20# TODO: Actually compute version info
21genrule(
22    name = "config_version_gen",
23    outs = ["include/lld/Common/Version.inc"],
24    cmd = "echo '#define LLD_VERSION_STRING \"{}\"' > $@".format(LLVM_VERSION),
25)
26
27genrule(
28    name = "vcs_version_gen",
29    outs = ["Common/VCSVersion.inc"],
30    cmd = "echo '#undef LLD_REVISION' >> $@\n" +
31          "echo '#undef LLD_REPOSITORY' >> $@\n",
32)
33
34# See https://github.com/bazelbuild/bazel/issues/13803
35cc_library(
36    name = "vcs_version",
37    hdrs = ["Common/VCSVersion.inc"],
38    strip_include_prefix = "Common",
39)
40
41cc_library(
42    name = "Common",
43    srcs = [":config_version_gen"] + glob(["Common/*.cpp"]),
44    hdrs = glob(["include/lld/Common/*.h"]),
45    includes = ["include"],
46    textual_hdrs = glob(["include/lld/Common/*.inc"]),
47    deps = [
48        ":vcs_version",
49        "//llvm:CodeGen",
50        "//llvm:Core",
51        "//llvm:DebugInfoDWARF",
52        "//llvm:IRPrinter",
53        "//llvm:Option",
54        "//llvm:ProfileData",
55        "//llvm:Support",
56        "//llvm:Target",
57        "//llvm:TargetParser",
58        "//llvm:config",
59    ],
60)
61
62gentbl(
63    name = "elf_options_inc_gen",
64    # See https://github.com/bazelbuild/bazel/issues/13803
65    strip_include_prefix = "ELF",
66    tbl_outs = [(
67        "-gen-opt-parser-defs",
68        "ELF/Options.inc",
69    )],
70    tblgen = "//llvm:llvm-tblgen",
71    td_file = "ELF/Options.td",
72    td_srcs = [
73        "//llvm:include/llvm/Option/OptParser.td",
74    ],
75)
76
77cc_library(
78    name = "ELF",
79    srcs = glob([
80        "ELF/*.cpp",
81        "ELF/*.h",
82        "ELF/Arch/*.cpp",
83    ]),
84    includes = ["ELF"],
85    textual_hdrs = [
86        "ELF/Arch/PPCInsns.def",
87    ],
88    deps = [
89        ":Common",
90        ":elf_options_inc_gen",
91        "//llvm:AllTargetsAsmParsers",
92        "//llvm:AllTargetsCodeGens",
93        "//llvm:AllTargetsDisassemblers",
94        "//llvm:Analysis",
95        "//llvm:BinaryFormat",
96        "//llvm:BitReader",
97        "//llvm:BitWriter",
98        "//llvm:CodeGen",
99        "//llvm:Core",
100        "//llvm:DebugInfoDWARF",
101        "//llvm:Demangle",
102        "//llvm:IPO",
103        "//llvm:LTO",
104        "//llvm:Linker",
105        "//llvm:MC",
106        "//llvm:Object",
107        "//llvm:Option",
108        "//llvm:Passes",
109        "//llvm:Remarks",
110        "//llvm:Support",
111        "//llvm:TargetParser",
112        "//llvm:TransformUtils",
113        "//llvm:config",
114        "@llvm_zlib//:zlib",
115        "@llvm_zstd//:zstd",
116    ],
117)
118
119gentbl(
120    name = "coff_options_inc_gen",
121    # See https://github.com/bazelbuild/bazel/issues/13803
122    strip_include_prefix = "COFF",
123    tbl_outs = [(
124        "-gen-opt-parser-defs",
125        "COFF/Options.inc",
126    )],
127    tblgen = "//llvm:llvm-tblgen",
128    td_file = "COFF/Options.td",
129    td_srcs = [
130        "//llvm:include/llvm/Option/OptParser.td",
131    ],
132)
133
134cc_library(
135    name = "COFF",
136    srcs = glob([
137        "COFF/*.cpp",
138        "COFF/*.h",
139    ]),
140    includes = ["COFF"],
141    deps = [
142        ":Common",
143        ":coff_options_inc_gen",
144        "//llvm:AllTargetsAsmParsers",
145        "//llvm:AllTargetsCodeGens",
146        "//llvm:AllTargetsDisassemblers",
147        "//llvm:Analysis",
148        "//llvm:BinaryFormat",
149        "//llvm:BitReader",
150        "//llvm:BitWriter",
151        "//llvm:Core",
152        "//llvm:DebugInfo",
153        "//llvm:DebugInfoCodeView",
154        "//llvm:DebugInfoMSF",
155        "//llvm:DebugInfoPDB",
156        "//llvm:Demangle",
157        "//llvm:IPO",
158        "//llvm:LTO",
159        "//llvm:LibDriver",
160        "//llvm:Linker",
161        "//llvm:MC",
162        "//llvm:Object",
163        "//llvm:Option",
164        "//llvm:Support",
165        "//llvm:Symbolize",
166        "//llvm:Target",
167        "//llvm:TargetParser",
168        "//llvm:TransformUtils",
169        "//llvm:WindowsDriver",
170        "//llvm:WindowsManifest",
171        "//llvm:config",
172    ],
173)
174
175gentbl(
176    name = "mingw_options_inc_gen",
177    tbl_outs = [(
178        "-gen-opt-parser-defs",
179        "MinGW/Options.inc",
180    )],
181    tblgen = "//llvm:llvm-tblgen",
182    td_file = "MinGW/Options.td",
183    td_srcs = [
184        "//llvm:include/llvm/Option/OptParser.td",
185    ],
186)
187
188cc_library(
189    name = "MinGW",
190    srcs = glob([
191        "MinGW/*.cpp",
192    ]),
193    includes = ["MinGW"],
194    deps = [
195        ":Common",
196        ":mingw_options_inc_gen",
197        "//llvm:Option",
198        "//llvm:Support",
199        "//llvm:TargetParser",
200    ],
201)
202
203gentbl(
204    name = "macho_options_inc_gen",
205    # See https://github.com/bazelbuild/bazel/issues/13803
206    strip_include_prefix = "MachO",
207    tbl_outs = [(
208        "-gen-opt-parser-defs",
209        "MachO/Options.inc",
210    )],
211    tblgen = "//llvm:llvm-tblgen",
212    td_file = "MachO/Options.td",
213    td_srcs = [
214        "//llvm:include/llvm/Option/OptParser.td",
215    ],
216)
217
218cc_library(
219    name = "MachO",
220    srcs = glob([
221        "MachO/**/*.cpp",
222        "MachO/**/*.h",
223    ]),
224    includes = ["MachO"],
225    deps = [
226        ":Common",
227        ":macho_options_inc_gen",
228        "//libunwind:unwind_headers_only",
229        "//llvm:BinaryFormat",
230        "//llvm:BitReader",
231        "//llvm:BitWriter",
232        "//llvm:CGData",
233        "//llvm:Core",
234        "//llvm:DebugInfoDWARF",
235        "//llvm:Demangle",
236        "//llvm:LTO",
237        "//llvm:MC",
238        "//llvm:ObjCARC",
239        "//llvm:Object",
240        "//llvm:Option",
241        "//llvm:ProfileData",
242        "//llvm:Support",
243        "//llvm:TargetParser",
244        "//llvm:TextAPI",
245        "//llvm:config",
246    ],
247)
248
249gentbl(
250    name = "wasm_options_inc_gen",
251    # See https://github.com/bazelbuild/bazel/issues/13803
252    strip_include_prefix = "wasm",
253    tbl_outs = [(
254        "-gen-opt-parser-defs",
255        "wasm/Options.inc",
256    )],
257    tblgen = "//llvm:llvm-tblgen",
258    td_file = "wasm/Options.td",
259    td_srcs = [
260        "//llvm:include/llvm/Option/OptParser.td",
261    ],
262)
263
264cc_library(
265    name = "Wasm",
266    srcs = glob([
267        "wasm/*.cpp",
268        "wasm/*.h",
269    ]),
270    includes = ["wasm"],
271    deps = [
272        ":Common",
273        ":wasm_options_inc_gen",
274        "//llvm:AllTargetsAsmParsers",
275        "//llvm:AllTargetsCodeGens",
276        "//llvm:BinaryFormat",
277        "//llvm:BitWriter",
278        "//llvm:Core",
279        "//llvm:Demangle",
280        "//llvm:LTO",
281        "//llvm:MC",
282        "//llvm:Object",
283        "//llvm:Option",
284        "//llvm:ProfileData",
285        "//llvm:Support",
286        "//llvm:TargetParser",
287        "//llvm:config",
288    ],
289)
290
291cc_library(
292    name = "lld-lib",
293    srcs = glob(["tools/lld/*.cpp"]),
294    deps = [
295        ":COFF",
296        ":Common",
297        ":ELF",
298        ":MachO",
299        ":MinGW",
300        ":Wasm",
301        "//llvm:Support",
302        "//llvm:TargetParser",
303    ],
304)
305
306llvm_driver_cc_binary(
307    name = "lld",
308    deps = [":lld-lib"],
309)
310
311# These are the required names for lld running under different environs.
312#
313# Unix/Linux require that the binary be named "ld.lld".
314# macOS require that the binary be named "ld64.lld".
315# Windows require that the binary be named "lld-link".
316# WebAssembly builds require that the binary be named "wasm-ld".
317[
318    binary_alias(
319        name = name,
320        binary = ":lld",
321    )
322    for name in [
323        "ld.lld",
324        "ld64.lld",
325        "lld-link",
326        "wasm-ld",
327    ]
328]
329