//===- Initialization.cpp -------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "alone/Support/Initialization.h" #include <cstdlib> #include <llvm/Support/ErrorHandling.h> #include <llvm/Support/TargetSelect.h> #include <mcld/Support/TargetSelect.h> #include <mcld/Support/TargetRegistry.h> #include "alone/Config/Config.h" #include "alone/Support/Log.h" namespace { void llvm_error_handler(void *pUserData, const std::string &pMessage) { ALOGE("%s", pMessage.c_str()); ::exit(1); } } // end anonymous namespace void alone::init::Initialize() { static bool is_initialized = false; if (is_initialized) { return; } // Setup error handler for LLVM. llvm::remove_fatal_error_handler(); llvm::install_fatal_error_handler(llvm_error_handler, NULL); #if defined(PROVIDE_ARM_CODEGEN) LLVMInitializeARMAsmPrinter(); # if USE_DISASSEMBLER LLVMInitializeARMDisassembler(); # endif LLVMInitializeARMTargetMC(); LLVMInitializeARMTargetInfo(); LLVMInitializeARMTarget(); LLVMInitializeARMLDTargetInfo(); LLVMInitializeARMLDTarget(); LLVMInitializeARMLDBackend(); LLVMInitializeARMDiagnosticLineInfo(); #endif #if defined(PROVIDE_MIPS_CODEGEN) LLVMInitializeMipsAsmPrinter(); # if USE_DISASSEMBLER LLVMInitializeMipsDisassembler(); # endif LLVMInitializeMipsTargetMC(); LLVMInitializeMipsTargetInfo(); LLVMInitializeMipsTarget(); LLVMInitializeMipsLDTargetInfo(); LLVMInitializeMipsLDTarget(); LLVMInitializeMipsLDBackend(); LLVMInitializeMipsDiagnosticLineInfo(); #endif #if defined(PROVIDE_X86_CODEGEN) LLVMInitializeX86AsmPrinter(); # if USE_DISASSEMBLER LLVMInitializeX86Disassembler(); # endif LLVMInitializeX86TargetMC(); LLVMInitializeX86TargetInfo(); LLVMInitializeX86Target(); LLVMInitializeX86LDTargetInfo(); LLVMInitializeX86LDTarget(); LLVMInitializeX86LDBackend(); LLVMInitializeX86DiagnosticLineInfo(); #endif is_initialized = true; return; }