TargetSelect.h revision 5460a1f25d9ddecb5c70667267d66d51af177a99
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
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} // extern "C"
36
37namespace 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.
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.
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.
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