[Dependency Scanning] Resolve cross-import overlays relative to defining interface for prebuilt binary Swift dependencies

When the dependency scanner picks a pre-built binary module candidate for a given dependency, it needs to be able to attempt to resolve its cross-import overlays relative to the textual interface that the binary module was built from. For example, if a collection of binary modules are located in, and resolved as dependencies from, a pre-built module directory, the scanner must lookup their corresponding cross-import overlays relative to the defining interface as read out from the binary module's MODULE_INTERFACE_PATH. https://github.com/swiftlang/swift/pull/70817 ensures that binary modules serialize the path to their defining textual interface.

Resolves rdar://130778577
This commit is contained in:
Artem Chikin
2024-07-02 15:50:55 -07:00
committed by artemcm
parent 1fde4c1267
commit 2464f87f8f
9 changed files with 134 additions and 27 deletions

View File

@@ -514,12 +514,12 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
if (!headerImport)
llvm::report_fatal_error("Bad binary direct dependencies: no header import");
// TODO: LinkLibraries
// TODO: LinkLibraries, DefiningModulePath
// Form the dependencies storage object
auto moduleDep = ModuleDependencyInfo::forSwiftBinaryModule(
*compiledModulePath, *moduleDocPath, *moduleSourceInfoPath,
currentModuleImports, currentOptionalModuleImports, {},
*headerImport, isFramework, isStatic, *moduleCacheKey);
*headerImport, "", isFramework, isStatic, *moduleCacheKey);
auto headerModuleDependencies = getStringArray(headerModuleDependenciesArrayID);
if (!headerModuleDependencies)