SpiderMonkey de Firefox-115.7.0

Introduction SpiderMonkey

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.

Informations sur le paquet

  • Téléchargement (HTTP) : https://archive.mozilla.org/pub/firefox/releases/115.7.0esr/source/firefox-115.7.0esr.source.tar.xz

  • Téléchargement (FTP) :

  • 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)

Dépendances de SpiderMonkey

Requises

ICU-74.2, rustc-1.76.0 , six-1.16.0 et Which-2.21

Recommandées

[Important]

Important

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

Installation de SpiderMonkey

[Note]

Note

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 :

[Note]

Note

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.

[Attention]

Attention

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

Explication des commandes

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

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

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

Contenu

Programmes installs: js115 et js115-config
Bibliothèques installes: libmozjs-115.so
Rpertoires installs: /usr/include/mozjs-115

Descriptions courtes

js115

fournit une interface en ligne de commande au moteur JavaScript

js115-config

est utilisé pour trouver les drapeaux de compilation et d'édition des liens de SpiderMonkey

libmozjs-115.so

contient les fonctions de l'API JavaScript de Mozilla