@@ -1130,33 +1130,13 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
11301130
11311131 if (target) {
11321132 if (ModuleSP exe_module_sp = target->GetExecutableModule ()) {
1133- SymbolFile *sym_file = exe_module_sp->GetSymbolFile ();
1134- if (!sym_file)
1135- return ;
1136-
1137- XcodeSDK merged_sdk;
1138- for (unsigned i = 0 ; i < sym_file->GetNumCompileUnits (); ++i) {
1139- if (auto cu_sp = sym_file->GetCompileUnitAtIndex (i)) {
1140- auto cu_sdk = sym_file->ParseXcodeSDK (*cu_sp);
1141- merged_sdk.Merge (cu_sdk);
1142- }
1143- }
1144-
1145- // TODO: The result of this loop is almost equivalent to deriving the SDK
1146- // from the target triple, which would be a lot cheaper.
1147-
1148- if (FileSystem::Instance ().Exists (merged_sdk.GetSysroot ())) {
1149- sysroot_spec = merged_sdk.GetSysroot ();
1133+ auto path_or_err = ResolveSDKPathFromDebugInfo (*exe_module_sp);
1134+ if (path_or_err) {
1135+ sysroot_spec = FileSpec (*path_or_err);
11501136 } else {
1151- auto path_or_err =
1152- HostInfo::GetSDKRoot (HostInfo::SDKOptions{merged_sdk});
1153- if (path_or_err) {
1154- sysroot_spec = FileSpec (*path_or_err);
1155- } else {
1156- LLDB_LOG_ERROR (GetLog (LLDBLog::Types | LLDBLog::Host),
1157- path_or_err.takeError (),
1158- " Failed to resolve SDK path: {0}" );
1159- }
1137+ LLDB_LOG_ERROR (GetLog (LLDBLog::Types | LLDBLog::Host),
1138+ path_or_err.takeError (),
1139+ " Failed to resolve SDK path: {0}" );
11601140 }
11611141 }
11621142 }
@@ -1404,6 +1384,31 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
14041384 return std::pair{std::move (merged_sdk), found_mismatch};
14051385}
14061386
1387+ llvm::Expected<std::string>
1388+ PlatformDarwin::ResolveSDKPathFromDebugInfo (Module &module ) {
1389+ auto sdk_or_err = GetSDKPathFromDebugInfo (module );
1390+ if (!sdk_or_err)
1391+ return llvm::createStringError (
1392+ llvm::inconvertibleErrorCode (),
1393+ llvm::formatv (" Failed to parse SDK path from debug-info: {0}" ,
1394+ llvm::toString (sdk_or_err.takeError ())));
1395+
1396+ auto [sdk, _] = std::move (*sdk_or_err);
1397+
1398+ if (FileSystem::Instance ().Exists (sdk.GetSysroot ()))
1399+ return sdk.GetSysroot ().GetPath ();
1400+
1401+ auto path_or_err = HostInfo::GetSDKRoot (HostInfo::SDKOptions{sdk});
1402+ if (!path_or_err)
1403+ return llvm::createStringError (
1404+ llvm::inconvertibleErrorCode (),
1405+ llvm::formatv (" Error while searching for SDK (XcodeSDK '{0}'): {1}" ,
1406+ sdk.GetString (),
1407+ llvm::toString (path_or_err.takeError ())));
1408+
1409+ return path_or_err->str ();
1410+ }
1411+
14071412llvm::Expected<XcodeSDK>
14081413PlatformDarwin::GetSDKPathFromDebugInfo (CompileUnit &unit) {
14091414 ModuleSP module_sp = unit.CalculateSymbolContextModule ();
0 commit comments