* Meson can't recover from deletion of generated QAPI file(s)
@ 2020-09-09 12:37 Markus Armbruster
2020-09-09 13:06 ` Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Markus Armbruster @ 2020-09-09 12:37 UTC (permalink / raw)
To: Paolo Bonzini, Marc-André Lureau; +Cc: qemu-devel
Watch this:
$ rm qapi/qapi-types-error.h
$ make
Generating qemu-version.h with a meson_exe.py custom command
Compiling C object qom/libqom.fa.p/object_interfaces.c.o
In file included from ../qom/object_interfaces.c:4:
/work/armbru/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
275 | #include "qapi/qapi-types-error.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o] Error 1
To recover, I have to run qapi-gen.py manually and exactly right, or
blow away the build tree and start over.
The old build system did what a build system should: it remade the files
that are missing or out of date.
I'm still too clueless about Meson to debug this, but I hope I can learn
from watching you fix it.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 12:37 Meson can't recover from deletion of generated QAPI file(s) Markus Armbruster
@ 2020-09-09 13:06 ` Philippe Mathieu-Daudé
2020-09-09 13:35 ` Claudio Fontana
2020-09-09 14:00 ` Marc-André Lureau
2020-09-09 14:34 ` Paolo Bonzini
2 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-09 13:06 UTC (permalink / raw)
To: Markus Armbruster, Paolo Bonzini, Marc-André Lureau
Cc: qemu-devel, Claudio Fontana
On 9/9/20 2:37 PM, Markus Armbruster wrote:
> Watch this:
>
> $ rm qapi/qapi-types-error.h
> $ make
> Generating qemu-version.h with a meson_exe.py custom command
> Compiling C object qom/libqom.fa.p/object_interfaces.c.o
> In file included from ../qom/object_interfaces.c:4:
> /work/armbru/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
> 275 | #include "qapi/qapi-types-error.h"
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> compilation terminated.
> make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o] Error 1
>
> To recover, I have to run qapi-gen.py manually and exactly right, or
> blow away the build tree and start over.
>
> The old build system did what a build system should: it remade the files
> that are missing or out of date.
>
> I'm still too clueless about Meson to debug this, but I hope I can learn
> from watching you fix it.
Maybe related:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg736135.html
and later:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg738777.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 13:06 ` Philippe Mathieu-Daudé
@ 2020-09-09 13:35 ` Claudio Fontana
2020-09-09 14:35 ` Paolo Bonzini
0 siblings, 1 reply; 11+ messages in thread
From: Claudio Fontana @ 2020-09-09 13:35 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau
Cc: qemu-devel
On 9/9/20 3:06 PM, Philippe Mathieu-Daudé wrote:
> On 9/9/20 2:37 PM, Markus Armbruster wrote:
>> Watch this:
>>
>> $ rm qapi/qapi-types-error.h
>> $ make
>> Generating qemu-version.h with a meson_exe.py custom command
>> Compiling C object qom/libqom.fa.p/object_interfaces.c.o
>> In file included from ../qom/object_interfaces.c:4:
>> /work/armbru/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
>> 275 | #include "qapi/qapi-types-error.h"
>> | ^~~~~~~~~~~~~~~~~~~~~~~~~
>> compilation terminated.
>> make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o] Error 1
>>
>> To recover, I have to run qapi-gen.py manually and exactly right, or
>> blow away the build tree and start over.
>>
>> The old build system did what a build system should: it remade the files
>> that are missing or out of date.
>>
>> I'm still too clueless about Meson to debug this, but I hope I can learn
>> from watching you fix it.
>
> Maybe related:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg736135.html
> and later:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg738777.html
>
My use case is this:
my simple build script uses git rebase -x to run a build for each commit of a series, and fails if at any point one of the commits breaks the build or tests.
FILE ~/bin/check-build.sh:
#! /bin/bash
git rebase $1 -x build.sh
FILE ~/bin/build.sh:
#! /bin/bash
set -x
set -e
rm -fr build-tcg
mkdir build-tcg
cd build-tcg
../configure --enable-tcg --disable-kvm --disable-hax
make -j120
make -j120 check
cd ..
rm -fr build-nontcg
mkdir build-nontcg
cd build-nontcg
../configure --disable-tcg --enable-kvm --enable-hax
make -j120
make -j120 check
cd ..
rm -fr build-all
mkdir build-all
cd build-all
../configure --enable-tcg --enable-kvm --enable-hax
make -j120
make -j120 check
cd ..
--------------------
In case it helps with reproducing the problem.
Ciao,
Claudio
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 12:37 Meson can't recover from deletion of generated QAPI file(s) Markus Armbruster
2020-09-09 13:06 ` Philippe Mathieu-Daudé
@ 2020-09-09 14:00 ` Marc-André Lureau
2020-09-09 14:34 ` Paolo Bonzini
2 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2020-09-09 14:00 UTC (permalink / raw)
To: Markus Armbruster; +Cc: Paolo Bonzini, QEMU
[-- Attachment #1: Type: text/plain, Size: 1165 bytes --]
Hi
On Wed, Sep 9, 2020 at 4:37 PM Markus Armbruster <armbru@redhat.com> wrote:
> Watch this:
>
> $ rm qapi/qapi-types-error.h
> $ make
> Generating qemu-version.h with a meson_exe.py custom command
> Compiling C object qom/libqom.fa.p/object_interfaces.c.o
> In file included from ../qom/object_interfaces.c:4:
> /work/armbru/qemu/include/qapi/error.h:275:10: fatal error:
> qapi/qapi-types-error.h: No such file or directory
> 275 | #include "qapi/qapi-types-error.h"
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> compilation terminated.
> make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o]
> Error 1
>
> To recover, I have to run qapi-gen.py manually and exactly right, or
> blow away the build tree and start over.
>
> The old build system did what a build system should: it remade the files
> that are missing or out of date.
>
> I'm still too clueless about Meson to debug this, but I hope I can learn
> from watching you fix it.
>
It looks like the ninja build handles that fine, so this is most likely a
ninja2make conversion issue.
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 1633 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 12:37 Meson can't recover from deletion of generated QAPI file(s) Markus Armbruster
2020-09-09 13:06 ` Philippe Mathieu-Daudé
2020-09-09 14:00 ` Marc-André Lureau
@ 2020-09-09 14:34 ` Paolo Bonzini
2020-09-10 7:44 ` Markus Armbruster
2 siblings, 1 reply; 11+ messages in thread
From: Paolo Bonzini @ 2020-09-09 14:34 UTC (permalink / raw)
To: Markus Armbruster, Marc-André Lureau
Cc: Philippe Mathieu-Daudé, qemu-devel
On 09/09/20 14:37, Markus Armbruster wrote:
> Watch this:
>
> $ rm qapi/qapi-types-error.h
> $ make
> Generating qemu-version.h with a meson_exe.py custom command
> Compiling C object qom/libqom.fa.p/object_interfaces.c.o
> In file included from ../qom/object_interfaces.c:4:
> /work/armbru/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
> 275 | #include "qapi/qapi-types-error.h"
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> compilation terminated.
> make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o] Error 1
>
> To recover, I have to run qapi-gen.py manually and exactly right, or
> blow away the build tree and start over.
>
> The old build system did what a build system should: it remade the files
> that are missing or out of date.
>
> I'm still too clueless about Meson to debug this, but I hope I can learn
> from watching you fix it.
Unfortunately you won't learn much about Meson, you would learn that
Make is messy but you don't need that. You can also learn a little bit
about the new design of the QEMU build system though, so I'll explain
and not just send a patch.
The bad news this tells you about the build system is that, when
debugging an issue, you have to figure out if it's a bug in Meson,
in the meson.build files, or in ninja2make. Of course the second
is the common case, but you never know especially now that there are
more people using ninja2make in anger.
Generating Makefile.ninja gets finicky because ninja (while it has other
things I don't like) is a little more expressive than Make as far as
simple build rules are concerned, therefore it doesn't need the stamp
file trick. So while we there may be one or two more bugs like this one
down the road, ninja2make should not be an issue as soon as its teething
problems are solved.
(As an aside: the GNU Make 4.3 "grouped targets" feature can sometimes
eliminate stamp files, but it would not help here. The stamp file has
another feature, namely the custom command can decide not to touch
its outputs if they won't change. This avoid more rebuilds. Grouped
targets don't have a way to do with that).
The good news is that there's an easy(ish) way to do this. The build
system is quite "linear" in how it works, so the first step should be to
look at build.ninja and see what the rules are like. Here you'd see
something like:
build long list of files: CUSTOM_COMMAND actual prerequisites
COMMAND = ...
description = Generating$ shared$ QAPI$ source$ files
Your twenty-plus-years-of-writing-Makefiles spidey sense will tingle, as
you can figure out that this is not going to be trivial to convert to
Makefiles. If you open Makefile.ninja you see the familiar stamp file
trick:
long list of files: CUSTOM_COMMAND@57579de3eef.stamp; @:
CUSTOM_COMMAND@57579de3eef.stamp: actual prerequisites
$(ninja-command-restat)
and that's where the bug is. If you delete one of the output files, Make
only runs ":" and does not rebuild it. One solution is to add:
ifneq (long list of files, $(wildcard long list of files))
.PHONY: CUSTOM_COMMAND@57579de3eef.stamp
endif
This way, if any of the prerequites is missing (not just older than the
stamp file), the rule for CUSTOM_COMMAND@57579de3eef.stamp will always
be executed.
This is fairly simple to do:
diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py
index 627a1cab45..6f0e35c727 100755
--- a/scripts/ninjatool.py
+++ b/scripts/ninjatool.py
@@ -908,6 +908,9 @@ class Ninja2Make(NinjaParserEventsWithVars):
else:
stamp = '%s@%s.stamp' % (rule, sha1_text(targets)[0:11])
self.print('%s: %s; @:' % (targets, stamp))
+ self.print('ifneq (%s, $(wildcard %s))' % (targets, targets))
+ self.print('.PHONY: %s' % (stamp, ))
+ self.print('endif')
self.print('%s: %s | %s; ${ninja-command-restat}' % (stamp, inputs, orderonly))
self.rule_targets[rule].append(stamp)
self.stamp_targets[rule].append(stamp)
To avoid this whole class of issues we could just use ninja to build QEMU
(Make would launch it, so there would still be no user-facing changes).
ninja2make's main strength was that it supported incremental conversion,
but right now all of the binaries are built by Meson therefore it's not
really *necessary* anymore. Dropping ninja2make removes a relatively
expensive part of the build as well as a nontrivial amount of code.
Another advantage would be that ninja tracks command lines and automatically
rebuilds things if the command line has changed. This is quite hard and
expensive to do with Make so ninja2make does not even try, but it has bitten
Philippe.
Of course, the main disadvantage is that it adds another dependency.
I will send the above patch formally soonish, but I wouldn't mind if somebody
else helped merging it.
Paolo
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 13:35 ` Claudio Fontana
@ 2020-09-09 14:35 ` Paolo Bonzini
2020-09-09 14:36 ` Claudio Fontana
0 siblings, 1 reply; 11+ messages in thread
From: Paolo Bonzini @ 2020-09-09 14:35 UTC (permalink / raw)
To: Claudio Fontana, Philippe Mathieu-Daudé,
Markus Armbruster, Marc-André Lureau
Cc: qemu-devel
On 09/09/20 15:35, Claudio Fontana wrote:
> On 9/9/20 3:06 PM, Philippe Mathieu-Daudé wrote:
>> Maybe related:
>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg736135.html
>> and later:
>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg738777.html
>>
>
> My use case is this:
Hi Claudio,
unlike Markus's, your issue is a genuine meson.build bug. It should be
fixed like so:
diff --git a/tests/meson.build b/tests/meson.build
index 998e4c48f9..721641afbb 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -223,7 +223,7 @@ foreach test_name, extra: tests
src += test_ss.all_sources()
deps += test_ss.all_dependencies()
endif
- exe = executable(test_name, src, dependencies: deps)
+ exe = executable(test_name, src, genh, dependencies: deps)
test(test_name, exe,
depends: test_deps.get(test_name, []),
Paolo
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 14:35 ` Paolo Bonzini
@ 2020-09-09 14:36 ` Claudio Fontana
2020-09-09 15:05 ` Claudio Fontana
0 siblings, 1 reply; 11+ messages in thread
From: Claudio Fontana @ 2020-09-09 14:36 UTC (permalink / raw)
To: Paolo Bonzini, Philippe Mathieu-Daudé,
Markus Armbruster, Marc-André Lureau
Cc: qemu-devel
On 9/9/20 4:35 PM, Paolo Bonzini wrote:
> On 09/09/20 15:35, Claudio Fontana wrote:
>> On 9/9/20 3:06 PM, Philippe Mathieu-Daudé wrote:
>>> Maybe related:
>>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg736135.html
>>> and later:
>>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg738777.html
>>>
>>
>> My use case is this:
>
> Hi Claudio,
>
> unlike Markus's, your issue is a genuine meson.build bug. It should be
> fixed like so:
>
> diff --git a/tests/meson.build b/tests/meson.build
> index 998e4c48f9..721641afbb 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -223,7 +223,7 @@ foreach test_name, extra: tests
> src += test_ss.all_sources()
> deps += test_ss.all_dependencies()
> endif
> - exe = executable(test_name, src, dependencies: deps)
> + exe = executable(test_name, src, genh, dependencies: deps)
>
> test(test_name, exe,
> depends: test_deps.get(test_name, []),
>
>
> Paolo
>
Will test right away, thanks!
C
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 14:36 ` Claudio Fontana
@ 2020-09-09 15:05 ` Claudio Fontana
2020-09-09 15:10 ` Paolo Bonzini
0 siblings, 1 reply; 11+ messages in thread
From: Claudio Fontana @ 2020-09-09 15:05 UTC (permalink / raw)
To: Paolo Bonzini, Marc-André Lureau
Cc: Philippe Mathieu-Daudé, Markus Armbruster, qemu-devel
On 9/9/20 4:36 PM, Claudio Fontana wrote:
> On 9/9/20 4:35 PM, Paolo Bonzini wrote:
>> On 09/09/20 15:35, Claudio Fontana wrote:
>>> On 9/9/20 3:06 PM, Philippe Mathieu-Daudé wrote:
>>>> Maybe related:
>>>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg736135.html
>>>> and later:
>>>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg738777.html
>>>>
>>>
>>> My use case is this:
>>
>> Hi Claudio,
>>
>> unlike Markus's, your issue is a genuine meson.build bug. It should be
>> fixed like so:
>>
>> diff --git a/tests/meson.build b/tests/meson.build
>> index 998e4c48f9..721641afbb 100644
>> --- a/tests/meson.build
>> +++ b/tests/meson.build
>> @@ -223,7 +223,7 @@ foreach test_name, extra: tests
>> src += test_ss.all_sources()
>> deps += test_ss.all_dependencies()
>> endif
>> - exe = executable(test_name, src, dependencies: deps)
>> + exe = executable(test_name, src, genh, dependencies: deps)
>>
>> test(test_name, exe,
>> depends: test_deps.get(test_name, []),
>>
>>
>> Paolo
>>
>
> Will test right away, thanks!
>
> C
>
Hmm, I still encounter problems:
Passed all 120 iotests
+ cd ..
+ rm -fr build-nontcg
+ mkdir build-nontcg
+ cd build-nontcg
+ ../configure --disable-tcg --enable-kvm --enable-hax
cross containers no
NOTE: guest cross-compilers enabled: cc
The Meson build system
Version: 0.55.1
Source dir: /dev/shm/cfontana/qemu
Build dir: /dev/shm/cfontana/qemu/build-nontcg
Build type: native build
Project name: qemu
Project version: 5.1.50
C compiler for the host machine: cc (gcc 7.5.0 "cc (SUSE Linux) 7.5.0")
C linker for the host machine: cc ld.bfd 2.34.0.20200325-386
Host machine cpu family: x86_64
Host machine cpu: x86_64
../meson.build:10: WARNING: Module unstable-keyval has no backwards or forwards compatibility and might not exist in future releases.
Program sh found: YES
Program python3 found: YES (/usr/bin/python3)
Configuring ninjatool using configuration
C++ compiler for the host machine: c++ (gcc 7.5.0 "c++ (SUSE Linux) 7.5.0")
C++ linker for the host machine: c++ ld.bfd 2.34.0.20200325-386
Library m found: YES
Library util found: YES
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Run-time dependency pixman-1 found: YES 0.34.0
Library pam found: YES
Library aio found: YES
Run-time dependency zlib found: YES 1.2.11
Run-time dependency xkbcommon found: NO (tried pkgconfig)
Library rt found: YES
sdl2-config found: NO
Run-time dependency sdl2 found: NO (tried pkgconfig and config-tool)
Run-time dependency libpng found: NO (tried pkgconfig)
Has header "jpeglib.h" : NO
Has header "sasl/sasl.h" : YES
Library sasl2 found: YES
Run-time dependency u2f-emu found: NO (tried pkgconfig)
Run-time dependency libkeyutils found: NO (tried pkgconfig)
Checking for function "gettid" : NO
Configuring config-host.h using configuration
Program scripts/minikconf.py found: YES
Configuring i386-softmmu-config-target.h using configuration
Configuring i386-softmmu-config-devices.mak with command
Reading depfile: /dev/shm/cfontana/qemu/build-nontcg/meson-private/i386-softmmu-config-devices.mak.d
Configuring i386-softmmu-config-devices.h using configuration
Configuring x86_64-softmmu-config-target.h using configuration
Configuring x86_64-softmmu-config-devices.mak with command
Reading depfile: /dev/shm/cfontana/qemu/build-nontcg/meson-private/x86_64-softmmu-config-devices.mak.d
Configuring x86_64-softmmu-config-devices.h using configuration
Program scripts/hxtool found: YES
Program scripts/shaderinclude.pl found: YES
Program scripts/qapi-gen.py found: YES
Program scripts/qemu-version.sh found: YES
Run-time dependency threads found: YES
Program keycodemapdb/tools/keymap-gen found: YES
Program scripts/decodetree.py found: YES
Program ../scripts/modules/module_block.py found: YES
Program nm found: YES
Program scripts/undefsym.py found: YES
Program scripts/feature_to_c.sh found: YES
Program bzip2 found: YES
Configuring 50-edk2-i386-secure.json using configuration
Configuring 50-edk2-x86_64-secure.json using configuration
Configuring 60-edk2-aarch64.json using configuration
Configuring 60-edk2-arm.json using configuration
Configuring 60-edk2-i386.json using configuration
Configuring 60-edk2-x86_64.json using configuration
Program qemu-keymap found: YES
Program python3 found: YES (/usr/bin/python3)
Program diff found: YES
Program dbus-daemon found: YES
Program initrd-stress.sh found: YES
Build targets in project: 410
qemu 5.1.50
Install prefix: /usr/local
BIOS directory: /usr/local/share/qemu
firmware path: /usr/local/share/qemu-firmware
binary directory: /usr/local/bin
library directory: /usr/local/lib
module directory: /usr/local/lib/qemu
libexec directory: /usr/local/libexec
include directory: /usr/local/include
config directory: /usr/local/etc
local state directory: /usr/local/var
Manual directory: share/man
Doc directory: /usr/local/share/doc
Build directory: /dev/shm/cfontana/qemu/build-nontcg
Source path: /dev/shm/cfontana/qemu
GIT binary: git
GIT submodules: ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 meson capstone slirp
C compiler: cc
Host C compiler: cc
C++ compiler: c++
ARFLAGS: rv
CFLAGS: -O2 -g -fPIE -DPIE -std=gnu99 -Wall
QEMU_CFLAGS: -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-declaration -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-psabi -fstack-protector-strong
QEMU_LDFLAGS: -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -m64 -fstack-protector-strong
make: make
python: /usr/bin/python3 (version: 3.6)
sphinx-build:
genisoimage: /usr/bin/mkisofs
slirp support: YES
smbd: "/usr/sbin/smbd"
module support: NO
host CPU: x86_64
host endianness: little
target list: i386-softmmu x86_64-softmmu
gprof enabled: NO
sparse enabled: NO
strip binaries: YES
profiler: NO
static build: YES
SDL support: NO
SDL image support: NO
GTK support: NO
GTK GL support: NO
pixman: YES
VTE support: NO
TLS priority: "NORMAL"
GNUTLS support: NO
libgcrypt: NO
nettle: NO
libtasn1: NO
PAM: YES
iconv support: YES
curses support: YES
virgl support: NO
curl support: NO
mingw32 support: NO
Audio drivers: oss
Block whitelist (rw):
Block whitelist (ro):
VirtFS support: NO
Multipath support: NO
VNC support: YES
VNC SASL support: YES
VNC JPEG support: NO
VNC PNG support: NO
xen support: NO
brlapi support: NO
Documentation: NO
PIE: YES
vde support: NO
netmap support: NO
Linux AIO support: YES
Linux io_uring support: NO
ATTR/XATTR support: YES
Install blobs: YES
malloc trim support: YES
RDMA support: NO
PVRDMA support: NO
fdt support: NO
membarrier: NO
preadv support: YES
fdatasync: YES
madvise: YES
posix_madvise: YES
posix_memalign: YES
libcap-ng support: NO
vhost-net support: YES
vhost-crypto support: YES
vhost-scsi support: YES
vhost-vsock support: YES
vhost-user support: YES
vhost-user-fs support: YES
vhost-vdpa support: YES
Trace backends: log
spice support: NO
rbd support: NO
xfsctl support: NO
smartcard support: NO
U2F support: NO
libusb: NO
usb net redir: NO
OpenGL support: NO
OpenGL dmabufs: NO
libiscsi support: NO
libnfs support: NO
build guest agent: YES
seccomp support: NO
coroutine backend: ucontext
coroutine pool: YES
debug stack usage: NO
mutex debugging: NO
crypto afalg: NO
GlusterFS support: NO
gcov: NO
TPM support: YES
libssh support: NO
QOM debugging: YES
Live block migration: YES
lzo support: NO
snappy support: NO
bzip2 support: NO
lzfse support: NO
zstd support: NO
NUMA host support: NO
libxml2: NO
tcmalloc support: NO
jemalloc support: NO
avx2 optimization: YES
avx512f optimization: NO
replication support: YES
bochs support: YES
cloop support: YES
dmg support: YES
qcow v1 support: YES
vdi support: YES
vvfat support: YES
qed support: YES
parallels support: YES
sheepdog support: YES
capstone: YES
libpmem support: NO
libdaxctl support: NO
libudev: NO
default devices: YES
plugin support: NO
fuzzing support: NO
gdb: /usr/bin/gdb
thread sanitizer: NO
rng-none: NO
Linux keyring: YES
Found ninja-1.8.2 at /usr/bin/ninja
+ make -j120
/usr/bin/python3 -B /dev/shm/cfontana/qemu/meson/meson.py introspect --tests --benchmarks | /usr/bin/python3 -B scripts/mtest2make.py > Makefile.mtest
./ninjatool -t ninja2make --omit clean dist uninstall cscope TAGS ctags < build.ninja > Makefile.ninja
make[1]: Entering directory '/dev/shm/cfontana/qemu/slirp'
[...]
CC pvh_main.o
BUILD multiboot.img
BUILD linuxboot.img
BUILD linuxboot_dma.img
BUILD kvmvapic.img
BUILD multiboot.raw
BUILD linuxboot.raw
BUILD kvmvapic.raw
BUILD linuxboot_dma.raw
SIGN multiboot.bin
SIGN kvmvapic.bin
SIGN linuxboot.bin
SIGN linuxboot_dma.bin
Linking target contrib/ivshmem-client/ivshmem-client
BUILD pvh.img
BUILD pvh.raw
In file included from tests/qapi-builtin-visit.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/../test-qapi-events-sub-sub-module.h:17:0,
from tests/include/test-qapi-events-sub-module.h:16,
from tests/test-qapi-events.h:16,
from tests/test-qapi-events.c:15:
tests/include/../test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from /dev/shm/cfontana/qemu/include/qapi/dealloc-visitor.h:17:0,
from tests/qapi-builtin-types.c:14:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from /dev/shm/cfontana/qemu/include/qapi/dealloc-visitor.h:17:0,
from tests/test-qapi-types.c:14:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
SIGN pvh.bin
In file included from /dev/shm/cfontana/qemu/include/qapi/dealloc-visitor.h:17:0,
from tests/include/test-qapi-types-sub-module.c:14:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/test-qapi-visit-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1760: tests/libtestqapi.a.p/meson-generated_.._qapi-builtin-types.c.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [Makefile.ninja:1761: tests/libtestqapi.a.p/meson-generated_.._qapi-builtin-visit.c.o] Error 1
make: *** [Makefile.ninja:1766: tests/libtestqapi.a.p/meson-generated_.._test-qapi-events.c.o] Error 1
make: *** [Makefile.ninja:1770: tests/libtestqapi.a.p/meson-generated_.._test-qapi-types.c.o] Error 1
make: *** [Makefile.ninja:1775: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-types-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1776: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-visit-sub-module.c.o] Error 1
In file included from tests/test-qapi-visit-sub-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/test-qapi-commands-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from /dev/shm/cfontana/qemu/include/qapi/qmp/qlit.h:17:0,
from tests/test-qapi-introspect.h:15,
from tests/test-qapi-introspect.c:13:
/dev/shm/cfontana/qemu/include/qapi/qmp/qobject.h:35:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from /dev/shm/cfontana/qemu/include/qapi/dealloc-visitor.h:17:0,
from tests/test-qapi-types-sub-sub-module.c:14:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1768: tests/libtestqapi.a.p/meson-generated_.._test-qapi-introspect.c.o] Error 1
make: *** [Makefile.ninja:1773: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-commands-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1771: tests/libtestqapi.a.p/meson-generated_.._test-qapi-visit-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-commands.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/../test-qapi-events-sub-sub-module.h:17:0,
from tests/include/test-qapi-events-sub-module.h:16,
from tests/include/test-qapi-events-sub-module.c:15:
tests/include/../test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1769: tests/libtestqapi.a.p/meson-generated_.._test-qapi-types-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-events-sub-sub-module.h:17:0,
from tests/test-qapi-events-sub-sub-module.c:15:
tests/test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1774: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-events-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1763: tests/libtestqapi.a.p/meson-generated_.._test-qapi-commands.c.o] Error 1
make: *** [Makefile.ninja:1765: tests/libtestqapi.a.p/meson-generated_.._test-qapi-events-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-visit.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/test-qapi-commands-sub-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/../test-qapi-events-sub-sub-module.h:17:0,
from tests/include/test-qapi-events-sub-module.h:16,
from tests/include/test-qapi-events-sub-module.c:15:
tests/include/../test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1769: tests/libtestqapi.a.p/meson-generated_.._test-qapi-types-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-events-sub-sub-module.h:17:0,
from tests/test-qapi-events-sub-sub-module.c:15:
tests/test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1774: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-events-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1763: tests/libtestqapi.a.p/meson-generated_.._test-qapi-commands.c.o] Error 1
make: *** [Makefile.ninja:1765: tests/libtestqapi.a.p/meson-generated_.._test-qapi-events-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-visit.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/test-qapi-commands-sub-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/../test-qapi-events-sub-sub-module.h:17:0,
from tests/include/test-qapi-events-sub-module.h:16,
from tests/include/test-qapi-events-sub-module.c:15:
tests/include/../test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1769: tests/libtestqapi.a.p/meson-generated_.._test-qapi-types-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-events-sub-sub-module.h:17:0,
from tests/test-qapi-events-sub-sub-module.c:15:
tests/test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1774: tests/libtestqapi.a.p/meson-generated_.._include_test-qapi-events-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1763: tests/libtestqapi.a.p/meson-generated_.._test-qapi-commands.c.o] Error 1
make: *** [Makefile.ninja:1765: tests/libtestqapi.a.p/meson-generated_.._test-qapi-events-sub-sub-module.c.o] Error 1
In file included from tests/test-qapi-visit.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
#include "qapi/qapi-types-error.h"
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/test-qapi-commands-sub-sub-module.c:14:0:
/dev/shm/cfontana/qemu/include/qapi/visitor.h:18:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from tests/include/../test-qapi-commands-sub-sub-module.h:16:0,
from tests/include/test-qapi-commands-sub-module.h:16,
from tests/test-qapi-commands.h:16,
from tests/test-qapi-init-commands.c:14:
tests/include/../test-qapi-types-sub-sub-module.h:16:10: fatal error: qapi/qapi-builtin-types.h: No such file or directory
#include "qapi/qapi-builtin-types.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile.ninja:1772: tests/libtestqapi.a.p/meson-generated_.._test-qapi-visit.c.o] Error 1
make: *** [Makefile.ninja:1762: tests/libtestqapi.a.p/meson-generated_.._test-qapi-commands-sub-sub-module.c.o] Error 1
make: *** [Makefile.ninja:1767: tests/libtestqapi.a.p/meson-generated_.._test-qapi-init-commands.c.o] Error 1
warning: execution failed: build.sh
You can fix the problem, and then run
git rebase --continue
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 15:05 ` Claudio Fontana
@ 2020-09-09 15:10 ` Paolo Bonzini
2020-09-09 21:25 ` Claudio Fontana
0 siblings, 1 reply; 11+ messages in thread
From: Paolo Bonzini @ 2020-09-09 15:10 UTC (permalink / raw)
To: Claudio Fontana, Marc-André Lureau
Cc: Philippe Mathieu-Daudé, Markus Armbruster, qemu-devel
On 09/09/20 17:05, Claudio Fontana wrote:
> Hmm, I still encounter problems:
And another:
diff --git a/tests/meson.build b/tests/meson.build
index 998e4c48f9..95789f43b3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -56,7 +56,7 @@ test_qapi_files = custom_target('Test QAPI files',
# perhaps change qapi_gen to replace / with _, like Meson itself does?
subdir('include')
-libtestqapi = static_library('testqapi', sources: [test_qapi_files, test_qapi_outputs_extra])
+libtestqapi = static_library('testqapi', sources: [test_qapi_files, genh, test_qapi_outputs_extra])
testqapi = declare_dependency(link_with: libtestqapi)
testblock = declare_dependency(dependencies: [block], sources: 'iothread.c')
Paolo
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 15:10 ` Paolo Bonzini
@ 2020-09-09 21:25 ` Claudio Fontana
0 siblings, 0 replies; 11+ messages in thread
From: Claudio Fontana @ 2020-09-09 21:25 UTC (permalink / raw)
To: Paolo Bonzini, Marc-André Lureau
Cc: Philippe Mathieu-Daudé, Markus Armbruster, qemu-devel
On 9/9/20 5:10 PM, Paolo Bonzini wrote:
> On 09/09/20 17:05, Claudio Fontana wrote:
>> Hmm, I still encounter problems:
>
> And another:
>
> diff --git a/tests/meson.build b/tests/meson.build
> index 998e4c48f9..95789f43b3 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -56,7 +56,7 @@ test_qapi_files = custom_target('Test QAPI files',
> # perhaps change qapi_gen to replace / with _, like Meson itself does?
> subdir('include')
>
> -libtestqapi = static_library('testqapi', sources: [test_qapi_files, test_qapi_outputs_extra])
> +libtestqapi = static_library('testqapi', sources: [test_qapi_files, genh, test_qapi_outputs_extra])
> testqapi = declare_dependency(link_with: libtestqapi)
>
> testblock = declare_dependency(dependencies: [block], sources: 'iothread.c')
>
> Paolo
>
adding this one as well fixes it for me, thanks!
Tested-by: Claudio Fontana <cfontana@suse.de>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Meson can't recover from deletion of generated QAPI file(s)
2020-09-09 14:34 ` Paolo Bonzini
@ 2020-09-10 7:44 ` Markus Armbruster
0 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2020-09-10 7:44 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Marc-André Lureau, Philippe Mathieu-Daudé, qemu-devel
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 09/09/20 14:37, Markus Armbruster wrote:
>> Watch this:
>>
>> $ rm qapi/qapi-types-error.h
>> $ make
>> Generating qemu-version.h with a meson_exe.py custom command
>> Compiling C object qom/libqom.fa.p/object_interfaces.c.o
>> In file included from ../qom/object_interfaces.c:4:
>> /work/armbru/qemu/include/qapi/error.h:275:10: fatal error: qapi/qapi-types-error.h: No such file or directory
>> 275 | #include "qapi/qapi-types-error.h"
>> | ^~~~~~~~~~~~~~~~~~~~~~~~~
>> compilation terminated.
>> make: *** [Makefile.ninja:348: qom/libqom.fa.p/object_interfaces.c.o] Error 1
>>
>> To recover, I have to run qapi-gen.py manually and exactly right, or
>> blow away the build tree and start over.
>>
>> The old build system did what a build system should: it remade the files
>> that are missing or out of date.
>>
>> I'm still too clueless about Meson to debug this, but I hope I can learn
>> from watching you fix it.
>
> Unfortunately you won't learn much about Meson, you would learn that
> Make is messy but you don't need that. You can also learn a little bit
> about the new design of the QEMU build system though, so I'll explain
> and not just send a patch.
Appreciated!
> The bad news this tells you about the build system is that, when
> debugging an issue, you have to figure out if it's a bug in Meson,
> in the meson.build files, or in ninja2make. Of course the second
> is the common case, but you never know especially now that there are
> more people using ninja2make in anger.
>
> Generating Makefile.ninja gets finicky because ninja (while it has other
> things I don't like) is a little more expressive than Make as far as
> simple build rules are concerned, therefore it doesn't need the stamp
> file trick. So while we there may be one or two more bugs like this one
> down the road, ninja2make should not be an issue as soon as its teething
> problems are solved.
A Make replacement must address its issues to be credible.
Make's traditional inability to directly express "rule updates multiple
files" and "rule may or may not actually change its target(s)" has
always been an issue. Countless Make users have had to learn the stamp
file work-around, and how to cope with its drawbacks. I distinctly
remember grappling with it back in the 90s.
> (As an aside: the GNU Make 4.3 "grouped targets" feature can sometimes
> eliminate stamp files, but it would not help here. The stamp file has
> another feature, namely the custom command can decide not to touch
> its outputs if they won't change. This avoid more rebuilds.
This is *essential* when generating headers. Without it, touching any
QAPI module or any part of the QAPI generator recompiles pretty much
everything.
> Grouped
> targets don't have a way to do with that).
Yes. Also, TIL grouped targets :)
> The good news is that there's an easy(ish) way to do this. The build
> system is quite "linear" in how it works, so the first step should be to
> look at build.ninja and see what the rules are like. Here you'd see
> something like:
>
> build long list of files: CUSTOM_COMMAND actual prerequisites
> COMMAND = ...
> description = Generating$ shared$ QAPI$ source$ files
>
> Your twenty-plus-years-of-writing-Makefiles spidey sense will tingle, as
> you can figure out that this is not going to be trivial to convert to
> Makefiles. If you open Makefile.ninja you see the familiar stamp file
> trick:
>
> long list of files: CUSTOM_COMMAND@57579de3eef.stamp; @:
> CUSTOM_COMMAND@57579de3eef.stamp: actual prerequisites
> $(ninja-command-restat)
>
> and that's where the bug is. If you delete one of the output files, Make
> only runs ":" and does not rebuild it. One solution is to add:
>
> ifneq (long list of files, $(wildcard long list of files))
> .PHONY: CUSTOM_COMMAND@57579de3eef.stamp
> endif
>
> This way, if any of the prerequites is missing (not just older than the
> stamp file), the rule for CUSTOM_COMMAND@57579de3eef.stamp will always
> be executed.
Neat trick!
Now I remember the old Makefiles actually didn't recover all by
themselves either, because they didn't use this trick. Manual recovery
was "easy", though: remove the stamp file.
I ran into the "can't recover from deletion of generated QAPI file(s)"
issue when I updated a silly script of mine that helps me diff them. To
force regeneration, the script removes them (relying on ccache to keep
compilation time in check). Pre-Meson, it removed the stamp files. I
didn't see any in meson.build, so I dropped their removal, nothing
worked, and I got quite confused.
> This is fairly simple to do:
>
> diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py
> index 627a1cab45..6f0e35c727 100755
> --- a/scripts/ninjatool.py
> +++ b/scripts/ninjatool.py
> @@ -908,6 +908,9 @@ class Ninja2Make(NinjaParserEventsWithVars):
> else:
> stamp = '%s@%s.stamp' % (rule, sha1_text(targets)[0:11])
> self.print('%s: %s; @:' % (targets, stamp))
> + self.print('ifneq (%s, $(wildcard %s))' % (targets, targets))
> + self.print('.PHONY: %s' % (stamp, ))
> + self.print('endif')
> self.print('%s: %s | %s; ${ninja-command-restat}' % (stamp, inputs, orderonly))
> self.rule_targets[rule].append(stamp)
> self.stamp_targets[rule].append(stamp)
>
> To avoid this whole class of issues we could just use ninja to build QEMU
> (Make would launch it, so there would still be no user-facing changes).
> ninja2make's main strength was that it supported incremental conversion,
> but right now all of the binaries are built by Meson therefore it's not
> really *necessary* anymore. Dropping ninja2make removes a relatively
> expensive part of the build as well as a nontrivial amount of code.
Makes sense to me.
> Another advantage would be that ninja tracks command lines and automatically
> rebuilds things if the command line has changed. This is quite hard and
> expensive to do with Make so ninja2make does not even try, but it has bitten
> Philippe.
>
> Of course, the main disadvantage is that it adds another dependency.
Yes. Drop in the bucket?
We already depend on ninja-the-language, we just feed it to ninja2make
instead of ninja.
> I will send the above patch formally soonish, but I wouldn't mind if somebody
> else helped merging it.
Thank you very much for taking the time to explain!
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-09-10 10:14 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-09 12:37 Meson can't recover from deletion of generated QAPI file(s) Markus Armbruster
2020-09-09 13:06 ` Philippe Mathieu-Daudé
2020-09-09 13:35 ` Claudio Fontana
2020-09-09 14:35 ` Paolo Bonzini
2020-09-09 14:36 ` Claudio Fontana
2020-09-09 15:05 ` Claudio Fontana
2020-09-09 15:10 ` Paolo Bonzini
2020-09-09 21:25 ` Claudio Fontana
2020-09-09 14:00 ` Marc-André Lureau
2020-09-09 14:34 ` Paolo Bonzini
2020-09-10 7:44 ` Markus Armbruster
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).