1//===- Initialization.cpp -------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "alone/Support/Initialization.h"
11
12#include <cstdlib>
13
14#include <llvm/Support/ErrorHandling.h>
15#include <llvm/Support/TargetSelect.h>
16
17#include <mcld/Support/TargetSelect.h>
18#include <mcld/Support/TargetRegistry.h>
19
20#include "alone/Config/Config.h"
21#include "alone/Support/Log.h"
22
23namespace {
24
25void llvm_error_handler(void *pUserData, const std::string &pMessage) {
26  ALOGE("%s", pMessage.c_str());
27  ::exit(1);
28}
29
30} // end anonymous namespace
31
32void alone::init::Initialize() {
33  static bool is_initialized = false;
34
35  if (is_initialized) {
36    return;
37  }
38
39  // Setup error handler for LLVM.
40  llvm::remove_fatal_error_handler();
41  llvm::install_fatal_error_handler(llvm_error_handler, NULL);
42
43#if defined(PROVIDE_ARM_CODEGEN)
44  LLVMInitializeARMAsmPrinter();
45# if USE_DISASSEMBLER
46  LLVMInitializeARMDisassembler();
47# endif
48  LLVMInitializeARMTargetMC();
49  LLVMInitializeARMTargetInfo();
50  LLVMInitializeARMTarget();
51  MCLDInitializeARMLDTargetInfo();
52  MCLDInitializeARMLDTarget();
53  MCLDInitializeARMLDBackend();
54  MCLDInitializeARMDiagnosticLineInfo();
55#endif
56
57#if defined(PROVIDE_MIPS_CODEGEN)
58  LLVMInitializeMipsAsmPrinter();
59# if USE_DISASSEMBLER
60  LLVMInitializeMipsDisassembler();
61# endif
62  LLVMInitializeMipsTargetMC();
63  LLVMInitializeMipsTargetInfo();
64  LLVMInitializeMipsTarget();
65  MCLDInitializeMipsLDTargetInfo();
66  MCLDInitializeMipsLDTarget();
67  MCLDInitializeMipsLDBackend();
68  MCLDInitializeMipsDiagnosticLineInfo();
69#endif
70
71#if defined(PROVIDE_X86_CODEGEN)
72  LLVMInitializeX86AsmPrinter();
73# if USE_DISASSEMBLER
74  LLVMInitializeX86Disassembler();
75# endif
76  LLVMInitializeX86TargetMC();
77  LLVMInitializeX86TargetInfo();
78  LLVMInitializeX86Target();
79  MCLDInitializeX86LDTargetInfo();
80  MCLDInitializeX86LDTarget();
81  MCLDInitializeX86LDBackend();
82  MCLDInitializeX86DiagnosticLineInfo();
83#endif
84
85  is_initialized = true;
86
87  return;
88}
89