xref: /freebsd-src/contrib/llvm-project/llvm/lib/TextAPI/Platform.cpp (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
1fe6060f1SDimitry Andric //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
2fe6060f1SDimitry Andric //
3fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fe6060f1SDimitry Andric //
7fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
8fe6060f1SDimitry Andric //
9fe6060f1SDimitry Andric // Implementations of Platform Helper functions.
10fe6060f1SDimitry Andric //
11fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
12fe6060f1SDimitry Andric 
13fe6060f1SDimitry Andric #include "llvm/TextAPI/Platform.h"
14fe6060f1SDimitry Andric #include "llvm/ADT/ArrayRef.h"
15fe6060f1SDimitry Andric #include "llvm/ADT/StringSwitch.h"
16fe6060f1SDimitry Andric #include "llvm/ADT/Triple.h"
17fe6060f1SDimitry Andric 
18fe6060f1SDimitry Andric namespace llvm {
19fe6060f1SDimitry Andric namespace MachO {
20fe6060f1SDimitry Andric 
21*04eeddc0SDimitry Andric PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
22fe6060f1SDimitry Andric   switch (Platform) {
23fe6060f1SDimitry Andric   default:
24fe6060f1SDimitry Andric     return Platform;
25*04eeddc0SDimitry Andric   case PLATFORM_IOS:
26*04eeddc0SDimitry Andric     return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
27*04eeddc0SDimitry Andric   case PLATFORM_TVOS:
28*04eeddc0SDimitry Andric     return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
29*04eeddc0SDimitry Andric   case PLATFORM_WATCHOS:
30*04eeddc0SDimitry Andric     return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
31fe6060f1SDimitry Andric   }
32fe6060f1SDimitry Andric }
33fe6060f1SDimitry Andric 
34*04eeddc0SDimitry Andric PlatformType mapToPlatformType(const Triple &Target) {
35fe6060f1SDimitry Andric   switch (Target.getOS()) {
36fe6060f1SDimitry Andric   default:
37*04eeddc0SDimitry Andric     return PLATFORM_UNKNOWN;
38fe6060f1SDimitry Andric   case Triple::MacOSX:
39*04eeddc0SDimitry Andric     return PLATFORM_MACOS;
40fe6060f1SDimitry Andric   case Triple::IOS:
41fe6060f1SDimitry Andric     if (Target.isSimulatorEnvironment())
42*04eeddc0SDimitry Andric       return PLATFORM_IOSSIMULATOR;
43fe6060f1SDimitry Andric     if (Target.getEnvironment() == Triple::MacABI)
44*04eeddc0SDimitry Andric       return PLATFORM_MACCATALYST;
45*04eeddc0SDimitry Andric     return PLATFORM_IOS;
46fe6060f1SDimitry Andric   case Triple::TvOS:
47*04eeddc0SDimitry Andric     return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
48*04eeddc0SDimitry Andric                                            : PLATFORM_TVOS;
49fe6060f1SDimitry Andric   case Triple::WatchOS:
50*04eeddc0SDimitry Andric     return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
51*04eeddc0SDimitry Andric                                            : PLATFORM_WATCHOS;
52fe6060f1SDimitry Andric     // TODO: add bridgeOS & driverKit once in llvm::Triple
53fe6060f1SDimitry Andric   }
54fe6060f1SDimitry Andric }
55fe6060f1SDimitry Andric 
56fe6060f1SDimitry Andric PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
57fe6060f1SDimitry Andric   PlatformSet Result;
58fe6060f1SDimitry Andric   for (const auto &Target : Targets)
59*04eeddc0SDimitry Andric     Result.insert(mapToPlatformType(Target));
60fe6060f1SDimitry Andric   return Result;
61fe6060f1SDimitry Andric }
62fe6060f1SDimitry Andric 
63*04eeddc0SDimitry Andric StringRef getPlatformName(PlatformType Platform) {
64fe6060f1SDimitry Andric   switch (Platform) {
65*04eeddc0SDimitry Andric   case PLATFORM_UNKNOWN:
66fe6060f1SDimitry Andric     return "unknown";
67*04eeddc0SDimitry Andric   case PLATFORM_MACOS:
68fe6060f1SDimitry Andric     return "macOS";
69*04eeddc0SDimitry Andric   case PLATFORM_IOS:
70fe6060f1SDimitry Andric     return "iOS";
71*04eeddc0SDimitry Andric   case PLATFORM_TVOS:
72fe6060f1SDimitry Andric     return "tvOS";
73*04eeddc0SDimitry Andric   case PLATFORM_WATCHOS:
74fe6060f1SDimitry Andric     return "watchOS";
75*04eeddc0SDimitry Andric   case PLATFORM_BRIDGEOS:
76fe6060f1SDimitry Andric     return "bridgeOS";
77*04eeddc0SDimitry Andric   case PLATFORM_MACCATALYST:
78fe6060f1SDimitry Andric     return "macCatalyst";
79*04eeddc0SDimitry Andric   case PLATFORM_IOSSIMULATOR:
80fe6060f1SDimitry Andric     return "iOS Simulator";
81*04eeddc0SDimitry Andric   case PLATFORM_TVOSSIMULATOR:
82fe6060f1SDimitry Andric     return "tvOS Simulator";
83*04eeddc0SDimitry Andric   case PLATFORM_WATCHOSSIMULATOR:
84fe6060f1SDimitry Andric     return "watchOS Simulator";
85*04eeddc0SDimitry Andric   case PLATFORM_DRIVERKIT:
86fe6060f1SDimitry Andric     return "DriverKit";
87fe6060f1SDimitry Andric   }
88*04eeddc0SDimitry Andric   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
89fe6060f1SDimitry Andric }
90fe6060f1SDimitry Andric 
91*04eeddc0SDimitry Andric PlatformType getPlatformFromName(StringRef Name) {
92*04eeddc0SDimitry Andric   return StringSwitch<PlatformType>(Name)
93*04eeddc0SDimitry Andric       .Case("macos", PLATFORM_MACOS)
94*04eeddc0SDimitry Andric       .Case("ios", PLATFORM_IOS)
95*04eeddc0SDimitry Andric       .Case("tvos", PLATFORM_TVOS)
96*04eeddc0SDimitry Andric       .Case("watchos", PLATFORM_WATCHOS)
97*04eeddc0SDimitry Andric       .Case("bridgeos", PLATFORM_BRIDGEOS)
98*04eeddc0SDimitry Andric       .Case("ios-macabi", PLATFORM_MACCATALYST)
99*04eeddc0SDimitry Andric       .Case("ios-simulator", PLATFORM_IOSSIMULATOR)
100*04eeddc0SDimitry Andric       .Case("tvos-simulator", PLATFORM_TVOSSIMULATOR)
101*04eeddc0SDimitry Andric       .Case("watchos-simulator", PLATFORM_WATCHOSSIMULATOR)
102*04eeddc0SDimitry Andric       .Case("driverkit", PLATFORM_DRIVERKIT)
103*04eeddc0SDimitry Andric       .Default(PLATFORM_UNKNOWN);
104fe6060f1SDimitry Andric }
105fe6060f1SDimitry Andric 
106*04eeddc0SDimitry Andric std::string getOSAndEnvironmentName(PlatformType Platform,
107fe6060f1SDimitry Andric                                     std::string Version) {
108fe6060f1SDimitry Andric   switch (Platform) {
109*04eeddc0SDimitry Andric   case PLATFORM_UNKNOWN:
110fe6060f1SDimitry Andric     return "darwin" + Version;
111*04eeddc0SDimitry Andric   case PLATFORM_MACOS:
112fe6060f1SDimitry Andric     return "macos" + Version;
113*04eeddc0SDimitry Andric   case PLATFORM_IOS:
114fe6060f1SDimitry Andric     return "ios" + Version;
115*04eeddc0SDimitry Andric   case PLATFORM_TVOS:
116fe6060f1SDimitry Andric     return "tvos" + Version;
117*04eeddc0SDimitry Andric   case PLATFORM_WATCHOS:
118fe6060f1SDimitry Andric     return "watchos" + Version;
119*04eeddc0SDimitry Andric   case PLATFORM_BRIDGEOS:
120fe6060f1SDimitry Andric     return "bridgeos" + Version;
121*04eeddc0SDimitry Andric   case PLATFORM_MACCATALYST:
122fe6060f1SDimitry Andric     return "ios" + Version + "-macabi";
123*04eeddc0SDimitry Andric   case PLATFORM_IOSSIMULATOR:
124fe6060f1SDimitry Andric     return "ios" + Version + "-simulator";
125*04eeddc0SDimitry Andric   case PLATFORM_TVOSSIMULATOR:
126fe6060f1SDimitry Andric     return "tvos" + Version + "-simulator";
127*04eeddc0SDimitry Andric   case PLATFORM_WATCHOSSIMULATOR:
128fe6060f1SDimitry Andric     return "watchos" + Version + "-simulator";
129*04eeddc0SDimitry Andric   case PLATFORM_DRIVERKIT:
130fe6060f1SDimitry Andric     return "driverkit" + Version;
131fe6060f1SDimitry Andric   }
132*04eeddc0SDimitry Andric   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
133fe6060f1SDimitry Andric }
134fe6060f1SDimitry Andric 
135fe6060f1SDimitry Andric } // end namespace MachO.
136fe6060f1SDimitry Andric } // end namespace llvm.
137