forked from OSchip/llvm-project
[Myriad]: insert -L paths into linker cmd only when they exist.
Differential Revision: http://reviews.llvm.org/D14754 llvm-svn: 253467
This commit is contained in:
parent
c02670ed50
commit
674a31243b
|
@ -4367,6 +4367,26 @@ MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple,
|
|||
case llvm::Triple::shave:
|
||||
GCCInstallation.init(Triple, Args, {"sparc-myriad-elf"});
|
||||
}
|
||||
|
||||
if (GCCInstallation.isValid()) {
|
||||
// The contents of LibDir are independent of the version of gcc.
|
||||
// This contains libc, libg (a superset of libc), libm, libstdc++, libssp.
|
||||
SmallString<128> LibDir(GCCInstallation.getParentLibPath());
|
||||
if (Triple.getArch() == llvm::Triple::sparcel)
|
||||
llvm::sys::path::append(LibDir, "../sparc-myriad-elf/lib/le");
|
||||
else
|
||||
llvm::sys::path::append(LibDir, "../sparc-myriad-elf/lib");
|
||||
addPathIfExists(D, LibDir, getFilePaths());
|
||||
|
||||
// This directory contains crt{i,n,begin,end}.o as well as libgcc.
|
||||
// These files are tied to a particular version of gcc.
|
||||
SmallString<128> CompilerSupportDir(GCCInstallation.getInstallPath());
|
||||
// There are actually 4 choices: {le,be} x {fpu,nofpu}
|
||||
// but as this toolchain is for LEON sparc, it can assume FPU.
|
||||
if (Triple.getArch() == llvm::Triple::sparcel)
|
||||
llvm::sys::path::append(CompilerSupportDir, "le");
|
||||
addPathIfExists(D, CompilerSupportDir, getFilePaths());
|
||||
}
|
||||
}
|
||||
|
||||
MyriadToolChain::~MyriadToolChain() {}
|
||||
|
@ -4413,27 +4433,6 @@ Tool *MyriadToolChain::SelectTool(const JobAction &JA) const {
|
|||
}
|
||||
}
|
||||
|
||||
void MyriadToolChain::getCompilerSupportDir(std::string &Dir) const {
|
||||
// This directory contains crt{i,n,begin,end}.o as well as libgcc.
|
||||
// These files are tied to a particular version of gcc.
|
||||
SmallString<128> Result(GCCInstallation.getInstallPath());
|
||||
// There are actually 4 choices: {le,be} x {fpu,nofpu}
|
||||
// but as this toolchain is for LEON sparc, it can assume FPU.
|
||||
if (this->getTriple().getArch() == llvm::Triple::sparcel)
|
||||
llvm::sys::path::append(Result, "le");
|
||||
Dir.assign(Result.str());
|
||||
}
|
||||
void MyriadToolChain::getBuiltinLibDir(std::string &Dir) const {
|
||||
// The contents of LibDir are independent of the version of gcc.
|
||||
// This contains libc, libg (a superset of libc), libm, libstdc++, libssp.
|
||||
SmallString<128> Result(GCCInstallation.getParentLibPath());
|
||||
if (this->getTriple().getArch() == llvm::Triple::sparcel)
|
||||
llvm::sys::path::append(Result, "../sparc-myriad-elf/lib/le");
|
||||
else
|
||||
llvm::sys::path::append(Result, "../sparc-myriad-elf/lib");
|
||||
Dir.assign(Result.str());
|
||||
}
|
||||
|
||||
Tool *MyriadToolChain::buildLinker() const {
|
||||
return new tools::Myriad::Linker(*this);
|
||||
}
|
||||
|
|
|
@ -1068,8 +1068,6 @@ public:
|
|||
const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args) const override;
|
||||
Tool *SelectTool(const JobAction &JA) const override;
|
||||
void getCompilerSupportDir(std::string &Dir) const;
|
||||
void getBuiltinLibDir(std::string &Dir) const;
|
||||
unsigned GetDefaultDwarfVersion() const override { return 2; }
|
||||
|
||||
protected:
|
||||
|
|
|
@ -9945,10 +9945,6 @@ void tools::Myriad::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
bool UseDefaultLibs =
|
||||
!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs);
|
||||
|
||||
std::string StartFilesDir, BuiltinLibDir;
|
||||
TC.getCompilerSupportDir(StartFilesDir);
|
||||
TC.getBuiltinLibDir(BuiltinLibDir);
|
||||
|
||||
if (T.getArch() == llvm::Triple::sparc)
|
||||
CmdArgs.push_back("-EB");
|
||||
else // SHAVE assumes little-endian, and sparcel is expressly so.
|
||||
|
@ -9972,19 +9968,15 @@ void tools::Myriad::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (UseStartfiles) {
|
||||
// If you want startfiles, it means you want the builtin crti and crtbegin,
|
||||
// but not crt0. Myriad link commands provide their own crt0.o as needed.
|
||||
CmdArgs.push_back(Args.MakeArgString(StartFilesDir + "/crti.o"));
|
||||
CmdArgs.push_back(Args.MakeArgString(StartFilesDir + "/crtbegin.o"));
|
||||
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtbegin.o")));
|
||||
}
|
||||
|
||||
Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
|
||||
options::OPT_e, options::OPT_s, options::OPT_t,
|
||||
options::OPT_Z_Flag, options::OPT_r});
|
||||
|
||||
// The linker doesn't use these builtin paths unless directed to,
|
||||
// because it was not compiled for support with sysroots, nor does
|
||||
// it have a default of little-endian with FPU.
|
||||
CmdArgs.push_back(Args.MakeArgString("-L" + BuiltinLibDir));
|
||||
CmdArgs.push_back(Args.MakeArgString("-L" + StartFilesDir));
|
||||
TC.AddFilePathLibArgs(Args, CmdArgs);
|
||||
|
||||
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
|
||||
|
||||
|
@ -10004,8 +9996,8 @@ void tools::Myriad::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-lgcc");
|
||||
}
|
||||
if (UseStartfiles) {
|
||||
CmdArgs.push_back(Args.MakeArgString(StartFilesDir + "/crtend.o"));
|
||||
CmdArgs.push_back(Args.MakeArgString(StartFilesDir + "/crtn.o"));
|
||||
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtend.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtn.o")));
|
||||
}
|
||||
|
||||
std::string Exec =
|
||||
|
|
Loading…
Reference in New Issue