10116d04dSCyndy Ishida //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===// 20116d04dSCyndy Ishida // 30116d04dSCyndy Ishida // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40116d04dSCyndy Ishida // See https://llvm.org/LICENSE.txt for license information. 50116d04dSCyndy Ishida // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60116d04dSCyndy Ishida // 70116d04dSCyndy Ishida //===----------------------------------------------------------------------===// 80116d04dSCyndy Ishida // 90116d04dSCyndy Ishida // Implementations of Platform Helper functions. 100116d04dSCyndy Ishida // 110116d04dSCyndy Ishida //===----------------------------------------------------------------------===// 120116d04dSCyndy Ishida 130116d04dSCyndy Ishida #include "llvm/TextAPI/Platform.h" 140116d04dSCyndy Ishida #include "llvm/ADT/ArrayRef.h" 15c4ed142eSCyndy Ishida #include "llvm/ADT/StringSwitch.h" 160116d04dSCyndy Ishida #include "llvm/ADT/Triple.h" 170116d04dSCyndy Ishida 180116d04dSCyndy Ishida namespace llvm { 190116d04dSCyndy Ishida namespace MachO { 200116d04dSCyndy Ishida 210116d04dSCyndy Ishida PlatformKind mapToPlatformKind(PlatformKind Platform, bool WantSim) { 220116d04dSCyndy Ishida switch (Platform) { 230116d04dSCyndy Ishida default: 240116d04dSCyndy Ishida return Platform; 250116d04dSCyndy Ishida case PlatformKind::iOS: 260116d04dSCyndy Ishida return WantSim ? PlatformKind::iOSSimulator : PlatformKind::iOS; 270116d04dSCyndy Ishida case PlatformKind::tvOS: 280116d04dSCyndy Ishida return WantSim ? PlatformKind::tvOSSimulator : PlatformKind::tvOS; 290116d04dSCyndy Ishida case PlatformKind::watchOS: 300116d04dSCyndy Ishida return WantSim ? PlatformKind::watchOSSimulator : PlatformKind::watchOS; 310116d04dSCyndy Ishida } 32cba508fbSSam Powell llvm_unreachable("Unknown llvm::MachO::PlatformKind enum"); 330116d04dSCyndy Ishida } 340116d04dSCyndy Ishida 350116d04dSCyndy Ishida PlatformKind mapToPlatformKind(const Triple &Target) { 360116d04dSCyndy Ishida switch (Target.getOS()) { 370116d04dSCyndy Ishida default: 380116d04dSCyndy Ishida return PlatformKind::unknown; 390116d04dSCyndy Ishida case Triple::MacOSX: 400116d04dSCyndy Ishida return PlatformKind::macOS; 410116d04dSCyndy Ishida case Triple::IOS: 420116d04dSCyndy Ishida if (Target.isSimulatorEnvironment()) 430116d04dSCyndy Ishida return PlatformKind::iOSSimulator; 440116d04dSCyndy Ishida if (Target.getEnvironment() == Triple::MacABI) 450116d04dSCyndy Ishida return PlatformKind::macCatalyst; 460116d04dSCyndy Ishida return PlatformKind::iOS; 470116d04dSCyndy Ishida case Triple::TvOS: 480116d04dSCyndy Ishida return Target.isSimulatorEnvironment() ? PlatformKind::tvOSSimulator 490116d04dSCyndy Ishida : PlatformKind::tvOS; 500116d04dSCyndy Ishida case Triple::WatchOS: 510116d04dSCyndy Ishida return Target.isSimulatorEnvironment() ? PlatformKind::watchOSSimulator 520116d04dSCyndy Ishida : PlatformKind::watchOS; 530116d04dSCyndy Ishida // TODO: add bridgeOS & driverKit once in llvm::Triple 540116d04dSCyndy Ishida } 550116d04dSCyndy Ishida llvm_unreachable("Unknown Target Triple"); 560116d04dSCyndy Ishida } 570116d04dSCyndy Ishida 580116d04dSCyndy Ishida PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) { 590116d04dSCyndy Ishida PlatformSet Result; 600116d04dSCyndy Ishida for (const auto &Target : Targets) 610116d04dSCyndy Ishida Result.insert(mapToPlatformKind(Target)); 620116d04dSCyndy Ishida return Result; 630116d04dSCyndy Ishida } 640116d04dSCyndy Ishida 650116d04dSCyndy Ishida StringRef getPlatformName(PlatformKind Platform) { 660116d04dSCyndy Ishida switch (Platform) { 670116d04dSCyndy Ishida case PlatformKind::unknown: 680116d04dSCyndy Ishida return "unknown"; 690116d04dSCyndy Ishida case PlatformKind::macOS: 700116d04dSCyndy Ishida return "macOS"; 710116d04dSCyndy Ishida case PlatformKind::iOS: 720116d04dSCyndy Ishida return "iOS"; 730116d04dSCyndy Ishida case PlatformKind::tvOS: 740116d04dSCyndy Ishida return "tvOS"; 750116d04dSCyndy Ishida case PlatformKind::watchOS: 760116d04dSCyndy Ishida return "watchOS"; 770116d04dSCyndy Ishida case PlatformKind::bridgeOS: 780116d04dSCyndy Ishida return "bridgeOS"; 790116d04dSCyndy Ishida case PlatformKind::macCatalyst: 800116d04dSCyndy Ishida return "macCatalyst"; 810116d04dSCyndy Ishida case PlatformKind::iOSSimulator: 820116d04dSCyndy Ishida return "iOS Simulator"; 830116d04dSCyndy Ishida case PlatformKind::tvOSSimulator: 840116d04dSCyndy Ishida return "tvOS Simulator"; 850116d04dSCyndy Ishida case PlatformKind::watchOSSimulator: 860116d04dSCyndy Ishida return "watchOS Simulator"; 870116d04dSCyndy Ishida case PlatformKind::driverKit: 880116d04dSCyndy Ishida return "DriverKit"; 890116d04dSCyndy Ishida } 90cba508fbSSam Powell llvm_unreachable("Unknown llvm::MachO::PlatformKind enum"); 910116d04dSCyndy Ishida } 920116d04dSCyndy Ishida 93c4ed142eSCyndy Ishida PlatformKind getPlatformFromName(StringRef Name) { 94c4ed142eSCyndy Ishida return StringSwitch<PlatformKind>(Name) 95c4ed142eSCyndy Ishida .Case("macos", PlatformKind::macOS) 96c4ed142eSCyndy Ishida .Case("ios", PlatformKind::iOS) 97c4ed142eSCyndy Ishida .Case("tvos", PlatformKind::tvOS) 98c4ed142eSCyndy Ishida .Case("watchos", PlatformKind::watchOS) 99c4ed142eSCyndy Ishida .Case("bridgeos", PlatformKind::macOS) 100c4ed142eSCyndy Ishida .Case("ios-macabi", PlatformKind::macCatalyst) 101c4ed142eSCyndy Ishida .Case("ios-simulator", PlatformKind::iOSSimulator) 102c4ed142eSCyndy Ishida .Case("tvos-simulator", PlatformKind::tvOSSimulator) 103c4ed142eSCyndy Ishida .Case("watchos-simulator", PlatformKind::watchOSSimulator) 104c4ed142eSCyndy Ishida .Case("driverkit", PlatformKind::driverKit) 105c4ed142eSCyndy Ishida .Default(PlatformKind::unknown); 106c4ed142eSCyndy Ishida } 107c4ed142eSCyndy Ishida 108*5b5ab80eSSam Powell std::string getOSAndEnvironmentName(PlatformKind Platform, 109*5b5ab80eSSam Powell std::string Version) { 110*5b5ab80eSSam Powell switch (Platform) { 111*5b5ab80eSSam Powell case PlatformKind::unknown: 112*5b5ab80eSSam Powell return "darwin" + Version; 113*5b5ab80eSSam Powell case PlatformKind::macOS: 114*5b5ab80eSSam Powell return "macos" + Version; 115*5b5ab80eSSam Powell case PlatformKind::iOS: 116*5b5ab80eSSam Powell return "ios" + Version; 117*5b5ab80eSSam Powell case PlatformKind::tvOS: 118*5b5ab80eSSam Powell return "tvos" + Version; 119*5b5ab80eSSam Powell case PlatformKind::watchOS: 120*5b5ab80eSSam Powell return "watchos" + Version; 121*5b5ab80eSSam Powell case PlatformKind::bridgeOS: 122*5b5ab80eSSam Powell return "bridgeos" + Version; 123*5b5ab80eSSam Powell case PlatformKind::macCatalyst: 124*5b5ab80eSSam Powell return "ios" + Version + "-macabi"; 125*5b5ab80eSSam Powell case PlatformKind::iOSSimulator: 126*5b5ab80eSSam Powell return "ios" + Version + "-simulator"; 127*5b5ab80eSSam Powell case PlatformKind::tvOSSimulator: 128*5b5ab80eSSam Powell return "tvos" + Version + "-simulator"; 129*5b5ab80eSSam Powell case PlatformKind::watchOSSimulator: 130*5b5ab80eSSam Powell return "watchos" + Version + "-simulator"; 131*5b5ab80eSSam Powell case PlatformKind::driverKit: 132*5b5ab80eSSam Powell return "driverkit" + Version; 133*5b5ab80eSSam Powell } 134*5b5ab80eSSam Powell llvm_unreachable("Unknown llvm::MachO::PlatformKind enum"); 135*5b5ab80eSSam Powell } 136*5b5ab80eSSam Powell 1370116d04dSCyndy Ishida } // end namespace MachO. 1380116d04dSCyndy Ishida } // end namespace llvm. 139