Skip to content

Upgrade base to ubuntu 20.04 #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions .github/workflows/Build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,39 @@ jobs:
- IMAGE_TAG: aarch64-musl
TARGET: aarch64-unknown-linux-musl
OPENSSL_ARCH: linux-aarch64
RUST_MUSL_MAKE_CONFIG: config.mak
- IMAGE_TAG: arm-musleabi
TARGET: arm-unknown-linux-musleabi
OPENSSL_ARCH: linux-generic32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: arm-musleabihf
TARGET: arm-unknown-linux-musleabihf
OPENSSL_ARCH: linux-generic32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: armv5te-musleabi
TARGET: armv5te-unknown-linux-musleabi
OPENSSL_ARCH: linux-generic32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: armv7-musleabi
TARGET: armv7-unknown-linux-musleabi
OPENSSL_ARCH: linux-generic32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: armv7-musleabihf
TARGET: armv7-unknown-linux-musleabihf
OPENSSL_ARCH: linux-generic32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: i586-musl
TARGET: i586-unknown-linux-musl
OPENSSL_ARCH: linux-elf
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: i686-musl
TARGET: i686-unknown-linux-musl
OPENSSL_ARCH: linux-elf
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: mips-musl
TARGET: mips-unknown-linux-musl
OPENSSL_ARCH: linux-mips32
RUST_MUSL_MAKE_CONFIG: config.mak.32
# - IMAGE_TAG: mips64-muslabi64
# TARGET: mips64-unknown-linux-muslabi64
# OPENSSL_ARCH: linux64-mips64
Expand All @@ -49,16 +58,25 @@ jobs:
- IMAGE_TAG: mipsel-musl
TARGET: mipsel-unknown-linux-musl
OPENSSL_ARCH: linux-mips32
RUST_MUSL_MAKE_CONFIG: config.mak.32
- IMAGE_TAG: x86_64-musl
TARGET: x86_64-unknown-linux-musl
OPENSSL_ARCH: linux-x86_64
RUST_MUSL_MAKE_CONFIG: config.mak
env: ${{ matrix.env }}
steps:
- uses: actions/checkout@v2
- name: Build Docker image
run: |
docker build --build-arg TARGET="$TARGET" --build-arg OPENSSL_ARCH="$OPENSSL_ARCH" -t messense/rust-musl-cross:$IMAGE_TAG .
docker run --rm -v "$(pwd)/tests":/home/rust/src messense/rust-musl-cross:$IMAGE_TAG cargo build
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 .
docker run --rm \
-e CFLAGS_armv7_unknown_linux_musleabihf='-mfpu=vfpv3-d16' \
-v "$(pwd)/tests":/home/rust/src \
messense/rust-musl-cross:$IMAGE_TAG cargo build
- name: Push Docker image
if: github.ref == 'refs/heads/master'
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} && docker push messense/rust-musl-cross:$IMAGE_TAG
41 changes: 24 additions & 17 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
FROM ubuntu:16.04
FROM ubuntu:20.04

# The Rust toolchain to use when building our image
ARG TOOLCHAIN=stable
ARG TARGET=x86_64-unknown-linux-musl
ARG OPENSSL_ARCH=linux-x86_64
ARG RUST_MUSL_MAKE_VER=0.9.9
ARG RUST_MUSL_MAKE_CONFIG=config.mak

ENV DEBIAN_FRONTEND=noninteractive
ENV RUST_MUSL_CROSS_TARGET=$TARGET

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

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

ADD config.mak /tmp/config.mak
RUN cd /tmp && \
curl -Lsq -o musl-cross-make.zip https://github.com/richfelker/musl-cross-make/archive/v0.9.8.zip && \
COPY $RUST_MUSL_MAKE_CONFIG /tmp/config.mak
RUN cd /tmp && curl -Lsq -o musl-cross-make.zip https://github.com/richfelker/musl-cross-make/archive/v$RUST_MUSL_MAKE_VER.zip && \
unzip -q musl-cross-make.zip && \
rm musl-cross-make.zip && \
mv musl-cross-make-0.9.8 musl-cross-make && \
mv musl-cross-make-$RUST_MUSL_MAKE_VER musl-cross-make && \
cp /tmp/config.mak /tmp/musl-cross-make/config.mak && \
cd /tmp/musl-cross-make && \
TARGET=$TARGET make install -j 4 > /tmp/musl-cross-make.log && \
Expand All @@ -49,7 +51,8 @@ RUN mkdir -p /home/rust/libs /home/rust/src
ENV PATH=/root/.cargo/bin:/usr/local/musl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV TARGET_CC=$TARGET-gcc
ENV TARGET_CXX=$TARGET-g++
ENV TARGET_C_INCLUDE_PATH=/usr/local/musl/$TARGET/include/
ENV TARGET_HOME=/usr/local/musl/$TARGET
ENV TARGET_C_INCLUDE_PATH=$TARGET_HOME/include/

# Install our Rust toolchain and the `musl` target. We patch the
# command-line we pass to the installer so that it won't attempt to
Expand Down Expand Up @@ -79,25 +82,29 @@ RUN export CC=$TARGET_CC && \
echo "$CHECKSUM zlib-$VERS.tar.gz" > checksums.txt && \
sha256sum -c checksums.txt && \
tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \
./configure --static --archs="-fPIC" --prefix=/usr/local/musl/$TARGET && \
./configure --static --archs="-fPIC" --prefix=$TARGET_HOME && \
make && sudo make install -j 4 && \
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt && \
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt

RUN export CC=$TARGET_CC && \
export C_INCLUDE_PATH=$TARGET_C_INCLUDE_PATH && \
export LD=$TARGET-ld && \
echo "Building OpenSSL" && \
VERS=1.0.2q && \
CHECKSUM=5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684 && \
VERS=1.0.2u && \
CHECKSUM=ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16 && \
curl -sqO https://www.openssl.org/source/openssl-$VERS.tar.gz && \
echo "$CHECKSUM openssl-$VERS.tar.gz" > checksums.txt && \
sha256sum -c checksums.txt && \
tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \
./Configure $OPENSSL_ARCH -fPIC --prefix=/usr/local/musl/$TARGET && \
./Configure $OPENSSL_ARCH -fPIC --prefix=$TARGET_HOME && \
make depend && \
make && sudo make install -j 4 && \
make && sudo make install && \
cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt

ENV OPENSSL_DIR=/usr/local/musl/$TARGET/ \
OPENSSL_INCLUDE_DIR=/usr/local/musl/$TARGET/include/ \
DEP_OPENSSL_INCLUDE=/usr/local/musl/$TARGET/include/ \
OPENSSL_LIB_DIR=/usr/local/musl/$TARGET/lib/ \
ENV OPENSSL_DIR=$TARGET_HOME/ \
OPENSSL_INCLUDE_DIR=$TARGET_HOME/include/ \
DEP_OPENSSL_INCLUDE=$TARGET_HOME/include/ \
OPENSSL_LIB_DIR=$TARGET_HOME/lib/ \
OPENSSL_STATIC=1

# Remove docs and more stuff not needed in this images to make them smaller
Expand Down
16 changes: 9 additions & 7 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
#!/bin/bash
set -ex

# x86_64-unknown-linux-musl
docker build -t messense/rust-musl-cross:x86_64-musl .
# arm-unknown-linux-musleabi
docker build --build-arg TARGET=arm-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabi .
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 .
# arm-unknown-linux-musleabihf
docker build --build-arg TARGET=arm-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabihf .
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 .
# armv5te-unknown-linux-musleabi
docker build --build-arg TARGET=armv5te-unknown-linux-musleabi --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:arm-musleabi .
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 .
# armv7-unknown-linux-musleabihf
docker build --build-arg TARGET=armv7-unknown-linux-musleabihf --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:armv7-musleabihf .
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 .
# i686-unknown-linux-musl
docker build --build-arg TARGET=i686-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-generic32 -t messense/rust-musl-cross:i686-musl .
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 .
# mips-unknown-linux-musl
docker build --build-arg TARGET=mips-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 -t messense/rust-musl-cross:mips-musl .
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 .
# mipsel-unknown-linux-musl
docker build --build-arg TARGET=mipsel-unknown-linux-musl --build-arg OPENSSL_ARCH=linux-mips32 -t messense/rust-musl-cross:mipsel-musl .
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 .
7 changes: 3 additions & 4 deletions config.mak
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ OUTPUT = /usr/local/musl
# Setting a blank version for linux will suppress installation of kernel
# headers, which are not needed unless compiling programs that use them.

# BINUTILS_VER = 2.25.1
GCC_VER = 7.2.0

# MUSL_VER = 1.1.19
# BINUTILS_VER =
# GCC_VER =
# MUSL_VER =
# GMP_VER =
# MPC_VER =
# MPFR_VER =
Expand Down
60 changes: 60 additions & 0 deletions config.mak.32
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# By default, cross compilers are installed to ./output under the top-level
# musl-cross-make directory and can later be moved wherever you want them.
# To install directly to a specific location, set it here. Multiple targets
# can safely be installed in the same location. Some examples:

OUTPUT = /usr/local/musl

# By default, latest supported release versions of musl and the toolchain
# components are used. You can override those here, but the version selected
# must be supported (under hashes/ and patches/) to work. For musl, you
# can use "git-refname" (e.g. git-master) instead of a release. Setting a
# blank version for gmp, mpc, mpfr and isl will suppress download and
# in-tree build of these libraries and instead depend on pre-installed
# libraries when available (isl is optional and not set by default).
# Setting a blank version for linux will suppress installation of kernel
# headers, which are not needed unless compiling programs that use them.

# BINUTILS_VER =
# GCC_VER =

# https://github.com/rust-embedded/cross/issues/478
# https://github.com/rust-lang/libc/issues/1848

MUSL_VER = 1.1.24

# GMP_VER =
# MPC_VER =
# MPFR_VER =
# ISL_VER =
# LINUX_VER =

# By default source archives are downloaded with wget. curl is also an option.

# DL_CMD = wget -c -O
DL_CMD = curl -C - -L -o

# Something like the following can be used to produce a static-linked
# toolchain that's deployable to any system with matching arch, using
# an existing musl-targeted cross compiler. This only # works if the
# system you build on can natively (or via binfmt_misc and # qemu) run
# binaries produced by the existing toolchain (in this example, i486).

# COMMON_CONFIG += CC="i486-linux-musl-gcc -static --static" CXX="i486-linux-musl-g++ -static --static"

# Recommended options for smaller build for deploying binaries:

COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"

# Recommended options for faster/simpler build:

COMMON_CONFIG += --disable-nls
GCC_CONFIG += --enable-languages=c,c++
GCC_CONFIG += --disable-libquadmath --disable-decimal-float
GCC_CONFIG += --disable-multilib

# You can keep the local build path out of your toolchain binaries and
# target libraries with the following, but then gdb needs to be told
# where to look for source files.

COMMON_CONFIG += --with-debug-prefix-map=$(CURDIR)=
Loading