diff options
Diffstat (limited to 'COFF/Driver.cpp')
-rw-r--r-- | COFF/Driver.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/COFF/Driver.cpp b/COFF/Driver.cpp index 27b1c48ce3e5..71a9c679d19f 100644 --- a/COFF/Driver.cpp +++ b/COFF/Driver.cpp @@ -429,7 +429,7 @@ static std::string getImplibPath() { return Out.str(); } -std::vector<COFFShortExport> createCOFFShortExportFromConfig() { +static void createImportLibrary() { std::vector<COFFShortExport> Exports; for (Export &E1 : Config->Exports) { COFFShortExport E2; @@ -443,11 +443,7 @@ std::vector<COFFShortExport> createCOFFShortExportFromConfig() { E2.Constant = E1.Constant; Exports.push_back(E2); } - return Exports; -} -static void createImportLibrary() { - std::vector<COFFShortExport> Exports = createCOFFShortExportFromConfig(); std::string DLLName = sys::path::filename(Config->OutputFile); std::string Path = getImplibPath(); writeImportLibrary(DLLName, Path, Exports, Config->Machine); @@ -707,8 +703,12 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) { } } - if (!Args.hasArgNoClaim(OPT_INPUT)) - fatal("no input files"); + if (!Args.hasArgNoClaim(OPT_INPUT)) { + if (Args.hasArgNoClaim(OPT_deffile)) + Config->NoEntry = true; + else + fatal("no input files"); + } // Construct search path list. SearchPaths.push_back(""); @@ -990,6 +990,13 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) { parseModuleDefs(Arg->getValue()); } + // Handle generation of import library from a def file. + if (!Args.hasArgNoClaim(OPT_INPUT)) { + fixupExports(); + createImportLibrary(); + exit(0); + } + // Handle /delayload for (auto *Arg : Args.filtered(OPT_delayload)) { Config->DelayLoads.insert(StringRef(Arg->getValue()).lower()); |