/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Driver/OffloadBundler.h
Line | Count | Source |
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/Support/Error.h" |
21 | | #include "llvm/TargetParser/Triple.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 | 1 | 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 |