@@ -351,11 +351,14 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
351
351
352
352
try await writePIF ( buildParameters: buildParameters)
353
353
354
+ var shouldBuildWithCoverage = false
354
355
var symbolGraphOptions : BuildOutput . SymbolGraphOptions ?
355
356
for output in buildOutputs {
356
357
switch output {
357
358
case . symbolGraph( let options) :
358
359
symbolGraphOptions = options
360
+ case . coverage:
361
+ shouldBuildWithCoverage = true
359
362
default :
360
363
continue
361
364
}
@@ -365,13 +368,15 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
365
368
pifTargetName: subset. pifTargetName,
366
369
symbolGraphOptions: symbolGraphOptions,
367
370
generateReplArguments: buildOutputs. contains ( . replArguments) ,
371
+ buildWithCoverage: shouldBuildWithCoverage,
368
372
)
369
373
}
370
374
371
375
private func startSWBuildOperation(
372
376
pifTargetName: String ,
373
377
symbolGraphOptions: BuildOutput . SymbolGraphOptions ? ,
374
- generateReplArguments: Bool
378
+ generateReplArguments: Bool ,
379
+ buildWithCoverage: Bool ,
375
380
) async throws -> BuildResult {
376
381
let buildStartTime = ContinuousClock . Instant. now
377
382
var replArguments : CLIArguments ?
@@ -423,7 +428,13 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
423
428
throw error
424
429
}
425
430
426
- let request = try await self . makeBuildRequest ( session: session, configuredTargets: configuredTargets, derivedDataPath: derivedDataPath, symbolGraphOptions: symbolGraphOptions)
431
+ let request = try await self . makeBuildRequest (
432
+ session: session,
433
+ configuredTargets: configuredTargets,
434
+ derivedDataPath: derivedDataPath,
435
+ symbolGraphOptions: symbolGraphOptions,
436
+ buildWithCoverage: buildWithCoverage,
437
+ )
427
438
428
439
struct BuildState {
429
440
private var targetsByID : [ Int : SwiftBuild . SwiftBuildMessage . TargetStartedInfo ] = [ : ]
@@ -641,7 +652,11 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
641
652
)
642
653
}
643
654
644
- private func makeBuildParameters( session: SWBBuildServiceSession , symbolGraphOptions: BuildOutput . SymbolGraphOptions ? ) async throws -> SwiftBuild . SWBBuildParameters {
655
+ private func makeBuildParameters(
656
+ session: SWBBuildServiceSession ,
657
+ symbolGraphOptions: BuildOutput . SymbolGraphOptions ? ,
658
+ buildWithCoverage: Bool ,
659
+ ) async throws -> SwiftBuild . SWBBuildParameters {
645
660
// Generate the run destination parameters.
646
661
let runDestination = makeRunDestination ( )
647
662
@@ -666,6 +681,10 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
666
681
settings [ " SWIFT_EXEC " ] = buildParameters. toolchain. swiftCompilerPath. pathString
667
682
}
668
683
684
+ if buildWithCoverage {
685
+ settings [ " CLANG_COVERAGE_MAPPING " ] = " YES "
686
+ }
687
+
669
688
// FIXME: workaround for old Xcode installations such as what is in CI
670
689
settings [ " LM_SKIP_METADATA_EXTRACTION " ] = " YES "
671
690
if let symbolGraphOptions {
@@ -781,9 +800,19 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
781
800
return params
782
801
}
783
802
784
- public func makeBuildRequest( session: SWBBuildServiceSession , configuredTargets: [ SWBTargetGUID ] , derivedDataPath: Basics . AbsolutePath , symbolGraphOptions: BuildOutput . SymbolGraphOptions ? ) async throws -> SWBBuildRequest {
803
+ public func makeBuildRequest(
804
+ session: SWBBuildServiceSession ,
805
+ configuredTargets: [ SWBTargetGUID ] ,
806
+ derivedDataPath: Basics . AbsolutePath ,
807
+ symbolGraphOptions: BuildOutput . SymbolGraphOptions ? ,
808
+ buildWithCoverage: Bool ,
809
+ ) async throws -> SWBBuildRequest {
785
810
var request = SWBBuildRequest ( )
786
- request. parameters = try await makeBuildParameters ( session: session, symbolGraphOptions: symbolGraphOptions)
811
+ request. parameters = try await makeBuildParameters (
812
+ session: session,
813
+ symbolGraphOptions: symbolGraphOptions,
814
+ buildWithCoverage: buildWithCoverage,
815
+ )
787
816
request. configuredTargets = configuredTargets. map { SWBConfiguredTarget ( guid: $0. rawValue, parameters: request. parameters) }
788
817
request. useParallelTargets = true
789
818
request. useImplicitDependencies = false
0 commit comments