Contents
まとめ
gn
変数にcc_wrapper="ccache"
を追加しましょう- 特定のパスを通し,環境変数 (
CCACHE_CPP2
CCACHE_SLOPPINESS
) を定義しましょう
はじめに
MacOS で chromium を ccache ありでビルドする方法を解説します.
参考にした資料は次の2つです. どちらも chromium 本家の英語の資料です.
- https://chromium.googlesource.com/chromium/src/+/master/docs/ccache_mac.md
- https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md
英語はちょっとねー,という方は自分が書いた記事も参考になるかと思います. #chromium の記事も合わせてお読みいただければと思います.
ccache ありで chromium をビルドする
では,具体的にどうやって ccache ありで chromium をビルドするのか,みていきましょか.
ccache をインストールする
まずは ccache をインストールしましょう.
brew
コマンドを使いますよ.
$ brew install --HEAD ccache
ちょっと待ってれば ccache がインストールされます.
お水でも飲んで,お待ちいただければと思います.
ccache がインストールされているか確認しましょう.
which
コマンドを使いまっせ.
$ which ccache
/usr/local/bin/ccache
ccache がインストールできて,ccache コマンドも使えるようになってますね.
念には念を入れて ccache コマンドが本当に使えるのか確認しておきましょ.
ccache
コマンドを使います.
$ ccache --help
Usage:
ccache [options]
ccache compiler [compiler options]
compiler [compiler options] (via symbolic link)
Common options:
-c, --cleanup delete old files and recalculate size counters
(normally not needed as this is done
automatically)
-C, --clear clear the cache completely (except configuration)
--config-path PATH operate on configuration file PATH instead of the
default
-d, --directory PATH operate on cache directory PATH instead of the
default
--evict-older-than AGE remove files older than AGE (unsigned integer
with a d (days) or s (seconds) suffix)
-F, --max-files NUM set maximum number of files in cache to NUM (use
0 for no limit)
-M, --max-size SIZE set maximum size of cache to SIZE (use 0 for no
limit); available suffixes: k, M, G, T (decimal)
and Ki, Mi, Gi, Ti (binary); default suffix: G
-X, --recompress LEVEL recompress the cache to level LEVEL (integer or
"uncompressed") using the Zstandard algorithm;
see "Cache compression" in the manual for details
-o, --set-config KEY=VAL set configuration item KEY to value VAL
-x, --show-compression show compression statistics
-p, --show-config show current configuration options in
human-readable format
-s, --show-stats show summary of configuration and statistics
counters in human-readable format
-z, --zero-stats zero statistics counters
-h, --help print this help text
-V, --version print version and copyright information
Options for scripting or debugging:
--checksum-file PATH print the checksum (64 bit XXH3) of the file at
PATH
--dump-manifest PATH dump manifest file at PATH in text format
--dump-result PATH dump result file at PATH in text format
--extract-result PATH extract data stored in result file at PATH to the
current working directory
-k, --get-config KEY print the value of configuration key KEY
--hash-file PATH print the hash (160 bit BLAKE3) of the file at
PATH
--print-stats print statistics counter IDs and corresponding
values in machine-parsable format
See also the manual on <https://ccache.dev/documentation.html>.
ok ですね.
gn 変数に cc_wrapper=ccache を追加する
ccache
が使えるようになったので,chromium をビルドするときの設定を更新します.
と言っても gn (generate ninja)
変数に cc_wrapper="ccache"
を追加するだけですけど.
[~]
$ cd chromium/src
[~/chromium/src] [tags/92.0.4483.0]
$ gn gen out/Default --args='cc_wrapper="ccache"'
Done. Made 16731 targets from 2734 files in 8765ms
はい,終わり.
ちょっと待て. 確認しないの?
はい,おっしゃる通りです. 確認しましょう.
gn 変数を確認するには gn args
コマンドを使いましょう.
$ gn args --list out/Default | less
...
cc_wrapper
Current value = "ccache"
...
ok ですね.
cc_wrapper
が ccache
になってますね.
次は,必要な環境変数の設定です.
ccache 関連の環境変数を設定する
環境変数の設定なので ~/.zshrc
や ~/.bashrc
に直接追加しても良いと思いますが,
個人的には direnv
などを使った方が良いような気がします.
direnv
を使うと特定のディレクトリに入ったら,
特定のパスを追加/削除したり,環境変数を設定したりできます.
結構便利なので,使ってない人はぜひ使ってみてください.
ということで,今回は direnv
を使って環境変数を設定していきます.
~/chromium
ディレクトリに入ったときに環境変数が設定されるようにします.
そのために ~/chromium/.envrc
を編集します.
具体的には以下の3行を追加し,direnv allow
を実行すれば良いです.
$ cd ~/chromium
$ vi .envrc
PATH_add src/third_party/llvm-build/Release+Asserts/bin
export CCACHE_CPP2=yes
export CCACHE_SLOPPINESS=time_macros
$ direnv allow
最後に ccache の細かい設定をします.
ccache のキャッシュサイズを増やしておく
ccache を快適に使うために ccache のキャッシュサイズを増やしておきましょう.
ディスク容量との相談になりますが,余裕があれば大きめにキャッシュサイズを設定しておくと良いかなと.
とりあえず自分は 50GB のキャッシュサイズを割り当てておきました.
$ ccache --max-size 50G
Set cache size limit to 50.0 GB
よし,準備完了ですね.
chromium を ccache ありでビルドしましょう.
chromium を ccache ありでビルドする
と言っても gn 変数に cc_wrapper="ccache"
をすでに定義しているので,
普段通りビルドすれば良いです.
[~/chromium/src] [tags/92.0.4490.0]
$ autoninja -C out/Default chrome
本当に ccache ありでビルドできているのかよ?と疑っている人. 確認してみましょう.
gn 変数に cc_wrapper=""
を定義します.
[~/chromium/src] [tags/92.0.4490.0]
$ gn gen out/Default --args='cc_wrapper=""'
Done. Made 16787 targets from 2737 files in 6286ms
ccache が無効化されていればフルビルドになると予想されます. 実際に chromium を再度ビルドしてみると…
$ autoninja -C out/Default chrome
ninja: Entering directory `out/Default'
[0/1] Regenerating ninja files
[55/43690] CXX obj/skia/skia_core_and_effects/SkFontMgr.o
フルビルドになってますね. ccache が無効化されていることを確認できました.
このまま ccache なしでビルドすると MacMini が燃えてしまいます. ccache を再度有効にしてビルドし直しましょう.
$ gn gen out/Default --args='cc_wrapper="ccache"'
Done. Made 16787 targets from 2737 files in 6871ms
$ autoninja -C out/Default chrome
ninja: Entering directory `out/Default'
[0/1] Regenerating ninja files
[93/93] STAMP obj/chrome/chrome.stamp
速攻で終わりました. これで MacMini が燃えることはないですね.
めでたしめでたし.
おわりに
MacOS にて chromium を ccache ありでビルドする手順を紹介しました.
ccache ありでビルドできればスペックがそこまで高くない Mac でも快適に chromium の開発ができるかもしれません.
まぁ,スペックが高い Mac を使うことに越したことはありませんが. ハイスペックな Mac は本当に高いですからねぇ…
超絶マイナーな記事でしたが,最後までお読みいただきありがとうございました.
今日も良い一日を!
執筆機材
- Xiser Pro Trainer (ステッパー)
- HHKB Professional 墨 (キーボード)
- HHKB キートップセット 白 (キートップ)
- Apple Magic Mouse 2 (マウス)
- Apple MacMini (PC)
- iiyama Display 27inch FullHD (ディスプレイ)
- KINTO UNITEA 550ml (コップ)