Edit

IABSD.fr/xenocara/lib/pixman/.gitlab-ci.d/01-docker/Dockerfile

Branch :

  • Show log

    Commit

  • Author : matthieu
    Date : 2025-08-12 16:39:28
    Hash : 81405b23
    Message : Update to pixman 0.46.4. tested in a bulk ports build and ok jca@ runs of the tests on differents by gkoeler@, jca@ and others.

  • lib/pixman/.gitlab-ci.d/01-docker/Dockerfile
  • ARG BASE_IMAGE=docker.io/debian
    ARG BASE_IMAGE_TAG=bookworm-slim
    FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG} AS base-image
    
    ENV APT_UPDATE="apt-get update" \
        APT_INSTALL="env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends" \
        APT_CLEANUP="rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*"
    
    FROM base-image AS base
    
    LABEL org.opencontainers.image.title="Pixman build environment for platform coverage" \
          org.opencontainers.image.authors="Marek PikuĊ‚a <m.pikula@partner.samsung.com>"
    
    ARG GCOVR_VERSION="~=7.2"
    ARG MESON_VERSION="~=1.7"
    RUN echo "deb http://deb.debian.org/debian bookworm-backports main" >  /etc/apt/sources.list.d/debian-12-backports.list \
        && ${APT_UPDATE} \
        && ${APT_INSTALL} \
            # Build dependencies.
            build-essential \
            ninja-build \
            pkg-config \
            # pipx dependencies.
            python3-argcomplete \
            python3-packaging \
            python3-pip \
            python3-platformdirs \
            python3-userpath \
            python3-venv \
            # gcovr dependencies.
            python3-lxml \
        # User bookworm-backports for QEMU, as it has version 7 by default, which
        # has some issues.
        && ${APT_INSTALL} \
            $(grep bookworm /etc/os-release >/dev/null && echo -t bookworm-backports) \
            qemu-user \
        && ${APT_CLEANUP} \
        # Install pipx using pip to have a more recent version of pipx, which
        # supports the `--global` flag.
        && pip install pipx --break-system-packages \
        # Install a recent version of meson and gcovr using pipx to have the same
        # version across all variants regardless of base.
        && pipx install --global --system-site-packages \
            gcovr${GCOVR_VERSION} \
            meson${MESON_VERSION} \
        && gcovr --version \
        && echo Meson version: \
        && meson --version
    
    FROM base AS llvm-base
    # LLVM 16 is the highest available in Bookworm. Preferably, we should use the
    # same version for all platforms, but it's not possible at the moment.
    ARG LLVM_VERSION=16
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} \
            clang-${LLVM_VERSION} \
            libclang-rt-${LLVM_VERSION}-dev \
            lld-${LLVM_VERSION} \
            llvm-${LLVM_VERSION} \
        && ${APT_CLEANUP} \
        && ln -f /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang \
        && ln -f /usr/bin/lld-${LLVM_VERSION} /usr/bin/lld \
        && ln -f /usr/bin/llvm-ar-${LLVM_VERSION} /usr/bin/llvm-ar \
        && ln -f /usr/bin/llvm-strip-${LLVM_VERSION} /usr/bin/llvm-strip
    
    FROM llvm-base AS native-base
    ARG LLVM_VERSION=16
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} \
            # Runtime library dependencies.
            libglib2.0-dev \
            libgtk-3-dev \
            libpng-dev \
        # Install libomp-dev if available (OpenMP support for LLVM). It's done only
        # for the native images, as OpenMP support in cross-build environment is
        # tricky for LLVM.
        && (${APT_INSTALL} libomp-${LLVM_VERSION}-dev \
            || echo "OpenMP not available on this platform.") \
        && ${APT_CLEANUP}
    
    # The following targets differ in BASE_IMAGE.
    FROM native-base AS linux-386
    FROM native-base AS linux-amd64
    FROM native-base AS linux-arm-v5
    FROM native-base AS linux-arm-v7
    FROM native-base AS linux-arm64-v8
    FROM native-base AS linux-mips64le
    FROM native-base AS linux-mipsel
    FROM native-base AS linux-ppc64le
    FROM native-base AS linux-riscv64
    
    # The following targets should have a common BASE_IMAGE.
    FROM llvm-base AS linux-mips
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} gcc-multilib-mips-linux-gnu \
        && ${APT_CLEANUP}
    
    FROM llvm-base AS linux-ppc
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} gcc-multilib-powerpc-linux-gnu \
        && ${APT_CLEANUP}
    
    FROM llvm-base AS linux-ppc64
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} gcc-multilib-powerpc64-linux-gnu \
        && ${APT_CLEANUP}
    
    # Windows base image with a pre-built LLVM MinGW toolchain.
    FROM base-image AS windows-llvm-base-build
    ARG LLVM_MINGW_RELEASE=20250402
    ARG LLVM_MINGW_VARIANT=llvm-mingw-${LLVM_MINGW_RELEASE}-ucrt-ubuntu-20.04
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} \
            ca-certificates \
            wget \
            xz-utils \
        && ${APT_CLEANUP} \
        && wget https://github.com/mstorsjo/llvm-mingw/releases/download/${LLVM_MINGW_RELEASE}/${LLVM_MINGW_VARIANT}-`uname -m`.tar.xz \
            -O - | tar -xJ -C /opt \
        && mv /opt/llvm* /opt/llvm
    
    FROM base AS windows-llvm-base
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} procps \
        && ${APT_CLEANUP}
    COPY --from=windows-llvm-base-build /opt/llvm /opt/llvm
    ENV PATH=/opt/llvm/bin:${PATH} \
        # Inspired by https://code.videolan.org/videolan/docker-images
        WINE_BOOT='wine wineboot --init \
            && while pgrep wineserver > /dev/null; do \
                echo "waiting ..."; \
                sleep 1; \
            done \
            && rm -rf /tmp/wine-*'
    
    FROM windows-llvm-base AS windows-686
    ENV WINEPATH=/opt/llvm/i686-w64-mingw32/bin \
        WINEARCH=win32
    RUN dpkg --add-architecture i386 \
        && ${APT_UPDATE} \
        && ${APT_INSTALL} \
            libwine:i386 \
            wine \
            wine32 \
        && ${APT_CLEANUP} \
        && ${WINE_BOOT}
    
    # Dependencies needed both for Wine build and the final image.
    FROM windows-llvm-base AS windows-wine-build-base
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} \
            libfreetype-dev \
            libgnutls28-dev \
            libkrb5-dev \
            libx11-dev \
            libxcomposite-dev \
            libxcursor-dev \
            libxext-dev \
            libxfixes-dev \
            libxi-dev \
            libxrandr-dev \
            libxrender-dev \
        && ${APT_CLEANUP}
    
    # Wine build intermediate target, not going into the final image.
    FROM windows-wine-build-base AS windows-wine-build
    RUN ${APT_UPDATE} \
        && ${APT_INSTALL} \
            bison \
            ca-certificates \
            clang \
            flex \
            git \
            lld \
            llvm \
        && ${APT_CLEANUP}
    ARG WINE_VERSION=10.5
    RUN git clone https://gitlab.winehq.org/wine/wine.git \
            -b wine-${WINE_VERSION} \
            --depth 1
    RUN cd wine \
        && ./configure --enable-win64 --disable-tests --without-unwind --prefix=/opt/wine \
        && make -j`nproc` \
        && make install
    
    FROM windows-llvm-base AS windows-amd64
    COPY --from=windows-wine-build /opt/wine /opt/wine
    ENV PATH=/opt/wine/bin:${PATH} \
        WINEPATH=/opt/llvm/x86_64-w64-mingw32/bin
    RUN ${WINE_BOOT}
    
    FROM windows-wine-build-base AS windows-arm64-v8
    COPY --from=windows-wine-build /opt/wine /opt/wine
    ENV PATH=/opt/wine/bin:${PATH} \
        WINEPATH=/opt/llvm/aarch64-w64-mingw32/bin
    RUN ${WINE_BOOT}