On 30 June 2014 13:09, Paolo Bonzini <pbonz...@redhat.com> wrote: > 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 <peter.mayd...@linaro.org> >> --- >> 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 <pbonz...@redhat.com>
Do you mean "...and therefore should not be listed on the RHS of this dependency" ? thanks -- PMM