Files
takana/docs/state/lab-toolchain.lock
Sergio cb3ecd5a00 firefox pasa a clang+lld con LTO: la puerta de las optimizaciones costaba apk add lld, no una receta de LLVM
El SDD 26 estimó que habilitar PGO/LTO exigía una receta `llvm-toolchain` (clang+lld+libc++ desde
fuente). ERA CARO DE MÁS. Al mirar 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 y
  `hammer-build/src/lib.rs` pone CC=clang, CXX=clang++ y AR=llvm-ar. NINGUNA receta lo usaba.
- Lo único que faltaba era `ld.lld`. `apk add lld` ⇒ lld22 22.1.8, dos paquetes, cero upgrades.

CON ESO CAEN LOS TRES MUROS QUE OBLIGABAN A gcc, 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 es lo que hace barato el
cambio HOY, y a la vez es un agujero escrito en los dos sitios: la versión de lld no es parte de la
identidad del artefacto, y sólo expone a las recetas `compiler="clang"`, que hoy es una. Meter
"lld" en la lista de prefijos es lo correcto y cuesta re-hashear el corpus entero: próxima campaña.

En el mozconfig entran, además de lld: `--enable-lto=cross`, `--enable-packed-relative-relocs` y
`--with-unsigned-addon-scopes=app,system`. El último no es cosmético: sin él un Firefox de release
rechaza las extensiones que la distro deja en distribution/extensions/, así que la capacidad de atuq
de shipear su propio `sct` se decide ACÁ, en la base, y no en el overlay del derivado.

PGO no entra en esta pasada y el porqué queda escrito en la receta: el perfil se junta corriendo el
navegador (Alpine y Arch usan xvfb-run; nosotros no tenemos X11 ⇒ sway headless) y el profdata NO es
determinista, así que tiene que sellarse como artefacto propio y consumirse por hash.

ThinLTO se capa con la misma cuenta que -j y por la misma razón que ella no es un literal: un número
fijo ataría el ArtifactHash a la RAM de quien escribió la receta.

Nuevo ArtifactHash: b3:6f2a3b2f6db4452ed0d2d3f4e2ff7cd6562a86878d4360653859720be1c3d94d
(el firefox 154.0 sellado con gcc queda SUPERADO, no perdido).
2026-09-05 03:13:38 +00:00

114 lines
2.4 KiB
Plaintext

# Toolchain del lab (.dev-fs/alpine) resuelto desde Alpine edge — RODANTE.
# Regenerar deliberadamente con: scripts/bootstrap-devfs.sh --relock
# No es un pin: edge sólo sirve la última versión. Esto DETECTA la deriva, no la evita.
acl-libs-2.3.2-r1
alpine-baselayout-3.7.2-r0
alpine-baselayout-data-3.7.2-r0
alpine-keys-2.6-r0
alpine-release-3.23.4-r0
apk-tools-3.0.6-r0
autoconf-2.72-r1
automake-1.18.1-r0
bash-5.3.3-r1
binutils-2.45.1-r0
brotli-libs-1.2.0-r1
bubblewrap-0.11.2-r0
busybox-1.37.0-r30
busybox-binsh-1.37.0-r30
bzip2-dev-1.0.8-r6
c-ares-1.34.8-r0
ca-certificates-bundle-20260413-r0
cargo-1.97.0-r0
clang22-22.1.8-r0
clang22-dev-22.1.8-r0
clang22-extra-tools-22.1.8-r0
clang22-headers-22.1.8-r0
clang22-libclang-22.1.8-r0
clang22-libs-22.1.8-r0
coreutils-9.8-r1
coreutils-env-9.8-r1
coreutils-fmt-9.8-r1
coreutils-sha512sum-9.8-r1
curl-8.21.0-r0
expat-2.8.2-r0
expat-dev-2.8.2-r0
fortify-headers-3.0.2-r0
g++-15.2.0-r8
gcc-15.2.0-r8
git-2.55.0-r1
git-init-template-2.55.0-r1
git-perl-2.55.0-r1
gmp-6.3.0-r4
isl26-0.26-r2
jansson-2.14.1-r0
kmod-34.2-r1
libapk-3.0.6-r0
libatomic-15.2.0-r8
libattr-2.5.2-r2
libbz2-1.0.8-r6
libcap2-2.78-r0
libcrypto3-3.5.6-r0
libcurl-8.21.0-r0
libexpat-2.8.2-r0
libffi-3.5.2-r1
libffi-dev-3.5.2-r1
libformw-6.6_p20260516-r0
libgcc-15.2.0-r2
libgcc-static-15.2.0-r8
libgomp-15.2.0-r8
libhistory-8.3.3-r1
libidn2-2.3.8-r0
libltdl-2.5.4-r2
libmenuw-6.6_p20260516-r0
libncurses++-6.6_p20260516-r0
libncursesw-6.6_p20260516-r0
libpanelw-6.6_p20260516-r0
libpsl-0.21.5-r3
libssh2-1.11.1-r3
libssl3-3.5.6-r0
libstdc++-15.2.0-r8
libstdc++-dev-15.2.0-r8
libtool-2.5.4-r2
libunistring-1.4.2-r0
libxml2-2.13.9-r2
linux-headers-7.1.5-r0
lld22-22.1.8-r0
lld22-libs-22.1.8-r0
llvm22-22.1.8-r1
llvm22-libs-22.1.8-r1
llvm22-linker-tools-22.1.8-r1
m4-1.4.20-r0
make-4.4.1-r3
mpc1-1.3.1-r1
mpfr4-4.2.2-r0
musl-1.2.6-r2
musl-dev-1.2.6-r2
musl-libintl-1.2.6-r2
musl-utils-1.2.5-r23
ncurses-dev-6.6_p20260516-r0
ncurses-terminfo-base-6.6_p20260516-r0
nghttp2-libs-1.70.0-r0
patch-2.8-r0
pcre2-10.47-r1
perl-5.42.2-r0
perl-error-0.17030-r0
perl-git-2.55.0-r1
pkgconf-2.5.1-r0
readline-8.3.3-r1
readline-dev-8.3.3-r1
rust-1.97.0-r0
scanelf-1.3.8-r2
scudo-malloc-22.1.8-r0
skalibs-libs-2.14.4.0-r0
sqlite-3.53.4-r0
sqlite-dev-3.53.4-r0
sqlite-libs-3.53.4-r0
ssl_client-1.37.0-r30
utmps-libs-0.1.3.1-r0
xz-5.8.3-r0
xz-dev-5.8.3-r0
xz-libs-5.8.3-r0
zlib-1.3.2-r0
zlib-dev-1.3.2-r0
zstd-libs-1.5.7-r2