[Buildroot] [PATCH] ccache: allow dynamic selection of cache directory
Arnout Vandecappelle
arnout at mind.be
Sun Mar 25 20:55:57 UTC 2012
On Friday 23 March 2012 15:52:03 Thomas De Schampheleire wrote:
[snip]
> ---
> Note: I'm not sure what to do with the recently added COMPILERCHECK. Should
> it remain hardcoded, or also use the wrapper script for uniformity?
I would say: use the wrapper script.
> ifeq ($(BR2_CCACHE),y)
> -CCACHE:=$(HOST_DIR)/usr/bin/ccache
> -CCACHE_CACHE_DIR=$(HOME)/.buildroot-ccache
> +CCACHE:=$(HOST_DIR)/usr/bin/ccache-wrapper
> +CCACHE_BIN:=$(HOST_DIR)/usr/bin/ccache
> +CCACHE_CACHE_DIR:=$(call qstrip,$(BR2_CCACHE_DIR))
> +export CCACHE_CACHE_DIR
You could take the opportunity to fix up the whitespace here. Also,
there is no need for the := (except maybe for the _DIR itself, I'm a
bit confused as how assignment interacts with export).
I would also rename the variable to BUILDROOT_CCACHE_DIR to clearly
distinguish it from and relate it to the normal CCACHE_DIR.
> -# We directly hardcode configuration into the binary, as it is much
> +# We directly hardcode some configuration into the binary, as it is much
> # easier to handle than passing an environment variable. Our
This statement has become rather ridiculous, since after this patch we
do both: setting environment variables and fixing up the executable.
And it becomes completely wrong if COMPILERCHECK moves to the wrapper
as well.
> # configuration is:
> -# - the cache location
> # - the fact that ccache shouldn't use the compiler binary mtime to
> -# - detect a change in the compiler, because in the context of
> -# - Buildroot, that completely defeats the purpose of ccache. Of
> -# - course, that leaves the user responsible for purging its cache
> -# - when the compiler changes.
> +# detect a change in the compiler, because in the context of
> +# Buildroot, that completely defeats the purpose of ccache. Of
> +# course, that leaves the user responsible for purging its cache
> +# when the compiler changes.
> define HOST_CCACHE_FIX_CCACHE_DIR
> - sed -i 's,getenv("CCACHE_DIR"),"$(CCACHE_CACHE_DIR)",' $(@D)/ccache.c
An alternative implementation would be to do the following here:
sed -i 's,getenv("CCACHE_DIR"),getenv("BUILDROOT_CCACHE_DIR"),' $(@D)/ccache.c
I actually prefer moving everything to a wrapper script, though.
Patching source files is inherently more fragile.
> sed -i 's,getenv("CCACHE_COMPILERCHECK"),"none",' $(@D)/ccache.c
> endef
>
> HOST_CCACHE_POST_CONFIGURE_HOOKS += \
> HOST_CCACHE_FIX_CCACHE_DIR
>
> +define HOST_CCACHE_CREATE_WRAPPER
> + echo "#!/bin/sh" > $(CCACHE)
> + echo 'CCACHE_DIR=$$CCACHE_CACHE_DIR $(CCACHE_BIN) "$$@"' >> $(CCACHE)
Small optimization: use exec, i.e.
echo 'CCACHE_DIR=$$CCACHE_CACHE_DIR exec $(CCACHE_BIN) "$$@"' >> $(CCACHE)
I think it's cleaner to create the wrapper as a file in package/ccache
and install it to the host directory. It can autodiscover the location
of the ccache bin like so:
CCACHE_BIN="$(dirname $0)/ccache"
> + chmod +x $(CCACHE)
> +endef
> +
> +HOST_CCACHE_POST_INSTALL_HOOKS += \
> + HOST_CCACHE_CREATE_WRAPPER
> +
> $(eval $(call AUTOTARGETS))
> $(eval $(call AUTOTARGETS,host))
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286540
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
More information about the buildroot
mailing list