//===- TargetSelect.h -----------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_TARGET_SELECT_H
#define MCLD_TARGET_SELECT_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
extern "C" {
// Declare all of the target-initialization functions that are available.
#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTargetInfo();
#include "mcld/Config/Targets.def"
// Declare all of the target-dependent functions that are available.
#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##LDTarget();
#include "mcld/Config/Targets.def"
// Declare all of the target-depedent linker information
#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDInfo();
#include "mcld/Config/Linkers.def"
// Declare all of the available linker environment.
#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##SectLinker();
#include "mcld/Config/Linkers.def"
// Declare all of the available target-specific linker
#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##LDBackend();
#include "mcld/Config/Linkers.def"
// Declare all of the available target-specific diagnostic line infomation
#define LLVM_LINKER(TargetName) void LLVMInitialize##TargetName##DiagnosticLineInfo();
#include "mcld/Config/Linkers.def"
} // extern "C"
namespace mcld
{
/// InitializeAllTargetInfos - The main program should call this function if
/// it wants access to all available targets that LLVM is configured to
/// support, to make them available via the TargetRegistry.
///
/// It is legal for a client to make multiple calls to this function.
inline void InitializeAllTargetInfos() {
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTargetInfo();
#include "mcld/Config/Targets.def"
}
/// InitializeAllTargets - The main program should call this function if it
/// wants access to all available target machines that LLVM is configured to
/// support, to make them available via the TargetRegistry.
///
/// It is legal for a client to make multiple calls to this function.
inline void InitializeAllTargets() {
mcld::InitializeAllTargetInfos();
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDTarget();
#include "mcld/Config/Targets.def"
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##LDBackend();
#include "mcld/Config/Targets.def"
}
/// InitializeAllLinkers - The main program should call this function if it
/// wants all linkers that LLVM is configured to support, to make them
/// available via the TargetRegistry.
///
/// It is legal for a client to make multiple calls to this function.
inline void InitializeAllLinkers() {
#define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##SectLinker();
#include "mcld/Config/Linkers.def"
}
/// InitializeMsgHandler - The main program should call this function if it
/// wants to print linker-specific messages. To make them available via the
/// TargetRegistry.
inline void InitializeAllDiagnostics() {
#define LLVM_LINKER(TargetName) LLVMInitialize##TargetName##DiagnosticLineInfo();
#include "mcld/Config/Linkers.def"
}
} // namespace of mcld
#endif