Ccache

From MozillaWiki
Revision as of 19:41, 11 August 2011 by Gszorc (talk | contribs) (proper configuration)
Jump to navigation Jump to search

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=/usr/bin/ccache
ac_add_options --with-ccache=/usr/bin/ccache

Be sure to specify the appropriate path to ccache on your system!

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

Related links