forked from OSchip/llvm-project
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>
This commit is contained in:
parent
7143d79254
commit
6e95d51ecf
|
@ -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 @@ public:
|
|||
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue