1344a3780SDimitry Andric //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
2344a3780SDimitry Andric //
3344a3780SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4344a3780SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5344a3780SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6344a3780SDimitry Andric //
7344a3780SDimitry Andric //===----------------------------------------------------------------------===//
8344a3780SDimitry Andric //
9344a3780SDimitry Andric // Implementations of Platform Helper functions.
10344a3780SDimitry Andric //
11344a3780SDimitry Andric //===----------------------------------------------------------------------===//
12344a3780SDimitry Andric
13344a3780SDimitry Andric #include "llvm/TextAPI/Platform.h"
14344a3780SDimitry Andric #include "llvm/ADT/ArrayRef.h"
15344a3780SDimitry Andric #include "llvm/ADT/StringSwitch.h"
167fa27ce4SDimitry Andric #include "llvm/TargetParser/Triple.h"
17344a3780SDimitry Andric
18344a3780SDimitry Andric namespace llvm {
19344a3780SDimitry Andric namespace MachO {
20344a3780SDimitry Andric
mapToPlatformType(PlatformType Platform,bool WantSim)216f8fc217SDimitry Andric PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
22344a3780SDimitry Andric switch (Platform) {
23344a3780SDimitry Andric default:
24344a3780SDimitry Andric return Platform;
256f8fc217SDimitry Andric case PLATFORM_IOS:
266f8fc217SDimitry Andric return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
276f8fc217SDimitry Andric case PLATFORM_TVOS:
286f8fc217SDimitry Andric return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
296f8fc217SDimitry Andric case PLATFORM_WATCHOS:
306f8fc217SDimitry Andric return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
31344a3780SDimitry Andric }
32344a3780SDimitry Andric }
33344a3780SDimitry Andric
mapToPlatformType(const Triple & Target)346f8fc217SDimitry Andric PlatformType mapToPlatformType(const Triple &Target) {
35344a3780SDimitry Andric switch (Target.getOS()) {
36344a3780SDimitry Andric default:
376f8fc217SDimitry Andric return PLATFORM_UNKNOWN;
38344a3780SDimitry Andric case Triple::MacOSX:
396f8fc217SDimitry Andric return PLATFORM_MACOS;
40344a3780SDimitry Andric case Triple::IOS:
41344a3780SDimitry Andric if (Target.isSimulatorEnvironment())
426f8fc217SDimitry Andric return PLATFORM_IOSSIMULATOR;
43344a3780SDimitry Andric if (Target.getEnvironment() == Triple::MacABI)
446f8fc217SDimitry Andric return PLATFORM_MACCATALYST;
456f8fc217SDimitry Andric return PLATFORM_IOS;
46344a3780SDimitry Andric case Triple::TvOS:
476f8fc217SDimitry Andric return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
486f8fc217SDimitry Andric : PLATFORM_TVOS;
49344a3780SDimitry Andric case Triple::WatchOS:
506f8fc217SDimitry Andric return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
516f8fc217SDimitry Andric : PLATFORM_WATCHOS;
52ac9a064cSDimitry Andric case Triple::BridgeOS:
53ac9a064cSDimitry Andric return PLATFORM_BRIDGEOS;
54ac9a064cSDimitry Andric case Triple::DriverKit:
55ac9a064cSDimitry Andric return PLATFORM_DRIVERKIT;
56ac9a064cSDimitry Andric case Triple::XROS:
57ac9a064cSDimitry Andric return Target.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR
58ac9a064cSDimitry Andric : PLATFORM_XROS;
59344a3780SDimitry Andric }
60344a3780SDimitry Andric }
61344a3780SDimitry Andric
mapToPlatformSet(ArrayRef<Triple> Targets)62344a3780SDimitry Andric PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
63344a3780SDimitry Andric PlatformSet Result;
64344a3780SDimitry Andric for (const auto &Target : Targets)
656f8fc217SDimitry Andric Result.insert(mapToPlatformType(Target));
66344a3780SDimitry Andric return Result;
67344a3780SDimitry Andric }
68344a3780SDimitry Andric
getPlatformName(PlatformType Platform)696f8fc217SDimitry Andric StringRef getPlatformName(PlatformType Platform) {
70344a3780SDimitry Andric switch (Platform) {
71b1c73532SDimitry Andric #define PLATFORM(platform, id, name, build_name, target, tapi_target, \
72b1c73532SDimitry Andric marketing) \
73b1c73532SDimitry Andric case PLATFORM_##platform: \
74b1c73532SDimitry Andric return #marketing;
75b1c73532SDimitry Andric #include "llvm/BinaryFormat/MachO.def"
76344a3780SDimitry Andric }
776f8fc217SDimitry Andric llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
78344a3780SDimitry Andric }
79344a3780SDimitry Andric
getPlatformFromName(StringRef Name)806f8fc217SDimitry Andric PlatformType getPlatformFromName(StringRef Name) {
816f8fc217SDimitry Andric return StringSwitch<PlatformType>(Name)
827fa27ce4SDimitry Andric .Case("osx", PLATFORM_MACOS)
83b1c73532SDimitry Andric #define PLATFORM(platform, id, name, build_name, target, tapi_target, \
84b1c73532SDimitry Andric marketing) \
85b1c73532SDimitry Andric .Case(#target, PLATFORM_##platform)
86b1c73532SDimitry Andric #include "llvm/BinaryFormat/MachO.def"
876f8fc217SDimitry Andric .Default(PLATFORM_UNKNOWN);
88344a3780SDimitry Andric }
89344a3780SDimitry Andric
getOSAndEnvironmentName(PlatformType Platform,std::string Version)906f8fc217SDimitry Andric std::string getOSAndEnvironmentName(PlatformType Platform,
91344a3780SDimitry Andric std::string Version) {
92344a3780SDimitry Andric switch (Platform) {
936f8fc217SDimitry Andric case PLATFORM_UNKNOWN:
94344a3780SDimitry Andric return "darwin" + Version;
956f8fc217SDimitry Andric case PLATFORM_MACOS:
96344a3780SDimitry Andric return "macos" + Version;
976f8fc217SDimitry Andric case PLATFORM_IOS:
98344a3780SDimitry Andric return "ios" + Version;
996f8fc217SDimitry Andric case PLATFORM_TVOS:
100344a3780SDimitry Andric return "tvos" + Version;
1016f8fc217SDimitry Andric case PLATFORM_WATCHOS:
102344a3780SDimitry Andric return "watchos" + Version;
1036f8fc217SDimitry Andric case PLATFORM_BRIDGEOS:
104344a3780SDimitry Andric return "bridgeos" + Version;
1056f8fc217SDimitry Andric case PLATFORM_MACCATALYST:
106344a3780SDimitry Andric return "ios" + Version + "-macabi";
1076f8fc217SDimitry Andric case PLATFORM_IOSSIMULATOR:
108344a3780SDimitry Andric return "ios" + Version + "-simulator";
1096f8fc217SDimitry Andric case PLATFORM_TVOSSIMULATOR:
110344a3780SDimitry Andric return "tvos" + Version + "-simulator";
1116f8fc217SDimitry Andric case PLATFORM_WATCHOSSIMULATOR:
112344a3780SDimitry Andric return "watchos" + Version + "-simulator";
1136f8fc217SDimitry Andric case PLATFORM_DRIVERKIT:
114344a3780SDimitry Andric return "driverkit" + Version;
1154df029ccSDimitry Andric case PLATFORM_XROS:
1164df029ccSDimitry Andric return "xros" + Version;
1174df029ccSDimitry Andric case PLATFORM_XROS_SIMULATOR:
1184df029ccSDimitry Andric return "xros" + Version + "-simulator";
119344a3780SDimitry Andric }
1206f8fc217SDimitry Andric llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
121344a3780SDimitry Andric }
122344a3780SDimitry Andric
mapToSupportedOSVersion(const Triple & Triple)1237fa27ce4SDimitry Andric VersionTuple mapToSupportedOSVersion(const Triple &Triple) {
1247fa27ce4SDimitry Andric const VersionTuple MinSupportedOS = Triple.getMinimumSupportedOSVersion();
1257fa27ce4SDimitry Andric if (MinSupportedOS > Triple.getOSVersion())
1267fa27ce4SDimitry Andric return MinSupportedOS;
1277fa27ce4SDimitry Andric return Triple.getOSVersion();
1287fa27ce4SDimitry Andric }
1297fa27ce4SDimitry Andric
130344a3780SDimitry Andric } // end namespace MachO.
131344a3780SDimitry Andric } // end namespace llvm.
132