| # Using CCache on Mac |
| |
| [ccache](http://ccache.samba.org/) is a compiler cache. It speeds up |
| recompilation of C/C++ code by caching previous compilations and detecting when |
| the same compilation is being done again. This often results in a significant |
| speedup in common compilations, especially when switching between branches. This |
| page is about using ccache on Mac with clang and the NinjaBuild system. |
| |
| [TOC] |
| |
| ## Installation |
| |
| In order to use [ccache](http://ccache.samba.org) with |
| [clang](http://code.google.com/p/chromium/wiki/Clang), you need to use the |
| current [git HEAD](http://ccache.samba.org/repo.html), since the most recent |
| version (3.1.9) doesn't contain the |
| [patch needed](https://github.com/jrosdahl/ccache/pull/4) for using |
| [the chromium style plugin](clang.md#Using_plugins). |
| |
| To install ccache with [homebrew](http://mxcl.github.com/homebrew/), use the |
| following command: |
| |
| ```shell |
| brew install --HEAD ccache |
| ``` |
| |
| You can also download and install yourself (with GNU automake, autoconf and |
| libtool installed): |
| |
| ```shell |
| git clone git://git.samba.org/ccache.git cd ccache |
| ./autogen.sh |
| ./configure && make && make install |
| ``` |
| |
| Make sure ccache can be found in your `$PATH`. |
| |
| You can also just use the current released version of ccache (3.1.8 or 3.1.9) |
| and disable the chromium style plugin with `clang_use_chrome_plugins=0` in your |
| `GYP_DEFINES`. |
| |
| ## Use with GYP |
| |
| We have to set two environment variables (`CC` and `CXX`) before calling |
| `gclient runhooks` or `build/gyp_chromium`, given you are currently in the |
| `chromium/src` directory: |
| |
| ```shell |
| export CC="ccache clang -Qunused-arguments" |
| export CXX="ccache clang++ -Qunused-arguments" |
| ``` |
| |
| Then run: |
| |
| ```shell |
| GYP_GENERATORS="ninja" ./build/gyp_chromium |
| ``` |
| |
| or |
| |
| ```shell |
| GYP_GENERATORS="ninja" gclient runhooks |
| ``` |
| |
| (Instead of relying on the clang/clang++ for building chromium in your `$PATH`, |
| you can also use the absolute path here.) |
| |
| ## Use with GN |
| |
| You just need to set the use\_ccache variable. Do so like the following: |
| |
| ```shell |
| gn gen out-gn --args='use_ccache=true' |
| ``` |
| |
| ## Build |
| |
| In the build phase, the following environment variables must be set (assuming |
| you are in `chromium/src`): |
| |
| ```shell |
| export CCACHE_CPP2=yes |
| export CCACHE_SLOPPINESS=time_macros |
| export PATH=`pwd`/third_party/llvm-build/Release+Asserts/bin:$PATH |
| ``` |
| |
| Then you can just run ninja as normal: |
| |
| ```shell |
| ninja -C out/Release chrome |
| ``` |
| |
| ## Optional Steps |
| |
| * Configure ccache to use a different cache size with `ccache -M <max size>`. |
| You can see a list of configuration options by calling ccache alone. * The |
| default ccache directory is `~/.ccache`. You might want to symlink it to |
| another directory (for example, when using FileVault for your home |
| directory). |