[ccache] does ccache include source code modified time into hash?
cdlee123 at gmail.com
Tue Nov 11 18:26:01 MST 2014
Yes, it did help, thanks for the detailed explanation.
2014-11-12 1:33 GMT+08:00 Andrew Stubbs <ams at codesourcery.com>:
> On 11/11/14 15:11, Makson Lee wrote:
>> i am not sure that whether ccache will re-compile source code if we just
>> change the modified time of it, can not find much about the details of
>> ccache works", in the manual, it just says that ccache will hash the
>> code, but what kinds of information of source code are hashed?
> Ccache has two modes: "direct mode" and "preprocessor mode". It tries
> both, in that order.
> Preprocessor mode is the slower, older mode. This does not pay any
> attention to the file stats. It simply runs the compiler preprocessor and
> sees if the MD4 hash of the output matches something it has seen before. In
> theory, you can even edit the comments and macro text, to some degree, and
> still get a cache hit.
> Direct mode is much faster, but less tolerant of irrelevant changes. In
> this mode, ccache keeps a cache ("manifest") of every source file used by a
> compile, including times, size, and an MD4 hash. It then tries to match
> each file and determine if the source matches without calling the compiler
> at all. Ordinarily, it uses only the MD4 hash to determine this, so
> changing the mtime will have no effect.
> However, if you set "CACHE_SLOPPINESS=file_stat_matches" then direct mode
> will ignore the contents of the source files, and determine similarity
> using only the ctime, mtime, and size attributes. In this case, changing
> the mtime will cause a direct mode cache miss. Ccache will then fall-back
> to preprocessor mode, and you should still get a cache hit that way, albeit
> slower. The cached manifest will be updated, and the next time you build
> you will get a direct mode cache hit again, unless the mtime changes again.
> Hope that helps
More information about the ccache