From: "Andreas Färber" <afaerber@suse.de>
To: Blue Swirl <blauwirbel@gmail.com>,
Anthony Liguori <anthony@codemonkey.ws>
Cc: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] make: automatically include dependencies in recursive subdir rules
Date: Sun, 17 Jun 2012 18:23:10 +0200 [thread overview]
Message-ID: <4FDE046E.3090407@suse.de> (raw)
In-Reply-To: <CAAu8pHss3=TRaWgD=V0-uO1GO9Rph8SdY3Yj2BsdJHMYecA0Cw@mail.gmail.com>
Am 17.06.2012 17:20, schrieb Blue Swirl:
> On Sun, Jun 17, 2012 at 2:57 PM, Anthony Liguori <aliguori@us.ibm.com> wrote:
>> I think I understand enough of what's going on in these rules to ensure this is
>> right. But I could certainly use a second or third opinion...
>>
>> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
>> ---
>> Makefile | 4 ++--
>> rules.mak | 1 +
>> 2 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/Makefile b/Makefile
>> index cce45fb..593bd9b 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -405,5 +405,5 @@ tar:
>> Makefile: $(GENERATED_HEADERS)
>>
>> # Include automatically generated dependency files
>> --include $(wildcard *.d audio/*.d slirp/*.d block/*.d net/*.d ui/*.d qapi/*.d)
>> --include $(wildcard qga/*.d hw/*.d hw/usb/*.d qom/*.d)
>> +# All subdir dependencies come automatically from our recursive subdir rules
>> +-include $(wildcard *.d)
>
> include $(wildcard *.d */*.d */*/*.d */*/*/*.d)
> ?
No. Due to our directory structure not all dependency files apply to
Makefile.
Anyway, the problem is that any such "fixed" wildcard expression still
silently fails when another level gets added. We've seen that simply no
one notices, and the resulting errors are weird and non-telling.
Therefore it was suggested to have some automatic way of deducing the
dependency files from .o files. (See the "Makefile: Fix dependencies for
QOM" thread.)
>> diff --git a/rules.mak b/rules.mak
>> index 4bc5e52..8c5ef95 100644
>> --- a/rules.mak
>> +++ b/rules.mak
>> @@ -94,6 +94,7 @@ define unnest-dir
>> $(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
>> $(eval obj := $(obj)/$1)
>> $(eval include $(SRC_PATH)/$1/Makefile.objs)
>> +$(eval -include $(wildcard $(SRC_PATH)/$1/*.d))
>
> This assumes a build in the source directory, s/SRC_PATH/BUILD_DIR/.
I've tested with just
+$(eval -include $(wildcard $1/*.d))
and did
$ touch include/qemu/object.h
>From what I see, using Anthony's original patch plus the modification
above (not the other ones), {i386,x86_64}-softmmu/hw/kvm/apic.o is still
not getting rebuilt despite its included hw/apic_internal.h depending on
sysbus.h -> qdev.h -> qemu/object.h.
They're being added via obj-$(CONFIG_KVM) += kvm/filename.o, not via the
recursive directory rule, so are not caught by Anthony's rule.
Maybe fix by some explicit Makefile-specific rule such as this?
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index d43f1df..1e8423a 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -11,3 +11,5 @@ obj-$(CONFIG_KVM) += kvm/clock.o kvm/apic.o
kvm/i8259.o kvm/ioapic.o kvm/i8254.o
obj-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
obj-y := $(addprefix ../,$(obj-y))
+
+-include $(wildcard ../kvm/*.d)
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
next prev parent reply other threads:[~2012-06-17 16:23 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-17 14:57 [Qemu-devel] [PATCH] make: automatically include dependencies in recursive subdir rules Anthony Liguori
2012-06-17 15:20 ` Blue Swirl
2012-06-17 16:23 ` Andreas Färber [this message]
2012-06-17 17:00 ` Andreas Färber
2012-06-17 18:46 ` Anthony Liguori
2012-06-17 19:53 ` Andreas Färber
2012-06-18 0:06 ` Anthony Liguori
2012-06-17 15:33 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FDE046E.3090407@suse.de \
--to=afaerber@suse.de \
--cc=anthony@codemonkey.ws \
--cc=blauwirbel@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).