15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- TargetSelect.h -----------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#ifndef MCLD_TARGET_SELECT_H 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define MCLD_TARGET_SELECT_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoextern "C" { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Declare all of the target-initialization functions that are available. 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTargetInfo(); 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Targets.def" 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Declare all of the target-dependent functions that are available. 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTarget(); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Targets.def" 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Declare all of the target-depedent linker information 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDInfo(); 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Linkers.def" 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Declare all of the available linker environment. 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##SectLinker(); 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Linkers.def" 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Declare all of the available target-specific linker 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDBackend(); 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Linkers.def" 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // Declare all of the available target-specific diagnostic line infomation 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##DiagnosticLineInfo(); 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include "mcld/Config/Linkers.def" 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // extern "C" 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// InitializeAllTargetInfos - The main program should call this function if 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// it wants access to all available targets that LLVM is configured to 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// support, to make them available via the TargetRegistry. 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// It is legal for a client to make multiple calls to this function. 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline void InitializeAllTargetInfos() { 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTargetInfo(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Targets.def" 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// InitializeAllTargets - The main program should call this function if it 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// wants access to all available target machines that LLVM is configured to 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// support, to make them available via the TargetRegistry. 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// It is legal for a client to make multiple calls to this function. 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline void InitializeAllTargets() { 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao mcld::InitializeAllTargetInfos(); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTarget(); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Targets.def" 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDBackend(); 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include "mcld/Config/Targets.def" 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// InitializeAllLinkers - The main program should call this function if it 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// wants all linkers that LLVM is configured to support, to make them 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// available via the TargetRegistry. 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// It is legal for a client to make multiple calls to this function. 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline void InitializeAllLinkers() { 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##SectLinker(); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Linkers.def" 77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang /// InitializeMsgHandler - The main program should call this function if it 80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang /// wants to print linker-specific messages. To make them available via the 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang /// TargetRegistry. 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang inline void InitializeAllDiagnostics() { 83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##DiagnosticLineInfo(); 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Config/Linkers.def" 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 91