AOSP(Android)ビルドで非推奨ぽくなったccacheをあえて有効化してみる

# はじめに

[AOSP最新環境をビルドし、リファレンスボード：Hikey960で動かす](https://qiita.com/s-aki/items/14c65b08e653448911a3) にてAOSP(Android)ビルド環境の構築について紹介しましたが、最新のビルド環境では`export USE_CCACHE=1`を実行してもccacheが効かなくなっていました。

どうやら、有効化は可能であるものの、ccacheのバイナリを自前で用意した上で追加の設定が必要になっています。

```file:build/make/core/ccache.mk
# We no longer provide a ccache prebuilt.
#
# Ours was old, and had a number of issues that triggered non-reproducible
# results and other failures. Newer ccache versions may fix some of those
# issues, but at the large scale of our build servers, we weren't seeing
# significant performance gains from using ccache -- you end up needing very
# good locality and/or very large caches if you're building many different
# configurations.
#
# Local no-change full rebuilds were showing better results, but why not just
# use incremental builds at that point?
#
# So if you still want to use ccache, continue setting USE_CCACHE, but also set
# the CCACHE_EXEC environment variable to the path to your ccache executable.
```

有効化するのがためらわれるような文言ですが、お試しするだけしてみます。

# ccacheセットアップ

新しめのバージョンのccacheなら大丈夫そうな文言もあるので、最新バージョンを用意します。

```bash
$ git clone https://github.com/ccache/ccache.git
$ cd ccache
$ git checkout v3.4.3　★現時点の最新タグ
$ sudo apt install autoconf　★ビルドに必要
...
$ ./autogen.sh
Now run ./configure and make
$ ./configure
...
$ make -j16
$ ccache -M 32G　★1ビルド環境で22GBほど消費します
Set cache size limit to 32.0 GB　
```
他で使う予定があるなら`make install`してしまってもよいかと。

# 実行結果

## ccache無効

比較元としてccacheを使用していない場合のビルド結果を示します。

```
$ . ./build/envsetup.sh
$ lunch hikey960-userdebug
$ make clean
...
$ time make -j16
...
#### build completed successfully (01:22:42 (hh:mm:ss)) ####
real	82m42.287s
user	1246m25.517s
sys	40m36.128s
```

## ccache有効：初回ビルド

cacheが空の状態でのビルド結果を示します。

```bash
$ export USE_CCACHE=1　★ccacheの有効化（既存の設定）
$ export CCACHE_EXEC=/work/ccache/ccache　★ccacheのパスを指定（新規に追加された設定）
$ . ./build/envsetup.sh
$ lunch hikey960-userdebug
$ make clean
...
$ time make -j16
...
#### build completed successfully (01:27:28 (hh:mm:ss)) ####
real	87m27.378s
user	1302m31.610s
sys	55m22.672s
```

cache生成のオーバーヘッド分として数%伸びてはいます。

```bash
$ /work/ccache/ccache -s
...
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                         42668
cache hit rate                      0.00 %
called for link                      152
called for preprocessing              26
ccache internal error                282
unsupported code directive             2
cleanups performed                     0
files in cache                    128214
cache size                          22.2 GB
max cache size                      48.0 GB
```

ビルド1回で22.2GBほどcacheが生成されました。
ビルド環境含めてストレージ食いまくります。。。

## ccache有効：2回目ビルド

cacheが生成後の状態でのビルド結果を示します。

```bash
$ export USE_CCACHE=1
$ export CCACHE_EXEC=/work/ccache/ccache
$ . ./build/envsetup.sh
$ lunch hikey960-userdebug
$ make clean
...
$ time make -j16
...
#### build completed successfully (27:39 (mm:ss)) ####
real	27m38.993s
user	385m55.988s
sys	14m38.354s
```

ビルド時間が1/3になりました。
これは効果アリと言ってよいかと思います。

```bash
$ /work/ccache/ccache -s
...
cache hit (direct)                 42166
cache hit (preprocessed)             784
cache miss                         42668
cache hit rate                     50.16 %
called for link                      304
called for preprocessing              52
ccache internal error                282
unsupported code directive             4
cleanups performed                     0
files in cache                    128876
cache size                          22.2 GB
max cache size                      32.0 GB
```

cacheが有効に使われたようです。