[Buildroot] [PATCH 4/5] Enable ccache for cmake packages

Samuel Martin s.martin49 at gmail.com
Fri Mar 22 10:08:23 UTC 2013


Lucas,

2013/3/22 Luca Ceresoli <luca at lucaceresoli.net>:
> Samuel Martin wrote:
>>
>> Hi Lucas,
>>
>> 2013/3/21 Luca Ceresoli <luca at lucaceresoli.net>:
[...]
>> AFAIK, ccache only supports C, C++, Objective-C and Objective-C++.
>> So, I think, it is useless to set it for anything else.
>
>
> Ouch, right!
> The fix is as easy as:
>>     set(CMAKE_ASM_COMPILER $(TARGET_CC_NOCCACHE))\n\
>
> Now when ccache is enabled it all works OK.
>
>
>> BTW, I also use to set most of the binutils/gcc binaries in my CMake
>> toolchain files,
>> this includes setting the following variables:
>> CMAKE_{LINKER,AR,RANDLIB,NM,OBJCOPY,OBJDUMP,STRIP}.
>>
>> So, IMHO, it is not stupid to set CMAKE_ASM_COMPILER as well, though I
>> never need it so far.
>>
>> [...]
>>>
>>> Now it compiles correctly but with two bad side effects.
>>>
>>> First, when building without ccache, CMake detects /usr/bin/cc as the
>>> (supposedly cross-) compiler, leading to an obvious link failure.
>>> Ok, this can be worked around by generating a different
>>> toolchainfile.cmake for the ccache and non-ccache cases, although it
>>> is annoying.
>>
>> Well, here I use to conditionnaly enable ccache if found using
>> something like this:
>>
>> --
>> find_program(CCACHE "ccache")
>> if (CCACHE)
>>    message( STATUS "Using ccache")
>> endif(CCACHE)
>>
>> if (CCACHE AND NOT FORCE_NO_CCACHE)
>>    set(CMAKE_C_COMPILER "${CCACHE}" CACHE FILEPATH "" FORCE)
>>    set(CMAKE_CXX_COMPILER "${CCACHE}" CACHE FILEPATH "" FORCE)
>>    set(CMAKE_C_COMPILER_ARG1 "${HOST_DIR}/usr/bin/${TARGET_TUPLE}-gcc")
>>    set(CMAKE_CXX_COMPILER_ARG1 "${HOST_DIR}/usr/bin/${TARGET_TUPLE}-g++")
>> else(CCACHE AND NOT FORCE_NO_CCACHE)
>>    set(CMAKE_C_COMPILER "${HOST_DIR}/usr/bin/${TARGET_TUPLE}-gcc")
>>    set(CMAKE_CXX_COMPILER "${HOST_DIR}/usr/bin/${TARGET_TUPLE}-g++")
>> endif(CCACHE AND NOT FORCE_NO_CCACHE)
>> --
>
>
> I'm not following you here. This would require patching the
> CMakeLists.txt file for every CMake package, right?
Nope, just the toolchainfile.cmake.
And when ccache is disabled, we can just force it by setting
FORCE_NO_CCACHE in the CMake infra.

>
> If we want to solve this cleanly, it should be in the BR infrastructure.
Agree

> I think we shouldgenerate the toolchainfile.cmakefile with a different
> content for the two cases (ccache/no-ccache). But we also should generate
> it unconditionally at every build, in case the user changes the BR2_CCACHE
> setting.
I'm not sure I follow you here...

If we are able to generate one toolchain.cmake file that handle both case
(even enabling/disabling ccache from one run to another), we don't need
anything else, nor regenerate the toolchainfile.cmake file at each build start.

Anyway, there are few things to check and test, I'll look into this. :)

Regards,

-- 
Samuel



More information about the buildroot mailing list