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 corretamente usando uma plataforma LFS 12.1.
Transferência (HTTP): https://archive.mozilla.org/pub/firefox/releases/115.7.0esr/source/firefox-115.7.0esr.source.tar.xz
Soma de verificação MD5 da transferência: 9105bdf076d457ce5e0aa5628d5acc84
Tamanho da transferência: 492 MB
Espaço em disco estimado exigido: 3,6 GB (40 MB instalado depois de remover 36 MB de bibliotecas estáticas; adicionar 34 MB para os testes principais e 37 MB para os testes jit)
Tempo de construção estimado: 1,9 UPC (com paralelismo=4; adicionar 1,1 UPC para os testes principais e 3,7 UPC para os testes jit)
ICU-74.2, rustc-1.76.0, six-1.16.0 e Which-2.21
LLVM-17.0.6 (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-115.7.0esr.tar.xz
e mude para a pasta
firefox-115.7.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 existe um problema
real. Não desempacote como o(a) usuário(a) root
em um diretório onde o bit sticky
estiver configurado - isso irá desconfigurá-lo.
O sistema de construção envia várias cópias internas do módulo
Python 3 six.py
. As cópias enviadas
são muito antigas para funcionar bem com Python 3.12 ou posterior.
Substitua-as pelos links simbólicos para six-1.16.0 já
instalado no sistema:
for i in $(find -name six.py); do ln -sfv /usr/lib/python3.12/site-packages/six.py $i; done
Instale SpiderMonkey executando os seguintes comandos:
Se você 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) usuário(a) 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 && ../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 do SpiderMonkey, emita: make -C js/src check-jstests JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled". É recomendado redirecionar a saída gerada para um registro. Como nós estamos construindo com ICU do sistema, 42 testes (de um total de mais de 50.000) são conhecidos por falharem. A suíte de teste é executada com todos os elementos de processamento de CPU disponíveis: mesmo em um cgroup com menos elementos de processamento atribuídos, ele ainda tenta gerar tantas tarefas de teste quanto o número de todos os elementos de processamento no sistema; felizmente, o núcleo ainda não executará essas tarefas em elementos de processamento não atribuídos para o cgroup, de forma que o uso da CPU ainda será controlado.
Para executar a suíte de teste JIT, emita: make -C js/src check-jit-test
JITTEST_EXTRA_ARGS="--timeout 300". Assim como a
suíte de teste do SpiderMonkey, o número de tarefas de teste é
igual ao número de todos os elementos de processamento de CPU no
sistema, mesmo se um cgroup for usado. Para piorar as coisas,
existem seis testes, cada um deles usará 3 GB de memória do
sistema, de forma que o pico de uso de memória pode ser de até 18
GB se o número de elementos de processamento for seis ou mais.
Executar a suíte de teste JIT sem memória suficiente pode invocar o
OOM killer do núcleo e causar problemas de estabilidade. Se você
não tiver memória de sistema suficiente disponível, acrescente
-jN
depois de --timeout 300
com N substituído pelo número de
tarefas paralelas de teste que você queira iniciar. Por exemplo, se
você tiver 16 GB de memória de sistema disponível e 8 elementos de
processamento de CPU, emita make -C
js/src check-jit-test JITTEST_EXTRA_ARGS="--timeout=300
-j5" para executar o teste com 5 tarefas paralelas,
de forma que o uso de memória não exceda 15 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 (115 em 115.7.0). Para contornar esse problema, remova a versão antiga da biblioteca compartilhada do SpiderMonkey antes da instalação:
rm -fv /usr/lib/libmozjs-115.so
Agora, como o(a) usuário(a) root
:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js115-config
--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/js115-config: Impede que js115-config use CFLAGS defeituosas.
: O BLFS costumava preferir usar gcc e g++ em
vez dos padrões do fluxo de desenvolvimento dos programas
clang. Com o lançamento do gcc-12
a construção demora mais tempo com gcc e g++, principalmente por
causa de avisos extras, e é maior. Passe essas variáveis de
ambiente para o conjunto de comandos sequenciais de configuração se
você desejar continuar a usar gcc, g++ (exportando-as e
desconfigurando-as depois da instalação ou simplesmente
acrescentando-as antes do comando ../js/src/configure). Se você
estiver construindo em um sistema de 32 bits, veja também abaixo.
CC=gcc
CXX=g++
: Use SSE2 em vez de 387 para operações
de ponto flutuante de precisão dupla. É necessário ao GCC para
satisfazer as expectativas dos(as) desenvolvedores(as) do fluxo de
desenvolvimento (Mozilla) com aritmética de ponto flutuante. Use-o
se você estiver construindo esse pacote em um sistema de 32 bits
com GCC (se o Clang não estiver instalado ou o GCC for especificado
explicitamente). Observe que isso fará com que o SpiderMonkey trave
em um processador sem capacidade SSE2. Se você estiver executando o
sistema em um processador tão antigo, o Clang será estritamente
necessário. Essa configuração não é necessária em sistemas de 64
bits porque todos os processadores x86 de 64 bits suportam SSE2 e
os compiladores de 64 bits (ambos, Clang e GCC) usam SSE2 por
padrão.
CXXFLAGS="-msse2
-mfpmath=sse"