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(V: 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(S: "osx" , Value: 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(Value: 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 | |