[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Makefile: Don't build generated headers before
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH] Makefile: Don't build generated headers before Makefile is reread |
Date: |
Mon, 30 Jun 2014 13:13:21 +0100 |
On 30 June 2014 13:09, Paolo Bonzini <address@hidden> 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 <address@hidden>
>> ---
>> 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 <address@hidden>
Do you mean "...and therefore should not be listed on the
RHS of this dependency" ?
thanks
-- PMM