Skip to content

Commit a0721d8

Browse files
Merge #1125
1125: Always link to libc when compiling musl targets. r=Emilgardis a=Alexhuszagh This fixes a regression when changing musl targets to always statically link to libstdc++, and the static version of libstdc++ can reference but be missing requiring symbols from libc. Due to the linking order of Rust, these symbols sometimes are not resolved. This ensures that all binaries with external C++ dependencies cross-compiled for musl targets, such as `re2`, will be properly linked. Closes #1124. Co-authored-by: Alex Huszagh <[email protected]>
2 parents 9541e32 + 857096b commit a0721d8

14 files changed

+75
-15
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,10 @@
99
"description": "fixed C++ support for musl targets.",
1010
"issues": [902],
1111
"breaking": true
12+
},
13+
{
14+
"type": "fixed",
15+
"description": "always link to libc when compiling alpine since static libstdc++ may have undefined references to libc symbols.",
16+
"issues": [1124]
1217
}
1318
]

docker/Dockerfile.arm-unknown-linux-musleabi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT arm
2727

2828
COPY qemu-runner base-runner.sh /
2929

30-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
30+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31+
32+
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3133
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
3234
CC_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.arm-unknown-linux-musleabihf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32+
33+
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3234
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armhf" \
3335
CC_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.armv7-unknown-linux-musleabi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT arm
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32+
33+
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3234
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner armv7" \
3335
CC_armv7_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_armv7_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.armv7-unknown-linux-musleabihf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32+
33+
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3234
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armv7hf" \
3335
CC_armv7_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_armv7_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.i586-unknown-linux-musl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT i386
2323

2424
COPY qemu-runner base-runner.sh /
2525

26-
ENV CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
26+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
27+
28+
ENV CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
2729
CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i586" \
2830
CC_i586_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
2931
CXX_i586_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.i686-unknown-linux-musl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT i386
2323

2424
COPY qemu-runner base-runner.sh /
2525

26-
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
26+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
27+
28+
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
2729
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i686" \
2830
CC_i686_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
2931
CXX_i686_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.mips-unknown-linux-musl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT mips-sf
2727

2828
COPY qemu-runner base-runner.sh /
2929

30-
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
30+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31+
32+
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3133
CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner mips" \
3234
CC_mips_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_mips_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.mipsel-unknown-linux-musl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT mipsel-sf
2727

2828
COPY qemu-runner base-runner.sh /
2929

30-
ENV CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
30+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31+
32+
ENV CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3133
CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner mipsel" \
3234
CC_mipsel_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_mipsel_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \

docker/Dockerfile.x86_64-unknown-linux-musl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ RUN /musl-symlink.sh $CROSS_SYSROOT x86_64
2323

2424
COPY qemu-runner base-runner.sh /
2525

26-
ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
26+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
27+
28+
ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
2729
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner x86_64" \
2830
CC_x86_64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
2931
CXX_x86_64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \

0 commit comments

Comments
 (0)