gentoo - Desativar construção paralela para llvm

1

Eu tenho o Gentoo instalado no computador com uma quantidade relativamente pequena de RAM (1 GB). Quando eu instalo llvm ( emerge -a llvm ), o computador sempre fica sem memória. Todos os processos de 4 cc1plus estão usando cerca de 25% de RAM quando o sistema está inutilizável. Acho que usar apenas um processo de cada vez poderia ajudar.

Como posso executar llvm build (usa cmake e ninja ) com apenas um processo de compilador?

Atualizar

Eu tive um erro de digitação em make.conf :

#MAKEFAGS="-j3"
MAKEFAGS="-j1"

Eu estava tentando muitas outras variantes, mas vou escrever em poucos dias. (Como a compilação leva várias horas e, se não houver RAM disponível, devo reiniciá-la desconectando a energia, mesmo se eu usar swap).

    
por jiwopene 18.09.2018 / 21:58

1 resposta

0

Mesmo que ninja não seja make , seu ebuild deve reconhecer e respeitar qualquer parâmetro -j especificado na variável de ambiente MAKEOPTS . Isso significa que você deve ser capaz de forçar no máximo um trabalho via MAKEOPTS=-j1 . Você pode fazer isso de uma só vez:

MAKEOPTS=-j1 emerge -a llvm

Você também pode definir essa alteração global / permanente para todos os pacotes em seu sistema, editando a linha MAKEOPTS= em /etc/portage/make.conf .

No entanto, se você definir MAKEOPTS=-j1 via shell ou make.conf , as configurações de paralelização serão aplicadas a todos os pacotes que emerge instala. Se você quiser aplicá-lo apenas para aquele pacote, você pode criar o arquivo chamado /etc/portage/env/sys-devel/llvm (criar quaisquer diretórios ausentes, se necessário) e colocar estes conteúdos nele:

MAKEOPTS=-j1

Isso aplicará a variável somente ao próprio pacote llvm.

Como fazer isso no shell:

mkdir -p /etc/portage/env/sys-devel
echo MAKEOPTS=-j1>>/etc/portage/env/sys-devel/llvm

Ninja e MAKEOPTS

No Gentoo, porque as pessoas confiam em MAKEOPTS=-j«n» para controlar o número de empregos, vários eclasses e ebuilds mapearão o parâmetro -j desta variável para o equivalente do sistema de construção acutal em uso. Você pode ver isso em eclass/ninja-utils.eclass (que é usado por cmake-utils.eclass , que é usado por llvm ). Esse fragmento extrai apenas o parâmetro -j e passa-o para ninja porque ninja suporta esse parâmetro, embora possa não suportar outras coisas que as pessoas colocam em MAKEOPTS .

Isenção de responsabilidade: na verdade, eu não testei isso com a última llvm ebuild. Por favor, comente se existem problemas com esta resposta!

    
por 19.09.2018 / 15:50