SpiderMonkey fra firefox-140.14.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 kanskje ikke bygge eller kjøre noen pakker riktig hvis LFS eller avhengigheter har blitt oppdatert siden de siste stabile versjonene av bøkene.

Pakkeinformasjon

Ytterligere Nedlastinger

SpiderMonkey Avhengigheter

Påkrevd

Cbindgen-0.29.4, ICU-78.3, Which-2.25

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

[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
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 -jN til kommandoen og erstatt N 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.

[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 (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

Parameterforklaringer

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.

Innhold

Installerte Programmer: js140 og js140-config
Installerte Biblioteker: libmozjs-140.so
Installerte Mapper: /usr/include/mozjs-140

Korte Beskrivelser

js140

gir et kommandolinjegrensesnitt til JavaScript motoren

js140-config

brukes til å finne SpiderMonkey kompilatoren og linkerflaggene

libmozjs-140.so

inneholder Mozilla JavaScript API funksjoner