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 ikke bygge eller kjøre noen pakker riktig hvis LFS eller avhengigheter har blitt oppdatert siden den siste stabile versjonene av bøkene.
Nedlasting (HTTP): https://archive.mozilla.org/pub/firefox/releases/128.4.0esr/source/firefox-128.4.0esr.source.tar.xz
Nedlasting MD5 sum: b541a15be48b06c6fbbe665601587e15
Nedlastingsstørrelse: 533 MB
Estimert diskplass som kreves: 3.6 GB (40 MB installert etter fjerning av 36 MB statisk lib; legg til 34 MB for hovedtestene og 37 MB for jit testene)
Estimert byggetid: 1.9 SBU (med parallellitet=4; legg til 1,1 SBU for hovedtestene og 3,7 SBU for jit testene)
ICU-76.1, rustc-1.82.0, og Which-2.21
LLVM-19.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 deg å untare firefox-128.4.0esr.tar.xz
og gå inn i
firefox-128.4.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.
Hvis du bruker ICU-76.1 eller nyere, må du tilpasse byggesystemet til å bruke riktig bibliotek:
sed -i 's/icu-i18n/icu-uc &/' js/moz.configure
Installer SpiderMonkey ved å kjøre følgende kommandoer:
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
Å kompilere C++ koden respekterer $MAKEFLAGS og er standard til 'j1', rust koden vil bruke alle prosessorer.
mkdir obj && cd obj && ../js/src/configure --prefix=/usr \ --disable-debug-symbols \ --disable-jemalloc \ --enable-readline \ --enable-rust-simd \ --with-intl-api \ --with-system-icu \ --with-system-zlib && make
Hvis du ønsker å kjøre testpakken, må du tilpasse den til å være kompatibel med Python 3.13.0 eller nyere:
sed 's/pipes/shlex/' -i ../js/src/tests/lib/results.py
For å kjøre SpiderMonkey testpakken, utsted:
make -C js/src check-jstests \ JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled" | tee jstest.log
Fordi vi bygger med systemets ICU, 158 tester (av totalt mer enn 50
000) er kjent for å mislykkes. Listen over mislykkede tester kan
hentes ut via grep 'UNEXPECTED-FAIL'
jstest.log. Send -c
alternativet til grep
hvis du vil bare ha det totale antallet mislykkede tester.
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, utfør følgende kommando. Merk at 6 tester i 'timezone.js' pakken er kjent for å mislykkes på grunn av ICU-76.
make -C js/src check-jit-test JSTESTS_EXTRA_ARGS="--timeout 300"
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, det er seks tester som vil bruke 3 GB hver
av systemminne, slik at maksimal minnebruk kan være opptil 18 GB
hvis antall kjerner er seks eller flere. Å kjører 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 -jN
etter
--timeout 300
med N erstattet av antall
parallelle testjobber du ønsker å starte. For eksempel, hvis du har
16 GB systemminne tilgjengelig og 8 CPU kjerner, bruk JITTEST_EXTRA_ARGS="--timeout=300 -j5"
for å kjøre
testpakken med 5 parallelle jobber slik at minnebruken ikke
overskrider 15 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 (128 in 128.4.0). For å omgå dette problemet, fjern den gamle versjonen av SpiderMonkey delte bibliotek før installasjonen:
rm -fv /usr/lib/libmozjs-128.so
Nå, som root
bruker:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js128-config
--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.
rm -v /usr/lib/libjs_static.ajs: Fjern et stort statisk bibliotek som ikke brukes av noen BLFS pakke.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js128-config: Forhindrer js128-config fra å bruke buggy CFLAGS.
: BLFS pleide å foretrekke å bruke gcc og g++
i stedet for oppstrøms 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. Send disse miljøvariablene til
konfigureringsskriptet hvis du ønsker å fortsette å bruke gcc, g++
(ved å eksportere dem og deaktivere dem etter installasjonen, eller
ganske enkelt forberede dem før ../js/src/configure kommandoen).
Hvis du bygger på et 32-bits system, se også nedenfor.
CC=gcc
CXX=g++
: Bruk SSE2 i stedet for 387 for
flytende komma med dobbel presisjon operasjoner. Det er nødvendig
for GCC for å tilfredsstille forventningene til oppstrøms (Mozilla)
utviklere med flytende komma aritmetikk. Bruk den hvis du bygger
denne pakken på et 32-bits system med GCC (hvis Clang ikke er
installert eller GCC er eksplisitt spesifisert). Merk at dette vil
føre til at SpiderMonkey krasjer på en prosessor uten SSE2 evne.
Hvis du kjører systemet på en så gammel prosessor, er Clang strengt
tatt nødvendig. Denne innstillingen er ikke nødvendig på 64-bits
systemer fordi alle 64-bits x86-prosessorer støtter SSE2 og 64-bits
kompilatorer (både Clang og GCC) bruker SSE2 som standard.
CXXFLAGS="-msse2
-mfpmath=sse"