[ccache] does ccache include source code modified time into hash?

Andrew Stubbs ams at codesourcery.com
Tue Nov 11 10:33:28 MST 2014


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 "how
> ccache works", in the manual, it just says that ccache will hash the source
> 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

Andrew


More information about the ccache mailing list