diff options
| author | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-02-19 23:05:36 +0000 |
|---|---|---|
| committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-02-19 23:05:36 +0000 |
| commit | 2139795dfab1ca0a98b6097dfc78b0a86f4600d8 (patch) | |
| tree | 64f85ed6d9a717ca9d32ad4a31df8b27ed193fdd /lld/lib/Driver/Drivers.cpp | |
| parent | 3e1729484f0046b4bd844c7ef0e6ff407026ffa7 (diff) | |
| download | bcm5719-llvm-2139795dfab1ca0a98b6097dfc78b0a86f4600d8.tar.gz bcm5719-llvm-2139795dfab1ca0a98b6097dfc78b0a86f4600d8.zip | |
[Driver][GNULD] Lookup .so files and default to dynamic output.
llvm-svn: 175572
Diffstat (limited to 'lld/lib/Driver/Drivers.cpp')
| -rw-r--r-- | lld/lib/Driver/Drivers.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lld/lib/Driver/Drivers.cpp b/lld/lib/Driver/Drivers.cpp index 466b49ed36c..9bf11d6abb2 100644 --- a/lld/lib/Driver/Drivers.cpp +++ b/lld/lib/Driver/Drivers.cpp @@ -115,6 +115,8 @@ public: std::unique_ptr<llvm::opt::DerivedArgList> newArgs( new llvm::opt::DerivedArgList(*_inputArgs)); + bool isOutputDynamic = false; + if (llvm::opt::Arg *A = _inputArgs->getLastArg(ld::OPT_target)) { newArgs->AddSeparateArg( A, _core.getOption(core::OPT_target) , A->getValue()); @@ -134,6 +136,15 @@ public: newArgs->AddJoinedArg(nullptr, _core.getOption(core::OPT_output), "a.out"); + if (llvm::opt::Arg *A = _inputArgs->getLastArg(ld::OPT_static)) + newArgs->AddJoinedArg(A, _core.getOption(core::OPT_output_type), + newArgs->MakeArgString("static")); + else { + newArgs->AddJoinedArg(nullptr, _core.getOption(core::OPT_output_type), + newArgs->MakeArgString("dynamic")); + isOutputDynamic = true; + } + if (llvm::opt::Arg *A = _inputArgs->getLastArg(ld::OPT_relocatable)) newArgs->AddFlagArg(A, _core.getOption(core::OPT_relocatable)); @@ -170,6 +181,14 @@ public: StringRef libName = (*it)->getValue(); SmallString<128> p; for (const auto &path : _inputSearchPaths) { + if (isOutputDynamic) { + p = path; + llvm::sys::path::append(p, Twine("lib") + libName + ".so"); + if (llvm::sys::fs::exists(p.str())) { + inputPath = newArgs->MakeArgString(p); + break; + } + } p = path; llvm::sys::path::append(p, Twine("lib") + libName + ".a"); if (llvm::sys::fs::exists(p.str())) { |

