1//===- TargetSelect.h - Target Selection & Registration ---------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file provides utilities to make sure that certain classes of targets are 11// linked into the main application executable, and initialize them as 12// appropriate. 13// 14//===----------------------------------------------------------------------===// 15 16#ifndef LLVM_SUPPORT_TARGETSELECT_H 17#define LLVM_SUPPORT_TARGETSELECT_H 18 19#include "llvm/Config/llvm-config.h" 20 21extern "C" { 22 // Declare all of the target-initialization functions that are available. 23#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##TargetInfo(); 24#include "llvm/Config/Targets.def" 25 26#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target(); 27#include "llvm/Config/Targets.def" 28 29 // Declare all of the target-MC-initialization functions that are available. 30#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##TargetMC(); 31#include "llvm/Config/Targets.def" 32 33 // Declare all of the available assembly printer initialization functions. 34#define LLVM_ASM_PRINTER(TargetName) void LLVMInitialize##TargetName##AsmPrinter(); 35#include "llvm/Config/AsmPrinters.def" 36 37 // Declare all of the available assembly parser initialization functions. 38#define LLVM_ASM_PARSER(TargetName) void LLVMInitialize##TargetName##AsmParser(); 39#include "llvm/Config/AsmParsers.def" 40 41 // Declare all of the available disassembler initialization functions. 42#define LLVM_DISASSEMBLER(TargetName) \ 43 void LLVMInitialize##TargetName##Disassembler(); 44#include "llvm/Config/Disassemblers.def" 45} 46 47namespace llvm { 48 /// InitializeAllTargetInfos - The main program should call this function if 49 /// it wants access to all available targets that LLVM is configured to 50 /// support, to make them available via the TargetRegistry. 51 /// 52 /// It is legal for a client to make multiple calls to this function. 53 inline void InitializeAllTargetInfos() { 54#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo(); 55#include "llvm/Config/Targets.def" 56 } 57 58 /// InitializeAllTargets - The main program should call this function if it 59 /// wants access to all available target machines that LLVM is configured to 60 /// support, to make them available via the TargetRegistry. 61 /// 62 /// It is legal for a client to make multiple calls to this function. 63 inline void InitializeAllTargets() { 64 // FIXME: Remove this, clients should do it. 65 InitializeAllTargetInfos(); 66 67#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target(); 68#include "llvm/Config/Targets.def" 69 } 70 71 /// InitializeAllTargetMCs - The main program should call this function if it 72 /// wants access to all available target MC that LLVM is configured to 73 /// support, to make them available via the TargetRegistry. 74 /// 75 /// It is legal for a client to make multiple calls to this function. 76 inline void InitializeAllTargetMCs() { 77#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC(); 78#include "llvm/Config/Targets.def" 79 } 80 81 /// InitializeAllAsmPrinters - The main program should call this function if 82 /// it wants all asm printers that LLVM is configured to support, to make them 83 /// available via the TargetRegistry. 84 /// 85 /// It is legal for a client to make multiple calls to this function. 86 inline void InitializeAllAsmPrinters() { 87#define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter(); 88#include "llvm/Config/AsmPrinters.def" 89 } 90 91 /// InitializeAllAsmParsers - The main program should call this function if it 92 /// wants all asm parsers that LLVM is configured to support, to make them 93 /// available via the TargetRegistry. 94 /// 95 /// It is legal for a client to make multiple calls to this function. 96 inline void InitializeAllAsmParsers() { 97#define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser(); 98#include "llvm/Config/AsmParsers.def" 99 } 100 101 /// InitializeAllDisassemblers - The main program should call this function if 102 /// it wants all disassemblers that LLVM is configured to support, to make 103 /// them available via the TargetRegistry. 104 /// 105 /// It is legal for a client to make multiple calls to this function. 106 inline void InitializeAllDisassemblers() { 107#define LLVM_DISASSEMBLER(TargetName) LLVMInitialize##TargetName##Disassembler(); 108#include "llvm/Config/Disassemblers.def" 109 } 110 111 /// InitializeNativeTarget - The main program should call this function to 112 /// initialize the native target corresponding to the host. This is useful 113 /// for JIT applications to ensure that the target gets linked in correctly. 114 /// 115 /// It is legal for a client to make multiple calls to this function. 116 inline bool InitializeNativeTarget() { 117 // If we have a native target, initialize it to ensure it is linked in. 118#ifdef LLVM_NATIVE_TARGET 119 LLVM_NATIVE_TARGETINFO(); 120 LLVM_NATIVE_TARGET(); 121 LLVM_NATIVE_TARGETMC(); 122 return false; 123#else 124 return true; 125#endif 126 } 127 128 /// InitializeNativeTargetAsmPrinter - The main program should call 129 /// this function to initialize the native target asm printer. 130 inline bool InitializeNativeTargetAsmPrinter() { 131 // If we have a native target, initialize the corresponding asm printer. 132#ifdef LLVM_NATIVE_ASMPRINTER 133 LLVM_NATIVE_ASMPRINTER(); 134 return false; 135#else 136 return true; 137#endif 138 } 139 140 /// InitializeNativeTargetAsmParser - The main program should call 141 /// this function to initialize the native target asm parser. 142 inline bool InitializeNativeTargetAsmParser() { 143 // If we have a native target, initialize the corresponding asm parser. 144#ifdef LLVM_NATIVE_ASMPARSER 145 LLVM_NATIVE_ASMPARSER(); 146 return false; 147#else 148 return true; 149#endif 150 } 151 152 /// InitializeNativeTargetDisassembler - The main program should call 153 /// this function to initialize the native target disassembler. 154 inline bool InitializeNativeTargetDisassembler() { 155 // If we have a native target, initialize the corresponding disassembler. 156#ifdef LLVM_NATIVE_DISASSEMBLER 157 LLVM_NATIVE_DISASSEMBLER(); 158 return false; 159#else 160 return true; 161#endif 162 } 163} 164 165#endif 166