1 //===- TargetSelect.h - Target Selection & Registration ---------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
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
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_TARGET_TARGETSELECT_H
17 #define LLVM_TARGET_TARGETSELECT_H
19 #include "llvm/Config/llvm-config.h"
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"
26 #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target();
27 #include "llvm/Config/Targets.def"
29 // Declare all of the available assembly printer initialization functions.
30 #define LLVM_ASM_PRINTER(TargetName) void LLVMInitialize##TargetName##AsmPrinter();
31 #include "llvm/Config/AsmPrinters.def"
33 // Declare all of the available assembly parser initialization functions.
34 #define LLVM_ASM_PARSER(TargetName) void LLVMInitialize##TargetName##AsmParser();
35 #include "llvm/Config/AsmParsers.def"
37 // Declare all of the available disassembler initialization functions.
38 #define LLVM_DISASSEMBLER(TargetName) void LLVMInitialize##TargetName##Disassembler();
39 #include "llvm/Config/Disassemblers.def"
43 /// InitializeAllTargetInfos - The main program should call this function if
44 /// it wants access to all available targets that LLVM is configured to
45 /// support, to make them available via the TargetRegistry.
47 /// It is legal for a client to make multiple calls to this function.
48 inline void InitializeAllTargetInfos() {
49 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
50 #include "llvm/Config/Targets.def"
53 /// InitializeAllTargets - The main program should call this function if it
54 /// wants access to all available target machines that LLVM is configured to
55 /// support, to make them available via the TargetRegistry.
57 /// It is legal for a client to make multiple calls to this function.
58 inline void InitializeAllTargets() {
59 // FIXME: Remove this, clients should do it.
60 InitializeAllTargetInfos();
62 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
63 #include "llvm/Config/Targets.def"
66 /// InitializeAllAsmPrinters - The main program should call this function if
67 /// it wants all asm printers that LLVM is configured to support, to make them
68 /// available via the TargetRegistry.
70 /// It is legal for a client to make multiple calls to this function.
71 inline void InitializeAllAsmPrinters() {
72 #define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
73 #include "llvm/Config/AsmPrinters.def"
76 /// InitializeAllAsmParsers - The main program should call this function if it
77 /// wants all asm parsers that LLVM is configured to support, to make them
78 /// available via the TargetRegistry.
80 /// It is legal for a client to make multiple calls to this function.
81 inline void InitializeAllAsmParsers() {
82 #define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
83 #include "llvm/Config/AsmParsers.def"
86 /// InitializeAllDisassemblers - The main program should call this function if
87 /// it wants all disassemblers that LLVM is configured to support, to make
88 /// them available via the TargetRegistry.
90 /// It is legal for a client to make multiple calls to this function.
91 inline void InitializeAllDisassemblers() {
92 #define LLVM_DISASSEMBLER(TargetName) LLVMInitialize##TargetName##Disassembler();
93 #include "llvm/Config/Disassemblers.def"
96 /// InitializeNativeTarget - The main program should call this function to
97 /// initialize the native target corresponding to the host. This is useful
98 /// for JIT applications to ensure that the target gets linked in correctly.
100 /// It is legal for a client to make multiple calls to this function.
101 inline bool InitializeNativeTarget() {
102 // If we have a native target, initialize it to ensure it is linked in.
103 #ifdef LLVM_NATIVE_TARGET
104 LLVM_NATIVE_TARGETINFO();
105 LLVM_NATIVE_TARGET();
112 /// InitializeNativeTargetAsmPrinter - The main program should call
113 /// this function to initialize the native target asm printer.
114 inline bool InitializeNativeTargetAsmPrinter() {
115 // If we have a native target, initialize the corresponding asm printer.
116 #ifdef LLVM_NATIVE_ASMPRINTER
117 LLVM_NATIVE_ASMPRINTER();