aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/lib/TextAPI/MachO/Target.cpp
blob: 46930a2d3e2167cd2bed10867d6e25308b0bead1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//===- tapi/Core/Target.cpp - Target ----------------------------*- C++ -*-===// 
// 
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
// See https://llvm.org/LICENSE.txt for license information. 
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
// 
//===----------------------------------------------------------------------===// 
 
#include "llvm/ADT/SmallString.h" 
#include "llvm/ADT/SmallVector.h" 
#include "llvm/ADT/StringExtras.h" 
#include "llvm/ADT/StringSwitch.h" 
#include "llvm/Support/Format.h" 
#include "llvm/Support/raw_ostream.h" 
#include "llvm/TextAPI/MachO/Target.h" 
 
namespace llvm { 
namespace MachO { 
 
Expected<Target> Target::create(StringRef TargetValue) { 
  auto Result = TargetValue.split('-'); 
  auto ArchitectureStr = Result.first; 
  auto Architecture = getArchitectureFromName(ArchitectureStr); 
  auto PlatformStr = Result.second; 
  PlatformKind Platform; 
  Platform = StringSwitch<PlatformKind>(PlatformStr) 
                 .Case("macos", PlatformKind::macOS) 
                 .Case("ios", PlatformKind::iOS) 
                 .Case("tvos", PlatformKind::tvOS) 
                 .Case("watchos", PlatformKind::watchOS) 
                 .Case("bridgeos", PlatformKind::bridgeOS) 
                 .Case("maccatalyst", PlatformKind::macCatalyst) 
                 .Case("ios-simulator", PlatformKind::iOSSimulator) 
                 .Case("tvos-simulator", PlatformKind::tvOSSimulator) 
                 .Case("watchos-simulator", PlatformKind::watchOSSimulator) 
                 .Case("driverkit", PlatformKind::driverKit)
                 .Default(PlatformKind::unknown); 
 
  if (Platform == PlatformKind::unknown) { 
    if (PlatformStr.startswith("<") && PlatformStr.endswith(">")) { 
      PlatformStr = PlatformStr.drop_front().drop_back(); 
      unsigned long long RawValue; 
      if (!PlatformStr.getAsInteger(10, RawValue)) 
        Platform = (PlatformKind)RawValue; 
    } 
  } 
 
  return Target{Architecture, Platform}; 
} 
 
Target::operator std::string() const { 
  return (getArchitectureName(Arch) + " (" + getPlatformName(Platform) + ")") 
      .str(); 
} 
 
raw_ostream &operator<<(raw_ostream &OS, const Target &Target) { 
  OS << std::string(Target); 
  return OS; 
} 
 
PlatformSet mapToPlatformSet(ArrayRef<Target> Targets) { 
  PlatformSet Result; 
  for (const auto &Target : Targets) 
    Result.insert(Target.Platform); 
  return Result; 
} 
 
ArchitectureSet mapToArchitectureSet(ArrayRef<Target> Targets) { 
  ArchitectureSet Result; 
  for (const auto &Target : Targets) 
    Result.set(Target.Arch); 
  return Result; 
} 
 
} // end namespace MachO. 
} // end namespace llvm.