diff options
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/Makefile | 4 | ||||
-rw-r--r-- | src/gallium/auxiliary/SConscript | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_init.c (renamed from src/gallium/auxiliary/gallivm/lp_bld_init.cpp) | 47 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_init.h | 16 |
4 files changed, 39 insertions, 30 deletions
diff --git a/src/gallium/auxiliary/Makefile b/src/gallium/auxiliary/Makefile index 2258a48661..5beda9267e 100644 --- a/src/gallium/auxiliary/Makefile +++ b/src/gallium/auxiliary/Makefile @@ -152,6 +152,7 @@ GALLIVM_SOURCES = \ gallivm/lp_bld_depth.c \ gallivm/lp_bld_flow.c \ gallivm/lp_bld_format_soa.c \ + gallivm/lp_bld_init.c \ gallivm/lp_bld_interp.c \ gallivm/lp_bld_intr.c \ gallivm/lp_bld_logic.c \ @@ -164,8 +165,7 @@ GALLIVM_SOURCES = \ gallivm/lp_bld_tgsi_soa.c \ gallivm/lp_bld_type.c -GALLIVM_CPP_SOURCES = \ - gallivm/lp_bld_init.cpp +GALLIVM_CPP_SOURCES = GENERATED_SOURCES = \ indices/u_indices_gen.c \ diff --git a/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript index e68b321173..ae749acc87 100644 --- a/src/gallium/auxiliary/SConscript +++ b/src/gallium/auxiliary/SConscript @@ -204,7 +204,7 @@ if drawllvm: 'gallivm/lp_bld_interp.c', 'gallivm/lp_bld_intr.c', 'gallivm/lp_bld_logic.c', - 'gallivm/lp_bld_init.cpp', + 'gallivm/lp_bld_init.c', 'gallivm/lp_bld_pack.c', 'gallivm/lp_bld_printf.c', 'gallivm/lp_bld_sample.c', diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.cpp b/src/gallium/auxiliary/gallivm/lp_bld_init.c index 067397a520..de07c222a3 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c @@ -26,33 +26,42 @@ **************************************************************************/ -#include <llvm/Config/config.h> -#include <llvm/Target/TargetSelect.h> -#include <llvm/Target/TargetOptions.h> - -#include "pipe/p_config.h" - +#include "pipe/p_compiler.h" +#include "util/u_debug.h" #include "lp_bld_init.h" -extern "C" void LLVMLinkInJIT(); +LLVMModuleRef lp_build_module = NULL; +LLVMExecutionEngineRef lp_build_engine = NULL; +LLVMModuleProviderRef lp_build_provider = NULL; +LLVMTargetDataRef lp_build_target = NULL; -extern "C" void +void lp_build_init(void) { -#if defined(PIPE_OS_WINDOWS) && defined(PIPE_ARCH_X86) - /* - * This is mis-detected on some hardware / software combinations. - */ - llvm::StackAlignment = 4; - llvm::RealignStack = true; -#endif - - /* Same as LLVMInitializeNativeTarget(); */ - llvm::InitializeNativeTarget(); + LLVMInitializeNativeTarget(); LLVMLinkInJIT(); + + if (!lp_build_module) + lp_build_module = LLVMModuleCreateWithName("gallivm"); + + if (!lp_build_provider) + lp_build_provider = LLVMCreateModuleProviderForExistingModule(lp_build_module); + + if (!lp_build_engine) { + char *error = NULL; + + if (LLVMCreateJITCompiler(&lp_build_engine, lp_build_provider, 1, &error)) { + _debug_printf("%s\n", error); + LLVMDisposeMessage(error); + assert(0); + } + } + + if (!lp_build_target) + lp_build_target = LLVMGetExecutionEngineTargetData(lp_build_engine); } @@ -64,6 +73,6 @@ lp_build_init(void) */ #if defined(_MSC_VER) && defined(_DEBUG) #include <crtdefs.h> -extern "C" _CRTIMP void __cdecl +_CRTIMP void __cdecl _invalid_parameter_noinfo(void) {} #endif diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.h b/src/gallium/auxiliary/gallivm/lp_bld_init.h index 07f50d1c43..0ec2afcd1b 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.h @@ -30,18 +30,18 @@ #define LP_BLD_INIT_H -#ifdef __cplusplus -extern "C" { -#endif +#include "lp_bld.h" +#include <llvm-c/ExecutionEngine.h> -void -lp_build_init(void); +extern LLVMModuleRef lp_build_module; +extern LLVMExecutionEngineRef lp_build_engine; +extern LLVMModuleProviderRef lp_build_provider; +extern LLVMTargetDataRef lp_build_target; -#ifdef __cplusplus -} -#endif +void +lp_build_init(void); #endif /* !LP_BLD_INIT_H */ |