10116d04dSCyndy Ishida //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
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 // Implementations of Platform Helper functions.
100116d04dSCyndy Ishida //
110116d04dSCyndy Ishida //===----------------------------------------------------------------------===//
120116d04dSCyndy Ishida 
130116d04dSCyndy Ishida #include "llvm/TextAPI/Platform.h"
140116d04dSCyndy Ishida #include "llvm/ADT/ArrayRef.h"
15c4ed142eSCyndy Ishida #include "llvm/ADT/StringSwitch.h"
160116d04dSCyndy Ishida #include "llvm/ADT/Triple.h"
170116d04dSCyndy Ishida 
180116d04dSCyndy Ishida namespace llvm {
190116d04dSCyndy Ishida namespace MachO {
200116d04dSCyndy Ishida 
21*3025c3edSJuergen Ributzka PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
220116d04dSCyndy Ishida   switch (Platform) {
230116d04dSCyndy Ishida   default:
240116d04dSCyndy Ishida     return Platform;
25*3025c3edSJuergen Ributzka   case PLATFORM_IOS:
26*3025c3edSJuergen Ributzka     return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
27*3025c3edSJuergen Ributzka   case PLATFORM_TVOS:
28*3025c3edSJuergen Ributzka     return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
29*3025c3edSJuergen Ributzka   case PLATFORM_WATCHOS:
30*3025c3edSJuergen Ributzka     return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
310116d04dSCyndy Ishida   }
320116d04dSCyndy Ishida }
330116d04dSCyndy Ishida 
34*3025c3edSJuergen Ributzka PlatformType mapToPlatformType(const Triple &Target) {
350116d04dSCyndy Ishida   switch (Target.getOS()) {
360116d04dSCyndy Ishida   default:
37*3025c3edSJuergen Ributzka     return PLATFORM_UNKNOWN;
380116d04dSCyndy Ishida   case Triple::MacOSX:
39*3025c3edSJuergen Ributzka     return PLATFORM_MACOS;
400116d04dSCyndy Ishida   case Triple::IOS:
410116d04dSCyndy Ishida     if (Target.isSimulatorEnvironment())
42*3025c3edSJuergen Ributzka       return PLATFORM_IOSSIMULATOR;
430116d04dSCyndy Ishida     if (Target.getEnvironment() == Triple::MacABI)
44*3025c3edSJuergen Ributzka       return PLATFORM_MACCATALYST;
45*3025c3edSJuergen Ributzka     return PLATFORM_IOS;
460116d04dSCyndy Ishida   case Triple::TvOS:
47*3025c3edSJuergen Ributzka     return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
48*3025c3edSJuergen Ributzka                                            : PLATFORM_TVOS;
490116d04dSCyndy Ishida   case Triple::WatchOS:
50*3025c3edSJuergen Ributzka     return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
51*3025c3edSJuergen Ributzka                                            : PLATFORM_WATCHOS;
520116d04dSCyndy Ishida     // TODO: add bridgeOS & driverKit once in llvm::Triple
530116d04dSCyndy Ishida   }
540116d04dSCyndy Ishida }
550116d04dSCyndy Ishida 
560116d04dSCyndy Ishida PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
570116d04dSCyndy Ishida   PlatformSet Result;
580116d04dSCyndy Ishida   for (const auto &Target : Targets)
59*3025c3edSJuergen Ributzka     Result.insert(mapToPlatformType(Target));
600116d04dSCyndy Ishida   return Result;
610116d04dSCyndy Ishida }
620116d04dSCyndy Ishida 
63*3025c3edSJuergen Ributzka StringRef getPlatformName(PlatformType Platform) {
640116d04dSCyndy Ishida   switch (Platform) {
65*3025c3edSJuergen Ributzka   case PLATFORM_UNKNOWN:
660116d04dSCyndy Ishida     return "unknown";
67*3025c3edSJuergen Ributzka   case PLATFORM_MACOS:
680116d04dSCyndy Ishida     return "macOS";
69*3025c3edSJuergen Ributzka   case PLATFORM_IOS:
700116d04dSCyndy Ishida     return "iOS";
71*3025c3edSJuergen Ributzka   case PLATFORM_TVOS:
720116d04dSCyndy Ishida     return "tvOS";
73*3025c3edSJuergen Ributzka   case PLATFORM_WATCHOS:
740116d04dSCyndy Ishida     return "watchOS";
75*3025c3edSJuergen Ributzka   case PLATFORM_BRIDGEOS:
760116d04dSCyndy Ishida     return "bridgeOS";
77*3025c3edSJuergen Ributzka   case PLATFORM_MACCATALYST:
780116d04dSCyndy Ishida     return "macCatalyst";
79*3025c3edSJuergen Ributzka   case PLATFORM_IOSSIMULATOR:
800116d04dSCyndy Ishida     return "iOS Simulator";
81*3025c3edSJuergen Ributzka   case PLATFORM_TVOSSIMULATOR:
820116d04dSCyndy Ishida     return "tvOS Simulator";
83*3025c3edSJuergen Ributzka   case PLATFORM_WATCHOSSIMULATOR:
840116d04dSCyndy Ishida     return "watchOS Simulator";
85*3025c3edSJuergen Ributzka   case PLATFORM_DRIVERKIT:
860116d04dSCyndy Ishida     return "DriverKit";
870116d04dSCyndy Ishida   }
880116d04dSCyndy Ishida }
890116d04dSCyndy Ishida 
90*3025c3edSJuergen Ributzka PlatformType getPlatformFromName(StringRef Name) {
91*3025c3edSJuergen Ributzka   return StringSwitch<PlatformType>(Name)
92*3025c3edSJuergen Ributzka       .Case("macos", PLATFORM_MACOS)
93*3025c3edSJuergen Ributzka       .Case("ios", PLATFORM_IOS)
94*3025c3edSJuergen Ributzka       .Case("tvos", PLATFORM_TVOS)
95*3025c3edSJuergen Ributzka       .Case("watchos", PLATFORM_WATCHOS)
96*3025c3edSJuergen Ributzka       .Case("bridgeos", PLATFORM_BRIDGEOS)
97*3025c3edSJuergen Ributzka       .Case("ios-macabi", PLATFORM_MACCATALYST)
98*3025c3edSJuergen Ributzka       .Case("ios-simulator", PLATFORM_IOSSIMULATOR)
99*3025c3edSJuergen Ributzka       .Case("tvos-simulator", PLATFORM_TVOSSIMULATOR)
100*3025c3edSJuergen Ributzka       .Case("watchos-simulator", PLATFORM_WATCHOSSIMULATOR)
101*3025c3edSJuergen Ributzka       .Case("driverkit", PLATFORM_DRIVERKIT)
102*3025c3edSJuergen Ributzka       .Default(PLATFORM_UNKNOWN);
103c4ed142eSCyndy Ishida }
104c4ed142eSCyndy Ishida 
105*3025c3edSJuergen Ributzka std::string getOSAndEnvironmentName(PlatformType Platform,
1065b5ab80eSSam Powell                                     std::string Version) {
1075b5ab80eSSam Powell   switch (Platform) {
108*3025c3edSJuergen Ributzka   case PLATFORM_UNKNOWN:
1095b5ab80eSSam Powell     return "darwin" + Version;
110*3025c3edSJuergen Ributzka   case PLATFORM_MACOS:
1115b5ab80eSSam Powell     return "macos" + Version;
112*3025c3edSJuergen Ributzka   case PLATFORM_IOS:
1135b5ab80eSSam Powell     return "ios" + Version;
114*3025c3edSJuergen Ributzka   case PLATFORM_TVOS:
1155b5ab80eSSam Powell     return "tvos" + Version;
116*3025c3edSJuergen Ributzka   case PLATFORM_WATCHOS:
1175b5ab80eSSam Powell     return "watchos" + Version;
118*3025c3edSJuergen Ributzka   case PLATFORM_BRIDGEOS:
1195b5ab80eSSam Powell     return "bridgeos" + Version;
120*3025c3edSJuergen Ributzka   case PLATFORM_MACCATALYST:
1215b5ab80eSSam Powell     return "ios" + Version + "-macabi";
122*3025c3edSJuergen Ributzka   case PLATFORM_IOSSIMULATOR:
1235b5ab80eSSam Powell     return "ios" + Version + "-simulator";
124*3025c3edSJuergen Ributzka   case PLATFORM_TVOSSIMULATOR:
1255b5ab80eSSam Powell     return "tvos" + Version + "-simulator";
126*3025c3edSJuergen Ributzka   case PLATFORM_WATCHOSSIMULATOR:
1275b5ab80eSSam Powell     return "watchos" + Version + "-simulator";
128*3025c3edSJuergen Ributzka   case PLATFORM_DRIVERKIT:
1295b5ab80eSSam Powell     return "driverkit" + Version;
1305b5ab80eSSam Powell   }
1315b5ab80eSSam Powell }
1325b5ab80eSSam Powell 
1330116d04dSCyndy Ishida } // end namespace MachO.
1340116d04dSCyndy Ishida } // end namespace llvm.
135