TargetSelect.h revision affc150dc44fab1911775a49636d0ce85333b634
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 MCLD_TARGET_SELECT_H
10#define MCLD_TARGET_SELECT_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15extern "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
36  // Declare all of the available target-specific diagnostic line infomation
37#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##DiagnosticLineInfo();
38#include "mcld/Config/Linkers.def"
39
40} // extern "C"
41
42namespace mcld
43{
44  /// InitializeAllTargetInfos - The main program should call this function if
45  /// it wants access to all available targets that LLVM is configured to
46  /// support, to make them available via the TargetRegistry.
47  ///
48  /// It is legal for a client to make multiple calls to this function.
49  inline void InitializeAllTargetInfos() {
50#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTargetInfo();
51#include "mcld/Config/Targets.def"
52  }
53
54  /// InitializeAllTargets - The main program should call this function if it
55  /// wants access to all available target machines that LLVM is configured to
56  /// support, to make them available via the TargetRegistry.
57  ///
58  /// It is legal for a client to make multiple calls to this function.
59  inline void InitializeAllTargets() {
60    mcld::InitializeAllTargetInfos();
61
62#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTarget();
63#include "mcld/Config/Targets.def"
64
65#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDBackend();
66#include "mcld/Config/Targets.def"
67  }
68
69  /// InitializeAllLinkers - The main program should call this function if it
70  /// wants all linkers that LLVM is configured to support, to make them
71  /// available via the TargetRegistry.
72  ///
73  /// It is legal for a client to make multiple calls to this function.
74  inline void InitializeAllLinkers() {
75#define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##SectLinker();
76#include "mcld/Config/Linkers.def"
77  }
78
79  /// InitializeMsgHandler - The main program should call this function if it
80  /// wants to print linker-specific messages. To make them available via the
81  /// TargetRegistry.
82  inline void InitializeAllDiagnostics() {
83#define LLVM_LINKER(TargetName)  LLVMInitialize##TargetName##DiagnosticLineInfo();
84#include "mcld/Config/Linkers.def"
85  }
86
87} // namespace of mcld
88
89#endif
90
91