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