From patchwork Fri Apr 6 18:47:17 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas De Schampheleire X-Patchwork-Id: 151245 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from fraxinus.osuosl.org (fraxinus.osuosl.org [140.211.166.137]) by ozlabs.org (Postfix) with ESMTP id 9E0F0B708F for ; Sat, 7 Apr 2012 04:47:58 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 464D910B576; Fri, 6 Apr 2012 18:47:57 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 58sNRgHcZdRj; Fri, 6 Apr 2012 18:47:54 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 6ADEF101E24; Fri, 6 Apr 2012 18:47:54 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (whitealder.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 367738F753 for ; Fri, 6 Apr 2012 18:47:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 2892F8FE53 for ; Fri, 6 Apr 2012 18:47:53 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id P8Bq-7PbQKtV for ; Fri, 6 Apr 2012 18:47:51 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-ey0-f171.google.com (mail-ey0-f171.google.com [209.85.215.171]) by whitealder.osuosl.org (Postfix) with ESMTPS id 3A9518FE3A for ; Fri, 6 Apr 2012 18:47:51 +0000 (UTC) Received: by eaal11 with SMTP id l11so962061eaa.16 for ; Fri, 06 Apr 2012 11:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:content-type:mime-version:content-transfer-encoding:subject :x-mercurial-node:message-id:user-agent:date:from:to:cc; bh=T1p2SogZFzo+wnKvxwoy4XA7vKPFH3pW5SaV4nmlLlk=; b=jVG4syqT+zEYp24wFO6QTiwTNnDjNm3dKUiR+5pPSCqE0potHVOQ/NuFlxBUaouPpC Bh2zRx65WY6nSF7KOrxDvtFnk1GOaba6lLVqMcc7KEyyJ5bhCCY+FEzaDA9xcEDreG+n 35Y3AAnxQqjjRjm2sPnRWl0e6bYgkgf4MiU2iBGl99hYoWTnA9+G1pp10ydFS6egJl6i rf4yr+kR74sm63vh1gYuHGBg8usR4ikPZ12K/gTvruWTH5o9LINraBbHF9V/XAWmTEW4 nJxisP7e+vs34tnHmt6qF0yDwkeUL6xPdFdRK3XLP/pHfEIejd9+zQa6DvA9s/Yq+S1q PAtw== Received: by 10.14.40.70 with SMTP id e46mr1409103eeb.20.1333738069058; Fri, 06 Apr 2012 11:47:49 -0700 (PDT) Received: from [127.0.1.1] (94-227-97-70.access.telenet.be. [94.227.97.70]) by mx.google.com with ESMTPS id n55sm28871056eef.6.2012.04.06.11.47.47 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 06 Apr 2012 11:47:48 -0700 (PDT) MIME-Version: 1.0 X-Mercurial-Node: 962414f85797a188de797b7946195ef9ba5a132e Message-Id: <962414f85797a188de79.1333738037@beantl019720> User-Agent: Mercurial-patchbomb/1.9.1 Date: Fri, 06 Apr 2012 20:47:17 +0200 From: Thomas De Schampheleire To: buildroot@busybox.net, arnout@mind.be Subject: [Buildroot] [PATCH v2] ccache: allow dynamic selection of cache directory X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: buildroot-bounces@busybox.net Sender: buildroot-bounces@busybox.net 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 --- 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))