Initialization.cpp revision 388fec12e6bbf5798281d266cac63630bcaba333
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(); 52388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 53388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeARMDisassembler(); 54388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 55f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTargetMC(); 56f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTargetInfo(); 57f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeARMTarget(); 5893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeARMLDTargetInfo(); 5993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeARMLDTarget(); 6093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeARMLDBackend(); 6193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeARMDiagnosticLineInfo(); 62f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 63f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 64f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#if defined(PROVIDE_MIPS_CODEGEN) 65f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsAsmPrinter(); 66388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 67388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeMipsDisassembler(); 68388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 69f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTargetMC(); 70f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTargetInfo(); 71f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeMipsTarget(); 7293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeMipsLDTargetInfo(); 7393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeMipsLDTarget(); 7493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeMipsLDBackend(); 7593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeMipsDiagnosticLineInfo(); 76f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 77f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 78f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#if defined(PROVIDE_X86_CODEGEN) 79f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86AsmPrinter(); 80388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# if USE_DISASSEMBLER 81388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao LLVMInitializeX86Disassembler(); 82388fec12e6bbf5798281d266cac63630bcaba333Shih-wei Liao# endif 83f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86TargetMC(); 84f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86TargetInfo(); 85f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang LLVMInitializeX86Target(); 8693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeX86LDTargetInfo(); 8793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeX86LDTarget(); 8893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeX86LDBackend(); 8993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao LLVMInitializeX86DiagnosticLineInfo(); 90f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang#endif 91f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 92f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang is_initialized = true; 93f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang 94f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang return; 95f74ee1940ac8e01c862e90de49eb10982648f6a1Zonr Chang} 96