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