r253467 - [Myriad]: insert -L paths into linker cmd only when they exist.
Douglas Katzman via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 18 08:24:47 PST 2015
Author: dougk
Date: Wed Nov 18 10:24:46 2015
New Revision: 253467
URL: http://llvm.org/viewvc/llvm-project?rev=253467&view=rev
Log:
[Myriad]: insert -L paths into linker cmd only when they exist.
Differential Revision: http://reviews.llvm.org/D14754
Added:
cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtend.o
cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crti.o
cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtn.o
cfe/trunk/test/Driver/Inputs/basic_myriad_tree/sparc-myriad-elf/lib/
cfe/trunk/test/Driver/Inputs/basic_myriad_tree/sparc-myriad-elf/lib/crt0.o
Modified:
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h
cfe/trunk/lib/Driver/Tools.cpp
Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=253467&r1=253466&r2=253467&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Nov 18 10:24:46 2015
@@ -4367,6 +4367,26 @@ MyriadToolChain::MyriadToolChain(const D
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
}
}
-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);
}
Modified: cfe/trunk/lib/Driver/ToolChains.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=253467&r1=253466&r2=253467&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.h (original)
+++ cfe/trunk/lib/Driver/ToolChains.h Wed Nov 18 10:24:46 2015
@@ -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:
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253467&r1=253466&r2=253467&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Nov 18 10:24:46 2015
@@ -9945,10 +9945,6 @@ void tools::Myriad::Linker::ConstructJob
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
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
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 =
Added: cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtend.o
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtend.o?rev=253467&view=auto
==============================================================================
(empty)
Added: cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crti.o
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crti.o?rev=253467&view=auto
==============================================================================
(empty)
Added: cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtn.o
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_myriad_tree/lib/gcc/sparc-myriad-elf/4.8.2/crtn.o?rev=253467&view=auto
==============================================================================
(empty)
Added: cfe/trunk/test/Driver/Inputs/basic_myriad_tree/sparc-myriad-elf/lib/crt0.o
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_myriad_tree/sparc-myriad-elf/lib/crt0.o?rev=253467&view=auto
==============================================================================
(empty)
More information about the cfe-commits
mailing list