SpiderMonkey é o mecanismo JavaScript e WebAssembly da Mozilla, escrito em C++ e Rust. No BLFS, o código-fonte do SpiderMonkey é retirado do Firefox.
Esse pacote é conhecido por construir e funcionar adequadamente usando-se uma plataforma LFS 13.1.
Transferência (HTTP): https://archive.mozilla.org/pub/firefox/releases/140.14.0esr/source/firefox-140.14.0esr.source.tar.xz
Soma de verificação MD5 da transferência: c2eb4ac79de8b34cb3353272bea1cbd3
Tamanho da transferência: 614 MB
Espaço em disco estimado exigido: 4,7 GB (55 MB instalado depois de remover 42 MB de bibliotecas estáticas; adicionar 29 MB para os testes principais e de Compilação sob Demanda)
Tempo de construção estimado: 1,9 UPC (com paralelismo=4; adicionar 0,4 UPC para os testes principais e 2,6 UPC para os testes de Compilação sob Demanda)
Cbindgen-0.29.4, ICU-78.3, Which-2.25
LLVM-22.1.8 (com Clang, exigido para sistemas de 32 bits sem recursos de SSE2)
Se você estiver construindo esse pacote em um sistema de 32 bits
e o Clang não estiver instalado ou você estiver substituindo a
opção padrão do compilador com a variável de ambiente
CXX, por favor, leia primeiro a seção
Explicações do Comando.
Ao contrário da maioria dos outros pacotes no BLFS, as instruções
abaixo exigem que você desempacote firefox-140.14.0esr.tar.xz e mude para o
diretório firefox-140.14.0.
Extrair o tarball reconfigurará as permissões do diretório atual
para 0755, se você tiver permissão para fazer isso. Se você fizer
isso em um diretório onde o bit sticky estiver configurado, como
/tmp, ela terminará com mensagens
de erro:
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
Isso finaliza com situação diferente de zero, mas NÃO significa que exista um problema
real. Não desempacote como o(a) usante root em um diretório onde o bit sticky
estiver configurado - isso irá desconfigurá-lo.
Primeiro, aplique um remendo para corrigir a compatibilidade com o Python 3.14:
patch -Np1 -i ../spidermonkey-140.14.0-python_3.14_fixes-1.patch
Install SpiderMonkey by running the following commands:
Se estiver compilando esse pacote em chroot, você precisa
assegurar que /dev/shm esteja
montado. Se você não fizer isso, a configuração do Python falhará com um informe de
rastreamento reverso referenciando /usr/lib/pythonN.N/multiprocessing/synchronize.py.
Como o(a) usante root, execute:
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
Compilar o código C++ respeita $MAKEFLAGS e o padrão é 'j1'; o código do rust usará todos os processadores.
mkdir obj &&
cd obj &&
MOZBUILD_STATE_PATH=${PWD}/mozbuild \
../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
Para executar a suíte de teste SpiderMonkey, emita:
make -C js/src check-jstests \
JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled" | tee jstest.log
Como nós estamos construindo com o ICU do sistema, pouco mais que
100 testes, dependendo da versão do ICU, (de um total de mais que
50.000) são conhecidos por falharem. A lista de testes falhos pode
ser extraída via grep
'UNEXPECTED-FAIL' jstest.log. Passe a opção
-c para grep se você quiser somente o
número total de testes falhos.
A suíte de teste é executada com todos os núcleos de CPU disponíveis: mesmo em um cgroup com menos núcleos atribuídos, ela ainda tenta gerar tantas tarefas de teste quanto o número de todos os núcleos no sistema; felizmente, o núcleo ainda não executará essas tarefas em núcleos não atribuídos ao cgroup, de forma que o uso da CPU ainda é controlado.
Para executar a suíte de teste JIT, emita o seguinte comando:
make -C js/src check-jit-test
Like the SpiderMonkey test suite, the number of test jobs is same
as the number of all CPU cores in the system even if a cgroup is
used. To make things worse, some test cases can use up to 4 GB of
system memory, so the peak memory usage may be very large if your
CPU have multiple cores. Running the JIT test suite without enough
memory may invoke the kernel OOM killer and cause stability issues.
If you don't have enough system memory available, append
JITTEST_EXTRA_ARGS=-j to the command and replace
NN with the number of test
jobs your available system memory can hold. For example, if you
have 15 GB system memory available and 4 CPU cores, append
JITTEST_EXTRA_ARGS=-j3 to run the test
suite with 3 parallel jobs so the memory usage won't exceed 12 GB.
Um problema no processo de instalação faz com que qualquer programa em execução que se vincule à biblioteca compartilhada do SpiderMonkey (por exemplo, GNOME Shell) trave se o SpiderMonkey for reinstalado, atualizado ou rebaixado sem uma mudança do número da versão principal (140 em 140.14.0). Para contornar esse problema, remova a versão antiga da biblioteca compartilhada do SpiderMonkey antes da instalação:
rm -fv /usr/lib/libmozjs-140.so
Agora, como o(a) usante root:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js140-config
Ainda como o(a) usuário(a) root,
corrija um problema com um dos cabeçalhos instalados:
sed '$i#define XP_UNIX' -i /usr/include/mozjs-140/js-config.h
MOZBUILD_STATE_PATH=${PWD}/mozbuild:
Substituir o local padrão (${HOME}/.mozbuild) para o cache do sistema de
construção, para evitar poluir-se o diretório lar.
--disable-debug-symbols:
Não gere símbolos de depuração, pois eles são muito grandes e a
maioria dos(as) usuários(as) não precisará deles. Remova-o se você
quiser depurar o SpiderMonkey.
--disable-jemalloc: Essa
chave desabilita o alocador de memória interna usado no
SpiderMonkey. jemalloc destina-se somente para o ambiente do
navegador Firefox. Para outros aplicativos que usam o SpiderMonkey,
o aplicativo pode travar à medida que os itens alocados no alocador
jemalloc forem liberados no alocador do sistema (glibc).
--enable-readline: Essa
chave habilita suporte Readline na interface de linha de comando do
SpiderMonkey.
--enable-rust-simd: Essa
chave habilita otimização do SIMD na caixa encoding_rs enviada.
--with-intl-api: Isso
habilita as funções de internacionalização exigidas pelo
Gjs.
--with-system-*: Esses
parâmetros permitem que o sistema de construção use versões de
sistema das bibliotecas acima. Eles são necessários para
estabilidade.
rm -v /usr/lib/libjs_static.ajs: Remove uma grande biblioteca estática que não é usada por nenhum pacote do BLFS.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js140-config: Impede que js140-config use CFLAGS defeituosas.
: BLFS used to prefer to use gcc and g++
instead of upstream's defaults of the clang programs. With the release of gcc-12 the
build takes longer with gcc and g++, primarily because of extra
warnings, and is bigger. Pass these environment variables to the
configure script if you wish to continue to use gcc, g++ (by
exporting them and unset them after the installation, or simply
prepending them before the ../js/src/configure command). If
you are building on a 32-bit system, also see below.
CC=gcc
CXX=g++
: Use SSE2 instead of 387 for
double-precision floating-point operations. It's needed by GCC to
satisfy the expectations of upstream (Mozilla) developers with
floating-point arithmetic. Use it if you are building this package
on a 32-bit system with GCC (if Clang is not installed or GCC is
explicitly specified). Note that this will cause SpiderMonkey to
crash on a processor without SSE2 capability. If you are running
the system on such an old processor, Clang is strictly needed. This
setting is not needed on 64-bit systems because all 64-bit x86
processors support SSE2 and the 64-bit compilers (both Clang and
GCC) use SSE2 by default.
CXXFLAGS="-msse2
-mfpmath=sse"