[U-Boot] [PATCH] config.mk: use memoization in cc-option macro to speed up compilation
Simon Glass
sjg at chromium.org
Wed Nov 2 21:39:41 CET 2011
Hi Daniel,
On Wed, Nov 2, 2011 at 11:46 AM, Daniel Schwierzeck
<daniel.schwierzeck at googlemail.com> wrote:
> Apply memoization to cc-option macro by caching the results of the
> gcc calls. This macro is called very often so using cached results
> leads to faster compilation times.
>
> This feature can be enabled by setting CACHE_CC_OPTIONS=y in the
> environment.
>
> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck at googlemail.com>
> ---
>
> Some MAKEALL runs for ARM and MIPS (on Core 2 Duo E6600 at 2.4GHz):
>
> time CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi-
> MAKEALL_LOGDIR=../logs/ BUILD_DIR=../test/ ./MAKEALL -s omap3 -v ti
>
> real 3m0.380s
> user 9m30.570s
> sys 1m34.550s
>
>
> time CACHE_CC_OPTIONS=y CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi-
> MAKEALL_LOGDIR=../logs/ BUILD_DIR=../test/ ./MAKEALL -s omap3 -v ti
>
> real 1m15.661s
> user 4m21.510s
> sys 0m33.190s
>
>
> time CROSS_COMPILE=/opt/codesourcery/mips-2011.03/bin/mips-linux-gnu-
> MAKEALL_LOGDIR=../logs/ BUILD_DIR=../test/ ./MAKEALL mips4kc
>
> real 2m49.883s
> user 6m25.840s
> sys 0m58.200s
>
>
> time CACHE_CC_OPTIONS=y CROSS_COMPILE=/opt/codesourcery/mips-2011.03/bin/mips-linux-gnu-
> MAKEALL_LOGDIR=../logs/ BUILD_DIR=../test/ ./MAKEALL mips4kc
>
> real 2m18.205s
> user 4m59.740s
> sys 0m39.530s
>
> config.mk | 14 ++++++++++++++
> 1 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/config.mk b/config.mk
> index 11b67e5..27c366f 100644
> --- a/config.mk
> +++ b/config.mk
> @@ -107,8 +107,22 @@ HOSTCFLAGS += -pedantic
> # Option checker (courtesy linux kernel) to ensure
> # only supported compiler options are used
> #
> +ifeq ($(CACHE_CC_OPTIONS),y)
> +sinclude $(OBJTREE)/include/cc-options.mk
It would be better to put this into include/generated - it will also
make git ignore it and it will be also be removed on clobber which I
think you need.
> +
> +cc-option-cached = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> + > /dev/null 2>&1; then \
> + echo 'CC_OPTIONS += $(strip $1)' \
> + >> $(OBJTREE)/include/cc-options.mk; \
> + echo "$(1)"; else echo "$(2)"; fi ;)
> +
> +cc-option = $(if $(filter $1,$(CC_OPTIONS)),\
> + $(filter $1,$(CC_OPTIONS)),\
> + $(call cc-option-cached,$1,$2))
> +else
> cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
> +endif
>
Tested-by: Simon Glass <sjg at chromium.org>
With this patch and Wolfgang's I get 1.122s for an incremental build
now. Now I just need faster SPI flash and a faster car to get to work
sooner.
Is there any reason not to enable this option by default?
Regards,
Simon
> #
> # Include the make variables (CC, etc...)
> --
> 1.7.7.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
More information about the U-Boot
mailing list