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/TargetParser/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 case Triple::BridgeOS: 53 return PLATFORM_BRIDGEOS; 54 case Triple::DriverKit: 55 return PLATFORM_DRIVERKIT; 56 case Triple::XROS: 57 return Target.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR 58 : PLATFORM_XROS; 59 } 60 } 61 62 PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) { 63 PlatformSet Result; 64 for (const auto &Target : Targets) 65 Result.insert(mapToPlatformType(Target)); 66 return Result; 67 } 68 69 StringRef getPlatformName(PlatformType Platform) { 70 switch (Platform) { 71 #define PLATFORM(platform, id, name, build_name, target, tapi_target, \ 72 marketing) \ 73 case PLATFORM_##platform: \ 74 return #marketing; 75 #include "llvm/BinaryFormat/MachO.def" 76 } 77 llvm_unreachable("Unknown llvm::MachO::PlatformType enum"); 78 } 79 80 PlatformType getPlatformFromName(StringRef Name) { 81 return StringSwitch<PlatformType>(Name) 82 .Case("osx", PLATFORM_MACOS) 83 #define PLATFORM(platform, id, name, build_name, target, tapi_target, \ 84 marketing) \ 85 .Case(#target, PLATFORM_##platform) 86 #include "llvm/BinaryFormat/MachO.def" 87 .Default(PLATFORM_UNKNOWN); 88 } 89 90 std::string getOSAndEnvironmentName(PlatformType Platform, 91 std::string Version) { 92 switch (Platform) { 93 case PLATFORM_UNKNOWN: 94 return "darwin" + Version; 95 case PLATFORM_MACOS: 96 return "macos" + Version; 97 case PLATFORM_IOS: 98 return "ios" + Version; 99 case PLATFORM_TVOS: 100 return "tvos" + Version; 101 case PLATFORM_WATCHOS: 102 return "watchos" + Version; 103 case PLATFORM_BRIDGEOS: 104 return "bridgeos" + Version; 105 case PLATFORM_MACCATALYST: 106 return "ios" + Version + "-macabi"; 107 case PLATFORM_IOSSIMULATOR: 108 return "ios" + Version + "-simulator"; 109 case PLATFORM_TVOSSIMULATOR: 110 return "tvos" + Version + "-simulator"; 111 case PLATFORM_WATCHOSSIMULATOR: 112 return "watchos" + Version + "-simulator"; 113 case PLATFORM_DRIVERKIT: 114 return "driverkit" + Version; 115 case PLATFORM_XROS: 116 return "xros" + Version; 117 case PLATFORM_XROS_SIMULATOR: 118 return "xros" + Version + "-simulator"; 119 } 120 llvm_unreachable("Unknown llvm::MachO::PlatformType enum"); 121 } 122 123 VersionTuple mapToSupportedOSVersion(const Triple &Triple) { 124 const VersionTuple MinSupportedOS = Triple.getMinimumSupportedOSVersion(); 125 if (MinSupportedOS > Triple.getOSVersion()) 126 return MinSupportedOS; 127 return Triple.getOSVersion(); 128 } 129 130 } // end namespace MachO. 131 } // end namespace llvm. 132