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) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits