ccache: allow dynamic selection of cache directory

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 modifies ccache to respect a new shell variable (exported from
the Makefile, based on a configuration option) instead of CCACHE_DIR.
The name CCACHE_DIR itself is already used by autotargets for the ccache
package.

Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2012.11.x
Thomas De Schampheleire 2012-05-16 21:39:28 +02:00 committed by Peter Korsgaard
parent 4d1c69dd10
commit 433290761f
3 changed files with 21 additions and 13 deletions

View File

@ -198,6 +198,13 @@ config BR2_CCACHE
ccache cache by removing the $HOME/.buildroot-ccache ccache cache by removing the $HOME/.buildroot-ccache
directory. 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 config BR2_DEPRECATED
bool "Show packages that are deprecated or obsolete" bool "Show packages that are deprecated or obsolete"
help help

View File

@ -252,7 +252,8 @@ TARGET_SKELETON=$(TOPDIR)/fs/skeleton
ifeq ($(BR2_CCACHE),y) ifeq ($(BR2_CCACHE),y)
CCACHE:=$(HOST_DIR)/usr/bin/ccache CCACHE:=$(HOST_DIR)/usr/bin/ccache
CCACHE_CACHE_DIR=$(HOME)/.buildroot-ccache BUILDROOT_CACHE_DIR = $(call qstrip,$(BR2_CCACHE_DIR))
export BUILDROOT_CACHE_DIR
HOSTCC := $(CCACHE) $(HOSTCC) HOSTCC := $(CCACHE) $(HOSTCC)
HOSTCXX := $(CCACHE) $(HOSTCXX) HOSTCXX := $(CCACHE) $(HOSTCXX)
endif endif

View File

@ -25,22 +25,22 @@ HOST_CCACHE_CONF_ENV = \
# has zero dependency besides the C library. # has zero dependency besides the C library.
HOST_CCACHE_CONF_OPT += ccache_cv_zlib_1_2_3=no HOST_CCACHE_CONF_OPT += ccache_cv_zlib_1_2_3=no
# We directly hardcode configuration into the binary, as it is much # Patch host-ccache as follows:
# easier to handle than passing an environment variable. Our # - Use BUILDROOT_CACHE_DIR instead of CCACHE_DIR, because CCACHE_DIR
# configuration is: # is already used by autotargets for the ccache package.
# - the cache location # BUILDROOT_CACHE_DIR is exported by Makefile based on config option
# - the fact that ccache shouldn't use the compiler binary mtime to # BR2_CCACHE_DIR.
# - detect a change in the compiler, because in the context of # - ccache shouldn't use the compiler binary mtime to detect a change in
# - Buildroot, that completely defeats the purpose of ccache. Of # the compiler, because in the context of Buildroot, that completely
# - course, that leaves the user responsible for purging its cache # defeats the purpose of ccache. Of course, that leaves the user
# - when the compiler changes. # responsible for purging its cache when the compiler changes.
define HOST_CCACHE_FIX_CCACHE_DIR define HOST_CCACHE_PATCH_CONFIGURATION
sed -i 's,getenv("CCACHE_DIR"),"$(CCACHE_CACHE_DIR)",' $(@D)/ccache.c sed -i 's,getenv("CCACHE_DIR"),getenv("BUILDROOT_CACHE_DIR"),' $(@D)/ccache.c
sed -i 's,getenv("CCACHE_COMPILERCHECK"),"none",' $(@D)/ccache.c sed -i 's,getenv("CCACHE_COMPILERCHECK"),"none",' $(@D)/ccache.c
endef endef
HOST_CCACHE_POST_CONFIGURE_HOOKS += \ HOST_CCACHE_POST_CONFIGURE_HOOKS += \
HOST_CCACHE_FIX_CCACHE_DIR HOST_CCACHE_PATCH_CONFIGURATION
$(eval $(call AUTOTARGETS)) $(eval $(call AUTOTARGETS))
$(eval $(call AUTOTARGETS,host)) $(eval $(call AUTOTARGETS,host))