diff options
-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">; |