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 | |
| 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
| -rw-r--r-- | lld/lib/Driver/Drivers.cpp | 19 | ||||
| -rw-r--r-- | lld/lib/Driver/LDOptions.td | 2 |
2 files changed, 21 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())) { diff --git a/lld/lib/Driver/LDOptions.td b/lld/lib/Driver/LDOptions.td index a57c8befc97..736c9c80ec5 100644 --- a/lld/lib/Driver/LDOptions.td +++ b/lld/lib/Driver/LDOptions.td @@ -14,6 +14,8 @@ def output_e : Separate<["-"], "o">, Alias<output>; def relocatable : Flag<["--"], "relocatable">; def relocatable_r : Flag<["-"], "r">, Alias<relocatable>; +def dynamic_linker : Separate<["-"], "dynamic-linker">; + def OCTOTHORPE_OCTOTHORPE_OCTOTHORPE : Flag<["-"], "###">; def emit_yaml : Flag<["-"], "emit-yaml">; |

