Skip to content

Commit

Permalink
[COFF] Require an explicit -implib option for creating implibs in min…
Browse files Browse the repository at this point in the history
…gw mode

GNU ld doesn't produce implibs unless explicitly requested.

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

llvm-svn: 369363
  • Loading branch information
mstorsjo committed Aug 20, 2019
1 parent b8dcc19 commit 6540e55
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lld/COFF/Driver.cpp
Expand Up @@ -1841,10 +1841,12 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
}

// Windows specific -- when we are creating a .dll file, we also
// need to create a .lib file.
// need to create a .lib file. In MinGW mode, we only do that when the
// -implib option is given explicitly, for compatibility with GNU ld.
if (!config->exports.empty() || config->dll) {
fixupExports();
createImportLibrary(/*asLib=*/false);
if (!config->mingw || !config->implib.empty())
createImportLibrary(/*asLib=*/false);
assignExportOrdinals();
}

Expand Down
20 changes: 20 additions & 0 deletions lld/test/COFF/implib-name-mingw.test
@@ -0,0 +1,20 @@
REQUIRES: x86
RUN: mkdir -p %t-out
RUN: llvm-mc -triple x86_64-windows-gnu -filetype obj -o %t-out/object.obj %S/Inputs/object.s

Check that linking without an explicit -implib doesn't produce any implib.

First test that linking without -lldmingw does produce an implib, but when
adding -lldmingw, it no longer is produced. And when it is explicitly named,
it is created.

RUN: rm -f %t-out/library.lib
RUN: lld-link -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console
RUN: test -f %t-out/library.lib

RUN: rm -f %t-out/library.lib
RUN: lld-link -lldmingw -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console
RUN: not test -f %t-out/library.lib

RUN: lld-link -lldmingw -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console -implib:%t-out/library.lib
RUN: test -f %t-out/library.lib

0 comments on commit 6540e55

Please sign in to comment.