[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [patch] conditionalize building ACPI (was [RFC] build configuration)



On Wednesday 15 March 2006 12:18, Keir Fraser wrote:
> Well, let's start by fixing your current need, which is for the 
> non-optional config parameters, and see how that pans out. Some general 
> cleaning up of the build system would be good and can probably be done 
> by a set of consecutive patches rather than a 'big bang' approach.

This patch fixes part of my current need: PPC doesn't want to build ACPI. Two 
basic problems: one was xen/drivers/Makefile; the other was ALL_OBJS in 
xen/Rules.mk.

While I was setting up ALL_OBJS-y for ACPI, I went ahead and converted the 
other users, and did the same for CFLAGS (though I really didn't have to). 
Note that this patch slightly changes the old behavior of "debug" and 
"verbose" in CFLAGS: before, if debug=y, verbose=y was set for you. Now you 
only get what you explicitly enable. Also, perf_array can be used outside of 
perfc. I don't consider either of these changes to be problematic, since 
whoever is building is already changing the config options.

Long-term, I think the following are goals to work towards:
- Every Makefile should deal only with objects in its own directory and below. 
ALL_OBJS currently violates this principle: arch/*/Makefile reaches up and 
does the final link with objects all over the tree. Instead, we can have each 
arch tell the toplevel Makefile (via arch/*/Rules.mk) how to produce the 
final image.
- Don't require explicit includes in each Makefile (see drivers/Makefile 
below). This is possible but takes some thinking; in particular, you wouldn't 
recurse into subdirectories, but rather re-invoke make at the top level with 
a different directory name as an argument. This is just a convenience thing, 
so not a high priority.
- The new drivers/Makefile below does the nice make thing that handles errors 
and parallel builds properly. This should be expanded to include all other 
Makefiles (e.g. the "clean" and "$(TARGET)" targets in xen/Makefile).
- Object files should be handled in the same way (e.g. OBJ-y). First they'll 
need to be explicitly listed, as you noted.

I did investigate a few of these, but since I don't really need them, I 
started with this patch only. If this works for you, please apply.

-- 
Hollis Blanchard
IBM Linux Technology Center


Conditionalize building the Xen ACPI driver.
Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx>

diff -r df0ad1c46f10 xen/Rules.mk
--- a/xen/Rules.mk      Thu Mar  9 16:03:23 2006 +0100
+++ b/xen/Rules.mk      Fri Mar 17 19:05:32 2006 -0600
@@ -33,39 +33,30 @@ OBJS    := $(patsubst %.S,%.o,$(S_SRCS))
 OBJS    := $(patsubst %.S,%.o,$(S_SRCS))
 OBJS    += $(patsubst %.c,%.o,$(C_SRCS))
 
-# Note that link order matters!
-ALL_OBJS := $(BASEDIR)/common/common.o
-ALL_OBJS += $(BASEDIR)/drivers/char/driver.o
-ALL_OBJS += $(BASEDIR)/drivers/acpi/driver.o
-ifeq ($(ACM_SECURITY),y)
-ALL_OBJS += $(BASEDIR)/acm/acm.o
-CFLAGS += -DACM_SECURITY
-endif
-ALL_OBJS += $(BASEDIR)/arch/$(TARGET_ARCH)/arch.o
-
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 
-CFLAGS += -g -D__XEN__
+# Note that link order matters!
+ALL_OBJS-y := $(BASEDIR)/common/common.o
+ALL_OBJS-y += $(BASEDIR)/drivers/char/driver.o
+ALL_OBJS-$(HAS_ACPI) += $(BASEDIR)/drivers/acpi/driver.o
+ALL_OBJS-$(ACM_SECURITY) += $(BASEDIR)/acm/acm.o
+ALL_OBJS-y += $(BASEDIR)/arch/$(TARGET_ARCH)/arch.o
+ALL_OBJS := $(ALL_OBJS-y)
 
-ifneq ($(debug),y)
-CFLAGS += -DNDEBUG
-ifeq ($(verbose),y)
-CFLAGS += -DVERBOSE
-endif
-else
-CFLAGS += -DVERBOSE
-endif
+flip_y := n
+flip_n := y
+flip_ := y
+flipyn = $(flip_$(1))
 
-ifeq ($(crash_debug),y)
-CFLAGS += -DCRASH_DEBUG
-endif
-
-ifeq ($(perfc),y)
-CFLAGS += -DPERF_COUNTERS
-ifeq ($(perfc_arrays),y)
-CFLAGS += -DPERF_ARRAYS
-endif
-endif
+__CFLAGS := $(CFLAGS)
+CFLAGS-y += -g -D__XEN__
+CFLAGS-$(call flipyn,$(debug)) += -DNDEBUG
+CFLAGS-$(ACM_SECURITY) += -DACM_SECURITY
+CFLAGS-$(verbose) += -DVERBOSE
+CFLAGS-$(crash_debug) += -DCRASH_DEBUG
+CFLAGS-$(perfc) += -DPERF_COUNTERS
+CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS
+CFLAGS := $(__CFLAGS) $(CFLAGS-y)
 
 CFLAGS := $(strip $(CFLAGS))
 
diff -r df0ad1c46f10 xen/arch/ia64/Rules.mk
--- a/xen/arch/ia64/Rules.mk    Thu Mar  9 16:03:23 2006 +0100
+++ b/xen/arch/ia64/Rules.mk    Fri Mar 17 19:05:32 2006 -0600
@@ -1,6 +1,7 @@
 ########################################
 # ia64-specific definitions
 
+HAS_ACPI := y
 VALIDATE_VT    ?= n
 ifneq ($(COMPILE_ARCH),$(TARGET_ARCH))
 CROSS_COMPILE ?= /usr/local/sp_env/v2.2.5/i686/bin/ia64-unknown-linux-
diff -r df0ad1c46f10 xen/arch/x86/Rules.mk
--- a/xen/arch/x86/Rules.mk     Thu Mar  9 16:03:23 2006 +0100
+++ b/xen/arch/x86/Rules.mk     Fri Mar 17 19:05:32 2006 -0600
@@ -1,5 +1,7 @@
 ########################################
 # x86-specific definitions
+
+HAS_ACPI := y
 
 #
 # If you change any of these configuration options then you must
diff -r df0ad1c46f10 xen/drivers/Makefile
--- a/xen/drivers/Makefile      Thu Mar  9 16:03:23 2006 +0100
+++ b/xen/drivers/Makefile      Fri Mar 17 19:05:32 2006 -0600
@@ -1,8 +1,6 @@
+include $(BASEDIR)/Rules.mk
 
-default:
-       $(MAKE) -C char
-       $(MAKE) -C acpi
+subdirs-y := char/
+subdirs-$(HAS_ACPI) += acpi/
 
-clean:
-       $(MAKE) -C char clean
-       $(MAKE) -C acpi clean
+include $(BASEDIR)/Post.mk
diff -r df0ad1c46f10 xen/Post.mk
--- /dev/null   Thu Jan  1 00:00:00 1970 +0000
+++ b/xen/Post.mk       Fri Mar 17 19:05:32 2006 -0600
@@ -0,0 +1,15 @@
+
+subdirs-all := $(subdirs-y) $(subdirs-n)
+
+default: $(subdirs-y)
+
+.PHONY: FORCE
+FORCE:
+
+%/: FORCE
+       $(MAKE) -C $*
+
+clean: $(addprefix _clean_, $(subdirs-all))
+_clean_%/: FORCE
+       $(MAKE) -C $* clean
+

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.