Ccache
ccache is a compiler cache for C and C++. It does what its function implies: caches the results of compilations. The net result: builds are faster!
Installing
ccache is typically available in your operating system's package manager of choice.
On Mac:
$ brew install ccache
On Ubuntu:
$ apt-get install ccache
Configuring ccache
By default, ccache will put its cache in ~/.ccache. You can verify this by running:
$ ccache -s
That prints out the location of the current cache with some statistics.
You can modify the location of the cache via environment variables such as CCACHE_DIR. For more, see the man page (man ccache).
Like most anything that is I/O bound, ccache will benefit from having its cache on a fast I/O device, like an SSD. If you can, configure your cache to run off the fastest device you can. If you are using magnetic storage, put the cache on a separate spindle from the source tree you are building.
For example,
$ export CCACHE_DIR=/Volumes/Scratch/ccache
The default cache size is 1GB. A typical mozilla-central build of Firefox will fully saturate a cache of this size, evicting entries and thus lowering cache hit rate. You can modify the cache size as follows:
$ ccache --max-size 2GB
Configuring Mozilla Builds
To configure Mozilla builds to use ccache, you'll need to configure some make and configure options. In your .mozconfig, add the following:
mk_add_options --with-ccache=ccache ac_add_options --with-ccache=ccache
This will work as long as ccache is installed in the $PATH. If you want to be more proper, specify the full path to ccache:
mk_add_options --with-ccache=/usr/bin/ccache ac_add_options --with-ccache=/usr/bin/ccache
Now, run a build and verify the cache is being utilized:
$ ccache -s cache directory /home/gps/.ccache cache hit (direct) 0 cache hit (preprocessed) 0 cache miss 0 files in cache 0 cache size 0 Kbytes max cache size 2.0 Gbytes $ make -f client.mk build # in another shell, after the build has churned for a while: $ ccache -s cache directory /home/gps/.ccache cache hit (direct) 2 cache hit (preprocessed) 7 cache miss 2044 called for link 27 preprocessor error 1 unsupported source language 1 autoconf compile/link 19 unsupported compiler option 4 files in cache 6226 cache size 659.0 Mbytes max cache size 2.0 Gbytes