Speeding up your recurring gcc compilations with ccache

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Speeding up your recurring gcc compilations with ccache

Speeding up your recurring gcc compilations with ccache

speedup-gcc.png

ccache is a C compiler cache.


ccache can save a large amount of compilation time on recurring builds and builds restarted from a clean repository after make clean or git clean. It is well suited for e.g. u-boot and Linux compilation.

Caching the host compiler

Caching "native" builds is easily done by adding in the beginning of your $PATH a special directory, which contains links to ccache to override the usual compiler.

On e.g. Debian this directory is readily available as /usr/lib/ccache, So you can do:

  $ export PATH="/usr/lib/ccache:$PATH"

Typical links found in this folder are:


  c++ -> ../../bin/ccache

  cc -> ../../bin/ccache

  g++ -> ../../bin/ccache

  gcc -> ../../bin/ccache

etc...

Caching the cross compiler

Caching cross-compiled builds can be done in the same way as native builds, provided you create links of the form e.g. arm-linux-gnueabihf-gcc pointing to ccache.

But there is an even more convenient way for those projects, which rely on a $CROSS_COMPILE environment variable (as is the case for e.g. u-boot and Linux). You can prefix the cross compiler with ccache there in e.g. the following way:

  $ export CROSS_COMPILE="ccache arm-linux-gnueabihf-"

Monitoring efficiency

Now that your builds are cached, you might want to see how much is "spared" with this technique. ccache -s will tell you all sorts of statistics, such as:

  cache directory                     /home/vstehle/.ccache

  cache hit (direct)                 10852

  cache hit (preprocessed)            3225

  cache miss                         19000

  called for link                    33267

  called for preprocessing            9463

  compile failed                         3

  preprocessor error                     1

  couldn't find the compiler           117

  unsupported source language          921

  unsupported compiler option         2167

  no input file                      31681

  files in cache                     51694

  cache size                           1.3 Gbytes

  max cache size                       4.0 Gbytes

Here you see a somewhat typical 50%/50% hit/miss ratio.

Enjoy!

See Also

  • ccache is usually supported natively by build systems, such as Buildroot or Yocto.

No ratings
Version history
Last update:
‎06-24-2013 03:11 AM
Updated by: