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