Description
Is it reproducible with SwiftPM command-line tools: swift build
, swift test
, swift package
etc?
- Confirmed reproduction steps with SwiftPM CLI. The description text must include reproduction steps with either of command-line SwiftPM commands,
swift build
,swift test
,swift package
etc.
Description
When a Swift SDK contains more than one triple, such as https://github.com/skiptools/swift-android-toolchain/releases/tag/6.1 whose swift-sdk.json
looks like:
swift-sdk.json
{
"schemaVersion": "4.0",
"targetTriples": {
"aarch64-unknown-linux-android24": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android24": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi24": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android25": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android25": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi25": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android26": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android26": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi26": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android27": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android27": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi27": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android28": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android28": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi28": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android29": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android29": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi29": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android30": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android30": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi30": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android31": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android31": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi31": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android32": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android32": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi32": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android33": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android33": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi33": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android34": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android34": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi34": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
},
"aarch64-unknown-linux-android35": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-aarch64",
"toolsetPaths": ["swift-toolset.json"]
},
"x86_64-unknown-linux-android35": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-x86_64",
"toolsetPaths": ["swift-toolset.json"]
},
"armv7-unknown-linux-androideabi35": {
"sdkRootPath": "android-27c-sysroot",
"swiftResourcesPath": "android-27c-sysroot/usr/lib/swift",
"swiftStaticResourcesPath": "android-27c-sysroot/usr/lib/swift_static-armv7",
"toolsetPaths": ["swift-toolset.json"]
}
}
}
Attempting to configure a property of one of the triples winds up configuring some other random triple from the SDK. E.g., swift sdk configure --sdk-root-path /some/sdk/root swift-6.1-RELEASE-android-24-0.1 aarch64-unknown-linux-android24
will wind up creating a swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android33.json
(or some other random triple) instead. See reproduction section for complete details.
I suspect that it might be because the call to configurationStore.updateConfiguration
does not set the targetTriple
and so the first one in the (random-order-keyed) dictionary will be picked.
In this particular scenario, it would actually be useful have an option of excluding the target triple and update the configuration for all the triples (since we would always want to set the sdkRoot to the same value), but that is orthogonal to this bug.
Expected behavior
The correct tripe should be configured rather than a random one.
Actual behavior
The configuration for a random triple is set in ~/Library/org.swift.swiftpm/swift-sdks/configuration/
rather than the one that was specified
Steps to reproduce
Install an SDK with more than one host triple, such as https://github.com/skiptools/swift-android-toolchain/releases/tag/6.1, and then try to update the aarch64-unknown-linux-android24
triple with the following commands, observing that some other random triple from swift-sdk.json
is updated instead:
$ SDK="swift-6.1-RELEASE-android-24-0.1"
$ TRIPLE="aarch64-unknown-linux-android24"
$ ls ~/Library/org.swift.swiftpm/swift-sdks/configuration/
$ swift sdk configure --sdk-root-path /some/sdk/root $SDK $TRIPLE
info: These properties of Swift SDK `swift-6.1-RELEASE-android-24-0.1` for target triple `aarch64-unknown-linux-android24` were successfully updated: sdkRootPath.
$ ls ~/Library/org.swift.swiftpm/swift-sdks/configuration/
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android33.json
$ swift sdk configure --sdk-root-path /some/sdk/root $SDK $TRIPLE
info: These properties of Swift SDK `swift-6.1-RELEASE-android-24-0.1` for target triple `aarch64-unknown-linux-android24` were successfully updated: sdkRootPath.
$ ls ~/Library/org.swift.swiftpm/swift-sdks/configuration/
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android26.json
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android33.json
$ swift sdk configure --sdk-root-path /some/sdk/root $SDK $TRIPLE
info: These properties of Swift SDK `swift-6.1-RELEASE-android-24-0.1` for target triple `aarch64-unknown-linux-android24` were successfully updated: sdkRootPath.
$ ls ~/Library/org.swift.swiftpm/swift-sdks/configuration/
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android26.json
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android31.json
swift-6.1-RELEASE-android-24-0.1_aarch64-unknown-linux-android33.json
Swift Package Manager version/commit hash
6.1
Swift & OS version (output of swift --version ; uname -a
)
swift-driver version: 1.120.5 Apple Swift version 6.1 (swiftlang-6.1.0.110.21 clang-1700.0.13.3)
Target: arm64-apple-macosx15.0
zsh: command not found: name
Metadata
Metadata
Assignees
Type
Projects
Status