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