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" 15*c4ed142eSCyndy 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 } 320116d04dSCyndy Ishida 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 } 900116d04dSCyndy Ishida llvm_unreachable("Unknown llvm.MachO.PlatformKind enum"); 910116d04dSCyndy Ishida } 920116d04dSCyndy Ishida 93*c4ed142eSCyndy Ishida PlatformKind getPlatformFromName(StringRef Name) { 94*c4ed142eSCyndy Ishida return StringSwitch<PlatformKind>(Name) 95*c4ed142eSCyndy Ishida .Case("macos", PlatformKind::macOS) 96*c4ed142eSCyndy Ishida .Case("ios", PlatformKind::iOS) 97*c4ed142eSCyndy Ishida .Case("tvos", PlatformKind::tvOS) 98*c4ed142eSCyndy Ishida .Case("watchos", PlatformKind::watchOS) 99*c4ed142eSCyndy Ishida .Case("bridgeos", PlatformKind::macOS) 100*c4ed142eSCyndy Ishida .Case("ios-macabi", PlatformKind::macCatalyst) 101*c4ed142eSCyndy Ishida .Case("ios-simulator", PlatformKind::iOSSimulator) 102*c4ed142eSCyndy Ishida .Case("tvos-simulator", PlatformKind::tvOSSimulator) 103*c4ed142eSCyndy Ishida .Case("watchos-simulator", PlatformKind::watchOSSimulator) 104*c4ed142eSCyndy Ishida .Case("driverkit", PlatformKind::driverKit) 105*c4ed142eSCyndy Ishida .Default(PlatformKind::unknown); 106*c4ed142eSCyndy Ishida } 107*c4ed142eSCyndy Ishida 1080116d04dSCyndy Ishida } // end namespace MachO. 1090116d04dSCyndy Ishida } // end namespace llvm. 110