mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-06 10:57:35 +03:00
Integrate LLD 6.0.0+ for ELF and Mach-O targets
LLD 5.0.0+ would work too, but as there's a new lldCommon library for LLD 6.0.0 (and no more lldConfig), simply require 6.0.0+ to keep the CMake setup reasonably simple.
This commit is contained in:
parent
00ba0d9c6d
commit
fcbf99d394
3 changed files with 47 additions and 11 deletions
|
@ -23,6 +23,10 @@
|
|||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
|
||||
#if LDC_WITH_LLD && LDC_LLVM_VER >= 600
|
||||
#include "lld/Common/Driver.h"
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static llvm::cl::opt<std::string>
|
||||
|
@ -594,7 +598,7 @@ void ArgsBuilder::addTargetFlags() {
|
|||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// (Yet unused) specialization for plain ld.
|
||||
// Specialization for plain ld.
|
||||
|
||||
class LdArgsBuilder : public ArgsBuilder {
|
||||
void addSanitizers(const llvm::Triple &triple) override {}
|
||||
|
@ -628,6 +632,30 @@ class LdArgsBuilder : public ArgsBuilder {
|
|||
|
||||
int linkObjToBinaryGcc(llvm::StringRef outputPath, bool useInternalLinker,
|
||||
llvm::cl::boolOrDefault fullyStaticFlag) {
|
||||
#if LDC_WITH_LLD && LDC_LLVM_VER >= 600
|
||||
if (useInternalLinker) {
|
||||
LdArgsBuilder argsBuilder;
|
||||
argsBuilder.build(outputPath, fullyStaticFlag);
|
||||
|
||||
const auto fullArgs =
|
||||
getFullArgs("ld.lld", argsBuilder.args, global.params.verbose);
|
||||
|
||||
bool success = false;
|
||||
if (global.params.targetTriple->isOSBinFormatELF()) {
|
||||
success = lld::elf::link(fullArgs, /*CanExitEarly*/ false);
|
||||
} else if (global.params.targetTriple->isOSBinFormatMachO()) {
|
||||
success = lld::mach_o::link(fullArgs);
|
||||
} else {
|
||||
error(Loc(), "unknown target binary format for internal linking");
|
||||
}
|
||||
|
||||
if (!success)
|
||||
error(Loc(), "linking with LLD failed");
|
||||
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
// find gcc for linking
|
||||
const std::string tool = getGcc();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue