xref: /llvm-project/llvm/lib/TextAPI/TextStubCommon.h (revision 3a080a0195ed21b8e12f825cfa00c8fa79f851a6)
10116d04dSCyndy Ishida //===- TextStubCommon.h ---------------------------------------------------===//
20116d04dSCyndy Ishida //
30116d04dSCyndy Ishida // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40116d04dSCyndy Ishida // See https://llvm.org/LICENSE.txt for license information.
50116d04dSCyndy Ishida // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60116d04dSCyndy Ishida //
70116d04dSCyndy Ishida //===----------------------------------------------------------------------===//
80116d04dSCyndy Ishida //
90116d04dSCyndy Ishida // Defines common Text Stub YAML mappings.
100116d04dSCyndy Ishida //
110116d04dSCyndy Ishida //===----------------------------------------------------------------------===//
120116d04dSCyndy Ishida 
130116d04dSCyndy Ishida #ifndef LLVM_TEXTAPI_TEXT_STUB_COMMON_H
140116d04dSCyndy Ishida #define LLVM_TEXTAPI_TEXT_STUB_COMMON_H
150116d04dSCyndy Ishida 
16*3a080a01SCyndy Ishida #include "llvm/ADT/BitmaskEnum.h"
170116d04dSCyndy Ishida #include "llvm/ADT/StringRef.h"
180116d04dSCyndy Ishida #include "llvm/Support/YAMLTraits.h"
190116d04dSCyndy Ishida #include "llvm/TextAPI/Architecture.h"
200116d04dSCyndy Ishida #include "llvm/TextAPI/InterfaceFile.h"
21b48e3782Sserge-sans-paille #include "llvm/TextAPI/Platform.h"
22b48e3782Sserge-sans-paille #include "llvm/TextAPI/Target.h"
230116d04dSCyndy Ishida 
240116d04dSCyndy Ishida using UUID = std::pair<llvm::MachO::Target, std::string>;
250116d04dSCyndy Ishida 
2679320a0cSCyndy Ishida // clang-format off
2779320a0cSCyndy Ishida enum TBDFlags : unsigned {
2879320a0cSCyndy Ishida   None                         = 0U,
2979320a0cSCyndy Ishida   FlatNamespace                = 1U << 0,
3079320a0cSCyndy Ishida   NotApplicationExtensionSafe  = 1U << 1,
3179320a0cSCyndy Ishida   InstallAPI                   = 1U << 2,
32913f21aeSCyndy Ishida   SimulatorSupport             = 1U << 3,
33e17efa60SCyndy Ishida   OSLibNotForSharedCache       = 1U << 4,
34e17efa60SCyndy Ishida   LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/OSLibNotForSharedCache),
3579320a0cSCyndy Ishida };
3679320a0cSCyndy Ishida // clang-format on
3779320a0cSCyndy Ishida 
LLVM_YAML_STRONG_TYPEDEF(llvm::StringRef,FlowStringRef)380116d04dSCyndy Ishida LLVM_YAML_STRONG_TYPEDEF(llvm::StringRef, FlowStringRef)
390116d04dSCyndy Ishida LLVM_YAML_STRONG_TYPEDEF(uint8_t, SwiftVersion)
400116d04dSCyndy Ishida LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(UUID)
410116d04dSCyndy Ishida LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(FlowStringRef)
420116d04dSCyndy Ishida 
430116d04dSCyndy Ishida namespace llvm {
44b48e3782Sserge-sans-paille 
45b48e3782Sserge-sans-paille namespace MachO {
46b48e3782Sserge-sans-paille class ArchitectureSet;
47b48e3782Sserge-sans-paille class PackedVersion;
4879320a0cSCyndy Ishida 
4979320a0cSCyndy Ishida Expected<std::unique_ptr<InterfaceFile>>
5079320a0cSCyndy Ishida getInterfaceFileFromJSON(StringRef JSON);
51d6f9b97bSCyndy Ishida 
52d6f9b97bSCyndy Ishida Error serializeInterfaceFileToJSON(raw_ostream &OS, const InterfaceFile &File,
53455bf3d1SCyndy Ishida                                    const FileType FileKind, bool Compact);
5479320a0cSCyndy Ishida } // namespace MachO
5579320a0cSCyndy Ishida 
560116d04dSCyndy Ishida namespace yaml {
570116d04dSCyndy Ishida 
580116d04dSCyndy Ishida template <> struct ScalarTraits<FlowStringRef> {
590116d04dSCyndy Ishida   static void output(const FlowStringRef &, void *, raw_ostream &);
600116d04dSCyndy Ishida   static StringRef input(StringRef, void *, FlowStringRef &);
610116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
620116d04dSCyndy Ishida };
630116d04dSCyndy Ishida 
640116d04dSCyndy Ishida template <> struct ScalarEnumerationTraits<MachO::ObjCConstraintType> {
650116d04dSCyndy Ishida   static void enumeration(IO &, MachO::ObjCConstraintType &);
660116d04dSCyndy Ishida };
670116d04dSCyndy Ishida 
680116d04dSCyndy Ishida template <> struct ScalarTraits<MachO::PlatformSet> {
690116d04dSCyndy Ishida   static void output(const MachO::PlatformSet &, void *, raw_ostream &);
700116d04dSCyndy Ishida   static StringRef input(StringRef, void *, MachO::PlatformSet &);
710116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
720116d04dSCyndy Ishida };
730116d04dSCyndy Ishida 
740116d04dSCyndy Ishida template <> struct ScalarBitSetTraits<MachO::ArchitectureSet> {
750116d04dSCyndy Ishida   static void bitset(IO &, MachO::ArchitectureSet &);
760116d04dSCyndy Ishida };
770116d04dSCyndy Ishida 
780116d04dSCyndy Ishida template <> struct ScalarTraits<MachO::Architecture> {
790116d04dSCyndy Ishida   static void output(const MachO::Architecture &, void *, raw_ostream &);
800116d04dSCyndy Ishida   static StringRef input(StringRef, void *, MachO::Architecture &);
810116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
820116d04dSCyndy Ishida };
830116d04dSCyndy Ishida 
840116d04dSCyndy Ishida template <> struct ScalarTraits<MachO::PackedVersion> {
850116d04dSCyndy Ishida   static void output(const MachO::PackedVersion &, void *, raw_ostream &);
860116d04dSCyndy Ishida   static StringRef input(StringRef, void *, MachO::PackedVersion &);
870116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
880116d04dSCyndy Ishida };
890116d04dSCyndy Ishida 
900116d04dSCyndy Ishida template <> struct ScalarTraits<SwiftVersion> {
910116d04dSCyndy Ishida   static void output(const SwiftVersion &, void *, raw_ostream &);
920116d04dSCyndy Ishida   static StringRef input(StringRef, void *, SwiftVersion &);
930116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
940116d04dSCyndy Ishida };
950116d04dSCyndy Ishida 
96a0666956SCyndy Ishida // UUIDs are no longer respected but kept in the YAML parser
97a0666956SCyndy Ishida // to keep reading in older TBDs.
980116d04dSCyndy Ishida template <> struct ScalarTraits<UUID> {
990116d04dSCyndy Ishida   static void output(const UUID &, void *, raw_ostream &);
1000116d04dSCyndy Ishida   static StringRef input(StringRef, void *, UUID &);
1010116d04dSCyndy Ishida   static QuotingType mustQuote(StringRef);
1020116d04dSCyndy Ishida };
1030116d04dSCyndy Ishida 
1040116d04dSCyndy Ishida } // end namespace yaml.
1050116d04dSCyndy Ishida } // end namespace llvm.
1060116d04dSCyndy Ishida 
1070116d04dSCyndy Ishida #endif // LLVM_TEXTAPI_TEXT_STUB_COMMON_H
108