* [Buildroot] [PATCH v3] ccache: allow dynamic selection of cache directory
@ 2012-05-16 19:39 Thomas De Schampheleire
2012-05-18 8:43 ` Peter Korsgaard
0 siblings, 1 reply; 2+ messages in thread
From: Thomas De Schampheleire @ 2012-05-16 19:39 UTC (permalink / raw)
To: buildroot
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>
---
v3: Revert wrapper script; simply replace the getenv (suggestion Arnout).
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 | 3 ++-
package/ccache/ccache.mk | 24 ++++++++++++------------
3 files changed, 21 insertions(+), 13 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
@@ -252,7 +252,8 @@ TARGET_SKELETON=$(TOPDIR)/fs/skeleton
ifeq ($(BR2_CCACHE),y)
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)
HOSTCXX := $(CCACHE) $(HOSTCXX)
endif
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,22 @@ 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
+# Patch host-ccache as follows:
+# - Use BUILDROOT_CACHE_DIR instead of CCACHE_DIR, because CCACHE_DIR
+# is already used by autotargets for the ccache package.
+# BUILDROOT_CACHE_DIR is exported by Makefile based on config option
+# BR2_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.
+define HOST_CCACHE_PATCH_CONFIGURATION
+ sed -i 's,getenv("CCACHE_DIR"),getenv("BUILDROOT_CACHE_DIR"),' $(@D)/ccache.c
sed -i 's,getenv("CCACHE_COMPILERCHECK"),"none",' $(@D)/ccache.c
endef
HOST_CCACHE_POST_CONFIGURE_HOOKS += \
- HOST_CCACHE_FIX_CCACHE_DIR
+ HOST_CCACHE_PATCH_CONFIGURATION
$(eval $(call AUTOTARGETS))
$(eval $(call AUTOTARGETS,host))
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Buildroot] [PATCH v3] ccache: allow dynamic selection of cache directory
2012-05-16 19:39 [Buildroot] [PATCH v3] ccache: allow dynamic selection of cache directory Thomas De Schampheleire
@ 2012-05-18 8:43 ` Peter Korsgaard
0 siblings, 0 replies; 2+ messages in thread
From: Peter Korsgaard @ 2012-05-18 8:43 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> writes:
Thomas> The existing ccache infrastructure sets the cache directory
Thomas> hardcoded in the ccache binary. As this directory was set to
Thomas> ~/.buildroot-ccache, the cache is not necessarily local
Thomas> (e.g. in corporate environments the home directories may be
Thomas> mounted over NFS.) Previous versions of buildroot did allow to
Thomas> set the cache directory, but this was also hardcoded (so you
Thomas> had to rebuild ccache to change it), plus that support was
Thomas> removed. See
Thomas> http://lists.busybox.net/pipermail/buildroot/2011-July/044511.html
Thomas> for a discussion on this.
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-05-18 8:43 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-16 19:39 [Buildroot] [PATCH v3] ccache: allow dynamic selection of cache directory Thomas De Schampheleire
2012-05-18 8:43 ` Peter Korsgaard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox