You are not logged in.
With glibc-2.43 the build fails with
threads_posix.h: error: conflicting types for once_flag; have pthread_once_t {aka int}See https://bugs.gentoo.org/show_bug.cgi?id=969493
I managed a reduced build (x11 only and i965 only, otherwise why would you want to use amber) with the following patch:
diff --git a/include/c11/threads_posix.h b/include/c11/threads_posix.h
index 45cb6075e6e..1e0ca3bc556 100644
--- a/include/c11/threads_posix.h
+++ b/include/c11/threads_posix.h
@@ -51,7 +51,6 @@ Configuration macro:
#include <pthread.h>
/*---------------------------- macros ----------------------------*/
-#define ONCE_FLAG_INIT PTHREAD_ONCE_INIT
#ifdef INIT_ONCE_STATIC_INIT
#define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
#else
@@ -66,7 +65,6 @@ typedef pthread_cond_t cnd_t;
typedef pthread_t thrd_t;
typedef pthread_key_t tss_t;
typedef pthread_mutex_t mtx_t;
-typedef pthread_once_t once_flag;
/*
@@ -90,12 +88,6 @@ impl_thrd_routine(void *p)
/*--------------- 7.25.2 Initialization functions ---------------*/
// 7.25.2.1
-static inline void
-call_once(once_flag *flag, void (*func)(void))
-{
- pthread_once(flag, func);
-}
-
/*------------- 7.25.3 Condition variable functions -------------*/
// 7.25.3.1
diff --git a/meson.build b/meson.build
index 9b0ca5c8384..a51aec3ecb9 100644
--- a/meson.build
+++ b/meson.build
@@ -1014,10 +1014,13 @@ prog_python = import('python').find_installation('python3')
has_mako = run_command(
prog_python, '-c',
'''
-from distutils.version import StrictVersion
+try:
+ from packaging.version import Version
+except:
+ from distutils.version import StrictVersion as Version
import mako
-assert StrictVersion(mako.__version__) > StrictVersion("0.8.0")
- ''')
+assert Version(mako.__version__) >= Version("0.8.0")
+ ''', check: false)
if has_mako.returncode() != 0
error('Python (3.x) mako module >= 0.8.0 required to build mesa.')
endif
diff --git a/src/glx/glxcurrent.c b/src/glx/glxcurrent.c
index ffc7c3c7687..5656e52d61f 100644
--- a/src/glx/glxcurrent.c
+++ b/src/glx/glxcurrent.c
@@ -67,7 +67,6 @@ struct glx_context dummyContext = {
_X_HIDDEN pthread_mutex_t __glXmutex = PTHREAD_MUTEX_INITIALIZER;
-# if defined( USE_ELF_TLS )
/**
* Per-thread GLX context pointer.
@@ -84,54 +83,6 @@ __glXSetCurrentContext(struct glx_context * c)
__glX_tls_Context = (c != NULL) ? c : &dummyContext;
}
-# else
-
-static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-
-/**
- * Per-thread data key.
- *
- * Once \c init_thread_data has been called, the per-thread data key will
- * take a value of \c NULL. As each new thread is created the default
- * value, in that thread, will be \c NULL.
- */
-static pthread_key_t ContextTSD;
-
-/**
- * Initialize the per-thread data key.
- *
- * This function is called \b exactly once per-process (not per-thread!) to
- * initialize the per-thread data key. This is ideally done using the
- * \c pthread_once mechanism.
- */
-static void
-init_thread_data(void)
-{
- if (pthread_key_create(&ContextTSD, NULL) != 0) {
- perror("pthread_key_create");
- exit(-1);
- }
-}
-
-_X_HIDDEN void
-__glXSetCurrentContext(struct glx_context * c)
-{
- pthread_once(&once_control, init_thread_data);
- pthread_setspecific(ContextTSD, c);
-}
-
-_X_HIDDEN struct glx_context *
-__glXGetCurrentContext(void)
-{
- void *v;
-
- pthread_once(&once_control, init_thread_data);
-
- v = pthread_getspecific(ContextTSD);
- return (v == NULL) ? &dummyContext : (struct glx_context *) v;
-}
-
-# endif /* defined( USE_ELF_TLS ) */
_X_HIDDEN voidThis is the full git diff which contains the python-3.13 patch for meson.build.
I used the following PKGBUILD:
# Maintainer: Laurent Carlier <lordheavym@gmail.com>
# Maintainer: Felix Yan <felixonmars@archlinux.org>
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Andreas Radke <andyrtr@archlinux.org>
pkgname=mesa-amber-git
pkgdesc="classic OpenGL (non-Gallium3D) drivers"
pkgver=21.3.9
pkgrel=13
arch=('x86_64')
makedepends=('python-mako' 'libxml2' 'libx11' 'libxshmfence' 'meson-python'
'libxxf86vm' 'libxdamage' 'zstd' 'lm_sensors'
'libxrandr' 'glslang' 'meson' 'git')
# 'elfutils'
url="https://www.mesa3d.org/"
license=('custom')
groups=(modified)
source=('mesa::git+https://gitlab.freedesktop.org/mesa/mesa.git#branch=amber'
'LICENSE')
sha256sums=(
'SKIP'
'7052ba73bb07ea78873a2431ee4e828f4e72bda7d176d07f770fa48373dec537')
#validpgpkeys=('57551DE15B968F6341C248F68D8E31AFC32428A6') # Eric Engestrom <eric@engestrom.ch>
validpgpkeys=('71C4B75620BC75708B4BDB254C95FAAB3EB073EC') # Dylan Baker <dylan@pnwbakers.com>
prepare() {
cd mesa
# patch for python 3.13, derived from mesa-24:
#patch -Np1 < ../../mako.patch
patch -Np1 < ../../once_flag.patch
}
build() {
# Build only minimal debug info to reduce size
CFLAGS+=' -g1 -Wno-error=incompatible-pointer-types'
CXXFLAGS+=' -g1'
meson setup mesa build -Dprefix=/usr \
-D b_lto=true \
-D b_ndebug=true \
-D amber=true \
-D platforms=x11 \
-D shader-cache-default=true \
-D dri-drivers='i965' \
-D gallium-drivers='' \
-D vulkan-drivers='' \
-D dri3=enabled \
-D gallium-nine=false \
-D gallium-omx=disabled \
-D gallium-opencl=disabled \
-D gallium-va=disabled \
-D gallium-vdpau=disabled \
-D gallium-xa=disabled \
-D gallium-xvmc=disabled \
-D gles1=disabled \
-D gles2=disabled \
-D glvnd=false \
-D glx=dri \
-D libunwind=disabled \
-D llvm=disabled \
-D lmsensors=enabled \
-D osmesa=false \
-D shared-glapi=enabled \
-D microsoft-clc=disabled \
-D valgrind=disabled \
-D zstd=enabled \
-D datasources=''
ninja -C build
meson compile -C build
}
package() {
depends=('libdrm' 'libxxf86vm' 'libxshmfence' 'libelf'
'zstd')
conflicts=('mesa' 'mesa-git')
provides=("mesa" 'libgl' 'mesa-libgl' 'libglvnd' 'opengl-driver')
DESTDIR="${pkgdir}" meson install -C build
install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" LICENSE
}The output of "pacman -Qi mesa-amber-git":
Name : mesa-amber-git
Version : 21.3.9-13
Description : classic OpenGL (non-Gallium3D) drivers
Architecture : x86_64
URL : https://www.mesa3d.org/
Licenses : custom
Groups : modified
Provides : mesa libgl mesa-libgl libglvnd opengl-driver
Depends On : libdrm libxxf86vm libxshmfence libelf zstd
Optional Deps : None
Required By : libva-git picom-git xorg-server-devel-git
Optional For : None
Conflicts With : mesa mesa-git
Replaces : None
Installed Size : 16.51 MiB
Packager : nokangaroo <nokangaroo@NOSPAM.aon.at>
Build Date : Mon 01 Jun 2026 02:35:25 PM CEST
Install Date : Mon 01 Jun 2026 02:41:39 PM CEST
Install Reason : Explicitly installed
Install Script : No
Validated By : NoneThis is unbeatable for size, and works perfectly on my Skylake box. The last
mesa version that worked properly for me was 23.3.6 (which would need a similar
patch). Mesa 24 caused choppy rendering with Golly (which I no longer use,
but it is proof that I can do without the huge software bloat of the current
version). I once built a mesa-less system (in the time of the i915 kernel
crash, to find out if mesa was responsible, which it wasn't). It was a hack
that involved building Xorg without glx and using the intel driver, but it
turns out that 2D acceleration is perfectly good for video playback. I use
mesa-amber for simplicity, as the minimum to meet depencencies. The packaged
libglvnd didn't work with mesa-amber, but mesa's internal libgl will do, at
least for intel. Incidentally, the intel driver is maintained again, see
https://github.com/X11Libre/xf86-video-intel.
uname -r: 7.0.10-1-git
Processor: Intel® Core™ i3-6100 CPU @ 3.70GHz × 4
Graphics: Mesa DRI Intel® HD Graphics 530 (SKL GT2)
Offline
Skylake is fully supported by the up to date iris driver in mesa and the modesetting driver has generally supplanted xf86-video-intel (and I somewhat doubt the xlibre maintenance can fix the years of technical debt reliably), this seems like an incredibly niche usecase.
But seeing as being able to build this might still be viable, have considered opening an MR on the gitlab? https://gitlab.archlinux.org/archlinux/ … e_requests
Last edited by V1del (2026-06-01 16:38:00)
Offline
for xf86-video-intel and iris see https://wiki.archlinux.org/title/Intel_ … ecent_GPUs
Offline