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