Skip to content

Commit 0b53444

Browse files
committed
ci/release: Specify target and static linking of C runtime explicitly
Without specifying the target, `upload-rust-binary-action` uses the host target, which in case of Linux runners is `*-unknown-linux-gnu`. We are are interested in producing `*-musl` binaries, not `*-gnu`, since the latter does not support static linking of libc and C runtime and therefore: 1) It won't work distros using other libcs. 2) It won't work even on GNU distros with glibc older than the one used for build (glibc is forwards compatible, but not backwards compatible). Static `*-musl` binaries will work fine on all distros, including the ones with GNU userland. cargo-binstall falls back to downloading `*-musl` binaries even on `*-gnu` hosts if a `*-gnu` binary is not available[0]. On top of that, make sure that libc and C runtime are actually linked statically by specifying `-C target-feature=+crt-static` rustflag. As of today, that's still a default option on the most of `*-musl` targets[1][2], but it's being phased out in favor of dynamic linking being the default option.[3][4][5] [0] https://github.com/cargo-bins/cargo-binstall/blob/efd0e93316a9af26e9847b5090b5ab2419befad4/crates/detect-targets/src/detect/linux.rs#L78-L81 [1] https://github.com/rust-lang/rust/blob/672388edbee9e93c35e5fdf7dac818a6612a5103/compiler/rustc_target/src/spec/targets/x86_64_unknown_linux_musl.rs#L19-L20 [2] https://github.com/rust-lang/rust/blob/672388edbee9e93c35e5fdf7dac818a6612a5103/compiler/rustc_target/src/spec/targets/aarch64_unknown_linux_musl.rs#L17-L18 [3] rust-lang/compiler-team#422 [4] rust-lang/rust#133386 [5] rust-lang/rust#144513
1 parent 7862791 commit 0b53444

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

.github/workflows/release.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,15 @@ jobs:
5555
bin: bpf-linker
5656
features: llvm-21,llvm-link-static
5757
no-default-features: true
58+
target: ${{ matrix.platform.target }}
59+
# Use vanilla cargo instead of cross-rs, even though we specify
60+
# targets explicitly.
61+
build-tool: cargo
5862
dry-run: ${{ github.event_name != 'release' }}
5963
env:
6064
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65+
# Link libc and C runtime statically.
66+
RUSTFLAGS: -C target-feature=+crt-static
6167

6268
- name: Report disk usage
6369
if: ${{ always() }}

0 commit comments

Comments
 (0)