Skip to content

Don't add Toolchain.toolchainLibDir to the list of directories SwiftPM links against #6767

Closed
@finagolfin

Description

@finagolfin

Description

I recently reorganized the Swift package for the Termux app, so that the Swift runtime libraries for the host are placed in <sysroot>/usr/lib/, not in <sysroot>/usr/lib/swift/android/. This caused issues when cross-compiling, because SwiftPM sets a toolchainLibDir relative to the Swift compiler, which is then used to search for libraries to link against.

This was added by Ankit in #2035 several years ago and is incorrect when cross-compiling, as most platforms don't use fat binaries that can all be placed in a single directory. I don't know why it was added, as I don't have access to that rdar.

This caused an issue for me as the linker would find the host runtime libraries for Swift in <sysroot>/usr/lib/ and complain, rather than using the ones in the cross-compilation SDK I provided. I've since reverted this library lookup in the Termux package for Swift, termux/termux-packages@222274616, and cross-compilation works well again.

This currently does not affect the official toolchains only because they place no Swift runtime libraries in <sysroot>/usr/lib/, placing everything in <sysroot>/usr/lib/swift/<os>/<arch>? instead. However, some distros have Swift packages and reorganize where they put things, and @etcwilde has said that he'd like to see them normalize where they place these Swift host runtime libraries, ie in <sysroot>/usr/lib/ instead. That will break cross-compilation with SwiftPM, as it has for me in Termux.

Expected behavior

Cross-compilation to only look in the SDK provided

Actual behavior

It looks in <sysroot>/usr/bin/swiftc/../../lib/ too.

Steps to reproduce

  1. Move the host runtime libraries to <sysroot>/usr/lib/.
  2. Try to cross-compile with another SDK.

Swift Package Manager version/commit hash

5.8

Swift & OS version (output of swift --version ; uname -a)

5.8
All ELF platforms, probably Windows too

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions