Skip to content

Commit 6dd99ed

Browse files
authored
Merge pull request #9967 from owenv/owenv/sdk
[Swift Build] Forward --sdk overrides to the underlying run destination
2 parents 01c9f00 + e86408c commit 6dd99ed

5 files changed

Lines changed: 32 additions & 1 deletion

File tree

Sources/CoreCommands/SwiftCommandState.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,7 @@ public final class SwiftCommandState {
10061006
configuration: self.options.build.configuration ?? self.preferredBuildConfiguration,
10071007
toolchain: toolchain,
10081008
triple: triple,
1009+
sdkRootOverride: self.options.build.customCompileSDK ?? self.environment["SDKROOT"].flatMap({ try? AbsolutePath(validating: $0) }),
10091010
flags: options.build.buildFlags,
10101011
buildSystemKind: options.build.buildSystem,
10111012
pkgConfigDirectories: options.locations.pkgConfigDirectories,

Sources/SPMBuildCore/BuildParameters/BuildParameters.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public struct BuildParameters: Encodable {
6666
/// The triple for which the code is built using these build parameters.
6767
public var triple: Triple
6868

69+
/// If set, overrides the SDK root path.
70+
public var sdkRootOverride: Basics.AbsolutePath?
71+
6972
/// Extra build flags.
7073
public var flags: BuildFlags
7174

@@ -166,6 +169,7 @@ public struct BuildParameters: Encodable {
166169
configuration: BuildConfiguration,
167170
toolchain: Toolchain,
168171
triple: Triple? = nil,
172+
sdkRootOverride: Basics.AbsolutePath? = nil,
169173
flags: BuildFlags,
170174
buildSystemKind: BuildSystemProvider.Kind,
171175
pkgConfigDirectories: [Basics.AbsolutePath] = [],
@@ -203,6 +207,7 @@ public struct BuildParameters: Encodable {
203207
self.configuration = configuration
204208
self._toolchain = _Toolchain(toolchain: toolchain)
205209
self.triple = triple
210+
self.sdkRootOverride = sdkRootOverride
206211
self.buildSystemKind = buildSystemKind
207212
switch self.debuggingParameters.debugInfoFormat {
208213
case .dwarf, nil:

Sources/SwiftBuildSupport/SwiftBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
773773
return SwiftBuild.SWBRunDestinationInfo(
774774
buildTarget: .toolchainSDK(
775775
platform: buildTargetInfo.platformName,
776-
sdk: buildTargetInfo.sdkName,
776+
sdk: buildParameters.sdkRootOverride?.pathString ?? buildTargetInfo.sdkName,
777777
sdkVariant: buildTargetInfo.sdkVariant
778778
),
779779
targetArchitecture: buildParameters.triple.archName,

Sources/_InternalTestSupport/MockBuildTestHelper.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public func mockBuildParameters(
9898
shouldDisableLocalRpath: Bool = false,
9999
canRenameEntrypointFunctionName: Bool = false,
100100
triple: Basics.Triple = hostTriple,
101+
sdkRootOverride: AbsolutePath? = nil,
101102
indexStoreMode: BuildParameters.IndexStoreMode = .auto,
102103
linkerDeadStrip: Bool = true,
103104
linkTimeOptimizationMode: BuildParameters.LinkTimeOptimizationMode? = nil,
@@ -115,6 +116,7 @@ public func mockBuildParameters(
115116
configuration: config,
116117
toolchain: toolchain,
117118
triple: triple,
119+
sdkRootOverride: sdkRootOverride,
118120
flags: flags,
119121
buildSystemKind: buildSystemKind,
120122
pkgConfigDirectories: [],

Tests/SwiftBuildSupportTests/SwiftBuildSystemTests.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,4 +751,27 @@ struct SwiftBuildSystemTests {
751751
#expect(otherLDFlags.contains("$(OTHER_LDFLAGS_SWIFTC_LINKER_DRIVER_$(LINKER_DRIVER))"))
752752
}
753753
}
754+
755+
@Test
756+
func sdkRootOverrideIsSetInRunDestination() async throws {
757+
let sdkRoot = AbsolutePath("/fake/sdk/root")
758+
try await withInstantiatedSwiftBuildSystem(
759+
fromFixture: "PIFBuilder/Simple",
760+
buildParameters: mockBuildParameters(
761+
destination: .host,
762+
buildSystemKind: .swiftbuild,
763+
sdkRootOverride: sdkRoot,
764+
),
765+
) { swiftBuild, service, session, observabilityScope, buildParameters in
766+
let buildSettings = try await swiftBuild.makeBuildParameters(
767+
service: service,
768+
session: session,
769+
symbolGraphOptions: nil,
770+
setToolchainSetting: false,
771+
)
772+
773+
let runDestination = try #require(buildSettings.activeRunDestination)
774+
#expect(runDestination.sdk == sdkRoot.pathString)
775+
}
776+
}
754777
}

0 commit comments

Comments
 (0)