From 6e7d36fd2c1185ae1b84b81b8630472ceb87356d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mathias=20Fr=C3=B6hlich?= Date: Tue, 30 Sep 2014 22:11:30 +0200 Subject: [PATCH] gallivm: Fix build for LLVM 3.2 Do not rely on LLVMMCJITMemoryManagerRef being available. The c binding to the memory manager objects only appeared on llvm-3.4. The change is based on an initial patch of Brian Paul. Reviewed-by: Brian Paul Tested-by: Brian Paul Reviewed-by: Roland Scheidegger Signed-off-by: Mathias Froehlich --- src/gallium/auxiliary/gallivm/lp_bld.h | 8 ++++++++ src/gallium/auxiliary/gallivm/lp_bld_init.c | 4 +--- src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 9 +++++++++ src/gallium/auxiliary/gallivm/lp_bld_misc.h | 3 +++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld.h b/src/gallium/auxiliary/gallivm/lp_bld.h index fcf4f169b15..a01c216cfab 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld.h +++ b/src/gallium/auxiliary/gallivm/lp_bld.h @@ -58,6 +58,14 @@ #endif +#if HAVE_LLVM <= 0x0303 +/* We won't actually use LLVMMCJITMemoryManagerRef, just create a dummy + * typedef to simplify things elsewhere. + */ +typedef void *LLVMMCJITMemoryManagerRef; +#endif + + /** * Redefine these LLVM entrypoints as invalid macros to make sure we * don't accidentally use them. We need to use the functions which diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c index 4e4aecb102c..8d7a0b65862 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c @@ -219,10 +219,8 @@ gallivm_free_code(struct gallivm_state *gallivm) assert(!gallivm->engine); lp_free_generated_code(gallivm->code); gallivm->code = NULL; -#if HAVE_LLVM < 0x0306 - LLVMDisposeMCJITMemoryManager(gallivm->memorymgr); + lp_free_memory_manager(gallivm->memorymgr); gallivm->memorymgr = NULL; -#endif } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp index c173ab657b9..9c2de2ccbe6 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp @@ -554,3 +554,12 @@ lp_get_default_memory_manager() return 0; #endif } + +extern "C" +void +lp_free_memory_manager(LLVMMCJITMemoryManagerRef memorymgr) +{ +#if HAVE_LLVM < 0x0306 + delete reinterpret_cast(memorymgr); +#endif +} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.h b/src/gallium/auxiliary/gallivm/lp_bld_misc.h index 40d3e797b4a..36923aa423f 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.h @@ -65,6 +65,9 @@ lp_free_generated_code(struct lp_generated_code *code); extern LLVMMCJITMemoryManagerRef lp_get_default_memory_manager(); +extern void +lp_free_memory_manager(LLVMMCJITMemoryManagerRef memorymgr); + #ifdef __cplusplus } #endif -- 2.30.2