build: Conditional build/clean/distclean targets on subsystems

Message ID 1367536673-26300-1-git-send-email-julien.grall@linaro.org
State Rejected
Headers show

Commit Message

Julien Grall May 2, 2013, 11:17 p.m.
The commit 3378685 "Add conditional build of subsystems to configure.ac"
allows the user to disable/enable some components of Xen. After this commit
some targets are still called on every subsystems.

For Xen on ARM, the makefile targets build, clean and distclean will failed.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
---
 Makefile |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 51 insertions(+), 6 deletions(-)

Comments

Jan Beulich May 3, 2013, 7:15 a.m. | #1
>>> On 03.05.13 at 01:17, Julien Grall <julien.grall@linaro.org> wrote:
> The commit 3378685 "Add conditional build of subsystems to configure.ac"
> allows the user to disable/enable some components of Xen. After this commit
> some targets are still called on every subsystems.

For build this is correct to do, but for any clean target it isn't - clean
should remove leftovers from earlier builds even if there was an
intermediate reconfigure.

> For Xen on ARM, the makefile targets build, clean and distclean will failed.

If they fail, this will need fixing elsewhere then.

Jan
Ian Campbell May 3, 2013, 8:43 a.m. | #2
On Fri, 2013-05-03 at 08:15 +0100, Jan Beulich wrote:
> >>> On 03.05.13 at 01:17, Julien Grall <julien.grall@linaro.org> wrote:
> > The commit 3378685 "Add conditional build of subsystems to configure.ac"
> > allows the user to disable/enable some components of Xen. After this commit
> > some targets are still called on every subsystems.
> 
> For build this is correct to do, but for any clean target it isn't - clean
> should remove leftovers from earlier builds even if there was an
> intermediate reconfigure.

Yes, I think so too.

> > For Xen on ARM, the makefile targets build, clean and distclean will failed.
> 
> If they fail, this will need fixing elsewhere then.

Part of the issue is that there are targets which are simply not ported
to  ARM and therefore are missing bits of infrastructure , e.g. mini-os
where one if the clean failures is lack of
extras/mini-os/arch/arm/arch.mk.

However I think it is wrong to tie the clean/distclean of these into the
configurey selection mechanism, i.e. mini-os should know that it only
support x86 (for the minute) and DTRT when called for ARM (which is
likely to be nothing much). Perhaps a stub
extras/mini-os/arch/arm/arch.mk is the answer?

The other case is the kernel distclean, which fails with 
        buildconfigs/mk.linux-2.6-common:32: buildconfigs/src.: No such file or directory
but that seems to fail on x86 too. Having disabled it by default so long
ago perhaps the time has come to simply remove this stuff? I don't know
if anyone is still using it -- the test system perhaps?

Or it could be fixed with the below, I think.

Ian.

8<---------------------

build: fix kernel build rules.

Rename mk.linux-2.6-common to common.linux-2.6 so that it does not get
included in the ALLKERNELS logic.

Specify XEN_LINUX_SOURCE for linux-2.6-native, looking at 414614d84e67
and todays linux-2.6-xen.mk I am guessing that hg-clone of the 2.6.18
tree is the expected method. To be honest I didn't even try it...

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
NB git diff -M style diff, includes the rename...

 .../{mk.linux-2.6-common => common.linux-2.6}      |    0
 buildconfigs/mk.linux-2.6                          |    2 +-
 buildconfigs/mk.linux-2.6-native                   |    3 ++-
 buildconfigs/mk.linux-2.6-pvops                    |    2 +-
 buildconfigs/mk.linux-2.6-tip-latest               |    2 +-
 buildconfigs/mk.linux-2.6-xen                      |    2 +-
 6 files changed, 6 insertions(+), 5 deletions(-)

Patch

diff --git a/Makefile b/Makefile
index 32efb70..2217c20 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,9 @@  all: dist
 SUBSYSTEMS?=xen kernels tools stubdom docs
 TARGS_DIST=$(patsubst %, dist-%, $(SUBSYSTEMS))
 TARGS_INSTALL=$(patsubst %, install-%, $(SUBSYSTEMS))
+TARGS_BUILD=$(patsubst %, install-%, $(SUBSYSTEMS))
+TARGS_CLEAN=$(patsubst %, clean-%, $(SUBSYSTEMS))
+TARGS_DISTCLEAN=$(patsubst %, distclean-%, $(SUBSYSTEMS))
 
 export XEN_ROOT=$(CURDIR)
 include Config.mk
@@ -23,15 +26,28 @@  include buildconfigs/Rules.mk
 install: $(TARGS_INSTALL)
 
 .PHONY: build
-build: kernels
+build: $(TARGS_BUILD)
+
+.PHONY: build-xen
+build-xen:
 	$(MAKE) -C xen build
+
+.PHONY: build-tools
+build-tools:
 	$(MAKE) -C tools build
+
+.PHONY: build-stubdom
 	$(MAKE) -C stubdom build
 ifeq (x86_64,$(XEN_TARGET_ARCH))
 	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom pv-grub
 endif
+
+.PHONY: build-docs
+build-docs:
 	$(MAKE) -C docs build
 
+build-kernels: kernels
+
 # The test target is for unit tests that can run without an installation.  Of
 # course, many tests require a machine running Xen itself, and these are
 # handled elsewhere.
@@ -146,30 +162,59 @@  debball: dist
 
 # clean doesn't do a kclean
 .PHONY: clean
-clean::
+clean:: $(TARGS_CLEAN)
+
+.PHONY: clean-xen
+clean-xen:
 	$(MAKE) -C xen clean
+
+.PHONY: clean-tools
+clean-tools:
 	$(MAKE) -C tools clean
+
+.PHONY: clean-stubdom
+clean-stubdom:
 	$(MAKE) -C stubdom crossclean
 ifeq (x86_64,$(XEN_TARGET_ARCH))
 	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom crossclean
 endif
+
+.PHONY: clean-docs
+clean-docs:
 	$(MAKE) -C docs clean
 
+clean-%:
+	@: # do nothing
+
 # clean, but blow away kernel build tree plus tarballs
 .PHONY: distclean
-distclean:
+distclean: $(TARGS_DISTCLEAN)
 	-rm config/Toplevel.mk
+	rm -rf dist patches/tmp
+	rm -rf patches/*/.makedep
+	rm -rf config.log config.status config.cache autom4te.cache
+
+.PHONY: distclean-xen
+distclean-xen:
 	$(MAKE) -C xen distclean
+
+.PHONY: distclean-tools
+tools-distclean:
 	$(MAKE) -C tools distclean
+
+.PHONY: distclean-stubdom
+distclean-stubdom:
 	$(MAKE) -C stubdom distclean
 ifeq (x86_64,$(XEN_TARGET_ARCH))
 	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom distclean
 endif
+
+.PHONY: distclean-docs
+distclean-docs:
 	$(MAKE) -C docs distclean
-	rm -rf dist patches/tmp
+
+distclean-kernels:
 	for i in $(ALLKERNELS) ; do $(MAKE) $$i-delete ; done
-	rm -rf patches/*/.makedep
-	rm -rf config.log config.status config.cache autom4te.cache
 
 # Linux name for GNU distclean
 .PHONY: mrproper