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
mapToPlatformType(PlatformType Platform,bool WantSim)213025c3edSJuergen Ributzka PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
220116d04dSCyndy Ishida switch (Platform) {
230116d04dSCyndy Ishida default:
240116d04dSCyndy Ishida return Platform;
253025c3edSJuergen Ributzka case PLATFORM_IOS:
263025c3edSJuergen Ributzka return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
273025c3edSJuergen Ributzka case PLATFORM_TVOS:
283025c3edSJuergen Ributzka return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
293025c3edSJuergen Ributzka case PLATFORM_WATCHOS:
303025c3edSJuergen Ributzka return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
310116d04dSCyndy Ishida }
320116d04dSCyndy Ishida }
330116d04dSCyndy Ishida
mapToPlatformType(const Triple & Target)343025c3edSJuergen Ributzka PlatformType mapToPlatformType(const Triple &Target) {
350116d04dSCyndy Ishida switch (Target.getOS()) {
360116d04dSCyndy Ishida default:
373025c3edSJuergen Ributzka return PLATFORM_UNKNOWN;
380116d04dSCyndy Ishida case Triple::MacOSX:
393025c3edSJuergen Ributzka return PLATFORM_MACOS;
400116d04dSCyndy Ishida case Triple::IOS:
410116d04dSCyndy Ishida if (Target.isSimulatorEnvironment())
423025c3edSJuergen Ributzka return PLATFORM_IOSSIMULATOR;
430116d04dSCyndy Ishida if (Target.getEnvironment() == Triple::MacABI)
443025c3edSJuergen Ributzka return PLATFORM_MACCATALYST;
453025c3edSJuergen Ributzka return PLATFORM_IOS;
460116d04dSCyndy Ishida case Triple::TvOS:
473025c3edSJuergen Ributzka return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
483025c3edSJuergen Ributzka : PLATFORM_TVOS;
490116d04dSCyndy Ishida case Triple::WatchOS:
503025c3edSJuergen Ributzka return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
513025c3edSJuergen Ributzka : PLATFORM_WATCHOS;
520116d04dSCyndy Ishida // TODO: add bridgeOS & driverKit once in llvm::Triple
530116d04dSCyndy Ishida }
540116d04dSCyndy Ishida }
550116d04dSCyndy Ishida
mapToPlatformSet(ArrayRef<Triple> Targets)560116d04dSCyndy Ishida PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
570116d04dSCyndy Ishida PlatformSet Result;
580116d04dSCyndy Ishida for (const auto &Target : Targets)
593025c3edSJuergen Ributzka Result.insert(mapToPlatformType(Target));
600116d04dSCyndy Ishida return Result;
610116d04dSCyndy Ishida }
620116d04dSCyndy Ishida
getPlatformName(PlatformType Platform)633025c3edSJuergen Ributzka StringRef getPlatformName(PlatformType Platform) {
640116d04dSCyndy Ishida switch (Platform) {
653025c3edSJuergen Ributzka case PLATFORM_UNKNOWN:
660116d04dSCyndy Ishida return "unknown";
673025c3edSJuergen Ributzka case PLATFORM_MACOS:
680116d04dSCyndy Ishida return "macOS";
693025c3edSJuergen Ributzka case PLATFORM_IOS:
700116d04dSCyndy Ishida return "iOS";
713025c3edSJuergen Ributzka case PLATFORM_TVOS:
720116d04dSCyndy Ishida return "tvOS";
733025c3edSJuergen Ributzka case PLATFORM_WATCHOS:
740116d04dSCyndy Ishida return "watchOS";
753025c3edSJuergen Ributzka case PLATFORM_BRIDGEOS:
760116d04dSCyndy Ishida return "bridgeOS";
773025c3edSJuergen Ributzka case PLATFORM_MACCATALYST:
780116d04dSCyndy Ishida return "macCatalyst";
793025c3edSJuergen Ributzka case PLATFORM_IOSSIMULATOR:
800116d04dSCyndy Ishida return "iOS Simulator";
813025c3edSJuergen Ributzka case PLATFORM_TVOSSIMULATOR:
820116d04dSCyndy Ishida return "tvOS Simulator";
833025c3edSJuergen Ributzka case PLATFORM_WATCHOSSIMULATOR:
840116d04dSCyndy Ishida return "watchOS Simulator";
853025c3edSJuergen Ributzka case PLATFORM_DRIVERKIT:
860116d04dSCyndy Ishida return "DriverKit";
870116d04dSCyndy Ishida }
88*fced2744SSimon Pilgrim llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
890116d04dSCyndy Ishida }
900116d04dSCyndy Ishida
getPlatformFromName(StringRef Name)913025c3edSJuergen Ributzka PlatformType getPlatformFromName(StringRef Name) {
923025c3edSJuergen Ributzka return StringSwitch<PlatformType>(Name)
933025c3edSJuergen Ributzka .Case("macos", PLATFORM_MACOS)
943025c3edSJuergen Ributzka .Case("ios", PLATFORM_IOS)
953025c3edSJuergen Ributzka .Case("tvos", PLATFORM_TVOS)
963025c3edSJuergen Ributzka .Case("watchos", PLATFORM_WATCHOS)
973025c3edSJuergen Ributzka .Case("bridgeos", PLATFORM_BRIDGEOS)
983025c3edSJuergen Ributzka .Case("ios-macabi", PLATFORM_MACCATALYST)
993025c3edSJuergen Ributzka .Case("ios-simulator", PLATFORM_IOSSIMULATOR)
1003025c3edSJuergen Ributzka .Case("tvos-simulator", PLATFORM_TVOSSIMULATOR)
1013025c3edSJuergen Ributzka .Case("watchos-simulator", PLATFORM_WATCHOSSIMULATOR)
1023025c3edSJuergen Ributzka .Case("driverkit", PLATFORM_DRIVERKIT)
1033025c3edSJuergen Ributzka .Default(PLATFORM_UNKNOWN);
104c4ed142eSCyndy Ishida }
105c4ed142eSCyndy Ishida
getOSAndEnvironmentName(PlatformType Platform,std::string Version)1063025c3edSJuergen Ributzka std::string getOSAndEnvironmentName(PlatformType Platform,
1075b5ab80eSSam Powell std::string Version) {
1085b5ab80eSSam Powell switch (Platform) {
1093025c3edSJuergen Ributzka case PLATFORM_UNKNOWN:
1105b5ab80eSSam Powell return "darwin" + Version;
1113025c3edSJuergen Ributzka case PLATFORM_MACOS:
1125b5ab80eSSam Powell return "macos" + Version;
1133025c3edSJuergen Ributzka case PLATFORM_IOS:
1145b5ab80eSSam Powell return "ios" + Version;
1153025c3edSJuergen Ributzka case PLATFORM_TVOS:
1165b5ab80eSSam Powell return "tvos" + Version;
1173025c3edSJuergen Ributzka case PLATFORM_WATCHOS:
1185b5ab80eSSam Powell return "watchos" + Version;
1193025c3edSJuergen Ributzka case PLATFORM_BRIDGEOS:
1205b5ab80eSSam Powell return "bridgeos" + Version;
1213025c3edSJuergen Ributzka case PLATFORM_MACCATALYST:
1225b5ab80eSSam Powell return "ios" + Version + "-macabi";
1233025c3edSJuergen Ributzka case PLATFORM_IOSSIMULATOR:
1245b5ab80eSSam Powell return "ios" + Version + "-simulator";
1253025c3edSJuergen Ributzka case PLATFORM_TVOSSIMULATOR:
1265b5ab80eSSam Powell return "tvos" + Version + "-simulator";
1273025c3edSJuergen Ributzka case PLATFORM_WATCHOSSIMULATOR:
1285b5ab80eSSam Powell return "watchos" + Version + "-simulator";
1293025c3edSJuergen Ributzka case PLATFORM_DRIVERKIT:
1305b5ab80eSSam Powell return "driverkit" + Version;
1315b5ab80eSSam Powell }
132*fced2744SSimon Pilgrim llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
1335b5ab80eSSam Powell }
1345b5ab80eSSam Powell
1350116d04dSCyndy Ishida } // end namespace MachO.
1360116d04dSCyndy Ishida } // end namespace llvm.
137