• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- TargetSelect.h -----------------------------------------------------===//
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 #ifndef TARGETSELECT_H
10 #define TARGETSELECT_H
11 #ifdef ENABLE_UNITTEST
12 #include <gtest.h>
13 #endif
14 
15 extern "C" {
16   // Declare all of the target-initialization functions that are available.
17 #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTargetInfo();
18 #include "mcld/Config/Targets.def"
19 
20   // Declare all of the target-dependent functions that are available.
21 #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTarget();
22 #include "mcld/Config/Targets.def"
23 
24   // Declare all of the target-depedent linker information
25 #define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDInfo();
26 #include "mcld/Config/Linkers.def"
27 
28   // Declare all of the available linker environment.
29 #define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##SectLinker();
30 #include "mcld/Config/Linkers.def"
31 
32   // Declare all of the available target-specific linker
33 #define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDBackend();
34 #include "mcld/Config/Linkers.def"
35 } // extern "C"
36 
37 namespace mcld
38 {
39   /// InitializeAllTargetInfos - The main program should call this function if
40   /// it wants access to all available targets that LLVM is configured to
41   /// support, to make them available via the TargetRegistry.
42   ///
43   /// It is legal for a client to make multiple calls to this function.
InitializeAllTargetInfos()44   inline void InitializeAllTargetInfos() {
45 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTargetInfo();
46 #include "mcld/Config/Targets.def"
47   }
48 
49   /// InitializeAllTargets - The main program should call this function if it
50   /// wants access to all available target machines that LLVM is configured to
51   /// support, to make them available via the TargetRegistry.
52   ///
53   /// It is legal for a client to make multiple calls to this function.
InitializeAllTargets()54   inline void InitializeAllTargets() {
55     mcld::InitializeAllTargetInfos();
56 
57 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTarget();
58 #include "mcld/Config/Targets.def"
59   }
60 
61   /// InitializeAllLinkers - The main program should call this function if it
62   /// wants all linkers that LLVM is configured to support, to make them
63   /// available via the TargetRegistry.
64   ///
65   /// It is legal for a client to make multiple calls to this function.
InitializeAllLinkers()66   inline void InitializeAllLinkers() {
67 #define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##SectLinker();
68 #include "mcld/Config/Linkers.def"
69 
70 #define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##LDBackend();
71 #include "mcld/Config/Linkers.def"
72   }
73 
74 } // namespace of mcld
75 
76 #endif
77 
78