Initialization.cpp revision d793ca93d75fe8f1d29ceab8f9bf0432f0f63565
1f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang/* 2f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * Copyright 2012, The Android Open Source Project 3f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * 4f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * you may not use this file except in compliance with the License. 6f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * You may obtain a copy of the License at 7f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * 8f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * 10f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * Unless required by applicable law or agreed to in writing, software 11f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * See the License for the specific language governing permissions and 14f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang * limitations under the License. 15f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang */ 16f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 17c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include "bcc/Support/Initialization.h" 18f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 19f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#include <cstdlib> 20f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 21f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#include <llvm/Support/ErrorHandling.h> 22f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#include <llvm/Support/TargetSelect.h> 23f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 2493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/Support/TargetSelect.h> 2593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/Support/TargetRegistry.h> 2693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 27c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include "bcc/Config/Config.h" 28ef73a242762bcd8113b9b65ceccbe7d909b5acbcZonr Chang#include "bcc/Support/Log.h" 29f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 30f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Changnamespace { 31f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 32f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Changvoid llvm_error_handler(void *pUserData, const std::string &pMessage) { 33f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang ALOGE("%s", pMessage.c_str()); 34f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang ::exit(1); 35f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang} 36f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 37f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang} // end anonymous namespace 38f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 39f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Changvoid bcc::init::Initialize() { 40f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang static bool is_initialized = false; 41f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 42f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang if (is_initialized) { 43f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang return; 44f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang } 45f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 46f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang // Setup error handler for LLVM. 47f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang llvm::remove_fatal_error_handler(); 48f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang llvm::install_fatal_error_handler(llvm_error_handler, NULL); 49f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 50f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#if defined(PROVIDE_ARM_CODEGEN) 51f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMAsmPrinter(); 52d793ca93d75fe8f1d29ceab8f9bf0432f0f63565Stephen Hines LLVMInitializeARMAsmParser(); 53388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 54388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeARMDisassembler(); 55388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 56f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTargetMC(); 57f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTargetInfo(); 58f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTarget(); 5952acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeARMLDTargetInfo(); 6052acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeARMLDTarget(); 6152acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeARMLDBackend(); 6252acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeARMDiagnosticLineInfo(); 63f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 64f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 65f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#if defined(PROVIDE_MIPS_CODEGEN) 66f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsAsmPrinter(); 67d793ca93d75fe8f1d29ceab8f9bf0432f0f63565Stephen Hines LLVMInitializeMipsAsmParser(); 68388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 69388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeMipsDisassembler(); 70388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 71f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTargetMC(); 72f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTargetInfo(); 73f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTarget(); 7452acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeMipsLDTargetInfo(); 7552acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeMipsLDTarget(); 7652acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeMipsLDBackend(); 7752acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeMipsDiagnosticLineInfo(); 78f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 79f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 80f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#if defined(PROVIDE_X86_CODEGEN) 81f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86AsmPrinter(); 82d793ca93d75fe8f1d29ceab8f9bf0432f0f63565Stephen Hines LLVMInitializeX86AsmParser(); 83388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 84388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeX86Disassembler(); 85388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 86f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86TargetMC(); 87f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86TargetInfo(); 88f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86Target(); 8952acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeX86LDTargetInfo(); 9052acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeX86LDTarget(); 9152acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeX86LDBackend(); 9252acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao MCLDInitializeX86DiagnosticLineInfo(); 93f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 94f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 95f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang is_initialized = true; 96f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 97f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang return; 98f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang} 99