Skip to content

Commit fe6d63d

Browse files
committed
[Explicit Module Builds] Update the Inter Module Dependency graph to include placeholder dependencies
1 parent e59abb0 commit fe6d63d

File tree

1 file changed

+48
-10
lines changed

1 file changed

+48
-10
lines changed

Sources/SwiftDriver/Explicit Module Builds/InterModuleDependencyGraph.swift

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,22 @@ import Foundation
1414

1515
public enum ModuleDependencyId: Hashable {
1616
case swift(String)
17+
case swiftPlaceholder(String)
1718
case clang(String)
1819

19-
public var moduleName: String {
20+
var moduleName: String {
2021
switch self {
21-
case .swift(let name): return name
22-
case .clang(let name): return name
22+
case .swift(let name): return name
23+
case .swiftPlaceholder(let name): return name
24+
case .clang(let name): return name
2325
}
2426
}
2527
}
2628

2729
extension ModuleDependencyId: Codable {
2830
enum CodingKeys: CodingKey {
2931
case swift
32+
case swiftPlaceholder
3033
case clang
3134
}
3235

@@ -36,8 +39,13 @@ extension ModuleDependencyId: Codable {
3639
let moduleName = try container.decode(String.self, forKey: .swift)
3740
self = .swift(moduleName)
3841
} catch {
39-
let moduleName = try container.decode(String.self, forKey: .clang)
40-
self = .clang(moduleName)
42+
do {
43+
let moduleName = try container.decode(String.self, forKey: .swiftPlaceholder)
44+
self = .swiftPlaceholder(moduleName)
45+
} catch {
46+
let moduleName = try container.decode(String.self, forKey: .clang)
47+
self = .clang(moduleName)
48+
}
4149
}
4250
}
4351

@@ -46,12 +54,21 @@ extension ModuleDependencyId: Codable {
4654
switch self {
4755
case .swift(let moduleName):
4856
try container.encode(moduleName, forKey: .swift)
57+
case .swiftPlaceholder(let moduleName):
58+
try container.encode(moduleName, forKey: .swift)
4959
case .clang(let moduleName):
5060
try container.encode(moduleName, forKey: .clang)
5161
}
5262
}
5363
}
5464

65+
/// Bridging header
66+
public struct BridgingHeader: Codable {
67+
var path: String
68+
var sourceFiles: [String]
69+
var moduleDependencies: [String]
70+
}
71+
5572
/// Details specific to Swift modules.
5673
public struct SwiftModuleDetails: Codable {
5774
/// The module interface from which this module was built, if any.
@@ -75,7 +92,16 @@ public struct SwiftModuleDetails: Codable {
7592
/// To build a PCM to be used by this Swift module, we need to append these
7693
/// arguments to the generic PCM build arguments reported from the dependency
7794
/// graph.
78-
public var extraPcmArgs: [String]? = []
95+
var extraPcmArgs: [String]?
96+
}
97+
98+
/// Details specific to Swift external modules.
99+
public struct swiftPlaceholderModuleDetails: Codable {
100+
/// The path to the .swiftModuleDoc file.
101+
var moduleDocPath: String?
102+
103+
/// The path to the .swiftSourceInfo file.
104+
var moduleSourceInfoPath: String?
79105
}
80106

81107
/// Details specific to Clang modules.
@@ -95,10 +121,10 @@ public struct ModuleInfo: Codable {
95121
public var modulePath: String
96122

97123
/// The source files used to build this module.
98-
public var sourceFiles: [String] = []
124+
public var sourceFiles: [String]? = []
99125

100126
/// The set of direct module dependencies of this module.
101-
public var directDependencies: [ModuleDependencyId] = []
127+
public var directDependencies: [ModuleDependencyId]? = []
102128

103129
/// Specific details of a particular kind of module.
104130
public var details: Details
@@ -109,6 +135,10 @@ public struct ModuleInfo: Codable {
109135
/// a bridging header.
110136
case swift(SwiftModuleDetails)
111137

138+
/// Swift external modules carry additional details that specify their
139+
/// module doc path and source info paths.
140+
case swiftPlaceholder(swiftPlaceholderModuleDetails)
141+
112142
/// Clang modules are built from a module map file.
113143
case clang(ClangModuleDetails)
114144
}
@@ -117,6 +147,7 @@ public struct ModuleInfo: Codable {
117147
extension ModuleInfo.Details: Codable {
118148
enum CodingKeys: CodingKey {
119149
case swift
150+
case swiftPlaceholder
120151
case clang
121152
}
122153

@@ -126,8 +157,13 @@ extension ModuleInfo.Details: Codable {
126157
let details = try container.decode(SwiftModuleDetails.self, forKey: .swift)
127158
self = .swift(details)
128159
} catch {
129-
let details = try container.decode(ClangModuleDetails.self, forKey: .clang)
130-
self = .clang(details)
160+
do {
161+
let details = try container.decode(swiftPlaceholderModuleDetails.self, forKey: .swiftPlaceholder)
162+
self = .swiftPlaceholder(details)
163+
} catch {
164+
let details = try container.decode(ClangModuleDetails.self, forKey: .clang)
165+
self = .clang(details)
166+
}
131167
}
132168
}
133169

@@ -136,6 +172,8 @@ extension ModuleInfo.Details: Codable {
136172
switch self {
137173
case .swift(let details):
138174
try container.encode(details, forKey: .swift)
175+
case .swiftPlaceholder(let details):
176+
try container.encode(details, forKey: .swiftPlaceholder)
139177
case .clang(let details):
140178
try container.encode(details, forKey: .clang)
141179
}

0 commit comments

Comments
 (0)