|
1 | | -FROM rust:bookworm@sha256:29fe4376919e25b7587a1063d7b521d9db735fc137d3cf30ae41eb326d209471 AS rust-builder-base |
2 | | -COPY external/diffgen/ /app/external/diffgen |
3 | | -RUN cd /app/external/diffgen/ && cargo fetch |
| 1 | +## Builder stages run on the build platform and cross-compile to TARGETARCH, |
| 2 | +## so multi-arch builds don't pay for QEMU emulation of cargo/rustc/go. |
| 3 | +FROM --platform=$BUILDPLATFORM rust:bookworm@sha256:29fe4376919e25b7587a1063d7b521d9db735fc137d3cf30ae41eb326d209471 AS rust-builder-base |
| 4 | +WORKDIR /app/external/diffgen |
| 5 | +COPY external/diffgen/Cargo.toml external/diffgen/Cargo.lock ./ |
| 6 | +## cargo fetch only needs the manifests; a stub lib.rs keeps this layer |
| 7 | +## cached across source-only changes |
| 8 | +RUN mkdir -p src && touch src/lib.rs && cargo fetch |
4 | 9 |
|
5 | 10 | FROM rust-builder-base AS rust-builder |
| 11 | +ARG BUILDARCH |
| 12 | +ARG TARGETARCH |
| 13 | +ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc \ |
| 14 | + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc |
| 15 | +RUN case "$TARGETARCH" in \ |
| 16 | + amd64) echo x86_64-unknown-linux-gnu > /rust-target ;; \ |
| 17 | + arm64) echo aarch64-unknown-linux-gnu > /rust-target ;; \ |
| 18 | + *) echo "unsupported TARGETARCH: $TARGETARCH" >&2; exit 1 ;; \ |
| 19 | + esac && \ |
| 20 | + rustup target add "$(cat /rust-target)" && \ |
| 21 | + if [ "$BUILDARCH" != "$TARGETARCH" ]; then \ |
| 22 | + apt-get update && \ |
| 23 | + case "$TARGETARCH" in \ |
| 24 | + amd64) apt-get install -y --no-install-recommends gcc-x86-64-linux-gnu libc6-dev-amd64-cross ;; \ |
| 25 | + arm64) apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu libc6-dev-arm64-cross ;; \ |
| 26 | + esac && \ |
| 27 | + rm -rf /var/lib/apt/lists/*; \ |
| 28 | + fi |
| 29 | +COPY external/diffgen/src ./src |
| 30 | +## cgo links target/release/libdiffgen.a by fixed path, so place the |
| 31 | +## cross-compiled staticlib where a native build would put it |
| 32 | +RUN cargo build --release --target "$(cat /rust-target)" && \ |
| 33 | + mkdir -p target/release && \ |
| 34 | + cp "target/$(cat /rust-target)/release/libdiffgen.a" target/release/libdiffgen.a |
| 35 | + |
| 36 | +FROM --platform=$BUILDPLATFORM golang:1.26-bookworm@sha256:4f4ab2c90005e7e63cb631f0b4427f05422f241622ee3ec4727cc5febbf83e34 AS builder-base |
6 | 37 | WORKDIR /app |
7 | | -COPY Makefile /app |
8 | | -COPY external/diffgen /app/external/diffgen |
9 | | -RUN make rust-diffgen |
10 | | - |
11 | | -FROM golang:1.26-bookworm@sha256:4f4ab2c90005e7e63cb631f0b4427f05422f241622ee3ec4727cc5febbf83e34 AS builder-base |
12 | | -WORKDIR /app |
13 | | - |
14 | | -ARG VERSION |
15 | 38 |
|
16 | 39 | COPY go.mod /app/go.mod |
17 | 40 | COPY go.sum /app/go.sum |
18 | 41 | RUN go mod download |
19 | 42 |
|
20 | 43 | FROM builder-base AS builder |
21 | 44 |
|
| 45 | +ARG VERSION |
| 46 | +ARG BUILDARCH |
| 47 | +ARG TARGETARCH |
| 48 | +RUN if [ "$BUILDARCH" != "$TARGETARCH" ]; then \ |
| 49 | + apt-get update && \ |
| 50 | + case "$TARGETARCH" in \ |
| 51 | + amd64) apt-get install -y --no-install-recommends gcc-x86-64-linux-gnu libc6-dev-amd64-cross ;; \ |
| 52 | + arm64) apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu libc6-dev-arm64-cross ;; \ |
| 53 | + *) echo "unsupported TARGETARCH: $TARGETARCH" >&2; exit 1 ;; \ |
| 54 | + esac && \ |
| 55 | + rm -rf /var/lib/apt/lists/*; \ |
| 56 | + fi |
| 57 | + |
22 | 58 | COPY ./ ./ |
23 | 59 |
|
24 | | -COPY --from=rust-builder /app/external/diffgen/target ./external/diffgen/target |
| 60 | +COPY --from=rust-builder /app/external/diffgen/target/release ./external/diffgen/target/release |
25 | 61 |
|
26 | | -RUN make build-prod |
| 62 | +RUN if [ "$BUILDARCH" != "$TARGETARCH" ]; then \ |
| 63 | + case "$TARGETARCH" in \ |
| 64 | + amd64) export CC=x86_64-linux-gnu-gcc ;; \ |
| 65 | + arm64) export CC=aarch64-linux-gnu-gcc ;; \ |
| 66 | + esac; \ |
| 67 | + fi && \ |
| 68 | + CGO_ENABLED=1 GOOS=linux GOARCH="$TARGETARCH" make build-prod |
27 | 69 |
|
28 | 70 | FROM flanksource/base-image:0.7.1@sha256:5e819e83199855d20ba5b988e8a6f369c6f4332fa6f07c184c99838d06a77cc8 |
29 | 71 |
|
|
0 commit comments