SpiderMonkey fra firefox-128.4.0

Introduksjon til SpiderMonkey

SpiderMonkey er Mozillas JavaScript og WebAssembly Engine, skrevet i C++ og Rust. I BLFS er kildekoden til SpiderMonkey hentet fra Firefox.

[Notat]

Notat

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.

Pakkeinformasjon

SpiderMonkey Avhengigheter

Påkrevd

ICU-76.1, rustc-1.82.0, og Which-2.21

Anbefalt

[Viktig]

Viktig

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.

Installasjon av SpiderMonkey

[Notat]

Notat

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:

[Notat]

Notat

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.

[Obs]

Obs

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

Parameterforklaringer

--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.

CC=gcc CXX=g++: 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.

CXXFLAGS="-msse2 -mfpmath=sse": 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.

Innhold

Installerte Programmer: js128 og js128-config
Installerte Biblioteker: libmozjs-128.so
Installerte Mapper: /usr/include/mozjs-128

Korte Beskrivelser

js128

gir et kommandolinjegrensesnitt til JavaScript motoren

js128-config

brukes til å finne SpiderMonkey kompilatoren og linkerflaggene

libmozjs-128.so

inneholder Mozilla JavaScript API funksjoner