# Maintainer: Natanael Copa pkgname=mesa pkgver=24.0.5 pkgrel=0 pkgdesc="Mesa DRI OpenGL library" url="https://www.mesa3d.org" arch="all" license="MIT AND SGI-B-2.0 AND BSL-1.0" subpackages=" $pkgname-dbg $pkgname-dev $pkgname-dri-gallium:_gallium $pkgname-va-gallium:_va $pkgname-vdpau-gallium:_vdpau $pkgname-glapi $pkgname-egl $pkgname-gl $pkgname-gles $pkgname-xatracker $pkgname-osmesa $pkgname-gbm $pkgname-vulkan-ati:_vulkan $pkgname-vulkan-swrast:_vulkan $pkgname-vulkan-layers:_vulkan_layers $pkgname-libd3dadapter9 " _llvmver=17 depends_dev=" libdrm-dev libxext-dev libxdamage-dev libxcb-dev libxshmfence-dev " makedepends=" $depends_dev bison eudev-dev expat-dev findutils flex gettext elfutils-dev glslang-dev libtool libxfixes-dev libva-dev libvdpau-dev libx11-dev libxml2-dev libxrandr-dev libxxf86vm-dev llvm$_llvmver-dev meson py3-mako py3-packaging python3 vulkan-loader-dev wayland-dev wayland-protocols xorgproto zlib-dev zstd-dev " source=" https://mesa.freedesktop.org/archive/mesa-${pkgver/_/-}.tar.xz enable-mali-t600.patch no-unlink-megadrivers.patch " replaces="mesa-dricore" options="!check" # we skip tests intentionally builddir="$srcdir/mesa-${pkgver/_/-}" _dri_driverdir=/usr/lib/xorg/modules/dri _gallium_drivers="r300,r600,radeonsi,nouveau,swrast,virgl,zink" _vulkan_drivers="amd,swrast" _vulkan_layers="device-select,overlay" # extra gallium per arch case "$CARCH" in x86*) _gallium_drivers="$_gallium_drivers,svga,i915,iris,crocus" ;; armhf|armv7|aarch64) _gallium_drivers="$_gallium_drivers,vc4,v3d,freedreno,kmsro,lima,panfrost,etnaviv,tegra" ;; esac # extra vulkan per arch case "$CARCH" in x86*) _vulkan_drivers="$_vulkan_drivers,intel,intel_hasvk" _vulkan_layers="$_vulkan_layers,intel-nullhw" subpackages=" $subpackages $pkgname-vulkan-intel:_vulkan " ;; aarch64) _vulkan_drivers="$_vulkan_drivers,broadcom,freedreno,panfrost" subpackages=" $subpackages $pkgname-vulkan-broadcom:_vulkan $pkgname-vulkan-freedreno:_vulkan $pkgname-vulkan-panfrost:_vulkan " ;; esac case "$CARCH" in x86) # lto fails on x86 only # mostly: # https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21371 # https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21180 _lto=false ;; *) # ~5% smaller _lto=true ;; esac case "$CARCH" in aarch64|x86_64) _rusticl=true makedepends=" $makedepends clang$_llvmver-dev libclc-dev~$_llvmver rust rust-bindgen spirv-llvm-translator-dev " subpackages=" $subpackages $pkgname-rusticl " ;; *) _rusticl=false ;; esac build() { # use -g1 to generate less debug info: # 485 MiB -> ~80 MiB export CFLAGS="$CFLAGS -O2 -g1" export CXXFLAGS="$CXXFLAGS -O2 -g1" export CPPFLAGS="$CPPFLAGS -O2 -g1" case "$CARCH" in armhf|armv7) # gnu2 tlsdesc is broken in binutils export CFLAGS="$CFLAGS -mtls-dialect=gnu" export CXXFLAGS="$CXXFLAGS -mtls-dialect=gnu" ;; esac PATH="$PATH:/usr/lib/llvm$_llvmver/bin" \ abuild-meson \ -Db_ndebug=true \ -Db_lto=$_lto \ -Dbackend_max_links=2 \ -Ddri-drivers-path=$_dri_driverdir \ -Dgallium-drivers=$_gallium_drivers \ -Dvulkan-drivers=$_vulkan_drivers \ -Dvulkan-layers=$_vulkan_layers \ -Dplatforms=x11,wayland \ -Dllvm=enabled \ -Dshared-llvm=enabled \ -Dshared-glapi=enabled \ -Dgbm=enabled \ -Dglx=dri \ -Dopengl=true \ -Dosmesa=true \ -Dgles1=enabled \ -Dgles2=enabled \ -Degl=enabled \ -Dgallium-extra-hud=true \ -Dgallium-nine=true \ -Dgallium-rusticl=$_rusticl \ -Dgallium-va=enabled \ -Dgallium-vdpau=enabled \ -Dgallium-xa=enabled \ -Drust_std=2021 \ -Dvideo-codecs=all \ . output # Print config meson configure --no-pager output meson compile -C output } package() { provider_priority=100 DESTDIR="$pkgdir" meson install --no-rebuild -C output } egl() { pkgdesc="Mesa libEGL runtime libraries" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libEGL.so* } gl() { pkgdesc="Mesa libGL runtime libraries" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libGL.so* } glapi() { pkgdesc="Mesa shared glapi" replaces="$pkgname-gles=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libglapi.so.* } gles() { pkgdesc="Mesa libGLESv2 runtime libraries" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libGLES*.so* } xatracker() { pkgdesc="Mesa XA state tracker for vmware" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libxatracker*.so.* } osmesa() { pkgdesc="Mesa offscreen rendering libraries" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libOSMesa.so.* } gbm() { pkgdesc="Mesa gbm library" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/libgbm.so.* } libd3dadapter9() { pkgdesc="Mesa directx9 adapter" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 amove usr/lib/d3d/d3dadapter9.so* } rusticl() { pkgdesc="Mesa OpenCL driver" depends="mesa=$pkgver-r$pkgrel clang$_llvmver-headers libclc~$_llvmver" provider_priority=100 amove usr/lib/libRusticlOpenCL.so.* amove etc/OpenCL/vendors/ } # Move links referencing the same file to the subpackage. # Usage: _mv_links # where is one of the libraries covered by the megadriver. # The example is used to find other links that point to the same file. _mv_links() { install -d "$subpkgdir"/$1 find -L "$pkgdir"/$1 -samefile "$pkgdir"/$1/$2 -print0 \ | xargs -0 -I{} mv {} "$subpkgdir"/$1/ } _mv_vulkan() { local i for i in "$@"; do amove usr/lib/libvulkan_$i*.so amove usr/share/vulkan/icd.d/${i}_*.* done } # Mesa uses "megadrivers" where multiple drivers are linked into one shared # library. This library is then hard-linked to separate files (one for each driver). # Each subpackage contains one megadriver so that all the hard-links are preserved. _gallium() { pkgdesc="Mesa gallium DRI drivers" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 # libgallium_dri.so _mv_links $_dri_driverdir swrast_dri.so } _va() { local n=${subpkgname##*-va-} pkgdesc="Mesa $n VAAPI drivers" depends="mesa=$pkgver-r$pkgrel libva" provider_priority=100 case $n in gallium) # libgallium_drv_video.so _mv_links /usr/lib/dri radeonsi_drv_video.so ;; esac } _vdpau() { local n=${subpkgname##*-vdpau-} pkgdesc="Mesa $n VDPAU drivers" depends="mesa=$pkgver-r$pkgrel libvdpau" provider_priority=100 case $n in gallium) # libvdpau_gallium.so.1.0.0 _mv_links /usr/lib/vdpau libvdpau_radeonsi.so.1.0.0 ;; esac } _vulkan() { local n=${subpkgname##*-vulkan-} pkgdesc="Mesa Vulkan API driver for $n" depends="mesa=$pkgver-r$pkgrel" provider_priority=100 case $n in ati) _mv_vulkan radeon ;; intel) _mv_vulkan intel ;; broadcom) _mv_vulkan broadcom ;; freedreno) _mv_vulkan freedreno ;; panfrost) _mv_vulkan panfrost ;; swrast) _mv_vulkan lvp ;; esac } _vulkan_layers() { pkgdesc="collection of vulkan layers from mesa" depends="python3" provider_priority=100 # Remove this after the release of the next stable (3.14) # it originally was claed layer as it only packaged the # overlay one but now it also packages device-select and # intel-nullhw (on x86*) provides="$pkgname-vulkan-layer=$pkgver-r$pkgrel" provider_priority=100 replaces="$pkgname-vulkan-layer=$pkgver-r$pkgrel" amove usr/share/vulkan/explicit_layer.d amove usr/share/vulkan/implicit_layer.d amove usr/lib/libVkLayer_*.so amove usr/bin/mesa-overlay-control.py } sha512sums=" 9476af4b9ac8db5dce397084ef169927d10b28adea7e74aa5b3136810b499ac98ddf7ab564e7d1ff81c887208c8ebab3ad2d4e27e7f46136609b5c67527018eb mesa-24.0.5.tar.xz 450e9c61a62487e2cc83e03a05521d40a48294118b1af9d56220fb546c50fedd61f1f005b85c5e956e23eb2397f696fe1bbf9626253c99233278ca406b75543b enable-mali-t600.patch e3d39d61b14188cd5a22e19e8c065650995f85943e6c42ec5775db5b76a9ebe8913253a8b9ac32056ac13a2c357cd951f867ecb39976c52f7d014dcc1a2d87dc no-unlink-megadrivers.patch "