blob: 23a2ec240341c14dcde0c701ddef722ef737f3a5 [file] [log] [blame]
# 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("//llvm:tblgen.bzl", "gentbl")
package(
default_visibility = ["//visibility:public"],
licenses = ["notice"],
)
# TODO: Actually compute version info
genrule(
name = "config_version_gen",
outs = ["include/lld/Common/Version.inc"],
cmd = "echo '#define LLD_VERSION_STRING \"14.0.0\"' > $@",
)
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:Option",
"//llvm:Support",
"//llvm:Target",
],
)
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:Support",
"//llvm:TransformUtils",
],
)
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:BitReader",
"//llvm:BitWriter",
"//llvm:Core",
"//llvm:DebugInfoPDB",
"//llvm:IPO",
"//llvm:LTO",
"//llvm:LibDriver",
"//llvm:Linker",
"//llvm:MC",
"//llvm:Object",
"//llvm:Option",
"//llvm:Support",
"//llvm:Symbolize",
"//llvm:TransformUtils",
"//llvm:WindowsManifest",
],
)
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",
],
)
cc_library(
name = "Core",
srcs = glob([
"lib/Core/*.cpp",
"lib/Core/*.h",
]),
hdrs = glob(["include/lld/Core/*.h"]),
deps = [
":Common",
],
)
cc_library(
name = "YAML",
srcs = glob([
"lib/ReaderWriter/YAML/*.cpp",
"lib/ReaderWriter/YAML/*.h",
]),
hdrs = ["include/lld/ReaderWriter/YamlContext.h"],
deps = [
":Common",
":Core",
"//llvm:Support",
],
)
cc_library(
name = "MachOOld",
srcs = glob([
"lib/ReaderWriter/MachO/*.cpp",
"lib/ReaderWriter/MachO/*.h",
]),
hdrs = ["include/lld/ReaderWriter/MachOLinkingContext.h"],
deps = [
":Common",
":Core",
":YAML",
"//llvm:DebugInfoDWARF",
"//llvm:Object",
"//llvm:Support",
],
)
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:LTO",
],
)
cc_library(
name = "ReaderWriter",
srcs = glob([
"lib/ReaderWriter/*.cpp",
"lib/ReaderWriter/*.h",
]),
deps = [
":Common",
":Core",
":YAML",
"//llvm:Object",
"//llvm:Support",
],
)
gentbl(
name = "darwin_driver_options_inc_gen",
# See https://github.com/bazelbuild/bazel/issues/13803
strip_include_prefix = "lib/Driver",
tbl_outs = [(
"-gen-opt-parser-defs",
"lib/Driver/DarwinLdOptions.inc",
)],
tblgen = "//llvm:llvm-tblgen",
td_file = "lib/Driver/DarwinLdOptions.td",
td_srcs = [
"//llvm:include/llvm/Option/OptParser.td",
],
)
cc_library(
name = "Driver",
srcs = glob([
"lib/Driver/*.cpp",
"lib/Driver/*.h",
]),
includes = ["lib/Driver"],
deps = [
":Common",
":Core",
":MachOOld",
":ReaderWriter",
":YAML",
":darwin_driver_options_inc_gen",
"//llvm:Object",
"//llvm:Option",
"//llvm:Support",
],
)
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:LTO",
"//llvm:Object",
"//llvm:Option",
"//llvm:Support",
],
)
cc_binary(
name = "lld",
srcs = glob([
"tools/lld/*.cpp",
"tools/lld/*.h",
]),
tags = [
"manual", # External dependency (libxml through WindowsManifest)
"nobuildkite", # TODO(gcmn): Remote executors don't have libxml
],
deps = [
":COFF",
":Common",
":Core",
":Driver",
":ELF",
":MachOOld",
":MachO",
":MinGW",
":ReaderWriter",
":Wasm",
":YAML",
"//llvm:Support",
],
)
# 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".
genrule(
name = "gen_lld",
srcs = [":lld"],
outs = [
"ld.lld",
"ld64.lld.darwinnew",
"ld64.lld",
"lld-link",
"wasm-ld",
],
cmd =
"target=$$(basename $<); for n in ld.lld ld64.lld.darwinnew ld64.lld lld-link wasm-ld; do ln -sf $$target $(@D)/$$n; done",
output_to_bindir = 1,
tags = [
"manual", # External dependency (libxml through WindowsManifest)
"nobuildkite", # TODO(gcmn): Remote executors don't have libxml
],
)