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>
77 lines
4.3 KiB
Markdown
77 lines
4.3 KiB
Markdown
# 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` | sí | 🟡 incoming | 2.4.134; **fijar `-Dgallium`? no** — libdrm es agnóstico; `link=dynamic` |
|
|
| lib | `wayland` | sí | 🟡 incoming | 1.25.0; deps expat+libffi; `-Ddocumentation=false` |
|
|
| lib | `wayland-protocols` | sí | 🟡 incoming | 1.48; sólo datos (XML) + meson; dep wayland |
|
|
| lib | `seatd` (→`libseat`) | sí | 🟡 incoming | la sesión de mirada abre el DRM vía libseat |
|
|
| **top** | `mesa` | sí | 🟡 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`+`samurai` → `libdrm`,`wayland` → `wayland-protocols`,`seatd` → `mesa`.
|
|
|
|
## 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.
|