summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>2010-12-07 21:09:56 +0100
committerPeter Korsgaard <jacmet@sunsite.dk>2010-12-08 17:51:49 +0100
commit17b66affdf439ed7c35d2825a1e2bf7967191e14 (patch)
tree1ca4fdfe4efb06a8a081236c492531d9697e22bf /package
parent3bbf1c2ea6140d8b288b0af5b1a9c3a1aa92edad (diff)
ccache: rework ccache management
* ccache is now a normal package (both for the host and the target). * ccache option is now part of the "Build options" menu. It will automatically build ccache for the host before building anything, and will use it to cache builds for both host compilations and target compilations. * bump ccache to 3.1.3 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package')
-rw-r--r--package/Config.in2
-rw-r--r--package/Makefile.in10
-rw-r--r--package/ccache/Config.in9
-rw-r--r--package/ccache/ccache.mk33
4 files changed, 52 insertions, 2 deletions
diff --git a/package/Config.in b/package/Config.in
index 08ffda619..b02682855 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -35,7 +35,7 @@ source "package/autoconf/Config.in"
source "package/automake/Config.in"
source "package/bison/Config.in"
source "package/bsdiff/Config.in"
-source "toolchain/ccache/Config.in.2"
+source "package/ccache/Config.in"
if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
source "package/coreutils/Config.in"
endif
diff --git a/package/Makefile.in b/package/Makefile.in
index 2ca8c3144..d448a7edf 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -142,6 +142,14 @@ TARGET_RANLIB = $(TARGET_CROSS)ranlib
TARGET_OBJCOPY = $(TARGET_CROSS)objcopy
TARGET_OBJDUMP = $(TARGET_CROSS)objdump
+TARGET_CC_NOCCACHE := $(TARGET_CC)
+TARGET_CXX_NOCCACHE := $(TARGET_CXX)
+
+ifeq ($(BR2_CCACHE),y)
+TARGET_CC := $(CCACHE) $(TARGET_CC)
+TARGET_CXX := $(CCACHE) $(TARGET_CXX)
+endif
+
ifeq ($(BR2_STRIP_strip),y)
STRIP_DISCARD_ALL:=--discard-all
STRIP_STRIP_UNNEEDED:=--strip-unneeded
@@ -175,7 +183,7 @@ HOST_LDFLAGS += -L$(HOST_DIR)/lib -L$(HOST_DIR)/usr/lib -Wl,-rpath,$(HOST_DIR)/
HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH)
# hostcc version as an integer - E.G. 4.3.2 => 432
-HOSTCC_VERSION:=$(shell $(HOSTCC) --version | \
+HOSTCC_VERSION:=$(shell $(HOSTCC_NOCCACHE) --version | \
sed -n 's/^.* \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[ ]*.*$$/\1\2\3/p')
TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
diff --git a/package/ccache/Config.in b/package/ccache/Config.in
new file mode 100644
index 000000000..f4f7f8f9c
--- /dev/null
+++ b/package/ccache/Config.in
@@ -0,0 +1,9 @@
+config BR2_PACKAGE_CCACHE
+ bool "ccache"
+ help
+ ccache is a compiler cache. It speeds up recompilation by
+ caching previous compilations and detecting when the same
+ compilation is being done again
+
+ http://samba.ccache.org
+
diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk
new file mode 100644
index 000000000..1d0a5608e
--- /dev/null
+++ b/package/ccache/ccache.mk
@@ -0,0 +1,33 @@
+#############################################################
+#
+# ccache
+#
+#############################################################
+
+CCACHE_VERSION = 3.1.3
+CCACHE_SITE = http://samba.org/ftp/ccache
+CCACHE_SOURCE = ccache-$(CCACHE_VERSION).tar.bz2
+
+# When ccache is being built for the host, ccache is not yet
+# available, so we have to use the special C compiler without the
+# cache.
+HOST_CCACHE_CONF_ENV = \
+ CC="$(HOSTCC_NOCCACHE)"
+
+# We directly hardcode the cache location into the binary, as it is
+# much easier to handle than passing an environment variable.
+define HOST_CCACHE_FIX_CCACHE_DIR
+ sed -i 's,getenv("CCACHE_DIR"),"$(CCACHE_CACHE_DIR)",' $(@D)/ccache.c
+endef
+
+HOST_CCACHE_POST_CONFIGURE_HOOKS += \
+ HOST_CCACHE_FIX_CCACHE_DIR
+
+$(eval $(call AUTOTARGETS,package,ccache))
+$(eval $(call AUTOTARGETS,package,ccache,host))
+
+ifeq ($(BR2_CCACHE),y)
+ccache-stats: host-ccache
+ $(Q)$(CCACHE) -s
+endif
+