Skip to content

Commit 79b38ba

Browse files
authored
Merge pull request #18083 from CodaFi/system-of-a-down
Add -track-system-dependencies Flag
2 parents cdc7fb4 + d845112 commit 79b38ba

File tree

10 files changed

+45
-13
lines changed

10 files changed

+45
-13
lines changed

include/swift/AST/ModuleLoader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class DependencyTracker {
4444
std::shared_ptr<clang::DependencyCollector> clangCollector;
4545
public:
4646

47-
DependencyTracker();
47+
explicit DependencyTracker(bool TrackSystemDeps);
4848

4949
/// Adds a file as a dependency.
5050
///

include/swift/ClangImporter/ClangImporter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class ClangImporter final : public ClangModuleLoader {
117117
/// \brief Create a new clang::DependencyCollector customized to
118118
/// ClangImporter's specific uses.
119119
static std::shared_ptr<clang::DependencyCollector>
120-
createDependencyCollector();
120+
createDependencyCollector(bool TrackSystemDeps);
121121

122122
/// \brief Check whether the module with a given name can be imported without
123123
/// importing it.

include/swift/Frontend/Frontend.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,9 +421,9 @@ class CompilerInstance {
421421
Diagnostics.addConsumer(*DC);
422422
}
423423

424-
void createDependencyTracker() {
424+
void createDependencyTracker(bool TrackSystemDeps) {
425425
assert(!Context && "must be called before setup()");
426-
DepTracker = llvm::make_unique<DependencyTracker>();
426+
DepTracker = llvm::make_unique<DependencyTracker>(TrackSystemDeps);
427427
}
428428
DependencyTracker *getDependencyTracker() { return DepTracker.get(); }
429429

include/swift/Frontend/FrontendOptions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,10 @@ class FrontendOptions {
243243
/// variables by name when we print it out. This eases diffing of SIL files.
244244
bool EmitSortedSIL = false;
245245

246+
/// Indices whether the dependency tracker should track system
247+
/// dependencies as well.
248+
bool TrackSystemDeps = false;
249+
246250
/// The different modes for validating TBD against the LLVM IR.
247251
enum class TBDValidationMode {
248252
Default, ///< Do the default validation for the current platform.

include/swift/Option/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ def profile_stats_entities: Flag<["-"], "profile-stats-entities">,
232232
def emit_dependencies : Flag<["-"], "emit-dependencies">,
233233
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>,
234234
HelpText<"Emit basic Make-compatible dependencies files">;
235+
def track_system_dependencies : Flag<["-"], "track-system-dependencies">,
236+
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>,
237+
HelpText<"Track system dependencies while emitting Make-style dependencies">;
235238

236239
def emit_loaded_module_trace : Flag<["-"], "emit-loaded-module-trace">,
237240
Flags<[FrontendOption, NoInteractiveOption]>,

lib/AST/ModuleLoader.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020

2121
namespace swift {
2222

23-
DependencyTracker::DependencyTracker()
23+
DependencyTracker::DependencyTracker(bool TrackSystemDeps)
2424
// NB: The ClangImporter believes it's responsible for the construction of
2525
// this instance, and it static_cast<>s the instance pointer to its own
2626
// subclass based on that belief. If you change this to be some other
2727
// instance, you will need to change ClangImporter's code to handle the
2828
// difference.
29-
: clangCollector(ClangImporter::createDependencyCollector())
29+
: clangCollector(ClangImporter::createDependencyCollector(TrackSystemDeps))
3030
{
3131
}
3232

lib/ClangImporter/ClangImporter.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,11 @@ class BridgingPPTracker : public clang::PPCallbacks {
318318
class ClangImporterDependencyCollector : public clang::DependencyCollector
319319
{
320320
llvm::StringSet<> ExcludedPaths;
321+
const bool TrackSystemDeps;
322+
321323
public:
322-
ClangImporterDependencyCollector() = default;
324+
ClangImporterDependencyCollector(bool TrackSystemDeps)
325+
: TrackSystemDeps(TrackSystemDeps) {}
323326

324327
void excludePath(StringRef filename) {
325328
ExcludedPaths.insert(filename);
@@ -331,9 +334,7 @@ class ClangImporterDependencyCollector : public clang::DependencyCollector
331334
|| Filename == ImporterImpl::bridgingHeaderBufferName);
332335
}
333336

334-
// Currently preserving older ClangImporter behavior of ignoring system
335-
// dependencies, but possibly revisit?
336-
bool needSystemDependencies() override { return false; }
337+
bool needSystemDependencies() override { return TrackSystemDeps; }
337338

338339
bool sawDependency(StringRef Filename, bool FromClangModule,
339340
bool IsSystem, bool IsClangModuleFile,
@@ -354,9 +355,9 @@ class ClangImporterDependencyCollector : public clang::DependencyCollector
354355
} // end anonymous namespace
355356

356357
std::shared_ptr<clang::DependencyCollector>
357-
ClangImporter::createDependencyCollector()
358+
ClangImporter::createDependencyCollector(bool TrackSystemDeps)
358359
{
359-
return std::make_shared<ClangImporterDependencyCollector>();
360+
return std::make_shared<ClangImporterDependencyCollector>(TrackSystemDeps);
360361
}
361362

362363
void ClangImporter::Implementation::addBridgeHeaderTopLevelDecls(

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ bool ArgsToFrontendOptionsConverter::convert(
7272
Opts.EnableTesting |= Args.hasArg(OPT_enable_testing);
7373
Opts.EnableResilience |= Args.hasArg(OPT_enable_resilience);
7474

75+
Opts.TrackSystemDeps |= Args.hasArg(OPT_track_system_dependencies);
76+
7577
computePrintStatsOptions();
7678
computeDebugTimeOptions();
7779
computeTBDOptions();

lib/FrontendTool/FrontendTool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1806,7 +1806,7 @@ int swift::performFrontend(ArrayRef<const char *> Args,
18061806
if (Invocation.getFrontendOptions()
18071807
.InputsAndOutputs.hasDependencyTrackerPath() ||
18081808
!Invocation.getFrontendOptions().IndexStorePath.empty())
1809-
Instance->createDependencyTracker();
1809+
Instance->createDependencyTracker(Invocation.getFrontendOptions().TrackSystemDeps);
18101810

18111811
if (Instance->setup(Invocation)) {
18121812
return finishDiagProcessing(1);

test/Frontend/dependencies.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
// CHECK-MULTIPLE-OUTPUTS-NOT: :
4040

4141
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -import-objc-header %S/Inputs/dependencies/extra-header.h -emit-dependencies-path - -resolve-imports %s | %FileCheck -check-prefix=CHECK-IMPORT %s
42+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -import-objc-header %S/Inputs/dependencies/extra-header.h -track-system-dependencies -emit-dependencies-path - -resolve-imports %s | %FileCheck -check-prefix=CHECK-IMPORT-TRACK-SYSTEM %s
4243
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -import-objc-header %S/Inputs/dependencies/extra-header.h -emit-reference-dependencies-path - -typecheck -primary-file %s | %FileCheck -check-prefix=CHECK-IMPORT-YAML %s
4344

4445
// CHECK-IMPORT-LABEL: - :
@@ -53,6 +54,27 @@
5354
// CHECK-IMPORT-DAG: CoreGraphics.swift
5455
// CHECK-IMPORT-NOT: :
5556

57+
// CHECK-IMPORT-TRACK-SYSTEM-LABEL: - :
58+
// CHECK-IMPORT-TRACK-SYSTEM: dependencies.swift
59+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: CoreFoundation.swift
60+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: CoreGraphics.swift
61+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: Foundation.swift
62+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: ObjectiveC.swift
63+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: Inputs/dependencies/$$$$$$$$$$.h
64+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: Inputs/dependencies/UserClangModule.h
65+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: Inputs/dependencies/extra-header.h
66+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: Inputs/dependencies/module.modulemap
67+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: swift/shims/module.modulemap
68+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/CoreFoundation.h
69+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/CoreGraphics.apinotes
70+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/CoreGraphics.h
71+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/Foundation.h
72+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/objc/NSObject.h
73+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/objc/ObjectiveC.apinotes
74+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/objc/module.map
75+
// CHECK-IMPORT-TRACK-SYSTEM-DAG: usr/include/objc/objc.h
76+
// CHECK-IMPORT-TRACK-SYSTEM-NOT: :
77+
5678
// CHECK-IMPORT-YAML-LABEL: depends-external:
5779
// CHECK-IMPORT-YAML-NOT: dependencies.swift
5880
// CHECK-IMPORT-YAML-DAG: "{{.*}}/Swift.swiftmodule"

0 commit comments

Comments
 (0)