gallivm: Support MCJIT on Windows.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 14 May 2014 11:20:14 +0000 (12:20 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Fri, 23 May 2014 10:37:47 +0000 (11:37 +0100)
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.

scons/llvm.py
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp

index cdfbe43708f9824166129124f39e57988f129576..288a0806f2a7f25cdbb860f51b5fa7da1aff5db6 100644 (file)
@@ -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')
index d03680fc67dd73762aef59ec064b9c98ff75835e..d1cc9b67b6cfaf49bdf86361a8433a3585edafc6 100644 (file)
@@ -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;