From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: qemu-trivial@nongnu.org
Subject: Re: [Qemu-trivial] [PATCH] Remove config-devices.mak on 'make clean'
Date: Tue, 17 May 2016 13:34:09 +0200 [thread overview]
Message-ID: <573B01B1.5050008@redhat.com> (raw)
In-Reply-To: <1463484451-22979-1-git-send-email-peter.maydell@linaro.org>
On 17/05/2016 13:27, Peter Maydell wrote:
> Our dependency mechanism works like this:
> * on first build there is neither a .o nor a .d
> * we create the .d as a side effect of creating the .o
> * for rebuilds we know when we need to update the .o,
> which also updates the .d
>
> This system requires that you're never in a situation where there is
> a .o file but no .d (because then we will never realise we need to
> build the .d, and we will not have the dependency information about
> when to rebuild the .o).
>
> This is working fine for our object files, but we also try to use it
> for $TARGET/config-devices.mak (where the dependency file is
> in $TARGET-config-devices.mak.d). Unfortunately "make clean" doesn't
> remove config-devices.mak, which means that it puts us in the
> forbidden situation of "object file exists but not its .d file".
> This in turn means that we will fail to notice when we need to rebuild:
> mkdir build/depbug
> (cd build/depbug && '../../configure')
> make -C build/depbug -j8
> make -C build/depbug clean
> echo "CONFIG_CANARY = y" >> default-configs/arm-softmmu.mak
> make -C build/depbug
> grep CANARY build/depbug/aarch64-softmmu/config-devices.mak
>
> The CANARY token should show up in config-devices.mak but does not.
>
> Fix this bug by making "make clean" delete the config-devices.mak files.
> config-all-devices.mak doesn't have the same problem since it has
> no .d file, but delete it too, since it is created by "make" and
> logically should be removed by "make clean".
>
> (Note that it is important not to remove config-devices.mak until
> after we have recursively run 'make clean' in the subdirectories.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Makefile | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Makefile b/Makefile
> index 1d076a9..a5d7e62 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -356,6 +356,7 @@ clean:
> if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
> rm -f $$d/qemu-options.def; \
> done
> + rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
>
> VERSION ?= $(shell cat VERSION)
>
>
Queued, thanks (and nice writeup too!)
Paolo
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: qemu-trivial@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] Remove config-devices.mak on 'make clean'
Date: Tue, 17 May 2016 13:34:09 +0200 [thread overview]
Message-ID: <573B01B1.5050008@redhat.com> (raw)
In-Reply-To: <1463484451-22979-1-git-send-email-peter.maydell@linaro.org>
On 17/05/2016 13:27, Peter Maydell wrote:
> Our dependency mechanism works like this:
> * on first build there is neither a .o nor a .d
> * we create the .d as a side effect of creating the .o
> * for rebuilds we know when we need to update the .o,
> which also updates the .d
>
> This system requires that you're never in a situation where there is
> a .o file but no .d (because then we will never realise we need to
> build the .d, and we will not have the dependency information about
> when to rebuild the .o).
>
> This is working fine for our object files, but we also try to use it
> for $TARGET/config-devices.mak (where the dependency file is
> in $TARGET-config-devices.mak.d). Unfortunately "make clean" doesn't
> remove config-devices.mak, which means that it puts us in the
> forbidden situation of "object file exists but not its .d file".
> This in turn means that we will fail to notice when we need to rebuild:
> mkdir build/depbug
> (cd build/depbug && '../../configure')
> make -C build/depbug -j8
> make -C build/depbug clean
> echo "CONFIG_CANARY = y" >> default-configs/arm-softmmu.mak
> make -C build/depbug
> grep CANARY build/depbug/aarch64-softmmu/config-devices.mak
>
> The CANARY token should show up in config-devices.mak but does not.
>
> Fix this bug by making "make clean" delete the config-devices.mak files.
> config-all-devices.mak doesn't have the same problem since it has
> no .d file, but delete it too, since it is created by "make" and
> logically should be removed by "make clean".
>
> (Note that it is important not to remove config-devices.mak until
> after we have recursively run 'make clean' in the subdirectories.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Makefile | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Makefile b/Makefile
> index 1d076a9..a5d7e62 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -356,6 +356,7 @@ clean:
> if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
> rm -f $$d/qemu-options.def; \
> done
> + rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
>
> VERSION ?= $(shell cat VERSION)
>
>
Queued, thanks (and nice writeup too!)
Paolo
next prev parent reply other threads:[~2016-05-17 11:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-17 11:27 [Qemu-trivial] [PATCH] Remove config-devices.mak on 'make clean' Peter Maydell
2016-05-17 11:27 ` [Qemu-devel] " Peter Maydell
2016-05-17 11:34 ` Paolo Bonzini [this message]
2016-05-17 11:34 ` Paolo Bonzini
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=573B01B1.5050008@redhat.com \
--to=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.