Skip to content

Commit cdd560e

Browse files
authored
[lldb][XcodeSDK] Simplify logic that adjusts sysroot during XcodeSDK merging (#130640)
The `DW_AT_APPLE_sdk` should always be equal to the filename of the `DW_AT_LLVM_sysroot`. We can use this property to simplify `XcodeSDK::Merge` to no longer manually adjust the sysroot filename. Instead we simply update the sysroot filename with merged SDK name. This should be an NFC change.
1 parent 7ecb0d0 commit cdd560e

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

lldb/include/lldb/Utility/XcodeSDK.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ class XcodeSDK {
6565
/// parameter. For example, "MacOSX.10.14.sdk".
6666
XcodeSDK(std::string &&name) : m_name(std::move(name)) {}
6767
XcodeSDK(std::string name, FileSpec sysroot)
68-
: m_name(std::move(name)), m_sysroot(std::move(sysroot)) {}
68+
: m_name(std::move(name)), m_sysroot(std::move(sysroot)) {
69+
assert(!m_sysroot || m_name == m_sysroot.GetFilename().GetStringRef());
70+
}
6971
static XcodeSDK GetAnyMacOS() { return XcodeSDK("MacOSX.sdk"); }
7072

7173
/// The merge function follows a strict order to maintain monotonicity:

lldb/source/Utility/XcodeSDK.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,6 @@ bool XcodeSDK::Info::operator==(const Info &other) const {
155155
}
156156

157157
void XcodeSDK::Merge(const XcodeSDK &other) {
158-
auto add_internal_sdk_suffix = [](llvm::StringRef sdk) {
159-
return (sdk.substr(0, sdk.size() - 3) + "Internal.sdk").str();
160-
};
161-
162158
// The "bigger" SDK always wins.
163159
auto l = Parse();
164160
auto r = other.Parse();
@@ -168,12 +164,14 @@ void XcodeSDK::Merge(const XcodeSDK &other) {
168164
// The Internal flag always wins.
169165
if (!l.internal && r.internal) {
170166
if (llvm::StringRef(m_name).ends_with(".sdk"))
171-
m_name = add_internal_sdk_suffix(m_name);
172-
173-
if (m_sysroot.GetFileNameExtension() == ".sdk")
174-
m_sysroot.SetFilename(add_internal_sdk_suffix(m_sysroot.GetFilename()));
167+
m_name =
168+
m_name.substr(0, m_name.size() - 3) + std::string("Internal.sdk");
175169
}
176170
}
171+
172+
// We changed the SDK name. Adjust the sysroot accordingly.
173+
if (m_sysroot && m_sysroot.GetFilename().GetStringRef() != m_name)
174+
m_sysroot.SetFilename(m_name);
177175
}
178176

179177
std::string XcodeSDK::GetCanonicalName(XcodeSDK::Info info) {

lldb/unittests/Utility/XcodeSDKTest.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ TEST(XcodeSDKTest, MergeTest) {
6666
empty.Merge(XcodeSDK("MacOSX10.14.Internal.sdk"));
6767
EXPECT_EQ(empty.GetString(), llvm::StringRef("MacOSX10.14.Internal.sdk"));
6868
EXPECT_FALSE(empty.GetSysroot());
69-
empty.Merge(XcodeSDK("MacOSX9.5.Internal.sdk", FileSpec{"/Path/To/9.5.sdk"}));
69+
empty.Merge(XcodeSDK("MacOSX9.5.Internal.sdk",
70+
FileSpec{"/Path/To/MacOSX9.5.Internal.sdk"}));
7071
EXPECT_FALSE(empty.GetSysroot());
71-
empty.Merge(XcodeSDK("MacOSX12.5.sdk", FileSpec{"/Path/To/12.5.sdk"}));
72-
EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/12.5.sdk"});
72+
empty.Merge(XcodeSDK("MacOSX12.5.sdk", FileSpec{"/Path/To/MacOSX12.5.sdk"}));
73+
EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/MacOSX12.5.sdk"});
7374
empty.Merge(XcodeSDK("MacOSX11.5.Internal.sdk",
74-
FileSpec{"/Path/To/12.5.Internal.sdk"}));
75-
EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/12.5.Internal.sdk"});
75+
FileSpec{"/Path/To/MacOSX11.5.Internal.sdk"}));
76+
EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/MacOSX12.5.Internal.sdk"});
7677
}
7778

7879
#ifndef _WIN32

0 commit comments

Comments
 (0)