gallivm: Support MCJIT on Windows.
It works fine, though it requires using ELF objects. With this change there is nothing preventing us to switch exclusively to MCJIT, everywhere. It's still off though.
This commit is contained in:
@@ -104,7 +104,7 @@ def generate(env):
|
||||
'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
|
||||
'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG',
|
||||
'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter',
|
||||
'LLVMX86Utils', 'LLVMX86Info', 'LLVMJIT',
|
||||
'LLVMX86Utils', 'LLVMX86Info', 'LLVMMCJIT', 'LLVMJIT',
|
||||
'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts',
|
||||
'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa',
|
||||
'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore',
|
||||
@@ -116,7 +116,7 @@ def generate(env):
|
||||
'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
|
||||
'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG',
|
||||
'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter',
|
||||
'LLVMX86Utils', 'LLVMX86Info', 'LLVMJIT',
|
||||
'LLVMX86Utils', 'LLVMX86Info', 'LLVMMCJIT', 'LLVMJIT',
|
||||
'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts',
|
||||
'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa',
|
||||
'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore',
|
||||
@@ -165,9 +165,7 @@ def generate(env):
|
||||
if '-fno-rtti' in cxxflags:
|
||||
env.Append(CXXFLAGS = ['-fno-rtti'])
|
||||
|
||||
components = ['engine', 'bitwriter', 'x86asmprinter']
|
||||
|
||||
components.append('mcjit')
|
||||
components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter']
|
||||
|
||||
env.ParseConfig('llvm-config --libs ' + ' '.join(components))
|
||||
env.ParseConfig('llvm-config --ldflags')
|
||||
|
@@ -57,6 +57,7 @@
|
||||
#include <llvm/ADT/Triple.h>
|
||||
#include <llvm/ExecutionEngine/JITMemoryManager.h>
|
||||
#include <llvm/Support/CommandLine.h>
|
||||
#include <llvm/Support/Host.h>
|
||||
#include <llvm/Support/PrettyStackTrace.h>
|
||||
|
||||
#include <llvm/Support/TargetSelect.h>
|
||||
@@ -452,6 +453,14 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
|
||||
|
||||
if (useMCJIT) {
|
||||
builder.setUseMCJIT(true);
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
* MCJIT works on Windows, but currently only through ELF object format.
|
||||
*/
|
||||
std::string targetTriple = llvm::sys::getProcessTriple();
|
||||
targetTriple.append("-elf");
|
||||
unwrap(M)->setTargetTriple(targetTriple);
|
||||
#endif
|
||||
}
|
||||
|
||||
llvm::SmallVector<std::string, 1> MAttrs;
|
||||
|
Reference in New Issue
Block a user