forked from OSchip/llvm-project
Fix shared library build
* Removed cyclic dependency between lldPECOFF and lldDriver * Added missing dependencies in unit tests Differential Revision: http://reviews.llvm.org/D7185 llvm-svn: 227134
This commit is contained in:
parent
3c8465acb2
commit
0dc86722f5
|
@ -120,6 +120,14 @@ public:
|
|||
bool isDirective = false,
|
||||
std::set<StringRef> *undefinedSymbols = nullptr);
|
||||
|
||||
// Same as parse(), but restricted to the context of directives.
|
||||
static bool parseDirectives(int argc, const char *argv[],
|
||||
PECOFFLinkingContext &info,
|
||||
raw_ostream &diagnostics = llvm::errs(),
|
||||
std::set<StringRef> *undefinedSymbols = nullptr) {
|
||||
return parse(argc, argv, info, diagnostics, true, undefinedSymbols);
|
||||
}
|
||||
|
||||
private:
|
||||
WinLinkDriver() LLVM_DELETED_FUNCTION;
|
||||
};
|
||||
|
|
|
@ -47,7 +47,8 @@ public:
|
|||
_manifestUAC(true), _manifestLevel("'asInvoker'"),
|
||||
_manifestUiAccess("'false'"), _isDll(false), _highEntropyVA(true),
|
||||
_requireSEH(false), _noSEH(false), _implib(""), _debug(false),
|
||||
_pdbFilePath(""), _dosStub(llvm::makeArrayRef(DEFAULT_DOS_STUB)) {
|
||||
_pdbFilePath(""), _dosStub(llvm::makeArrayRef(DEFAULT_DOS_STUB)),
|
||||
_parseDirectives(nullptr) {
|
||||
setDeadStripping(true);
|
||||
}
|
||||
|
||||
|
@ -82,6 +83,9 @@ public:
|
|||
bool isPrivate;
|
||||
};
|
||||
|
||||
typedef bool (*ParseDirectives)(int, const char **, PECOFFLinkingContext &,
|
||||
raw_ostream &, std::set<StringRef> *);
|
||||
|
||||
/// \brief Casting support
|
||||
static inline bool classof(const LinkingContext *info) { return true; }
|
||||
|
||||
|
@ -326,6 +330,14 @@ public:
|
|||
|
||||
std::recursive_mutex &getMutex() { return _mutex; }
|
||||
|
||||
void setParseDirectives(ParseDirectives parseDirectives) {
|
||||
_parseDirectives = parseDirectives;
|
||||
}
|
||||
|
||||
ParseDirectives getParseDirectives() {
|
||||
return _parseDirectives;
|
||||
}
|
||||
|
||||
protected:
|
||||
/// Method to create a internal file for the entry symbol
|
||||
std::unique_ptr<File> createEntrySymbolFile() const override;
|
||||
|
@ -440,6 +452,8 @@ private:
|
|||
|
||||
std::set<std::string> _definedSyms;
|
||||
std::set<Node *> _seen;
|
||||
|
||||
ParseDirectives _parseDirectives;
|
||||
};
|
||||
|
||||
} // end namespace lld
|
||||
|
|
|
@ -855,6 +855,7 @@ bool WinLinkDriver::linkPECOFF(int argc, const char **argv, raw_ostream &diag) {
|
|||
return true;
|
||||
|
||||
PECOFFLinkingContext ctx;
|
||||
ctx.setParseDirectives(parseDirectives);
|
||||
ctx.registry().addSupportCOFFObjects(ctx);
|
||||
ctx.registry().addSupportCOFFImportLibraries(ctx);
|
||||
ctx.registry().addSupportArchives(ctx.logInputFiles());
|
||||
|
|
|
@ -910,9 +910,10 @@ FileCOFF::parseDirectiveSection(StringRef directives,
|
|||
const char **argv = &tokens[0];
|
||||
std::string errorMessage;
|
||||
llvm::raw_string_ostream stream(errorMessage);
|
||||
bool parseFailed = !WinLinkDriver::parse(argc, argv, _ctx, stream,
|
||||
/*isDirective*/ true,
|
||||
undefinedSymbols);
|
||||
PECOFFLinkingContext::ParseDirectives parseDirectives =
|
||||
_ctx.getParseDirectives();
|
||||
bool parseFailed = !parseDirectives(argc, argv, _ctx, stream,
|
||||
undefinedSymbols);
|
||||
stream.flush();
|
||||
// Print error message if error.
|
||||
if (parseFailed) {
|
||||
|
|
|
@ -4,6 +4,7 @@ add_llvm_executable(lld
|
|||
|
||||
target_link_libraries(lld
|
||||
lldDriver
|
||||
LLVMSupport
|
||||
)
|
||||
|
||||
install(TARGETS lld
|
||||
|
|
|
@ -8,4 +8,7 @@ add_lld_unittest(DriverTests
|
|||
|
||||
target_link_libraries(DriverTests
|
||||
lldDriver
|
||||
lldCore
|
||||
lldPECOFF
|
||||
lldMachO
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue