xref: /llvm-project/llvm/lib/TextAPI/Platform.cpp (revision 06fea93341ae7d0d0faa82c4c8704591963c2d8c)
10116d04dSCyndy Ishida //===- llvm/TextAPI/Platform.cpp - Platform ---------------------*- C++ -*-===//
20116d04dSCyndy Ishida //
30116d04dSCyndy Ishida // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40116d04dSCyndy Ishida // See https://llvm.org/LICENSE.txt for license information.
50116d04dSCyndy Ishida // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60116d04dSCyndy Ishida //
70116d04dSCyndy Ishida //===----------------------------------------------------------------------===//
80116d04dSCyndy Ishida //
90116d04dSCyndy Ishida // Implementations of Platform Helper functions.
100116d04dSCyndy Ishida //
110116d04dSCyndy Ishida //===----------------------------------------------------------------------===//
120116d04dSCyndy Ishida 
130116d04dSCyndy Ishida #include "llvm/TextAPI/Platform.h"
140116d04dSCyndy Ishida #include "llvm/ADT/ArrayRef.h"
15c4ed142eSCyndy Ishida #include "llvm/ADT/StringSwitch.h"
1662c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h"
170116d04dSCyndy Ishida 
180116d04dSCyndy Ishida namespace llvm {
190116d04dSCyndy Ishida namespace MachO {
200116d04dSCyndy Ishida 
mapToPlatformType(PlatformType Platform,bool WantSim)213025c3edSJuergen Ributzka PlatformType mapToPlatformType(PlatformType Platform, bool WantSim) {
220116d04dSCyndy Ishida   switch (Platform) {
230116d04dSCyndy Ishida   default:
240116d04dSCyndy Ishida     return Platform;
253025c3edSJuergen Ributzka   case PLATFORM_IOS:
263025c3edSJuergen Ributzka     return WantSim ? PLATFORM_IOSSIMULATOR : PLATFORM_IOS;
273025c3edSJuergen Ributzka   case PLATFORM_TVOS:
283025c3edSJuergen Ributzka     return WantSim ? PLATFORM_TVOSSIMULATOR : PLATFORM_TVOS;
293025c3edSJuergen Ributzka   case PLATFORM_WATCHOS:
303025c3edSJuergen Ributzka     return WantSim ? PLATFORM_WATCHOSSIMULATOR : PLATFORM_WATCHOS;
310116d04dSCyndy Ishida   }
320116d04dSCyndy Ishida }
330116d04dSCyndy Ishida 
mapToPlatformType(const Triple & Target)343025c3edSJuergen Ributzka PlatformType mapToPlatformType(const Triple &Target) {
350116d04dSCyndy Ishida   switch (Target.getOS()) {
360116d04dSCyndy Ishida   default:
373025c3edSJuergen Ributzka     return PLATFORM_UNKNOWN;
380116d04dSCyndy Ishida   case Triple::MacOSX:
393025c3edSJuergen Ributzka     return PLATFORM_MACOS;
400116d04dSCyndy Ishida   case Triple::IOS:
410116d04dSCyndy Ishida     if (Target.isSimulatorEnvironment())
423025c3edSJuergen Ributzka       return PLATFORM_IOSSIMULATOR;
430116d04dSCyndy Ishida     if (Target.getEnvironment() == Triple::MacABI)
443025c3edSJuergen Ributzka       return PLATFORM_MACCATALYST;
453025c3edSJuergen Ributzka     return PLATFORM_IOS;
460116d04dSCyndy Ishida   case Triple::TvOS:
473025c3edSJuergen Ributzka     return Target.isSimulatorEnvironment() ? PLATFORM_TVOSSIMULATOR
483025c3edSJuergen Ributzka                                            : PLATFORM_TVOS;
490116d04dSCyndy Ishida   case Triple::WatchOS:
503025c3edSJuergen Ributzka     return Target.isSimulatorEnvironment() ? PLATFORM_WATCHOSSIMULATOR
513025c3edSJuergen Ributzka                                            : PLATFORM_WATCHOS;
52*06fea933SCyndy Ishida   case Triple::BridgeOS:
53*06fea933SCyndy Ishida     return PLATFORM_BRIDGEOS;
54*06fea933SCyndy Ishida   case Triple::DriverKit:
55*06fea933SCyndy Ishida     return PLATFORM_DRIVERKIT;
56*06fea933SCyndy Ishida   case Triple::XROS:
57*06fea933SCyndy Ishida     return Target.isSimulatorEnvironment() ? PLATFORM_XROS_SIMULATOR
58*06fea933SCyndy Ishida                                            : PLATFORM_XROS;
590116d04dSCyndy Ishida   }
600116d04dSCyndy Ishida }
610116d04dSCyndy Ishida 
mapToPlatformSet(ArrayRef<Triple> Targets)620116d04dSCyndy Ishida PlatformSet mapToPlatformSet(ArrayRef<Triple> Targets) {
630116d04dSCyndy Ishida   PlatformSet Result;
640116d04dSCyndy Ishida   for (const auto &Target : Targets)
653025c3edSJuergen Ributzka     Result.insert(mapToPlatformType(Target));
660116d04dSCyndy Ishida   return Result;
670116d04dSCyndy Ishida }
680116d04dSCyndy Ishida 
getPlatformName(PlatformType Platform)693025c3edSJuergen Ributzka StringRef getPlatformName(PlatformType Platform) {
700116d04dSCyndy Ishida   switch (Platform) {
71bde2e698SJuergen Ributzka #define PLATFORM(platform, id, name, build_name, target, tapi_target,          \
72bde2e698SJuergen Ributzka                  marketing)                                                    \
73bde2e698SJuergen Ributzka   case PLATFORM_##platform:                                                    \
74bde2e698SJuergen Ributzka     return #marketing;
75bde2e698SJuergen Ributzka #include "llvm/BinaryFormat/MachO.def"
760116d04dSCyndy Ishida   }
77fced2744SSimon Pilgrim   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
780116d04dSCyndy Ishida }
790116d04dSCyndy Ishida 
getPlatformFromName(StringRef Name)803025c3edSJuergen Ributzka PlatformType getPlatformFromName(StringRef Name) {
813025c3edSJuergen Ributzka   return StringSwitch<PlatformType>(Name)
82e63e5360SCyndy Ishida       .Case("osx", PLATFORM_MACOS)
83bde2e698SJuergen Ributzka #define PLATFORM(platform, id, name, build_name, target, tapi_target,          \
84bde2e698SJuergen Ributzka                  marketing)                                                    \
852d292ab8SJuergen Ributzka   .Case(#target, PLATFORM_##platform)
86bde2e698SJuergen Ributzka #include "llvm/BinaryFormat/MachO.def"
873025c3edSJuergen Ributzka       .Default(PLATFORM_UNKNOWN);
88c4ed142eSCyndy Ishida }
89c4ed142eSCyndy Ishida 
getOSAndEnvironmentName(PlatformType Platform,std::string Version)903025c3edSJuergen Ributzka std::string getOSAndEnvironmentName(PlatformType Platform,
915b5ab80eSSam Powell                                     std::string Version) {
925b5ab80eSSam Powell   switch (Platform) {
933025c3edSJuergen Ributzka   case PLATFORM_UNKNOWN:
945b5ab80eSSam Powell     return "darwin" + Version;
953025c3edSJuergen Ributzka   case PLATFORM_MACOS:
965b5ab80eSSam Powell     return "macos" + Version;
973025c3edSJuergen Ributzka   case PLATFORM_IOS:
985b5ab80eSSam Powell     return "ios" + Version;
993025c3edSJuergen Ributzka   case PLATFORM_TVOS:
1005b5ab80eSSam Powell     return "tvos" + Version;
1013025c3edSJuergen Ributzka   case PLATFORM_WATCHOS:
1025b5ab80eSSam Powell     return "watchos" + Version;
1033025c3edSJuergen Ributzka   case PLATFORM_BRIDGEOS:
1045b5ab80eSSam Powell     return "bridgeos" + Version;
1053025c3edSJuergen Ributzka   case PLATFORM_MACCATALYST:
1065b5ab80eSSam Powell     return "ios" + Version + "-macabi";
1073025c3edSJuergen Ributzka   case PLATFORM_IOSSIMULATOR:
1085b5ab80eSSam Powell     return "ios" + Version + "-simulator";
1093025c3edSJuergen Ributzka   case PLATFORM_TVOSSIMULATOR:
1105b5ab80eSSam Powell     return "tvos" + Version + "-simulator";
1113025c3edSJuergen Ributzka   case PLATFORM_WATCHOSSIMULATOR:
1125b5ab80eSSam Powell     return "watchos" + Version + "-simulator";
1133025c3edSJuergen Ributzka   case PLATFORM_DRIVERKIT:
1145b5ab80eSSam Powell     return "driverkit" + Version;
1157d3466b5SCyndy Ishida   case PLATFORM_XROS:
1167d3466b5SCyndy Ishida     return "xros" + Version;
1177d3466b5SCyndy Ishida   case PLATFORM_XROS_SIMULATOR:
1187d3466b5SCyndy Ishida     return "xros" + Version + "-simulator";
1195b5ab80eSSam Powell   }
120fced2744SSimon Pilgrim   llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
1215b5ab80eSSam Powell }
1225b5ab80eSSam Powell 
mapToSupportedOSVersion(const Triple & Triple)12339748656SCyndy Ishida VersionTuple mapToSupportedOSVersion(const Triple &Triple) {
12439748656SCyndy Ishida   const VersionTuple MinSupportedOS = Triple.getMinimumSupportedOSVersion();
12539748656SCyndy Ishida   if (MinSupportedOS > Triple.getOSVersion())
12639748656SCyndy Ishida     return MinSupportedOS;
12739748656SCyndy Ishida   return Triple.getOSVersion();
12839748656SCyndy Ishida }
12939748656SCyndy Ishida 
1300116d04dSCyndy Ishida } // end namespace MachO.
1310116d04dSCyndy Ishida } // end namespace llvm.
132