fix: install cross-architecture unixodbc-dev for Docker multi-platform builds

Install both arm64 and amd64 versions of unixodbc-dev and set
LIBRARY_PATH/PKG_CONFIG_PATH to the target architecture's lib dir
so cargo-zigbuild can find the correct libodbc when cross-compiling.
This commit is contained in:
t8y2 2026-05-07 14:45:17 +08:00
parent 75d7edda27
commit d4aeb7af68
1 changed files with 13 additions and 6 deletions

View File

@ -16,9 +16,10 @@ RUN pnpm build
FROM --platform=$BUILDPLATFORM rust:1-bookworm AS backend
ARG TARGETARCH
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
RUN dpkg --add-architecture arm64 && dpkg --add-architecture amd64 \
&& apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake pkg-config perl python3-pip gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu \
unixodbc-dev \
unixodbc-dev unixodbc-dev:arm64 unixodbc-dev:amd64 \
&& pip3 install --break-system-packages ziglang \
&& cargo install cargo-zigbuild \
&& rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu \
@ -38,10 +39,13 @@ COPY src-tauri/build.rs src-tauri/
COPY src-tauri/tauri.conf.json src-tauri/
RUN case "$TARGETARCH" in \
amd64) rust_target=x86_64-unknown-linux-gnu ;; \
arm64) rust_target=aarch64-unknown-linux-gnu ;; \
amd64) rust_target=x86_64-unknown-linux-gnu; lib_arch=x86_64-linux-gnu ;; \
arm64) rust_target=aarch64-unknown-linux-gnu; lib_arch=aarch64-linux-gnu ;; \
*) echo "Unsupported TARGETARCH: $TARGETARCH" >&2; exit 1 ;; \
esac && \
LIBRARY_PATH="/usr/lib/$lib_arch" \
PKG_CONFIG_PATH="/usr/lib/$lib_arch/pkgconfig" \
PKG_CONFIG_SYSROOT_DIR="/" \
cargo zigbuild --release -p dbx-web --target "$rust_target" || true
# Copy real sources and rebuild (only application code recompiles)
@ -49,10 +53,13 @@ COPY crates/ crates/
COPY src-web/ src-web/
RUN case "$TARGETARCH" in \
amd64) rust_target=x86_64-unknown-linux-gnu ;; \
arm64) rust_target=aarch64-unknown-linux-gnu ;; \
amd64) rust_target=x86_64-unknown-linux-gnu; lib_arch=x86_64-linux-gnu ;; \
arm64) rust_target=aarch64-unknown-linux-gnu; lib_arch=aarch64-linux-gnu ;; \
*) echo "Unsupported TARGETARCH: $TARGETARCH" >&2; exit 1 ;; \
esac && \
LIBRARY_PATH="/usr/lib/$lib_arch" \
PKG_CONFIG_PATH="/usr/lib/$lib_arch/pkgconfig" \
PKG_CONFIG_SYSROOT_DIR="/" \
cargo zigbuild --release -p dbx-web --target "$rust_target" && \
mkdir -p "/out/linux/$TARGETARCH" && \
cp "/app/target/$rust_target/release/dbx-web" "/out/linux/$TARGETARCH/"