[Buildroot] [PATCH v2] ccache: allow dynamic selection of cache directory
Thomas De Schampheleire
patrickdepinguin+buildroot at gmail.com
Fri May 4 19:17:28 UTC 2012
On Fri, Apr 6, 2012 at 8:47 PM, Thomas De Schampheleire
<patrickdepinguin+buildroot at gmail.com> wrote:
> The existing ccache infrastructure sets the cache directory hardcoded in the
> ccache binary. As this directory was set to ~/.buildroot-ccache, the cache
> is not necessarily local (e.g. in corporate environments the home directories
> may be mounted over NFS.)
> Previous versions of buildroot did allow to set the cache directory, but this
> was also hardcoded (so you had to rebuild ccache to change it), plus that
> support was removed.
> See http://lists.busybox.net/pipermail/buildroot/2011-July/044511.html for
> a discussion on this.
>
> This patch introduces a ccache wrapper script that uses a shell variable
> (exported from the Makefile and coming from .config) to set the right
> CCACHE_DIR.
>
> Additionally it migrates the COMPILERCHECK setting to the wrapper script
> as well.
>
> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
>
> ---
> v2: Update based on Arnout's comments: move compilercheck to wrapper, move
> wrapper to version-controlled file instead of generating it, use exec,
> rename cache_dir variable, fix whitespace.
>
> Config.in | 7 +++++++
> Makefile | 5 +++--
> package/ccache/ccache-wrapper | 18 ++++++++++++++++++
> package/ccache/ccache.mk | 19 +++++--------------
> 4 files changed, 33 insertions(+), 16 deletions(-)
>
> diff --git a/Config.in b/Config.in
> --- a/Config.in
> +++ b/Config.in
> @@ -198,6 +198,13 @@ config BR2_CCACHE
> ccache cache by removing the $HOME/.buildroot-ccache
> directory.
>
> +config BR2_CCACHE_DIR
> + string "Compiler cache location"
> + depends on BR2_CCACHE
> + default "$(HOME)/.buildroot-ccache"
> + help
> + Where ccache should store cached files.
> +
> config BR2_DEPRECATED
> bool "Show packages that are deprecated or obsolete"
> help
> diff --git a/Makefile b/Makefile
> --- a/Makefile
> +++ b/Makefile
> @@ -285,8 +285,9 @@ TOOLCHAIN_DIR=$(BASE_DIR)/toolchain
> TARGET_SKELETON=$(TOPDIR)/fs/skeleton
>
> ifeq ($(BR2_CCACHE),y)
> -CCACHE:=$(HOST_DIR)/usr/bin/ccache
> -CCACHE_CACHE_DIR=$(HOME)/.buildroot-ccache
> +CCACHE = $(HOST_DIR)/usr/bin/ccache-wrapper
> +BUILDROOT_CACHE_DIR = $(call qstrip,$(BR2_CCACHE_DIR))
> +export BUILDROOT_CACHE_DIR
> HOSTCC := $(CCACHE) $(HOSTCC)
> HOSTCXX := $(CCACHE) $(HOSTCXX)
> endif
> diff --git a/package/ccache/ccache-wrapper b/package/ccache/ccache-wrapper
> new file mode 100644
> --- /dev/null
> +++ b/package/ccache/ccache-wrapper
> @@ -0,0 +1,18 @@
> +#!/bin/sh
> +# ccache wrapper tweaking the ccache environment
> +
> +# Set cache dir based on .config
> +CCACHE_DIR="$BUILDROOT_CACHE_DIR"
> +export CCACHE_DIR
> +
> +# 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.
> +CCACHE_COMPILERCHECK=none
> +export CCACHE_COMPILERCHECK
> +
> +
> +CCACHE_BIN="`dirname $0`/ccache"
> +exec "$CCACHE_BIN" "$@"
> diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk
> --- a/package/ccache/ccache.mk
> +++ b/package/ccache/ccache.mk
> @@ -25,22 +25,13 @@ HOST_CCACHE_CONF_ENV = \
> # has zero dependency besides the C library.
> HOST_CCACHE_CONF_OPT += ccache_cv_zlib_1_2_3=no
>
> -# We directly hardcode configuration into the binary, as it is much
> -# easier to handle than passing an environment variable. Our
> -# 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.
> -define HOST_CCACHE_FIX_CCACHE_DIR
> - sed -i 's,getenv("CCACHE_DIR"),"$(CCACHE_CACHE_DIR)",' $(@D)/ccache.c
> - sed -i 's,getenv("CCACHE_COMPILERCHECK"),"none",' $(@D)/ccache.c
> +define HOST_CCACHE_INSTALL_WRAPPER
> + $(INSTALL) -D -m 0755 package/ccache/ccache-wrapper \
> + $(HOST_DIR)/usr/bin/ccache-wrapper
> endef
>
> -HOST_CCACHE_POST_CONFIGURE_HOOKS += \
> - HOST_CCACHE_FIX_CCACHE_DIR
> +HOST_CCACHE_POST_INSTALL_HOOKS += \
> + HOST_CCACHE_INSTALL_WRAPPER
>
> $(eval $(call AUTOTARGETS))
> $(eval $(call AUTOTARGETS,host))
bump
More information about the buildroot
mailing list