Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- OffloadBundler.h - File Bundling and Unbundling ----------*- 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. /// \file
  10. /// This file defines an offload bundling API that bundles different files
  11. /// that relate with the same source code but different targets into a single
  12. /// one. Also the implements the opposite functionality, i.e. unbundle files
  13. /// previous created by this API.
  14. ///
  15. //===----------------------------------------------------------------------===//
  16.  
  17. #ifndef LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H
  18. #define LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H
  19.  
  20. #include "llvm/ADT/Triple.h"
  21. #include "llvm/Support/Error.h"
  22. #include <string>
  23. #include <vector>
  24.  
  25. namespace clang {
  26.  
  27. class OffloadBundlerConfig {
  28. public:
  29.   bool AllowNoHost = false;
  30.   bool AllowMissingBundles = false;
  31.   bool CheckInputArchive = false;
  32.   bool PrintExternalCommands = false;
  33.   bool HipOpenmpCompatible = false;
  34.  
  35.   unsigned BundleAlignment = 1;
  36.   unsigned HostInputIndex = ~0u;
  37.  
  38.   std::string FilesType;
  39.   std::string ObjcopyPath;
  40.  
  41.   // TODO: Convert these to llvm::SmallVector
  42.   std::vector<std::string> TargetNames;
  43.   std::vector<std::string> InputFileNames;
  44.   std::vector<std::string> OutputFileNames;
  45. };
  46.  
  47. class OffloadBundler {
  48. public:
  49.   const OffloadBundlerConfig &BundlerConfig;
  50.  
  51.   // TODO: Add error checking from ClangOffloadBundler.cpp
  52.   OffloadBundler(const OffloadBundlerConfig &BC) : BundlerConfig(BC) {}
  53.  
  54.   // List bundle IDs. Return true if an error was found.
  55.   static llvm::Error
  56.   ListBundleIDsInFile(llvm::StringRef InputFileName,
  57.                       const OffloadBundlerConfig &BundlerConfig);
  58.  
  59.   llvm::Error BundleFiles();
  60.   llvm::Error UnbundleFiles();
  61.   llvm::Error UnbundleArchive();
  62. };
  63.  
  64. /// Obtain the offload kind, real machine triple, and an optional GPUArch
  65. /// out of the target information specified by the user.
  66. /// Bundle Entry ID (or, Offload Target String) has following components:
  67. ///  * Offload Kind - Host, OpenMP, or HIP
  68. ///  * Triple - Standard LLVM Triple
  69. ///  * TargetID (Optional) - target ID, like gfx906:xnack+ or sm_30
  70. struct OffloadTargetInfo {
  71.   llvm::StringRef OffloadKind;
  72.   llvm::Triple Triple;
  73.   llvm::StringRef TargetID;
  74.  
  75.   const OffloadBundlerConfig &BundlerConfig;
  76.  
  77.   OffloadTargetInfo(const llvm::StringRef Target,
  78.                     const OffloadBundlerConfig &BC);
  79.   bool hasHostKind() const;
  80.   bool isOffloadKindValid() const;
  81.   bool isOffloadKindCompatible(const llvm::StringRef TargetOffloadKind) const;
  82.   bool isTripleValid() const;
  83.   bool operator==(const OffloadTargetInfo &Target) const;
  84.   std::string str() const;
  85. };
  86.  
  87. } // namespace clang
  88.  
  89. #endif // LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H
  90.