xref: /freebsd-src/contrib/llvm-project/llvm/lib/TextAPI/TextStubCommon.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1fe6060f1SDimitry Andric //===- TextStubCommon.h ---------------------------------------------------===//
2fe6060f1SDimitry Andric //
3fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fe6060f1SDimitry Andric //
7fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
8fe6060f1SDimitry Andric //
9fe6060f1SDimitry Andric // Defines common Text Stub YAML mappings.
10fe6060f1SDimitry Andric //
11fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
12fe6060f1SDimitry Andric 
13fe6060f1SDimitry Andric #ifndef LLVM_TEXTAPI_TEXT_STUB_COMMON_H
14fe6060f1SDimitry Andric #define LLVM_TEXTAPI_TEXT_STUB_COMMON_H
15fe6060f1SDimitry Andric 
16*0fca6ea1SDimitry Andric #include "llvm/ADT/BitmaskEnum.h"
17fe6060f1SDimitry Andric #include "llvm/ADT/StringRef.h"
18fe6060f1SDimitry Andric #include "llvm/Support/YAMLTraits.h"
19fe6060f1SDimitry Andric #include "llvm/TextAPI/Architecture.h"
20fe6060f1SDimitry Andric #include "llvm/TextAPI/InterfaceFile.h"
2104eeddc0SDimitry Andric #include "llvm/TextAPI/Platform.h"
2204eeddc0SDimitry Andric #include "llvm/TextAPI/Target.h"
23fe6060f1SDimitry Andric 
24fe6060f1SDimitry Andric using UUID = std::pair<llvm::MachO::Target, std::string>;
25fe6060f1SDimitry Andric 
2606c3fb27SDimitry Andric // clang-format off
2706c3fb27SDimitry Andric enum TBDFlags : unsigned {
2806c3fb27SDimitry Andric   None                         = 0U,
2906c3fb27SDimitry Andric   FlatNamespace                = 1U << 0,
3006c3fb27SDimitry Andric   NotApplicationExtensionSafe  = 1U << 1,
3106c3fb27SDimitry Andric   InstallAPI                   = 1U << 2,
325f757f3fSDimitry Andric   SimulatorSupport             = 1U << 3,
335f757f3fSDimitry Andric   OSLibNotForSharedCache       = 1U << 4,
345f757f3fSDimitry Andric   LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/OSLibNotForSharedCache),
3506c3fb27SDimitry Andric };
3606c3fb27SDimitry Andric // clang-format on
3706c3fb27SDimitry Andric 
38fe6060f1SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(llvm::StringRef, FlowStringRef)
39fe6060f1SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint8_t, SwiftVersion)
40fe6060f1SDimitry Andric LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(UUID)
41fe6060f1SDimitry Andric LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(FlowStringRef)
42fe6060f1SDimitry Andric 
43fe6060f1SDimitry Andric namespace llvm {
4404eeddc0SDimitry Andric 
4504eeddc0SDimitry Andric namespace MachO {
4604eeddc0SDimitry Andric class ArchitectureSet;
4704eeddc0SDimitry Andric class PackedVersion;
4806c3fb27SDimitry Andric 
4906c3fb27SDimitry Andric Expected<std::unique_ptr<InterfaceFile>>
5006c3fb27SDimitry Andric getInterfaceFileFromJSON(StringRef JSON);
5106c3fb27SDimitry Andric 
5206c3fb27SDimitry Andric Error serializeInterfaceFileToJSON(raw_ostream &OS, const InterfaceFile &File,
535f757f3fSDimitry Andric                                    const FileType FileKind, bool Compact);
5406c3fb27SDimitry Andric } // namespace MachO
5506c3fb27SDimitry Andric 
56fe6060f1SDimitry Andric namespace yaml {
57fe6060f1SDimitry Andric 
58fe6060f1SDimitry Andric template <> struct ScalarTraits<FlowStringRef> {
59fe6060f1SDimitry Andric   static void output(const FlowStringRef &, void *, raw_ostream &);
60fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, FlowStringRef &);
61fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
62fe6060f1SDimitry Andric };
63fe6060f1SDimitry Andric 
64fe6060f1SDimitry Andric template <> struct ScalarEnumerationTraits<MachO::ObjCConstraintType> {
65fe6060f1SDimitry Andric   static void enumeration(IO &, MachO::ObjCConstraintType &);
66fe6060f1SDimitry Andric };
67fe6060f1SDimitry Andric 
68fe6060f1SDimitry Andric template <> struct ScalarTraits<MachO::PlatformSet> {
69fe6060f1SDimitry Andric   static void output(const MachO::PlatformSet &, void *, raw_ostream &);
70fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, MachO::PlatformSet &);
71fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
72fe6060f1SDimitry Andric };
73fe6060f1SDimitry Andric 
74fe6060f1SDimitry Andric template <> struct ScalarBitSetTraits<MachO::ArchitectureSet> {
75fe6060f1SDimitry Andric   static void bitset(IO &, MachO::ArchitectureSet &);
76fe6060f1SDimitry Andric };
77fe6060f1SDimitry Andric 
78fe6060f1SDimitry Andric template <> struct ScalarTraits<MachO::Architecture> {
79fe6060f1SDimitry Andric   static void output(const MachO::Architecture &, void *, raw_ostream &);
80fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, MachO::Architecture &);
81fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
82fe6060f1SDimitry Andric };
83fe6060f1SDimitry Andric 
84fe6060f1SDimitry Andric template <> struct ScalarTraits<MachO::PackedVersion> {
85fe6060f1SDimitry Andric   static void output(const MachO::PackedVersion &, void *, raw_ostream &);
86fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, MachO::PackedVersion &);
87fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
88fe6060f1SDimitry Andric };
89fe6060f1SDimitry Andric 
90fe6060f1SDimitry Andric template <> struct ScalarTraits<SwiftVersion> {
91fe6060f1SDimitry Andric   static void output(const SwiftVersion &, void *, raw_ostream &);
92fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, SwiftVersion &);
93fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
94fe6060f1SDimitry Andric };
95fe6060f1SDimitry Andric 
9606c3fb27SDimitry Andric // UUIDs are no longer respected but kept in the YAML parser
9706c3fb27SDimitry Andric // to keep reading in older TBDs.
98fe6060f1SDimitry Andric template <> struct ScalarTraits<UUID> {
99fe6060f1SDimitry Andric   static void output(const UUID &, void *, raw_ostream &);
100fe6060f1SDimitry Andric   static StringRef input(StringRef, void *, UUID &);
101fe6060f1SDimitry Andric   static QuotingType mustQuote(StringRef);
102fe6060f1SDimitry Andric };
103fe6060f1SDimitry Andric 
104fe6060f1SDimitry Andric } // end namespace yaml.
105fe6060f1SDimitry Andric } // end namespace llvm.
106fe6060f1SDimitry Andric 
107fe6060f1SDimitry Andric #endif // LLVM_TEXTAPI_TEXT_STUB_COMMON_H
108