eyecatch thumbnail

MacOS で chromium を ccache 使ってビルドしてみる

Profile picture
Takeru Yamada
2021.04.29

Contents


まとめ

  • gn 変数に cc_wrapper="ccache" を追加しましょう
  • 特定のパスを通し,環境変数 (CCACHE_CPP2 CCACHE_SLOPPINESS) を定義しましょう

はじめに

opening

MacOS で chromium を ccache ありでビルドする方法を解説します.

参考にした資料は次の2つです. どちらも chromium 本家の英語の資料です.

英語はちょっとねー,という方は自分が書いた記事も参考になるかと思います. #chromium の記事も合わせてお読みいただければと思います.


ccache ありで chromium をビルドする

chromium build with ccache

では,具体的にどうやって 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_wrapperccache になってますね.

次は,必要な環境変数の設定です.


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 が燃えることはないですね.

めでたしめでたし.


おわりに

ending

MacOS にて chromium を ccache ありでビルドする手順を紹介しました.

ccache ありでビルドできればスペックがそこまで高くない Mac でも快適に chromium の開発ができるかもしれません.

まぁ,スペックが高い Mac を使うことに越したことはありませんが. ハイスペックな Mac は本当に高いですからねぇ…

超絶マイナーな記事でしたが,最後までお読みいただきありがとうございました.

今日も良い一日を!


執筆機材


関連記事