Remove the need for std::atomic and make it compile on arm linux.

pull/84/head
mingodad 8 years ago
parent 789644b865
commit 88dfa6f1cb

@ -98,7 +98,7 @@ if (CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE)
# add_definitions("-D_GLIBCXX_USE_CXX11_ABI=0")
endif ()
if (APPLE)
if (APPLE OR (LLVM_JIT AND (NOT CMAKE_COMPILER_IS_GNUCXX) AND (NOT MSVC)))
set(CMAKE_C_FLAGS "-std=c99 -O1 -g3 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX")
set(CMAKE_C_FLAGS_DEBUG "-std=c99 -O0 -g3 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX")
set(CMAKE_C_FLAGS_RELEASE "-std=c99 -O3 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX")
@ -167,6 +167,27 @@ if (LLVM_JIT)
if (${LLVM_PACKAGE_VERSION} VERSION_LESS "3.8")
set(LLVM_EXTRA_LIBS ipa)
endif()
message(STATUS "SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
set(LLVM_LIBS_PROCESSOR
X86CodeGen
X86AsmParser
X86Disassembler
X86AsmPrinter
X86Desc
X86Info
X86Utils
)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(LLVM_LIBS_PROCESSOR
ARMCodeGen
ARMAsmParser
ARMDisassembler
ARMAsmPrinter
ARMDesc
ARMInfo
)
endif()
llvm_map_components_to_libnames(LLVM_LIBS
Analysis
Core
@ -187,13 +208,7 @@ if (LLVM_JIT)
Support
Target
TransformUtils
X86CodeGen
X86AsmParser
X86Disassembler
X86AsmPrinter
X86Desc
X86Info
X86Utils
${LLVM_LIBS_PROCESSOR}
)
message(STATUS "LLVM_LIBS ${LLVM_LIBS}")
endif ()

@ -62,7 +62,6 @@ extern "C" {
#endif
#include <array>
#include <atomic>
#include <iterator>
#include <type_traits>

@ -45,8 +45,22 @@ LUA_API int ravi_get_modulecount() {
namespace ravi {
// This is just to avoid initializing LLVM repeatedly -
// see below
static std::atomic_int init;
// LLVM needs to be initialized else
// ExecutionEngine cannot be created
// This needs to be an atomic check although LLVM docs
// say that it is okay to call these functions more than once
struct Ravi_LLVM_Initializer
{
bool llvm_already_initialized;
Ravi_LLVM_Initializer()
{
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetAsmParser();
llvm_already_initialized = true;
}
};
static Ravi_LLVM_Initializer ravi_llvm_initializer;
// Construct the JIT compiler state
// The JIT compiler state will be attached to the
@ -61,16 +75,6 @@ RaviJITState::RaviJITState()
min_exec_count_(50),
gc_step_(200),
tracehook_enabled_(false) {
// LLVM needs to be initialized else
// ExecutionEngine cannot be created
// This needs to be an atomic check although LLVM docs
// say that it is okay to call these functions more than once
if (init == 0) {
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetAsmParser();
init++;
}
triple_ = llvm::sys::getProcessTriple();
#if defined(_WIN32) && (!defined(_WIN64) || LLVM_VERSION_MINOR < 7)
// On Windows we get compilation error saying incompatible object format
@ -96,14 +100,10 @@ void RaviJITState::addGlobalSymbol(const std::string &name, void *address) {
void RaviJITState::dump() { types_->dump(); }
static std::atomic_int module_id;
RaviJITModule::RaviJITModule(RaviJITState *owner)
: owner_(owner), engine_(nullptr), module_(nullptr) {
int myid = module_id++;
char buf[40];
snprintf(buf, sizeof buf, "ravi_module_%d", myid);
snprintf(buf, sizeof buf, "ravi_module_%p", this);
std::string moduleName(buf);
module_ = new llvm::Module(moduleName, owner->context());
#if defined(_WIN32) && (!defined(_WIN64) || LLVM_VERSION_MINOR < 7)

Loading…
Cancel
Save