diff --git a/Dockerfile.windows b/Dockerfile.windows new file mode 100644 index 0000000..bbfe726 --- /dev/null +++ b/Dockerfile.windows @@ -0,0 +1,30 @@ +# Docker-Image zum Cross-Kompilieren von labelize für Windows (x86_64-pc-windows-gnu) +FROM rust:1.89-bookworm + +# Installiere Windows-Cross-Compiler und nötige Build-Tools +RUN apt-get update && apt-get install -y \ + mingw-w64 \ + cmake \ + && rm -rf /var/lib/apt/lists/* + +# Füge das Windows-Target hinzu +RUN rustup target add x86_64-pc-windows-gnu + +# Cargo-Konfiguration für den Windows-Linker +RUN printf '[target.x86_64-pc-windows-gnu]\nlinker = "x86_64-w64-mingw32-gcc"\n' > /usr/local/cargo/config.toml + +# Arbeitsverzeichnis +WORKDIR /app + +# Cache-Layer für Cargo-Abhängigkeiten +COPY Cargo.toml Cargo.lock ./ +RUN mkdir -p src && echo 'fn main() {}' > src/main.rs +RUN cargo build --release --target x86_64-pc-windows-gnu --features cli || true + +# Quellcode kopieren und bauen +COPY . . +RUN cargo build --release --target x86_64-pc-windows-gnu --features cli + +# Ausgabe-Ordner vorbereiten +RUN mkdir -p /output && \ + cp /app/target/x86_64-pc-windows-gnu/release/labelize.exe /output/labelize.exe diff --git a/build-windows.sh b/build-windows.sh new file mode 100644 index 0000000..b04f207 --- /dev/null +++ b/build-windows.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_NAME="labelize" +IMAGE_TAG="${PROJECT_NAME}:windows-build" +OUTPUT_DIR="${SCRIPT_DIR}/target/windows-release" + +echo "==> Baue Docker-Image für Windows-Cross-Build..." +docker build -f "${SCRIPT_DIR}/Dockerfile.windows" -t "${IMAGE_TAG}" "${SCRIPT_DIR}" + +echo "==> Extrahiere fertige Windows-EXE..." +mkdir -p "${OUTPUT_DIR}" +docker run --rm -v "${OUTPUT_DIR}:/out" "${IMAGE_TAG}" cp /output/labelize.exe /out/labelize.exe + +echo "==> Fertig: ${OUTPUT_DIR}/labelize.exe" +ls -lh "${OUTPUT_DIR}/labelize.exe" +file "${OUTPUT_DIR}/labelize.exe" || true