Add a function to detect whether an Xcode SDK supports Swift

Differential Revision: https://reviews.llvm.org/D79535
This commit is contained in:
Adrian Prantl
2020-05-06 18:02:44 -07:00
parent 8c0ff17c3b
commit dec1c94e80
3 changed files with 35 additions and 0 deletions

View File

@@ -71,7 +71,10 @@ public:
llvm::VersionTuple GetVersion() const;
Type GetType() const;
llvm::StringRef GetString() const;
/// Whether this Xcode SDK supports Swift.
bool SupportsSwift() const;
/// Whether LLDB feels confident importing Clang modules from this SDK.
static bool SDKSupportsModules(Type type, llvm::VersionTuple version);
static bool SDKSupportsModules(Type desired_type, const FileSpec &sdk_path);
/// Return the canonical SDK name, such as "macosx" for the macOS SDK.

View File

@@ -181,6 +181,27 @@ bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type sdk_type,
return false;
}
bool XcodeSDK::SupportsSwift() const {
XcodeSDK::Info info = Parse();
switch (info.type) {
case Type::MacOSX:
return info.version.empty() || info.version >= llvm::VersionTuple(10, 10);
case Type::iPhoneOS:
case Type::iPhoneSimulator:
return info.version.empty() || info.version >= llvm::VersionTuple(8);
case Type::AppleTVSimulator:
case Type::AppleTVOS:
return info.version.empty() || info.version >= llvm::VersionTuple(9);
case Type::WatchSimulator:
case Type::watchOS:
return info.version.empty() || info.version >= llvm::VersionTuple(2);
case Type::Linux:
return true;
default:
return false;
}
}
bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type desired_type,
const FileSpec &sdk_path) {
ConstString last_path_component = sdk_path.GetLastPathComponent();

View File

@@ -86,6 +86,17 @@ TEST(XcodeSDKTest, SDKSupportsModules) {
}
#endif
TEST(XcodeSDKTest, SDKSupportsSwift) {
EXPECT_TRUE(XcodeSDK("iPhoneSimulator12.0.sdk").SupportsSwift());
EXPECT_TRUE(XcodeSDK("iPhoneSimulator12.0.Internal.sdk").SupportsSwift());
EXPECT_FALSE(XcodeSDK("iPhoneSimulator7.2.sdk").SupportsSwift());
EXPECT_TRUE(XcodeSDK("MacOSX10.10.sdk").SupportsSwift());
EXPECT_FALSE(XcodeSDK("MacOSX10.9.sdk").SupportsSwift());
EXPECT_TRUE(XcodeSDK("Linux.sdk").SupportsSwift());
EXPECT_TRUE(XcodeSDK("MacOSX.sdk").SupportsSwift());
EXPECT_FALSE(XcodeSDK("EverythingElse.sdk").SupportsSwift());
}
TEST(XcodeSDKTest, GetCanonicalName) {
XcodeSDK::Info info;
info.type = XcodeSDK::Type::MacOSX;