[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 03/25] build: add rules for nesting
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 03/25] build: add rules for nesting |
Date: |
Wed, 6 Jun 2012 08:36:10 +0200 |
This adds the 'magic' rules that take care of subdirectories.
The subdirectory makefiles in the source tree are not complete; they
only define some variables (listed in nested-vars) according to the
configuration.
The magic rules descend into subdirectory makefiles and gather the
evaluated values of those variables. The values from all subdirectories
are joined together, each prefixed with the subdirectory name, and used
by the "real" makefiles.
Signed-off-by: Paolo Bonzini <address@hidden>
---
rules.mak | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/rules.mak b/rules.mak
index efef6f2..f65283c 100644
--- a/rules.mak
+++ b/rules.mak
@@ -73,3 +73,42 @@ TRACETOOL=$(PYTHON) $(SRC_PATH)/scripts/tracetool.py
# will delete the target of a rule if commands exit with a nonzero exit status
.DELETE_ON_ERROR:
+
+# magic to descend into other directories
+
+obj := .
+old-nested-dirs :=
+
+define push-var
+$(eval save-$2-$1 = $(value $1))
+$(eval $1 :=)
+endef
+
+define pop-var
+$(eval subdir-$2-$1 := $(if $(filter $2,$(save-$2-$1)),$(addprefix $2,$($1))))
+$(eval $1 = $(value save-$2-$1) $$(subdir-$2-$1))
+$(eval save-$2-$1 :=)
+endef
+
+define unnest-dir
+$(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
+$(eval obj := $(obj)/$1)
+$(eval include $(SRC_PATH)/$1/Makefile.objs)
+$(eval obj := $(patsubst %/$1,%,$(obj)))
+$(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
+endef
+
+define unnest-vars-1
+$(eval nested-dirs := $(filter-out \
+ $(old-nested-dirs), \
+ $(sort $(foreach var,$(nested-vars), $(filter %/, $($(var)))))))
+$(if $(nested-dirs),
+ $(foreach dir,$(nested-dirs),$(call unnest-dir,$(patsubst %/,%,$(dir))))
+ $(eval old-nested-dirs := $(old-nested-dirs) $(nested-dirs))
+ $(call unnest-vars-1))
+endef
+
+define unnest-vars
+$(call unnest-vars-1)
+$(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
+endef
--
1.7.10.1
- [Qemu-devel] [PATCH v2 01/25] build: remove trace-nested-y, (continued)
- [Qemu-devel] [PATCH v2 01/25] build: remove trace-nested-y, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 23/25] build: limit usage of vpath, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 24/25] build: compile oslib-obj-y once, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 22/25] build: libcacard Makefile cleanups, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 25/25] build: do not create directories at configure time, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 09/25] build: put qom/ rules in a Makefile.objs file, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 21/25] build: move device tree to per-target Makefile, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 04/25] build: move *-user/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 19/25] build: convert libhw to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 08/25] build: move rules for nesting to Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 03/25] build: add rules for nesting,
Paolo Bonzini <=
- [Qemu-devel] [PATCH v2 13/25] build: move ui/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 07/25] build: move other target-*/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 02/25] build: do not sprinkle around GENERATED_HEADERS dependencies, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 05/25] build: move obj-TARGET-y variables to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 12/25] build: move fsdev/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 20/25] build: move per-target hw/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 15/25] build: move slirp/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 18/25] build: move target-independent hw/ objects to nested Makefiles, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 17/25] build: move qga/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06
- [Qemu-devel] [PATCH v2 16/25] build: move qapi/ objects to nested Makefile.objs, Paolo Bonzini, 2012/06/06