[lld] r189826 - Add support for --sysroot.
Joerg Sonnenberger
joerg at bec.de
Tue Sep 3 09:29:03 PDT 2013
Author: joerg
Date: Tue Sep 3 11:29:02 2013
New Revision: 189826
URL: http://llvm.org/viewvc/llvm-project?rev=189826&view=rev
Log:
Add support for --sysroot.
Modified:
lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
lld/trunk/lib/Driver/GnuLdDriver.cpp
lld/trunk/lib/Driver/LDOptions.td
lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
lld/trunk/test/Driver/libsearch-inputGraph.test
Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=189826&r1=189825&r2=189826&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Tue Sep 3 11:29:02 2013
@@ -175,6 +175,11 @@ public:
/// linker command line, using the -fini option.
range<const StringRef *> finiFunctions() const { return _finiFunctions; }
+ /// \brief Set path to the system root
+ void setSysroot(StringRef path) {
+ _sysrootPath = path;
+ }
+
private:
ELFLinkingContext() LLVM_DELETED_FUNCTION;
@@ -207,6 +212,7 @@ protected:
StringRef _dynamicLinkerPath;
StringRefVector _initFunctions;
StringRefVector _finiFunctions;
+ StringRef _sysrootPath;
};
} // end namespace lld
Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=189826&r1=189825&r2=189826&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Tue Sep 3 11:29:02 2013
@@ -289,6 +289,10 @@ bool GnuLdDriver::parse(int argc, const
break;
}
+ case OPT_sysroot:
+ ctx->setSysroot(inputArg->getValue());
+ break;
+
default:
break;
} // end switch on option ID
Modified: lld/trunk/lib/Driver/LDOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/LDOptions.td?rev=189826&r1=189825&r2=189826&view=diff
==============================================================================
--- lld/trunk/lib/Driver/LDOptions.td (original)
+++ lld/trunk/lib/Driver/LDOptions.td Tue Sep 3 11:29:02 2013
@@ -116,6 +116,9 @@ defm init: dashEq<"init", "init",
defm fini: dashEq<"fini", "fini",
"Specify a finalizer function">;
+def sysroot : Joined<["--"], "sysroot=">,
+ HelpText<"Set the system root">;
+
// extensions
def emit_yaml : Flag<["-"], "emit-yaml">,
HelpText<"Write YAML instead of ELF">;
Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=189826&r1=189825&r2=189826&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Tue Sep 3 11:29:02 2013
@@ -41,7 +41,8 @@ ELFLinkingContext::ELFLinkingContext(
_isStaticExecutable(false), _outputYAML(false), _noInhibitExec(false),
_mergeCommonStrings(false), _runLayoutPass(true),
_useShlibUndefines(false), _dynamicLinkerArg(false),
- _noAllowDynamicLibraries(false), _outputMagic(OutputMagic::DEFAULT) {}
+ _noAllowDynamicLibraries(false), _outputMagic(OutputMagic::DEFAULT),
+ _sysrootPath("") {}
bool ELFLinkingContext::is64Bits() const { return getTriple().isArch64Bit(); }
@@ -147,7 +148,12 @@ StringRef ELFLinkingContext::searchLibra
// Search for dynamic library
if (!_isStaticExecutable) {
SmallString<128> dynlibPath;
- dynlibPath.assign(dir);
+ if (dir.startswith("=/")) {
+ dynlibPath.assign(_sysrootPath);
+ dynlibPath.append(dir.substr(1));
+ } else {
+ dynlibPath.assign(dir);
+ }
llvm::sys::path::append(dynlibPath, Twine("lib") + libName + ".so");
pathref = dynlibPath.str();
if (llvm::sys::fs::exists(pathref)) {
@@ -157,7 +163,12 @@ StringRef ELFLinkingContext::searchLibra
// Search for static libraries too
if (!foundFile) {
SmallString<128> archivefullPath;
- archivefullPath.assign(dir);
+ if (dir.startswith("=/")) {
+ archivefullPath.assign(_sysrootPath);
+ archivefullPath.append(dir.substr(1));
+ } else {
+ archivefullPath.assign(dir);
+ }
llvm::sys::path::append(archivefullPath, Twine("lib") + libName + ".a");
pathref = archivefullPath.str();
if (llvm::sys::fs::exists(pathref)) {
Modified: lld/trunk/test/Driver/libsearch-inputGraph.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/Driver/libsearch-inputGraph.test?rev=189826&r1=189825&r2=189826&view=diff
==============================================================================
--- lld/trunk/test/Driver/libsearch-inputGraph.test (original)
+++ lld/trunk/test/Driver/libsearch-inputGraph.test Tue Sep 3 11:29:02 2013
@@ -4,6 +4,8 @@ RUN: lld -flavor gnu -L%p/../elf/Inputs
RUN: FileCheck %s -check-prefix="WHOLEARCHIVE" < %t1.err
RUN: lld -flavor gnu -L%p/../elf/Inputs --whole-archive --as-needed -lfnarchive -emit-yaml --noinhibit-exec 2> %t2.err
RUN: FileCheck %s -check-prefix="ASNEEDED" < %t2.err
+RUN: lld -flavor gnu --sysroot=%p/../elf -L=/Inputs -lfnarchive -emit-yaml --noinhibit-exec 2> %t3.err
+RUN: FileCheck -check-prefix="SYSROOT" %s < %t3.err
CHECK: Name : {{[^ ]+}}elf/Inputs{{[\\/]}}libfnarchive.a
CHECK: Type : ELF File
@@ -32,3 +34,11 @@ ASNEEDED: - asNeeded : true
ASNEEDED: contextPath :
ASNEEDED: - {{[^ ]+}}elf/Inputs
+SYSROOT: Name : {{[^ ]+}}elf/Inputs{{[\\/]}}libfnarchive.a
+SYSROOT: Type : ELF File
+SYSROOT: Ordinal : -1
+SYSROOT: Attributes :
+SYSROOT: - wholeArchive : false
+SYSROOT: - asNeeded : false
+SYSROOT: contextPath :
+SYSROOT: - =/Inputs
More information about the llvm-commits
mailing list