@@ -1130,13 +1130,33 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
1130
1130
1131
1131
if (target) {
1132
1132
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 ();
1136
1150
} 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
+ }
1140
1160
}
1141
1161
}
1142
1162
}
@@ -1384,31 +1404,6 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
1384
1404
return std::pair{std::move (merged_sdk), found_mismatch};
1385
1405
}
1386
1406
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
-
1412
1407
llvm::Expected<XcodeSDK>
1413
1408
PlatformDarwin::GetSDKPathFromDebugInfo (CompileUnit &unit) {
1414
1409
ModuleSP module_sp = unit.CalculateSymbolContextModule ();
0 commit comments