SpiderMonkey er Mozillas JavaScript og WebAssembly Engine, skrevet i C++ og Rust. I BLFS er kildekoden til SpiderMonkey hentet fra Firefox.
Utviklingsversjoner av BLFS kan kanskje ikke bygge eller kjøre noen pakker riktig hvis LFS eller avhengigheter har blitt oppdatert siden de siste stabile versjonene av bøkene.
Nedlasting (HTTP): https://archive.mozilla.org/pub/firefox/releases/140.14.0esr/source/firefox-140.14.0esr.source.tar.xz
Nedlasting MD5 sum: c2eb4ac79de8b34cb3353272bea1cbd3
Nedlastingsstørrelse: 614 MB
Estimert diskplass som kreves: 4.7 GB (55 MB installert etter fjerning av 42 MB statiske biblioteker; legg til 29 MB for main og jit testene)
Estimert byggetid: 1.9 SBU (med parallellitet=4; legg til 0.4 SBU for hovedtestene og 2.6 SBU for jit testene)
Cbindgen-0.29.4, ICU-78.3, Which-2.25
LLVM-23.1.0 (med Clang, kreves for 32-bits systemer uten SSE2 funksjoner)
Hvis du bygger denne pakken på et 32-bits system, og Clang ikke
er installert eller du overstyrer standard kompilatorvalg med
miljøvariabelen CXX, vennligst les
Parameterforklaringer først.
I motsetning til de fleste andre pakker i BLFS, krever
instruksjonene nedenfor at du pakker ut firefox-140.14.0esr.tar.xz og går inn i
firefox-140.14.0 mappen.
Pakke ut tarballen vil tilbakestille tillatelsene til gjeldende
mappe til 0755 hvis du har tillatelse til å gjøre det. Hvis du
gjør dette i en mappe hvor den klebrige biten er satt, slik som
/tmp vil det ende med
feilmeldinger:
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-t: Operation not permitted
tar: Exiting with failure status due to previous errors
Dette avsluttes med ikke-null status, men det betyr IKKE at det er et reelt problem. Ikke
untar som root bruker i en mappe
der klebrig biten er satt - det vil deaktivere den.
Først, installer en oppdatering for å fikse kompatibiliteten med Python 3.14:
patch -Np1 -i ../spidermonkey-140.14.0-python_3.14_fixes-1.patch
Fiks bygging av denne pakken med rustc 1.98 eller nyere:
patch -Np1 -i ../spidermonkey-140.14.0-rust_1_98-1.patch
Konfigurasjonen av SpiderMonkey
oppnås ved å opprette en mozconfig
fil som inneholder de ønskede konfigurasjonsalternativene. En
standard mozconfig opprettes
nedenfor. For å se hele listen over tilgjengelige
konfigurasjonsalternativer (og en kort beskrivelse av hvert),
utsted ./mach configure -- --help |
less. Opprett filen med følgende kommando:
cat > mozconfig << "EOF"
ac_add_options --prefix=/usr
ac_add_options --enable-project=js
ac_add_options --disable-debug-symbols
ac_add_options --disable-jemalloc
ac_add_options --enable-readline
ac_add_options --enable-rust-simd
ac_add_options --with-intl-api
ac_add_options --with-system-icu
ac_add_options --with-system-zlib
EOF
Nå kan du kalle Python skriptet mach for å kompilere SpiderMonkey:
Hvis du kompilerer denne pakken i chroot, må du Først som
root bruker, sørge for at
/dev/shm er montert. Hvis du ikke
gjør dette, Python
konfigurasjonen vil mislykkes med en tilbakesporingsrapport som
viser til /usr/lib/pythonN.N/multiprocessing/synchronize.py.
Som root bruker, kjør:
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none && export MOZBUILD_STATE_PATH=$(pwd)/mozbuild && ./mach build
For å kjøre SpiderMonkey testpakken, utsted:
./mach jstests
Fordi vi bygger med system ICU, litt over 100 tester, avhengig av ICU versjon, (av totalt mer enn 50 000) er kjent for å mislykkes.
Testpakken kjøres med alle CPU kjerner tilgjengelig: selv i en cgroup med færre kjerner tildelt, prøver den fortsatt å skape like mange testjobber som alle kjerner i systemet; Heldigvis vil kjernen fortsatt ikke kjøre disse jobbene på kjerner som ikke er tildelt cgroup, så CPU bruken er fortsatt kontrollert.
For å kjøre JIT testpakken, utsted følgende kommando:
./mach jit-test
I likhet med SpiderMonkey testpakken er antallet testjobber det
samme som antall CPU kjerner i systemet selv om en cgroup brukes.
For å gjøre ting verre, noen testtilfeller kan bruke opptil 4 GB av
systemminnet, så maksimal minnebruk kan være svært stor hvis du har
flere CPU kjerner. Å kjøre JIT testpakken uten nok minne kan
påkalle kjernens OOM-killer og forårsake stabilitets problemer.
Hvis du ikke har nok systemminne tilgjengelig, legg til
-j til kommandoen og erstatt
NN med nummeret av
testjobber det tilgjengelige systemminnet kan inneholde. For
eksempel hvis du har 15 GB systemminne tilgjengelig og 4 CPU
kjerner, legg til -j3 for å kjøre
testpakken med 3 parallelle jobber slik at minnebruken ikke
overskrider 12 GB.
Et problem i installasjonsprosessen forårsaker at ethvert program som kjører og lenker til SpiderMonkey delte bibliotek (for eksempel GNOME Shell) til å krasje hvis SpiderMonkey installeres på nytt, eller oppgraderes eller nedgraderes uten endring av hovedversjonsnummeret (140 in 140.14.0). For å omgå dette problemet, fjern den gamle versjonen av SpiderMonkey delte bibliotek før installasjonen:
rm -fv /usr/lib/libmozjs-140.so
Installer SpiderMonkey ved å kjøre
følgende kommandoer som root
bruker:
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none ./mach install
Fortsatt som root bruker, fjern et
ubrukelig og veldig stort statisk bibliotek, og fjern en feilaktig
utdata fra js140-config script:
rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js140-config
Fortsatt som root bruker, fiks et
problem med ett av de installerte deklarasjonene:
sed '$i#define XP_UNIX' -i /usr/include/mozjs-140/js-config.h
Tøm miljøvariablene som ble angitt ovenfor:
unset MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE &&
unset MOZBUILD_STATE_PATH
MOZBUILD_STATE_PATH=${PWD}/mozbuild:
Overstyr standardplasseringen (${HOME}/.mozbuild) for hurtigbufferen til
byggesystemet, for å unngå å forurense hjemmemappen.
--disable-debug-symbols:
Ikke generer feilsøking symboler siden de er veldig store og de
fleste brukere ikke trenger det. Fjern det hvis du vil feilsøke
SpiderMonkey.
--disable-jemalloc: Denne
bryteren deaktiverer intern minneallokator brukt i SpiderMonkey.
jemalloc er bare beregnet for nettlesermiljøet Firefox. For andre
applikasjoner som bruker SpiderMonkey, kan applikasjonen krasje
siden elementer tildelt i jemalloc allokatoren er frigjort på
systemets (glibc) allokatoren.
--enable-readline: Denne
bryteren aktiverer Readline støtte i SpiderMonkey
kommandolinjegrensesnittet.
--enable-rust-simd: Denne
bryteren aktiverer SIMD optimalisering i den leverte encoding_rs
crate.
--with-intl-api: Dette
aktiverer internasjonaliseringsfunksjoner som kreves av
Gjs.
--with-system-*: Disse
parameterne tillater byggesystemet å bruke systemversjoner av
bibliotekene ovenfor. Disse kreves for stabilitet.
export CC=gcc og
export CXX=g++: BLFS
brukte å foretrekke å bruke gcc og g++ i stedet for upstreams
standardinnstillinger for clang
programmer. Med utgivelsen av gcc-12 bygget tar lengre tid med gcc
og g++, først og fremst fordi ekstra advarsler, og er større. Sett
disse to kommandoene inn i mozconfig
filen hvis du ønsker å fortsette å bruke gcc og g++. Hvis du bygger
på et 32-bits system, se også nedenfor.
export CXXFLAGS="$CXXFLAGS -msse2
-mfpmath=sse": Bruk SSE2 i stedet for 387 for
flytende komma med dobbel presisjon operasjoner. Det er nødvendig
for å tilfredsstille forventningene til oppstrøms (Mozilla)
utviklere med flyttall (som betyr at en 32-bits prosessor som
mangler SSE2 ikke er i stand til å kjøre denne pakken). Legg den
til i mozconfig hvis du bygger denne
pakken på et 32-bits system med GCC. Denne innstillingen er ikke
nødvendig med Clang, og heller ikke med GCC på et 64-bits system
fordi disse konfigurasjonene har SSE2 aktivert som standard.