Skip to content

Commit 281fb9c

Browse files
committed
Add SwiftBuild coverage support
Ensure the SwiftBuild build systam has feature parity with the Native build system as it relates to coverage. Fixes: #9077 Issue: rdar://159461439
1 parent ab60142 commit 281fb9c

File tree

6 files changed

+620
-455
lines changed

6 files changed

+620
-455
lines changed

Sources/Commands/SwiftTestCommand.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,6 @@ public struct SwiftTestCommand: AsyncSwiftCommand {
619619
}
620620
}
621621
args += ["-o", productsBuildParameters.codeCovDataFile.pathString]
622-
623622
try await AsyncProcess.checkNonZeroExit(arguments: args)
624623
}
625624

@@ -659,7 +658,7 @@ public struct SwiftTestCommand: AsyncSwiftCommand {
659658
productsBuildParameters: productsBuildParameters,
660659
toolsBuildParameters: toolsBuildParameters,
661660
testProduct: self.options.sharedOptions.testProduct,
662-
traitConfiguration: .init(traitOptions: self.globalOptions.traits)
661+
traitConfiguration: .init(traitOptions: self.globalOptions.traits),
663662
)
664663
}
665664

@@ -847,7 +846,7 @@ extension SwiftTestCommand {
847846
productsBuildParameters: productsBuildParameters,
848847
toolsBuildParameters: toolsBuildParameters,
849848
testProduct: self.sharedOptions.testProduct,
850-
traitConfiguration: .init(traitOptions: self.globalOptions.traits)
849+
traitConfiguration: .init(traitOptions: self.globalOptions.traits),
851850
)
852851
}
853852
}
@@ -1555,7 +1554,7 @@ private func buildTestsIfNeeded(
15551554
productsBuildParameters: BuildParameters,
15561555
toolsBuildParameters: BuildParameters,
15571556
testProduct: String?,
1558-
traitConfiguration: TraitConfiguration
1557+
traitConfiguration: TraitConfiguration,
15591558
) async throws -> [BuiltTestProduct] {
15601559
let buildSystem = try await swiftCommandState.createBuildSystem(
15611560
productsBuildParameters: productsBuildParameters,
@@ -1567,7 +1566,6 @@ private func buildTestsIfNeeded(
15671566
} else {
15681567
.allIncludingTests
15691568
}
1570-
15711569
try await buildSystem.build(subset: subset, buildOutputs: [])
15721570

15731571
// Find the test product.

Sources/SPMBuildCore/BuildSystem/BuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public enum BuildSubset {
4040
/// result for indication that the output was produced.
4141
public enum BuildOutput: Equatable {
4242
public static func == (lhs: BuildOutput, rhs: BuildOutput) -> Bool {
43-
switch lhs {
43+
switch lhs {
4444
case .symbolGraph(let leftOptions):
4545
switch rhs {
4646
case .symbolGraph(let rightOptions):

Sources/SwiftBuildSupport/SwiftBuildSystem.swift

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
371371
private func startSWBuildOperation(
372372
pifTargetName: String,
373373
symbolGraphOptions: BuildOutput.SymbolGraphOptions?,
374-
generateReplArguments: Bool
374+
generateReplArguments: Bool,
375375
) async throws -> BuildResult {
376376
let buildStartTime = ContinuousClock.Instant.now
377377
var replArguments: CLIArguments?
@@ -423,7 +423,12 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
423423
throw error
424424
}
425425

426-
let request = try await self.makeBuildRequest(session: session, configuredTargets: configuredTargets, derivedDataPath: derivedDataPath, symbolGraphOptions: symbolGraphOptions)
426+
let request = try await self.makeBuildRequest(
427+
session: session,
428+
configuredTargets: configuredTargets,
429+
derivedDataPath: derivedDataPath,
430+
symbolGraphOptions: symbolGraphOptions,
431+
)
427432

428433
struct BuildState {
429434
private var targetsByID: [Int: SwiftBuild.SwiftBuildMessage.TargetStartedInfo] = [:]
@@ -641,7 +646,10 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
641646
)
642647
}
643648

644-
private func makeBuildParameters(session: SWBBuildServiceSession, symbolGraphOptions: BuildOutput.SymbolGraphOptions?) async throws -> SwiftBuild.SWBBuildParameters {
649+
private func makeBuildParameters(
650+
session: SWBBuildServiceSession,
651+
symbolGraphOptions: BuildOutput.SymbolGraphOptions?,
652+
) async throws -> SwiftBuild.SWBBuildParameters {
645653
// Generate the run destination parameters.
646654
let runDestination = makeRunDestination()
647655

@@ -784,9 +792,17 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
784792
return params
785793
}
786794

787-
public func makeBuildRequest(session: SWBBuildServiceSession, configuredTargets: [SWBTargetGUID], derivedDataPath: Basics.AbsolutePath, symbolGraphOptions: BuildOutput.SymbolGraphOptions?) async throws -> SWBBuildRequest {
795+
public func makeBuildRequest(
796+
session: SWBBuildServiceSession,
797+
configuredTargets: [SWBTargetGUID],
798+
derivedDataPath: Basics.AbsolutePath,
799+
symbolGraphOptions: BuildOutput.SymbolGraphOptions?,
800+
) async throws -> SWBBuildRequest {
788801
var request = SWBBuildRequest()
789-
request.parameters = try await makeBuildParameters(session: session, symbolGraphOptions: symbolGraphOptions)
802+
request.parameters = try await makeBuildParameters(
803+
session: session,
804+
symbolGraphOptions: symbolGraphOptions,
805+
)
790806
request.configuredTargets = configuredTargets.map { SWBConfiguredTarget(guid: $0.rawValue, parameters: request.parameters) }
791807
request.useParallelTargets = true
792808
request.useImplicitDependencies = false
@@ -879,8 +895,8 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
879895

880896
private static func constructTestingSettingsOverrides(from parameters: BuildParameters.Testing) -> [String: String] {
881897
var settings: [String: String] = [:]
882-
// TODO: enableCodeCoverage
883-
// explicitlyEnabledTestability
898+
899+
settings["CLANG_COVERAGE_MAPPING"] = parameters.enableCodeCoverage ? "YES" : "NO"
884900

885901
switch parameters.explicitlyEnabledTestability {
886902
case true:

0 commit comments

Comments
 (0)