1 //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===// 2 // 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 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Implementations of Platform Helper functions. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/TextAPI/Platform.h" 14 #include "llvm/ADT/ArrayRef.h" 15 #include "llvm/ADT/StringSwitch.h" 16 #include "llvm/ADT/Triple.h" 17 18 namespace llvm { 19 namespace MachO { 20 21 PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) { 22 switch (Platform) { 23 default: 24 return Platform; 25 case PLATFORM_IOS: 26 return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS; 27 case PLATFORM_TVOS: 28 return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS; 29 case PLATFORM_WATCHOS: 30 return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS; 31 } 32 } 33 34 PlatformType mapToPlatformType(const Triple &Target) { 35 switch (Target.getOS()) { 36 default: 37 return PLATFORM_UNKNOWN; 38 case Triple::MacOSX: 39 return PLATFORM_MACOS; 40 case Triple::IOS: 41 if (Target.isSimulatorEnvironment()) 42 return PLATFORM_IOSSIMULATOR; 43 if (Target.getEnvironment() == Triple::MacABI) 44 return PLATFORM_MACCATALYST; 45 return PLATFORM_IOS; 46 case Triple::TvOS: 47 return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR 48 : PLATFORM_TVOS; 49 case Triple::WatchOS: 50 return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR 51 : PLATFORM_WATCHOS; 52 // TODO: add bridgeOS & driverKit once in llvm::Triple 53 } 54 } 55 56 PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) { 57 PlatformSet Result; 58 for (const auto &Target : Targets) 59 Result.insert(mapToPlatformType(Target)); 60 return Result; 61 } 62 63 StringRef getPlatformName(PlatformType Platform) { 64 switch (Platform) { 65 case PLATFORM_UNKNOWN: 66 return "unknown"; 67 case PLATFORM_MACOS: 68 return "macOS"; 69 case PLATFORM_IOS: 70 return "iOS"; 71 case PLATFORM_TVOS: 72 return "tvOS"; 73 case PLATFORM_WATCHOS: 74 return "watchOS"; 75 case PLATFORM_BRIDGEOS: 76 return "bridgeOS"; 77 case PLATFORM_MACCATALYST: 78 return "macCatalyst"; 79 case PLATFORM_IOSSIMULATOR: 80 return "iOS Simulator"; 81 case PLATFORM_TVOSSIMULATOR: 82 return "tvOS Simulator"; 83 case PLATFORM_WATCHOSSIMULATOR: 84 return "watchOS Simulator"; 85 case PLATFORM_DRIVERKIT: 86 return "DriverKit"; 87 } 88 llvm_unreachable("Unknown llvm::MachO::PlatformType enum"); 89 } 90 91 PlatformType getPlatformFromName(StringRef Name) { 92 return StringSwitch<PlatformType>(Name) 93 .Case("macos", PLATFORM_MACOS) 94 .Case("ios", PLATFORM_IOS) 95 .Case("tvos", PLATFORM_TVOS) 96 .Case("watchos", PLATFORM_WATCHOS) 97 .Case("bridgeos", PLATFORM_BRIDGEOS) 98 .Case("ios-macabi", PLATFORM_MACCATALYST) 99 .Case("ios-simulator", PLATFORM_IOSSIMULATOR) 100 .Case("tvos-simulator", PLATFORM_TVOSSIMULATOR) 101 .Case("watchos-simulator", PLATFORM_WATCHOSSIMULATOR) 102 .Case("driverkit", PLATFORM_DRIVERKIT) 103 .Default(PLATFORM_UNKNOWN); 104 } 105 106 std::string getOSAndEnvironmentName(PlatformType Platform, 107 std::string Version) { 108 switch (Platform) { 109 case PLATFORM_UNKNOWN: 110 return "darwin" + Version; 111 case PLATFORM_MACOS: 112 return "macos" + Version; 113 case PLATFORM_IOS: 114 return "ios" + Version; 115 case PLATFORM_TVOS: 116 return "tvos" + Version; 117 case PLATFORM_WATCHOS: 118 return "watchos" + Version; 119 case PLATFORM_BRIDGEOS: 120 return "bridgeos" + Version; 121 case PLATFORM_MACCATALYST: 122 return "ios" + Version + "-macabi"; 123 case PLATFORM_IOSSIMULATOR: 124 return "ios" + Version + "-simulator"; 125 case PLATFORM_TVOSSIMULATOR: 126 return "tvos" + Version + "-simulator"; 127 case PLATFORM_WATCHOSSIMULATOR: 128 return "watchos" + Version + "-simulator"; 129 case PLATFORM_DRIVERKIT: 130 return "driverkit" + Version; 131 } 132 llvm_unreachable("Unknown llvm::MachO::PlatformType enum"); 133 } 134 135 } // end namespace MachO. 136 } // end namespace llvm. 137