Skip to content

Commit

Permalink
Split into multi stage images
Browse files Browse the repository at this point in the history
  • Loading branch information
harmless-tech committed Dec 24, 2024
1 parent ca12ec7 commit 00e992c
Show file tree
Hide file tree
Showing 26 changed files with 1,455 additions and 38 deletions.
438 changes: 401 additions & 37 deletions .github/workflows/ink-cross.yml

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion build-args.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

{
echo "CMAKE_VERSION=3.31.2"
echo "OPENSSL_VERSION=openssl-3.4.0"
#echo "OPENSSL_VERSION=openssl-3.4.0"
echo "LLVM_VERSION=19"
echo "MUSL_VERSION=1.2.5"
echo "FREEBSD_MAJOR=13"
echo "NETBSD_MAJOR=10"
# Bypass openbsd cdn listing a release that is not out. (#36)
echo "OPENBSD_MAJOR=7.6"
# Dynamics
echo "BUILD_DATE=$BUILD_DATE"
echo "RUST_VERSION=$LATEST_RUST_VERSION"
echo "OPENSSL_VERSION=$LATEST_OPENSSL_VERSION"
} >> "$GITHUB_ENV"
37 changes: 37 additions & 0 deletions docker/base/step0.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# syntax=docker/dockerfile:1
ARG DEBIAN_VERSION=12-slim
FROM debian:$DEBIAN_VERSION

# Build Args
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG CMAKE_VERSION=3.31.2
ENV CMAKE_VERSION=${CMAKE_VERSION}

# Do not set
ENV DEBIAN_FRONTEND=noninteractive

ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH \
CARGO_TERM_COLOR=always

# Copy required scripts and Dockerfile
COPY ./scripts/base/step0 /ink/scripts/base/step0
COPY ./docker/base/step0.Dockerfile /ink/dockerfiles

# Upgrade and install apt packages
RUN /ink/scripts/base/step0/manage-apt.sh

# Install cmake
RUN /ink/scripts/base/step0/install-cmake.sh
COPY ./cmake/toolchain-gcc.cmake /opt/toolchain.cmake

# Cargo prebuilt
RUN /ink/scripts/base/step0/install-cargo-prebuilt.sh

WORKDIR /project
ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "auditable", "build" ]
21 changes: 21 additions & 0 deletions docker/base/step1.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step0
FROM ${IMG_BASE}

# Build Args
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG RUST_VERSION=stable
ENV RUST_VERSION=${RUST_VERSION}

# Copy required scripts and Dockerfile
COPY ./scripts/base/step1 /ink/scripts/base/step1
COPY ./docker/base/step1.Dockerfile /ink/dockerfiles

# Install rust toolchain
RUN /ink/scripts/base/step1/install-rustup.sh

# Create Entrypoint
RUN /ink/scripts/base/step1/entrypoint.sh
21 changes: 21 additions & 0 deletions docker/base/step2-clang.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step1-stable
FROM ${IMG_BASE}

# Build Args
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG LLVM_VERSION=19
ENV LLVM_VERSION=${LLVM_VERSION}

# Copy required scripts and Dockerfile
COPY ./scripts/base/step2-clang /ink/scripts/base/step2-clang
COPY ./docker/base/step2-clang.Dockerfile /ink/dockerfiles

# Override gnu cmake toolchain
COPY ./cmake/toolchain-clang.cmake /opt/toolchain.cmake

# Install clang
RUN /ink/scripts/base/step2-clang/install-clang.sh
64 changes: 64 additions & 0 deletions docker/target/clang/aarch64-unknown-freebsd.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step2-clang-nightly
FROM ${IMG_BASE}

################################
# This target is nightly ONLY! #
################################

# Build CMDS
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG OPENSSL_VERSION=openssl-3.4.0
ARG FREEBSD_MAJOR=13

ARG RUST_TARGET=aarch64-unknown-freebsd
ARG FREEBSD_ARCH=arm64

ARG CROSS_TOOLCHAIN=aarch64-unknown-freebsd${FREEBSD_MAJOR}
ARG CROSS_TOOLCHAIN_PREFIX=${CROSS_TOOLCHAIN}-
ARG CROSS_SYSROOT=/usr/${CROSS_TOOLCHAIN}

ARG OPENSSL_COMBO=BSD-generic64

ARG LLVM_TARGET=$RUST_TARGET

# Copy required scripts and Dockerfile
COPY ./scripts/target/clang /ink/scripts/target/clang
COPY ./scripts/target/bsd/freebsd /ink/scripts/target/bsd/freebsd
COPY ./docker/target/clang/$RUST_TARGET.Dockerfile /ink/dockerfiles

# Setup clang
ENV PATH=$PATH:$CROSS_SYSROOT/usr/bin
RUN /ink/scripts/target/clang/setup-clang.sh

# Install freebsd
RUN /ink/scripts/target/bsd/freebsd/extract-freebsd-sysroot.sh

# Openssl
ENV OPENSSL_DIR=$CROSS_SYSROOT/usr
RUN /ink/scripts/target/clang/install-openssl-clang.sh

# Install rust target
ENV RUST_TARGET=$RUST_TARGET
# RUN rustup target add "$RUST_TARGET"

ENV CROSS_TOOLCHAIN_PREFIX=$CROSS_TOOLCHAIN_PREFIX
ENV CROSS_SYSROOT=$CROSS_SYSROOT
ENV CARGO_TARGET_AARCH64_UNKNOWN_FREEBSD_LINKER="${CROSS_TOOLCHAIN_PREFIX}clang" \
CARGO_BUILD_TARGET=$RUST_TARGET \
AR_aarch64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}ar" \
CC_aarch64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}clang" \
CXX_aarch64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}clang++" \
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_freebsd=/opt/toolchain.cmake \
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_freebsd="--sysroot=$CROSS_SYSROOT" \
RUST_TEST_THREADS=1 \
PKG_CONFIG_ALLOW_CROSS_aarch64_unknown_freebsd=true \
PKG_CONFIG_PATH="/usr/$CROSS_TOOLCHAIN/usr/lib/pkgconfig/:/usr/local/$CROSS_TOOLCHAIN/lib/pkgconfig/:/usr/lib/$CROSS_TOOLCHAIN/pkgconfig/" \
PKG_CONFIG_ALLOW_CROSS=1 \
CROSS_CMAKE_SYSTEM_NAME=FreeBSD \
CROSS_CMAKE_SYSTEM_PROCESSOR=arm64 \
CROSS_CMAKE_CRT=freebsd \
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m64"
60 changes: 60 additions & 0 deletions docker/target/clang/x86_64-unknown-freebsd.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step2-clang-stable
FROM ${IMG_BASE}

# Build CMDS
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG OPENSSL_VERSION=openssl-3.4.0
ARG FREEBSD_MAJOR=13

ARG RUST_TARGET=x86_64-unknown-freebsd
ARG FREEBSD_ARCH=amd64

ARG CROSS_TOOLCHAIN=x86_64-unknown-freebsd${FREEBSD_MAJOR}
ARG CROSS_TOOLCHAIN_PREFIX=${CROSS_TOOLCHAIN}-
ARG CROSS_SYSROOT=/usr/${CROSS_TOOLCHAIN}

ARG OPENSSL_COMBO=BSD-x86_64

ARG LLVM_TARGET=$RUST_TARGET

# Copy required scripts and Dockerfile
COPY ./scripts/target/clang /ink/scripts/target/clang
COPY ./scripts/target/bsd/freebsd /ink/scripts/target/bsd/freebsd
COPY ./docker/target/clang/$RUST_TARGET.Dockerfile /ink/dockerfiles

# Setup clang
ENV PATH=$PATH:$CROSS_SYSROOT/usr/bin
RUN /ink/scripts/target/clang/setup-clang.sh

# Install freebsd
RUN /ink/scripts/target/bsd/freebsd/extract-freebsd-sysroot.sh

# Openssl
ENV OPENSSL_DIR=$CROSS_SYSROOT/usr
RUN /ink/scripts/target/clang/install-openssl-clang.sh

# Install rust target
ENV RUST_TARGET=$RUST_TARGET
RUN rustup target add "$RUST_TARGET"

ENV CROSS_TOOLCHAIN_PREFIX=$CROSS_TOOLCHAIN_PREFIX
ENV CROSS_SYSROOT=$CROSS_SYSROOT
ENV CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER="${CROSS_TOOLCHAIN_PREFIX}clang" \
CARGO_BUILD_TARGET=$RUST_TARGET \
AR_x86_64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}ar" \
CC_x86_64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}clang" \
CXX_x86_64_unknown_freebsd="${CROSS_TOOLCHAIN_PREFIX}clang++" \
CMAKE_TOOLCHAIN_FILE_x86_64_unknown_freebsd=/opt/toolchain.cmake \
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_freebsd="--sysroot=$CROSS_SYSROOT" \
RUST_TEST_THREADS=1 \
PKG_CONFIG_ALLOW_CROSS_x86_64_unknown_freebsd=true \
PKG_CONFIG_PATH="/usr/$CROSS_TOOLCHAIN/usr/lib/pkgconfig/:/usr/local/$CROSS_TOOLCHAIN/lib/pkgconfig/:/usr/lib/$CROSS_TOOLCHAIN/pkgconfig/" \
PKG_CONFIG_ALLOW_CROSS=1 \
CROSS_CMAKE_SYSTEM_NAME=FreeBSD \
CROSS_CMAKE_SYSTEM_PROCESSOR=amd64 \
CROSS_CMAKE_CRT=freebsd \
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m64"
60 changes: 60 additions & 0 deletions docker/target/clang/x86_64-unknown-netbsd.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step2-clang-stable
FROM ${IMG_BASE}

# Build CMDS
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG OPENSSL_VERSION=openssl-3.4.0
ARG NETBSD_MAJOR=10

ARG RUST_TARGET=x86_64-unknown-netbsd
ARG NETBSD_ARCH=amd64

ARG CROSS_TOOLCHAIN=x86_64-unknown-netbsd${NETBSD_MAJOR}
ARG CROSS_TOOLCHAIN_PREFIX=${CROSS_TOOLCHAIN}-
ARG CROSS_SYSROOT=/usr/${CROSS_TOOLCHAIN}

ARG OPENSSL_COMBO=BSD-x86_64

ARG LLVM_TARGET=$RUST_TARGET

# Copy required scripts and Dockerfile
COPY ./scripts/target/clang /ink/scripts/target/clang
COPY ./scripts/target/bsd/netbsd /ink/scripts/target/bsd/netbsd
COPY ./docker/target/clang/$RUST_TARGET.Dockerfile /ink/dockerfiles

# Setup clang
ENV PATH=$PATH:$CROSS_SYSROOT/usr/bin
RUN /ink/scripts/target/clang/setup-clang.sh

# Install freebsd
RUN /ink/scripts/target/bsd/netbsd/extract-netbsd-sysroot.sh

# Openssl
ENV OPENSSL_DIR=$CROSS_SYSROOT/usr
RUN /ink/scripts/target/clang/install-openssl-clang.sh

# Install rust target
ENV RUST_TARGET=$RUST_TARGET
RUN rustup target add "$RUST_TARGET"

ENV CROSS_TOOLCHAIN_PREFIX=$CROSS_TOOLCHAIN_PREFIX
ENV CROSS_SYSROOT=$CROSS_SYSROOT
ENV CARGO_TARGET_X86_64_UNKNOWN_NETBSD_LINKER="${CROSS_TOOLCHAIN_PREFIX}clang" \
CARGO_BUILD_TARGET=$RUST_TARGET \
AR_x86_64_unknown_netbsd="${CROSS_TOOLCHAIN_PREFIX}ar" \
CC_x86_64_unknown_netbsd="${CROSS_TOOLCHAIN_PREFIX}clang" \
CXX_x86_64_unknown_netbsd="${CROSS_TOOLCHAIN_PREFIX}clang++" \
CMAKE_TOOLCHAIN_FILE_x86_64_unknown_netbsd=/opt/toolchain.cmake \
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_netbsd="--sysroot=$CROSS_SYSROOT" \
RUST_TEST_THREADS=1 \
PKG_CONFIG_ALLOW_CROSS_x86_64_unknown_netbsd=true \
PKG_CONFIG_PATH="/usr/$CROSS_TOOLCHAIN/usr/lib/pkgconfig/:/usr/local/$CROSS_TOOLCHAIN/lib/pkgconfig/:/usr/lib/$CROSS_TOOLCHAIN/pkgconfig/" \
PKG_CONFIG_ALLOW_CROSS=1 \
CROSS_CMAKE_SYSTEM_NAME=NetBSD \
CROSS_CMAKE_SYSTEM_PROCESSOR=amd64 \
CROSS_CMAKE_CRT=netbsd \
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m64"
66 changes: 66 additions & 0 deletions docker/target/clang/x86_64-unknown-openbsd.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# syntax=docker/dockerfile:1
ARG IMG_BASE=ghcr.io/cargo-prebuilt/ink-cross:base-step2-clang-nightly
FROM ${IMG_BASE}

################################
# This target is nightly ONLY! #
################################

# Build CMDS
ARG EXT_CURL_CMD="curl --retry 3 -fsSL --tlsv1.2"
ARG TARGETARCH

# Versioning
ARG OPENSSL_VERSION=openssl-3.4.0
# Bypass openbsd cdn listing a release that is not out. (#36)
ARG OPENBSD_MAJOR=7.6

ARG RUST_TARGET=x86_64-unknown-openbsd
ARG OPENBSD_ARCH=amd64

ARG CROSS_TOOLCHAIN=x86_64-unknown-openbsd${OPENBSD_MAJOR}
ARG CROSS_TOOLCHAIN_PREFIX=${CROSS_TOOLCHAIN}-
ARG CROSS_SYSROOT=/usr/${CROSS_TOOLCHAIN}

ARG OPENSSL_COMBO=BSD-x86_64

ARG LLVM_TARGET=$RUST_TARGET

# Copy required scripts and Dockerfile
COPY ./scripts/target/clang /ink/scripts/target/clang
COPY ./scripts/target/bsd/openbsd /ink/scripts/target/bsd/openbsd
COPY ./scripts/target/musl /ink/scripts/target/musl
COPY ./docker/target/clang/$RUST_TARGET.Dockerfile /ink/dockerfiles

# Setup clang
ENV PATH=$PATH:$CROSS_SYSROOT/usr/bin
RUN /ink/scripts/target/clang/setup-clang.sh

# Install freebsd
RUN /ink/scripts/target/bsd/openbsd/extract-openbsd-sysroot.sh

# Openssl
ENV OPENSSL_DIR=$CROSS_SYSROOT/usr
RUN /ink/scripts/target/musl/install-openssl-musl.sh

# Install rust target
ENV RUST_TARGET=$RUST_TARGET
# RUN rustup target add "$RUST_TARGET"

ENV CROSS_TOOLCHAIN_PREFIX=$CROSS_TOOLCHAIN_PREFIX
ENV CROSS_SYSROOT=$CROSS_SYSROOT
ENV CARGO_TARGET_X86_64_UNKNOWN_OPENBSD_LINKER=${CROSS_TOOLCHAIN_PREFIX}clang \
CARGO_BUILD_TARGET=$RUST_TARGET \
AR_x86_64_unknown_openbsd="${CROSS_TOOLCHAIN_PREFIX}ar" \
CC_x86_64_unknown_openbsd="${CROSS_TOOLCHAIN_PREFIX}clang" \
CXX_x86_64_unknown_openbsd="${CROSS_TOOLCHAIN_PREFIX}clang++" \
CMAKE_TOOLCHAIN_FILE_x86_64_unknown_openbsd=/opt/toolchain.cmake \
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_openbsd="--sysroot=$CROSS_SYSROOT" \
RUST_TEST_THREADS=1 \
PKG_CONFIG_ALLOW_CROSS_x86_64_unknown_openbsd=true \
PKG_CONFIG_PATH="/usr/$CROSS_TOOLCHAIN/usr/lib/pkgconfig/:/usr/local/$CROSS_TOOLCHAIN/lib/pkgconfig/:/usr/lib/$CROSS_TOOLCHAIN/pkgconfig/" \
PKG_CONFIG_ALLOW_CROSS=1 \
CROSS_CMAKE_SYSTEM_NAME=OpenBSD \
CROSS_CMAKE_SYSTEM_PROCESSOR=amd64 \
CROSS_CMAKE_CRT=openbsd \
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m64"
45 changes: 45 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
platforms := 'linux/arm64'
rust_version := 'stable'

default:
just -l

step0:
docker buildx build \
--platform={{ platforms }} \
-t ink:step0 \
-f docker/base/step0.Dockerfile \
.

step1: step0
docker buildx build \
--platform={{ platforms }} \
-t ink:step1-{{ rust_version }} \
-f docker/base/step1.Dockerfile \
--build-arg IMG_BASE=ink:step0 \
--build-arg RUST_VERSION={{ rust_version }} \
.

step2-clang: step1
docker buildx build \
--platform={{ platforms }} \
-t ink:step2-clang-{{ rust_version }} \
-f docker/base/step2-clang.Dockerfile \
--build-arg IMG_BASE=ink:step1-{{ rust_version }} \
.

target-gnu TARGET: step1
docker buildx build \
--platform={{ platforms }} \
-t ink:{{ rust_version }}-{{ TARGET }} \
-f docker/target/gnu/{{ TARGET }}.Dockerfile \
--build-arg IMG_BASE=ink:step1-{{ rust_version }} \
.

target-clang TARGET: step2-clang
docker buildx build \
--platform={{ platforms }} \
-t ink:{{ rust_version }}-{{ TARGET }} \
-f docker/target/clang/{{ TARGET }}.Dockerfile \
--build-arg IMG_BASE=ink:step2-clang-{{ rust_version }} \
.
Loading

0 comments on commit 00e992c

Please sign in to comment.