Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3] infra: move ccache handling to the toolchain wrapper
Date: Sun, 4 Oct 2015 16:23:56 +0100	[thread overview]
Message-ID: <1443972236-18596-1-git-send-email-arnout@mind.be> (raw)
In-Reply-To: <1443961738-12149-5-git-send-email-arnout@mind.be>

Since we always have a toolchain wrapper now, we can move the ccache
call to the toolchain wrapper.

The hostcc ccache handling obviously stays.

The global addition of ccache to TARGET_CC/CXX is removed, but many
individual packages and infras still add it. This means we have a
chain like this: ccache -> toolchain-wrapper -> ccache -> gcc
However, this is fairly harmless: for cache misses, the inner ccache
just adds overhead and for cache hits, the inner ccache is never
called. Later patches will remove these redundant ccache calls.

As a side effect, perl now supports ccache as well.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: Danomi Manchego <danomimanchego123@gmail.com>
Cc: K?roly Kasza <kaszak@gmail.com>
---
v3: Don't use absolute path for BR_CCACHE; instead, use the abspath
    that is anyway already calculated by the wrapper. [Peter]
v2: No change
---
 package/Makefile.in            |  5 -----
 toolchain/toolchain-wrapper.c  | 15 ++++++++++++++-
 toolchain/toolchain-wrapper.mk |  4 ++++
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/package/Makefile.in b/package/Makefile.in
index 545694f..4b1ce7f 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -189,11 +189,6 @@ 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_STRIP_DEBUG := --strip-debug
 STRIP_STRIP_UNNEEDED := --strip-unneeded
diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c
index d4d25c7..aee5df7 100644
--- a/toolchain/toolchain-wrapper.c
+++ b/toolchain/toolchain-wrapper.c
@@ -23,6 +23,9 @@
 #include <stdlib.h>
 #include <errno.h>
 
+#ifdef BR_CCACHE
+static char ccache_path[PATH_MAX];
+#endif
 static char path[PATH_MAX];
 static char sysroot[PATH_MAX];
 
@@ -40,6 +43,9 @@ static char sysroot[PATH_MAX];
 #define EXCLUSIVE_ARGS	3
 
 static char *predef_args[] = {
+#ifdef BR_CCACHE
+	ccache_path,
+#endif
 	path,
 	"--sysroot", sysroot,
 #ifdef BR_ABI
@@ -147,6 +153,13 @@ int main(int argc, char **argv)
 		perror(__FILE__ ": overflow");
 		return 3;
 	}
+#ifdef BR_CCACHE
+	ret = snprintf(ccache_path, sizeof(ccache_path), "%s/usr/bin/ccache", absbasedir);
+	if (ret >= sizeof(ccache_path)) {
+		perror(__FILE__ ": overflow");
+		return 3;
+	}
+#endif
 	ret = snprintf(sysroot, sizeof(sysroot), "%s/" BR_SYSROOT, absbasedir);
 	if (ret >= sizeof(sysroot)) {
 		perror(__FILE__ ": overflow");
@@ -251,7 +264,7 @@ int main(int argc, char **argv)
 		}
 	}
 
-	if (execv(path, args))
+	if (execv(args[0], args))
 		perror(path);
 
 	free(args);
diff --git a/toolchain/toolchain-wrapper.mk b/toolchain/toolchain-wrapper.mk
index 899947d..749afd7 100644
--- a/toolchain/toolchain-wrapper.mk
+++ b/toolchain/toolchain-wrapper.mk
@@ -16,6 +16,10 @@ TOOLCHAIN_WRAPPER_ARGS += -DBR_SYSROOT='"$(STAGING_SUBDIR)"'
 # separate argument when used in execv() by the toolchain wrapper.
 TOOLCHAIN_WRAPPER_ARGS += -DBR_ADDITIONAL_CFLAGS='$(foreach f,$(call qstrip,$(BR2_TARGET_OPTIMIZATION)),"$(f)",)'
 
+ifeq ($(BR2_CCACHE),y)
+TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE
+endif
+
 # For simplicity, build directly into the install location
 define TOOLCHAIN_BUILD_WRAPPER
 	$(Q)mkdir -p $(HOST_DIR)/usr/bin
-- 
2.5.3

  parent reply	other threads:[~2015-10-04 15:23 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-04 12:28 [Buildroot] [PATCH v2 00/18] Internal toolchain wrapper & ccache support Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 01/18] toolchain-external: move wrapper to toolchain directory Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 02/18] gcc: use toolchain wrapper Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 03/18] gcc: remove unsafe patch check (poison system dirs) patch Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 04/18] infra: move ccache handling to the toolchain wrapper Arnout Vandecappelle
2015-10-04 15:07   ` Peter Korsgaard
2015-10-04 15:23   ` Arnout Vandecappelle [this message]
2015-10-04 12:28 ` [Buildroot] [PATCH v2 05/18] perl: Remove ccache handling Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 06/18] imx-lib: remove now-redundant " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 07/18] imx-vpu: " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 08/18] linux: " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 09/18] uboot: " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 10/18] barebox: " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 11/18] cryptodev-linux: remove now-redundant fix-ccache-compile patch Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 12/18] qt5base: remove now-redundant ccache handling Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 13/18] package-cmake: remove now-redundant target ccache support Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 14/18] qpid-proton: remove now-redundant ccache handling patch Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 15/18] Makefile.in: remove now-unused TARGET_CC/CXX_NOCCACHE Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 16/18] toolchain-wrapper: support change of BR2_CCACHE Arnout Vandecappelle
2015-10-04 14:24   ` Romain Naour
2015-10-04 12:28 ` [Buildroot] [PATCH v2 17/18] ccache: use mtime for external toolchain, CONF_OPTS for internal toolchain Arnout Vandecappelle
2015-10-04 14:55   ` Romain Naour
2015-10-04 15:25   ` [Buildroot] [PATCH v3] " Arnout Vandecappelle
2015-10-04 12:28 ` [Buildroot] [PATCH v2 18/18] [RFC] ccache: support changing the output directory Arnout Vandecappelle
2015-10-04 15:25   ` [Buildroot] [PATCH v3] " Arnout Vandecappelle
2015-10-04 16:01 ` [Buildroot] [PATCH v2 00/18] Internal toolchain wrapper & ccache support Peter Korsgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1443972236-18596-1-git-send-email-arnout@mind.be \
    --to=arnout@mind.be \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox