Skip to content

Commit 1ffb9ef

Browse files
authored
Merge pull request #6746 from compnerd/sdk-roots
2 parents a3f2b3d + 4bfbcfb commit 1ffb9ef

File tree

8 files changed

+52
-21
lines changed

8 files changed

+52
-21
lines changed

lldb/include/lldb/Host/HostInfoBase.h

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,23 @@ struct SharedCacheImageInfo {
3030
lldb::DataBufferSP data_sp;
3131
};
3232

33+
namespace {
34+
struct HostInfoError : public llvm::ErrorInfo<HostInfoError> {
35+
static char ID;
36+
const std::string message_;
37+
38+
HostInfoError(const std::string message) : message_(std::move(message)) {}
39+
40+
void log(llvm::raw_ostream &OS) const override { OS << "HostInfoError"; }
41+
42+
std::error_code convertToErrorCode() const override {
43+
return llvm::inconvertibleErrorCode();
44+
}
45+
};
46+
47+
char HostInfoError::ID = 0;
48+
} // namespace
49+
3350
class HostInfoBase {
3451
private:
3552
// Static class, unconstructable.
@@ -106,18 +123,14 @@ class HostInfoBase {
106123

107124
static FileSpec GetXcodeContentsDirectory() { return {}; }
108125
static FileSpec GetXcodeDeveloperDirectory() { return {}; }
109-
#ifdef LLDB_ENABLE_SWIFT
110-
static FileSpec GetSwiftResourceDir() { return {}; }
111-
static FileSpec GetSwiftResourceDir(llvm::Triple triple) { return {}; }
112-
static bool ComputeSwiftResourceDirectory(
113-
FileSpec &lldb_shlib_spec, FileSpec &file_spec, bool verify) {
114-
return false;
115-
}
116-
#endif
117-
118-
/// Return the directory containing a specific Xcode SDK.
119-
static llvm::Expected<llvm::StringRef> GetXcodeSDKPath(XcodeSDK sdk) {
120-
return "";
126+
127+
struct SDKOptions {
128+
std::optional<XcodeSDK> XcodeSDK;
129+
};
130+
131+
/// Return the directory containing something like a SDK (reused for Swift).
132+
static llvm::Expected<llvm::StringRef> GetSDKRoot(SDKOptions options) {
133+
return llvm::make_error<HostInfoError>("cannot determine SDK root");
121134
}
122135

123136
/// Return information about module \p image_name if it is loaded in
@@ -127,6 +140,15 @@ class HostInfoBase {
127140
return {};
128141
}
129142

143+
#ifdef LLDB_ENABLE_SWIFT
144+
static FileSpec GetSwiftResourceDir() { return {}; }
145+
static FileSpec GetSwiftResourceDir(llvm::Triple triple) { return {}; }
146+
static bool ComputeSwiftResourceDirectory(
147+
FileSpec &lldb_shlib_spec, FileSpec &file_spec, bool verify) {
148+
return false;
149+
}
150+
#endif
151+
130152
protected:
131153
static bool ComputeSharedLibraryDirectory(FileSpec &file_spec);
132154
static bool ComputeSupportExeDirectory(FileSpec &file_spec);

lldb/include/lldb/Host/macosx/HostInfoMacOSX.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class HostInfoMacOSX : public HostInfoPosix {
5252
#endif
5353

5454
/// Query xcrun to find an Xcode SDK directory.
55-
static llvm::Expected<llvm::StringRef> GetXcodeSDKPath(XcodeSDK sdk);
55+
static llvm::Expected<llvm::StringRef> GetSDKRoot(SDKOptions options);
5656

5757
/// Shared cache utilities
5858
static SharedCacheImageInfo

lldb/source/Core/Module.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,8 +1757,8 @@ Module::RemapSourceFile(llvm::StringRef path) const {
17571757

17581758
void Module::RegisterXcodeSDK(llvm::StringRef sdk_name,
17591759
llvm::StringRef sysroot) {
1760-
XcodeSDK sdk(sdk_name.str());
1761-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(sdk);
1760+
auto sdk_path_or_err =
1761+
HostInfo::GetSDKRoot(HostInfo::SDKOptions{sdk_name.str()});
17621762

17631763
if (!sdk_path_or_err) {
17641764
Debugger::ReportError("Error while searching for Xcode SDK: " +

lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {
337337
}
338338
}
339339

340-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(XcodeSDK::GetAnyMacOS());
340+
auto sdk_path_or_err =
341+
HostInfo::GetSDKRoot(SDKOptions{XcodeSDK::GetAnyMacOS()});
341342
if (!sdk_path_or_err) {
342343
Log *log = GetLog(LLDBLog::Host);
343344
LLDB_LOGF(log, "Error while searching for Xcode SDK: %s",
@@ -518,7 +519,7 @@ static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {
518519
return path;
519520
}
520521

521-
llvm::Expected<llvm::StringRef> HostInfoMacOSX::GetXcodeSDKPath(XcodeSDK sdk) {
522+
llvm::Expected<llvm::StringRef> HostInfoMacOSX::GetSDKRoot(SDKOptions options) {
522523
struct ErrorOrPath {
523524
std::string str;
524525
bool is_error;
@@ -529,6 +530,11 @@ static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {
529530
std::lock_guard<std::mutex> guard(g_sdk_path_mutex);
530531
LLDB_SCOPED_TIMER();
531532

533+
if (!options.XcodeSDK)
534+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
535+
"XCodeSDK not specified");
536+
XcodeSDK sdk = *options.XcodeSDK;
537+
532538
auto key = sdk.GetString();
533539
auto it = g_sdk_path.find(key);
534540
if (it != g_sdk_path.end()) {

lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,8 @@ static llvm::StringRef GetXcodeSDKDir(std::string preferred,
284284
std::string secondary) {
285285
llvm::StringRef sdk;
286286
auto get_sdk = [&](std::string sdk) -> llvm::StringRef {
287-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(XcodeSDK(std::move(sdk)));
287+
auto sdk_path_or_err =
288+
HostInfo::GetSDKRoot(HostInfo::SDKOptions{XcodeSDK(std::move(sdk))});
288289
if (!sdk_path_or_err) {
289290
Debugger::ReportError("Error while searching for Xcode SDK: " +
290291
toString(sdk_path_or_err.takeError()));

lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ ConstString PlatformMacOSX::GetSDKDirectory(lldb_private::Target &target) {
124124
}
125125

126126
// Use the default SDK as a fallback.
127-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(XcodeSDK::GetAnyMacOS());
127+
auto sdk_path_or_err =
128+
HostInfo::GetSDKRoot(HostInfo::SDKOptions{XcodeSDK::GetAnyMacOS()});
128129
if (!sdk_path_or_err) {
129130
Debugger::ReportError("Error while searching for Xcode SDK: " +
130131
toString(sdk_path_or_err.takeError()));

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,7 @@ static llvm::Optional<StringRef> GetDSYMBundle(Module &module) {
14171417
}
14181418

14191419
static std::string GetSDKPath(std::string m_description, XcodeSDK sdk) {
1420-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(sdk);
1420+
auto sdk_path_or_err = HostInfo::GetSDKRoot(HostInfo::SDKOptions{sdk});
14211421
if (!sdk_path_or_err) {
14221422
Debugger::ReportError("Error while searching for Xcode SDK: " +
14231423
toString(sdk_path_or_err.takeError()));

lldb/unittests/Host/HostInfoTest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ TEST_F(HostInfoTest, GetHostname) {
5757
#if defined(__APPLE__)
5858
TEST_F(HostInfoTest, GetXcodeSDK) {
5959
auto get_sdk = [](std::string sdk, bool error = false) -> llvm::StringRef {
60-
auto sdk_path_or_err = HostInfo::GetXcodeSDKPath(XcodeSDK(std::move(sdk)));
60+
auto sdk_path_or_err =
61+
HostInfo::GetSDKRoot(HostInfo::SDKOptions{XcodeSDK(std::move(sdk))});
6162
if (!error) {
6263
EXPECT_TRUE((bool)sdk_path_or_err);
6364
return *sdk_path_or_err;

0 commit comments

Comments
 (0)