From e5bf8da35a4f516bb72e0e40d0dbb24a4e6a7a22 Mon Sep 17 00:00:00 2001 From: Sergio Date: Sat, 5 Sep 2026 03:14:02 +0000 Subject: [PATCH] =?UTF-8?q?SDD=2026=20=C2=A73:=20corregido=20=E2=80=94=20l?= =?UTF-8?q?a=20toolchain=20no=20era=20una=20receta=20de=20LLVM,=20era=20`a?= =?UTF-8?q?pk=20add=20lld`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El documento estimó una receta `llvm-toolchain` (clang+lld+libc++ desde fuente) como la unidad de mayor palanca del frente. Mirar el lab en vez de suponerlo la redujo a un `apk add`: clang22 y llvm22 ya estaban, `Compiler::Clang` ya estaba cableado en hammer y ninguna receta lo usaba. Se corrige el §3 con la evidencia y la medición de la huella (no se movió ⇒ 837 artefactos intactos), y el plan del §8: la unidad 2 queda cerrada, la 3 pasa a ser construir, y el PGO se separa como 3.a porque tiene sus propios dos muros (sin X11 para el profileserver, profdata no determinista). --- docs/26-atuq-envoltorio-gecko.md | 33 ++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 946bdba1..8c6086fd 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -89,10 +89,30 @@ Y **el corpus no tiene clang usable como compilador**. Verificado en las recetas `bindgen` carga `libclang.so` en runtime. **No hay driver `clang`, ni `lld`, ni `libc++`.** - `llvm18` se selló con `-DLLVM_ENABLE_PROJECTS=""` — LLVM a secas. -⇒ **la unidad de trabajo real es una receta `llvm-toolchain` con clang + lld + `libc++` compartida -para musl.** Es la misma pieza que resuelve el muro 3, así que destraba de una sola vez: LTO, PGO, -BOLT, y el regreso de Firefox a una toolchain más cercana a la del resto del corpus. **Es la mayor -palanca por unidad de trabajo que hay en este frente**, y por eso encabeza el plan del §8. +⇒ la primera versión de este documento concluyó que hacía falta **una receta `llvm-toolchain` +(clang+lld+libc++ desde fuente)**. **Era caro de más, y se corrigió el mismo día mirando el lab en +vez de suponerlo:** + +- `.dev-fs/alpine` **ya trae clang22 + llvm22 22.1.8** — la misma major que usa el APKBUILD de + Alpine para este mismo Firefox (`_llvmver=22`). +- **`Compiler::Clang` ya existe en hammer**, cableado de punta a punta (`parse_compiler` lo acepta; + `hammer-build` pone `CC=clang`, `CXX=clang++`, `AR=llvm-ar`). Ninguna receta lo usaba. +- Faltaba **sólo `ld.lld`**: `apk add lld` ⇒ dos paquetes, cero upgrades. + +Y los tres muros caen sin perder lo que gcc daba: el sondeo de linker se satisface con +`--enable-linker=lld`, el `ar` lo pone hammer solo, y el `NEEDED` de la stdlib de C++ existe porque +clang++ de Alpine usa la `libstdc++` **compartida** — la prueba no es teórica: Alpine construye este +Firefox con clang22 y **sin** `libcxx` en sus makedepends. + +**La huella del lab no se movió, y se midió antes de tocar nada.** `lld` no casa ningún prefijo de +`TOOLCHAIN_PREFIXES` (`hammer-core/src/lab.rs`), así que los 43 paquetes que entran en `hash_inputs` +salieron idénticos ⇒ **los 837 artefactos sellados quedan intactos**. Eso abarata el cambio hoy y a +la vez deja un agujero escrito: la versión de `lld` no es parte de la identidad del artefacto, y sólo +expone a las recetas `compiler="clang"` — hoy, una. Cerrarlo cuesta re-hashear el corpus entero. + +**Hecho el 2026-09-05** (commit `cb3ecd5`): `firefox` va con `compiler = "clang"`, +`--enable-linker=lld`, `--enable-lto=cross`, `--enable-packed-relative-relocs` y +`--with-unsigned-addon-scopes=app,system`. Falta construirlo. **Riesgos de PGO, escritos antes de empezar:** @@ -265,8 +285,9 @@ siguiente. | # | Unidad | Puerta que abre | Bloqueada por | |---|---|---|---| | 1 | `waterfox` sella | valida la tesis del reúso | build en curso | -| 2 | **`llvm-toolchain`** (clang+lld+libc++ musl) | LTO, PGO, BOLT **y** el muro 3 | — | -| 3 | **`firefox` en UNA pasada**: LTO, PGO (perfil sellado aparte), lld, RELR, `--with-unsigned-addon-scopes` | el eje de velocidad **y** las extensiones de `atuq` | 2 | +| 2 | ~~`llvm-toolchain`~~ → **`apk add lld` + `compiler="clang"`** ✅ 2026-09-05 | LTO **y** el muro 3 | — | +| 3 | Construir el `firefox` con LTO (hash `b3:6f2a3b2f`) | el eje de velocidad **y** las extensiones de `atuq` | 2 ✅ | +| 3.a | PGO: perfil bajo sway headless, **sellado como artefacto propio** y consumido por hash | la otra mitad de la ganancia | 3 | | 3.b | `wasi-sdk` + `wasi-compiler-rt` ⇒ RLBox encendido | cierra el hueco de seguridad del §3.bis | 2 | | 4 | **`atuq`: receta derivada + overlay de chrome** | el andamio de todo lo demás | 1 | | 5 | Host de native messaging (tawasuyu) | los verbos del §6 | 4 |