tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

⎇ main recipes/mesa-llvmpipe.toml TOML · 74 líneas · 5.5 KB Historia crudo

mesa-llvmpipe: la campaña de glvnd, probada donde no le cuesta a nadie — y SALE QUE SÍ bdecd1c47 · Sergio ·

1# ══ 2026-09-13 · ESTA VARIANTE ES EL LABORATORIO DE LA CAMPAÑA glvnd ═══════════════════════════
2# `mesa-llvmpipe` es la ÚNICA de las tres mesa con **radio 0 y cero imágenes** (`yupana radio`:
3# 0 dependientes directos, «(ninguna declarada)»). O sea: se puede cambiar sin que caiga un solo
4# sellado ajeno. Por eso la campaña de glvnd se prueba ACÁ antes de decidirla.
5#
6# LA PREGUNTA QUE RESPONDE, y que hoy nadie tiene contestada: con `-Dglvnd=true`, ¿mesa produce de
7# verdad `libEGL_mesa.so.0` y su JSON en `/usr/share/glvnd/egl_vendor.d/`, y deja de instalar
8# `libEGL.so.1`? Eso es la mitad de vendor del despacho, y es lo que hoy NO existe — por eso
9# `libOpenGL.so.0` enlaza y en runtime no hay nadie detrás.
10#
11# EL PRECIO DE LA CAMPAÑA COMPLETA, medido antes de empezar: `yupana radio mesa` da **148
12# dependientes directos, 154 transitivos, 153 sellados que caen a deuda y las CINCO imágenes**
13# (123 de ellos en `incoming-kde`). Por eso no se hace de paso: se prueba en la variante que no
14# le importa a nadie, y con el resultado en la mano se decide cuándo pagar las otras dos.
15#
16# ══ RESULTADO DE LA PRUEBA (2026-09-13) — SALIÓ QUE SÍ, Y LIMPIO ══════════════════════════════
17# Con `-Dglvnd=true`, este artefacto instala exactamente lo que la campaña necesita y NADA de lo
18# que estorba:
19#     usr/lib/libEGL_mesa.so.0            ← el VENDOR (lo que hoy no existe en ningún lado)
20#     usr/share/glvnd/egl_vendor.d/50_mesa.json   ← su registro, que es lo que glvnd busca
21#     usr/lib/libgbm.so.1 · usr/lib/libglapi.so.0 · usr/lib/dri/{swrast,kms_swrast}_dri.so
22# …y **deja de instalar `libEGL.so.1` y `libGLESv2.so.2`** (comprobado: los dos `ls` fallan).
23#
24# ⇒ La colisión de sonames que hoy hay en el rootfs de KDE **desaparece por construcción**, no por
25# un apaño: con glvnd=true mesa ya no reclama esas rutas, y el dueño pasa a ser glvnd, que es
26# justamente lo que la partición de glvnd quiere. La campaña deja de ser una apuesta: se sabe qué
27# produce. Lo que queda por decidir es CUÁNDO pagar los 153 rebuilds, no SI funciona.
28#
29# ⚠ Y ESTA PRUEBA SÓLO CUBRE LA MITAD DE MESA. La otra mitad es que `libglvnd` vuelva a instalar su
30# `libEGL.so.1` de despacho (hoy va con `-Degl=false` para no colisionar con mesa, ver esa receta):
31# sin eso, `libEGL_mesa.so.0` es un vendor que nadie carga. Las dos mitades van en la MISMA campaña
32# o el resultado es el de hoy con otro disfraz.
33# Mesa 24.0.9 — LLVMPIPE (render por software CON LLVM JIT). Variante de mesa-swrast (softpipe) para
34# el escritorio KDE en VM: kwin exige un GBM/EGL de software COMPLETO, y softpipe no bindea las
35# extensiones que kwin pide ("failed to bind extensions" → "Failed to create gbm device"). llvmpipe
36# (el driver `swrast` de gallium cuando `-Dllvm=enabled`) sí las provee. Ver [[kde-metal-qemu-desktop]].
37#
38# La ÚNICA diferencia con mesa-swrast.toml es `-Dllvm=enabled` (+ el toolchain LLVM en el sandbox).
39# Si el sandbox no trae libLLVM/llvm-config, este build falla en configure ⇒ hay que sellar LLVM
40# desde fuente primero (el monstruo). Test primero, decidir después.
41name    = "mesa-llvmpipe"
42version = "24.0.9"
43license = "MIT"
44
45[source]
46tarball = "https://archive.mesa3d.org/mesa-24.0.9.tar.xz"
47sha256  = "51aa686ca4060e38711a9e8f60c8f1efaa516baf411946ed7f2c265cd582ca4c"
48patches = ["mesa-version-script-comma.patch"]
49
50[build]
51compiler    = "zig-cc"
52target      = "x86_64-linux-musl"
53link        = "dynamic"
54zig_version = "0.13.0"
55
56[build.phases]
57configure = "CC=gcc CXX=g++ LLVM_CONFIG=/usr/bin/llvm-config PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Db_ndebug=true -Dgallium-drivers=swrast -Dvulkan-drivers= -Dllvm=enabled -Dshared-llvm=enabled -Dintel-clc=disabled -Dplatforms=wayland -Dglx=disabled -Dgbm=enabled -Degl=enabled -Dopengl=true -Dgles1=disabled -Dgles2=enabled -Dexpat=enabled -Dzstd=enabled -Dshader-cache=enabled -Dxmlconfig=enabled -Dglvnd=true -Dgallium-rusticl=false -Dgallium-va=disabled -Dgallium-extra-hud=false -Dvideo-codecs= -Dtools= -Dbuild-tests=false -Dvalgrind=disabled -Dlibunwind=disabled"
58compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
59install   = "DESTDIR=/out ninja -C output install"
60
61[deps]
62# ⚠ DEP DE EJECUCIÓN, NO DE BUILD — Y NO ES DECORACIÓN (2026-09-06).
63# Este artefacto declara `NEEDED libstdc++.so.6` / `libgcc_s.so.1`, y hasta hoy NADIE en el corpus
64# las proveía: sólo existían en `.dev-fs/alpine`, o sea en el LAB. El binario sellaba, REPRODUCÍA
65# bit a bit, pasaba todos los guardianes… y no arrancaba fuera del lab. Se descubrió corriendo
66# `atuq` bajo un sway headless, no leyendo el grafo.
67# `runtime` NO entra en el ArtifactHash (igual que `license`), así que declararlo NO re-hashea:
68# lo que cambia es la CLAUSURA, que es lo que se hidrata en la imagen. Lo vigila
69# `scripts/vigia-sonames.py`, que corre en el latido y deja `docs/state/sonames.txt`.
70runtime = ["gcc-libs"]
71# llvm18: el libLLVM takana-built (soberano) que llvmpipe JIT-linkea. takana lo materializa en el
72# sandbox en /usr ⇒ /usr/bin/llvm-config es el de LLVM 18 (no el LLVM 22 de Alpine, que mesa 24.0.9
73# no traga). Runtime: libLLVM.so.18 se inyecta a la imagen QEMU (NEEDED sólo libc por -static-libstdc++).
74build = ["llvm18", "meson", "samurai", "python3", "pkgconf", "flex", "bison", "mako", "markupsafe", "packaging", "libdrm", "wayland", "wayland-protocols", "expat", "zlib", "zstd", "libffi", "libglvnd"]