diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp --- a/lld/MinGW/Driver.cpp +++ b/lld/MinGW/Driver.cpp @@ -125,17 +125,36 @@ for (StringRef dir : searchPaths) if (Optional s = findFile(dir, name.substr(1))) return *s; - fatal("unable to find library -l" + name); + error("unable to find library -l" + name); + return ""; } for (StringRef dir : searchPaths) { - if (!bStatic) + if (!bStatic) { if (Optional s = findFile(dir, "lib" + name + ".dll.a")) return *s; + if (Optional s = findFile(dir, name + ".dll.a")) + return *s; + } if (Optional s = findFile(dir, "lib" + name + ".a")) return *s; + if (!bStatic) { + if (Optional s = findFile(dir, name + ".lib")) + return *s; + if (Optional s = findFile(dir, "lib" + name + ".dll")) { + error("lld doesn't support linking directly against " + *s + + ", use an import library"); + return ""; + } + if (Optional s = findFile(dir, name + ".dll")) { + error("lld doesn't support linking directly against " + *s + + ", use an import library"); + return ""; + } + } } - fatal("unable to find library -l" + name); + error("unable to find library -l" + name); + return ""; } // Convert Unix-ish command line arguments to Windows-ish ones and @@ -342,6 +361,9 @@ } } + if (errorCount()) + return false; + if (args.hasArg(OPT_verbose) || args.hasArg(OPT__HASH_HASH_HASH)) outs() << llvm::join(linkArgs, " ") << "\n"; diff --git a/lld/test/MinGW/lib.test b/lld/test/MinGW/lib.test --- a/lld/test/MinGW/lib.test +++ b/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