xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm/ObjectYAML/OffloadYAML.h (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
181ad6265SDimitry Andric //===- OffloadYAML.h - Offload Binary YAMLIO implementation -----*- C++ -*-===//
281ad6265SDimitry Andric //
381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
681ad6265SDimitry Andric //
781ad6265SDimitry Andric //===----------------------------------------------------------------------===//
881ad6265SDimitry Andric ///
981ad6265SDimitry Andric /// \file
1081ad6265SDimitry Andric /// This file declares classes for handling the YAML representation of
1181ad6265SDimitry Andric /// offloading binaries.
1281ad6265SDimitry Andric ///
1381ad6265SDimitry Andric //===----------------------------------------------------------------------===//
1481ad6265SDimitry Andric 
1581ad6265SDimitry Andric #ifndef LLVM_OBJECTYAML_OFFLOADYAML_H
1681ad6265SDimitry Andric #define LLVM_OBJECTYAML_OFFLOADYAML_H
1781ad6265SDimitry Andric 
1881ad6265SDimitry Andric #include "llvm/Object/OffloadBinary.h"
1981ad6265SDimitry Andric #include "llvm/ObjectYAML/YAML.h"
2081ad6265SDimitry Andric #include "llvm/Support/YAMLTraits.h"
21*bdd1243dSDimitry Andric #include <optional>
2281ad6265SDimitry Andric 
2381ad6265SDimitry Andric namespace llvm {
2481ad6265SDimitry Andric namespace OffloadYAML {
2581ad6265SDimitry Andric 
2681ad6265SDimitry Andric struct Binary {
2781ad6265SDimitry Andric   struct StringEntry {
2881ad6265SDimitry Andric     StringRef Key;
2981ad6265SDimitry Andric     StringRef Value;
3081ad6265SDimitry Andric   };
3181ad6265SDimitry Andric 
3281ad6265SDimitry Andric   struct Member {
33*bdd1243dSDimitry Andric     std::optional<object::ImageKind> ImageKind;
34*bdd1243dSDimitry Andric     std::optional<object::OffloadKind> OffloadKind;
35*bdd1243dSDimitry Andric     std::optional<uint32_t> Flags;
36*bdd1243dSDimitry Andric     std::optional<std::vector<StringEntry>> StringEntries;
37*bdd1243dSDimitry Andric     std::optional<yaml::BinaryRef> Content;
3881ad6265SDimitry Andric   };
3981ad6265SDimitry Andric 
40*bdd1243dSDimitry Andric   std::optional<uint32_t> Version;
41*bdd1243dSDimitry Andric   std::optional<uint64_t> Size;
42*bdd1243dSDimitry Andric   std::optional<uint64_t> EntryOffset;
43*bdd1243dSDimitry Andric   std::optional<uint64_t> EntrySize;
4481ad6265SDimitry Andric   std::vector<Member> Members;
4581ad6265SDimitry Andric };
4681ad6265SDimitry Andric 
4781ad6265SDimitry Andric } // end namespace OffloadYAML
4881ad6265SDimitry Andric } // end namespace llvm
4981ad6265SDimitry Andric 
5081ad6265SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::Member)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::StringEntry)5181ad6265SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::StringEntry)
5281ad6265SDimitry Andric 
5381ad6265SDimitry Andric namespace llvm {
5481ad6265SDimitry Andric namespace yaml {
5581ad6265SDimitry Andric 
5681ad6265SDimitry Andric template <> struct ScalarEnumerationTraits<object::ImageKind> {
5781ad6265SDimitry Andric   static void enumeration(IO &IO, object::ImageKind &Value);
5881ad6265SDimitry Andric };
5981ad6265SDimitry Andric 
6081ad6265SDimitry Andric template <> struct ScalarEnumerationTraits<object::OffloadKind> {
6181ad6265SDimitry Andric   static void enumeration(IO &IO, object::OffloadKind &Value);
6281ad6265SDimitry Andric };
6381ad6265SDimitry Andric 
6481ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary> {
6581ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary &O);
6681ad6265SDimitry Andric };
6781ad6265SDimitry Andric 
6881ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary::StringEntry> {
6981ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary::StringEntry &M);
7081ad6265SDimitry Andric };
7181ad6265SDimitry Andric 
7281ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary::Member> {
7381ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary::Member &M);
7481ad6265SDimitry Andric };
7581ad6265SDimitry Andric 
7681ad6265SDimitry Andric } // end namespace yaml
7781ad6265SDimitry Andric } // end namespace llvm
7881ad6265SDimitry Andric 
79fcaf7f86SDimitry Andric #endif // LLVM_OBJECTYAML_OFFLOADYAML_H
80