[ccache] Making ccache and clang compatible
Max Horn
max at quendi.de
Thu Aug 16 06:54:55 MDT 2012
Dear Joel,
sorry for the late reply -- I simply overlooked that this thread was resumed :-(.
On 19.07.2012, at 23:34, Joel Rosdahl wrote:
> On 11 July 2012 14:42, Max Horn <max at quendi.de> wrote:
>> On 11.07.2012, at 02:34, Martin Pool wrote:
>>> If you are compiling from a .i or .ii file, the -D and -I options can't
>>> have any effect. It's reasonable for clang to emit a warning about it, and
>>> it would be reasonable for ccache to strip those options when compiling a
>>> preprocessed file.
>>
>> Aye, if that would be acceptable for the ccache authors, that would be the best solution I think. It would certainly be much cleaner than trying to detect clang and passing options to it to disable that warning...
>
> I agree, as long as it doesn't introduce regression for other compilers.
>
> Max, do you have a suggestion on which options would make sense to not
> pass to the preprocessor?
Naively, any preprocessor option would be suspect, I guess. Based on the clang manpage, that would include at least these:
-Dmacroname=value
-Umacroname
-include filename
-Idirectory
-Fdirectory
-nostdinc
-nostdlibinc
-nobuiltininc
I did some testing with the clang on my OS X 10.7.4 box, which is
Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
This tells me that the following options cause the warning to appear:
-U, -I, -include
Based on the (Apple) GCC man page, I tested various more options; I am not sure whether these are explicitly supported by Apple the following also all trigger the warning:
imacros, idirafter, iprefix, iwithprefix, iwithprefixbefore, isystem, iquote (all takes a path as argument)
-I-, -C, -CC, -remap, -fno-working-directory,
-MG, -MP, -MD, -MMD,
-MF foobar, -MQ foobar, -MT foobar
-Xpreprocessor foobar, -Wp,foobar,
Interestingly, -imultilib also triggered the warning, but given a bogus path, it also triggered a linker error. This looks like a bug to me, based on the documentation for this switch.
These did not trigger the warning:
-D (to my surprise), -F (also surprised med),
-P,
-nostdinc, -nostdlibinc, -nobuiltininc,
-isysroot (agrees with documentation),
Cheers,
Max
More information about the ccache
mailing list