Skip to content

Commit 1dae563

Browse files
authored
Merge pull request #80915 from artemcm/AddSourceOnlyImportDeps
[Dependency Scanning] Add a field of source-imported dependencies
2 parents 6735659 + 7c5d8b2 commit 1dae563

12 files changed

+82
-0
lines changed

include/swift-c/DependencyScan/DependencyScan.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@ SWIFTSCAN_PUBLIC swiftscan_string_set_t *
212212
swiftscan_swift_textual_detail_get_swift_overlay_dependencies(
213213
swiftscan_module_details_t details);
214214

215+
SWIFTSCAN_PUBLIC swiftscan_string_set_t *
216+
swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies(
217+
swiftscan_module_details_t details);
218+
215219
SWIFTSCAN_PUBLIC swiftscan_string_ref_t
216220
swiftscan_swift_textual_detail_get_cas_fs_root_id(
217221
swiftscan_module_details_t details);

include/swift/DependencyScan/DependencyScanImpl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ typedef struct {
102102
/// Clang module dependencies
103103
swiftscan_string_set_t *swift_overlay_module_dependencies;
104104

105+
/// Directly-imported in source module dependencies
106+
swiftscan_string_set_t *source_import_module_dependencies;
107+
105108
/// Options to the compile command required to build this module interface
106109
swiftscan_string_set_t *command_line;
107110

lib/DependencyScan/DependencyScanJSON.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,9 @@ void writeJSON(llvm::raw_ostream &out,
424424
bool hasOverlayDependencies =
425425
swiftTextualDeps->swift_overlay_module_dependencies &&
426426
swiftTextualDeps->swift_overlay_module_dependencies->count > 0;
427+
bool hasSourceImportedDependencies =
428+
swiftTextualDeps->source_import_module_dependencies &&
429+
swiftTextualDeps->source_import_module_dependencies->count > 0;
427430
bool commaAfterBridgingHeaderPath = hasOverlayDependencies;
428431
bool commaAfterFramework =
429432
hasBridgingHeader || commaAfterBridgingHeaderPath;
@@ -448,6 +451,11 @@ void writeJSON(llvm::raw_ostream &out,
448451
/*trailingComma=*/true);
449452
writeMacroDependencies(out, swiftTextualDeps->macro_dependencies, 5,
450453
/*trailingComma=*/true);
454+
if (hasSourceImportedDependencies) {
455+
writeDependencies(out, swiftTextualDeps->source_import_module_dependencies,
456+
"sourceImportedDependencies", 5,
457+
/*trailingComma=*/true);
458+
}
451459
writeJSONSingleField(out, "isFramework", swiftTextualDeps->is_framework,
452460
5, commaAfterFramework);
453461
/// Bridging header and its source file dependencies, if any.

lib/DependencyScan/DependencyScanningTool.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ static swiftscan_dependency_graph_t generateHollowDiagnosticOutput(
222222
c_string_utils::create_empty_set(),
223223
c_string_utils::create_empty_set(),
224224
c_string_utils::create_empty_set(),
225+
c_string_utils::create_empty_set(),
225226
c_string_utils::create_null(),
226227
false,
227228
false,

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ generateFullDependencyGraph(const CompilerInstance &instance,
786786
swiftTextualDeps->textualModuleDetails.bridgingSourceFiles),
787787
create_set(clangHeaderDependencyNames),
788788
create_set(bridgedOverlayDependencyNames),
789+
/*sourceImportedDependencies*/ create_set({}),
789790
create_set(swiftTextualDeps->textualModuleDetails.buildCommandLine),
790791
/*bridgingHeaderBuildCommand*/ create_set({}),
791792
create_clone(swiftTextualDeps->contextHash.c_str()),
@@ -813,12 +814,25 @@ generateFullDependencyGraph(const CompilerInstance &instance,
813814
bridgeDependencyIDs(swiftSourceDeps->swiftOverlayDependencies,
814815
bridgedOverlayDependencyNames);
815816

817+
// Create a set of directly-source-imported dependencies
818+
std::vector<ModuleDependencyID> sourceImportDependencies;
819+
std::copy(swiftSourceDeps->importedSwiftModules.begin(),
820+
swiftSourceDeps->importedSwiftModules.end(),
821+
std::back_inserter(sourceImportDependencies));
822+
std::copy(swiftSourceDeps->importedClangModules.begin(),
823+
swiftSourceDeps->importedClangModules.end(),
824+
std::back_inserter(sourceImportDependencies));
825+
std::vector<std::string> bridgedSourceImportedDependencyNames;
826+
bridgeDependencyIDs(sourceImportDependencies,
827+
bridgedSourceImportedDependencyNames);
828+
816829
details->swift_textual_details = {
817830
moduleInterfacePath, create_empty_set(), bridgingHeaderPath,
818831
create_set(
819832
swiftSourceDeps->textualModuleDetails.bridgingSourceFiles),
820833
create_set(clangHeaderDependencyNames),
821834
create_set(bridgedOverlayDependencyNames),
835+
create_set(bridgedSourceImportedDependencyNames),
822836
create_set(swiftSourceDeps->textualModuleDetails.buildCommandLine),
823837
create_set(swiftSourceDeps->bridgingHeaderBuildCommandLine),
824838
/*contextHash*/

lib/Tooling/libSwiftScan/libSwiftScan.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ void swiftscan_dependency_info_details_dispose(
6161
details_impl->swift_textual_details.bridging_module_dependencies);
6262
swiftscan_string_set_dispose(
6363
details_impl->swift_textual_details.swift_overlay_module_dependencies);
64+
swiftscan_string_set_dispose(
65+
details_impl->swift_textual_details.source_import_module_dependencies);
6466
swiftscan_string_set_dispose(
6567
details_impl->swift_textual_details.command_line);
6668
swiftscan_string_dispose(details_impl->swift_textual_details.context_hash);
@@ -326,6 +328,11 @@ swiftscan_string_set_t *swiftscan_swift_textual_detail_get_swift_overlay_depende
326328
return details->swift_textual_details.swift_overlay_module_dependencies;
327329
}
328330

331+
swiftscan_string_set_t *swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies(
332+
swiftscan_module_details_t details) {
333+
return details->swift_textual_details.source_import_module_dependencies;
334+
}
335+
329336
swiftscan_string_ref_t swiftscan_swift_textual_detail_get_cas_fs_root_id(
330337
swiftscan_module_details_t details) {
331338
return details->swift_textual_details.cas_fs_root_id;

lib/Tooling/libSwiftScan/libSwiftScan.exports

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ swiftscan_swift_textual_detail_get_bridging_pch_command_line
2222
swiftscan_swift_textual_detail_get_context_hash
2323
swiftscan_swift_textual_detail_get_is_framework
2424
swiftscan_swift_textual_detail_get_swift_overlay_dependencies
25+
swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies
2526
swiftscan_swift_textual_detail_get_cas_fs_root_id
2627
swiftscan_swift_textual_detail_get_module_cache_key
2728
swiftscan_swift_textual_detail_get_user_module_version

test/ModuleInterface/clang-args-transitive-availability.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import ImportsMacroSpecificClangModule
1616
// CHECK-DAG: "swift": "Swift"
1717
// CHECK-DAG: "swift": "SwiftOnoneSupport"
1818

19+
// Additional occurence in source-imported dependencies field
20+
//CHECK: "swift": "ImportsMacroSpecificClangModule"
21+
1922
//CHECK: "swift": "ImportsMacroSpecificClangModule"
2023
//CHECK-NEXT: },
2124
//CHECK-NEXT: {

test/ModuleInterface/clang-session-transitive.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import TestModule
1616
// CHECK-DAG: "swift": "Swift"
1717
// CHECK-DAG: "swift": "SwiftOnoneSupport"
1818

19+
// Additional occurence in source-imported dependencies field
20+
// CHECK: "swift": "TestModule"
21+
1922
// CHECK: "swift": "TestModule"
2023
// CHECK-NEXT: },
2124
// CHECK-NEXT: {

test/ModuleInterface/extension-transitive-availability.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ func foo() {
1717
// CHECK-DAG: "swift": "Swift"
1818
// CHECK-DAG: "swift": "SwiftOnoneSupport"
1919

20+
// Additional occurence in source-imported dependencies field
21+
// CHECK: "swift": "ExtensionAvailable"
22+
2023
// CHECK: "swift": "ExtensionAvailable"
2124
// CHECK-NEXT: },
2225
// CHECK-NEXT: {

test/ScanDependencies/binary_framework_dependency.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,15 @@
1515

1616
import Foo
1717

18+
// Appears as a dependency of the main module
1819
// CHECK: "swiftPrebuiltExternal": "Foo"
20+
21+
// Appears as, specifically, a source-imported dependency of the main module
22+
// CHECK: "swiftPrebuiltExternal": "Foo"
23+
24+
// Actual node in the dependency graph for module 'Foo'
1925
// CHECK: "swiftPrebuiltExternal": "Foo"
26+
2027
// CHECK-NEXT: },
2128
// CHECK-NEXT: {
2229
// CHECK-NEXT: "modulePath":
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %empty-directory(%t/module-cache)
3+
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
4+
// Check the contents of the JSON output
5+
// RUN: %validate-json %t/deps.json | %FileCheck %s
6+
7+
// Ensure that round-trip serialization does not affect result
8+
// RUN: %target-swift-frontend -scan-dependencies -test-dependency-scan-cache-serialization -module-cache-path %t/module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
9+
// RUN: %validate-json %t/deps.json | %FileCheck %s
10+
11+
// REQUIRES: executable_test
12+
// REQUIRES: objc_interop
13+
14+
import C
15+
16+
// CHECK: "sourceImportedDependencies": [
17+
// CHECK-NEXT: {
18+
// CHECK-DAG: "swift": "Swift"
19+
// CHECK-DAG: "swift": "SwiftOnoneSupport"
20+
// CHECK-DAG: "clang": "C"
21+
// CHECK-NEXT: }
22+
// CHECK-NEXT: ]
23+
24+
// CHECK: "swiftOverlayDependencies": [
25+
// CHECK-NEXT: {
26+
// CHECK-NEXT: "swift": "A"
27+
// CHECK-NEXT: }
28+
// CHECK-NEXT: ]

0 commit comments

Comments
 (0)