web-dev-qa-db-ja.com

gentoo-llvmの並列ビルドを無効にします

比較的少量のRAM(1 GB)のコンピューターにGentooをインストールしています。llvmemerge -a llvm)をインストールすると、コンピューターのメモリが常に不足します。 。4つのcc1plusプロセスはすべて、システムが使用できないときにRAMの約25%を使用しています。一度に1つのプロセスのみを使用すると役立つと思います。

1つのコンパイラプロセスだけでllvmビルド(cmakeninjaを使用)を実行するにはどうすればよいですか?


更新

make.confにタイプミスがありました:

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

私は他の多くの変種を試していましたが、数日で書きます。 (コンパイルには数時間かかり、RAMが利用できない場合は、スワップを使用していても、電源を切断して再起動する必要があるためです。)

1
jiwopene

ninjamakeではありませんが、そのebuildは、MAKEOPTS環境変数で指定された-jパラメーターを認識して尊重する必要があります。つまり、MAKEOPTS=-j1を介して最大1つのジョブを強制できるはずです。これは1回限りで実行できます。

MAKEOPTS=-j1 emerge -a llvm

MAKEOPTS=/etc/portage/make.conf行を編集することにより、システム上のすべてのパッケージに対してこの変更をグローバルに/永続的に設定することもできます。

ただし、シェルまたはMAKEOPTS=-j1を介してmake.confを設定した場合、並列化設定はemergeがインストールするすべてのパッケージに適用されます。その1つのパッケージだけに適用する場合は、/etc/portage/env/sys-devel/llvmというファイルを作成し(必要に応じて不足しているディレクトリを作成します)、次の内容をその中に配置します。

MAKEOPTS=-j1

これにより、変数はllvmパッケージ自体にのみ適用されます。

シェルでこれを行う方法:

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

忍者とMAKEOPTS

Gentooでは、人々はジョブの数を制御するためにMAKEOPTS=-j«n»に依存しているため、さまざまなeclassおよびebuildは、この変数の-jパラメーターを使用中の実際のビルドシステムに相当するものにマップします。これは eclass/ninja-utils.eclassllvmによって使用されるcmake-utils.eclassによって使用されます)で確認できます。このスニペットは-jパラメータのみを抽出し、それをninjaに渡します。これは、ninjaがそのパラメータをサポートしているのに対し、他の人がMAKEOPTSに配置するものはサポートしていない可能性があるためです。

免責事項:私はこれを最新のllvmebuildで実際にテストしていません。この回答に問題がある場合はコメントしてください!

0
binki