qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v14 2/8] make.rule: fix $(obj) to a real relativ


From: Fam Zheng
Subject: Re: [Qemu-devel] [PATCH v14 2/8] make.rule: fix $(obj) to a real relative path
Date: Tue, 12 Nov 2013 14:26:26 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0

On 2013年10月17日 22:57, Paolo Bonzini wrote:
Il 16/10/2013 05:26, Fam Zheng ha scritto:
Makefile.target includes rule.mak and unnested common-obj-y, then prefix
them with '../', this will ignore object specific QEMU_CFLAGS in subdir
Makefile.objs:

     $(obj)/curl.o: QEMU_CFLAGS += $(CURL_CFLAGS)

Because $(obj) here is './block', instead of '../block'. This doesn't
hurt compiling because we basically build all .o from top Makefile,
before entering Makefile.target, but it will affact arriving per-object
libs support.

The starting point of $(obj) is passed in as argument of unnest-vars, as
well as nested variables, so that different Makefiles can pass in a
right value.

Signed-off-by: Fam Zheng <address@hidden>
---
  Makefile        | 14 ++++++++++++++
  Makefile.objs   | 17 +----------------
  Makefile.target | 20 ++++++++++++++++----
  configure       |  1 +
  rules.mak       | 14 +++++++++-----
  5 files changed, 41 insertions(+), 25 deletions(-)

diff --git a/Makefile b/Makefile
index b15003f..94dae51 100644
--- a/Makefile
+++ b/Makefile
@@ -115,6 +115,16 @@ defconfig:

  ifneq ($(wildcard config-host.mak),)
  include $(SRC_PATH)/Makefile.objs
+endif
+
+dummy := $(call unnest-vars,, \
+                stub-obj-y \
+                util-obj-y \
+                qga-obj-y \
+                block-obj-y \
+                common-obj-y)
+
+ifneq ($(wildcard config-host.mak),)
  include $(SRC_PATH)/tests/Makefile
  endif
  ifeq ($(CONFIG_SMARTCARD_NSS),y)
@@ -123,6 +133,10 @@ endif

  all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all

+vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
+
+vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
+
  config-host.h: config-host.h-timestamp
  config-host.h-timestamp: config-host.mak
  qemu-options.def: $(SRC_PATH)/qemu-options.hx
diff --git a/Makefile.objs b/Makefile.objs
index 2b6c1fe..91235a6 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -41,7 +41,7 @@ libcacard-y += libcacard/vcardt.o
  # single QEMU executable should support all CPUs and machines.

  ifeq ($(CONFIG_SOFTMMU),y)
-common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/
+common-obj-y = blockdev.o blockdev-nbd.o block/
  common-obj-y += net/
  common-obj-y += readline.o
  common-obj-y += qdev-monitor.o device-hotplug.o
@@ -110,18 +110,3 @@ version-lobj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.lo
  # by libqemuutil.a.  These should be moved to a separate .json schema.
  qga-obj-y = qga/ qapi-types.o qapi-visit.o
  qga-vss-dll-obj-y = qga/
-
-vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
-
-vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
-
-QEMU_CFLAGS+=$(GLIB_CFLAGS)
-
-nested-vars += \
-       stub-obj-y \
-       util-obj-y \
-       qga-obj-y \
-       qga-vss-dll-obj-y \
-       block-obj-y \
-       common-obj-y
-dummy := $(call unnest-vars)
diff --git a/Makefile.target b/Makefile.target
index 9a49852..fb3a970 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -143,13 +143,25 @@ endif # CONFIG_SOFTMMU
  # Workaround for http://gcc.gnu.org/PR55489, see configure.
  %/translate.o: QEMU_CFLAGS += $(TRANSLATE_OPT_CFLAGS)

-nested-vars += obj-y
+dummy := $(call unnest-vars,,obj-y)

-# This resolves all nested paths, so it must come last
+# we are making another call to unnest-vars with different vars, protect obj-y,
+# it can be overriden in subdir Makefile.objs
+obj-y-save := $(obj-y)
+
+block-obj-y :=
+common-obj-y :=
  include $(SRC_PATH)/Makefile.objs
+dummy := $(call unnest-vars,..,block-obj-y common-obj-y)
+
+# Now restore obj-y
+obj-y := $(obj-y-save)
+
+all-obj-y = $(obj-y) $(common-obj-y)

-all-obj-y = $(obj-y)
-all-obj-y += $(addprefix ../, $(common-obj-y))
+ifdef CONFIG_SOFTMMU
+all-obj-y += $(block-obj-y)
+endif

Just:

all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y)


Paolo. I think this is the only comment on this series. Do you want me to respin?

Thanks,
Fam

  ifndef CONFIG_HAIKU
  LIBS+=-lm
diff --git a/configure b/configure
index 57ee62a..3381264 100755
--- a/configure
+++ b/configure
@@ -2283,6 +2283,7 @@ fi
  if $pkg_config --atleast-version=$glib_req_ver gthread-2.0; then
      glib_cflags=`$pkg_config --cflags gthread-2.0`
      glib_libs=`$pkg_config --libs gthread-2.0`
+    CFLAGS="$glib_cflags $CFLAGS"
      LIBS="$glib_libs $LIBS"
      libs_qga="$glib_libs $libs_qga"
  else
diff --git a/rules.mak b/rules.mak
index abc2e84..01e552e 100644
--- a/rules.mak
+++ b/rules.mak
@@ -110,9 +110,6 @@ clean: clean-timestamp

  # magic to descend into other directories

-obj := .
-old-nested-dirs :=
-
  define push-var
  $(eval save-$2-$1 = $(value $1))
  $(eval $1 :=)
@@ -126,9 +123,11 @@ endef

  define unnest-dir
  $(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
-$(eval obj := $(obj)/$1)
+$(eval obj-parent-$1 := $(obj))
+$(eval obj := $(if $(obj),$(obj)/$1,$1))
  $(eval include $(SRC_PATH)/$1/Makefile.objs)
-$(eval obj := $(patsubst %/$1,%,$(obj)))
+$(eval obj := $(obj-parent-$1))
+$(eval obj-parent-$1 := )
  $(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
  endef

@@ -143,7 +142,12 @@ $(if $(nested-dirs),
  endef

  define unnest-vars
+$(eval obj := $1)
+$(eval nested-vars := $2)
+$(eval old-nested-dirs := )
  $(call unnest-vars-1)
+$(if $1,$(foreach v,$(nested-vars),$(eval \
+       $v := $(addprefix $1/,$($v)))))
  $(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
  $(shell mkdir -p $(sort $(foreach var,$(nested-vars),$(dir $($(var))))))
  $(foreach var,$(nested-vars), $(eval \







reply via email to

[Prev in Thread] Current Thread [Next in Thread]