Path: blob/main/contrib/llvm-project/llvm/lib/TextAPI/Platform.cpp
35262 views
//===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// Implementations of Platform Helper functions.9//10//===----------------------------------------------------------------------===//1112#include "llvm/TextAPI/Platform.h"13#include "llvm/ADT/ArrayRef.h"14#include "llvm/ADT/StringSwitch.h"15#include "llvm/TargetParser/Triple.h"1617namespace llvm {18namespace MachO {1920PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {21switch (Platform) {22default:23return Platform;24case PLATFORM_IOS:25return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;26case PLATFORM_TVOS:27return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;28case PLATFORM_WATCHOS:29return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;30}31}3233PlatformType mapToPlatformType(const Triple &Target) {34switch (Target.getOS()) {35default:36return PLATFORM_UNKNOWN;37case Triple::MacOSX:38return PLATFORM_MACOS;39case Triple::IOS:40if (Target.isSimulatorEnvironment())41return PLATFORM_IOSSIMULATOR;42if (Target.getEnvironment() == Triple::MacABI)43return PLATFORM_MACCATALYST;44return PLATFORM_IOS;45case Triple::TvOS:46return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR47: PLATFORM_TVOS;48case Triple::WatchOS:49return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR50: PLATFORM_WATCHOS;51case Triple::BridgeOS:52return PLATFORM_BRIDGEOS;53case Triple::DriverKit:54return PLATFORM_DRIVERKIT;55case Triple::XROS:56return Target.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR57: PLATFORM_XROS;58}59}6061PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {62PlatformSet Result;63for (const auto &Target : Targets)64Result.insert(mapToPlatformType(Target));65return Result;66}6768StringRef getPlatformName(PlatformType Platform) {69switch (Platform) {70#define PLATFORM(platform, id, name, build_name, target, tapi_target, \71marketing) \72case PLATFORM_##platform: \73return #marketing;74#include "llvm/BinaryFormat/MachO.def"75}76llvm_unreachable("Unknown llvm::MachO::PlatformType enum");77}7879PlatformType getPlatformFromName(StringRef Name) {80return StringSwitch<PlatformType>(Name)81.Case("osx", PLATFORM_MACOS)82#define PLATFORM(platform, id, name, build_name, target, tapi_target, \83marketing) \84.Case(#target, PLATFORM_##platform)85#include "llvm/BinaryFormat/MachO.def"86.Default(PLATFORM_UNKNOWN);87}8889std::string getOSAndEnvironmentName(PlatformType Platform,90std::string Version) {91switch (Platform) {92case PLATFORM_UNKNOWN:93return "darwin" + Version;94case PLATFORM_MACOS:95return "macos" + Version;96case PLATFORM_IOS:97return "ios" + Version;98case PLATFORM_TVOS:99return "tvos" + Version;100case PLATFORM_WATCHOS:101return "watchos" + Version;102case PLATFORM_BRIDGEOS:103return "bridgeos" + Version;104case PLATFORM_MACCATALYST:105return "ios" + Version + "-macabi";106case PLATFORM_IOSSIMULATOR:107return "ios" + Version + "-simulator";108case PLATFORM_TVOSSIMULATOR:109return "tvos" + Version + "-simulator";110case PLATFORM_WATCHOSSIMULATOR:111return "watchos" + Version + "-simulator";112case PLATFORM_DRIVERKIT:113return "driverkit" + Version;114case PLATFORM_XROS:115return "xros" + Version;116case PLATFORM_XROS_SIMULATOR:117return "xros" + Version + "-simulator";118}119llvm_unreachable("Unknown llvm::MachO::PlatformType enum");120}121122VersionTuple mapToSupportedOSVersion(const Triple &Triple) {123const VersionTuple MinSupportedOS = Triple.getMinimumSupportedOSVersion();124if (MinSupportedOS > Triple.getOSVersion())125return MinSupportedOS;126return Triple.getOSVersion();127}128129} // end namespace MachO.130} // end namespace llvm.131132133