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