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