@@ -1130,13 +1130,33 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
11301130
11311131 if (target) {
11321132 if (ModuleSP exe_module_sp = target->GetExecutableModule ()) {
1133- auto path_or_err = ResolveSDKPathFromDebugInfo (*exe_module_sp);
1134- if (path_or_err) {
1135- sysroot_spec = FileSpec (*path_or_err);
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 ();
11361150 } else {
1137- LLDB_LOG_ERROR (GetLog (LLDBLog::Types | LLDBLog::Host),
1138- path_or_err.takeError (),
1139- " Failed to resolve SDK path: {0}" );
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+ }
11401160 }
11411161 }
11421162 }
@@ -1384,31 +1404,6 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
13841404 return std::pair{std::move (merged_sdk), found_mismatch};
13851405}
13861406
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-
14121407llvm::Expected<XcodeSDK>
14131408PlatformDarwin::GetSDKPathFromDebugInfo (CompileUnit &unit) {
14141409 ModuleSP module_sp = unit.CalculateSymbolContextModule ();
0 commit comments