/*
* Copyright 2012, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "bcc/Support/Initialization.h"
#include <cstdlib>
#include <llvm/Support/ErrorHandling.h>
#include <llvm/Support/TargetSelect.h>
#include "bcc/Config/Config.h"
#include "bcc/Support/Log.h"
namespace {
void llvm_error_handler(void *pUserData, const std::string &pMessage,
bool pGenCrashDiag) {
ALOGE("%s", pMessage.c_str());
::exit(1);
}
} // end anonymous namespace
void bcc::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();
LLVMInitializeARMAsmParser();
# if USE_DISASSEMBLER
LLVMInitializeARMDisassembler();
# endif
LLVMInitializeARMTargetMC();
LLVMInitializeARMTargetInfo();
LLVMInitializeARMTarget();
#endif
#if defined(PROVIDE_MIPS_CODEGEN)
LLVMInitializeMipsAsmPrinter();
LLVMInitializeMipsAsmParser();
# if USE_DISASSEMBLER
LLVMInitializeMipsDisassembler();
# endif
LLVMInitializeMipsTargetMC();
LLVMInitializeMipsTargetInfo();
LLVMInitializeMipsTarget();
#endif
#if defined(PROVIDE_X86_CODEGEN)
LLVMInitializeX86AsmPrinter();
LLVMInitializeX86AsmParser();
# if USE_DISASSEMBLER
LLVMInitializeX86Disassembler();
# endif
LLVMInitializeX86TargetMC();
LLVMInitializeX86TargetInfo();
LLVMInitializeX86Target();
#endif
#if defined(PROVIDE_ARM64_CODEGEN)
LLVMInitializeAArch64AsmPrinter();
LLVMInitializeAArch64AsmParser();
# if USE_DISASSEMBLER
LLVMInitializeAArch64Disassembler();
# endif
LLVMInitializeAArch64TargetMC();
LLVMInitializeAArch64TargetInfo();
LLVMInitializeAArch64Target();
#endif
is_initialized = true;
return;
}