Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index



 Hello,

 ccache 3.6 has introduced a new depend mode (CCACHE_DEPEND), in which ccache 
never uses preprocessing (gcc -E), which speeds things up on ccache misses.  
Previously ccache used the output from gcc -E to find out all the headers the 
source file depends on, in the depend mode it uses the output generated 
by -MD/-MMD. With https://gerrit.libreoffice.org/#/c/71629/ I'd like to 
enable this by default for LO, if supported by ccache 
(with --enable-ccache=nodepend to disable the mode).

 The advantages:

- It's faster; especially with PCH enabled:

make slideshow.build clang +ccache+icecream (ccache depend):
non-pch nodepend:
164.42user 18.05system 0:26.82elapsed 680%CPU
non-pch depend:
144.61user 13.37system 0:23.11elapsed 683%CPU
pch nodepend:
142.33user 18.04system 0:25.90elapsed 619%CPU
pch depend:
116.64user 12.10system 0:21.51elapsed 598%CPU

 The disadvantages:

- Needs recent ccache. The advantage here is that since it's so new, if there 
are problems with it, most people with not-new-enough ccache won't notice.

- There won't be any preprocessed hits. My current ccache statistics are 
141256 direct hits and 7153 preprocessed hits, so this doesn't seem to matter 
in practice.

- We use -MMD, which exludes system headers (or even our externals, since for 
those we use -isystem too). This means that ccache could give incorrect hits 
if those headers change. That may seem bad, but I think it's unlikely to 
cause problems in practice, for several reasons:
 * System headers rarely change.
 * If they change, it's generally a binary compatible change.
 * If they change in an incompatible way, the sources usually need a change 
too.
 * Since we use -MMD, our make dependencies ignore such changes as well.
This could be mitigated by switching to -MD, but that'd affect make 
performance by blowing up the number of dependencies, which I think is not 
worth it.

-- 
 Luboš Luňák
 l.lunak@collabora.com

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.