Skip to content

swift sdk configure updates a random target triple rather than the specified one #8584

Open
@marcprux

Description

@marcprux

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.

var swiftSDK = swiftSDK
swiftSDK.pathsConfiguration = configuration
try configurationStore.updateConfiguration(sdkID: sdkID, swiftSDK: swiftSDK)

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

No one assigned

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions