SpiderMonkey est le moteur WebAssembly et JavaScript de Mozilla, écrit en C++ et en Rust. Dans BLFS, le code source de SpiderMonkey provient de Firefox.
This package is known to build and work properly using an LFS 12.1 platform.
Téléchargement (HTTP) : https://archive.mozilla.org/pub/firefox/releases/115.7.0esr/source/firefox-115.7.0esr.source.tar.xz
Somme de contrôle MD5 : 9105bdf076d457ce5e0aa5628d5acc84
Taille du téléchargement : 492 Mo
Estimation de l'espace disque requis : 3,6 Go (40 Mo installés après avoir supprimé la bibliothèque statique de 36 Mo, plus 34 Mo pour les tests principaux et 37 Mo pour les tests jit)
Estimation du temps de construction : 1,9 SBU (avec parallelism=4, plus 1,1 SBU pour les tests principaux et 3,7 SBU pour les tests jit)
ICU-74.2, rustc-1.76.0 , six-1.16.0 et Which-2.21
LLVM-17.0.6 (avec Clang, requis pour les systèmes 32 bits sans la fonctionnalité SSE2)
Si vous construisez ce paquet sur un système 32 bits, et que
Clang n'est pas installé ou que vous remplacez le choix de
compilateur par défaut avec la variable d'environnement
CXX
, consultez d'abord la section
« Explication des commandes ».
Contrairement à la plupart des autres paquets dans BLFS, les
instructions ci-dessous nécessitent de désarchiver firefox-115.7.0esr.tar.xz
et de se déplacer
dans le répertoire firefox-115.7.0
.
L'extraction de l'archive remettra les permissions du répertoire
actuel à 0755 si vous avez les permissions pour cela. Si vous le
faites dans un répertoire où le bit sticky est utilisé, comme
/tmp
, cela terminera avec des
messages d'erreur :
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
Elle termine avec un statut différent de zéro, mais cela ne
signifie PAS qu'il y a un
vrai problème. Ne décompressez pas en tant que root
dans un répertoire où le droit sticky
est activé – cela le désactiverait.
Le système de construction fournit plusieurs copies internes du
module Python 3 six.py
. Les copies
fournies sont trop anciennes pour fonctionner correctement avec
Python 3.12 et supérieur. Remplacez-les par des liens symboliques
vers six-1.16.0 déjà installé sur le système :
for i in $(find -name six.py); do ln -sfv /usr/lib/python3.12/site-packages/six.py $i; done
Installez SpiderMonkey en exécutant les commandes suivantes :
Si vous compilez ce paquet dans un chroot vous vous assurer que
/dev/shm
est monté. Si vous ne le
faites pas, la configuration en Python échouera avec une trace faisant
référence à /usr/lib/pythonN.N/multiprocessing/synchronize.py
.
En tant qu'utilisateur root
,
exécutez :
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
La compilation du code C++ respecte $MAKEFLAGS et utilise « j1 » par défaut, le code rust utilisera tous les processeurs.
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
Pour exécuter la suite de tests de SpiderMonkey, exécutez : make -C js/src check-jstests JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled". Il est recommandé de rediriger la sortie vers un journal. Comme nous construisons avec l'ICU du système, 42 tests (sur un total de plus de 50 000) sont connus pour échouer. La suite de tests est exécutée avec tous les cœurs CPU disponibles : même dans un cgroup avec moins de cœurs assignés, elle essaiera quand même de créer autant de tâches de test que le nombre de tous les cœurs du système ; heureusement le noyau ne lancera pas ces tâches sur les cœurs qui ne sont pas assignés au cgroup, donc l'utilisation du CPU restera maitrisée.
Pour exécuter la suite de tests JIT, exécutez : make -C js/src check-jit-test
JITTEST_EXTRA_ARGS="--timeout 300". Comme la suite
de tests de SpiderMonkey, le nombre de tâches de tests est le même
que le nombre de tous les cœurs CPU du système même si vous
utilisez un cgroup. Pour compliquer les choses, il y a six tests
qui utilisent chacun 3 Go de mémoire, donc l'utilisation
maximale de la mémoire peut être de plus de 18 Go si le nombre
de cœurs est 6 ou plus. Lancer la suite de tests JIT sans avoir
assez de mémoire peut invoquer l'OOM killer du noyau et causer des
problèmes de stabilité. Si vous n'avez pas assez de mémoire système
disponible, ajoutez -jN
après
--timeout 300
en remplaçant N par le
nombre de tâches de tests parallèles que vous voulez démarrer. Par
exemple, si vous avez 16 Go de mémoire système disponible et 8
cœurs CPU, exécutez make -C js/src
check-jit-test JITTEST_EXTRA_ARGS="--timeout=300
-j5" pour lancer les tests avec 5 tâche en
parallèle pour que l'utilisation de la mémoire n'excède pas
15 Go.
Un problème dans le processus d'installation fait que tout programme lancé qui se lie à la bibliothèque partagée de SpiderMonkey (par exemple, GNOME Shell) crashera si SpiderMonkey est réinstallé ou mis à jour ou renvoyé en arrière sans un changement de version majeur (115 dans 115.7.0). Pour contourner ce problème, supprimez l'ancienne version de la bibliothèque partager de SpiderMonkey avant l'installation :
rm -fv /usr/lib/libmozjs-115.so
Maintenant, en tant qu'utilisateur root
:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js115-config
--disable-debug-symbols
: évite
de générer des symboles de débogage comme ils sont très gros et que
la plupart des utilisateurs n'en ont pas besoin. Supprimez-le si
vous avez besoin de déboguer SpiderMonkey.
--disable-jemalloc
:
ce paramètre désactive l'allocateur mémoire interne utilisé dans
SpiderMonkey. jemalloc n'est conçu que pour l'environnement du
navigateur Firefox. Pour les autres applications qui utilisent
SpiderMonkey, l'application pourrait crasher quand les éléments
alloués par l'allocateur jemalloc sont libérés par l'allocateur
système (glibc).
--enable-readline
: ce
paramètre active la prise en charge de Readline dans l'interface en
ligne de commande de SpiderMonkey.
--enable-rust-simd
:
ce paramètre active l'optimisation SIMD dans le crate encoding_rs
embarqué.
--with-intl-api
: cela
active les fonctions d'internationalisation requises par
Gjs.
--with-system-*
: ces
paramètres permettent au système de construction d'utiliser les
version système des bibliothèques précédentes. Ils sont requis pour
plus de stabilité.
rm -v /usr/lib/libjs_static.ajs : supprimez une grosse bibliothèque statique qui n'est utilisée par aucun paquet de BLFS.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js115-config : évite que js115-config n'utilise des CFLAGS incorrects.
: BLFS préférait utiliser gcc et g++ au
lieu des programmes clang utilisés
en amont par défaut. Avec la sortie de gcc-12 la construction prend
plus de temps avec gcc et g++ surtout à cause d'avertissements
supplémentaires et est plus grosse. Passez ces variables
d'environnement au script configure si vous souhaitez continuer
d'utiliser gcc, g++ (en les exportant et les nettoyant après
l'installation, ou simplement en les ajoutant devant la commande
../js/src/configure).
Si vous construisez sur un système 32 bits, voir aussi
ci-dessous.
CC=gcc
CXX=g++
: utiliser SSE2 au lieu de 387
pour les opérations en virgule flottante en double précision. C'est
requis par GCC pour satisfaire les attentes des développeurs en
amont (Mozilla) pour l'arithmétique en virgule flottante. Utilisez
cette option si vous construisez ce paquet sur un système
32 bits avec GCC (si Clang n'est pas installé ou que vous
spécifiez explicitement GCC). Remarquez que cela fera crasher
SpiderMonkey sur un processeur sans SSE2. Si vous lancez le système
sur un processeur aussi vieux, Clang est absolument nécessaire. Ce
paramètre n'est pas requis sur les systèmes 64 bits car tous
les processeurs x86 64 bits prennent en charge SSE2 et les
compilateurs 64 bits (aussi bien Clang que GCC) utilisent SSE2
par défaut.
CXXFLAGS="-msse2
-mfpmath=sse"