Files
takana/docs/14-mesa-stack.md
T
sergioandClaude Opus 4.8 00339b625e Etapa G: cola del stack gráfico Mesa (iris) para el escritorio tawasuyu
Importa de Alpine aports (con parches musl) las recetas del stack que el greeter
real de mirada necesita en el rootfs de producto: libdrm 2.4.134, wayland 1.25.0,
wayland-protocols 1.48, seatd, mesa 26.1.1, + build-tools meson 1.11.1 y samurai
(ninja). Quedan en recipes/incoming/ como puntos de partida: traen los parches
musl de Alpine pero usan helpers de abuild — falta adaptarlas a fases hammer
(meson/samurai directos, link=dynamic), como elfutils.

docs/14-mesa-stack.md fija el plan: iris-only ⇒ SIN LLVM/Vulkan/X11 (el driver
gallium iris no necesita LLVM), lo que recorta clang/llvm/libclc/spirv/bindgen.
DAG de build (hojas→raíz) + estado por receta + el lado tawasuyu (recetas Cargo
arje-splash/net-bring-up estáticas ya construibles; mirada-greeter dinámico,
bloqueado por mesa). Contraparte de la seed arje-tawasuyu del monorepo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 23:41:34 -04:00

4.3 KiB

SDD 14 — Stack gráfico (Mesa iris) para el escritorio tawasuyu

Estado: cola importada (2026-06-27). Contraparte en hammer del salto demo→producción de arje: el rootfs de producto necesita Mesa para que el greeter real de mirada (mirada-greeter-llimphi) tome el DRM tras el handoff del splash. Seed de producción: tawasuyu/03_ukupacha/arje/seeds/arje-tawasuyu.card.json (ente display-manager-mesa). Ver su contrato rootfs en seeds/README.md.

Por qué iris-only (sin LLVM, sin Vulkan)

El target inmediato es una laptop Intel Iris Xe. El driver gallium iris NO necesita LLVM (eso es radeonsi/llvmpipe). Recortando el build de Alpine (que trae el kitchen-sink) a iris-only se elimina la cola pesada — clang, llvm, libclc, spirv-llvm-translator, rust-bindgen, Vulkan, X11/glx:

-Dgallium-drivers=iris   -Dvulkan-drivers=   -Dllvm=disabled
-Dplatforms=wayland      -Dglx=disabled      -Dexpat=enabled

Eso deja un Mesa que sólo arrastra deps que hammer ya tiene o son chicas. (Para AMD/NVIDIA-nouveau más adelante: radeonsi/nouveau sí piden LLVM → otra rama del track.)

DAG de dependencias (estado contra el corpus actual)

Tier Receta meson? Estado en hammer Notas
build python3 🟢 en store meson/mako lo usan
build meson 🟡 incoming importada de Alpine 1.11.1; pyproject, necesita python3
build samurai (≡ninja) 🟡 incoming 1.3, clon C de ninja (lo que usa Alpine)
build pkgconf 🟢 receta sustituto de pkg-config
build bison / flex 🟢 receta mesa genera parsers
build mako (módulo py) por verificar templating de codegen de mesa; pip/source sobre python3
lib expat zlib zstd libffi 🟢 receta deps de wayland/mesa
lib libdrm 🟡 incoming 2.4.134; fijar -Dgallium? no — libdrm es agnóstico; link=dynamic
lib wayland 🟡 incoming 1.25.0; deps expat+libffi; -Ddocumentation=false
lib wayland-protocols 🟡 incoming 1.48; sólo datos (XML) + meson; dep wayland
lib seatd (→libseat) 🟡 incoming la sesión de mirada abre el DRM vía libseat
top mesa 🟡 incoming 26.1.1; recortar a iris-only (arriba); deps: libdrm, wayland, wayland-protocols, expat, zlib, zstd, python3+mako

🟢 listo · 🟡 importada, falta adaptar (traducir abuild-meson/_abuild_phase de Alpine a fases hammer + meson/samurai directos, como hizo elfutils) · por crear.

Trabajo de adaptación por receta (lo real)

Las recetas en recipes/incoming/ son puntos de partida de import-alpine: traen los parches musl de Alpine (lo valioso) pero usan los helpers de abuild que el lab de hammer no tiene. Cada una necesita, mínimo:

  1. Reemplazar abuild-meson por meson setup output --prefix=/usr --buildtype=release <-Dflags> y _abuild_phase/DESTDIR=/out por las fases configure/compile/install de hammer.
  2. compiler = "zig-cc", target = "x86_64-linux-musl", link = "dynamic" (son libs compartidas).
  3. Declarar las deps de build en el grafo de hammer (no como makedepends de Alpine).
  4. Verificar zig_version si zig 0.14 miscompila (patrón de elfutils/binutils/flex: fijar 0.13.0).

Orden de build (hojas→raíz): meson+samurailibdrm,waylandwayland-protocols,seatdmesa.

Lado tawasuyu (recetas Cargo, después de Mesa)

Modeladas sobre recipes/arje-zero.toml (fuente = monorepo tawasuyu a commit fijado, build hermético):

Receta bin link dep gráfica
arje-splash /usr/lib/arje/arje-splash static-musl sólo DRM dumb-buffer (sin Mesa)
net-bring-up /usr/lib/arje/net-bring-up static-musl ninguna
mirada-greeter /usr/lib/arje/mirada-greeter-llimphi dynamic EGL/GLES/GBM (mesa) + wayland + libseat

mirada-greeter es el único que enlaza Mesa dinámico ⇒ bloqueado por el tier mesa. Los otros dos pueden construirse e instalarse ya (no dependen de Mesa).

Hecho cuando

hammer bootstrap product produce un rootfs que, con la seed arje-tawasuyu, arranca arje-zero → splash → mirada-greeter toma el DRM con Mesa/iris, sin caer a texto. Verificación: boot en QEMU (con virgl/GPU) o metal en la laptop Iris Xe.