Ccache's use of preprocessed source
Lubos Lunak <[email protected]>
| Newsgroups | gmane.comp.compilers.ccache |
|---|---|
| Message-ID | <[email protected]> |
Hello, in short, I'd like to ask about the feasibility of CCACHE_CPP2=1 becoming the default and the possibility of preventing ccache from running cpp at all. From the "cache hides compiler warnings about comments" thread: > By the way, a workaround is to set CCACHE_CPP2 when compiling. I think it is incorrect to call CCACHE_CPP2 a workaround. Current compilers are no longer the old-school separate preprocessor-compiler-assembler tools, nowadays these steps are done by just one tool and they even somewhat depend on each other. So preprocessing source and giving that to a compiler has a number of drawbacks: - The -Wdocumentation feature, discussed in the recent thread, not working. - Clang and recent GCC quote sources in their errors/warnings. If source is preprocessed, it'll have comments removed and macros expanded, meaning the errors/warnings will show something that "is not there". - I don't know about GCC, but Clang supresses some warnings if they come from a macro expansion. I think the idea is similar to supressing warnings from system headers, but given that a macro from a system header can get expanded even in the main source, the most obnoxious (or most often occurring?) warnings are simply suppressed completely in macro expansions. With ccache this does not work and there are spurious warnings. (Note that e.g. -save-temps has the same drawbacks, but who uses that for normal work.) So I think actually CCACHE_CPP2 set is the normal way and _not_ having it set can be considered to be a performance hack. Some time back (http://www.mail-archive.com/[email protected]/msg00817.html) I measured CCACHE_CPP2 adding 8% overhead, today I tried it on a different machine compiling LLVM/Clang and I could get only 3% (no idea if that's a real improvement somewhere over the year or if it's just a noise). I don't have any numbers for GCC, but from what I have heard GCC's preprocessor has gotten noticeably faster in the last years. So, to my questions: - does somebody have any CCACHE_CPP2 numbers for GCC? - would it be possible to alter the documentation to actually recommend CCACHE_CPP2, or at least not dismiss it as something that's unlikely to be needed? - (based on performance numbers I guess) would it be possible to switch the default for CCACHE_CPP2? - how difficult would it be to add a possibility of preventing ccache's use of cpp completely, thus relying only on the direct mode? This could be useful in case the overhead of CCACHE_CPP2 is considered too big, and possibly even in the general case (direct hits should be usually much more common and why have the overhead of running cpp for a minority of hits). I could give this a shot, but I don't know if there isn't some design problem making this difficult/impossible. -- Lubos Lunak