1*0116d04dSCyndy Ishida //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===// 2*0116d04dSCyndy Ishida // 3*0116d04dSCyndy Ishida // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0116d04dSCyndy Ishida // See https://llvm.org/LICENSE.txt for license information. 5*0116d04dSCyndy Ishida // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0116d04dSCyndy Ishida // 7*0116d04dSCyndy Ishida //===----------------------------------------------------------------------===// 8*0116d04dSCyndy Ishida // 9*0116d04dSCyndy Ishida // Implementations of Platform Helper functions. 10*0116d04dSCyndy Ishida // 11*0116d04dSCyndy Ishida //===----------------------------------------------------------------------===// 12*0116d04dSCyndy Ishida 13*0116d04dSCyndy Ishida #include "llvm/TextAPI/Platform.h" 14*0116d04dSCyndy Ishida #include "llvm/ADT/ArrayRef.h" 15*0116d04dSCyndy Ishida #include "llvm/ADT/Triple.h" 16*0116d04dSCyndy Ishida 17*0116d04dSCyndy Ishida namespace llvm { 18*0116d04dSCyndy Ishida namespace MachO { 19*0116d04dSCyndy Ishida 20*0116d04dSCyndy Ishida PlatformKind mapToPlatformKind(PlatformKind Platform, bool WantSim) { 21*0116d04dSCyndy Ishida switch (Platform) { 22*0116d04dSCyndy Ishida default: 23*0116d04dSCyndy Ishida return Platform; 24*0116d04dSCyndy Ishida case PlatformKind::iOS: 25*0116d04dSCyndy Ishida return WantSim ? PlatformKind::iOSSimulator : PlatformKind::iOS; 26*0116d04dSCyndy Ishida case PlatformKind::tvOS: 27*0116d04dSCyndy Ishida return WantSim ? PlatformKind::tvOSSimulator : PlatformKind::tvOS; 28*0116d04dSCyndy Ishida case PlatformKind::watchOS: 29*0116d04dSCyndy Ishida return WantSim ? PlatformKind::watchOSSimulator : PlatformKind::watchOS; 30*0116d04dSCyndy Ishida } 31*0116d04dSCyndy Ishida llvm_unreachable("Unknown llvm.MachO.PlatformKind enum"); 32*0116d04dSCyndy Ishida } 33*0116d04dSCyndy Ishida 34*0116d04dSCyndy Ishida PlatformKind mapToPlatformKind(const Triple &Target) { 35*0116d04dSCyndy Ishida switch (Target.getOS()) { 36*0116d04dSCyndy Ishida default: 37*0116d04dSCyndy Ishida return PlatformKind::unknown; 38*0116d04dSCyndy Ishida case Triple::MacOSX: 39*0116d04dSCyndy Ishida return PlatformKind::macOS; 40*0116d04dSCyndy Ishida case Triple::IOS: 41*0116d04dSCyndy Ishida if (Target.isSimulatorEnvironment()) 42*0116d04dSCyndy Ishida return PlatformKind::iOSSimulator; 43*0116d04dSCyndy Ishida if (Target.getEnvironment() == Triple::MacABI) 44*0116d04dSCyndy Ishida return PlatformKind::macCatalyst; 45*0116d04dSCyndy Ishida return PlatformKind::iOS; 46*0116d04dSCyndy Ishida case Triple::TvOS: 47*0116d04dSCyndy Ishida return Target.isSimulatorEnvironment() ? PlatformKind::tvOSSimulator 48*0116d04dSCyndy Ishida : PlatformKind::tvOS; 49*0116d04dSCyndy Ishida case Triple::WatchOS: 50*0116d04dSCyndy Ishida return Target.isSimulatorEnvironment() ? PlatformKind::watchOSSimulator 51*0116d04dSCyndy Ishida : PlatformKind::watchOS; 52*0116d04dSCyndy Ishida // TODO: add bridgeOS & driverKit once in llvm::Triple 53*0116d04dSCyndy Ishida } 54*0116d04dSCyndy Ishida llvm_unreachable("Unknown Target Triple"); 55*0116d04dSCyndy Ishida } 56*0116d04dSCyndy Ishida 57*0116d04dSCyndy Ishida PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) { 58*0116d04dSCyndy Ishida PlatformSet Result; 59*0116d04dSCyndy Ishida for (const auto &Target : Targets) 60*0116d04dSCyndy Ishida Result.insert(mapToPlatformKind(Target)); 61*0116d04dSCyndy Ishida return Result; 62*0116d04dSCyndy Ishida } 63*0116d04dSCyndy Ishida 64*0116d04dSCyndy Ishida StringRef getPlatformName(PlatformKind Platform) { 65*0116d04dSCyndy Ishida switch (Platform) { 66*0116d04dSCyndy Ishida case PlatformKind::unknown: 67*0116d04dSCyndy Ishida return "unknown"; 68*0116d04dSCyndy Ishida case PlatformKind::macOS: 69*0116d04dSCyndy Ishida return "macOS"; 70*0116d04dSCyndy Ishida case PlatformKind::iOS: 71*0116d04dSCyndy Ishida return "iOS"; 72*0116d04dSCyndy Ishida case PlatformKind::tvOS: 73*0116d04dSCyndy Ishida return "tvOS"; 74*0116d04dSCyndy Ishida case PlatformKind::watchOS: 75*0116d04dSCyndy Ishida return "watchOS"; 76*0116d04dSCyndy Ishida case PlatformKind::bridgeOS: 77*0116d04dSCyndy Ishida return "bridgeOS"; 78*0116d04dSCyndy Ishida case PlatformKind::macCatalyst: 79*0116d04dSCyndy Ishida return "macCatalyst"; 80*0116d04dSCyndy Ishida case PlatformKind::iOSSimulator: 81*0116d04dSCyndy Ishida return "iOS Simulator"; 82*0116d04dSCyndy Ishida case PlatformKind::tvOSSimulator: 83*0116d04dSCyndy Ishida return "tvOS Simulator"; 84*0116d04dSCyndy Ishida case PlatformKind::watchOSSimulator: 85*0116d04dSCyndy Ishida return "watchOS Simulator"; 86*0116d04dSCyndy Ishida case PlatformKind::driverKit: 87*0116d04dSCyndy Ishida return "DriverKit"; 88*0116d04dSCyndy Ishida } 89*0116d04dSCyndy Ishida llvm_unreachable("Unknown llvm.MachO.PlatformKind enum"); 90*0116d04dSCyndy Ishida } 91*0116d04dSCyndy Ishida 92*0116d04dSCyndy Ishida } // end namespace MachO. 93*0116d04dSCyndy Ishida } // end namespace llvm. 94