apple / swift-foundation

The Foundation project
Apache License 2.0
2.28k stars 135 forks source link

Correct rpaths in cmake files #686

Closed jmschonfeld closed 2 weeks ago

jmschonfeld commented 2 weeks ago

This fix ensures that FoundationEssentials/FoundationInternationalization/FoundationMacros do not have an rpath entry pointing into the build folder using a setting that we already use on the main branch of swift-corelibs-foundation today. Additionally, this adds $ORIGIN as an rpath for FoundationMacros.

Before this change, we had:

root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/linux/libFoundationEssentials.so | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: [/Repos/swift-dev/build/buildbot_linux/swift-linux-aarch64/lib/swift/linux:$ORIGIN]
root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/linux/libFoundationInternationalization.so | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: [/Repos/swift-dev/build/buildbot_linux/swift-linux-aarch64/lib/swift/linux:$ORIGIN]
root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/host/plugins/libFoundationMacros.so | grep RUNPATH       
 0x000000000000001d (RUNPATH)            Library runpath: [/Repos/swift-dev/build/buildbot_linux/swift-linux-aarch64/lib/swift/linux]

But with this change we now have:

root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/linux/libFoundationEssentials.so | grep RUNPATH                                                                                                 
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN]
root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/linux/libFoundationInternationalization.so | grep RUNPATH   
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN]
root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d swift-nightly-install/usr/lib/swift/host/plugins/libFoundationMacros.so | grep RUNPATH       
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN]

Which matches the rpath in the existing Swift toolchain:

root@swift-ci-ubuntu-22:/Repos/swift-dev/swift# readelf -d /opt/swift/5.8.1/usr/lib/swift/linux/libFoundation.so | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN]