SpiderMonkey oriundo de Firefox-115.7.0

Introdução ao SpiderMonkey

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.

Informação do Pacote

  • Transferência (HTTP): https://archive.mozilla.org/pub/firefox/releases/115.7.0esr/source/firefox-115.7.0esr.source.tar.xz

  • Transferência (FTP):

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

Dependências do SpiderMonkey

Exigidas

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

Recomendadas

[Importante]

Importante

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.

Instalação do SpiderMonkey

[Nota]

Nota

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:

[Nota]

Nota

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.

[Cuidado]

Cuidado

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

Explicações do Comando

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

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

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

Conteúdo

Aplicativos Instalados: js115 e js115-config
Bibliotecas Instaladas: libmozjs-115.so
Diretórios Instalados: /usr/include/mozjs-115

Descrições Curtas

js115

fornece uma interface de linha de comando para o mecanismo do JavaScript

js115-config

é usado para encontrar o compilador SpiderMonkey e os sinalizadores do vinculador

libmozjs-115.so

contém as funções da API de JavaScript da Mozilla