protected:
MultilibSet Multilibs;
+ const char *DefaultLinker = "ld";
ToolChain(const Driver &D, const llvm::Triple &T,
const llvm::opt::ArgList &Args);
return "";
}
- return GetProgramPath("ld");
+ return GetProgramPath(DefaultLinker);
}
types::ID ToolChain::LookupTypeForExtension(const char *Ext) const {
getFilePaths().push_back(computeSysRoot() + "/usr/lib" + LibSuffix);
// Use LLD by default.
- if (!Args.getLastArg(options::OPT_fuse_ld_EQ))
- Linker = GetProgramPath("lld");
+ DefaultLinker = "lld";
}
void MipsLLVMToolChain::AddClangSystemIncludeArgs(
break;
}
- // Use provided linker, not system linker
- Linker = GetLinkerPath();
NaClArmMacrosPath = GetFilePath("nacl-arm-macros.s");
}
GCCInstallation.getTriple().str() + "/bin")
.str());
- Linker = GetLinkerPath();
-
Distro Distro = DetectDistro(D, Arch);
if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
llvm::opt::ArgStringList &CmdArgs) const override;
virtual std::string computeSysRoot() const;
- std::string Linker;
std::vector<std::string> ExtraOpts;
protected:
std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
types::ID InputType) const override;
- std::string Linker;
protected:
Tool *buildLinker() const override;
// handled somewhere else.
Args.ClaimAllArgs(options::OPT_w);
- if (llvm::sys::path::filename(ToolChain.Linker) == "lld") {
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+ if (llvm::sys::path::filename(Exec) == "lld") {
CmdArgs.push_back("-flavor");
CmdArgs.push_back("old-gnu");
CmdArgs.push_back("-target");
} else if (Args.hasArg(options::OPT_rtlib_EQ))
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
- C.addCommand(llvm::make_unique<Command>(JA, *this, ToolChain.Linker.c_str(),
- CmdArgs, Inputs));
+ C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
}
// NaCl ARM assembly (inline or standalone) can be written with a set of macros
}
}
- C.addCommand(llvm::make_unique<Command>(JA, *this, ToolChain.Linker.c_str(),
- CmdArgs, Inputs));
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+ C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
}
void minix::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
// RUN: %clang -### -target i686-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LD_32 %s
// CHECK_LD_32: {{ld|ld.exe}}"
// CHECK_LD_32: "i386pe"
-// CHECK_LD_32_NOT: "-flavor" "old-gnu"
+// CHECK_LD_32-NOT: "-flavor" "old-gnu"
// RUN: %clang -### -target i686-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_32 %s
+// CHECK_LLD_32-NOT: invalid linker name in argument
// CHECK_LLD_32: lld" "-flavor" "old-gnu"
// CHECK_LLD_32: "i386pe"
// RUN: %clang -### -target x86_64-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_64 %s
+// CHECK_LLD_64-NOT: invalid linker name in argument
// CHECK_LLD_64: lld" "-flavor" "old-gnu"
// CHECK_LLD_64: "i386pep"
// RUN: %clang -### -target arm-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_ARM %s
+// CHECK_LLD_ARM-NOT: invalid linker name in argument
// CHECK_LLD_ARM: lld" "-flavor" "old-gnu"
// CHECK_LLD_ARM: "thumb2pe"