11# syntax=docker/dockerfile:1
22
3- ARG BASE_IMAGE="ubuntu:20.04"
3+ ARG UBUNTU_BASE="ubuntu:20.04"
4+ # debian base is only used for armel builds
5+ ARG DEBIAN_BASE="debian:bullseye"
6+
47ARG GO_VERSION=1.18.1
58ARG XX_VERSION=1.1.0
69
@@ -33,34 +36,31 @@ ARG DOCKERCLI_VERSION=v17.06.2-ce
3336# cross compilation helper
3437FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
3538
39+ # go base image to retrieve /usr/local/go
40+ FROM --platform=$BUILDPLATFORM golang:${GO_VERSION} AS golang
41+
3642# dummy stage to make sure the image is built for unsupported deps
3743FROM --platform=$BUILDPLATFORM busybox AS build-dummy
3844RUN mkdir -p /out
3945FROM scratch AS binary-dummy
4046COPY --from=build-dummy / /
4147
42- FROM --platform=$BUILDPLATFORM ${BASE_IMAGE} AS golang
43- ARG DEBIAN_FRONTEND
44- RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates curl jq
45- WORKDIR /golang
46- RUN curl -m30 --retry 5 --retry-connrefused --retry-delay 5 -sSL "https://go.dev/dl/?mode=json&include=all" -o "godist.json"
47- ARG GO_VERSION
48- ARG BUILDOS
49- ARG BUILDARCH
50- ENV PATH="/usr/local/go/bin:$PATH"
51- RUN <<EOT
52- GO_DIST_FILE=go${GO_VERSION%.0}.${BUILDOS}-${BUILDARCH}.tar.gz
53- GO_DIST_URL=https://golang.org/dl/${GO_DIST_FILE}
54- SHA256=$(cat godist.json | jq -r ".[] | select(.version==\" go${GO_VERSION%.0}\" ) | .files[] | select(.filename==\" $GO_DIST_FILE\" ).sha256" )
55- curl -sSL "$GO_DIST_URL.asc" -o "go.tgz.asc"
56- curl -sSL "$GO_DIST_URL" -o "go.tgz"
57- echo "$SHA256 *go.tgz" | sha256sum -c -
58- tar -C /usr/local -xzf go.tgz
59- go version
60- EOT
61-
62- FROM --platform=$BUILDPLATFORM ${BASE_IMAGE} AS base
48+ FROM --platform=$BUILDPLATFORM ${UBUNTU_BASE} AS base-ubuntu
49+ FROM --platform=$BUILDPLATFORM ${DEBIAN_BASE} AS base-debian
50+ FROM base-ubuntu AS base-windows
51+ FROM base-ubuntu AS base-linux-amd64
52+ FROM base-debian AS base-linux-armv5
53+ FROM base-debian AS base-linux-armv6
54+ FROM base-ubuntu AS base-linux-armv7
55+ FROM base-ubuntu AS base-linux-arm64
56+ FROM base-ubuntu AS base-linux-ppc64le
57+ FROM base-ubuntu AS base-linux-riscv64
58+ FROM base-ubuntu AS base-linux-s390x
59+
60+ FROM base-linux-${TARGETARCH}${TARGETVARIANT} AS base-linux
61+ FROM base-${TARGETOS} AS base
6362COPY --from=xx / /
63+ ENV XX_APT_PREFER_CROSS=1
6464RUN echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
6565ENV GO111MODULE=off
6666ARG DEBIAN_FRONTEND
@@ -169,8 +169,6 @@ RUN git clone https://github.com/krallin/tini.git tini
169169FROM base AS tini-base
170170WORKDIR /go/src/github.com/krallin/tini
171171ARG DEBIAN_FRONTEND
172- RUN apt-get update && apt-get install -y clang
173- ENV XX_CC_PREFER_LINKER=ld
174172ARG TARGETPLATFORM
175173RUN --mount=type=cache,sharing=locked,id=moby-tini-aptlib,target=/var/lib/apt \
176174 --mount=type=cache,sharing=locked,id=moby-tini-aptcache,target=/var/cache/apt \
@@ -184,7 +182,7 @@ RUN --mount=from=tini-src,src=/usr/src/tini,rw \
184182 export TINI_TARGET=$([ "$GO_LINKMODE" = "static" ] && echo "tini-static" || echo "tini" ) \
185183 && git fetch origin \
186184 && git checkout -q "$TINI_VERSION" \
187- && cmake $(xx-clang --print- cmake-defines) . \
185+ && CC= $(xx-info)-gcc cmake . \
188186 && make "$TINI_TARGET" \
189187 && xx-verify $([ "$GO_LINKMODE" = "static" ] && echo "--static" ) "$TINI_TARGET" \
190188 && mkdir /out \
0 commit comments