| //===- 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 MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTargetInfo(); |
| #include "mcld/Config/Targets.def" |
| |
| // Declare all of the target-dependent functions that are available. |
| #define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTarget(); |
| #include "mcld/Config/Targets.def" |
| |
| // Declare all of the target-depedent linker information |
| #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDInfo(); |
| #include "mcld/Config/Linkers.def" |
| |
| // Declare all of the available linker environment. |
| #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##MCLinker(); |
| #include "mcld/Config/Linkers.def" |
| |
| // Declare all of the available emulators. |
| #define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##Emulation(); |
| #include "mcld/Config/Targets.def" |
| |
| // Declare all of the available target-specific linker |
| #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDBackend(); |
| #include "mcld/Config/Linkers.def" |
| |
| // Declare all of the available target-specific diagnostic line infomation |
| #define MCLD_LINKER(TargetName) void MCLDInitialize##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 MCLD 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 MCLD_TARGET(TargetName) MCLDInitialize##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 MCLD 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 MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDBackend(); |
| #include "mcld/Config/Targets.def" |
| } |
| |
| /// InitializeAllEmulations - The main program should call this function if |
| /// it wants all emulations to be configured to support. This function makes |
| /// all emulations available via the TargetRegistry. |
| inline void InitializeAllEmulations() { |
| #define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##Emulation(); |
| #include "mcld/Config/Targets.def" |
| } |
| |
| /// InitializeAllLinkers - The main program should call this function if it |
| /// wants all linkers that 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 MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDTarget(); |
| #include "mcld/Config/Targets.def" |
| |
| #define MCLD_LINKER(TargetName) MCLDInitialize##TargetName##MCLinker(); |
| #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 MCLD_LINKER(TargetName) MCLDInitialize##TargetName##DiagnosticLineInfo(); |
| #include "mcld/Config/Linkers.def" |
| } |
| |
| } // namespace of mcld |
| |
| #endif |
| |