From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34824) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1aP5-0004Ij-1a for qemu-devel@nongnu.org; Mon, 30 Jun 2014 08:09:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X1aP0-0001ZV-7m for qemu-devel@nongnu.org; Mon, 30 Jun 2014 08:09:47 -0400 Received: from mx1.redhat.com ([209.132.183.28]:28511) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1aOz-0001ZH-W4 for qemu-devel@nongnu.org; Mon, 30 Jun 2014 08:09:42 -0400 Message-ID: <53B15381.7060308@redhat.com> Date: Mon, 30 Jun 2014 14:09:37 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1403974776-23966-1-git-send-email-peter.maydell@linaro.org> In-Reply-To: <1403974776-23966-1-git-send-email-peter.maydell@linaro.org> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Makefile: Don't build generated headers before Makefile is reread List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , qemu-devel@nongnu.org Cc: Stefan Hajnoczi Il 28/06/2014 18:59, Peter Maydell ha scritto: > Having a direct dependency > Makefile: $(GENERATED_HEADERS) > can result in not-from-clean builds failing sometimes, because it means > that when Make does its "is any makefile or include out of date and > needing a rebuild?" check, as well as possibly running configure (to > update config-host.mak) it will also rebuild GENERATED_HEADERS under > the "old" config-host.mak regime. If the makefile rules for rebuilding > the generated headers have changed in a way that means they're not > compatible with the old config-host.mak variable names, the build will > fail. Even if it does work, it's wasted effort since we'll need to > rebuild them with the right config-host.mak settings immediately. > > Instead, make the generated headers depend on config-host.mak > and config-target.mak. This means we'll definitely rebuild them > if the configuration changes, but it will be done after Make > reloads its makefiles and includes so will happen with the > correct set of config-host.mak settings. > > We rely on the various .o files having correct autogenerated > dependency rules to cause the generated headers to be generated > as and when they are needed. > > Signed-off-by: Peter Maydell > --- > The specific example of this is the change from CONFIG_TRACE_BACKEND > to CONFIG_TRACE_BACKENDS, which I am still hitting on a pretty > regular basis. This patch fixes that problem and I don't think it > has any unpleasant side effects; Paolo, have I missed anything? > > Makefile | 8 +++----- > Makefile.target | 2 +- > 2 files changed, 4 insertions(+), 6 deletions(-) > > diff --git a/Makefile b/Makefile > index 145adb6..dca33b4 100644 > --- a/Makefile > +++ b/Makefile > @@ -546,11 +546,9 @@ ifdef SIGNCODE > endif # SIGNCODE > endif # CONFIG_WIN > > -# Add a dependency on the generated files, so that they are always > -# rebuilt before other object files > -ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail)) > -Makefile: $(GENERATED_HEADERS) > -endif > +# Make the generated files depend on config-host.mak so that if > +# the configuration settings change we will rebuild them > +$(GENERATED_HEADERS): config-host.mak > > # Include automatically generated dependency files > # Dependencies in Makefile.objs files come from our recursive subdir rules > diff --git a/Makefile.target b/Makefile.target > index 6089d29..ea8614a 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -198,4 +198,4 @@ ifdef CONFIG_TRACE_SYSTEMTAP > endif > > GENERATED_HEADERS += config-target.h > -Makefile: $(GENERATED_HEADERS) > +$(GENERATED_HEADERS): config-target.mak config-devices.mak config-devices.mak is not reflected in any C header file. Apart from this, Reviewed-by: Paolo Bonzini Paolo