[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