Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- TargetSelect.h - Target Selection & Registration ---------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file provides utilities to make sure that certain classes of targets are
  10. // linked into the main application executable, and initialize them as
  11. // appropriate.
  12. //
  13. //===----------------------------------------------------------------------===//
  14.  
  15. #ifndef LLVM_SUPPORT_TARGETSELECT_H
  16. #define LLVM_SUPPORT_TARGETSELECT_H
  17.  
  18. #include "llvm/Config/llvm-config.h"
  19.  
  20. extern "C" {
  21.   // Declare all of the target-initialization functions that are available.
  22. #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##TargetInfo();
  23. #include "llvm/Config/Targets.def"
  24.  
  25. #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target();
  26. #include "llvm/Config/Targets.def"
  27.  
  28.   // Declare all of the target-MC-initialization functions that are available.
  29. #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##TargetMC();
  30. #include "llvm/Config/Targets.def"
  31.  
  32.   // Declare all of the available assembly printer initialization functions.
  33. #define LLVM_ASM_PRINTER(TargetName) void LLVMInitialize##TargetName##AsmPrinter();
  34. #include "llvm/Config/AsmPrinters.def"
  35.  
  36.   // Declare all of the available assembly parser initialization functions.
  37. #define LLVM_ASM_PARSER(TargetName) void LLVMInitialize##TargetName##AsmParser();
  38. #include "llvm/Config/AsmParsers.def"
  39.  
  40.   // Declare all of the available disassembler initialization functions.
  41. #define LLVM_DISASSEMBLER(TargetName) \
  42.   void LLVMInitialize##TargetName##Disassembler();
  43. #include "llvm/Config/Disassemblers.def"
  44.  
  45. // Declare all of the available TargetMCA initialization functions.
  46. #define LLVM_TARGETMCA(TargetName) void LLVMInitialize##TargetName##TargetMCA();
  47. #include "llvm/Config/TargetMCAs.def"
  48. }
  49.  
  50. namespace llvm {
  51.   /// InitializeAllTargetInfos - The main program should call this function if
  52.   /// it wants access to all available targets that LLVM is configured to
  53.   /// support, to make them available via the TargetRegistry.
  54.   ///
  55.   /// It is legal for a client to make multiple calls to this function.
  56.   inline void InitializeAllTargetInfos() {
  57. #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
  58. #include "llvm/Config/Targets.def"
  59.   }
  60.  
  61.   /// InitializeAllTargets - The main program should call this function if it
  62.   /// wants access to all available target machines that LLVM is configured to
  63.   /// support, to make them available via the TargetRegistry.
  64.   ///
  65.   /// It is legal for a client to make multiple calls to this function.
  66.   inline void InitializeAllTargets() {
  67.     // FIXME: Remove this, clients should do it.
  68.     InitializeAllTargetInfos();
  69.  
  70. #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
  71. #include "llvm/Config/Targets.def"
  72.   }
  73.  
  74.   /// InitializeAllTargetMCs - The main program should call this function if it
  75.   /// wants access to all available target MC that LLVM is configured to
  76.   /// support, to make them available via the TargetRegistry.
  77.   ///
  78.   /// It is legal for a client to make multiple calls to this function.
  79.   inline void InitializeAllTargetMCs() {
  80. #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
  81. #include "llvm/Config/Targets.def"
  82.   }
  83.  
  84.   /// InitializeAllAsmPrinters - The main program should call this function if
  85.   /// it wants all asm printers that LLVM is configured to support, to make them
  86.   /// available via the TargetRegistry.
  87.   ///
  88.   /// It is legal for a client to make multiple calls to this function.
  89.   inline void InitializeAllAsmPrinters() {
  90. #define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
  91. #include "llvm/Config/AsmPrinters.def"
  92.   }
  93.  
  94.   /// InitializeAllAsmParsers - The main program should call this function if it
  95.   /// wants all asm parsers that LLVM is configured to support, to make them
  96.   /// available via the TargetRegistry.
  97.   ///
  98.   /// It is legal for a client to make multiple calls to this function.
  99.   inline void InitializeAllAsmParsers() {
  100. #define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
  101. #include "llvm/Config/AsmParsers.def"
  102.   }
  103.  
  104.   /// InitializeAllDisassemblers - The main program should call this function if
  105.   /// it wants all disassemblers that LLVM is configured to support, to make
  106.   /// them available via the TargetRegistry.
  107.   ///
  108.   /// It is legal for a client to make multiple calls to this function.
  109.   inline void InitializeAllDisassemblers() {
  110. #define LLVM_DISASSEMBLER(TargetName) LLVMInitialize##TargetName##Disassembler();
  111. #include "llvm/Config/Disassemblers.def"
  112.   }
  113.  
  114.   /// InitializeNativeTarget - The main program should call this function to
  115.   /// initialize the native target corresponding to the host.  This is useful
  116.   /// for JIT applications to ensure that the target gets linked in correctly.
  117.   ///
  118.   /// It is legal for a client to make multiple calls to this function.
  119.   inline bool InitializeNativeTarget() {
  120.   // If we have a native target, initialize it to ensure it is linked in.
  121. #ifdef LLVM_NATIVE_TARGET
  122.     LLVM_NATIVE_TARGETINFO();
  123.     LLVM_NATIVE_TARGET();
  124.     LLVM_NATIVE_TARGETMC();
  125.     return false;
  126. #else
  127.     return true;
  128. #endif
  129.   }
  130.  
  131.   /// InitializeNativeTargetAsmPrinter - The main program should call
  132.   /// this function to initialize the native target asm printer.
  133.   inline bool InitializeNativeTargetAsmPrinter() {
  134.   // If we have a native target, initialize the corresponding asm printer.
  135. #ifdef LLVM_NATIVE_ASMPRINTER
  136.     LLVM_NATIVE_ASMPRINTER();
  137.     return false;
  138. #else
  139.     return true;
  140. #endif
  141.   }
  142.  
  143.   /// InitializeNativeTargetAsmParser - The main program should call
  144.   /// this function to initialize the native target asm parser.
  145.   inline bool InitializeNativeTargetAsmParser() {
  146.   // If we have a native target, initialize the corresponding asm parser.
  147. #ifdef LLVM_NATIVE_ASMPARSER
  148.     LLVM_NATIVE_ASMPARSER();
  149.     return false;
  150. #else
  151.     return true;
  152. #endif
  153.   }
  154.  
  155.   /// InitializeNativeTargetDisassembler - The main program should call
  156.   /// this function to initialize the native target disassembler.
  157.   inline bool InitializeNativeTargetDisassembler() {
  158.   // If we have a native target, initialize the corresponding disassembler.
  159. #ifdef LLVM_NATIVE_DISASSEMBLER
  160.     LLVM_NATIVE_DISASSEMBLER();
  161.     return false;
  162. #else
  163.     return true;
  164. #endif
  165.   }
  166.  
  167.   /// InitializeAllTargetMCAs - The main program should call
  168.   /// this function to initialize the target CustomBehaviour and
  169.   /// InstrPostProcess classes.
  170.   inline void InitializeAllTargetMCAs() {
  171. #define LLVM_TARGETMCA(TargetName) LLVMInitialize##TargetName##TargetMCA();
  172. #include "llvm/Config/TargetMCAs.def"
  173.   }
  174. }
  175.  
  176. #endif
  177.