[lld] r175572 - [Driver][GNULD] Lookup .so files and default to dynamic output.

Michael J. Spencer bigcheesegs at gmail.com
Tue Feb 19 15:05:37 PST 2013


Author: mspencer
Date: Tue Feb 19 17:05:36 2013
New Revision: 175572

URL: http://llvm.org/viewvc/llvm-project?rev=175572&view=rev
Log:
[Driver][GNULD] Lookup .so files and default to dynamic output.

Modified:
    lld/trunk/lib/Driver/Drivers.cpp
    lld/trunk/lib/Driver/LDOptions.td

Modified: lld/trunk/lib/Driver/Drivers.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Drivers.cpp?rev=175572&r1=175571&r2=175572&view=diff
==============================================================================
--- lld/trunk/lib/Driver/Drivers.cpp (original)
+++ lld/trunk/lib/Driver/Drivers.cpp Tue Feb 19 17:05:36 2013
@@ -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())) {

Modified: lld/trunk/lib/Driver/LDOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/LDOptions.td?rev=175572&r1=175571&r2=175572&view=diff
==============================================================================
--- lld/trunk/lib/Driver/LDOptions.td (original)
+++ lld/trunk/lib/Driver/LDOptions.td Tue Feb 19 17:05:36 2013
@@ -14,6 +14,8 @@ def output_e : Separate<["-"], "o">, Ali
 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">;





More information about the llvm-commits mailing list