SDD 26 §3: corregido — la toolchain no era una receta de LLVM, era apk add lld

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).
This commit is contained in:
Sergio
2026-09-05 03:14:02 +00:00
parent cb3ecd5a00
commit e5bf8da35a
+27 -6
View File
@@ -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 |