1010//
1111// ===----------------------------------------------------------------------===//
1212
13+ #include " swift-c/DependencyScan/DependencyScan.h"
1314#include " swift/Basic/PrettyStackTrace.h"
1415
1516#include " swift/AST/ASTContext.h"
@@ -256,14 +257,6 @@ static llvm::Error resolveExplicitModuleInputs(
256257 : interfaceDepDetails->moduleCacheKey ;
257258 commandLine.push_back (" -swift-module-file=" + depModuleID.ModuleName + " =" +
258259 path);
259- // Add the exported macro from interface into current module.
260- llvm::for_each (
261- interfaceDepDetails->textualModuleDetails .macroDependencies ,
262- [&](const auto &entry) {
263- dependencyInfoCopy.addMacroDependency (entry.first (),
264- entry.second .LibraryPath ,
265- entry.second .ExecutablePath );
266- });
267260 } break ;
268261 case swift::ModuleDependencyKind::SwiftBinary: {
269262 auto binaryDepDetails = depInfo.getAsSwiftBinaryModule ();
@@ -282,7 +275,7 @@ static llvm::Error resolveExplicitModuleInputs(
282275 {bridgingHeaderDepName, ModuleDependencyKind::Clang});
283276 const auto bridgingHeaderDepModuleDetails =
284277 optionalBridgingHeaderDepModuleInfo.getAsClangModule ();
285- commandLine.push_back (" -Xcc" );
278+ commandLine.push_back (" -Xcc" );
286279 commandLine.push_back (
287280 " -fmodule-map-file=" +
288281 remapPath (bridgingHeaderDepModuleDetails->moduleMapFile ));
@@ -372,6 +365,10 @@ static llvm::Error resolveExplicitModuleInputs(
372365 llvm::for_each (
373366 textualDep->auxiliaryFiles ,
374367 [&tracker](const std::string &file) { tracker->trackFile (file); });
368+ llvm::for_each (textualDep->textualModuleDetails .macroDependencies ,
369+ [&tracker](const auto &entry) {
370+ tracker->trackFile (entry.second .LibraryPath );
371+ });
375372 auto root = tracker->createTreeFromDependencies ();
376373 if (!root)
377374 return root.takeError ();
@@ -642,6 +639,28 @@ static swiftscan_diagnostic_set_t *mapCollectedDiagnosticsForOutput(
642639 return diagnosticOutput;
643640}
644641
642+ static swiftscan_macro_dependency_set_t *createMacroDependencySet (
643+ const std::map<std::string, MacroPluginDependency> ¯oDeps) {
644+ swiftscan_macro_dependency_set_t *set = new swiftscan_macro_dependency_set_t ;
645+ if (macroDeps.empty ()) {
646+ set->count = 0 ;
647+ set->macro_dependencies = nullptr ;
648+ return set;
649+ }
650+ set->count = macroDeps.size ();
651+ set->macro_dependencies = new swiftscan_macro_dependency_t [set->count ];
652+ unsigned SI = 0 ;
653+ for (auto &entry : macroDeps) {
654+ set->macro_dependencies [SI] = new swiftscan_macro_dependency_s;
655+ set->macro_dependencies [SI]->moduleName = create_clone (entry.first .c_str ());
656+ set->macro_dependencies [SI]->libraryPath =
657+ create_clone (entry.second .LibraryPath .c_str ());
658+ set->macro_dependencies [SI]->executablePath =
659+ create_clone (entry.second .ExecutablePath .c_str ());
660+ }
661+ return set;
662+ }
663+
645664static swiftscan_dependency_graph_t
646665generateFullDependencyGraph (const CompilerInstance &instance,
647666 const DependencyScanDiagnosticCollector *diagnosticCollector,
@@ -732,7 +751,9 @@ generateFullDependencyGraph(const CompilerInstance &instance,
732751 .CASFileSystemRootID .c_str ()),
733752 create_clone (swiftTextualDeps->textualModuleDetails
734753 .CASBridgingHeaderIncludeTreeRootID .c_str ()),
735- create_clone (swiftTextualDeps->moduleCacheKey .c_str ())};
754+ create_clone (swiftTextualDeps->moduleCacheKey .c_str ()),
755+ createMacroDependencySet (
756+ swiftTextualDeps->textualModuleDetails .macroDependencies )};
736757 } else if (swiftSourceDeps) {
737758 swiftscan_string_ref_t moduleInterfacePath = create_null ();
738759 swiftscan_string_ref_t bridgingHeaderPath =
@@ -767,7 +788,9 @@ generateFullDependencyGraph(const CompilerInstance &instance,
767788 /* IncludeTree*/
768789 create_clone (swiftSourceDeps->textualModuleDetails
769790 .CASBridgingHeaderIncludeTreeRootID .c_str ()),
770- /* CacheKey*/ create_clone (" " )};
791+ /* CacheKey*/ create_clone (" " ),
792+ createMacroDependencySet (
793+ swiftSourceDeps->textualModuleDetails .macroDependencies )};
771794 } else if (swiftPlaceholderDeps) {
772795 details->kind = SWIFTSCAN_DEPENDENCY_INFO_SWIFT_PLACEHOLDER;
773796 details->swift_placeholder_details = {
0 commit comments