driver: Factor out entry point module emission code.

This commit is contained in:
David Nadlinger 2014-07-09 15:34:15 +02:00
parent a10ab28912
commit 36e9465b7a

View file

@ -847,6 +847,29 @@ void genCmain(Scope *sc)
rootHasMain = sc->module;
}
static void emitEntryPointInto(llvm::Module* lm)
{
assert(entrypoint && "Entry point Dmodule has not been generated.");
#if LDC_LLVM_VER >= 303
llvm::Linker linker(lm);
#else
llvm::Linker linker("ldc", lm);
#endif
llvm::Module* entryModule = entrypoint->genLLVMModule(lm->getContext());
std::string linkError;
#if LDC_LLVM_VER >= 303
const bool hadError = linker.linkInModule(entryModule, &linkError);
#else
const bool hadError = linker.LinkInModule(entryModule, &linkError);
linker.releaseModule();
#endif
if (hadError)
error(Loc(), "%s", linkError.c_str());
}
int main(int argc, char **argv)
{
// stack trace on signals
@ -1258,25 +1281,7 @@ int main(int argc, char **argv)
{
llvm::Module* lm = m->genLLVMModule(context);
if (entrypoint && rootHasMain == m)
{
#if LDC_LLVM_VER >= 303
llvm::Linker linker(lm);
#else
llvm::Linker linker("ldc", lm);
#endif
llvm::Module* entryModule = entrypoint->genLLVMModule(context);
std::string linkError;
#if LDC_LLVM_VER >= 303
const bool hadError = linker.linkInModule(entryModule, &linkError);
#else
const bool hadError= linker.LinkInModule(entryModule, &linkError);
linker.releaseModule();
#endif
if (hadError)
error(Loc(), "%s", linkError.c_str());
}
emitEntryPointInto(lm);
if (!singleObj)
{
m->deleteObjFile();