Skip to content

Commit 66545f8

Browse files
committed
Prevent unnecessary rebuilds when modifying swiftc arguments
Many arguments for the compiler are marked as `doesNotAffectIncrementalBuild` in `swift-driver`. Use the argument hashing in swift-driver to hash the swift compiler flags and incorporate that in to the build hash signature used to determine if SwiftPM should do a full rebuild. This prevents unnecssary rebuilds when adding or changing arguments like `-Xswiftc -diagnostic-style=llvm`. For a list of arguments that no longer affect rebuilds, search for `doesNotAffectIncrementalBuild` in https://github.com/swiftlang/swift-driver/blob/main/Sources/SwiftOptions/Options.swift. This builds on the work introduced in #8717 which avoided unnecessary rebuilds when SwiftPM arguments changed.
1 parent c28aeff commit 66545f8

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

Sources/Build/LLBuildCommands.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import Foundation
1515
import LLBuildManifest
1616
import SPMBuildCore
1717
import SPMLLBuild
18+
import PackageModel
19+
20+
import struct SwiftDriver.BuildRecordArguments
21+
import struct SwiftOptions.OptionTable
1822

1923
import class TSCBasic.LocalFileOutputByteStream
2024

@@ -426,13 +430,20 @@ final class PackageStructureCommand: CustomLLBuildCommand {
426430
/// For instance, building with or without `--verbose` should not cause a full rebuild.
427431
private func normalizeBuildParameters(
428432
_ buildParameters: BuildParameters
429-
) -> BuildParameters {
433+
) throws -> BuildParameters {
430434
var buildParameters = buildParameters
431435
buildParameters.outputParameters = BuildParameters.Output(
432436
isColorized: false,
433437
isVerbose: false
434438
)
435439
buildParameters.workers = 1
440+
441+
let optionTable = OptionTable()
442+
let parsedOptions = try optionTable.parse(Array(buildParameters.flags.swiftCompilerFlags), for: .batch)
443+
let buildRecordInfoHash = BuildRecordArguments.computeHash(parsedOptions)
444+
445+
buildParameters.flags.swiftCompilerFlags = [buildRecordInfoHash]
446+
436447
return buildParameters
437448
}
438449
}

0 commit comments

Comments
 (0)