diff --git a/projects/fermyon.com/spin/package.yml b/projects/fermyon.com/spin/package.yml index 63c53ed16a..12d7b44162 100644 --- a/projects/fermyon.com/spin/package.yml +++ b/projects/fermyon.com/spin/package.yml @@ -28,6 +28,22 @@ build: - ln -sf $HOME/.rustup/toolchains/*/bin/* . working-directory: $HOME/.cargo/bin + # rust 1.98.0 switched darwin's rust-lld/rust-objcopy from a statically linked + # LLVM to `@rpath/libLLVM.dylib`, but their only rpath is `@loader_path/../lib` + # -- ie lib/rustlib//lib -- and no component ships the dylib there; it + # lives at /lib/libLLVM.dylib. so every wasm32 link, which is what + # rust-lld is *for*, dies with `Library not loaded: @rpath/libLLVM.dylib`. + # linux is unaffected: there RUNPATH is `$ORIGIN/../../../:$ORIGIN/../lib`, + # ie it keeps the entry darwin lost. cf. rust-lang/rust#53813 and #76921. + - run: | + for bin in $HOME/.rustup/toolchains/*/lib/rustlib/*/bin; do + test -f "$bin/rust-lld" || continue + test -f "$bin/../../../libLLVM.dylib" || continue + mkdir -p "$bin/../lib" + ln -sf ../../../libLLVM.dylib "$bin/../lib/libLLVM.dylib" + done + if: darwin + - cargo install --locked --path . --root {{prefix}} env: PATH: $HOME/.cargo/bin:$PATH @@ -57,6 +73,22 @@ test: - ln -sf $HOME/.rustup/toolchains/*/bin/* . working-directory: $HOME/.cargo/bin + # rust 1.98.0 switched darwin's rust-lld/rust-objcopy from a statically linked + # LLVM to `@rpath/libLLVM.dylib`, but their only rpath is `@loader_path/../lib` + # -- ie lib/rustlib//lib -- and no component ships the dylib there; it + # lives at /lib/libLLVM.dylib. so every wasm32 link, which is what + # rust-lld is *for*, dies with `Library not loaded: @rpath/libLLVM.dylib`. + # linux is unaffected: there RUNPATH is `$ORIGIN/../../../:$ORIGIN/../lib`, + # ie it keeps the entry darwin lost. cf. rust-lang/rust#53813 and #76921. + - run: | + for bin in $HOME/.rustup/toolchains/*/lib/rustlib/*/bin; do + test -f "$bin/rust-lld" || continue + test -f "$bin/../../../libLLVM.dylib" || continue + mkdir -p "$bin/../lib" + ln -sf ../../../libLLVM.dylib "$bin/../lib/libLLVM.dylib" + done + if: darwin + - run: spin build working-directory: hello-rust env: