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/.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"]