feat: containerize build environment with Docker
- docker/Dockerfile: multi-stage image (linux-builder + windows-builder)
- linux-builder: Ubuntu 22.04 + OpenCV/LibRaw/Qt6 + GTest
- windows-builder: MXE cross-compilation (x86_64-w64-mingw32.static)
with OpenCV4, LibRaw, Qt6 for Windows .exe output
- docker-compose.yml: services for linux, windows-build, shell
- scripts/docker-build.sh: convenience wrapper
- linux|windows|all targets
- --no-cache, --run flags
Usage:
./scripts/docker-build.sh linux --run
./scripts/docker-build.sh windows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
116
docker/Dockerfile
Normal file
116
docker/Dockerfile
Normal file
@@ -0,0 +1,116 @@
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# 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"]
|
||||
Reference in New Issue
Block a user