xref: /netbsd-src/external/apache2/llvm/dist/llvm/lib/TextAPI/Platform.cpp (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Implementations of Platform Helper functions.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/TextAPI/Platform.h"
14 #include "llvm/ADT/ArrayRef.h"
15 #include "llvm/ADT/StringSwitch.h"
16 #include "llvm/ADT/Triple.h"
17 
18 namespace llvm {
19 namespace MachO {
20 
mapToPlatformKind(PlatformKind Platform,bool WantSim)21 PlatformKind mapToPlatformKind(PlatformKind Platform, bool WantSim) {
22   switch (Platform) {
23   default:
24     return Platform;
25   case PlatformKind::iOS:
26     return WantSim ? PlatformKind::iOSSimulator : PlatformKind::iOS;
27   case PlatformKind::tvOS:
28     return WantSim ? PlatformKind::tvOSSimulator : PlatformKind::tvOS;
29   case PlatformKind::watchOS:
30     return WantSim ? PlatformKind::watchOSSimulator : PlatformKind::watchOS;
31   }
32   llvm_unreachable("Unknown llvm::MachO::PlatformKind enum");
33 }
34 
mapToPlatformKind(const Triple & Target)35 PlatformKind mapToPlatformKind(const Triple &Target) {
36   switch (Target.getOS()) {
37   default:
38     return PlatformKind::unknown;
39   case Triple::MacOSX:
40     return PlatformKind::macOS;
41   case Triple::IOS:
42     if (Target.isSimulatorEnvironment())
43       return PlatformKind::iOSSimulator;
44     if (Target.getEnvironment() == Triple::MacABI)
45       return PlatformKind::macCatalyst;
46     return PlatformKind::iOS;
47   case Triple::TvOS:
48     return Target.isSimulatorEnvironment() ? PlatformKind::tvOSSimulator
49                                            : PlatformKind::tvOS;
50   case Triple::WatchOS:
51     return Target.isSimulatorEnvironment() ? PlatformKind::watchOSSimulator
52                                            : PlatformKind::watchOS;
53     // TODO: add bridgeOS & driverKit once in llvm::Triple
54   }
55   llvm_unreachable("Unknown Target Triple");
56 }
57 
mapToPlatformSet(ArrayRef<Triple> Targets)58 PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
59   PlatformSet Result;
60   for (const auto &Target : Targets)
61     Result.insert(mapToPlatformKind(Target));
62   return Result;
63 }
64 
getPlatformName(PlatformKind Platform)65 StringRef getPlatformName(PlatformKind Platform) {
66   switch (Platform) {
67   case PlatformKind::unknown:
68     return "unknown";
69   case PlatformKind::macOS:
70     return "macOS";
71   case PlatformKind::iOS:
72     return "iOS";
73   case PlatformKind::tvOS:
74     return "tvOS";
75   case PlatformKind::watchOS:
76     return "watchOS";
77   case PlatformKind::bridgeOS:
78     return "bridgeOS";
79   case PlatformKind::macCatalyst:
80     return "macCatalyst";
81   case PlatformKind::iOSSimulator:
82     return "iOS Simulator";
83   case PlatformKind::tvOSSimulator:
84     return "tvOS Simulator";
85   case PlatformKind::watchOSSimulator:
86     return "watchOS Simulator";
87   case PlatformKind::driverKit:
88     return "DriverKit";
89   }
90   llvm_unreachable("Unknown llvm::MachO::PlatformKind enum");
91 }
92 
getPlatformFromName(StringRef Name)93 PlatformKind getPlatformFromName(StringRef Name) {
94   return StringSwitch<PlatformKind>(Name)
95       .Case("macos", PlatformKind::macOS)
96       .Case("ios", PlatformKind::iOS)
97       .Case("tvos", PlatformKind::tvOS)
98       .Case("watchos", PlatformKind::watchOS)
99       .Case("bridgeos", PlatformKind::macOS)
100       .Case("ios-macabi", PlatformKind::macCatalyst)
101       .Case("ios-simulator", PlatformKind::iOSSimulator)
102       .Case("tvos-simulator", PlatformKind::tvOSSimulator)
103       .Case("watchos-simulator", PlatformKind::watchOSSimulator)
104       .Case("driverkit", PlatformKind::driverKit)
105       .Default(PlatformKind::unknown);
106 }
107 
108 } // end namespace MachO.
109 } // end namespace llvm.
110