1010//
1111// ===----------------------------------------------------------------------===//
1212
13+ #include " swift-c/DependencyScan/DependencyScan.h"
1314#include " swift/Basic/PrettyStackTrace.h"
1415
1516#include " swift/AST/ASTContext.h"
@@ -255,14 +256,6 @@ static llvm::Error resolveExplicitModuleInputs(
255256 : interfaceDepDetails->moduleCacheKey ;
256257 commandLine.push_back (" -swift-module-file=" + depModuleID.ModuleName + " =" +
257258 path);
258- // Add the exported macro from interface into current module.
259- llvm::for_each (
260- interfaceDepDetails->textualModuleDetails .macroDependencies ,
261- [&](const auto &entry) {
262- dependencyInfoCopy.addMacroDependency (entry.first (),
263- entry.second .LibraryPath ,
264- entry.second .ExecutablePath );
265- });
266259 } break ;
267260 case swift::ModuleDependencyKind::SwiftBinary: {
268261 auto binaryDepDetails = depInfo.getAsSwiftBinaryModule ();
@@ -281,7 +274,7 @@ static llvm::Error resolveExplicitModuleInputs(
281274 {bridgingHeaderDepName, ModuleDependencyKind::Clang});
282275 const auto bridgingHeaderDepModuleDetails =
283276 optionalBridgingHeaderDepModuleInfo.getAsClangModule ();
284- commandLine.push_back (" -Xcc" );
277+ commandLine.push_back (" -Xcc" );
285278 commandLine.push_back (
286279 " -fmodule-map-file=" +
287280 remapPath (bridgingHeaderDepModuleDetails->moduleMapFile ));
@@ -371,6 +364,10 @@ static llvm::Error resolveExplicitModuleInputs(
371364 llvm::for_each (
372365 textualDep->auxiliaryFiles ,
373366 [&tracker](const std::string &file) { tracker->trackFile (file); });
367+ llvm::for_each (textualDep->textualModuleDetails .macroDependencies ,
368+ [&tracker](const auto &entry) {
369+ tracker->trackFile (entry.second .LibraryPath );
370+ });
374371 auto root = tracker->createTreeFromDependencies ();
375372 if (!root)
376373 return root.takeError ();
@@ -591,6 +588,29 @@ static void bridgeDependencyIDs(const ArrayRef<ModuleDependencyID> dependencies,
591588 }
592589}
593590
591+
592+ static swiftscan_macro_dependency_set_t *createMacroDependencySet (
593+ const std::map<std::string, MacroPluginDependency> ¯oDeps) {
594+ swiftscan_macro_dependency_set_t *set = new swiftscan_macro_dependency_set_t ;
595+ if (macroDeps.empty ()) {
596+ set->count = 0 ;
597+ set->macro_dependencies = nullptr ;
598+ return set;
599+ }
600+ set->count = macroDeps.size ();
601+ set->macro_dependencies = new swiftscan_macro_dependency_t [set->count ];
602+ unsigned SI = 0 ;
603+ for (auto &entry : macroDeps) {
604+ set->macro_dependencies [SI] = new swiftscan_macro_dependency_s;
605+ set->macro_dependencies [SI]->moduleName = create_clone (entry.first .c_str ());
606+ set->macro_dependencies [SI]->libraryPath =
607+ create_clone (entry.second .LibraryPath .c_str ());
608+ set->macro_dependencies [SI]->executablePath =
609+ create_clone (entry.second .ExecutablePath .c_str ());
610+ }
611+ return set;
612+ }
613+
594614static swiftscan_dependency_graph_t
595615generateFullDependencyGraph (const CompilerInstance &instance,
596616 const DependencyScanDiagnosticCollector *diagnosticCollector,
@@ -680,7 +700,9 @@ generateFullDependencyGraph(const CompilerInstance &instance,
680700 .CASFileSystemRootID .c_str ()),
681701 create_clone (swiftTextualDeps->textualModuleDetails
682702 .CASBridgingHeaderIncludeTreeRootID .c_str ()),
683- create_clone (swiftTextualDeps->moduleCacheKey .c_str ())};
703+ create_clone (swiftTextualDeps->moduleCacheKey .c_str ()),
704+ createMacroDependencySet (
705+ swiftTextualDeps->textualModuleDetails .macroDependencies )};
684706 } else if (swiftSourceDeps) {
685707 swiftscan_string_ref_t moduleInterfacePath = create_null ();
686708 swiftscan_string_ref_t bridgingHeaderPath =
@@ -714,7 +736,9 @@ generateFullDependencyGraph(const CompilerInstance &instance,
714736 /* IncludeTree*/
715737 create_clone (swiftSourceDeps->textualModuleDetails
716738 .CASBridgingHeaderIncludeTreeRootID .c_str ()),
717- /* CacheKey*/ create_clone (" " )};
739+ /* CacheKey*/ create_clone (" " ),
740+ createMacroDependencySet (
741+ swiftSourceDeps->textualModuleDetails .macroDependencies )};
718742 } else if (swiftPlaceholderDeps) {
719743 details->kind = SWIFTSCAN_DEPENDENCY_INFO_SWIFT_PLACEHOLDER;
720744 details->swift_placeholder_details = {
0 commit comments