pkgbase=mesa pkgname=( mesa vulkan-intel vulkan-nouveau vulkan-radeon vulkan-virtio vulkan-mesa-layers vulkan-mesa-implicit-layers ) pkgver=26.1.0 _pkgver=${pkgver/[a-z]/-&} pkgrel=1 epoch=1 pkgdesc="Open-source OpenGL drivers" url="https://gitlab.freedesktop.org/mesa/mesa" arch=(x86_64) license=("MIT AND BSD-3-Clause AND SGI-B-2.0") makedepends=( clang directx-headers expat glibc libdisplay-info libdrm libelf libgcc libglvnd libpng libstdc++ libva libx11 libxcb libxext libxml2 libxrandr libxshmfence libxxf86vm llvm llvm-libs lm_sensors rust spirv-llvm-translator spirv-tools systemd-libs vulkan-icd-loader wayland xcb-util-keysyms zlib zstd # shared between mesa and lib32-mesa cbindgen clang cmake elfutils glslang libclc meson python-mako python-packaging python-ply python-pycparser python-yaml rust-bindgen wayland-protocols xorgproto # mesa-only deps libsysprof-capture valgrind # html-docs python-sphinx python-sphinx-hawkmoth ) options=( # GCC 14 LTO causes segfault in LLVM under si_llvm_optimize_module # https://gitlab.freedesktop.org/mesa/mesa/-/issues/11140 # # In general, upstream considers LTO to be broken until explicit notice. !lto ) source=("${pkgname}::git+${url}.git#branch=main") # Rust crates for NVK, used as Meson subprojects declare -A _crates=( bitflags 2.9.1 cfg-if 1.0.0 equivalent 1.0.1 errno 0.3.12 hashbrown 0.14.1 indexmap 2.2.6 libc 0.2.171 log 0.4.27 once_cell 1.8.0 paste 1.0.14 pest 2.8.0 pest_derive 2.8.0 pest_generator 2.8.0 pest_meta 2.8.0 proc-macro2 1.0.86 quote 1.0.35 remain 0.2.12 roxmltree 0.20.0 rustc-hash 2.1.1 rustix 1.1.2 syn 2.0.87 thiserror 2.0.11 thiserror-impl 2.0.11 ucd-trie 0.1.6 unicode-ident 1.0.12 windows-link 0.2.0 windows-sys 0.61.1 zerocopy 0.8.13 zerocopy-derive 0.8.13 ) # Used to generate the above table _gencrates() { grep '^source_url' subprojects/*-rs.wrap | \ sed -r 's|.*crates/([^/]+)/([0-9.]+)/download|\1 \2|' | \ column -t -S 2 | sed 's/^/ /' } for _crate in "${!_crates[@]}"; do _ver="${_crates[$_crate]}" source+=( "$_crate-$_ver.tar.gz::https://crates.io/api/v1/crates/$_crate/$_ver/download" ) done # https://docs.mesa3d.org/relnotes.html sha256sums=('SKIP') prepare() { cd mesa local src for src in "${source[@]}"; do src="${src%%::*}" src="${src##*/}" src="${src%.zst}" [[ $src = *.patch ]] || continue echo "Applying patch $src..." patch -Np1 < "../$src" done } build() { local meson_options=( -D amdgpu-virtio=true -D intel-virtio-experimental=true -D android-libbacktrace=disabled -D b_ndebug=true -D gallium-drivers=all -D gallium-extra-hud=true -D gallium-mediafoundation=disabled -D gallium-rusticl-enable-drivers=asahi,freedreno,radeonsi -D gallium-rusticl=true -D gles1=disabled -D html-docs=enabled -D intel-rt=enabled -D libunwind=disabled -D microsoft-clc=disabled -D sysprof=true -D valgrind=enabled -D video-codecs=all -D vulkan-drivers=all -D vulkan-layers=device-select,intel-nullhw,overlay,screenshot,anti-lag,vram-report-limit -D vulkan-manifest-per-architecture=false ) # Build only minimal debug info to reduce size CFLAGS+=" -g1" CXXFLAGS+=" -g1" # Inject subproject packages export MESON_PACKAGE_CACHE_DIR="$srcdir" arch-meson mesa build "${meson_options[@]}" meson compile -C build } _pick() { local p="$1" f d; shift for f; do d="$srcdir/$p/${f#$pkgdir/}" mkdir -p "$(dirname "$d")" mv -v "$f" "$d" rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" done } package_mesa() { depends=( expat glibc libdrm libelf libgcc libglvnd libstdc++ libx11 libxcb libxext libxshmfence libxxf86vm llvm-libs lm_sensors spirv-tools wayland zlib zstd ) optdepends=("opengl-man-pages: for the OpenGL API man pages") provides=( "libva-mesa-driver=$epoch:$pkgver-$pkgrel" "mesa-libgl=$epoch:$pkgver-$pkgrel" libva-driver opengl-driver ) conflicts=( 'libva-mesa-driver<1:24.2.7-1' 'mesa-libgl<17.0.1-2' ) replaces=( 'libva-mesa-driver<1:24.2.7-1' 'mesa-libgl<17.0.1-2' ) meson install -C build --destdir "$pkgdir" --no-rebuild ( local libdir=usr/lib cd "$pkgdir" _pick vkintel $libdir/libvulkan_intel{,_hasvk}.so _pick vkintel usr/share/vulkan/icd.d/intel{,_hasvk}_icd.json _pick vknvidia $libdir/libvulkan_nouveau.so _pick vknvidia usr/share/vulkan/icd.d/nouveau_icd.json _pick vkradeon $libdir/libvulkan_radeon.so _pick vkradeon usr/share/drirc.d/00-radv-defaults.conf _pick vkradeon usr/share/vulkan/icd.d/radeon_icd.json _pick vkvirtio $libdir/libvulkan_virtio.so _pick vkvirtio usr/share/vulkan/icd.d/virtio_icd.json _pick vkdevice $libdir/libVkLayer_MESA_anti_lag.so _pick vkdevice $libdir/libVkLayer_MESA_device_select.so _pick vkdevice usr/share/vulkan/implicit_layer.d _pick vklayer $libdir/libVkLayer_*.so _pick vklayer usr/bin/mesa-*-control.py _pick vklayer usr/share/vulkan/explicit_layer.d # indirect rendering ln -sr $libdir/libGLX_{mesa,indirect}.so.0 ) install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-intel() { pkgdesc="Open-source Vulkan driver for Intel GPUs" depends=( expat glibc libdisplay-info libdrm libgcc libstdc++ libx11 libxcb libxshmfence spirv-tools systemd-libs vulkan-icd-loader vulkan-mesa-implicit-layers wayland xcb-util-keysyms zlib zstd ) optdepends=("vulkan-mesa-layers: additional vulkan layers") provides=(vulkan-driver) mv vkintel/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-nouveau() { pkgdesc="Open-source Vulkan driver for Nvidia GPUs" depends=( expat glibc libdisplay-info libdrm libgcc libstdc++ libx11 libxcb libxshmfence spirv-tools systemd-libs vulkan-icd-loader vulkan-mesa-implicit-layers wayland xcb-util-keysyms zlib zstd ) optdepends=("vulkan-mesa-layers: additional vulkan layers") provides=(vulkan-driver) mv vknvidia/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-radeon() { pkgdesc="Open-source Vulkan driver for AMD GPUs" depends=( expat glibc libdisplay-info libdrm libelf libgcc libstdc++ libx11 libxcb libxshmfence llvm-libs spirv-tools systemd-libs vulkan-icd-loader vulkan-mesa-implicit-layers wayland xcb-util-keysyms zlib zstd ) optdepends=("vulkan-mesa-layers: additional vulkan layers") provides=(vulkan-driver) replaces=('amdvlk<=2025.Q2.1-1') mv vkradeon/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-virtio() { pkgdesc="Open-source Vulkan driver for Virtio-GPU (Venus)" depends=( expat glibc libdisplay-info libdrm libgcc libx11 libxcb libxshmfence systemd-libs vulkan-icd-loader vulkan-mesa-implicit-layers wayland xcb-util-keysyms zlib zstd ) optdepends=("vulkan-mesa-layers: additional vulkan layers") provides=(vulkan-driver) mv vkvirtio/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-mesa-layers() { pkgdesc="Mesa's explicit Vulkan layers" depends=( glibc libgcc libpng libstdc++ python ) conflicts=(vulkan-mesa-layer) replaces=(vulkan-mesa-layer) mv vklayer/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } package_vulkan-mesa-implicit-layers() { pkgdesc="Mesa's implicit Vulkan layers" depends=( glibc libdrm libxcb wayland ) conflicts=(vulkan-mesa-device-select) replaces=(vulkan-mesa-device-select) mv vkdevice/* "$pkgdir" install -Dm644 mesa/docs/license.rst -t "$pkgdir/usr/share/licenses/$pkgname" } # vim:set sw=2 sts=-1 et: