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