[lld][COFF] Find libraries with relative paths.
authorTobias Hieta <tobias.hieta@ubisoft.com>
Fri, 14 Jul 2023 07:40:35 +0000 (09:40 +0200)
committerTobias Hieta <tobias.hieta@ubisoft.com>
Fri, 14 Jul 2023 10:09:26 +0000 (12:09 +0200)
This patch is spun out of https://reviews.llvm.org/D151188
and makes it possible for lld-link to find libraries with
relative paths. This will be used later to implement the
changes to autolinking runtimes explained in #63827

Differential Revision: https://reviews.llvm.org/D155268

lld/COFF/Driver.cpp
lld/docs/ReleaseNotes.rst
lld/test/COFF/relative_search_paths.test [new file with mode: 0644]

index 5cefdac..5f11d11 100644 (file)
@@ -483,8 +483,7 @@ StringRef LinkerDriver::findFile(StringRef filename) {
     return filename;
   };
 
-  bool hasPathSep = (filename.find_first_of("/\\") != StringRef::npos);
-  if (hasPathSep)
+  if (sys::path::is_absolute(filename))
     return getFilename(filename);
   bool hasExt = filename.contains('.');
   for (StringRef dir : searchPaths) {
index dea0d95..4bd5a62 100644 (file)
@@ -37,6 +37,12 @@ Breaking changes
 COFF Improvements
 -----------------
 
+* lld-link can now find libraries with relative paths that are relative to
+  `/libpath`. Before it would only be able to find libraries relative to the
+  current directory.
+  I.e. ``lld-link /libpath:c:\relative\root relative\path\my.lib`` where before
+  we would have to do ``lld-link /libpath:c:\relative\root\relative\path my.lib``
+
 MinGW Improvements
 ------------------
 
diff --git a/lld/test/COFF/relative_search_paths.test b/lld/test/COFF/relative_search_paths.test
new file mode 100644 (file)
index 0000000..8c89e9a
--- /dev/null
@@ -0,0 +1,4 @@
+We should be able to find libraries with relative search paths.
+# RUN: mkdir -p %t.dir/relative/path
+# RUN: cp %p/Inputs/std64.lib %t.dir/relative/path
+# RUN: lld-link %p/Inputs/hello64.obj /libpath:%t.dir relative/path/std64.lib /entry:main