You are not logged in.

#1 2026-06-01 16:10:19

nokangaroo
Member
Registered: 2013-09-08
Posts: 26

Possible solution for mesa-amber build failure with glibc-2.43

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 void

This 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    : None

This 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

#2 2026-06-01 16:16:41

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 25,204

Re: Possible solution for mesa-amber build failure with glibc-2.43

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

#3 2026-06-01 19:41:59

seth
Member
From: Won't reply 2 private help req
Registered: 2012-09-03
Posts: 75,718

Re: Possible solution for mesa-amber build failure with glibc-2.43

for xf86-video-intel and iris see https://wiki.archlinux.org/title/Intel_ … ecent_GPUs

Offline

Board footer

Powered by FluxBB