# Base Docker Image ARG BASE_IMAGE=alpine:latest FROM ${BASE_IMAGE} as builder # Install all needed build deps for Mesa3D ARG LLVM_VERSION=18 RUN set -xe; \ apk add --no-cache \ autoconf \ automake \ bison \ build-base \ cmake \ elfutils-dev \ expat-dev \ flex \ gettext \ git \ glproto \ libdrm-dev \ libtool \ libva-dev \ libx11-dev \ libxcb-dev \ libxdamage-dev \ libxext-dev \ libxfixes-dev \ libxrandr-dev \ libxshmfence-dev \ libxt-dev \ libxvmc-dev \ libxxf86vm-dev \ llvm${LLVM_VERSION} \ llvm${LLVM_VERSION}-dev \ llvm-libunwind-dev \ eudev-libs \ makedepend \ py3-meson-python \ py-mako \ py3-libxml2 \ py3-mako \ py3-yaml \ python3 \ python3-dev \ talloc-dev \ xorg-server-dev \ xorgproto \ zlib-dev \ zstd-dev; # Clone Mesa source repo. (this step caches) # Due to ongoing packaging issues we build from git vs tar packages # Refer to https://bugs.freedesktop.org/show_bug.cgi?id=107865 ARG MESA_VERSION=24.2 RUN set -xe; \ mkdir -p /var/tmp/build; \ cd /var/tmp/build/; \ git clone --depth=1 --branch=${MESA_VERSION} https://gitlab.freedesktop.org/mesa/mesa.git; # Build Mesa from source. ARG BUILD_TYPE=release ARG BUILD_OPTIMIZATION=3 RUN set -xe; \ cd /var/tmp/build/mesa; \ libtoolize; \ galium_drivers=softpipe,llvmpipe; \ meson setup \ --buildtype=${BUILD_TYPE} \ --prefix=/usr/local \ --sysconfdir=/etc \ -D b_ndebug=true \ -D gallium-nine=false \ -D gles1=disabled \ -D gles2=disabled \ -D opengl=true \ -D dri-drivers-path=/usr/local/lib/xorg/modules/dri \ -D dri3=disabled \ -D egl=disabled \ -D gallium-drivers="$galium_drivers" \ -D gbm=disabled \ -D glx=xlib \ -D llvm=enabled \ -D lmsensors=disabled \ -D optimization=${BUILD_OPTIMIZATION} \ -D osmesa=true \ -D platforms=x11 \ -D shared-glapi=enabled \ -D shared-llvm=enabled \ -D vulkan-drivers= \ build/; \ ninja -C build/ -j $(getconf _NPROCESSORS_ONLN); \ ninja -C build/ install # Copy our entrypoint into the container. COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh # Create fresh image from alpine ARG BASE_IMAGE=alpine:latest FROM ${BASE_IMAGE} # Copy the Mesa build & entrypoint script from previous stage COPY --from=builder /usr/local /usr/local # Install runtime dependencies for Mesa and link xorg dri modules ARG LLVM_VERSION=18 RUN set -xe; \ apk --update add --no-cache \ binutils \ expat \ llvm${LLVM_VERSION}-libs \ setxkbmap \ xdpyinfo \ xrandr \ xvfb \ xvfb-run \ zstd-libs; \ ln -sf /usr/local/lib/xorg/modules/dri/* /usr/lib/xorg/modules/dri/ # Setup our environment variables. ENV \ DISPLAY=":99" \ GALLIUM_DRIVER="llvmpipe" \ LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" \ LIBGL_ALWAYS_SOFTWARE="1" \ LP_DEBUG="" \ LP_NO_RAST="false" \ LP_NUM_THREADS="" \ LP_PERF="" \ MESA_VERSION="${MESA_VERSION}" \ XVFB_WHD="640x480x8" ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]