llvm-project/llvm/lib/TextAPI/TextStubCommon.h
Cyndy Ishida d6f9b97bae Reland "[TextAPI] Implement TBDv5 Writer"
Create writer for new JSON format.
The new JSON format allows practically all attributes to be defined per
target in a universal library however the internal representation only
allows one for the time being. For now the write will always write those
attributes as default available for all targets (install name,
compatability & current version, swift abi, flags e.g. flatnamepace &
app exenstion safety)

rdar://102076911

Reviewed By: ributzka

Differential Revision: https://reviews.llvm.org/D144339
2023-02-22 12:01:37 -08:00

103 lines
3.3 KiB
C++

//===- TextStubCommon.h ---------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Defines common Text Stub YAML mappings.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_TEXTAPI_TEXT_STUB_COMMON_H
#define LLVM_TEXTAPI_TEXT_STUB_COMMON_H
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/TextAPI/Architecture.h"
#include "llvm/TextAPI/InterfaceFile.h"
#include "llvm/TextAPI/Platform.h"
#include "llvm/TextAPI/Target.h"
using UUID = std::pair<llvm::MachO::Target, std::string>;
// clang-format off
enum TBDFlags : unsigned {
None = 0U,
FlatNamespace = 1U << 0,
NotApplicationExtensionSafe = 1U << 1,
InstallAPI = 1U << 2,
LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/InstallAPI),
};
// clang-format on
LLVM_YAML_STRONG_TYPEDEF(llvm::StringRef, FlowStringRef)
LLVM_YAML_STRONG_TYPEDEF(uint8_t, SwiftVersion)
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(UUID)
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(FlowStringRef)
namespace llvm {
namespace MachO {
class ArchitectureSet;
class PackedVersion;
Expected<std::unique_ptr<InterfaceFile>>
getInterfaceFileFromJSON(StringRef JSON);
Error serializeInterfaceFileToJSON(raw_ostream &OS, const InterfaceFile &File,
bool Compact);
} // namespace MachO
namespace yaml {
template <> struct ScalarTraits<FlowStringRef> {
static void output(const FlowStringRef &, void *, raw_ostream &);
static StringRef input(StringRef, void *, FlowStringRef &);
static QuotingType mustQuote(StringRef);
};
template <> struct ScalarEnumerationTraits<MachO::ObjCConstraintType> {
static void enumeration(IO &, MachO::ObjCConstraintType &);
};
template <> struct ScalarTraits<MachO::PlatformSet> {
static void output(const MachO::PlatformSet &, void *, raw_ostream &);
static StringRef input(StringRef, void *, MachO::PlatformSet &);
static QuotingType mustQuote(StringRef);
};
template <> struct ScalarBitSetTraits<MachO::ArchitectureSet> {
static void bitset(IO &, MachO::ArchitectureSet &);
};
template <> struct ScalarTraits<MachO::Architecture> {
static void output(const MachO::Architecture &, void *, raw_ostream &);
static StringRef input(StringRef, void *, MachO::Architecture &);
static QuotingType mustQuote(StringRef);
};
template <> struct ScalarTraits<MachO::PackedVersion> {
static void output(const MachO::PackedVersion &, void *, raw_ostream &);
static StringRef input(StringRef, void *, MachO::PackedVersion &);
static QuotingType mustQuote(StringRef);
};
template <> struct ScalarTraits<SwiftVersion> {
static void output(const SwiftVersion &, void *, raw_ostream &);
static StringRef input(StringRef, void *, SwiftVersion &);
static QuotingType mustQuote(StringRef);
};
template <> struct ScalarTraits<UUID> {
static void output(const UUID &, void *, raw_ostream &);
static StringRef input(StringRef, void *, UUID &);
static QuotingType mustQuote(StringRef);
};
} // end namespace yaml.
} // end namespace llvm.
#endif // LLVM_TEXTAPI_TEXT_STUB_COMMON_H