From 2139795dfab1ca0a98b6097dfc78b0a86f4600d8 Mon Sep 17 00:00:00 2001 From: "Michael J. Spencer" Date: Tue, 19 Feb 2013 23:05:36 +0000 Subject: [Driver][GNULD] Lookup .so files and default to dynamic output. llvm-svn: 175572 --- lld/lib/Driver/Drivers.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'lld/lib/Driver/Drivers.cpp') 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 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())) { -- cgit v1.2.3