mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
On the Raspberry Pi 2 when trying to import Glibc, without this patch, it will attempt to find the module map at "/usr/lib/swift/linux/armv7l/glibc.modulemap" and fail to do so. With this patch it will attempt to find the module map at "/usr/lib/swift/linux/armv7/glibc.modulemap" where it will succeed in finding the module map. Similar behavior currently happens in the Driver and Frontend. To DRY up this behavior it has been extracted to the Swift platform.
123 lines
3.5 KiB
C++
123 lines
3.5 KiB
C++
//===--- Platform.cpp - Implement platform-related helpers ----------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "swift/Basic/Platform.h"
|
|
#include "llvm/ADT/Triple.h"
|
|
|
|
using namespace swift;
|
|
|
|
bool swift::tripleIsiOSSimulator(const llvm::Triple &triple) {
|
|
llvm::Triple::ArchType arch = triple.getArch();
|
|
return (triple.isiOS() &&
|
|
(arch == llvm::Triple::x86 || arch == llvm::Triple::x86_64));
|
|
}
|
|
|
|
bool swift::tripleIsAppleTVSimulator(const llvm::Triple &triple) {
|
|
llvm::Triple::ArchType arch = triple.getArch();
|
|
return (triple.isTvOS() &&
|
|
(arch == llvm::Triple::x86 || arch == llvm::Triple::x86_64));
|
|
}
|
|
|
|
bool swift::tripleIsWatchSimulator(const llvm::Triple &triple) {
|
|
llvm::Triple::ArchType arch = triple.getArch();
|
|
return (triple.isWatchOS() &&
|
|
(arch == llvm::Triple::x86 || arch == llvm::Triple::x86_64));
|
|
}
|
|
|
|
bool swift::tripleIsAnySimulator(const llvm::Triple &triple) {
|
|
return tripleIsiOSSimulator(triple) ||
|
|
tripleIsWatchSimulator(triple) ||
|
|
tripleIsAppleTVSimulator(triple);
|
|
}
|
|
|
|
DarwinPlatformKind swift::getDarwinPlatformKind(const llvm::Triple &triple) {
|
|
if (triple.isiOS()) {
|
|
if (triple.isTvOS()) {
|
|
if (tripleIsAppleTVSimulator(triple))
|
|
return DarwinPlatformKind::TvOSSimulator;
|
|
return DarwinPlatformKind::TvOS;
|
|
}
|
|
|
|
if (tripleIsiOSSimulator(triple))
|
|
return DarwinPlatformKind::IPhoneOSSimulator;
|
|
return DarwinPlatformKind::IPhoneOS;
|
|
}
|
|
|
|
if (triple.isWatchOS()) {
|
|
if (tripleIsWatchSimulator(triple))
|
|
return DarwinPlatformKind::WatchOSSimulator;
|
|
return DarwinPlatformKind::WatchOS;
|
|
}
|
|
|
|
if (triple.isMacOSX())
|
|
return DarwinPlatformKind::MacOS;
|
|
|
|
llvm_unreachable("Unsupported Darwin platform");
|
|
}
|
|
|
|
static StringRef getPlatformNameForDarwin(const DarwinPlatformKind platform) {
|
|
switch (platform) {
|
|
case DarwinPlatformKind::MacOS:
|
|
return "macosx";
|
|
case DarwinPlatformKind::IPhoneOS:
|
|
return "iphoneos";
|
|
case DarwinPlatformKind::IPhoneOSSimulator:
|
|
return "iphonesimulator";
|
|
case DarwinPlatformKind::TvOS:
|
|
return "appletvos";
|
|
case DarwinPlatformKind::TvOSSimulator:
|
|
return "appletvsimulator";
|
|
case DarwinPlatformKind::WatchOS:
|
|
return "watchos";
|
|
case DarwinPlatformKind::WatchOSSimulator:
|
|
return "watchsimulator";
|
|
}
|
|
llvm_unreachable("Unsupported Darwin platform");
|
|
}
|
|
|
|
StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) {
|
|
if (triple.isOSDarwin())
|
|
return getPlatformNameForDarwin(getDarwinPlatformKind(triple));
|
|
|
|
if (triple.isAndroid())
|
|
return "android";
|
|
|
|
if (triple.isOSLinux())
|
|
return "linux";
|
|
|
|
if (triple.isOSFreeBSD())
|
|
return "freebsd";
|
|
|
|
if (triple.isOSWindows())
|
|
return "windows";
|
|
|
|
return "";
|
|
}
|
|
|
|
StringRef swift::getMajorArchitectureName(const llvm::Triple &Triple) {
|
|
if (Triple.isOSLinux()) {
|
|
switch(Triple.getSubArch()) {
|
|
default:
|
|
return Triple.getArchName();
|
|
break;
|
|
case llvm::Triple::SubArchType::ARMSubArch_v7:
|
|
return "armv7";
|
|
break;
|
|
case llvm::Triple::SubArchType::ARMSubArch_v6:
|
|
return "armv6";
|
|
break;
|
|
}
|
|
} else {
|
|
return Triple.getArchName();
|
|
}
|
|
}
|