# spidermonkey (mozjs 128 ESR) — el motor JavaScript de Mozilla. KEYSTONE del frente GNOME: gjs cuelga # de él, y gnome-shell cuelga de gjs. Es de lo más DIFÍCIL que hay en cualquier distro. # # ⚠ PRIMER BORRADOR — NO va a sellar a la primera. mozjs sobre musl nunca compila de un saque; el # sistema de build de Mozilla (mach/configure) NO es uno de los auto-detectados por el lab, así que las # fases van A MANO y hay que ITERARLAS EN EL WORKER (ccx33 o mayor: el compile C++ come ~8GB+ y quiere # swap; ccx23 va justo). Anclado al APKBUILD de mozjs128 de Alpine (misma libc musl). Decisiones: # · Fuente = tarball del SOURCE de Firefox 128.14.0esr (mozjs se construye desde js/src de ese árbol). # · clang (el rootfs trae LLVM 22); mozjs prefiere clang fuerte a gcc. # · icu IN-TREE (--without-system-icu): evita casar versiones de un icu del sistema (una dep menos). # · nspr y zlib del sistema (recetas nspr + zlib del corpus). # · shared-js (libmozjs-128.so) — lo que gjs enlaza. # Cosas que MUY probablemente haya que tocar al iterar: el nombre exacto del build dir/mach vs configure, # --enable-release/--enable-hardening, flags de linker (lld), y RUST/CBINDGEN en PATH. Cuando selle en # el worker, se congela el hash y se promueve. name = "spidermonkey" version = "128.14.0" license = "MPL-2.0" [source] tarball = "https://ftp.mozilla.org/pub/firefox/releases/128.14.0esr/source/firefox-128.14.0esr.source.tar.xz" sha256 = "93b9ef6229f41cb22ff109b95bbf61a78395a0fe4b870192eeca22947cb09a53" strip_components = 1 [build] compiler = "clang" target = "x86_64-linux-musl" link = "dynamic" [build.phases] # 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. # 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"]