diff --git a/lldb/bindings/interface/SBPlatform.i b/lldb/bindings/interface/SBPlatform.i --- a/lldb/bindings/interface/SBPlatform.i +++ b/lldb/bindings/interface/SBPlatform.i @@ -177,6 +177,9 @@ uint32_t GetOSUpdateVersion (); + void + SetSDKRoot(const char *sysroot); + lldb::SBError Get (lldb::SBFileSpec &src, lldb::SBFileSpec &dst); diff --git a/lldb/include/lldb/API/SBPlatform.h b/lldb/include/lldb/API/SBPlatform.h --- a/lldb/include/lldb/API/SBPlatform.h +++ b/lldb/include/lldb/API/SBPlatform.h @@ -137,6 +137,8 @@ uint32_t GetOSUpdateVersion(); + void SetSDKRoot(const char *sysroot); + SBError Put(SBFileSpec &src, SBFileSpec &dst); SBError Get(SBFileSpec &src, SBFileSpec &dst); diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -1533,18 +1533,9 @@ LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot, (const char *), sysroot); - Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); - if (m_opaque_sp) { - PlatformSP platform_sp( - m_opaque_sp->GetPlatformList().GetSelectedPlatform()); - - if (platform_sp) { - if (log && sysroot) - LLDB_LOGF(log, "SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")", - sysroot); - platform_sp->SetSDKRootDirectory(ConstString(sysroot)); - return true; - } + if (SBPlatform platform = GetSelectedPlatform()) { + platform.SetSDKRoot(sysroot); + return true; } return false; } diff --git a/lldb/source/API/SBPlatform.cpp b/lldb/source/API/SBPlatform.cpp --- a/lldb/source/API/SBPlatform.cpp +++ b/lldb/source/API/SBPlatform.cpp @@ -513,6 +513,12 @@ return version.getSubminor().getValueOr(UINT32_MAX); } +void SBPlatform::SetSDKRoot(const char *sysroot) { + LLDB_RECORD_METHOD(void, SBPlatform, SetSDKRoot, (const char *), sysroot); + if (PlatformSP platform_sp = GetSP()) + platform_sp->SetSDKRootDirectory(ConstString(sysroot)); +} + SBError SBPlatform::Get(SBFileSpec &src, SBFileSpec &dst) { LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Get, (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst); diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -428,6 +428,9 @@ strm.Printf(" Connected: %s\n", is_connected ? "yes" : "no"); } + if (GetSDKRootDirectory()) { + strm.Format(" Sysroot: {0}\n", GetSDKRootDirectory()); + } if (GetWorkingDirectory()) { strm.Printf("WorkingDir: %s\n", GetWorkingDirectory().GetCString()); } diff --git a/lldb/test/API/python_api/sbplatform/TestSBPlatform.py b/lldb/test/API/python_api/sbplatform/TestSBPlatform.py --- a/lldb/test/API/python_api/sbplatform/TestSBPlatform.py +++ b/lldb/test/API/python_api/sbplatform/TestSBPlatform.py @@ -20,3 +20,11 @@ cmd = lldb.SBPlatformShellCommand(self.getBuildArtifact("a.out")) self.assertTrue(plat.Run(cmd).Success()) self.assertIn("MY_TEST_ENV_VAR=SBPlatformAPICase.test_run", cmd.GetOutput()) + + def test_SetSDKRoot(self): + plat = lldb.SBPlatform("remote-linux") # arbitrary choice + self.assertTrue(plat) + plat.SetSDKRoot(self.getBuildDir()) + self.dbg.SetCurrentPlatform("remote-linux") + self.expect("platform status", + substrs=["Sysroot:", self.getBuildDir()])