//===- OffloadBundler.h - File Bundling and Unbundling ----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file defines an offload bundling API that bundles different files /// that relate with the same source code but different targets into a single /// one. Also the implements the opposite functionality, i.e. unbundle files /// previous created by this API. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H #define LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H #include "llvm/Support/Compression.h" #include "llvm/Support/Error.h" #include "llvm/TargetParser/Triple.h" #include <llvm/Support/MemoryBuffer.h> #include <string> #include <vector> namespace clang { class OffloadBundlerConfig { … }; class OffloadBundler { … }; /// Obtain the offload kind, real machine triple, and an optional TargetID /// out of the target information specified by the user. /// Bundle Entry ID (or, Offload Target String) has following components: /// * Offload Kind - Host, OpenMP, or HIP /// * Triple - Standard LLVM Triple /// * TargetID (Optional) - target ID, like gfx906:xnack+ or sm_30 struct OffloadTargetInfo { … }; // CompressedOffloadBundle represents the format for the compressed offload // bundles. // // The format is as follows: // - Magic Number (4 bytes) - A constant "CCOB". // - Version (2 bytes) // - Compression Method (2 bytes) - Uses the values from // llvm::compression::Format. // - Total file size (4 bytes). Available in version 2 and above. // - Uncompressed Size (4 bytes). // - Truncated MD5 Hash (8 bytes). // - Compressed Data (variable length). class CompressedOffloadBundle { … }; } // namespace clang #endif // LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H