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