diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-06-18 20:27:09 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-06-18 20:27:09 +0000 |
| commit | b95188cb2c820ca6e124ec993b62176355d6f2af (patch) | |
| tree | 79676a6f952d9ed0aca8633c6647a079ea59b4d5 | |
| parent | 98d7803291aaac19cd37805db35664454552943d (diff) | |
| download | bcm5719-llvm-b95188cb2c820ca6e124ec993b62176355d6f2af.tar.gz bcm5719-llvm-b95188cb2c820ca6e124ec993b62176355d6f2af.zip | |
COFF: Add /implib option.
llvm-svn: 240045
| -rw-r--r-- | lld/COFF/Config.h | 1 | ||||
| -rw-r--r-- | lld/COFF/Driver.cpp | 4 | ||||
| -rw-r--r-- | lld/COFF/DriverUtils.cpp | 10 | ||||
| -rw-r--r-- | lld/test/COFF/dll.test | 4 |
4 files changed, 16 insertions, 3 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 46db6de33f6..5b8d414bc84 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -55,6 +55,7 @@ struct Configuration { // True if we are creating a DLL. bool DLL = false; + StringRef Implib; std::vector<Export> Exports; // Options for manifest files. diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index adf682675cf..83457285d5f 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -338,6 +338,10 @@ bool LinkerDriver::link(int Argc, const char *Argv[]) { if (parseAlternateName(Arg->getValue())) return false; + // Handle /implib + if (auto *Arg = Args->getLastArg(OPT_implib)) + Config->Implib = Arg->getValue(); + // Handle /opt for (auto *Arg : Args->filtered(OPT_opt)) { std::string S = StringRef(Arg->getValue()).lower(); diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index 05dd62fcd9b..e9fc3ed095c 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -507,14 +507,18 @@ std::error_code writeImportLibrary() { std::string Contents = createModuleDefinitionFile(); std::string Def = writeToTempFile(Contents); llvm::FileRemover TempFile(Def); - SmallString<128> Out = StringRef(Config->OutputFile); - sys::path::replace_extension(Out, ".lib"); Executor E("lib.exe"); E.add("/nologo"); E.add("/machine:x64"); E.add(Twine("/def:") + Def); - E.add("/out:" + Out); + if (Config->Implib.empty()) { + SmallString<128> Out = StringRef(Config->OutputFile); + sys::path::replace_extension(Out, ".lib"); + E.add("/out:" + Out); + } else { + E.add("/out:" + Config->Implib); + } return E.run(); } diff --git a/lld/test/COFF/dll.test b/lld/test/COFF/dll.test index 70962a3c2bc..dcf3b58792b 100644 --- a/lld/test/COFF/dll.test +++ b/lld/test/COFF/dll.test @@ -28,6 +28,10 @@ EXPORT-LTO-NEXT: 3 0x1030 exportfn3 # RUN: lld -flavor link2 /out:%t2.exe %t2.obj %t.lib # RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s +# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /implib:%t2.lib /export:exportfn1 /export:exportfn2 +# RUN: lld -flavor link2 /out:%t2.exe %t2.obj %t2.lib +# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s + # RUN: lld -flavor link2 /out:%t2.lto.exe %t2.obj %t.lto.lib # RUN: llvm-readobj -coff-imports %t2.lto.exe | FileCheck -check-prefix=IMPORT %s |

