Skip to content

Commit 57bfade

Browse files
authored
Try #986: --target musl
2 parents f5b4671 + 9ba59c0 commit 57bfade

17 files changed

+82
-59
lines changed

.changes/986.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "fixed",
3+
"description": "always link to libgcc with musl targets to patch missing rust compiler builtins.",
4+
"issues": [906, 985]
5+
}

docker/Dockerfile.aarch64-unknown-linux-musl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/aarch64-linux-musl
2020
COPY musl-symlink.sh /
2121
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT aarch64
2222

23-
COPY aarch64-linux-musl-gcc.sh /usr/bin/
23+
COPY musl-linker.sh /usr/bin/
2424

2525
COPY qemu-runner /
2626

27-
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc.sh \
27+
ENV CROSS_TARGET_LINKER=aarch64-linux-musl-gcc \
28+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2829
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner aarch64" \
2930
CC_aarch64_unknown_linux_musl=aarch64-linux-musl-gcc \
3031
CXX_aarch64_unknown_linux_musl=aarch64-linux-musl-g++ \

docker/Dockerfile.arm-unknown-linux-musleabi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/arm-linux-musleabi
2424
COPY musl-symlink.sh /
2525
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT arm
2626

27+
COPY musl-linker.sh /usr/bin/
28+
2729
COPY qemu-runner /
2830

29-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER=arm-linux-musleabi-gcc \
31+
ENV CROSS_TARGET_LINKER=arm-linux-musleabi-gcc \
32+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER=musl-linker.sh \
3033
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
3134
CC_arm_unknown_linux_musleabi=arm-linux-musleabi-gcc \
3235
CXX_arm_unknown_linux_musleabi=arm-linux-musleabi-g++ \

docker/Dockerfile.arm-unknown-linux-musleabihf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/arm-linux-musleabihf
2525
COPY musl-symlink.sh /
2626
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT armhf
2727

28+
COPY musl-linker.sh /usr/bin/
29+
2830
COPY qemu-runner /
2931

30-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER=arm-linux-musleabihf-gcc \
32+
ENV CROSS_TARGET_LINKER=arm-linux-musleabihf-gcc \
33+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER=musl-linker.sh \
3134
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner arm" \
3235
CC_arm_unknown_linux_musleabihf=arm-linux-musleabihf-gcc \
3336
CXX_arm_unknown_linux_musleabihf=arm-linux-musleabihf-g++ \

docker/Dockerfile.armv5te-unknown-linux-musleabi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/arm-linux-musleabi
2424
COPY musl-symlink.sh /
2525
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT arm
2626

27+
COPY musl-linker.sh /usr/bin/
28+
2729
COPY qemu-runner /
2830

29-
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER=arm-linux-musleabi-gcc \
31+
ENV CROSS_TARGET_LINKER=arm-linux-musleabi-gcc \
32+
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER=musl-linker.sh \
3033
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
3134
CC_armv5te_unknown_linux_musleabi=arm-linux-musleabi-gcc \
3235
CXX_armv5te_unknown_linux_musleabi=arm-linux-musleabi-g++ \

docker/Dockerfile.armv7-unknown-linux-musleabi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/arm-linux-musleabi
2525
COPY musl-symlink.sh /
2626
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT arm
2727

28+
COPY musl-linker.sh /usr/bin/
29+
2830
COPY qemu-runner /
2931

30-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER=arm-linux-musleabi-gcc \
32+
ENV CROSS_TARGET_LINKER=arm-linux-musleabi-gcc \
33+
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER=musl-linker.sh \
3134
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner armv7" \
3235
CC_armv7_unknown_linux_musleabi=arm-linux-musleabi-gcc \
3336
CXX_armv7_unknown_linux_musleabi=arm-linux-musleabi-g++ \

docker/Dockerfile.armv7-unknown-linux-musleabihf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/arm-linux-musleabihf
2525
COPY musl-symlink.sh /
2626
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT armhf
2727

28+
COPY musl-linker.sh /usr/bin/
29+
2830
COPY qemu-runner /
2931

30-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=arm-linux-musleabihf-gcc \
32+
ENV CROSS_TARGET_LINKER=arm-linux-musleabihf-gcc \
33+
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=musl-linker.sh \
3134
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armv7" \
3235
CC_armv7_unknown_linux_musleabihf=arm-linux-musleabihf-gcc \
3336
CXX_armv7_unknown_linux_musleabihf=arm-linux-musleabihf-g++ \

docker/Dockerfile.i586-unknown-linux-musl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/i586-linux-musl
2020
COPY musl-symlink.sh /
2121
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT i386
2222

23+
COPY musl-linker.sh /usr/bin/
24+
2325
COPY qemu-runner /
2426

25-
ENV CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER=i586-linux-musl-gcc \
27+
ENV CROSS_TARGET_LINKER=i586-linux-musl-gcc \
28+
CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2629
CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i586" \
2730
CC_i586_unknown_linux_musl=i586-linux-musl-gcc \
2831
CXX_i586_unknown_linux_musl=i586-linux-musl-g++ \

docker/Dockerfile.i686-unknown-linux-musl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/i686-linux-musl
2020
COPY musl-symlink.sh /
2121
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT i386
2222

23+
COPY musl-linker.sh /usr/bin/
24+
2325
COPY qemu-runner /
2426

25-
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER=i686-linux-musl-gcc \
27+
ENV CROSS_TARGET_LINKER=i686-linux-musl-gcc \
28+
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2629
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i686" \
2730
CC_i686_unknown_linux_musl=i686-linux-musl-gcc \
2831
CXX_i686_unknown_linux_musl=i686-linux-musl-g++ \

docker/Dockerfile.mips-unknown-linux-musl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/mips-linux-muslsf
2222
COPY musl-symlink.sh /
2323
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT mips-sf
2424

25+
COPY musl-linker.sh /usr/bin/
26+
2527
COPY qemu-runner /
2628

27-
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER=mips-linux-muslsf-gcc \
29+
ENV CROSS_TARGET_LINKER=mips-linux-muslsf-gcc \
30+
CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2831
CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner mips" \
2932
CC_mips_unknown_linux_musl=mips-linux-muslsf-gcc \
3033
CXX_mips_unknown_linux_musl=mips-linux-muslsf-g++ \

docker/Dockerfile.mips64-unknown-linux-muslabi64

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ RUN mkdir -p $CROSS_MUSL_SYSROOT/usr/lib64
2525
RUN ln -s $CROSS_MUSL_SYSROOT/usr/lib/libc.so $CROSS_MUSL_SYSROOT/usr/lib64/libc.so
2626
RUN ln -s $CROSS_MUSL_SYSROOT/usr/lib/libc.so.1 $CROSS_MUSL_SYSROOT/usr/lib64/libc.so.1
2727

28-
COPY mips64-linux-muslabi64-gcc.sh /usr/bin/
28+
COPY musl-linker.sh /usr/bin/
2929

3030
COPY qemu-runner /
3131

32-
ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_MUSLABI64_LINKER=mips64-linux-muslabi64-gcc.sh \
32+
ENV CROSS_TARGET_LINKER=mips64-linux-muslabi64-gcc \
33+
CARGO_TARGET_MIPS64_UNKNOWN_LINUX_MUSLABI64_LINKER=musl-linker.sh \
3334
CARGO_TARGET_MIPS64_UNKNOWN_LINUX_MUSLABI64_RUNNER="/qemu-runner mips64" \
3435
CC_mips64_unknown_linux_muslabi64=mips64-linux-musl-gcc \
3536
CXX_mips64_unknown_linux_muslabi64=mips64-linux-musl-g++ \

docker/Dockerfile.mips64el-unknown-linux-muslabi64

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT mips64el-sf
2323

2424
COPY qemu-runner /
2525

26-
ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_LINKER=mips64el-linux-muslsf-gcc \
26+
ENV CROSS_TARGET_LINKER=mips64el-linux-muslsf-gcc \
27+
CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_LINKER=musl-linker.sh \
2728
CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_RUNNER="/qemu-runner mips64el" \
2829
CC_mips64el_unknown_linux_muslabi64=mips64el-linux-muslsf-gcc \
2930
CXX_mips64el_unknown_linux_muslabi64=mips64el-linux-muslsf-g++ \

docker/Dockerfile.mipsel-unknown-linux-musl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/mipsel-linux-muslsf
2222
COPY musl-symlink.sh /
2323
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT mipsel-sf
2424

25+
COPY musl-linker.sh /usr/bin/
26+
2527
COPY qemu-runner /
2628

27-
ENV CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-linux-muslsf-gcc \
29+
ENV CROSS_TARGET_LINKER=mipsel-linux-muslsf-gcc \
30+
CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2831
CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner mipsel" \
2932
CC_mipsel_unknown_linux_musl=mipsel-linux-muslsf-gcc \
3033
CXX_mipsel_unknown_linux_musl=mipsel-linux-muslsf-g++ \

docker/Dockerfile.x86_64-unknown-linux-musl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ ENV CROSS_MUSL_SYSROOT=/usr/local/x86_64-linux-musl
2020
COPY musl-symlink.sh /
2121
RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT x86_64
2222

23+
COPY musl-linker.sh /usr/bin/
24+
2325
COPY qemu-runner /
2426

25-
ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=x86_64-linux-musl-gcc \
27+
ENV CROSS_TARGET_LINKER=x86_64-linux-musl-gcc \
28+
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-linker.sh \
2629
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner x86_64" \
2730
CC_x86_64_unknown_linux_musl=x86_64-linux-musl-gcc \
2831
CXX_x86_64_unknown_linux_musl=x86_64-linux-musl-g++ \

docker/aarch64-linux-musl-gcc.sh

Lines changed: 0 additions & 26 deletions
This file was deleted.

docker/mips64-linux-muslabi64-gcc.sh

Lines changed: 0 additions & 18 deletions
This file was deleted.

docker/musl-linker.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
# this fixes a series of issues affecting musl targets, with missing
4+
# instrinsics that are symbols present in libgcc but not in the compiler
5+
# builtins. this is therefore a temporary workaround until these
6+
# issues are fixed. example issues previously discovered are noted below:
7+
8+
# mips64-unknown-linux-musl
9+
# this linker wrapper works around issue https://github.com/rust-lang/rust/issues/46651
10+
# which affects toolchains older than 1.48
11+
# older toolchains require the `-lgcc` linker flag otherwise they fail to link
12+
13+
# mips64-unknown-linux-gnuabi64
14+
# this fixes an issue of missing symbols from the command lines
15+
# these soft-float routines are required even for hard-float targets.
16+
# (strtod.lo): undefined reference to symbol '__trunctfsf2@@GCC_3.0'
17+
18+
set -x
19+
set -euo pipefail
20+
21+
main() {
22+
if [[ $# -gt 0 ]]; then
23+
exec "${CROSS_TARGET_LINKER}" "${@}" -lgcc -static-libgcc
24+
else
25+
exec "${CROSS_TARGET_LINKER}" "${@}"
26+
fi
27+
}
28+
29+
main "${@}"

0 commit comments

Comments
 (0)