Home | History | Annotate | Download | only in Support
      1 //===- TargetSelect.h -----------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_SUPPORT_TARGETSELECT_H
     10 #define MCLD_SUPPORT_TARGETSELECT_H
     11 
     12 extern "C" {
     13   // Declare all of the target-initialization functions that are available.
     14 #define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTargetInfo();
     15 #include "mcld/Config/Targets.def"
     16 
     17   // Declare all of the target-dependent functions that are available.
     18 #define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##LDTarget();
     19 #include "mcld/Config/Targets.def"
     20 
     21   // Declare all of the target-depedent linker information
     22 #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDInfo();
     23 #include "mcld/Config/Linkers.def"
     24 
     25   // Declare all of the available linker environment.
     26 #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##MCLinker();
     27 #include "mcld/Config/Linkers.def"
     28 
     29   // Declare all of the available emulators.
     30 #define MCLD_TARGET(TargetName) void MCLDInitialize##TargetName##Emulation();
     31 #include "mcld/Config/Targets.def"
     32 
     33   // Declare all of the available target-specific linker
     34 #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##LDBackend();
     35 #include "mcld/Config/Linkers.def"
     36 
     37   // Declare all of the available target-specific diagnostic line infomation
     38 #define MCLD_LINKER(TargetName) void MCLDInitialize##TargetName##DiagnosticLineInfo();
     39 #include "mcld/Config/Linkers.def"
     40 
     41 } // extern "C"
     42 
     43 namespace mcld
     44 {
     45   /// InitializeAllTargetInfos - The main program should call this function if
     46   /// it wants access to all available targets that MCLD is configured to
     47   /// support, to make them available via the TargetRegistry.
     48   ///
     49   /// It is legal for a client to make multiple calls to this function.
     50   inline void InitializeAllTargetInfos() {
     51 #define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDTargetInfo();
     52 #include "mcld/Config/Targets.def"
     53   }
     54 
     55   /// InitializeAllTargets - The main program should call this function if it
     56   /// wants access to all available target machines that MCLD is configured to
     57   /// support, to make them available via the TargetRegistry.
     58   ///
     59   /// It is legal for a client to make multiple calls to this function.
     60   inline void InitializeAllTargets() {
     61     mcld::InitializeAllTargetInfos();
     62 
     63 #define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDBackend();
     64 #include "mcld/Config/Targets.def"
     65   }
     66 
     67   /// InitializeAllEmulations - The main program should call this function if
     68   /// it wants all emulations to be configured to support. This function makes
     69   /// all emulations available via the TargetRegistry.
     70   inline void InitializeAllEmulations() {
     71 #define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##Emulation();
     72 #include "mcld/Config/Targets.def"
     73   }
     74 
     75   /// InitializeAllLinkers - The main program should call this function if it
     76   /// wants all linkers that is configured to support, to make them
     77   /// available via the TargetRegistry.
     78   ///
     79   /// It is legal for a client to make multiple calls to this function.
     80   inline void InitializeAllLinkers() {
     81 #define MCLD_TARGET(TargetName) MCLDInitialize##TargetName##LDTarget();
     82 #include "mcld/Config/Targets.def"
     83 
     84 #define MCLD_LINKER(TargetName) MCLDInitialize##TargetName##MCLinker();
     85 #include "mcld/Config/Linkers.def"
     86   }
     87 
     88   /// InitializeMsgHandler - The main program should call this function if it
     89   /// wants to print linker-specific messages. To make them available via the
     90   /// TargetRegistry.
     91   inline void InitializeAllDiagnostics() {
     92 #define MCLD_LINKER(TargetName)  MCLDInitialize##TargetName##DiagnosticLineInfo();
     93 #include "mcld/Config/Linkers.def"
     94   }
     95 
     96 } // namespace of mcld
     97 
     98 #endif
     99 
    100