xref: /freebsd/contrib/llvm-project/llvm/lib/TextAPI/Platform.cpp (revision 7fdf597e96a02165cfe22ff357b857d5fa15ed8a)
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/TargetParser/Triple.h"
17 
18 namespace llvm {
19 namespace MachO {
20 
21 PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
22   switch (Platform) {
23   default:
24     return Platform;
25   case PLATFORM_IOS:
26     return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
27   case PLATFORM_TVOS:
28     return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
29   case PLATFORM_WATCHOS:
30     return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
31   }
32 }
33 
34 PlatformType mapToPlatformType(const Triple &Target) {
35   switch (Target.getOS()) {
36   default:
37     return PLATFORM_UNKNOWN;
38   case Triple::MacOSX:
39     return PLATFORM_MACOS;
40   case Triple::IOS:
41     if (Target.isSimulatorEnvironment())
42       return PLATFORM_IOSSIMULATOR;
43     if (Target.getEnvironment() == Triple::MacABI)
44       return PLATFORM_MACCATALYST;
45     return PLATFORM_IOS;
46   case Triple::TvOS:
47     return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
48                                            : PLATFORM_TVOS;
49   case Triple::WatchOS:
50     return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
51                                            : PLATFORM_WATCHOS;
52   case Triple::BridgeOS:
53     return PLATFORM_BRIDGEOS;
54   case Triple::DriverKit:
55     return PLATFORM_DRIVERKIT;
56   case Triple::XROS:
57     return Target.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR
58                                            : PLATFORM_XROS;
59   }
60 }
61 
62 PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
63   PlatformSet Result;
64   for (const auto &Target : Targets)
65     Result.insert(mapToPlatformType(Target));
66   return Result;
67 }
68 
69 StringRef getPlatformName(PlatformType Platform) {
70   switch (Platform) {
71 #define PLATFORM(platform, id, name, build_name, target, tapi_target,          \
72                  marketing)                                                    \
73   case PLATFORM_##platform:                                                    \
74     return #marketing;
75 #include "llvm/BinaryFormat/MachO.def"
76   }
77   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
78 }
79 
80 PlatformType getPlatformFromName(StringRef Name) {
81   return StringSwitch<PlatformType>(Name)
82       .Case("osx", PLATFORM_MACOS)
83 #define PLATFORM(platform, id, name, build_name, target, tapi_target,          \
84                  marketing)                                                    \
85   .Case(#target, PLATFORM_##platform)
86 #include "llvm/BinaryFormat/MachO.def"
87       .Default(PLATFORM_UNKNOWN);
88 }
89 
90 std::string getOSAndEnvironmentName(PlatformType Platform,
91                                     std::string Version) {
92   switch (Platform) {
93   case PLATFORM_UNKNOWN:
94     return "darwin" + Version;
95   case PLATFORM_MACOS:
96     return "macos" + Version;
97   case PLATFORM_IOS:
98     return "ios" + Version;
99   case PLATFORM_TVOS:
100     return "tvos" + Version;
101   case PLATFORM_WATCHOS:
102     return "watchos" + Version;
103   case PLATFORM_BRIDGEOS:
104     return "bridgeos" + Version;
105   case PLATFORM_MACCATALYST:
106     return "ios" + Version + "-macabi";
107   case PLATFORM_IOSSIMULATOR:
108     return "ios" + Version + "-simulator";
109   case PLATFORM_TVOSSIMULATOR:
110     return "tvos" + Version + "-simulator";
111   case PLATFORM_WATCHOSSIMULATOR:
112     return "watchos" + Version + "-simulator";
113   case PLATFORM_DRIVERKIT:
114     return "driverkit" + Version;
115   case PLATFORM_XROS:
116     return "xros" + Version;
117   case PLATFORM_XROS_SIMULATOR:
118     return "xros" + Version + "-simulator";
119   }
120   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
121 }
122 
123 VersionTuple mapToSupportedOSVersion(const Triple &Triple) {
124   const VersionTuple MinSupportedOS = Triple.getMinimumSupportedOSVersion();
125   if (MinSupportedOS > Triple.getOSVersion())
126     return MinSupportedOS;
127   return Triple.getOSVersion();
128 }
129 
130 } // end namespace MachO.
131 } // end namespace llvm.
132