lichray created this revision.
Herald added subscribers: aheejin, jgravelle-google, sbc100, nhaehnle, dschuff,
jfb, emaste.
`LIBRARY_PATH` expansion should happen before expanding native toolchains'
linker arguments, if any, to allow overriding the default standard libraries to
link. GCC supports this practice as well.
Factor the code expanding `LIBRARY_PATH` out of `AddLinkerInputs` into
`AddLibraryPaths` add let the platform-specific code decide the appropriate
order for these flags.
Fixes: https://bugs.llvm.org/show_bug.cgi?id=16786
https://reviews.llvm.org/D39412
Files:
lib/Driver/ToolChains/AMDGPU.cpp
lib/Driver/ToolChains/AVR.cpp
lib/Driver/ToolChains/Ananas.cpp
lib/Driver/ToolChains/BareMetal.cpp
lib/Driver/ToolChains/CloudABI.cpp
lib/Driver/ToolChains/CommonArgs.cpp
lib/Driver/ToolChains/CommonArgs.h
lib/Driver/ToolChains/CrossWindows.cpp
lib/Driver/ToolChains/Darwin.cpp
lib/Driver/ToolChains/DragonFly.cpp
lib/Driver/ToolChains/FreeBSD.cpp
lib/Driver/ToolChains/Fuchsia.cpp
lib/Driver/ToolChains/Gnu.cpp
lib/Driver/ToolChains/Hexagon.cpp
lib/Driver/ToolChains/MinGW.cpp
lib/Driver/ToolChains/Minix.cpp
lib/Driver/ToolChains/Myriad.cpp
lib/Driver/ToolChains/NaCl.cpp
lib/Driver/ToolChains/NetBSD.cpp
lib/Driver/ToolChains/OpenBSD.cpp
lib/Driver/ToolChains/PS4CPU.cpp
lib/Driver/ToolChains/Solaris.cpp
lib/Driver/ToolChains/WebAssembly.cpp
lib/Driver/ToolChains/XCore.cpp
Index: lib/Driver/ToolChains/XCore.cpp
===================================================================
--- lib/Driver/ToolChains/XCore.cpp
+++ lib/Driver/ToolChains/XCore.cpp
@@ -79,6 +79,7 @@
CmdArgs.push_back("-fexceptions");
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("xcc"));
C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
Index: lib/Driver/ToolChains/WebAssembly.cpp
===================================================================
--- lib/Driver/ToolChains/WebAssembly.cpp
+++ lib/Driver/ToolChains/WebAssembly.cpp
@@ -47,6 +47,7 @@
CmdArgs.push_back("--strip-all");
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
Index: lib/Driver/ToolChains/Solaris.cpp
===================================================================
--- lib/Driver/ToolChains/Solaris.cpp
+++ lib/Driver/ToolChains/Solaris.cpp
@@ -92,6 +92,7 @@
Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
}
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
getToolChain().AddFilePathLibArgs(Args, CmdArgs);
Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
Index: lib/Driver/ToolChains/PS4CPU.cpp
===================================================================
--- lib/Driver/ToolChains/PS4CPU.cpp
+++ lib/Driver/ToolChains/PS4CPU.cpp
@@ -25,6 +25,7 @@
using namespace llvm::opt;
using clang::driver::tools::AddLinkerInputs;
+using clang::driver::tools::AddLibraryPaths;
void tools::PS4cpu::addProfileRTArgs(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs) {
@@ -125,6 +126,7 @@
CmdArgs.push_back("--no-demangle");
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
if (Args.hasArg(options::OPT_pthread)) {
CmdArgs.push_back("-lpthread");
@@ -210,6 +212,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
Args.AddAllArgs(CmdArgs, options::OPT_e);
Index: lib/Driver/ToolChains/OpenBSD.cpp
===================================================================
--- lib/Driver/ToolChains/OpenBSD.cpp
+++ lib/Driver/ToolChains/OpenBSD.cpp
@@ -165,6 +165,8 @@
}
}
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
+
std::string Triple = getToolChain().getTripleString();
if (Triple.substr(0, 6) == "x86_64")
Triple.replace(0, 6, "amd64");
Index: lib/Driver/ToolChains/NetBSD.cpp
===================================================================
--- lib/Driver/ToolChains/NetBSD.cpp
+++ lib/Driver/ToolChains/NetBSD.cpp
@@ -249,6 +249,7 @@
bool NeedsSanitizerDeps = addSanitizerRuntimes(getToolChain(), Args, CmdArgs);
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
unsigned Major, Minor, Micro;
getToolChain().getTriple().getOSVersion(Major, Minor, Micro);
Index: lib/Driver/ToolChains/NaCl.cpp
===================================================================
--- lib/Driver/ToolChains/NaCl.cpp
+++ lib/Driver/ToolChains/NaCl.cpp
@@ -124,6 +124,7 @@
Args.AddAllArgs(CmdArgs, options::OPT_L);
Args.AddAllArgs(CmdArgs, options::OPT_u);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))
Index: lib/Driver/ToolChains/Myriad.cpp
===================================================================
--- lib/Driver/ToolChains/Myriad.cpp
+++ lib/Driver/ToolChains/Myriad.cpp
@@ -165,6 +165,7 @@
options::OPT_e, options::OPT_s, options::OPT_t,
options::OPT_Z_Flag, options::OPT_r});
+ AddLibraryPaths(TC, Args, CmdArgs);
TC.AddFilePathLibArgs(Args, CmdArgs);
bool NeedsSanitizerDeps = addSanitizerRuntimes(TC, Args, CmdArgs);
Index: lib/Driver/ToolChains/Minix.cpp
===================================================================
--- lib/Driver/ToolChains/Minix.cpp
+++ lib/Driver/ToolChains/Minix.cpp
@@ -67,6 +67,7 @@
{options::OPT_L, options::OPT_T_Group, options::OPT_e});
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
getToolChain().addProfileRTLibs(Args, CmdArgs);
Index: lib/Driver/ToolChains/MinGW.cpp
===================================================================
--- lib/Driver/ToolChains/MinGW.cpp
+++ lib/Driver/ToolChains/MinGW.cpp
@@ -193,6 +193,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(TC, Args, CmdArgs);
TC.AddFilePathLibArgs(Args, CmdArgs);
AddLinkerInputs(TC, Inputs, Args, CmdArgs, JA);
Index: lib/Driver/ToolChains/Hexagon.cpp
===================================================================
--- lib/Driver/ToolChains/Hexagon.cpp
+++ lib/Driver/ToolChains/Hexagon.cpp
@@ -324,6 +324,8 @@
//----------------------------------------------------------------------------
// Library Search Paths
//----------------------------------------------------------------------------
+ AddLibraryPaths(HTC, Args, CmdArgs);
+
const ToolChain::path_list &LibPaths = HTC.getFilePaths();
for (const auto &LibPath : LibPaths)
CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + LibPath));
Index: lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- lib/Driver/ToolChains/Gnu.cpp
+++ lib/Driver/ToolChains/Gnu.cpp
@@ -434,6 +434,7 @@
Args.AddAllArgs(CmdArgs, options::OPT_L);
Args.AddAllArgs(CmdArgs, options::OPT_u);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
if (D.isUsingLTO())
Index: lib/Driver/ToolChains/Fuchsia.cpp
===================================================================
--- lib/Driver/ToolChains/Fuchsia.cpp
+++ lib/Driver/ToolChains/Fuchsia.cpp
@@ -98,6 +98,7 @@
Args.AddAllArgs(CmdArgs, options::OPT_L);
Args.AddAllArgs(CmdArgs, options::OPT_u);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
addSanitizerRuntimes(ToolChain, Args, CmdArgs);
Index: lib/Driver/ToolChains/FreeBSD.cpp
===================================================================
--- lib/Driver/ToolChains/FreeBSD.cpp
+++ lib/Driver/ToolChains/FreeBSD.cpp
@@ -223,6 +223,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
Args.AddAllArgs(CmdArgs, options::OPT_e);
Index: lib/Driver/ToolChains/DragonFly.cpp
===================================================================
--- lib/Driver/ToolChains/DragonFly.cpp
+++ lib/Driver/ToolChains/DragonFly.cpp
@@ -117,6 +117,7 @@
{options::OPT_L, options::OPT_T_Group, options::OPT_e});
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
CmdArgs.push_back("-L/usr/lib/gcc50");
Index: lib/Driver/ToolChains/Darwin.cpp
===================================================================
--- lib/Driver/ToolChains/Darwin.cpp
+++ lib/Driver/ToolChains/Darwin.cpp
@@ -500,6 +500,7 @@
Args.AddAllArgs(CmdArgs, options::OPT_L);
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
// Build the input file for -filelist (list of linker input files) in case we
// need it later
for (const auto &II : Inputs) {
Index: lib/Driver/ToolChains/CrossWindows.cpp
===================================================================
--- lib/Driver/ToolChains/CrossWindows.cpp
+++ lib/Driver/ToolChains/CrossWindows.cpp
@@ -162,6 +162,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(TC, Args, CmdArgs);
TC.AddFilePathLibArgs(Args, CmdArgs);
AddLinkerInputs(TC, Inputs, Args, CmdArgs, JA);
Index: lib/Driver/ToolChains/CommonArgs.h
===================================================================
--- lib/Driver/ToolChains/CommonArgs.h
+++ lib/Driver/ToolChains/CommonArgs.h
@@ -23,6 +23,9 @@
void addPathIfExists(const Driver &D, const Twine &Path,
ToolChain::path_list &Paths);
+void AddLibraryPaths(const ToolChain &TC, const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs);
+
void AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs, const JobAction &JA);
Index: lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- lib/Driver/ToolChains/CommonArgs.cpp
+++ lib/Driver/ToolChains/CommonArgs.cpp
@@ -134,6 +134,13 @@
}
}
+void tools::AddLibraryPaths(const ToolChain &TC, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+ // Only supported on native toolchains.
+ if (!TC.isCrossCompiling())
+ addDirectoryList(Args, CmdArgs, "-L", "LIBRARY_PATH");
+}
+
void tools::AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
const ArgList &Args, ArgStringList &CmdArgs,
const JobAction &JA) {
@@ -178,12 +185,6 @@
A.renderAsInput(Args, CmdArgs);
}
}
-
- // LIBRARY_PATH - included following the user specified library paths.
- // and only supported on native toolchains.
- if (!TC.isCrossCompiling()) {
- addDirectoryList(Args, CmdArgs, "-L", "LIBRARY_PATH");
- }
}
void tools::AddTargetFeature(const ArgList &Args,
Index: lib/Driver/ToolChains/CloudABI.cpp
===================================================================
--- lib/Driver/ToolChains/CloudABI.cpp
+++ lib/Driver/ToolChains/CloudABI.cpp
@@ -70,6 +70,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
Args.AddAllArgs(CmdArgs,
{options::OPT_T_Group, options::OPT_e, options::OPT_s,
Index: lib/Driver/ToolChains/BareMetal.cpp
===================================================================
--- lib/Driver/ToolChains/BareMetal.cpp
+++ lib/Driver/ToolChains/BareMetal.cpp
@@ -175,6 +175,7 @@
auto &TC = static_cast<const toolchains::BareMetal&>(getToolChain());
AddLinkerInputs(TC, Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(TC, Args, CmdArgs);
CmdArgs.push_back("-Bstatic");
Index: lib/Driver/ToolChains/Ananas.cpp
===================================================================
--- lib/Driver/ToolChains/Ananas.cpp
+++ lib/Driver/ToolChains/Ananas.cpp
@@ -81,6 +81,7 @@
}
Args.AddAllArgs(CmdArgs, options::OPT_L);
+ AddLibraryPaths(ToolChain, Args, CmdArgs);
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
Args.AddAllArgs(CmdArgs,
{options::OPT_T_Group, options::OPT_e, options::OPT_s,
Index: lib/Driver/ToolChains/AVR.cpp
===================================================================
--- lib/Driver/ToolChains/AVR.cpp
+++ lib/Driver/ToolChains/AVR.cpp
@@ -36,6 +36,7 @@
std::string Linker = getToolChain().GetProgramPath(getShortName());
ArgStringList CmdArgs;
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
CmdArgs.push_back("-o");
CmdArgs.push_back(Output.getFilename());
C.addCommand(llvm::make_unique<Command>(JA, *this, Args.MakeArgString(Linker),
Index: lib/Driver/ToolChains/AMDGPU.cpp
===================================================================
--- lib/Driver/ToolChains/AMDGPU.cpp
+++ lib/Driver/ToolChains/AMDGPU.cpp
@@ -28,6 +28,7 @@
std::string Linker = getToolChain().GetProgramPath(getShortName());
ArgStringList CmdArgs;
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ AddLibraryPaths(getToolChain(), Args, CmdArgs);
CmdArgs.push_back("-shared");
CmdArgs.push_back("-o");
CmdArgs.push_back(Output.getFilename());
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits