xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm/ObjectYAML/OffloadYAML.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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/ADT/MapVector.h"
1981ad6265SDimitry Andric #include "llvm/Object/OffloadBinary.h"
2081ad6265SDimitry Andric #include "llvm/ObjectYAML/YAML.h"
2181ad6265SDimitry Andric #include "llvm/Support/YAMLTraits.h"
22*bdd1243dSDimitry Andric #include <optional>
2381ad6265SDimitry Andric 
2481ad6265SDimitry Andric namespace llvm {
2581ad6265SDimitry Andric namespace OffloadYAML {
2681ad6265SDimitry Andric 
2781ad6265SDimitry Andric struct Binary {
2881ad6265SDimitry Andric   struct StringEntry {
2981ad6265SDimitry Andric     StringRef Key;
3081ad6265SDimitry Andric     StringRef Value;
3181ad6265SDimitry Andric   };
3281ad6265SDimitry Andric 
3381ad6265SDimitry Andric   struct Member {
34*bdd1243dSDimitry Andric     std::optional<object::ImageKind> ImageKind;
35*bdd1243dSDimitry Andric     std::optional<object::OffloadKind> OffloadKind;
36*bdd1243dSDimitry Andric     std::optional<uint32_t> Flags;
37*bdd1243dSDimitry Andric     std::optional<std::vector<StringEntry>> StringEntries;
38*bdd1243dSDimitry Andric     std::optional<yaml::BinaryRef> Content;
3981ad6265SDimitry Andric   };
4081ad6265SDimitry Andric 
41*bdd1243dSDimitry Andric   std::optional<uint32_t> Version;
42*bdd1243dSDimitry Andric   std::optional<uint64_t> Size;
43*bdd1243dSDimitry Andric   std::optional<uint64_t> EntryOffset;
44*bdd1243dSDimitry Andric   std::optional<uint64_t> EntrySize;
4581ad6265SDimitry Andric   std::vector<Member> Members;
4681ad6265SDimitry Andric };
4781ad6265SDimitry Andric 
4881ad6265SDimitry Andric } // end namespace OffloadYAML
4981ad6265SDimitry Andric } // end namespace llvm
5081ad6265SDimitry Andric 
5181ad6265SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::Member)
5281ad6265SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::StringEntry)
5381ad6265SDimitry Andric 
5481ad6265SDimitry Andric namespace llvm {
5581ad6265SDimitry Andric namespace yaml {
5681ad6265SDimitry Andric 
5781ad6265SDimitry Andric template <> struct ScalarEnumerationTraits<object::ImageKind> {
5881ad6265SDimitry Andric   static void enumeration(IO &IO, object::ImageKind &Value);
5981ad6265SDimitry Andric };
6081ad6265SDimitry Andric 
6181ad6265SDimitry Andric template <> struct ScalarEnumerationTraits<object::OffloadKind> {
6281ad6265SDimitry Andric   static void enumeration(IO &IO, object::OffloadKind &Value);
6381ad6265SDimitry Andric };
6481ad6265SDimitry Andric 
6581ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary> {
6681ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary &O);
6781ad6265SDimitry Andric };
6881ad6265SDimitry Andric 
6981ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary::StringEntry> {
7081ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary::StringEntry &M);
7181ad6265SDimitry Andric };
7281ad6265SDimitry Andric 
7381ad6265SDimitry Andric template <> struct MappingTraits<OffloadYAML::Binary::Member> {
7481ad6265SDimitry Andric   static void mapping(IO &IO, OffloadYAML::Binary::Member &M);
7581ad6265SDimitry Andric };
7681ad6265SDimitry Andric 
7781ad6265SDimitry Andric } // end namespace yaml
7881ad6265SDimitry Andric } // end namespace llvm
7981ad6265SDimitry Andric 
80fcaf7f86SDimitry Andric #endif // LLVM_OBJECTYAML_OFFLOADYAML_H
81