Re: does ccache include source code modified time into hash?
Makson Lee <[email protected]> Wed, 12 Nov 2014 09:26:01 +0800
| Newsgroups | gmane.comp.compilers.ccache |
|---|---|
| Message-ID | <CAKgL5+V6cMGWdfviH22nZ0yGzk9DBn-rWjQuJDtF4WjCx1BTRQ@mail.gmail.com> |
Hi Guys, Yes, it did help, thanks for the detailed explanation. 2014-11-12 1:33 GMT+08:00 Andrew Stubbs <[email protected]>: > 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 >