summaryrefslogtreecommitdiffstats
path: root/llvm/lib/TextAPI/MachO/Target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/TextAPI/MachO/Target.cpp')
-rw-r--r--llvm/lib/TextAPI/MachO/Target.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/llvm/lib/TextAPI/MachO/Target.cpp b/llvm/lib/TextAPI/MachO/Target.cpp
index 3052aa53ac2..aee8ef42142 100644
--- a/llvm/lib/TextAPI/MachO/Target.cpp
+++ b/llvm/lib/TextAPI/MachO/Target.cpp
@@ -17,6 +17,36 @@
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)
+ .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();
@@ -42,4 +72,4 @@ ArchitectureSet mapToArchitectureSet(ArrayRef<Target> Targets) {
}
} // end namespace MachO.
-} // end namespace llvm. \ No newline at end of file
+} // end namespace llvm.
OpenPOWER on IntegriCloud