Skip to content

Commit 04e0ec6

Browse files
authored
Merge pull request #2781 from artemcm/ExperimentalExplicitModuleBuild
[Build] Add support for building targets in Explicit Module Build mode
2 parents fe05085 + 83f4c33 commit 04e0ec6

File tree

4 files changed

+20
-0
lines changed

4 files changed

+20
-0
lines changed

Sources/Build/ManifestBuilder.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@ extension LLBuildManifestBuilder {
203203
var commandLine = target.emitCommandLine();
204204
commandLine.append("-driver-use-frontend-path")
205205
commandLine.append(buildParameters.toolchain.swiftCompiler.pathString)
206+
if buildParameters.useExplicitModuleBuild {
207+
commandLine.append("-experimental-explicit-module-build")
208+
}
206209
var driver = try Driver(args: commandLine, fileSystem: target.fs)
207210
let jobs = try driver.planBuild()
208211
let resolver = try ArgsResolver(fileSystem: target.fs)

Sources/Commands/Options.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ public class ToolOptions {
9797
/// to a separate process.
9898
public var useIntegratedSwiftDriver: Bool = false
9999

100+
/// Whether to use the explicit module build flow (with the integrated driver)
101+
public var useExplicitModuleBuild: Bool = false
102+
100103
/// The build system to use.
101104
public var buildSystem: BuildSystemKind = .native
102105

Sources/Commands/SwiftTool.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,10 @@ public class SwiftTool<Options: ToolOptions> {
454454
option: parser.add(option: "--use-integrated-swift-driver", kind: Bool.self, usage: nil),
455455
to: { $0.useIntegratedSwiftDriver = $1 })
456456

457+
binder.bind(
458+
option: parser.add(option: "--experimental-explicit-module-build", kind: Bool.self, usage: nil),
459+
to: { $0.useExplicitModuleBuild = $1 })
460+
457461
binder.bind(
458462
option: parser.add(option: "--build-system", kind: BuildSystemKind.self, usage: nil),
459463
to: { $0.buildSystem = $1 })
@@ -538,6 +542,10 @@ public class SwiftTool<Options: ToolOptions> {
538542
if result.exists(arg: "--multiroot-data-file") {
539543
diagnostics.emit(.unsupportedFlag("--multiroot-data-file"))
540544
}
545+
if result.exists(arg: "--experimental-explicit-module-build") &&
546+
!result.exists(arg: "--use-integrated-swift-driver") {
547+
diagnostics.emit(error: "'--experimental-explicit-module-build' option requires '--use-integrated-swift-driver'")
548+
}
541549
}
542550

543551
class func defineArguments(parser: ArgumentParser, binder: ArgumentBinder<Options>) {
@@ -796,6 +804,7 @@ public class SwiftTool<Options: ToolOptions> {
796804
enableTestDiscovery: options.enableTestDiscovery,
797805
emitSwiftModuleSeparately: options.emitSwiftModuleSeparately,
798806
useIntegratedSwiftDriver: options.useIntegratedSwiftDriver,
807+
useExplicitModuleBuild: options.useExplicitModuleBuild,
799808
isXcodeBuildSystemEnabled: options.buildSystem == .xcode
800809
)
801810
})

Sources/SPMBuildCore/BuildParameters.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ public struct BuildParameters: Encodable {
8989
/// to a separate process.
9090
public var useIntegratedSwiftDriver: Bool
9191

92+
// Whether to use the explicit module build flow (with the integrated driver)
93+
public var useExplicitModuleBuild: Bool
94+
9295
/// Whether to create dylibs for dynamic library products.
9396
public var shouldCreateDylibForDynamicProducts: Bool
9497

@@ -135,6 +138,7 @@ public struct BuildParameters: Encodable {
135138
enableTestDiscovery: Bool = false,
136139
emitSwiftModuleSeparately: Bool = false,
137140
useIntegratedSwiftDriver: Bool = false,
141+
useExplicitModuleBuild: Bool = false,
138142
isXcodeBuildSystemEnabled: Bool = false
139143
) {
140144
self.dataPath = dataPath
@@ -155,6 +159,7 @@ public struct BuildParameters: Encodable {
155159
self.enableTestDiscovery = enableTestDiscovery
156160
self.emitSwiftModuleSeparately = emitSwiftModuleSeparately
157161
self.useIntegratedSwiftDriver = useIntegratedSwiftDriver
162+
self.useExplicitModuleBuild = useExplicitModuleBuild
158163
self.isXcodeBuildSystemEnabled = isXcodeBuildSystemEnabled
159164
}
160165

0 commit comments

Comments
 (0)