Platform.cpp revision 360784
1//===- llvm/TextAPI/MachO/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/ADT/ArrayRef.h"
14#include "llvm/ADT/Triple.h"
15#include "llvm/TextAPI/MachO/Platform.h"
16
17namespace llvm {
18namespace MachO {
19
20PlatformKind mapToPlatformKind(PlatformKind Platform, bool WantSim) {
21  switch (Platform) {
22  default:
23    return Platform;
24  case PlatformKind::iOS:
25    return WantSim ? PlatformKind::iOSSimulator : PlatformKind::iOS;
26  case PlatformKind::tvOS:
27    return WantSim ? PlatformKind::tvOSSimulator : PlatformKind::tvOS;
28  case PlatformKind::watchOS:
29    return WantSim ? PlatformKind::watchOSSimulator : PlatformKind::watchOS;
30  }
31  llvm_unreachable("Unknown llvm.MachO.PlatformKind enum");
32}
33
34PlatformKind mapToPlatformKind(const Triple &Target) {
35  switch (Target.getOS()) {
36  default:
37    return PlatformKind::unknown;
38  case Triple::MacOSX:
39    return PlatformKind::macOS;
40  case Triple::IOS:
41    if (Target.isSimulatorEnvironment())
42      return PlatformKind::iOSSimulator;
43    if (Target.getEnvironment() == Triple::MacABI)
44      return PlatformKind::macCatalyst;
45    return PlatformKind::iOS;
46  case Triple::TvOS:
47    return Target.isSimulatorEnvironment() ? PlatformKind::tvOSSimulator
48                                           : PlatformKind::tvOS;
49  case Triple::WatchOS:
50    return Target.isSimulatorEnvironment() ? PlatformKind::watchOSSimulator
51                                           : PlatformKind::watchOS;
52    // TODO: add bridgeOS once in llvm::Triple
53  }
54  llvm_unreachable("Unknown Target Triple");
55}
56
57PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
58  PlatformSet Result;
59  for (const auto &Target : Targets)
60    Result.insert(mapToPlatformKind(Target));
61  return Result;
62}
63
64StringRef getPlatformName(PlatformKind Platform) {
65  switch (Platform) {
66  case PlatformKind::unknown:
67    return "unknown";
68  case PlatformKind::macOS:
69    return "macOS";
70  case PlatformKind::iOS:
71    return "iOS";
72  case PlatformKind::tvOS:
73    return "tvOS";
74  case PlatformKind::watchOS:
75    return "watchOS";
76  case PlatformKind::bridgeOS:
77    return "bridgeOS";
78  case PlatformKind::macCatalyst:
79    return "macCatalyst";
80  case PlatformKind::iOSSimulator:
81    return "iOS Simulator";
82  case PlatformKind::tvOSSimulator:
83    return "tvOS Simulator";
84  case PlatformKind::watchOSSimulator:
85    return "watchOS Simulator";
86  }
87  llvm_unreachable("Unknown llvm.MachO.PlatformKind enum");
88}
89
90} // end namespace MachO.
91} // end namespace llvm.
92