Skip to content

Commit 1babaad

Browse files
committed
Upgrade base to ubuntu 20.04
The noninteractive env var had to be added since tzdata would try to ask for a region. ADDs changed to COPYs as it is good practice in the docker community. Also: - Remove fixed GCC_VER constraint (7.2.0 is not supported anymore) - Use rust musl make 0.9.9 (patch level update) - Use openssl 1.0.2u (patch level update)
1 parent 81cb02c commit 1babaad

File tree

5 files changed

+94
-21
lines changed

5 files changed

+94
-21
lines changed

.github/workflows/Build.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,39 @@ 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
35+
RUST_MUSL_MAKE_CONFIG: config.mak.32
3136
- IMAGE_TAG: armv7-musleabihf
3237
TARGET: armv7-unknown-linux-musleabihf
3338
OPENSSL_ARCH: linux-generic32
39+
RUST_MUSL_MAKE_CONFIG: config.mak.32
3440
- IMAGE_TAG: i586-musl
3541
TARGET: i586-unknown-linux-musl
3642
OPENSSL_ARCH: linux-elf
43+
RUST_MUSL_MAKE_CONFIG: config.mak.32
3744
- IMAGE_TAG: i686-musl
3845
TARGET: i686-unknown-linux-musl
3946
OPENSSL_ARCH: linux-elf
47+
RUST_MUSL_MAKE_CONFIG: config.mak.32
4048
- IMAGE_TAG: mips-musl
4149
TARGET: mips-unknown-linux-musl
4250
OPENSSL_ARCH: linux-mips32
51+
RUST_MUSL_MAKE_CONFIG: config.mak.32
4352
# - IMAGE_TAG: mips64-muslabi64
4453
# TARGET: mips64-unknown-linux-muslabi64
4554
# OPENSSL_ARCH: linux64-mips64
@@ -49,16 +58,18 @@ jobs:
4958
- IMAGE_TAG: mipsel-musl
5059
TARGET: mipsel-unknown-linux-musl
5160
OPENSSL_ARCH: linux-mips32
61+
RUST_MUSL_MAKE_CONFIG: config.mak.32
5262
- IMAGE_TAG: x86_64-musl
5363
TARGET: x86_64-unknown-linux-musl
5464
OPENSSL_ARCH: linux-x86_64
65+
RUST_MUSL_MAKE_CONFIG: config.mak.32
5566
env: ${{ matrix.env }}
5667
steps:
5768
- uses: actions/checkout@v2
5869
- name: Build Docker image
5970
run: |
60-
docker build --build-arg TARGET="$TARGET" --build-arg OPENSSL_ARCH="$OPENSSL_ARCH" -t messense/rust-musl-cross:$IMAGE_TAG .
71+
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 .
6172
docker run --rm -v "$(pwd)/tests":/home/rust/src messense/rust-musl-cross:$IMAGE_TAG cargo build
6273
- name: Push Docker image
6374
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
75+
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG

Dockerfile

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
FROM ubuntu:16.04
1+
FROM ubuntu:20.04
22

33
# The Rust toolchain to use when building our image
44
ARG TOOLCHAIN=stable
55
ARG TARGET=x86_64-unknown-linux-musl
66
ARG OPENSSL_ARCH=linux-x86_64
7+
ARG RUST_MUSL_MAKE_VER=0.9.9
8+
ARG RUST_MUSL_MAKE_CONFIG=config.mak
79

10+
ENV DEBIAN_FRONTEND=noninteractive
811
ENV RUST_MUSL_CROSS_TARGET=$TARGET
912

1013
# Make sure we have basic dev tools for building C libraries. Our goal
@@ -26,15 +29,14 @@ RUN apt-get update && \
2629
apt-get clean && rm -rf /var/lib/apt/lists/*
2730

2831
# Install cross-signed Let's Encrypt R3 CA certificate
29-
ADD lets-encrypt-r3-cross-signed.crt /usr/local/share/ca-certificates
32+
COPY lets-encrypt-r3-cross-signed.crt /usr/local/share/ca-certificates
3033
RUN update-ca-certificates
3134

32-
ADD config.mak /tmp/config.mak
33-
RUN cd /tmp && \
34-
curl -Lsq -o musl-cross-make.zip https://github.com/richfelker/musl-cross-make/archive/v0.9.8.zip && \
35+
COPY $RUST_MUSL_MAKE_CONFIG /tmp/config.mak
36+
RUN cd /tmp && curl -Lsq -o musl-cross-make.zip https://github.com/richfelker/musl-cross-make/archive/v$RUST_MUSL_MAKE_VER.zip && \
3537
unzip -q musl-cross-make.zip && \
3638
rm musl-cross-make.zip && \
37-
mv musl-cross-make-0.9.8 musl-cross-make && \
39+
mv musl-cross-make-$RUST_MUSL_MAKE_VER musl-cross-make && \
3840
cp /tmp/config.mak /tmp/musl-cross-make/config.mak && \
3941
cd /tmp/musl-cross-make && \
4042
TARGET=$TARGET make install -j 4 > /tmp/musl-cross-make.log && \
@@ -83,8 +85,8 @@ RUN export CC=$TARGET_CC && \
8385
make && sudo make install -j 4 && \
8486
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt && \
8587
echo "Building OpenSSL" && \
86-
VERS=1.0.2q && \
87-
CHECKSUM=5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684 && \
88+
VERS=1.0.2u && \
89+
CHECKSUM=ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16 && \
8890
curl -sqO https://www.openssl.org/source/openssl-$VERS.tar.gz && \
8991
echo "$CHECKSUM openssl-$VERS.tar.gz" > checksums.txt && \
9092
sha256sum -c checksums.txt && \

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ OUTPUT = /usr/local/musl
1515
# Setting a blank version for linux will suppress installation of kernel
1616
# headers, which are not needed unless compiling programs that use them.
1717

18-
# BINUTILS_VER = 2.25.1
19-
GCC_VER = 7.2.0
20-
21-
# MUSL_VER = 1.1.19
18+
# BINUTILS_VER =
19+
# GCC_VER =
20+
# MUSL_VER =
2221
# GMP_VER =
2322
# MPC_VER =
2423
# MPFR_VER =

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)