Restored old behavior of initialization of llvm targets.

LDC initializes only a llvm host target and targets that were explicitly
requested when building the program.
This commit is contained in:
Alexey Prokhin
2011-12-05 21:27:08 +04:00
parent bb3908f290
commit 7da47c4ee8
2 changed files with 54 additions and 9 deletions

View File

@@ -146,10 +146,47 @@ execute_process(
set(DEFAULT_ALT_TARGET ${HOST_ALT_TARGET} CACHE STRING "default alt target")
add_definitions(-DDEFAULT_ALT_TARGET_TRIPLE="${DEFAULT_ALT_TARGET}")
# Pass the list of extra LLVM targets as preprocessor constants.
foreach(EXTRA_TARGET ${EXTRA_LLVM_MODULES})
set(LLVM_MODULES_DEFINE "${LLVM_MODULES_DEFINE} LLVM_TARGET(${EXTRA_TARGET})")
endforeach(EXTRA_TARGET)
#
# Detect host architecture.
# The code borrowed from llvm's config-x.cmake.
#
# This is only needed to initialize the llvm native target which is
# exactly the purpose of llvm::InitializeNativeTarget* functions.
# Unfortunately, there is a bug in llvm's cmake script that prevents
# the asm parser from being initialized when the functions are used.
# So we have to do the dirty work ourselves.
string(REGEX MATCH "^[^-]*" HOST_ARCH ${LLVM_HOST_TARGET})
if(HOST_ARCH MATCHES "i[2-6]86")
set(HOST_ARCH X86)
elseif(HOST_ARCH STREQUAL "x86")
set(HOST_ARCH X86)
elseif(HOST_ARCH STREQUAL "amd64")
set(HOST_ARCH X86)
elseif(HOST_ARCH STREQUAL "x86_64")
set(HOST_ARCH X86)
elseif(HOST_ARCH MATCHES "sparc")
set(HOST_ARCH Sparc)
elseif(HOST_ARCH MATCHES "powerpc")
set(HOST_ARCH PowerPC)
elseif(HOST_ARCH MATCHES "alpha")
set(HOST_ARCH Alpha)
elseif(HOST_ARCH MATCHES "arm")
set(HOST_ARCH ARM)
elseif(HOST_ARCH MATCHES "mips")
set(HOST_ARCH Mips)
elseif(HOST_ARCH MATCHES "xcore")
set(HOST_ARCH XCore)
elseif(HOST_ARCH MATCHES "msp430")
set(HOST_ARCH MSP430)
else(HOST_ARCH MATCHES "i[2-6]86")
message(FATAL_ERROR "Unknown architecture ${HOST_ARCH}")
endif(HOST_ARCH MATCHES "i[2-6]86")
# Pass the list of LLVM targets as preprocessor constants.
foreach(TARGET ${HOST_ARCH} ${EXTRA_LLVM_MODULES})
set(LLVM_MODULES_DEFINE "${LLVM_MODULES_DEFINE} LLVM_TARGET(${TARGET})")
endforeach(TARGET)
set_source_files_properties(
${PROJECT_SOURCE_DIR}/gen/main.cpp PROPERTIES
COMPILE_DEFINITIONS LDC_TARGETS=${LLVM_MODULES_DEFINE}

View File

@@ -449,11 +449,19 @@ int main(int argc, char** argv)
// Allocate target machine.
// first initialize llvm
llvm::InitializeAllTargetInfos();
llvm::InitializeAllTargets();
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllAsmParsers();
llvm::InitializeAllTargetMCs();
#if 0
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmParser();
llvm::InitializeNativeTargetAsmPrinter();
#endif
#define LLVM_TARGET(A) \
LLVMInitialize##A##TargetInfo(); \
LLVMInitialize##A##Target(); \
LLVMInitialize##A##AsmPrinter(); \
LLVMInitialize##A##AsmParser(); \
LLVMInitialize##A##TargetMC();
LDC_TARGETS
#undef LLVM_TARGET
const llvm::Target *theTarget = NULL;
// Check whether the user has explicitly specified an architecture to compile for.