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:
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user