[U-Boot] [U-Boot, 1/2] common: Add CCACHE variable to allow use of ccache
sun york-R58495
R58495 at freescale.com
Thu Aug 22 07:45:04 CEST 2013
On Aug 21, 2013, at 10:02 PM, Marek Vasut wrote:
> Dear sun york-R58495,
>
>> On Aug 21, 2013, at 7:51 PM, Marek Vasut wrote:
>>> Dear York Sun,
>>>
>>>> On 05/20/2013 10:25 AM, Marek Vasut wrote:
>>>>> Prefix HOSTCC and CC with CCACHE variable to allow easy use of ccache.
>>>>> In case the user wants to use ccache, exporting CCACHE=ccache will do
>>>>> the trick. It is of course possible to either make the cross-compiler
>>>>> name into a shellscript which invokes the ccache and the compiler, but
>>>>> setting this variable makes use of ccache easier and more convenient.
>>>>>
>>>>> Using ccache becomes convenient when using MAKEALL for large build
>>>>> tests, where the speedup after building the cache for the first time
>>>>> is about 4-6 times.
>>>>>
>>>>> Signed-off-by: Marek Vasut <marex at denx.de>
>>>>> Cc: Tom Rini <trini at ti.com>
>>>>>
>>>>> ---
>>>>> config.mk | 8 +++++---
>>>>>
>>>>> 1 file changed, 5 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/config.mk b/config.mk
>>>>> index 1fd109f..d59ded2 100644
>>>>> --- a/config.mk
>>>>> +++ b/config.mk
>>>>> @@ -98,6 +98,8 @@ else
>>>>>
>>>>> HOSTCC = gcc
>>>>> endif
>>>>>
>>>>> +HOSTCC := $(CCACHE) $(HOSTCC)
>>>>> +
>>>>>
>>>>> ifeq ($(HOSTOS),cygwin)
>>>>> HOSTCFLAGS += -ansi
>>>>> endif
>>>>>
>>>>> @@ -140,13 +142,13 @@ binutils-version = $(shell $(SHELL)
>>>>> $(SRCTREE)/tools/binutils-version.sh $(AS))
>>>>>
>>>>> #
>>>>> # Include the make variables (CC, etc...)
>>>>> #
>>>>>
>>>>> -AS = $(CROSS_COMPILE)as
>>>>> +AS = $(CCACHE) $(CROSS_COMPILE)as
>>>>>
>>>>> # Always use GNU ld
>>>>> LD = $(shell if $(CROSS_COMPILE)ld.bfd -v > /dev/null 2>&1; \
>>>>>
>>>>> then echo "$(CROSS_COMPILE)ld.bfd"; else echo
>>>
>>> "$(CROSS_COMPILE)ld";
>>>
>>>>> fi;)
>>>>>
>>>>> -CC = $(CROSS_COMPILE)gcc
>>>>> +CC = $(CCACHE) $(CROSS_COMPILE)gcc
>>>>>
>>>>> CPP = $(CC) -E
>>>>> AR = $(CROSS_COMPILE)ar
>>>>> NM = $(CROSS_COMPILE)nm
>>>>>
>>>>> @@ -320,7 +322,7 @@ endif
>>>>>
>>>>> #######################################################################
>>>>> # #
>>>>>
>>>>> -export HOSTCC HOSTCFLAGS HOSTLDFLAGS PEDCFLAGS HOSTSTRIP CROSS_COMPILE
>>>
>>> \
>>>
>>>>> +export HOSTCC HOSTCFLAGS HOSTLDFLAGS PEDCFLAGS HOSTSTRIP CROSS_COMPILE
>>>>> CCACHE \
>>>>>
>>>>> AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE
>>>>>
>>>>> export CONFIG_SYS_TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS
>>>
>>> CPPFLAGS
>>>
>>>>> CFLAGS AFLAGS
>>>>
>>>> Where did this patch go? I found it useful.
>>>
>>> It needs additional fixes, try running with MAKEALL and you will see the
>>> problem -- the problem is you would need separate ccache for each
>>> MAKEALL thread.
>>
>> I didn't use this patch but I modified config.mk as this patch did. MAKEALL
>> works fine for "-a powerpc". It cuts my compiling time more than half for
>> 660+ boards.
>
> That is still poor, it should be much faster. If you use separate ccache for
> each board, then it will be _much_ more performant.
>
> The problem is that when rebuilding all of those 680 configurations, the cached
> files get replaced by ones based on different board config all the time => you
> need to rebuild them => you loose performance.
>
I kind of get it. I have to increase my ccache size a lot (more than 2GB) to get consistent cache hit. I thought that was because I was using out-of-tree build when setting BUILD_NBUILDS. For the first time I run MAKEALL with ccache, it was completely miss. I mean zero hit. It would be nice to be able hit the cache. I was read the ccache document to understand how the path is involved when calculating the hash. How do you plan to make it work?
York
More information about the U-Boot
mailing list