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>
This commit is contained in:
@@ -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):
|
||||
|
||||
+11
-21
@@ -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
|
||||
'''
|
||||
|
||||
@@ -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"]
|
||||
@@ -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"]
|
||||
@@ -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"]
|
||||
Reference in New Issue
Block a user