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…

TOML 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

Etapa G: stack Mesa — 4/7 construidas (samurai, meson, libdrm, seatd)

Adapta las recetas importadas a fases hammer (meson/samurai directos, link=dynamic)
y construye+sella la base del stack gráfico para el escritorio tawasuyu:

- samurai: zig 0.13.0 (el default miscompila musl → reallocarray falla en runtime)
- meson:   Python puro, copia mesonbuild/+wrapper (sin wheel/gpep517 que hammer no tiene)
- libdrm:  core-only (GPU helpers disabled) → sin libpciaccess; iris usa libdrm core
- seatd:   libseat.so.1, -Dwerror=false (CMSG_NXTHDR de musl dispara -Wsign-compare)

Pendiente (docs/14-mesa-stack.md §Estado): wayland (los headers de wayland-scanner
no aparecen, prob. libexpat.so en el scanner), wayland-protocols (bloqueada por
wayland) y mesa (la grande, recortada iris-only). meson validado con zig cc sobre
proyectos meson reales (libdrm, seatd).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

99bbeac54ae0ca45d2819e68e57d2a49830c3bc5 · ruwaq sergio · (3 killa ñawpaq) · tayta e6ee70d78 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

5 qillqakuna · +97 −21

diff --git a/docs/14-mesa-stack.md b/docs/14-mesa-stack.md
index 8792114c..1b93e81c 100644
--- a/docs/14-mesa-stack.md
+++ b/docs/14-mesa-stack.md
@@ -56,6 +56,23 @@ el lab de hammer no tiene. Cada una necesita, mínimo:
 
 Orden de build (hojas→raíz): `meson`+`samurai` → `libdrm`,`wayland` → `wayland-protocols`,`seatd` → `mesa`.
 
+## Estado de build (2026-06-27)
+
+Construidas y selladas en el store (`hammer --store store build recipes/<x>.toml`):
+
+| Receta | Estado | Nota de adaptación |
+|---|---|---|
+| `samurai` | 🟢 **built** | `zig_version=0.13.0` (el default miscompila → `reallocarray` falla en runtime) |
+| `meson` | 🟢 **built** | Python puro: copia `mesonbuild/`+wrapper, sin wheel/gpep517; `python3` runtime-dep |
+| `libdrm` | 🟢 **built** | core-only (todas las GPU helper disabled) → evita libpciaccess; iris usa libdrm core |
+| `seatd` | 🟢 **built** | `-Dwerror=false` (musl `CMSG_NXTHDR` dispara `-Wsign-compare`); logind disabled, backend seatd |
+| `wayland` | 🟡 **WIP** | falla: `wl_callback_add_listener`/`wl_registry_interface` undeclared → los headers que genera `wayland-scanner` no aparecen. Hipótesis: el scanner (host tool) no encuentra `libexpat.so` al correr durante el build → produce headers vacíos. Probar expat estático o `LD_LIBRARY_PATH` de las deps en la fase. |
+| `wayland-protocols` | ⏸ **bloqueada** | build-depende de wayland (necesita wayland-scanner) |
+| `mesa` | 🟡 **pendiente** | recortar a iris-only (sin LLVM/Vulkan/X11); depende de libdrm✓+wayland+wayland-protocols+expat✓+zlib✓+zstd✓+python3✓+mako(⚪) |
+
+meson anda con zig cc (clang 21) sobre proyectos meson — validado con libdrm y seatd. El cuello real
+restante es **wayland** (scanner) y luego **mesa**.
+
 ## Lado tawasuyu (recetas Cargo, después de Mesa)
 
 Modeladas sobre `recipes/arje-zero.toml` (fuente = monorepo tawasuyu a commit fijado, build hermético):
diff --git a/recipes/samurai.toml b/recipes/samurai.toml
index 59e05eb0..affb5d72 100644
--- a/recipes/samurai.toml
+++ b/recipes/samurai.toml
@@ -1,34 +1,24 @@
-# Importada de Alpine aports por `hammer import-alpine` (Etapa G). PUNTO DE PARTIDA — pero
-# YA trae los parches de musl de Alpine (lo que un import de nix pierde). Pendiente: el
-# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
+# samurai 1.3 — clon C de ninja (lo que usa Alpine como `ninja`). Build-tool del stack meson
+# (libdrm/wayland/mesa lo invocan como backend). Provee /usr/bin/samu + symlink /usr/bin/ninja.
+# zig 0.13.0: con el zig default (0.16/clang21) el binario musl miscompila y falla en runtime
+# con "reallocarray: No error information" — el patrón conocido (binutils/elfutils/flex).
 name    = "samurai"
 version = "1.3"
 
 [source]
 tarball = "https://github.com/michaelforney/samurai/releases/download/1.3/samurai-1.3.tar.gz"
-# FIXME sha256: el wrapper lo calcula (Alpine publica sha512). sha512 de Alpine:
-# sha512 = "f155745fdb90cca07d8e7178e60337173fee3a8f1dadc3773a80fe189f5864229afb409d946fb2a418820d7e6ef8332cd9e3e3627abd170146802277f30b4b4e"
 sha256  = "1bc020a9e133432df51911ac71cc34322f828934d9a2282ba2916d88c15976af"
 
 [build]
-compiler = "zig-cc"
-target   = "x86_64-linux-musl"
-link     = "static"
-flags    = []
+compiler    = "zig-cc"
+target      = "x86_64-linux-musl"
+link        = "static"
+zig_version = "0.13.0"
 
 [build.phases]
-# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
-compile = '''
-_abuild_phase() {
-make CFLAGS="${CFLAGS//-Os/-O2}"
-}
-_abuild_phase
-'''
-# de package() de Alpine (traducido $pkgdir→/out):
+compile = 'make CFLAGS="-O2"'
 install = '''
-_abuild_phase() {
+set -e
 make install PREFIX="/usr" DESTDIR="/out"
-	ln -s samu "/out"/usr/bin/ninja
-}
-_abuild_phase
+ln -s samu /out/usr/bin/ninja
 '''
diff --git a/recipes/seatd.toml b/recipes/seatd.toml
new file mode 100644
index 00000000..4d42785c
--- /dev/null
+++ b/recipes/seatd.toml
@@ -0,0 +1,23 @@
+# seatd 0.9.3 — daemon de gestión de seats + libseat. mirada abre el nodo DRM (master) vía
+# libseat tras el handoff del splash. Backend seatd (sin logind/elogind — no lo tenemos ni lo
+# queremos en el rootfs arje). Sin man-pages (evita scdoc) ni ejemplos. zig 0.13.0 (patrón musl).
+name    = "seatd"
+version = "0.9.3"
+
+[source]
+tarball = "https://git.sr.ht/~kennylevinsen/seatd/archive/0.9.3.tar.gz"
+sha256  = "302564d54d8e28191fadfd734f2675ecb0c9e0615a58011b89ef15dfa4dbaa96"
+
+[build]
+compiler    = "zig-cc"
+target      = "x86_64-linux-musl"
+link        = "dynamic"
+zig_version = "0.13.0"
+
+[build.phases]
+configure = "meson setup output --prefix=/usr --buildtype=release -Dwerror=false -Dlibseat-logind=disabled -Dlibseat-seatd=enabled -Dserver=enabled -Dman-pages=disabled -Dexamples=disabled"
+compile   = "ninja -C output"
+install   = "DESTDIR=/out ninja -C output install"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf"]
diff --git a/recipes/wayland-protocols.toml b/recipes/wayland-protocols.toml
new file mode 100644
index 00000000..e973f8ee
--- /dev/null
+++ b/recipes/wayland-protocols.toml
@@ -0,0 +1,22 @@
+# wayland-protocols 1.48 — colección de extensiones de protocolo Wayland (XML + .pc). No compila
+# nada: instala los XML que mirada/clientes usan vía wayland-scanner. build-dep wayland (la build
+# de meson chequea wayland-scanner). Sin tests.
+name    = "wayland-protocols"
+version = "1.48"
+
+[source]
+tarball = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/1.48/downloads/wayland-protocols-1.48.tar.xz"
+sha256  = "398036ac0eb6484982ddbde7ff86848d753231f9cdeeae983f06b52946625aa1"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+
+[build.phases]
+configure = "meson setup output --prefix=/usr --buildtype=release -Dtests=false"
+compile   = "ninja -C output"
+install   = "DESTDIR=/out ninja -C output install"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "wayland"]
diff --git a/recipes/wayland.toml b/recipes/wayland.toml
new file mode 100644
index 00000000..592f9883
--- /dev/null
+++ b/recipes/wayland.toml
@@ -0,0 +1,24 @@
+# wayland 1.25.0 — libwayland-client/server + wayland-scanner. Lo enlaza mirada (smithay) y Mesa
+# (plataforma wayland). Proyecto meson. Sin docs/tests; sin dtd_validation para no arrastrar
+# libxml2. Core enlaza libffi; wayland-scanner usa expat (ambos ya en hammer). zig 0.13.0 por el
+# patrón musl (evita miscompilación del zig default). link=dynamic: shared libs.
+name    = "wayland"
+version = "1.25.0"
+
+[source]
+tarball = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.25.0/downloads/wayland-1.25.0.tar.xz"
+sha256  = "c065f040afdff3177680600f249727e41a1afc22fccf27222f15f5306faa1f03"
+
+[build]
+compiler    = "zig-cc"
+target      = "x86_64-linux-musl"
+link        = "dynamic"
+zig_version = "0.13.0"
+
+[build.phases]
+configure = "meson setup output --prefix=/usr --buildtype=release -Ddocumentation=false -Dtests=false -Ddtd_validation=false -Ddefault_library=both"
+compile   = "ninja -C output"
+install   = "DESTDIR=/out ninja -C output install"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "libffi", "expat"]