From 9a028ba04fcd990aca8139a81d73eb0e8624366b Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 24 Jul 2026 14:17:13 -0400 Subject: [PATCH] =?UTF-8?q?gnome:=20SPIDERMONKEY=20(mozjs=20128)=20SELLA?= =?UTF-8?q?=20en=20el=20hub=20=E2=80=94=20keystone=20ca=C3=ADdo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El motor JS de Mozilla, keystone del frente GNOME (gjs→gnome-shell cuelgan de él), sella b3:c48dbd10: libmozjs-128.so + libjs_static.a + shell js128 + mozjs-128.pc + 550 headers. Compiló el C++ entero a -O3 -j8 sin OOM en el hub (31GB/0 swap, al filo). Seis capas iteradas desde el borrador: 1-2. FIX DE INFRA: el rootfs builder tenía clang pero NO el paquete (Alpine separa los binutils LLVM del compilador). Sin llvm-ar/llvm-objdump/llvm-profdata configure aborta. bootstrap-devfs.sh: +llvm22 en NEEDED + paso 3a-ter que symlinkea la suite llvm-* a /usr/bin (Alpine la deja en /usr/lib/llvm22/bin sin exponerla). Aplicado ya al rootfs real (.dev-fs/alpine). 3. triple: mozjs no traduce vendor ; 4. debe COINCIDIR con el host de rustc (); fijado ese exacto. 5. venv de mach: cada fase es un bwrap con /tmp fresco ⇒ el venv no sobrevivía de configure a compile. Anclado a /src/.mozbuild (persiste, es scratch). No re-hashea artefactos (el rootfs no entra al hash). OJO: el worker golden también necesita llvm22 (ya cubierto por bootstrap-devfs.sh para la próxima provisión). Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/state/build-state-gnome.json | 27 ++++++++++++------------ recipes/incoming-gnome/spidermonkey.toml | 18 ++++++++++++---- scripts/bootstrap-devfs.sh | 20 +++++++++++++++++- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json index a01d073e..1e19eb7f 100644 --- a/docs/state/build-state-gnome.json +++ b/docs/state/build-state-gnome.json @@ -3,8 +3,8 @@ "totals": { "recipes": 773, "nodes": 782, - "sealed": 768, - "never": 3, + "sealed": 769, + "never": 2, "debt": 2, "wanted": 9 }, @@ -17,7 +17,7 @@ "wanted": 9 }, "debt_by_class": { - "c": 3, + "c": 2, "gui": 1, "rust": 1 }, @@ -28,8 +28,7 @@ "debt": 2 }, "incoming-gnome": { - "sealed": 3, - "never": 1, + "sealed": 4, "wanted": 9 } }, @@ -1862,7 +1861,7 @@ "hash": "b3:e59e41932a98d1b2e81e31bb8637e41a44b678d4fc694caf2a11cff98afae4b6", "state": "sealed", "blocked_by": [], - "unblocks": 1, + "unblocks": 0, "perfiles": [], "dependientes_total": 1 }, @@ -8344,7 +8343,7 @@ "hash": "b3:fbad44acdc76df4b081cccd3cc02666664b6d1a03cd6fa482f85791fa533a602", "state": "sealed", "blocked_by": [], - "unblocks": 2, + "unblocks": 1, "perfiles": [ "base", "cli", @@ -9137,7 +9136,7 @@ "hash": "b3:33383070e28a0e75d4f6ddaa9e93a13968e8ad1932c6c149ad04defac660f9f0", "state": "sealed", "blocked_by": [], - "unblocks": 1, + "unblocks": 0, "perfiles": [], "dependientes_total": 1 }, @@ -9403,7 +9402,7 @@ "hash": "b3:d7b71315b334e4bb7b34670a070a37f273611c87b7c1b2d59c6576dec0b4baaa", "state": "sealed", "blocked_by": [], - "unblocks": 1, + "unblocks": 0, "perfiles": [], "dependientes_total": 1 }, @@ -10108,7 +10107,7 @@ "hash": "b3:f0b5d0b1cb4321b3c61f24a871b9a58da3ebb7eb903af4015e35bd41a6465437", "state": "sealed", "blocked_by": [], - "unblocks": 3, + "unblocks": 2, "perfiles": [ "base", "cli", @@ -10401,7 +10400,7 @@ "hash": "b3:27889026076514935b53d486951792d08ed7fd5210b44e7f92979c03c96be665", "state": "sealed", "blocked_by": [], - "unblocks": 1, + "unblocks": 0, "perfiles": [ "base", "cli", @@ -11468,8 +11467,8 @@ ], "cls": "c", "queue": "incoming-gnome", - "hash": "b3:016d512a3f5aa51cde553f65ed0b8b09e95ee57e62de2d60305a1479b4058071", - "state": "never", + "hash": "b3:c48dbd1016a3ff2da124fcc98eacd135e5b2d3acae66f9553ef8d41bc1c0905d", + "state": "sealed", "blocked_by": [], "unblocks": 0, "perfiles": [], @@ -13637,7 +13636,7 @@ "hash": "b3:28522f99f433496dbaacfa309f8e937d6526ac3c8db34b4a94b18e22656dcd33", "state": "sealed", "blocked_by": [], - "unblocks": 4, + "unblocks": 3, "perfiles": [ "base", "cli", diff --git a/recipes/incoming-gnome/spidermonkey.toml b/recipes/incoming-gnome/spidermonkey.toml index d7bc4606..784dedd8 100644 --- a/recipes/incoming-gnome/spidermonkey.toml +++ b/recipes/incoming-gnome/spidermonkey.toml @@ -27,11 +27,21 @@ target = "x86_64-linux-musl" link = "dynamic" [build.phases] -# MOZBUILD_STATE_PATH/MOZ_NOSPAM: mach escribe estado y telemetría; los fijamos a /tmp y los callamos. +# MOZBUILD_STATE_PATH: mach crea ahí su virtualenv de build. CADA fase es un bwrap aparte con +# `--tmpfs /tmp`, así que un venv en /tmp NO sobrevive de configure a compile ("bin/python: No such +# file or directory"). Lo anclamos a /src/.mozbuild (bind RW, persiste entre fases; es scratch, no +# entra a /out ⇒ no afecta el artefacto). MOZ_NOSPAM calla la telemetría. Va en las tres fases. # Se construye en un obj-dir separado dentro de js/src (idioma de mozjs). CC/CXX=clang explícitos. -configure = "export MOZBUILD_STATE_PATH=/tmp/.mozbuild MOZ_NOSPAM=1 SHELL=/bin/sh PYTHON=python3 && cd js/src && mkdir -p obj && cd obj && CC=clang CXX=clang++ AR=llvm-ar ../configure --prefix=/usr --host=$CHOST --target=$CHOST --disable-debug --enable-optimize --enable-release --enable-hardening --disable-jemalloc --enable-shared-js --disable-tests --without-system-icu --with-system-nspr --with-system-zlib" -compile = "cd js/src/obj && make -j\"$(nproc)\"" -install = "cd js/src/obj && make DESTDIR=/out install" +# AR=llvm-ar: mozjs con clang quiere la suite binutils de LLVM (llvm-ar/llvm-objdump/llvm-profdata). +# El rootfs las provee vía el paquete `llvm22` con symlinks en /usr/bin (bootstrap-devfs.sh); antes +# faltaban (sólo estaba `clang`) y configure abortaba "Cannot find ar/llvm-objdump". +# TRIPLE: mozjs exige que el --host de configure COINCIDA con el host que reporta rustc. El rustc del +# rootfs (Alpine) es `x86_64-alpine-linux-musl` (vendor `alpine`, no `pc` ni `unknown`); con cualquier +# otro, mozjs aborta ("rust compiler host ... not suitable for the configure host"). Fijamos ese triple +# exacto — clang lo acepta (vendor genérico) y así C-host == rust-host, que es lo que mozjs valida. +configure = "export MOZBUILD_STATE_PATH=/src/.mozbuild MOZ_NOSPAM=1 SHELL=/bin/sh PYTHON=python3 && cd js/src && mkdir -p obj && cd obj && CC=clang CXX=clang++ AR=llvm-ar ../configure --prefix=/usr --host=x86_64-alpine-linux-musl --target=x86_64-alpine-linux-musl --disable-debug --enable-optimize --enable-release --enable-hardening --disable-jemalloc --enable-shared-js --disable-tests --without-system-icu --with-system-nspr --with-system-zlib" +compile = "export MOZBUILD_STATE_PATH=/src/.mozbuild MOZ_NOSPAM=1 && cd js/src/obj && make -j\"$(nproc)\"" +install = "export MOZBUILD_STATE_PATH=/src/.mozbuild MOZ_NOSPAM=1 && cd js/src/obj && make DESTDIR=/out install" [deps] build = ["nspr", "nasm", "cbindgen", "python3", "make", "zlib", "pkgconf"] diff --git a/scripts/bootstrap-devfs.sh b/scripts/bootstrap-devfs.sh index fd8ecad4..942e5dce 100755 --- a/scripts/bootstrap-devfs.sh +++ b/scripts/bootstrap-devfs.sh @@ -187,7 +187,12 @@ else # El runtime libcrypto3/libssl3 (que curl/git necesitan) lo trae Alpine aparte, no es openssl-dev. # `clang-dev clang-libs`: aportan libclang.so — `bindgen` (que usan varios *-sys: libbzip3-sys, # etc.) lo carga en build para generar bindings de los headers C. No lo trae el base. - NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils g++ zlib-dev rust cargo clang-dev clang-libs linux-headers bubblewrap git curl kmod" + # `llvm22`: la SUITE binutils de LLVM (llvm-ar/llvm-objdump/llvm-profdata/llvm-nm/llvm-readobj). + # `clang`/`clang-libs` NO la arrastran (sólo libLLVM.so + los binarios clang), y mozjs/spidermonkey + # con clang exige llvm-ar y llvm-objdump ⇒ sin esto configure aborta "Cannot find ar/llvm-objdump". + # Alpine deja los binarios en /usr/lib/llvm22/bin SIN symlinkear a /usr/bin (multi-versión); el paso + # 3a-ter de abajo los expone en el PATH estándar, igual que Alpine ya hace con `clang`. + NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils g++ zlib-dev rust cargo clang-dev clang-libs llvm22 linux-headers bubblewrap git curl kmod" missing="" for pkg in $NEEDED; do # apk info -e devuelve el paquete si está instalado, vacío si no. @@ -209,6 +214,19 @@ else ok "build tools presentes en el rootfs ($NEEDED)" fi +# --- 3a-ter. Exponer la suite llvm-* en /usr/bin ----------------------------- +# Alpine instala los binutils de LLVM en /usr/lib/llvm22/bin (versionado) sin symlink a /usr/bin, +# para permitir varias versiones. El PATH del sandbox es fijo (/opt/zig:/usr/local/bin:/usr/bin:...) +# y NO incluye ese dir, así que sin symlinks `llvm-ar`/`llvm-objdump` son invisibles y mozjs no +# configura. Los symlinkeamos relativos (idéntico a como el propio Alpine expone `clang`). Idempotente. +if [[ -d "$ROOTFS/usr/lib/llvm22/bin" ]]; then + for f in "$ROOTFS"/usr/lib/llvm22/bin/llvm-*; do + t="$(basename "$f")" + [[ -e "$ROOTFS/usr/bin/$t" ]] || ln -s "../lib/llvm22/bin/$t" "$ROOTFS/usr/bin/$t" + done + ok "suite llvm-* expuesta en /usr/bin" +fi + # --- 3a-bis. Neutralizar scudo-malloc (frente edge rust) ---------------------- # edge empaqueta rust/cargo con `scudo-malloc` como DEPENDENCIA DURA: los shims rustc/cargo lo # linkean como PRIMER NEEDED ⇒ el allocator endurecido scudo interpone malloc en todo el proceso