11# This will be the main build image
22FROM --platform=${BUILDPLATFORM} lukemathwalker/cargo-chef:latest-rust-1.83 AS chef
3- ARG TARGETOS TARGETARCH BUILDPLATFORM OPENSSL_VENDORED TARGET_CRATE
3+ ARG TARGETOS TARGETARCH BUILDPLATFORM TARGET_CRATE
44WORKDIR /app
55
66FROM --platform=${BUILDPLATFORM} chef AS planner
7- ARG TARGETOS TARGETARCH BUILDPLATFORM OPENSSL_VENDORED TARGET_CRATE
7+ ARG TARGETOS TARGETARCH BUILDPLATFORM TARGET_CRATE
88COPY . .
99RUN cargo chef prepare --recipe-path recipe.json
1010
1111FROM --platform=${BUILDPLATFORM} chef AS builder
12- ARG TARGETOS TARGETARCH BUILDPLATFORM OPENSSL_VENDORED TARGET_CRATE
12+ ARG TARGETOS TARGETARCH BUILDPLATFORM TARGET_CRATE
1313RUN test -n "$TARGET_CRATE" || (echo "TARGET_CRATE must be set to the service / binary you want to build" && false)
1414ENV BUILD_VAR_SCRIPT=/tmp/env.sh
1515COPY --from=planner /app/recipe.json recipe.json
@@ -18,43 +18,33 @@ COPY --from=planner /app/recipe.json recipe.json
1818RUN if [ "$BUILDPLATFORM" = "linux/amd64" -a "$TARGETARCH" = "arm64" ]; then \
1919 # We're on x64, cross-compiling for arm64
2020 rustup target add aarch64-unknown-linux-gnu && \
21+ dpkg --add-architecture arm64 && \
2122 apt update && \
22- apt install -y gcc-aarch64-linux-gnu && \
23+ apt install -y gcc-aarch64-linux-gnu libssl-dev:arm64 zlib1g-dev:arm64 && \
2324 echo "#!/bin/sh" > ${BUILD_VAR_SCRIPT} && \
2425 echo "export TARGET=aarch64-unknown-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
2526 echo "export TARGET_FLAG=--target=aarch64-unknown-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
2627 echo "export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/aarch64-linux-gnu-gcc" >> ${BUILD_VAR_SCRIPT} && \
2728 echo "export RUSTFLAGS=\" -L /usr/aarch64-linux-gnu/lib -L $(dirname $(aarch64-linux-gnu-gcc -print-libgcc-file-name))\" " >> ${BUILD_VAR_SCRIPT} && \
28- if [ "$OPENSSL_VENDORED" != "true" ]; then \
29- # If we're linking to OpenSSL dynamically, we have to set it up for cross-compilation
30- dpkg --add-architecture arm64 && \
31- apt update && \
32- apt install -y libssl-dev:arm64 zlib1g-dev:arm64 && \
33- echo "export PKG_CONFIG_ALLOW_CROSS=true" >> ${BUILD_VAR_SCRIPT} && \
34- echo "export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig" >> ${BUILD_VAR_SCRIPT} && \
35- echo "export OPENSSL_INCLUDE_DIR=/usr/include/aarch64-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
36- echo "export OPENSSL_LIB_DIR=/usr/lib/aarch64-linux-gnu" >> ${BUILD_VAR_SCRIPT}; \
37- fi; \
29+ echo "export PKG_CONFIG_ALLOW_CROSS=true" >> ${BUILD_VAR_SCRIPT} && \
30+ echo "export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig" >> ${BUILD_VAR_SCRIPT} && \
31+ echo "export OPENSSL_INCLUDE_DIR=/usr/include/aarch64-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
32+ echo "export OPENSSL_LIB_DIR=/usr/lib/aarch64-linux-gnu" >> ${BUILD_VAR_SCRIPT}; \
3833 elif [ "$BUILDPLATFORM" = "linux/arm64" -a "$TARGETARCH" = "amd64" ]; then \
3934 # We're on arm64, cross-compiling for x64
4035 rustup target add x86_64-unknown-linux-gnu && \
36+ dpkg --add-architecture amd64 && \
4137 apt update && \
42- apt install -y gcc-x86-64-linux-gnu && \
38+ apt install -y gcc-x86-64-linux-gnu libssl-dev:amd64 zlib1g-dev:amd64 && \
4339 echo "#!/bin/sh" > ${BUILD_VAR_SCRIPT} && \
4440 echo "export TARGET=x86_64-unknown-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
4541 echo "export TARGET_FLAG=--target=x86_64-unknown-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
4642 echo "export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/x86_64-linux-gnu-gcc" >> ${BUILD_VAR_SCRIPT} && \
4743 echo "export RUSTFLAGS=\" -L /usr/x86_64-linux-gnu/lib -L $(dirname $(x86_64-linux-gnu-gcc -print-libgcc-file-name))\" " >> ${BUILD_VAR_SCRIPT} && \
48- if [ "$OPENSSL_VENDORED" != "true" ]; then \
49- # If we're linking to OpenSSL dynamically, we have to set it up for cross-compilation
50- dpkg --add-architecture amd64 && \
51- apt update && \
52- apt install -y libssl-dev:amd64 zlib1g-dev:amd64 && \
53- echo "export PKG_CONFIG_ALLOW_CROSS=true" >> ${BUILD_VAR_SCRIPT} && \
54- echo "export PKG_CONFIG_LIBDIR=/usr/lib/x86_64-linux-gnu/pkgconfig" >> ${BUILD_VAR_SCRIPT} && \
55- echo "export OPENSSL_INCLUDE_DIR=/usr/include/x86_64-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
56- echo "export OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu" >> ${BUILD_VAR_SCRIPT}; \
57- fi; \
44+ echo "export PKG_CONFIG_ALLOW_CROSS=true" >> ${BUILD_VAR_SCRIPT} && \
45+ echo "export PKG_CONFIG_LIBDIR=/usr/lib/x86_64-linux-gnu/pkgconfig" >> ${BUILD_VAR_SCRIPT} && \
46+ echo "export OPENSSL_INCLUDE_DIR=/usr/include/x86_64-linux-gnu" >> ${BUILD_VAR_SCRIPT} && \
47+ echo "export OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu" >> ${BUILD_VAR_SCRIPT}; \
5848 fi
5949
6050# Run cook to prep the build
@@ -64,14 +54,8 @@ RUN if [ -f ${BUILD_VAR_SCRIPT} ]; then \
6454 else \
6555 echo "No cross-compilation needed" ; \
6656 fi && \
67- if [ "$OPENSSL_VENDORED" = "true" ]; then \
68- echo "Using vendored OpenSSL" && \
69- FEATURE_OPENSSL_VENDORED='--features openssl-vendored' ; \
70- else \
71- echo "Using system OpenSSL" ; \
72- fi && \
7357 export GIT_HASH=$(git rev-parse HEAD) && \
74- cargo chef cook ${TARGET_FLAG} --release --recipe-path recipe.json ${FEATURE_OPENSSL_VENDORED}
58+ cargo chef cook ${TARGET_FLAG} --release --recipe-path recipe.json
7559
7660# Get the latest Protoc since the one in the Debian repo is incredibly old
7761COPY provisioning/protoc.sh provisioning/protoc.sh
@@ -88,14 +72,8 @@ RUN if [ -f ${BUILD_VAR_SCRIPT} ]; then \
8872 else \
8973 echo "No cross-compilation needed" ; \
9074 fi && \
91- if [ "$OPENSSL_VENDORED" = "true" ]; then \
92- echo "Using vendored OpenSSL" && \
93- FEATURE_OPENSSL_VENDORED='--features openssl-vendored' ; \
94- else \
95- echo "Using system OpenSSL" ; \
96- fi && \
9775 export GIT_HASH=$(git rev-parse HEAD) && \
98- cargo build ${TARGET_FLAG} --release --bin ${TARGET_CRATE} ${FEATURE_OPENSSL_VENDORED} && \
76+ cargo build ${TARGET_FLAG} --release --bin ${TARGET_CRATE} && \
9977 if [ ! -z "$TARGET" ]; then \
10078 # If we're cross-compiling, we need to move the binary out of the target dir
10179 mv target/${TARGET}/release/${TARGET_CRATE} target/release/${TARGET_CRATE}; \
0 commit comments