Author: Adrian Prantl Date: 2020-05-07T11:12:42-07:00 New Revision: 6e95d51ecfab0801b75448b20bd3447645a1142a
URL: https://github.com/llvm/llvm-project/commit/6e95d51ecfab0801b75448b20bd3447645a1142a DIFF: https://github.com/llvm/llvm-project/commit/6e95d51ecfab0801b75448b20bd3447645a1142a.diff LOG: Add an XcodeSDK::GetSDKTypeForTriple function This is something used in swift-lldb, but of general usefulness. Differential Revision: https://reviews.llvm.org/D79538 <rdar://problem/62684906> Added: Modified: lldb/include/lldb/Utility/XcodeSDK.h lldb/source/Utility/XcodeSDK.cpp lldb/unittests/Utility/XcodeSDKTest.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Utility/XcodeSDK.h b/lldb/include/lldb/Utility/XcodeSDK.h index 24ab5b1fdf7a..e5a0e0351d83 100644 --- a/lldb/include/lldb/Utility/XcodeSDK.h +++ b/lldb/include/lldb/Utility/XcodeSDK.h @@ -14,6 +14,10 @@ #include "llvm/Support/VersionTuple.h" #include <tuple> +namespace llvm { +class Triple; +} + namespace lldb_private { /// An abstraction for Xcode-style SDKs that works like \ref ArchSpec. @@ -72,6 +76,8 @@ class XcodeSDK { static bool SDKSupportsModules(Type desired_type, const FileSpec &sdk_path); /// Return the canonical SDK name, such as "macosx" for the macOS SDK. static std::string GetCanonicalName(Info info); + /// Return the best-matching SDK type for a specific triple. + static XcodeSDK::Type GetSDKTypeForTriple(const llvm::Triple &triple); }; } // namespace lldb_private diff --git a/lldb/source/Utility/XcodeSDK.cpp b/lldb/source/Utility/XcodeSDK.cpp index fc1fc32b059c..c6f2dda0b2b8 100644 --- a/lldb/source/Utility/XcodeSDK.cpp +++ b/lldb/source/Utility/XcodeSDK.cpp @@ -6,10 +6,13 @@ // //===----------------------------------------------------------------------===// -#include "lldb/Utility/FileSpec.h" #include "lldb/Utility/XcodeSDK.h" +#include "lldb/Utility/FileSpec.h" #include "lldb/lldb-types.h" + +#include "llvm/ADT/Triple.h" + #include <string> using namespace lldb; @@ -190,3 +193,33 @@ bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type desired_type, return false; return SDKSupportsModules(sdk.GetType(), sdk.GetVersion()); } + +XcodeSDK::Type XcodeSDK::GetSDKTypeForTriple(const llvm::Triple &triple) { + using namespace llvm; + switch (triple.getOS()) { + case Triple::MacOSX: + case Triple::Darwin: + return XcodeSDK::MacOSX; + case Triple::IOS: + switch (triple.getEnvironment()) { + case Triple::MacABI: + return XcodeSDK::MacOSX; + case Triple::Simulator: + return XcodeSDK::iPhoneSimulator; + default: + return XcodeSDK::iPhoneOS; + } + case Triple::TvOS: + if (triple.getEnvironment() == Triple::Simulator) + return XcodeSDK::AppleTVSimulator; + return XcodeSDK::AppleTVOS; + case Triple::WatchOS: + if (triple.getEnvironment() == Triple::Simulator) + return XcodeSDK::WatchSimulator; + return XcodeSDK::watchOS; + case Triple::Linux: + return XcodeSDK::Linux; + default: + return XcodeSDK::unknown; + } +} diff --git a/lldb/unittests/Utility/XcodeSDKTest.cpp b/lldb/unittests/Utility/XcodeSDKTest.cpp index 0cc353aa1ff7..e89eac2ef2f7 100644 --- a/lldb/unittests/Utility/XcodeSDKTest.cpp +++ b/lldb/unittests/Utility/XcodeSDKTest.cpp @@ -12,6 +12,7 @@ #include "lldb/Utility/XcodeSDK.h" #include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Triple.h" #include <tuple> @@ -147,3 +148,33 @@ TEST(XcodeSDKTest, GetCanonicalName) { info.version = llvm::VersionTuple(7, 0); EXPECT_EQ("iphoneos7.0.internal", XcodeSDK::GetCanonicalName(info)); } + +TEST(XcodeSDKTest, GetSDKTypeForTriple) { + EXPECT_EQ( + XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-macosx10.14")), + XcodeSDK::Type::MacOSX); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-darwin")), + XcodeSDK::Type::MacOSX); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple( + llvm::Triple("x86_64-apple-ios13.4-simulator")), + XcodeSDK::Type::iPhoneSimulator); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-ios13.4")), + XcodeSDK::Type::iPhoneOS); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple( + llvm::Triple("x86_64-apple-ios13.4-macabi")), + XcodeSDK::Type::MacOSX); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple( + llvm::Triple("x86_64-apple-tvos-simulator")), + XcodeSDK::Type::AppleTVSimulator); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-tvos")), + XcodeSDK::Type::AppleTVOS); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple( + llvm::Triple("x86_64-apple-watchos-simulator")), + XcodeSDK::Type::WatchSimulator); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-watchos")), + XcodeSDK::Type::watchOS); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-unknown-linux")), + XcodeSDK::Type::Linux); + EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("i386-unknown-netbsd")), + XcodeSDK::Type::unknown); +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits