88171.net

I stand with Ukraine🇺🇦

GentooでCcacheを使う

CPUが貧弱でGentooの日々のメンテがしんどいので、 試しにCcacheを使いはじめた。

実利的な面は、それなりに長期間運用してみないとわからない。

Portage

Gentoo WikiのCcacheのページにかなり網羅的な情報が載っていて、 ここを参考にすればPortageの設定までカバーできてしまう。

ただし Using ccache globally is not recommended らしいので、そこは各自の判断で。

genkernel

Gentoo Wikiのgenkernelのページに さらっと書いてある 程度で、情報が少ない。

最終的に /etc/genkernel.conf の設定は、要点だけ抜粋すると以下のようにした。

CCACHE_DIR="/path/to/ccache-cache"; export CCACHE_DIR

KERNEL_CC="/usr/lib/ccache/bin/gcc"
UTILS_CC="/usr/lib/ccache/bin/gcc"
UTILS_CXX="/usr/lib/ccache/bin/g++"

当初は KERNEL_CC="ccache -d /path/to/ccache-cache gcc" といった設定を試してみたものの、 Ccacheが Invalid option というエラーを吐いた。 おそらくビルドプロセスのどこかでコマンドライン文字列の扱いに難があるせいだが、深くは追っていない。 とにかく、キャッシュディレクトリのパスを環境変数で渡すしかないので無理矢理exportしている (Bashスクリプトなのでexportできてしまう)。

さらに、これだけではinitramfsのコンパイルの段階で ACCESS VIOLATION という見慣れないエラーが発生する。 これはinitramfsのコンパイルがSandbox環境で行なわれ、 許可されていないディレクトリへの書き込みがブロックされるためで、 以下のいずれかの設定を入れる必要がある。

個人的には後者のほうが筋は良いと思う。 ただ、ドキュメントを読む限り /etc/sandbox.d/ に設定ファイルを作成しても効きそうなものだが、 /etc/sandbox.conf に追記しないと想定した挙動にならなかった。 これも裏は取っていない。