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