Skip to content
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

clang based image #1

Open
wants to merge 27 commits into
base: master
Choose a base branch
from
Open
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
38 changes: 38 additions & 0 deletions .github/workflows/build-clang-toolchain.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Build Clang

on:
push:
branches: [ master ]
#pull_request:

jobs:

build-clang-musl-toolchain:

runs-on: self-hosted
container: generalbeck/docker-cross-rust:alpine-sccache
steps:
- name: Checkout sources
uses: actions/checkout@v2
- name: Build Clang MUSL toolchain
run: |
cd dockerfiles
ls -a
sh sync.sh release/9.x
sh configure.sh
sh build.sh
sh install.sh
ls -a
shell: sh
- name: Upload artifact's
uses: actions/upload-artifact@v1
with:
name: x86_64-unknown-linux-musl.zip
path: dockerfiles/artifact/
- name: Upload release
uses: yakuhzi/action-release@v1
with:
file: dockerfiles/artifact/x86_64-unknown-linux-musl.zip
#changelog: /path/to/CHANGELOG.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
12 changes: 6 additions & 6 deletions .github/workflows/dockerimage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ on:
push:
branches: [ master ]
pull_request:

branches: [ master ]
jobs:

build:
build-x86_64-unknown-linux-musl:

runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v2
- name: Build the Docker image
run: docker build . --file dockerfiles/Dockerfile.x86_64-unknown-linux-musl --tag generalbeck/docker-cross-rust:x86_64-unknown-linux-musl
run: docker build . --file dockerfiles/Dockerfile.x86_64-unknown-linux-musl --tag docker.pkg.github.com/general-beck/docker-cross-rust/docker-cross-rust:x86_64-unknown-linux-musl
- name: Docker login
run: docker login docker.pkg.github.com -u General-Beck -p ${{ secrets.GITHUB_TOKEN }}
- name: Push the Docker image
run: |
docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }}
docker push generalbeck/docker-cross-rust:x86_64-unknown-linux-musl
run: docker push docker.pkg.github.com/general-beck/docker-cross-rust/docker-cross-rust:x86_64-unknown-linux-musl
- name: Docker logout
run: docker logout
126 changes: 126 additions & 0 deletions dockerfiles/Dockerfile.aarch64-unknown-linux-musl
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
FROM ubuntu:focal

# metadata
ARG TARGET=aarch64-unknown-linux-musl
ARG OPENSSL_ARCH=linux-aarch64
ARG MUSL_TARGET=aarch64-linux-musl


ENV RUST_MUSL_CROSS_TARGET=$TARGET \
TARGET_HOST=$TARGET
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /builds

# install tools and dependencies
RUN set -eux; \
apt update; \
apt install -qq -y --no-install-recommends \
autoconf automake binutils ca-certificates cmake file gcc g++ git jq \
libc6-dev libtool m4 make pkg-config curl libssl-dev zlib1g-dev mc \
qemu binfmt-support qemu-user-static;

# install musl

RUN curl -sLO https://musl.cc/$MUSL_TARGET-cross.tgz&& \
tar xzf $MUSL_TARGET-cross.tgz&& \
cd $MUSL_TARGET-cross&& \
cp -fR * ../../usr/local/&& \
cd ..&& rm -rf $MUSL_TARGET-cross*

ENV CC=$MUSL_TARGET-gcc \
CXX=$MUSL_TARGET-g++ \
CC_aarch64_unknown_linux_musl=$MUSL_TARGET-gcc \
CXX_aarch64_unknown_linux_musl=$MUSL_TARGET-g++\
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=$MUSL_TARGET-gcc \
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER=qemu-user-static \
TARGET_CC=$MUSL_TARGET-gcc\
TARGET_CXX=$MUSL_TARGET-g++\
TARGET_AR=$MUSL_TARGET-ar\
TARGET_C_INCLUDE_PATH=/usr/local/$MUSL_TARGET/include/\
CXX_LIB_PATH_aarch64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/ \
C_LIB_PATH_aarch64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/\
CXXSTDLIB=stdc++ \
TARGET_CXXSTDLIB=stdc++ \
CXXSTDLIB_aarch64_unknown_linux_musl=stdc++ \
LDFLAGS_aarch64_unknown_linux_musl=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \
LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \
CFLAGS_aarch64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CXXFLAGS_aarch64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CXXFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$MUSL_TARGET/lib:$LD_LIBRARY_PATH \
PKG_CONFIG_ALLOW_CROSS=1 \
PKG_CONFIG_ALL_STATIC=1 \
OPENSSL_STATIC=1 \
LIBZ_SYS_STATIC=1 \
PATH=/usr/local/$MUSL_TARGET/bin:$PATH

# ZLib & OpenSSL
RUN set -eux; \
echo "Building zlib" && \
VERS=1.2.11 && \
curl -sLO https://zlib.net/zlib-$VERS.tar.gz && \
tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \
$CC -v&&\
CHOST=$TARGET CC=$TARGET_CC ./configure --static --prefix=/usr/local/$MUSL_TARGET && \
make --silent && make --silent install && \
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt
RUN set -eux; \
echo "Building OpenSSL" && \
VERS=1.1.1d && \
curl -sLO https://www.openssl.org/source/openssl-$VERS.tar.gz && \
tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \
./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared --static --prefix=/usr/local/$MUSL_TARGET && \
make depend && \
make --silent && make --silent install && \
cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$MUSL_TARGET/share

#Install QEMU
RUN curl -s https://api.github.com/repos/multiarch/qemu-user-static/releases/latest \
| grep 'browser_download_url.*qemu-aarch64_be-static.tar.gz"' \
| cut -d : -f 2,3 | xargs -n 1 curl -sSL | tar -xzC /usr/local/bin/

# Allows qemu run dynamic linked binaries
RUN ln -sf \
/usr/local/$MUSL_TARGET/lib/libc.so \
/usr/local/$MUSL_TARGET/lib/ld-musl-aarch64.so.1
ENV QEMU_LD_PREFIX=/usr/local/$MUSL_TARGET

# download rustup
ADD "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" rustup-init

# rustup directory
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH

RUN chmod +x rustup-init; \
./rustup-init -y --no-modify-path --default-toolchain stable; \
rm rustup-init; \
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
rustup install nightly; \
# install x86_64_unknown_linux_musl toolchain
rustup target add $TARGET; \
rustup target add $TARGET --toolchain nightly; \
SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \
curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/local/cargo/bin ; \
rm -rf /usr/local/rustup/toolchains/*/share; \
# apt clean up
apt autoremove -y; \
apt clean; \
rm -rf /var/lib/apt/lists/*;

COPY dockerfiles/config/$TARGET.config /root/.cargo/config

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/

#Prepare sccache ENV
RUN mkdir $HOME/sccache
ENV RUST_BACKTRACE=full\
RUST_TEST_THREADS=1 \
RUSTC_WRAPPER=sccache \
SCCACHE_DIR=$HOME/sccache \
SCCACHE_CACHE_SIZE=1G
125 changes: 125 additions & 0 deletions dockerfiles/Dockerfile.armv7-unknown-linux-musleabihf
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
FROM ubuntu:focal

# metadata
ARG TARGET=armv7-unknown-linux-musleabihf
ARG OPENSSL_ARCH=linux-armv4
ARG MUSL_TARGET=armeb-linux-musleabihf

ENV RUST_MUSL_CROSS_TARGET=$TARGET \
TARGET_HOST=$TARGET
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /builds

# install tools and dependencies
RUN set -eux; \
apt update; \
apt install -qq -y --no-install-recommends \
autoconf automake binutils ca-certificates cmake file gcc g++ git jq \
libc6-dev libtool m4 make pkg-config curl libssl-dev zlib1g-dev mc \
qemu binfmt-support qemu-user-static;

# install musl


RUN curl -sLO https://musl.cc/$MUSL_TARGET-cross.tgz&& \
tar xzf $MUSL_TARGET-cross.tgz&& \
cd $MUSL_TARGET-cross&& \
cp -fR * ../../usr/local/&& \
cd ..&& rm -rf $MUSL_TARGET-cross*

ENV CC=$MUSL_TARGET-gcc \
CXX=$MUSL_TARGET-g++ \
CC_armv7_unknown_linux_musleabihf=$MUSL_TARGET-gcc \
CXX_armv7_unknown_linux_musleabihf=$MUSL_TARGET-g++\
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=$MUSL_TARGET-gcc \
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER=qemu-user-static \
TARGET_CC=$MUSL_TARGET-gcc\
TARGET_CXX=$MUSL_TARGET-g++\
TARGET_AR=$MUSL_TARGET-ar\
TARGET_C_INCLUDE_PATH=/usr/local/$MUSL_TARGET/include/\
CXX_LIB_PATH_armv7_unknown_linux_musleabihf=/usr/local/$MUSL_TARGET/lib/ \
C_LIB_PATH_armv7_unknown_linux_musleabihf=/usr/local/$MUSL_TARGET/lib/\
CXXSTDLIB=stdc++ \
TARGET_CXXSTDLIB=stdc++ \
CXXSTDLIB_armv7_unknown_linux_musleabihf=stdc++ \
LDFLAGS_armv7_unknown_linux_musleabihf=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \
LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \
CFLAGS_armv7_unknown_linux_musleabihf=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CXXFLAGS_armv7_unknown_linux_musleabihf=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CFLAGS=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
CXXFLAGS=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$MUSL_TARGET/lib:$LD_LIBRARY_PATH \
PKG_CONFIG_ALLOW_CROSS=1 \
PKG_CONFIG_ALL_STATIC=1 \
OPENSSL_STATIC=1 \
LIBZ_SYS_STATIC=1 \
PATH=/usr/local/$MUSL_TARGET/bin:$PATH

# ZLib & OpenSSL
RUN set -eux; \
echo "Building zlib" && \
VERS=1.2.11 && \
curl -sLO https://zlib.net/zlib-$VERS.tar.gz && \
tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \
$CC -v&&\
CHOST=$TARGET CC=$TARGET_CC ./configure --static --prefix=/usr/local/$MUSL_TARGET && \
make --silent && make --silent install && \
cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt
RUN set -eux; \
echo "Building OpenSSL" && \
VERS=1.1.1d && \
curl -sLO https://www.openssl.org/source/openssl-$VERS.tar.gz && \
tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \
./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared --static --prefix=/usr/local/$MUSL_TARGET && \
make depend && \
make --silent && make --silent install && \
cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$MUSL_TARGET/share

#Install QEMU
RUN curl -s https://api.github.com/repos/multiarch/qemu-user-static/releases/latest \
| grep 'browser_download_url.*x86_64_qemu-armeb-static.tar.gz"' \
| cut -d : -f 2,3 | xargs -n 1 curl -sSL | tar -xzC /usr/local/bin/

# Allows qemu run dynamic linked binaries
RUN ln -sf \
/usr/local/$MUSL_TARGET/lib/libc.so \
/usr/local/$MUSL_TARGET/lib/ld-musl-arm.so.1
ENV QEMU_LD_PREFIX=/usr/local/$MUSL_TARGET

# download rustup
ADD "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" rustup-init

# rustup directory
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH

RUN chmod +x rustup-init; \
./rustup-init -y --no-modify-path --default-toolchain stable; \
rm rustup-init; \
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
rustup install nightly; \
# install x86_64_unknown_linux_musl toolchain
rustup target add $TARGET; \
rustup target add $TARGET --toolchain nightly; \
SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \
curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/local/cargo/bin ; \
rm -rf /usr/local/rustup/toolchains/*/share; \
# apt clean up
apt autoremove -y; \
apt clean; \
rm -rf /var/lib/apt/lists/*;

COPY dockerfiles/config/$TARGET.config /root/.cargo/config
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/

#Prepare sccache ENV
RUN mkdir $HOME/sccache
ENV RUST_BACKTRACE=full \
RUST_TEST_THREADS=1 \
RUSTC_WRAPPER=sccache \
SCCACHE_DIR=$HOME/sccache \
SCCACHE_CACHE_SIZE=1G
24 changes: 24 additions & 0 deletions dockerfiles/Dockerfile.clang
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM alpine:edge

RUN apk add --no-cache \
clang-dev \
clang-static \
cmake \
g++ \
git \
libexecinfo-dev \
linux-headers \
make \
ninja \
patch \
python \
curl \
jq \
mc


RUN SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \
curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/bin ;\
sccache --version
ENV SCCACHE_REDIS=redis://172.17.0.1/0 \
SCCACHE_IDLE_TIMEOUT=0
Loading