SpiderMonkey oriundo de firefox-140.14.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.

[Nota]

Nota

Esse pacote é conhecido por construir e funcionar adequadamente usando-se uma plataforma LFS 13.1.

Informação do Pacote

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

  • Transferência (FTP):

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

Transferências Adicionais

Dependências do SpiderMonkey

Exigidas

Cbindgen-0.29.4, ICU-78.3, Which-2.25

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

[Nota]

Nota

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=-jN to the command and replace N 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.

[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 (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

Explicações do Comando

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.

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

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

Conteúdo

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

Descrições Curtas

js140

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

js140-config

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

libmozjs-140.so

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