[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