330 lines
7.5 KiB
Text
330 lines
7.5 KiB
Text
# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
|
|
# See https://llvm.org/LICENSE.txt for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
|
|
load("//llvm:tblgen.bzl", "gentbl")
|
|
load("//llvm:binary_alias.bzl", "binary_alias")
|
|
load(
|
|
"//:vars.bzl",
|
|
"LLVM_VERSION",
|
|
)
|
|
|
|
package(
|
|
default_visibility = ["//visibility:public"],
|
|
features = ["layering_check"],
|
|
)
|
|
|
|
licenses(["notice"])
|
|
|
|
# TODO: Actually compute version info
|
|
genrule(
|
|
name = "config_version_gen",
|
|
outs = ["include/lld/Common/Version.inc"],
|
|
cmd = "echo '#define LLD_VERSION_STRING \"{}\"' > $@".format(LLVM_VERSION),
|
|
)
|
|
|
|
genrule(
|
|
name = "vcs_version_gen",
|
|
outs = ["Common/VCSVersion.inc"],
|
|
cmd = "echo '#undef LLD_REVISION' >> $@\n" +
|
|
"echo '#undef LLD_REPOSITORY' >> $@\n",
|
|
)
|
|
|
|
# See https://github.com/bazelbuild/bazel/issues/13803
|
|
cc_library(
|
|
name = "vcs_version",
|
|
hdrs = ["Common/VCSVersion.inc"],
|
|
strip_include_prefix = "Common",
|
|
)
|
|
|
|
cc_library(
|
|
name = "Common",
|
|
srcs = [":config_version_gen"] + glob(["Common/*.cpp"]),
|
|
hdrs = glob(["include/lld/Common/*.h"]),
|
|
includes = ["include"],
|
|
deps = [
|
|
":vcs_version",
|
|
"//llvm:CodeGen",
|
|
"//llvm:Core",
|
|
"//llvm:DebugInfoDWARF",
|
|
"//llvm:IRPrinter",
|
|
"//llvm:Option",
|
|
"//llvm:Support",
|
|
"//llvm:Target",
|
|
"//llvm:TargetParser",
|
|
"//llvm:config",
|
|
],
|
|
)
|
|
|
|
gentbl(
|
|
name = "elf_options_inc_gen",
|
|
# See https://github.com/bazelbuild/bazel/issues/13803
|
|
strip_include_prefix = "ELF",
|
|
tbl_outs = [(
|
|
"-gen-opt-parser-defs",
|
|
"ELF/Options.inc",
|
|
)],
|
|
tblgen = "//llvm:llvm-tblgen",
|
|
td_file = "ELF/Options.td",
|
|
td_srcs = [
|
|
"//llvm:include/llvm/Option/OptParser.td",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "ELF",
|
|
srcs = glob([
|
|
"ELF/*.cpp",
|
|
"ELF/*.h",
|
|
"ELF/Arch/*.cpp",
|
|
]),
|
|
includes = ["ELF"],
|
|
textual_hdrs = [
|
|
"ELF/Arch/PPCInsns.def",
|
|
],
|
|
deps = [
|
|
":Common",
|
|
":elf_options_inc_gen",
|
|
"//llvm:AllTargetsAsmParsers",
|
|
"//llvm:AllTargetsCodeGens",
|
|
"//llvm:AllTargetsDisassemblers",
|
|
"//llvm:Analysis",
|
|
"//llvm:BinaryFormat",
|
|
"//llvm:BitReader",
|
|
"//llvm:BitWriter",
|
|
"//llvm:CodeGen",
|
|
"//llvm:Core",
|
|
"//llvm:DebugInfoDWARF",
|
|
"//llvm:Demangle",
|
|
"//llvm:IPO",
|
|
"//llvm:LTO",
|
|
"//llvm:Linker",
|
|
"//llvm:MC",
|
|
"//llvm:Object",
|
|
"//llvm:Option",
|
|
"//llvm:Passes",
|
|
"//llvm:Remarks",
|
|
"//llvm:Support",
|
|
"//llvm:TargetParser",
|
|
"//llvm:TransformUtils",
|
|
"//llvm:config",
|
|
"@llvm_zlib//:zlib",
|
|
"@llvm_zstd//:zstd",
|
|
],
|
|
)
|
|
|
|
gentbl(
|
|
name = "coff_options_inc_gen",
|
|
# See https://github.com/bazelbuild/bazel/issues/13803
|
|
strip_include_prefix = "COFF",
|
|
tbl_outs = [(
|
|
"-gen-opt-parser-defs",
|
|
"COFF/Options.inc",
|
|
)],
|
|
tblgen = "//llvm:llvm-tblgen",
|
|
td_file = "COFF/Options.td",
|
|
td_srcs = [
|
|
"//llvm:include/llvm/Option/OptParser.td",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "COFF",
|
|
srcs = glob([
|
|
"COFF/*.cpp",
|
|
"COFF/*.h",
|
|
]),
|
|
includes = ["COFF"],
|
|
deps = [
|
|
":Common",
|
|
":coff_options_inc_gen",
|
|
"//llvm:AllTargetsAsmParsers",
|
|
"//llvm:AllTargetsCodeGens",
|
|
"//llvm:AllTargetsDisassemblers",
|
|
"//llvm:Analysis",
|
|
"//llvm:BinaryFormat",
|
|
"//llvm:BitReader",
|
|
"//llvm:BitWriter",
|
|
"//llvm:Core",
|
|
"//llvm:DebugInfo",
|
|
"//llvm:DebugInfoCodeView",
|
|
"//llvm:DebugInfoMSF",
|
|
"//llvm:DebugInfoPDB",
|
|
"//llvm:Demangle",
|
|
"//llvm:IPO",
|
|
"//llvm:LTO",
|
|
"//llvm:LibDriver",
|
|
"//llvm:Linker",
|
|
"//llvm:MC",
|
|
"//llvm:Object",
|
|
"//llvm:Option",
|
|
"//llvm:Support",
|
|
"//llvm:Symbolize",
|
|
"//llvm:Target",
|
|
"//llvm:TargetParser",
|
|
"//llvm:TransformUtils",
|
|
"//llvm:WindowsDriver",
|
|
"//llvm:WindowsManifest",
|
|
"//llvm:config",
|
|
],
|
|
)
|
|
|
|
gentbl(
|
|
name = "mingw_options_inc_gen",
|
|
tbl_outs = [(
|
|
"-gen-opt-parser-defs",
|
|
"MinGW/Options.inc",
|
|
)],
|
|
tblgen = "//llvm:llvm-tblgen",
|
|
td_file = "MinGW/Options.td",
|
|
td_srcs = [
|
|
"//llvm:include/llvm/Option/OptParser.td",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "MinGW",
|
|
srcs = glob([
|
|
"MinGW/*.cpp",
|
|
"MinGW/*.h",
|
|
]),
|
|
includes = ["MinGW"],
|
|
deps = [
|
|
":Common",
|
|
":mingw_options_inc_gen",
|
|
"//llvm:Option",
|
|
"//llvm:Support",
|
|
"//llvm:TargetParser",
|
|
],
|
|
)
|
|
|
|
gentbl(
|
|
name = "macho_options_inc_gen",
|
|
# See https://github.com/bazelbuild/bazel/issues/13803
|
|
strip_include_prefix = "MachO",
|
|
tbl_outs = [(
|
|
"-gen-opt-parser-defs",
|
|
"MachO/Options.inc",
|
|
)],
|
|
tblgen = "//llvm:llvm-tblgen",
|
|
td_file = "MachO/Options.td",
|
|
td_srcs = [
|
|
"//llvm:include/llvm/Option/OptParser.td",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "MachO",
|
|
srcs = glob([
|
|
"MachO/**/*.cpp",
|
|
"MachO/**/*.h",
|
|
]),
|
|
includes = ["MachO"],
|
|
deps = [
|
|
":Common",
|
|
":macho_options_inc_gen",
|
|
"//libunwind:unwind_headers_only",
|
|
"//llvm:BinaryFormat",
|
|
"//llvm:BitReader",
|
|
"//llvm:BitWriter",
|
|
"//llvm:Core",
|
|
"//llvm:DebugInfoDWARF",
|
|
"//llvm:Demangle",
|
|
"//llvm:LTO",
|
|
"//llvm:MC",
|
|
"//llvm:ObjCARC",
|
|
"//llvm:Object",
|
|
"//llvm:Option",
|
|
"//llvm:Support",
|
|
"//llvm:TargetParser",
|
|
"//llvm:TextAPI",
|
|
"//llvm:config",
|
|
],
|
|
)
|
|
|
|
gentbl(
|
|
name = "wasm_options_inc_gen",
|
|
# See https://github.com/bazelbuild/bazel/issues/13803
|
|
strip_include_prefix = "wasm",
|
|
tbl_outs = [(
|
|
"-gen-opt-parser-defs",
|
|
"wasm/Options.inc",
|
|
)],
|
|
tblgen = "//llvm:llvm-tblgen",
|
|
td_file = "wasm/Options.td",
|
|
td_srcs = [
|
|
"//llvm:include/llvm/Option/OptParser.td",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "Wasm",
|
|
srcs = glob([
|
|
"wasm/*.cpp",
|
|
"wasm/*.h",
|
|
]),
|
|
includes = ["wasm"],
|
|
deps = [
|
|
":Common",
|
|
":wasm_options_inc_gen",
|
|
"//llvm:AllTargetsAsmParsers",
|
|
"//llvm:AllTargetsCodeGens",
|
|
"//llvm:BinaryFormat",
|
|
"//llvm:Core",
|
|
"//llvm:Demangle",
|
|
"//llvm:LTO",
|
|
"//llvm:MC",
|
|
"//llvm:Object",
|
|
"//llvm:Option",
|
|
"//llvm:Support",
|
|
"//llvm:TargetParser",
|
|
"//llvm:config",
|
|
],
|
|
)
|
|
|
|
expand_template(
|
|
name = "lld_main",
|
|
out = "lld-driver.cpp",
|
|
substitutions = {
|
|
"@TOOL_NAME@": "lld",
|
|
},
|
|
template = "//llvm:cmake/modules/llvm-driver-template.cpp.in",
|
|
)
|
|
|
|
cc_binary(
|
|
name = "lld",
|
|
srcs = glob([
|
|
"tools/lld/*.cpp",
|
|
"tools/lld/*.h",
|
|
]) + ["lld-driver.cpp"],
|
|
deps = [
|
|
":COFF",
|
|
":Common",
|
|
":ELF",
|
|
":MachO",
|
|
":MinGW",
|
|
":Wasm",
|
|
"//llvm:Support",
|
|
"//llvm:TargetParser",
|
|
],
|
|
)
|
|
|
|
# These are the required names for lld running under different environs.
|
|
#
|
|
# Unix/Linux require that the binary be named "ld.lld".
|
|
# macOS require that the binary be named "ld64.lld".
|
|
# Windows require that the binary be named "lld-link".
|
|
# WebAssembly builds require that the binary be named "wasm-ld".
|
|
[
|
|
binary_alias(
|
|
name = name,
|
|
binary = ":lld",
|
|
)
|
|
for name in [
|
|
"ld.lld",
|
|
"ld64.lld",
|
|
"lld-link",
|
|
"wasm-ld",
|
|
]
|
|
]
|