andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 1 | # Using CCache on Mac |
| 2 | |
| 3 | [ccache](http://ccache.samba.org/) is a compiler cache. It speeds up |
| 4 | recompilation of C/C++ code by caching previous compilations and detecting when |
| 5 | the same compilation is being done again. This often results in a significant |
| 6 | speedup in common compilations, especially when switching between branches. This |
| 7 | page is about using ccache on Mac with clang and the NinjaBuild system. |
| 8 | |
| 9 | [TOC] |
| 10 | |
| 11 | ## Installation |
| 12 | |
| 13 | In order to use [ccache](http://ccache.samba.org) with |
sbc | 9f033f8 | 2015-11-26 00:50:52 | [diff] [blame] | 14 | [clang](clang.md), you need to use the |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 15 | current [git HEAD](http://ccache.samba.org/repo.html), since the most recent |
| 16 | version (3.1.9) doesn't contain the |
| 17 | [patch needed](https://github.com/jrosdahl/ccache/pull/4) for using |
| 18 | [the chromium style plugin](clang.md#Using_plugins). |
| 19 | |
| 20 | To install ccache with [homebrew](http://mxcl.github.com/homebrew/), use the |
| 21 | following command: |
| 22 | |
| 23 | ```shell |
| 24 | brew install --HEAD ccache |
| 25 | ``` |
| 26 | |
| 27 | You can also download and install yourself (with GNU automake, autoconf and |
| 28 | libtool installed): |
| 29 | |
| 30 | ```shell |
| 31 | git clone git://git.samba.org/ccache.git cd ccache |
| 32 | ./autogen.sh |
| 33 | ./configure && make && make install |
| 34 | ``` |
| 35 | |
| 36 | Make sure ccache can be found in your `$PATH`. |
| 37 | |
| 38 | You can also just use the current released version of ccache (3.1.8 or 3.1.9) |
| 39 | and disable the chromium style plugin with `clang_use_chrome_plugins=0` in your |
| 40 | `GYP_DEFINES`. |
| 41 | |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 42 | ## Use with GN |
| 43 | |
| 44 | You just need to set the use\_ccache variable. Do so like the following: |
| 45 | |
| 46 | ```shell |
dongseong.hwang | e279af1 | 2016-02-24 09:27:54 | [diff] [blame] | 47 | gn gen out-gn --args='cc_wrapper="ccache"' |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 48 | ``` |
| 49 | |
| 50 | ## Build |
| 51 | |
| 52 | In the build phase, the following environment variables must be set (assuming |
| 53 | you are in `chromium/src`): |
| 54 | |
| 55 | ```shell |
| 56 | export CCACHE_CPP2=yes |
| 57 | export CCACHE_SLOPPINESS=time_macros |
| 58 | export PATH=`pwd`/third_party/llvm-build/Release+Asserts/bin:$PATH |
| 59 | ``` |
| 60 | |
| 61 | Then you can just run ninja as normal: |
| 62 | |
| 63 | ```shell |
| 64 | ninja -C out/Release chrome |
| 65 | ``` |
| 66 | |
| 67 | ## Optional Steps |
| 68 | |
| 69 | * Configure ccache to use a different cache size with `ccache -M <max size>`. |
| 70 | You can see a list of configuration options by calling ccache alone. * The |
| 71 | default ccache directory is `~/.ccache`. You might want to symlink it to |
| 72 | another directory (for example, when using FileVault for your home |
| 73 | directory). |