1//===- llvm/TextAPI/MachO/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/ADT/ArrayRef.h" 14#include "llvm/ADT/Triple.h" 15#include "llvm/TextAPI/MachO/Platform.h" 16 17namespace llvm { 18namespace MachO { 19 20PlatformKind mapToPlatformKind(PlatformKind Platform, bool WantSim) { 21 switch (Platform) { 22 default: 23 return Platform; 24 case PlatformKind::iOS: 25 return WantSim ? PlatformKind::iOSSimulator : PlatformKind::iOS; 26 case PlatformKind::tvOS: 27 return WantSim ? PlatformKind::tvOSSimulator : PlatformKind::tvOS; 28 case PlatformKind::watchOS: 29 return WantSim ? PlatformKind::watchOSSimulator : PlatformKind::watchOS; 30 } 31 llvm_unreachable("Unknown llvm.MachO.PlatformKind enum"); 32} 33 34PlatformKind mapToPlatformKind(const Triple &Target) { 35 switch (Target.getOS()) { 36 default: 37 return PlatformKind::unknown; 38 case Triple::MacOSX: 39 return PlatformKind::macOS; 40 case Triple::IOS: 41 if (Target.isSimulatorEnvironment()) 42 return PlatformKind::iOSSimulator; 43 if (Target.getEnvironment() == Triple::MacABI) 44 return PlatformKind::macCatalyst; 45 return PlatformKind::iOS; 46 case Triple::TvOS: 47 return Target.isSimulatorEnvironment() ? PlatformKind::tvOSSimulator 48 : PlatformKind::tvOS; 49 case Triple::WatchOS: 50 return Target.isSimulatorEnvironment() ? PlatformKind::watchOSSimulator 51 : PlatformKind::watchOS; 52 // TODO: add bridgeOS once in llvm::Triple 53 } 54 llvm_unreachable("Unknown Target Triple"); 55} 56 57PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) { 58 PlatformSet Result; 59 for (const auto &Target : Targets) 60 Result.insert(mapToPlatformKind(Target)); 61 return Result; 62} 63 64StringRef getPlatformName(PlatformKind Platform) { 65 switch (Platform) { 66 case PlatformKind::unknown: 67 return "unknown"; 68 case PlatformKind::macOS: 69 return "macOS"; 70 case PlatformKind::iOS: 71 return "iOS"; 72 case PlatformKind::tvOS: 73 return "tvOS"; 74 case PlatformKind::watchOS: 75 return "watchOS"; 76 case PlatformKind::bridgeOS: 77 return "bridgeOS"; 78 case PlatformKind::macCatalyst: 79 return "macCatalyst"; 80 case PlatformKind::iOSSimulator: 81 return "iOS Simulator"; 82 case PlatformKind::tvOSSimulator: 83 return "tvOS Simulator"; 84 case PlatformKind::watchOSSimulator: 85 return "watchOS Simulator"; 86 } 87 llvm_unreachable("Unknown llvm.MachO.PlatformKind enum"); 88} 89 90} // end namespace MachO. 91} // end namespace llvm. 92