70 lines
2.9 KiB
Plaintext
70 lines
2.9 KiB
Plaintext
// -*- mode:doc; -*-
|
|
// vim: set syntax=asciidoc:
|
|
|
|
[[ccache]]
|
|
==== Using +ccache+ in Buildroot
|
|
|
|
http://ccache.samba.org[ccache] is a compiler cache. It stores the
|
|
object files resulting from each compilation process, and is able to
|
|
skip future compilation of the same source file (with same compiler
|
|
and same arguments) by using the pre-existing object files. When doing
|
|
almost identical builds from scratch a number of times, it can nicely
|
|
speed up the build process.
|
|
|
|
+ccache+ support is integrated in Buildroot. You just have to enable
|
|
+Enable compiler cache+ in +Build options+. This will automatically
|
|
build +ccache+ and use it for every host and target compilation.
|
|
|
|
The cache is located in the directory defined by the +BR2_CCACHE_DIR+
|
|
configuration option, which defaults to
|
|
+$HOME/.buildroot-ccache+. This default location is outside of
|
|
Buildroot output directory so that it can be shared by separate
|
|
Buildroot builds. If you want to get rid of the cache, simply remove
|
|
this directory.
|
|
|
|
You can get statistics on the cache (its size, number of hits,
|
|
misses, etc.) by running +make ccache-stats+.
|
|
|
|
The make target +ccache-options+ and the +CCACHE_OPTIONS+ variable
|
|
provide more generic access to the ccache. For example
|
|
|
|
-----------------
|
|
# set cache limit size
|
|
make CCACHE_OPTIONS="--max-size=5G" ccache-options
|
|
|
|
# zero statistics counters
|
|
make CCACHE_OPTIONS="--zero-stats" ccache-options
|
|
-----------------
|
|
|
|
+ccache+ makes a hash of the source files and of the compiler options.
|
|
If a compiler option is different, the cached object file will not be
|
|
used. Many compiler options, however, contain an absolute path to the
|
|
staging directory. Because of this, building in a different output
|
|
directory would lead to many cache misses.
|
|
|
|
To avoid this issue, buildroot has the +Use relative paths+ option
|
|
(+BR2_CCACHE_USE_BASEDIR+). This will rewrite all absolute paths that
|
|
point inside the output directory into relative paths. Thus, changing
|
|
the output directory no longer leads to cache misses.
|
|
|
|
A disadvantage of the relative paths is that they also end up to be
|
|
relative paths in the object file. Therefore, for example, the debugger
|
|
will no longer find the file, unless you cd to the output directory
|
|
first.
|
|
|
|
See https://ccache.samba.org/manual.html#_compiling_in_different_directories[the
|
|
ccache manual's section on "Compiling in different directories"] for
|
|
more details about this rewriting of absolute paths.
|
|
|
|
When +ccache+ is enabled in Buildroot using the +BR2_CCACHE=y+ option:
|
|
|
|
* +ccache+ is used during the Buildroot build itself
|
|
|
|
* +ccache+ is not used when building outside of Buildroot, for example
|
|
when directly calling the cross-compiler or using the SDK
|
|
|
|
One can override this behavior using the +BR2_USE_CCACHE+ environment
|
|
variable: when set to +1+, usage of ccache is enabled (default during
|
|
the Buildroot build), when unset or set to a value different from +1+,
|
|
usage of ccache is disabled.
|