2011年05月02日
Androidのビルドでccacheを使う
Makefile関連(*.mk)を変更した場合には一度クリーンしてからmakeする必要があります。
これは時間のかかることですが、ccacheを使うと時間短縮できます。
Androidではこれを簡単に使うことができます。
ccacheとは
ccacheは最初のコンパイル時にコンパイル結果を別のディレクトリに保存しておきます。そして次のコンパイルの時に、前回とファイルの内容やコンパイルオプションが一致するかどうかをチェックして、一致する場合には実際にコンパイルする代わりに保存しておいた内容を使用します。
ccacheがサポートするのはC/C++/Objective-C/Objective-C++で、Javaはサポートされていません。
高速化されるのは2回目以降のビルドです。
また、コンパイル結果を保存するためにディスクを消費します。
Androidのビルドでccacheを使う
Androidでは環境変数またはmake変数に USE_CCACHE=1 を追加するだけで簡単にccacheを使うことができます。ccacheコマンドはすでにprebuiltディレクトリに入っているので、新たにインストールする必要はありません。
前回使ったbuild.shに一行追加してみます。
$ cat build.sh export ARCH_ARM_HAVE_TLS_REGISTER=true export TARGET_ARCH_VARIANT=armv7-a-neon export TARGET_CPU_SMP=true export WITH_JIT=true export JS_ENGINE=v8 export USE_CCACHE=1 time make -j8 showcommands > make.log 2>&1
ビルド1回目
$ rm -rf out $ ./build.sh
real 14m2.447s user 111m48.370s sys 6m38.000s
ビルド2回目
$ rm -rf out $ ./build.sh real 8m45.569s user 70m45.080s sys 4m27.270s
AndroidのMakefile
以下のところでUSE_CCACHEを扱っています。
build/core/combo/select.mk
ifneq ($(USE_CCACHE),) ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache # prepend ccache if necessary ifneq ($(ccache),$(firstword $($(combo_target)CC))) $(combo_target)CC := $(ccache) $($(combo_target)CC) endif ifneq ($(ccache),$(firstword $($(combo_target)CXX))) $(combo_target)CXX := $(ccache) $($(combo_target)CXX) endif ccache = endif
CCとCXXが置き換わっています。javaのビルドには影響しません。
トラックバックURL
トラックバック一覧
1. Using ccache to build Android [ Koba's blog ] 2011年05月06日 18:27
Once when files related to Makefile (*.mk) is changed, it is necessary to do make clean; make. This is time-consuming work. It can reduce time using ccache. And it is very easy to use ccahe to build Android. (Japanese version) What is ccache? See this ...
2. ccacheを使ったリビルドの高速化と、android_disk_vdiのビルド [ Android Zaurusの日記 ] 2011年05月09日 17:40
先月のAndroid Builders Summit*1に参加した際に、USE_CCACHEを使ったビルドの高速化*2の話があって、そういえば使ってなかったなと思い出して、また、tetsu_kobaさんがエントリ*3書いて、Android Buildingに凸ってJBQさんからキャッシュ増やしてねというお返事が来てた*4の