[PATCH] D81113: lld: add basic static library search

Saleem Abdulrasool via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 3 12:05:43 PDT 2020


compnerd created this revision.
compnerd added reviewers: smeenai, int3.
compnerd added a project: lld.
Herald added a project: LLVM.

This is a very basic static library search addition.  This is the pre-Xcode4 behaviour of searching all paths for the shared version before searching for the static version of the library.  This behaviour is supposed to be inverted with `-search_paths_first` being the default.  This adds the library search with the intention of providing the setup to merge the paths into one path and making it controllable by `OPT_search_paths_first`.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D81113

Files:
  lld/MachO/Driver.cpp
  lld/test/MachO/static-link.s


Index: lld/test/MachO/static-link.s
===================================================================
--- /dev/null
+++ lld/test/MachO/static-link.s
@@ -0,0 +1,33 @@
+# RUN: mkdir -p %t
+# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %p/Inputs/libhello.s -o %t/hello.o
+# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %p/Inputs/libgoodbye.s -o %t/goodbye.o
+# RUN: lld -flavor darwinnew -dylib -install_name @executable_path/libhello.dylib %t/hello.o -o %t/libhello.dylib
+# RUN: llvm-ar --format=darwin crs %t/libgoodbye.a %t/goodbye.o
+# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %s -o %t/test.o
+# RUN: lld -flavor darwinnew -o %t/test -Z -L%t -lhello -lgoodbye %t/test.o
+
+# REQUIRES: x86
+
+.section __TEXT,__text
+.global _main
+
+_main:
+  movl $0x2000004, %eax                                # write()
+  mov $1, %rdi                                 # stdout
+  movq _hello_world at GOTPCREL(%rip), %rsi
+  mov $13, %rdx                                        # length
+  syscall
+
+  movl $0x2000004, %eax                                # write()
+  mov $1, %rdi                                 # stdout
+  movq _hello_its_me at GOTPCREL(%rip), %rsi
+  mov $15, %rdx                                        # length
+  syscall
+
+  movl $0x2000004, %eax                                # write()
+  mov $1, %rdi                                 # stdout
+  movq _goodbye_world at GOTPCREL(%rip), %rsi
+  mov $15, %rdx                                        # length
+  syscall
+  mov $0, %rax
+  ret
Index: lld/MachO/Driver.cpp
===================================================================
--- lld/MachO/Driver.cpp
+++ lld/MachO/Driver.cpp
@@ -80,7 +80,15 @@
     if (fs::exists(path))
       return path;
   }
-  error("library not found for -l" + name);
+  return None;
+}
+
+static Optional<std::string> findArchive(StringRef name) {
+  for (StringRef dir : config->searchPaths) {
+    std::string path = (dir + "/lib" + name + ".a").str();
+    if (fs::exists(path))
+      return path;
+  }
   return None;
 }
 
@@ -286,10 +294,16 @@
     case OPT_INPUT:
       addFile(arg->getValue());
       break;
-    case OPT_l:
-      if (Optional<std::string> path = findDylib(arg->getValue()))
+    case OPT_l: {
+      StringRef name = arg->getValue();
+      if (Optional<std::string> path = findDylib(name))
+        addFile(*path);
+      else if (Optional<std::string> path = findArchive(name))
         addFile(*path);
+      else
+        error("library not found for -l" + name);
       break;
+    }
     case OPT_platform_version: {
       handlePlatformVersion(it, end); // Can advance "it".
       break;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81113.268272.patch
Type: text/x-patch
Size: 2653 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200603/bb1ac9ae/attachment.bin>


More information about the llvm-commits mailing list