9#ifndef LLVM_CLANG_BASIC_DARWINSDKINFO_H
10#define LLVM_CLANG_BASIC_DARWINSDKINFO_H
13#include "llvm/ADT/DenseMap.h"
14#include "llvm/Support/Error.h"
15#include "llvm/Support/VersionTuple.h"
16#include "llvm/Support/VirtualFileSystem.h"
17#include "llvm/TargetParser/Triple.h"
38 llvm::Triple::EnvironmentType FromEnv,
39 llvm::Triple::OSType ToOS,
40 llvm::Triple::EnvironmentType ToEnv)
50 return OSEnvPair(llvm::Triple::MacOSX, llvm::Triple::UnknownEnvironment,
51 llvm::Triple::IOS, llvm::Triple::MacABI);
57 return OSEnvPair(llvm::Triple::IOS, llvm::Triple::MacABI,
58 llvm::Triple::MacOSX, llvm::Triple::UnknownEnvironment);
64 return OSEnvPair(llvm::Triple::IOS, llvm::Triple::UnknownEnvironment,
65 llvm::Triple::WatchOS, llvm::Triple::UnknownEnvironment);
71 return OSEnvPair(llvm::Triple::IOS, llvm::Triple::UnknownEnvironment,
72 llvm::Triple::TvOS, llvm::Triple::UnknownEnvironment);
89 VersionTuple MinimumKeyVersion, VersionTuple MaximumKeyVersion,
90 VersionTuple MinimumValue, VersionTuple MaximumValue,
91 llvm::DenseMap<VersionTuple, VersionTuple> Mapping)
92 : MinimumKeyVersion(MinimumKeyVersion),
93 MaximumKeyVersion(MaximumKeyVersion), MinimumValue(MinimumValue),
94 MaximumValue(MaximumValue), Mapping(Mapping) {
95 assert(!this->Mapping.empty() &&
"unexpected empty mapping");
104 std::optional<VersionTuple>
105 map(
const VersionTuple &Key,
const VersionTuple &MinimumValue,
106 std::optional<VersionTuple> MaximumValue)
const;
108 static std::optional<RelatedTargetVersionMapping>
110 VersionTuple MaximumDeploymentTarget);
113 VersionTuple MinimumKeyVersion;
114 VersionTuple MaximumKeyVersion;
115 VersionTuple MinimumValue;
116 VersionTuple MaximumValue;
117 llvm::DenseMap<VersionTuple, VersionTuple> Mapping;
121 VersionTuple Version, VersionTuple MaximumDeploymentTarget,
123 std::optional<RelatedTargetVersionMapping>>
126 std::optional<RelatedTargetVersionMapping>>())
127 : Version(Version), MaximumDeploymentTarget(MaximumDeploymentTarget),
128 VersionMappings(
std::move(VersionMappings)) {}
130 const llvm::VersionTuple &
getVersion()
const {
return Version; }
144 auto Mapping = VersionMappings.find(Kind.Value);
145 if (Mapping == VersionMappings.end())
147 return Mapping->getSecond() ? &*Mapping->getSecond() :
nullptr;
150 static std::optional<DarwinSDKInfo>
154 VersionTuple Version;
155 VersionTuple MaximumDeploymentTarget;
160 std::optional<RelatedTargetVersionMapping>>
168Expected<std::optional<DarwinSDKInfo>>
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
The information about the darwin SDK that was used during this compilation.
const RelatedTargetVersionMapping * getVersionMapping(OSEnvPair Kind) const
DarwinSDKInfo(VersionTuple Version, VersionTuple MaximumDeploymentTarget, llvm::DenseMap< OSEnvPair::StorageType, std::optional< RelatedTargetVersionMapping > > VersionMappings=llvm::DenseMap< OSEnvPair::StorageType, std::optional< RelatedTargetVersionMapping > >())
const llvm::VersionTuple & getVersion() const
static std::optional< DarwinSDKInfo > parseDarwinSDKSettingsJSON(const llvm::json::Object *Obj)
Expected< std::optional< DarwinSDKInfo > > parseDarwinSDKInfo(llvm::vfs::FileSystem &VFS, StringRef SDKRootPath)
Parse the SDK information from the SDKSettings.json file.
YAML serialization mapping.
A value that describes two os-environment pairs that can be used as a key to the version map in the S...
static constexpr OSEnvPair macCatalystToMacOSPair()
Returns the os-environment mapping pair that's used to represent the Mac Catalyst -> macOS version ma...
static constexpr OSEnvPair macOStoMacCatalystPair()
Returns the os-environment mapping pair that's used to represent the macOS -> Mac Catalyst version ma...
static constexpr OSEnvPair iOStoWatchOSPair()
Returns the os-environment mapping pair that's used to represent the iOS -> watchOS version mapping.
static constexpr OSEnvPair iOStoTvOSPair()
Returns the os-environment mapping pair that's used to represent the iOS -> tvOS version mapping.
constexpr OSEnvPair(llvm::Triple::OSType FromOS, llvm::Triple::EnvironmentType FromEnv, llvm::Triple::OSType ToOS, llvm::Triple::EnvironmentType ToEnv)