Skip to content

Commit 08ec878

Browse files
committed
[Dependency scanning] Emit make-style dependency files.
If requested, produce the normal make-style dependency file from the fast dependency scanner, using the same dependency-tracking infrastructure.
1 parent b19606c commit 08ec878

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

lib/FrontendTool/FrontendTool.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -923,10 +923,6 @@ static Optional<bool> dumpASTIfNeeded(const CompilerInvocation &Invocation,
923923
case FrontendOptions::ActionType::EmitImportedModules:
924924
emitImportedModules(Context, Instance.getMainModule(), opts);
925925
break;
926-
927-
case FrontendOptions::ActionType::ScanDependencies:
928-
scanDependencies(Context, Instance.getMainModule(), opts);
929-
break;
930926
}
931927
return Context.hadError();
932928
}
@@ -1270,10 +1266,16 @@ static bool performCompile(CompilerInstance &Instance,
12701266
if (Action == FrontendOptions::ActionType::Parse)
12711267
return Context.hadError();
12721268

1269+
if (Action == FrontendOptions::ActionType::ScanDependencies) {
1270+
scanDependencies(Context, Instance.getMainModule(),
1271+
Instance.getDependencyTracker(), opts);
1272+
}
1273+
12731274
(void)emitMakeDependenciesIfNeeded(Context.Diags,
12741275
Instance.getDependencyTracker(), opts);
12751276

1276-
if (Action == FrontendOptions::ActionType::ResolveImports)
1277+
if (Action == FrontendOptions::ActionType::ResolveImports ||
1278+
Action == FrontendOptions::ActionType::ScanDependencies)
12771279
return Context.hadError();
12781280

12791281
if (observer)

lib/FrontendTool/ScanDependencies.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ static void writeJSON(llvm::raw_ostream &out,
283283
}
284284

285285
bool swift::scanDependencies(ASTContext &Context, ModuleDecl *mainModule,
286+
DependencyTracker *depTracker,
286287
const FrontendOptions &opts) {
287288

288289
std::string path = opts.InputsAndOutputs.getSingleOutputFilename();
@@ -353,6 +354,29 @@ bool swift::scanDependencies(ASTContext &Context, ModuleDecl *mainModule,
353354
// Write out the JSON description.
354355
writeJSON(out, Context, cache, allModules.getArrayRef());
355356

357+
// Update the dependency tracker.
358+
if (depTracker) {
359+
for (auto module : allModules) {
360+
auto deps = cache.findDependencies(module.first, module.second);
361+
if (!deps)
362+
continue;
363+
364+
if (auto swiftDeps = deps->getAsSwiftModule()) {
365+
if (auto swiftInterfaceFile = swiftDeps->swiftInterfaceFile)
366+
depTracker->addDependency(*swiftInterfaceFile, /*IsSystem=*/false);
367+
for (const auto &sourceFile : swiftDeps->sourceFiles)
368+
depTracker->addDependency(sourceFile, /*IsSystem=*/false);
369+
for (const auto &bridgingSourceFile : swiftDeps->bridgingSourceFiles)
370+
depTracker->addDependency(bridgingSourceFile, /*IsSystem=*/false);
371+
} else {
372+
auto clangDeps = deps->getAsClangModule();
373+
depTracker->addDependency(clangDeps->moduleMapFile, /*IsSystem=*/false);
374+
for (const auto &sourceFile : clangDeps->fileDependencies)
375+
depTracker->addDependency(sourceFile, /*IsSystem=*/false);
376+
}
377+
}
378+
}
379+
356380
// This process succeeds regardless of whether any errors occurred.
357381
// FIXME: We shouldn't need this, but it's masking bugs in our scanning
358382
// logic where we don't create a fresh context when scanning Swift interfaces

lib/FrontendTool/ScanDependencies.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
namespace swift {
1717

1818
class ASTContext;
19+
class DependencyTracker;
1920
class FrontendOptions;
2021
class ModuleDecl;
2122

2223
/// Scans the dependencies of \c mainModule.
2324
bool scanDependencies(ASTContext &Context, ModuleDecl *mainModule,
25+
DependencyTracker *depTracker,
2426
const FrontendOptions &opts);
2527

2628
} // end namespace swift

test/ScanDependencies/module_deps.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// RUN: %empty-directory(%t)
22
// RUN: mkdir -p %t/clang-module-cache
3-
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/clang-module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift
3+
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/clang-module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift -emit-dependencies -emit-dependencies-path %t/deps.d
4+
45
// RUN: %FileCheck %s < %t/deps.json
6+
// RUN: %FileCheck %s -check-prefix CHECK-MAKE-DEPS < %t/deps.d
57

68
import C
79
import E
@@ -73,3 +75,11 @@ import E
7375

7476
/// --------Clang module SwiftShims
7577
// CHECK-LABEL: "modulePath": "SwiftShims.pcm",
78+
79+
80+
// Check make-style dependencies
81+
// CHECK-MAKE-DEPS: module_deps.swift
82+
// CHECK-MAKE-DEPS-SAME: Swift.swiftmodule
83+
// CHECK-MAKE-DEPS-SAME: A.swiftinterface
84+
// CHECK-MAKE-DEPS-SAME: B.h
85+
// CHECK-MAKE-DEPS-SAME: module.modulemap

0 commit comments

Comments
 (0)