mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 13:35:38 +08:00
Add a function to detect whether an Xcode SDK supports Swift
Differential Revision: https://reviews.llvm.org/D79535
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user