Skip to content

Commit d4bcc80

Browse files
authored
Merge pull request #34 from asaaki/ubuntu-20.04
Upgrade base to ubuntu 20.04
2 parents 81cb02c + 50c3616 commit d4bcc80

File tree

6 files changed

+282
-263
lines changed

6 files changed

+282
-263
lines changed

.github/workflows/Build.yml

Lines changed: 21 additions & 3 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
2426
OPENSSL_ARCH: linux-generic32
27+
RUST_MUSL_MAKE_CONFIG: config.mak.32
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,25 @@ 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
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 .
61-
docker run --rm -v "$(pwd)/tests":/home/rust/src messense/rust-musl-cross:$IMAGE_TAG cargo build
71+
docker build \
72+
--build-arg TARGET="$TARGET" \
73+
--build-arg OPENSSL_ARCH="$OPENSSL_ARCH" \
74+
--build-arg RUST_MUSL_MAKE_CONFIG="$RUST_MUSL_MAKE_CONFIG" \
75+
-t messense/rust-musl-cross:$IMAGE_TAG .
76+
docker run --rm \
77+
-e CFLAGS_armv7_unknown_linux_musleabihf='-mfpu=vfpv3-d16' \
78+
-v "$(pwd)/tests":/home/rust/src \
79+
messense/rust-musl-cross:$IMAGE_TAG cargo build
6280
- name: Push Docker image
6381
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
82+
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG

Dockerfile

Lines changed: 24 additions & 17 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 && \
@@ -49,7 +51,8 @@ RUN mkdir -p /home/rust/libs /home/rust/src
4951
ENV PATH=/root/.cargo/bin:/usr/local/musl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
5052
ENV TARGET_CC=$TARGET-gcc
5153
ENV TARGET_CXX=$TARGET-g++
52-
ENV TARGET_C_INCLUDE_PATH=/usr/local/musl/$TARGET/include/
54+
ENV TARGET_HOME=/usr/local/musl/$TARGET
55+
ENV TARGET_C_INCLUDE_PATH=$TARGET_HOME/include/
5356

5457
# Install our Rust toolchain and the `musl` target. We patch the
5558
# command-line we pass to the installer so that it won't attempt to
@@ -79,25 +82,29 @@ RUN export CC=$TARGET_CC && \
7982
echo "$CHECKSUM zlib-$VERS.tar.gz" > checksums.txt && \
8083
sha256sum -c checksums.txt && \
8184
tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \
82-
./configure --static --archs="-fPIC" --prefix=/usr/local/musl/$TARGET && \
85+
./configure --static --archs="-fPIC" --prefix=$TARGET_HOME && \
8386
make && sudo make install -j 4 && \
84-
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt && \
87+
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt
88+
89+
RUN export CC=$TARGET_CC && \
90+
export C_INCLUDE_PATH=$TARGET_C_INCLUDE_PATH && \
91+
export LD=$TARGET-ld && \
8592
echo "Building OpenSSL" && \
86-
VERS=1.0.2q && \
87-
CHECKSUM=5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684 && \
93+
VERS=1.0.2u && \
94+
CHECKSUM=ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16 && \
8895
curl -sqO https://www.openssl.org/source/openssl-$VERS.tar.gz && \
8996
echo "$CHECKSUM openssl-$VERS.tar.gz" > checksums.txt && \
9097
sha256sum -c checksums.txt && \
9198
tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \
92-
./Configure $OPENSSL_ARCH -fPIC --prefix=/usr/local/musl/$TARGET && \
99+
./Configure $OPENSSL_ARCH -fPIC --prefix=$TARGET_HOME && \
93100
make depend && \
94-
make && sudo make install -j 4 && \
101+
make && sudo make install && \
95102
cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt
96103

97-
ENV OPENSSL_DIR=/usr/local/musl/$TARGET/ \
98-
OPENSSL_INCLUDE_DIR=/usr/local/musl/$TARGET/include/ \
99-
DEP_OPENSSL_INCLUDE=/usr/local/musl/$TARGET/include/ \
100-
OPENSSL_LIB_DIR=/usr/local/musl/$TARGET/lib/ \
104+
ENV OPENSSL_DIR=$TARGET_HOME/ \
105+
OPENSSL_INCLUDE_DIR=$TARGET_HOME/include/ \
106+
DEP_OPENSSL_INCLUDE=$TARGET_HOME/include/ \
107+
OPENSSL_LIB_DIR=$TARGET_HOME/lib/ \
101108
OPENSSL_STATIC=1
102109

103110
# Remove docs and more stuff not needed in this images to make them smaller

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: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
24+
MUSL_VER = 1.1.24
25+
26+
# GMP_VER =
27+
# MPC_VER =
28+
# MPFR_VER =
29+
# ISL_VER =
30+
# LINUX_VER =
31+
32+
# By default source archives are downloaded with wget. curl is also an option.
33+
34+
# DL_CMD = wget -c -O
35+
DL_CMD = curl -C - -L -o
36+
37+
# Something like the following can be used to produce a static-linked
38+
# toolchain that's deployable to any system with matching arch, using
39+
# an existing musl-targeted cross compiler. This only # works if the
40+
# system you build on can natively (or via binfmt_misc and # qemu) run
41+
# binaries produced by the existing toolchain (in this example, i486).
42+
43+
# COMMON_CONFIG += CC="i486-linux-musl-gcc -static --static" CXX="i486-linux-musl-g++ -static --static"
44+
45+
# Recommended options for smaller build for deploying binaries:
46+
47+
COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"
48+
49+
# Recommended options for faster/simpler build:
50+
51+
COMMON_CONFIG += --disable-nls
52+
GCC_CONFIG += --enable-languages=c,c++
53+
GCC_CONFIG += --disable-libquadmath --disable-decimal-float
54+
GCC_CONFIG += --disable-multilib
55+
56+
# You can keep the local build path out of your toolchain binaries and
57+
# target libraries with the following, but then gdb needs to be told
58+
# where to look for source files.
59+
60+
COMMON_CONFIG += --with-debug-prefix-map=$(CURDIR)=

0 commit comments

Comments
 (0)