Skip to content

Commit 1b11825

Browse files
committed
Use musl 1.1.24 for 32 bit targets
There are issues around time64 and similar types. See: - cross-rs/cross#478 - rust-lang/libc#1848
1 parent 52c99be commit 1b11825

File tree

4 files changed

+87
-13
lines changed

4 files changed

+87
-13
lines changed

.github/workflows/Build.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,40 @@ jobs:
1616
- IMAGE_TAG: aarch64-musl
1717
TARGET: aarch64-unknown-linux-musl
1818
OPENSSL_ARCH: linux-aarch64
19+
RUST_MUSL_MAKE_CONFIG: config.mak
1920
- IMAGE_TAG: arm-musleabi
2021
TARGET: arm-unknown-linux-musleabi
2122
OPENSSL_ARCH: linux-generic32
23+
RUST_MUSL_MAKE_CONFIG: config.mak.32
2224
- IMAGE_TAG: arm-musleabihf
2325
TARGET: arm-unknown-linux-musleabihf
26+
RUST_MUSL_MAKE_CONFIG: config.mak.32
2427
OPENSSL_ARCH: linux-generic32
2528
- IMAGE_TAG: armv5te-musleabi
2629
TARGET: armv5te-unknown-linux-musleabi
2730
OPENSSL_ARCH: linux-generic32
31+
RUST_MUSL_MAKE_CONFIG: config.mak.32
2832
- IMAGE_TAG: armv7-musleabi
2933
TARGET: armv7-unknown-linux-musleabi
3034
OPENSSL_ARCH: linux-generic32
31-
- IMAGE_TAG: armv7-musleabihf
32-
TARGET: armv7-unknown-linux-musleabihf
33-
OPENSSL_ARCH: linux-generic32
35+
RUST_MUSL_MAKE_CONFIG: config.mak.32
36+
# TODO: reenable after figuring out what's failing here:
37+
# - IMAGE_TAG: armv7-musleabihf
38+
# TARGET: armv7-unknown-linux-musleabihf
39+
# OPENSSL_ARCH: linux-generic32
40+
# RUST_MUSL_MAKE_CONFIG: config.mak.32
3441
- IMAGE_TAG: i586-musl
3542
TARGET: i586-unknown-linux-musl
3643
OPENSSL_ARCH: linux-elf
44+
RUST_MUSL_MAKE_CONFIG: config.mak.32
3745
- IMAGE_TAG: i686-musl
3846
TARGET: i686-unknown-linux-musl
3947
OPENSSL_ARCH: linux-elf
48+
RUST_MUSL_MAKE_CONFIG: config.mak.32
4049
- IMAGE_TAG: mips-musl
4150
TARGET: mips-unknown-linux-musl
4251
OPENSSL_ARCH: linux-mips32
52+
RUST_MUSL_MAKE_CONFIG: config.mak.32
4353
# - IMAGE_TAG: mips64-muslabi64
4454
# TARGET: mips64-unknown-linux-muslabi64
4555
# OPENSSL_ARCH: linux64-mips64
@@ -49,16 +59,18 @@ jobs:
4959
- IMAGE_TAG: mipsel-musl
5060
TARGET: mipsel-unknown-linux-musl
5161
OPENSSL_ARCH: linux-mips32
62+
RUST_MUSL_MAKE_CONFIG: config.mak.32
5263
- IMAGE_TAG: x86_64-musl
5364
TARGET: x86_64-unknown-linux-musl
5465
OPENSSL_ARCH: linux-x86_64
66+
RUST_MUSL_MAKE_CONFIG: config.mak.32
5567
env: ${{ matrix.env }}
5668
steps:
5769
- uses: actions/checkout@v2
5870
- name: Build Docker image
5971
run: |
60-
docker build --build-arg TARGET="$TARGET" --build-arg OPENSSL_ARCH="$OPENSSL_ARCH" -t messense/rust-musl-cross:$IMAGE_TAG .
72+
docker build --build-arg TARGET="$TARGET" --build-arg OPENSSL_ARCH="$OPENSSL_ARCH" --build-arg RUST_MUSL_MAKE_CONFIG="$RUST_MUSL_MAKE_CONFIG" -t messense/rust-musl-cross:$IMAGE_TAG .
6173
docker run --rm -v "$(pwd)/tests":/home/rust/src messense/rust-musl-cross:$IMAGE_TAG cargo build
6274
- name: Push Docker image
6375
if: github.ref == 'refs/heads/master'
64-
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG
76+
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ARG TOOLCHAIN=stable
55
ARG TARGET=x86_64-unknown-linux-musl
66
ARG OPENSSL_ARCH=linux-x86_64
77
ARG RUST_MUSL_MAKE_VER=0.9.9
8+
ARG RUST_MUSL_MAKE_CONFIG=config.mak
89

910
ENV DEBIAN_FRONTEND=noninteractive
1011
ENV RUST_MUSL_CROSS_TARGET=$TARGET
@@ -31,7 +32,7 @@ RUN apt-get update && \
3132
COPY lets-encrypt-r3-cross-signed.crt /usr/local/share/ca-certificates
3233
RUN update-ca-certificates
3334

34-
COPY config.mak /tmp/config.mak
35+
COPY $RUST_MUSL_MAKE_CONFIG /tmp/config.mak
3536
RUN cd /tmp && curl -Lsq -o musl-cross-make.zip https://github.com/richfelker/musl-cross-make/archive/v$RUST_MUSL_MAKE_VER.zip && \
3637
unzip -q musl-cross-make.zip && \
3738
rm musl-cross-make.zip && \

build.sh

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
#!/bin/bash
2+
set -ex
3+
24
# x86_64-unknown-linux-musl
35
docker build -t messense/rust-musl-cross:x86_64-musl .
46
# arm-unknown-linux-musleabi
5-
docker build --build-arg TARGET=arm-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabi .
7+
docker build --build-arg TARGET=arm-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:arm-musleabi .
68
# arm-unknown-linux-musleabihf
7-
docker build --build-arg TARGET=arm-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabihf .
9+
docker build --build-arg TARGET=arm-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:arm-musleabihf .
810
# armv5te-unknown-linux-musleabi
9-
docker build --build-arg TARGET=armv5te-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabi .
11+
docker build --build-arg TARGET=armv5te-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:armv5te-musleabi .
1012
# armv7-unknown-linux-musleabihf
11-
docker build --build-arg TARGET=armv7-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:armv7-musleabihf .
13+
docker build --build-arg TARGET=armv7-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:armv7-musleabihf .
1214
# i686-unknown-linux-musl
13-
docker build --build-arg TARGET=i686-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:i686-musl .
15+
docker build --build-arg TARGET=i686-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-generic32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:i686-musl .
1416
# mips-unknown-linux-musl
15-
docker build --build-arg TARGET=mips-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 -t messense/rust-musl-cross:mips-musl .
17+
docker build --build-arg TARGET=mips-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:mips-musl .
1618
# mipsel-unknown-linux-musl
17-
docker build --build-arg TARGET=mipsel-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 -t messense/rust-musl-cross:mipsel-musl .
19+
docker build --build-arg TARGET=mipsel-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 --build-arg RUST_MUSL_MAKE_CONFIG=config.mak.32 -t messense/rust-musl-cross:mipsel-musl .

config.mak.32

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# By default, cross compilers are installed to ./output under the top-level
2+
# musl-cross-make directory and can later be moved wherever you want them.
3+
# To install directly to a specific location, set it here. Multiple targets
4+
# can safely be installed in the same location. Some examples:
5+
6+
OUTPUT = /usr/local/musl
7+
8+
# By default, latest supported release versions of musl and the toolchain
9+
# components are used. You can override those here, but the version selected
10+
# must be supported (under hashes/ and patches/) to work. For musl, you
11+
# can use "git-refname" (e.g. git-master) instead of a release. Setting a
12+
# blank version for gmp, mpc, mpfr and isl will suppress download and
13+
# in-tree build of these libraries and instead depend on pre-installed
14+
# libraries when available (isl is optional and not set by default).
15+
# Setting a blank version for linux will suppress installation of kernel
16+
# headers, which are not needed unless compiling programs that use them.
17+
18+
# BINUTILS_VER =
19+
# GCC_VER =
20+
21+
# https://github.com/rust-embedded/cross/issues/478
22+
# https://github.com/rust-lang/libc/issues/1848
23+
MUSL_VER = 1.1.24
24+
25+
# GMP_VER =
26+
# MPC_VER =
27+
# MPFR_VER =
28+
# ISL_VER =
29+
# LINUX_VER =
30+
31+
# By default source archives are downloaded with wget. curl is also an option.
32+
33+
# DL_CMD = wget -c -O
34+
DL_CMD = curl -C - -L -o
35+
36+
# Something like the following can be used to produce a static-linked
37+
# toolchain that's deployable to any system with matching arch, using
38+
# an existing musl-targeted cross compiler. This only # works if the
39+
# system you build on can natively (or via binfmt_misc and # qemu) run
40+
# binaries produced by the existing toolchain (in this example, i486).
41+
42+
# COMMON_CONFIG += CC="i486-linux-musl-gcc -static --static" CXX="i486-linux-musl-g++ -static --static"
43+
44+
# Recommended options for smaller build for deploying binaries:
45+
46+
COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"
47+
48+
# Recommended options for faster/simpler build:
49+
50+
COMMON_CONFIG += --disable-nls
51+
GCC_CONFIG += --enable-languages=c,c++
52+
GCC_CONFIG += --disable-libquadmath --disable-decimal-float
53+
GCC_CONFIG += --disable-multilib
54+
55+
# You can keep the local build path out of your toolchain binaries and
56+
# target libraries with the following, but then gdb needs to be told
57+
# where to look for source files.
58+
59+
COMMON_CONFIG += --with-debug-prefix-map=$(CURDIR)=

0 commit comments

Comments
 (0)