All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for David Howells <dhowells@redhat.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, linux-kernel@vger.kernel.org, paulus@samba.org,
	hpa@zytor.com, mingo@kernel.org, torvalds@linux-foundation.org,
	namhyung@gmail.com, bp@amd64.org, dhowells@redhat.com,
	tglx@linutronix.de
Subject: [tip:perf/urgent] tools: Honour the O= flag when tool build called from a higher Makefile
Date: Sat, 1 Dec 2012 03:16:14 -0800	[thread overview]
Message-ID: <tip-bf35182ffcd00d8b36d56210ffdac110e5624d7d@git.kernel.org> (raw)
In-Reply-To: <1378.1352379110@warthog.procyon.org.uk>

Commit-ID:  bf35182ffcd00d8b36d56210ffdac110e5624d7d
Gitweb:     http://git.kernel.org/tip/bf35182ffcd00d8b36d56210ffdac110e5624d7d
Author:     David Howells <dhowells@redhat.com>
AuthorDate: Mon, 5 Nov 2012 21:02:08 +0000
Committer:  David Howells <dhowells@redhat.com>
CommitDate: Mon, 19 Nov 2012 22:10:30 +0000

tools: Honour the O= flag when tool build called from a higher Makefile

Honour the O= flag that was passed to a higher level Makefile and then passed
down as part of a tool build.

To make this work, the top-level Makefile passes the original O= flag and
subdir=tools to the tools/Makefile, and that in turn passes
subdir=$(O)/$(subdir)/foodir when building tool foo in directory
$(O)/$(subdir)/foodir (where the intervening slashes aren't added if an
element is missing).

For example, take perf.  This is found in tools/perf/.  Assume we're building
into directory ~/zebra/, so we pass O=~/zebra to make.  Dependening on where
we run the build from, we see:

	make run in dir		$(OUTPUT) dir
	=======================	==================
	linux			~/zebra/tools/perf/
	linux/tools		~/zebra/perf/
	linux/tools/perf	~/zebra/

and if O= is not set, we get:

	make run in dir		$(OUTPUT) dir
	=======================	==================
	linux			linux/tools/perf/
	linux/tools		linux/tools/perf/
	linux/tools/perf	linux/tools/perf/

The output directories are created by the descend function if they don't
already exist.

Signed-off-by: David Howells <dhowells@redhat.com>
Cc: Borislav Petkov <bp@amd64.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1378.1352379110@warthog.procyon.org.uk
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 Makefile                       |  6 ++++--
 tools/scripts/Makefile.include | 17 +++++++++++++----
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile
index 42d0e56..71dc31e 100644
--- a/Makefile
+++ b/Makefile
@@ -1321,10 +1321,12 @@ kernelversion:
 
 # Clear a bunch of variables before executing the submake
 tools/: FORCE
-	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS= -C $(src)/tools/
+	$(Q)mkdir -p $(objtree)/tools
+	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS= O=$(objtree) subdir=tools -C $(src)/tools/
 
 tools/%: FORCE
-	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS= -C $(src)/tools/ $*
+	$(Q)mkdir -p $(objtree)/tools
+	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS= O=$(objtree) subdir=tools -C $(src)/tools/ $*
 
 # Single targets
 # ---------------------------------------------------------------------------
diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
index 4a9e317..87467b1 100644
--- a/tools/scripts/Makefile.include
+++ b/tools/scripts/Makefile.include
@@ -1,8 +1,11 @@
-ifeq ("$(origin O)", "command line")
+ifeq ($(origin O), command line)
 	dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
 	ABSOLUTE_O := $(shell cd $(O) ; pwd)
-	OUTPUT := $(ABSOLUTE_O)/
+	OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/)
 	COMMAND_O := O=$(ABSOLUTE_O)
+ifeq ($(objtree),)
+	objtree := $(O)
+endif
 endif
 
 ifneq ($(OUTPUT),)
@@ -47,9 +50,10 @@ endif
 # Call by doing: $(call descend,directory[,target])
 #
 descend = \
-	$(QUIET_SUBDIR0)$(1) $(QUIET_SUBDIR1) $(2)
+	+mkdir -p $(OUTPUT)$(1) && \
+	$(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1)
 
-QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
+QUIET_SUBDIR0  = +$(MAKE) $(COMMAND_O) -C # space to separate -C and subdir
 QUIET_SUBDIR1  =
 
 ifneq ($(findstring $(MAKEFLAGS),s),s)
@@ -64,5 +68,10 @@ ifndef V
 			 $(MAKE) $(PRINT_DIR) -C $$subdir
 	QUIET_FLEX     = @echo '   ' FLEX $@;
 	QUIET_BISON    = @echo '   ' BISON $@;
+
+	descend = \
+		@echo '   ' DESCEND $(1); \
+		mkdir -p $(OUTPUT)$(1) && \
+		$(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1)
 endif
 endif

  parent reply	other threads:[~2012-12-01 11:16 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-08 12:51 [GIT PULL] UAPI: perf fixes David Howells
2012-11-12 20:23 ` Josh Boyer
2012-11-13 11:11   ` David Howells
2012-11-13 11:12     ` David Howells
2012-11-13 11:12       ` David Howells
2012-11-13 12:51       ` Josh Boyer
2012-11-13 15:24   ` David Howells
2012-11-13 15:42     ` Josh Boyer
2012-11-13 16:34       ` Arnaldo Carvalho de Melo
2012-11-15  2:23         ` Xiao Guangrong
2012-11-15  6:17         ` [PATCH 1/2] perf kvm: rename perf_kvm to perf_kvm_stat Xiao Guangrong
2012-11-15  6:17           ` [PATCH 2/2] perf kvm: fix building perf kvm on PowerPC Xiao Guangrong
2012-11-15 10:46             ` David Howells
2012-11-19  8:19               ` Xiao Guangrong
2012-11-19 22:22                 ` David Howells
2012-12-01 11:21                 ` [tip:perf/urgent] perf kvm: Fix building perf kvm on non x86 arches tip-bot for Xiao Guangrong
2012-12-01 11:20           ` [tip:perf/urgent] perf kvm: Rename perf_kvm to perf_kvm_stat tip-bot for Xiao Guangrong
2012-12-01 11:15 ` [tip:perf/urgent] tools: Define a Makefile function to do subdir processing tip-bot for David Howells
2012-12-01 11:16 ` tip-bot for David Howells [this message]
2012-12-08 15:07 ` [tip:perf/core] " tip-bot for David Howells
2012-12-08 15:08 ` [tip:perf/core] tools: Honour the O= flag when tool build called from a higher Makefile tip-bot for David Howells

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=tip-bf35182ffcd00d8b36d56210ffdac110e5624d7d@git.kernel.org \
    --to=dhowells@redhat.com \
    --cc=acme@redhat.com \
    --cc=bp@amd64.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@gmail.com \
    --cc=paulus@samba.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.