gentoo - Parallele Erstellung für llvm deaktivieren

421
jiwopene

Ich habe Gentoo auf einem Computer mit relativ wenig RAM (1 GB) installiert. Bei der Installation llvm( emerge -a llvm) geht der Computer immer zu wenig Speicherplatz zur Verfügung. Alle 4 cc1plusProzesse benötigen etwa 25% RAM, wenn das System nicht verwendet werden kann. Ich denke, es kann hilfreich sein, jeweils nur einen Prozess zu verwenden.

Wie kann ich llvmbuild (verwendet cmakeund ninja) mit nur einem Compiler-Prozess ausführen ?


Aktualisieren

Ich hatte einen Tippfehler in make.conf:

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

Ich habe viele andere Varianten ausprobiert, werde aber in wenigen Tagen schreiben. (Da die Kompilierung mehrere Stunden in Anspruch nimmt und wenn kein RAM verfügbar ist, muss ich sie auch durch Ausschalten der Stromversorgung neu starten, auch wenn ich Swap benutze.)

1

1 Antwort auf die Frage

0
binki

Auch wenn dies ninjanicht makeder Fall ist, sollte sein Ebuild alle -jin der MAKEOPTSUmgebungsvariablen angegebenen Parameter erkennen und respektieren . Das heißt, Sie sollten maximal einen Job über erzwingen können MAKEOPTS=-j1. Sie können dies einmalig tun:

MAKEOPTS=-j1 emerge -a llvm 

Sie können diese Änderung auch global / permanent für alle Pakete in Ihrem System festlegen, indem Sie die MAKEOPTS=Zeile bearbeiten /etc/portage/make.conf.

Wenn Sie jedoch MAKEOPTS=-j1über Ihre Shell oder festlegen make.conf, werden die Parallelisierungseinstellungen auf alle Pakete angewendet, die emergeinstalliert werden. Wenn Sie es nur auf dieses eine Paket anwenden möchten, können Sie die Datei mit dem Namen /etc/portage/env/sys-devel/llvm(ggf. fehlende Verzeichnisse erstellen) erstellen und diese Inhalte darin ablegen:

MAKEOPTS=-j1 

Dadurch wird die Variable nur auf das llvm-Paket selbst angewendet.

So geht's in der Shell:

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

Ninja und MAKEOPTS

In Gentoo MAKEOPTS=-j«n»ordnen verschiedene E-Klassen und Ebuilds den -jParameter dieser Variablen dem Äquivalent für das verwendete Konstruktionssystem zu, da sich die Leute darauf verlassen, die Anzahl der Jobs zu steuern . Sie können dies in sehen eclass/ninja-utils.eclass(was von cmake-utils.eclassverwendet wird von llvm). Dieses Snippet extrahiert nur den -jParameter und übergibt ihn an, ninjada ninjader Parameter unterstützt wird, während andere Elemente möglicherweise nicht unterstützt werden MAKEOPTS.

Haftungsausschluss: Ich habe das nicht mit dem neuesten llvmEbuild getestet. Bitte kommentieren Sie, wenn es Probleme mit dieser Antwort gibt!

Siehe Update der Antwort. :-( jiwopene vor 5 Jahren 0
@jiwopene Ah, ich verstehe. Es sieht also so aus, als hätten Sie versucht, "MAKEFLAGS" zu verwenden. Am Ende wurde es versehentlich als "MAKEFAGS" bezeichnet, und dennoch werden keine der beiden Envvars unterstützt. Es ist "MAKEOPTS" ;-) binki vor 5 Jahren 0
Ich habe wieder kompiliert, also werde ich aufhören und es erneut versuchen. jiwopene vor 5 Jahren 0
Es sieht so aus, als sei es jetzt OK. jiwopene vor 5 Jahren 0