From patchwork Fri Mar 23 14:52:03 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: 148449 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from whitealder.osuosl.org (whitealder.osuosl.org [140.211.166.138]) by ozlabs.org (Postfix) with ESMTP id EB093B6EF3 for ; Sat, 24 Mar 2012 01:52:33 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id CBD3C8F8EE; Fri, 23 Mar 2012 14:52:32 +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 mFlEsT2gxUwU; Fri, 23 Mar 2012 14:52:27 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id 7CE658F4A9; Fri, 23 Mar 2012 14:52:26 +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 6B8438F753 for ; Fri, 23 Mar 2012 14:52:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 62BCB8F4A9 for ; Fri, 23 Mar 2012 14:52:25 +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 wKvvN8G8KtGA for ; Fri, 23 Mar 2012 14:52:20 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-ee0-f43.google.com (mail-ee0-f43.google.com [74.125.83.43]) by whitealder.osuosl.org (Postfix) with ESMTPS id D428C8D5A3 for ; Fri, 23 Mar 2012 14:52:19 +0000 (UTC) Received: by eekc13 with SMTP id c13so1327889eek.16 for ; Fri, 23 Mar 2012 07:52:18 -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=MjLZNyLkbAP87xBuEuI0sSt0gNv3pzCXRMb5XarjKQM=; b=Bbbs2oeHGb27LR0z+U1Hwb/okVdNRBwhoIHz7QPFv4h+67e85LUXc9ZkVay3ETpIpU D5o5K4bRzEaQcbwOfwWMqipWI8rhzAv8ov3q/URvT2UWPjWSr5ruWD8OAjmG/Ea5g2yG avjfOGr3piEiX+R22lCLfl0lsTc6ajABloBnfxLh2Jh+3sF19Lbn0Eqz+k2g+1gFu07a kaB+0nrdKxMO8wAW7w6RUcMVaOpgJiEyshAe99QgXkrEc9T1Tzgxo9K6sXc25nUDXXEj Ps16yJoCxy4ONynewZd6I+smQh43hPRk9BCH0sV8A2fKe+sqd7MF6i4r+xLY69kSPa47 fiXg== Received: by 10.213.105.147 with SMTP id t19mr922905ebo.199.1332514338116; Fri, 23 Mar 2012 07:52:18 -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 n55sm28930413eef.6.2012.03.23.07.52.16 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 23 Mar 2012 07:52:17 -0700 (PDT) MIME-Version: 1.0 X-Mercurial-Node: 3be175a4efe814978ed4462e763691fe26829d1a Message-Id: <3be175a4efe814978ed4.1332514323@beantl019720> User-Agent: Mercurial-patchbomb/1.9.1 Date: Fri, 23 Mar 2012 15:52:03 +0100 From: Thomas De Schampheleire To: buildroot@busybox.net Subject: [Buildroot] [PATCH] 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 set 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. Signed-off-by: Thomas De Schampheleire --- Note: I'm not sure what to do with the recently added COMPILERCHECK. Should it remain hardcoded, or also use the wrapper script for uniformity? Config.in | 7 +++++++ Makefile | 6 ++++-- package/ccache/ccache.mk | 21 ++++++++++++++------- 3 files changed, 25 insertions(+), 9 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,10 @@ 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 +CCACHE_BIN:=$(HOST_DIR)/usr/bin/ccache +CCACHE_CACHE_DIR:=$(call qstrip,$(BR2_CCACHE_DIR)) +export CCACHE_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,23 +25,30 @@ 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 +# We directly hardcode some 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. +# 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 endef HOST_CCACHE_POST_CONFIGURE_HOOKS += \ HOST_CCACHE_FIX_CCACHE_DIR +define HOST_CCACHE_CREATE_WRAPPER + echo "#!/bin/sh" > $(CCACHE) + echo 'CCACHE_DIR=$$CCACHE_CACHE_DIR $(CCACHE_BIN) "$$@"' >> $(CCACHE) + chmod +x $(CCACHE) +endef + +HOST_CCACHE_POST_INSTALL_HOOKS += \ + HOST_CCACHE_CREATE_WRAPPER + $(eval $(call AUTOTARGETS)) $(eval $(call AUTOTARGETS,host))