[PATCH] D68689: [LLD] [MinGW] Look for other library patterns with -l
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 9 03:51:09 PDT 2019
mstorsjo created this revision.
mstorsjo added reviewers: ruiu, rnk.
Herald added a project: LLVM.
GNU ld looks for a number of other patterns than just lib<name>.dll.a and lib<name>.a.
GNU ld does support linking directly against a DLL without using an import library. If that's the only match for a -l argument, point out that the user needs to use an import library, instead of leaving the user with a puzzling message about the -l argument not being found at all.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D68689
Files:
lld/MinGW/Driver.cpp
lld/test/MinGW/lib.test
Index: lld/test/MinGW/lib.test
===================================================================
--- lld/test/MinGW/lib.test
+++ lld/test/MinGW/lib.test
@@ -26,3 +26,16 @@
RUN: ld.lld -### -m i386pep -Bstatic -lfoo -Bdynamic -lbar -L%t/lib | FileCheck -check-prefix=LIB5 %s
LIB5: libfoo.a
LIB5-SAME: libbar.dll.a
+
+RUN: echo > %t/lib/noprefix.dll.a
+RUN: echo > %t/lib/msvcstyle.lib
+RUN: ld.lld -### -m i386pep -L%t/lib -lnoprefix -lmsvcstyle | FileCheck -check-prefix=OTHERSTYLES %s
+OTHERSTYLES: noprefix.dll.a
+OTHERSTYLES-SAME: msvcstyle.lib
+
+RUN: echo > %t/lib/libnoimplib.dll
+RUN: echo > %t/lib/noprefix_noimplib.dll
+RUN: not ld.lld -### -m i386pep -L%t/lib -lnoimplib 2>&1 | FileCheck -check-prefix=UNSUPPORTED-DLL1 %s
+RUN: not ld.lld -### -m i386pep -L%t/lib -lnoprefix_noimplib 2>&1 | FileCheck -check-prefix=UNSUPPORTED-DLL2 %s
+UNSUPPORTED-DLL1: lld doesn't support linking directly against {{.*}}libnoimplib.dll, use an import library
+UNSUPPORTED-DLL2: lld doesn't support linking directly against {{.*}}noprefix_noimplib.dll, use an import library
Index: lld/MinGW/Driver.cpp
===================================================================
--- lld/MinGW/Driver.cpp
+++ lld/MinGW/Driver.cpp
@@ -129,11 +129,24 @@
}
for (StringRef dir : searchPaths) {
- if (!bStatic)
+ if (!bStatic) {
if (Optional<std::string> s = findFile(dir, "lib" + name + ".dll.a"))
return *s;
+ if (Optional<std::string> s = findFile(dir, name + ".dll.a"))
+ return *s;
+ }
if (Optional<std::string> s = findFile(dir, "lib" + name + ".a"))
return *s;
+ if (!bStatic) {
+ if (Optional<std::string> s = findFile(dir, name + ".lib"))
+ return *s;
+ if (Optional<std::string> s = findFile(dir, "lib" + name + ".dll"))
+ fatal("lld doesn't support linking directly against " + *s +
+ ", use an import library");
+ if (Optional<std::string> s = findFile(dir, name + ".dll"))
+ fatal("lld doesn't support linking directly against " + *s +
+ ", use an import library");
+ }
}
fatal("unable to find library -l" + name);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68689.224011.patch
Type: text/x-patch
Size: 2152 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191009/1709b8bb/attachment.bin>
More information about the llvm-commits
mailing list