1 //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // Implementations of Platform Helper functions.
11 //===----------------------------------------------------------------------===//
13 #include "llvm/TextAPI/Platform.h"
14 #include "llvm/ADT/ArrayRef.h"
15 #include "llvm/ADT/StringSwitch.h"
16 #include "llvm/TargetParser/Triple.h"
21 PlatformType
mapToPlatformType(PlatformType Platform
, bool WantSim
) {
26 return WantSim
? PLATFORM_IOSSIMULATOR
: PLATFORM_IOS
;
28 return WantSim
? PLATFORM_TVOSSIMULATOR
: PLATFORM_TVOS
;
29 case PLATFORM_WATCHOS
:
30 return WantSim
? PLATFORM_WATCHOSSIMULATOR
: PLATFORM_WATCHOS
;
34 PlatformType
mapToPlatformType(const Triple
&Target
) {
35 switch (Target
.getOS()) {
37 return PLATFORM_UNKNOWN
;
39 return PLATFORM_MACOS
;
41 if (Target
.isSimulatorEnvironment())
42 return PLATFORM_IOSSIMULATOR
;
43 if (Target
.getEnvironment() == Triple::MacABI
)
44 return PLATFORM_MACCATALYST
;
47 return Target
.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
50 return Target
.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
52 case Triple::BridgeOS
:
53 return PLATFORM_BRIDGEOS
;
54 case Triple::DriverKit
:
55 return PLATFORM_DRIVERKIT
;
57 return Target
.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR
62 PlatformSet
mapToPlatformSet(ArrayRef
<Triple
> Targets
) {
64 for (const auto &Target
: Targets
)
65 Result
.insert(mapToPlatformType(Target
));
69 StringRef
getPlatformName(PlatformType Platform
) {
71 #define PLATFORM(platform, id, name, build_name, target, tapi_target, \
73 case PLATFORM_##platform: \
75 #include "llvm/BinaryFormat/MachO.def"
77 llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
80 PlatformType
getPlatformFromName(StringRef Name
) {
81 return StringSwitch
<PlatformType
>(Name
)
82 .Case("osx", PLATFORM_MACOS
)
83 #define PLATFORM(platform, id, name, build_name, target, tapi_target, \
85 .Case(#target, PLATFORM_##platform)
86 #include "llvm/BinaryFormat/MachO.def"
87 .Default(PLATFORM_UNKNOWN
);
90 std::string
getOSAndEnvironmentName(PlatformType Platform
,
91 std::string Version
) {
93 case PLATFORM_UNKNOWN
:
94 return "darwin" + Version
;
96 return "macos" + Version
;
98 return "ios" + Version
;
100 return "tvos" + Version
;
101 case PLATFORM_WATCHOS
:
102 return "watchos" + Version
;
103 case PLATFORM_BRIDGEOS
:
104 return "bridgeos" + Version
;
105 case PLATFORM_MACCATALYST
:
106 return "ios" + Version
+ "-macabi";
107 case PLATFORM_IOSSIMULATOR
:
108 return "ios" + Version
+ "-simulator";
109 case PLATFORM_TVOSSIMULATOR
:
110 return "tvos" + Version
+ "-simulator";
111 case PLATFORM_WATCHOSSIMULATOR
:
112 return "watchos" + Version
+ "-simulator";
113 case PLATFORM_DRIVERKIT
:
114 return "driverkit" + Version
;
116 return "xros" + Version
;
117 case PLATFORM_XROS_SIMULATOR
:
118 return "xros" + Version
+ "-simulator";
120 llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
123 VersionTuple
mapToSupportedOSVersion(const Triple
&Triple
) {
124 const VersionTuple MinSupportedOS
= Triple
.getMinimumSupportedOSVersion();
125 if (MinSupportedOS
> Triple
.getOSVersion())
126 return MinSupportedOS
;
127 return Triple
.getOSVersion();
130 } // end namespace MachO.
131 } // end namespace llvm.