123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- 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/ADT/Triple.h"
- #include "llvm/Support/Error.h"
- #include <string>
- #include <vector>
- namespace clang {
- class OffloadBundlerConfig {
- public:
- bool AllowNoHost = false;
- bool AllowMissingBundles = false;
- bool CheckInputArchive = false;
- bool PrintExternalCommands = false;
- bool HipOpenmpCompatible = false;
- unsigned BundleAlignment = 1;
- unsigned HostInputIndex = ~0u;
- std::string FilesType;
- std::string ObjcopyPath;
- // TODO: Convert these to llvm::SmallVector
- std::vector<std::string> TargetNames;
- std::vector<std::string> InputFileNames;
- std::vector<std::string> OutputFileNames;
- };
- class OffloadBundler {
- public:
- const OffloadBundlerConfig &BundlerConfig;
- // TODO: Add error checking from ClangOffloadBundler.cpp
- OffloadBundler(const OffloadBundlerConfig &BC) : BundlerConfig(BC) {}
- // List bundle IDs. Return true if an error was found.
- static llvm::Error
- ListBundleIDsInFile(llvm::StringRef InputFileName,
- const OffloadBundlerConfig &BundlerConfig);
- llvm::Error BundleFiles();
- llvm::Error UnbundleFiles();
- llvm::Error UnbundleArchive();
- };
- /// Obtain the offload kind, real machine triple, and an optional GPUArch
- /// 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 {
- llvm::StringRef OffloadKind;
- llvm::Triple Triple;
- llvm::StringRef TargetID;
- const OffloadBundlerConfig &BundlerConfig;
- OffloadTargetInfo(const llvm::StringRef Target,
- const OffloadBundlerConfig &BC);
- bool hasHostKind() const;
- bool isOffloadKindValid() const;
- bool isOffloadKindCompatible(const llvm::StringRef TargetOffloadKind) const;
- bool isTripleValid() const;
- bool operator==(const OffloadTargetInfo &Target) const;
- std::string str() const;
- };
- } // namespace clang
- #endif // LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|