TargetSelect.h revision 87f34658dec9097d987d254a990ea7f311bfc95f
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_SUPPORT_TARGETSELECT_H
10#define MCLD_SUPPORT_TARGETSELECT_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 MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTargetInfo();
18#include "mcld/Config/Targets.def"
19
20  // Declare all of the target-dependent functions that are available.
21#define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTarget();
22#include "mcld/Config/Targets.def"
23
24  // Declare all of the target-depedent linker information
25#define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDInfo();
26#include "mcld/Config/Linkers.def"
27
28  // Declare all of the available linker environment.
29#define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##MCLinker();
30#include "mcld/Config/Linkers.def"
31
32  // Declare all of the available emulators.
33#define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##Emulation();
34#include "mcld/Config/Targets.def"
35
36  // Declare all of the available target-specific linker
37#define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDBackend();
38#include "mcld/Config/Linkers.def"
39
40  // Declare all of the available target-specific diagnostic line infomation
41#define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##DiagnosticLineInfo();
42#include "mcld/Config/Linkers.def"
43
44} // extern "C"
45
46namespace mcld
47{
48  /// InitializeAllTargetInfos - The main program should call this function if
49  /// it wants access to all available targets that MCLD 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 MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDTargetInfo();
55#include "mcld/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 MCLD 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    mcld::InitializeAllTargetInfos();
65
66#define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDBackend();
67#include "mcld/Config/Targets.def"
68  }
69
70  /// InitializeAllEmulations - The main program should call this function if
71  /// it wants all emulations to be configured to support. This function makes
72  /// all emulations available via the TargetRegistry.
73  inline void InitializeAllEmulations() {
74#define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##Emulation();
75#include "mcld/Config/Targets.def"
76  }
77
78  /// InitializeAllLinkers - The main program should call this function if it
79  /// wants all linkers that is configured to support, to make them
80  /// available via the TargetRegistry.
81  ///
82  /// It is legal for a client to make multiple calls to this function.
83  inline void InitializeAllLinkers() {
84#define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDTarget();
85#include "mcld/Config/Targets.def"
86
87#define MCLD_LINKER(TargetName) MCLDInitialize##TargetName##MCLinker();
88#include "mcld/Config/Linkers.def"
89  }
90
91  /// InitializeMsgHandler - The main program should call this function if it
92  /// wants to print linker-specific messages. To make them available via the
93  /// TargetRegistry.
94  inline void InitializeAllDiagnostics() {
95#define MCLD_LINKER(TargetName)  MCLDInitialize##TargetName##DiagnosticLineInfo();
96#include "mcld/Config/Linkers.def"
97  }
98
99} // namespace of mcld
100
101#endif
102
103