From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57867) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VJdwX-0003jV-I6 for qemu-devel@nongnu.org; Wed, 11 Sep 2013 02:30:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VJdwS-0004fg-6y for qemu-devel@nongnu.org; Wed, 11 Sep 2013 02:30:25 -0400 Received: from mail-ee0-x22c.google.com ([2a00:1450:4013:c00::22c]:59861) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VJdwR-0004fT-Vh for qemu-devel@nongnu.org; Wed, 11 Sep 2013 02:30:20 -0400 Received: by mail-ee0-f44.google.com with SMTP id b47so4389513eek.31 for ; Tue, 10 Sep 2013 23:30:19 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <52300E01.2050400@redhat.com> Date: Wed, 11 Sep 2013 08:30:25 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1378877909-28518-1-git-send-email-famz@redhat.com> <1378877909-28518-2-git-send-email-famz@redhat.com> In-Reply-To: <1378877909-28518-2-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH v5 1/6] make.rule: fix $(obj) to a real relative path List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: peter.maydell@linaro.org, mjt@tls.msk.ru, qemu-devel@nongnu.org, stefanha@redhat.com, vilanova@ac.upc.edu, rth@twiddle.net Il 11/09/2013 07:38, 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 > --- > Makefile | 16 +++++++++++++++- > Makefile.objs | 16 +--------------- > Makefile.target | 16 +++++++++++++--- > configure | 1 + > rules.mak | 12 +++++++----- > tests/Makefile | 2 ++ > 6 files changed, 39 insertions(+), 24 deletions(-) Just two questions... > diff --git a/Makefile.target b/Makefile.target > index 9a49852..1d92523 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -143,13 +143,23 @@ 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) > -all-obj-y += $(addprefix ../, $(common-obj-y)) > +all-obj-y += $(addprefix ../, $(common-obj-y) $(block-obj-y)) Why is addprefix still needed? > > ifndef CONFIG_HAIKU > LIBS+=-lm > diff --git a/configure b/configure > index e989609..cc3cd4d 100755 > --- a/configure > +++ b/configure > @@ -2251,6 +2251,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/tests/Makefile b/tests/Makefile > index baba9e9..1b4048c 100644 > --- a/tests/Makefile > +++ b/tests/Makefile > @@ -110,6 +110,8 @@ test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o > $(test-obj-y): QEMU_INCLUDES += -Itests > QEMU_CFLAGS += -I$(SRC_PATH)/tests > > +dummy := $(call unnest-vars,..,block-obj-y) > + And why is this needed, since tests/Makefile is included from the top directory? Paolo > tests/test-x86-cpuid.o: QEMU_INCLUDES += -I$(SRC_PATH)/target-i386 > > tests/check-qint$(EXESUF): tests/check-qint.o libqemuutil.a >