Home | History | Annotate | Line # | Download | only in TextAPI
      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 
     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 
     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 
     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 
     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 
     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