# ───────────────────────────────────────────────────────────────────────────── # photo-converter — Multi-Stage Build Image # # Stages: # base — Gemeinsame Tools (cmake, ninja, gcc) # linux-builder — Linux-Build mit OpenCV, LibRaw, Qt6 # windows-builder — Windows Cross-Compilation via MXE + MinGW-w64 # # Verwendung: # docker build --target linux-builder -t photo-converter:linux . # docker build --target windows-builder -t photo-converter:windows . # ───────────────────────────────────────────────────────────────────────────── # Ubuntu 22.04 LTS: MXE-Pakete sind für focal/jammy verfügbar ARG UBUNTU_VERSION=22.04 FROM ubuntu:${UBUNTU_VERSION} AS base ENV DEBIAN_FRONTEND=noninteractive \ TZ=UTC RUN apt-get update && apt-get install -y --no-install-recommends \ # Build-Tools cmake \ ninja-build \ build-essential \ pkg-config \ git \ # Hilfswerkzeuge wget \ curl \ unzip \ zip \ ca-certificates \ gnupg \ && rm -rf /var/lib/apt/lists/* WORKDIR /project # ───────────────────────────────────────────────────────────────────────────── # Stage: linux-builder # Linux-Build mit OpenCV, LibRaw, Qt6 # ───────────────────────────────────────────────────────────────────────────── FROM base AS linux-builder RUN apt-get update && apt-get install -y --no-install-recommends \ # OpenCV libopencv-dev \ # LibRaw libraw-dev \ # Qt6 qt6-base-dev \ libqt6widgets6 \ libxkbcommon-dev \ # GTest für Tests libgtest-dev \ # OpenGL (Qt-Abhängigkeit) libgl1-mesa-dev \ && rm -rf /var/lib/apt/lists/* COPY . /project # Standard: Release ohne GUI (GUI benötigt X11/Display) RUN cmake -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_GUI=OFF \ -DBUILD_TESTS=ON \ && cmake --build build --parallel "$(nproc)" \ && ctest --test-dir build --output-on-failure ENTRYPOINT ["./build/photo-converter"] CMD ["--batch", "--config", "config.ini"] # ───────────────────────────────────────────────────────────────────────────── # Stage: windows-builder # Windows Cross-Compilation via MXE (MinGW-w64 + statisch gelinkte Deps) # ───────────────────────────────────────────────────────────────────────────── FROM base AS windows-builder # MXE Repository einrichten RUN apt-get update && apt-get install -y --no-install-recommends \ apt-transport-https \ lsb-release \ && rm -rf /var/lib/apt/lists/* RUN curl -fsSL "https://pkg.mxe.cc/repos/apt/client-conf/mxeapt.gpg" \ -o /etc/apt/trusted.gpg.d/mxeapt.gpg \ && echo "deb [arch=amd64] https://pkg.mxe.cc/repos/apt focal main" \ > /etc/apt/sources.list.d/mxeapt.list # MXE-Pakete: OpenCV + LibRaw + Qt6 (statisch, x86_64) # Hinweis: Initial-Download ~3 GB, dauert je nach Bandbreite 10-30 Min. RUN apt-get update && apt-get install -y --no-install-recommends \ mxe-x86-64-w64-mingw32.static-cmake \ mxe-x86-64-w64-mingw32.static-opencv4 \ mxe-x86-64-w64-mingw32.static-libraw \ mxe-x86-64-w64-mingw32.static-qtbase \ mxe-x86-64-w64-mingw32.static-cc \ && rm -rf /var/lib/apt/lists/* ENV MXE_PREFIX=/usr/lib/mxe/usr/x86_64-w64-mingw32.static \ PATH="/usr/lib/mxe/usr/bin:${PATH}" COPY . /project RUN cmake -B build-windows -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw64.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="${MXE_PREFIX}" \ -DCMAKE_INSTALL_PREFIX=/project/dist-windows \ -DBUILD_GUI=ON \ -DBUILD_TESTS=OFF \ && cmake --build build-windows --parallel "$(nproc)" \ && cmake --install build-windows # Ergebnis: /project/dist-windows/bin/photo-converter.exe ENTRYPOINT ["/bin/bash"]