gentoo - Wyłącz kompilację równoległą dla llvm

1

Mam zainstalowane Gentoo na komputerze ze stosunkowo małą ilością pamięci RAM (1 GB). Podczas instalacji llvm ( emerge -a llvm ) komputer zawsze traci pamięć. Wszystkie 4 cc1plus procesy wykorzystują około 25% pamięci RAM, gdy system jest bezużyteczny. Myślę, że użycie tylko jednego procesu na raz może pomóc.

Jak mogę biegać llvm budować (używa cmake i ninja ) z jednym procesem kompilacji?


Aktualizacja

Miałem literówkę make.conf:

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

Próbowałem wielu innych wariantów, ale napiszę za kilka dni. (Ponieważ kompilacja trwa kilka godzin, a jeśli nie ma dostępnej pamięci RAM, muszę ją ponownie uruchomić, odłączając zasilanie, nawet jeśli użyję wymiany).

jiwopene
źródło

Odpowiedzi:

0

Nawet jeśli ninja nie jest make, jego ebuild powinien rozpoznać i respektować każdy -j parametr określony w MAKEOPTS Zmienna środowiskowa. Oznacza to, że powinieneś być w stanie wymusić maksymalnie jedną pracę MAKEOPTS=-j1. Możesz to zrobić jednorazowo:

MAKEOPTS=-j1 emerge -a llvm

Możesz także ustawić tę zmianę globalnie / na stałe dla wszystkich pakietów w systemie, edytując MAKEOPTS= wyrysować /etc/portage/make.conf.

Jeśli jednak ustawisz MAKEOPTS=-j1 przez twoją powłokę lub make.conf, ustawienia równoległości zostaną zastosowane do wszystkich pakietów, które emerge instaluje. Jeśli chcesz zastosować go tylko do jednego pakietu, możesz utworzyć plik o nazwie /etc/portage/env/sys-devel/llvm (w razie potrzeby utwórz brakujące katalogi) i umieść w nim te treści:

MAKEOPTS=-j1

To zastosuje zmienną tylko do samego pakietu llvm.

Jak to zrobić w powłoce:

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

Ninja i MAKEOPTS

W Gentoo, ponieważ ludzie polegają na MAKEOPTS=-j«n» aby kontrolować liczbę zadań, różne klasy i kompilacje będą mapować te zmienne -j parametr do odpowiednika dla aktualnie używanego systemu kompilacji. Możesz to zobaczyć eclass/ninja-utils.eclass (który jest używany przez cmake-utils.eclass który jest używany przez llvm ). Ten fragment wyodrębnia tylko -j parametr i przekazuje go do ninja bo ninja obsługuje ten parametr, podczas gdy może nie obsługiwać innych rzeczy, w których umieszczają się ludzie MAKEOPTS.

Zastrzeżenie: Nie przetestowałem tego z najnowszymi llvm ebuild. Proszę skomentować, jeśli są problemy z tą odpowiedzią!

binki
źródło
Zobacz aktualizację odpowiedzi. :-(
jiwopene
@jiwopene Ah, widzę. Wygląda na to, że próbowałeś użyć MAKEFLAGS, skończyło się przypadkowym wywołaniem MAKEFAGS zamiast tego, a jednak żaden z nich nie obsługuje envvarów. Jego MAKEOPTS ;-)
binki
Kompilowałem ponownie, więc zamierzam go zatrzymać i ponowić próbę.
jiwopene
Wygląda na to, że teraz jest OK.
jiwopene