qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH] qapi: Incorrect attempt to fix building with MC146818RTC


From: Paolo Bonzini
Subject: Re: [RFC PATCH] qapi: Incorrect attempt to fix building with MC146818RTC=n
Date: Sat, 18 Jan 2020 21:47:52 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1

On 13/01/20 15:01, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <address@hidden> writes:
> 
>> When configured with --without-default-devices and setting
>> MC146818RTC=n, the build fails:
>>
>>     LINK    x86_64-softmmu/qemu-system-x86_64
>>   /usr/bin/ld: qapi/qapi-commands-misc-target.o: in function 
>> `qmp_marshal_rtc_reset_reinjection':
>>   qapi/qapi-commands-misc-target.c:46: undefined reference to 
>> `qmp_rtc_reset_reinjection'
>>   /usr/bin/ld: qapi/qapi-commands-misc-target.c:46: undefined reference to 
>> `qmp_rtc_reset_reinjection'
>>   collect2: error: ld returned 1 exit status
>>   make[1]: *** [Makefile:206: qemu-system-x86_64] Error 1
>>   make: *** [Makefile:483: x86_64-softmmu/all] Error 2
>>
>> This patch tries to fix this, but this is incorrect because QAPI
>> scripts only provide TARGET definitions, so with MC146818RTC=y we
>> get:
>>
>>   hw/rtc/mc146818rtc.c:113:6: error: no previous prototype for 
>> ‘qmp_rtc_reset_reinjection’ [-Werror=missing-prototypes]
>>     113 | void qmp_rtc_reset_reinjection(Error **errp)
>>         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
>>   cc1: all warnings being treated as errors
>>   make[1]: *** [rules.mak:69: hw/rtc/mc146818rtc.o] Error 1
>>
>> Any idea? :)
>>
>> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
>> ---
>>  qapi/misc-target.json | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/qapi/misc-target.json b/qapi/misc-target.json
>> index a00fd821eb..8e49c113d1 100644
>> --- a/qapi/misc-target.json
>> +++ b/qapi/misc-target.json
>> @@ -41,7 +41,7 @@
>>  #
>>  ##
>>  { 'command': 'rtc-reset-reinjection',
>> -  'if': 'defined(TARGET_I386)' }
>> +  'if': 'defined(TARGET_I386) && defined(CONFIG_MC146818RTC)' }
>>  
>>  
>>  ##
> 
> The generated qapi-commands-misc-target.h duly has
> 
>     #if defined(TARGET_I386) && defined(CONFIG_MC146818RTC)
>     void qmp_rtc_reset_reinjection(Error **errp);
>     void qmp_marshal_rtc_reset_reinjection(QDict *args, QObject **ret, Error 
> **errp);
>     #endif /* defined(TARGET_I386) && defined(CONFIG_MC146818RTC) */
> 
> mc146818rtc.c includes it.  But since it doesn't include
> config-devices.h, CONFIG_MC146818RTC remains undefined, and the
> prototype gets suppressed.
> 
> Crude fix: make mc146818rtc.c #include "config-devices.h".

Can we modify the code generator to leave out the #if from the header,
and only include it in the .c file?  An extra prototype is harmless.

Paolo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]