[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH for-8.0 00/30] Meson changes for QEMU 8.0
From: |
Paolo Bonzini |
Subject: |
[PATCH for-8.0 00/30] Meson changes for QEMU 8.0 |
Date: |
Fri, 9 Dec 2022 12:23:39 +0100 |
The final bout of conversions removes the remaining compiler tests
for emulators, applies a few cleanups that are enabled by version 0.63
of Meson, and updates the documentation.
Committing this however requires first a libvirt-ci update, in order to
enable using Python 3.8/3.9 on CentOS 8 and SLES 15. I am still working
on it but the review can start early for these patches.
A final comparison for the effort has a net negative of around 4000
lines of code, despite the growth of QEMU itself in the meanwhile:
before after
--------------------------------------------------------------------------
8647 configure 4240 meson.build
1296 Makefile 1970 configure
985 tests/Makefile.include 337 Makefile
440 rules.mak 224 scripts/meson-buildoptions.py
379 scripts/tap-driver.pl 171 tests/Makefile.include
287 Makefile.target 129 scripts/nsis.py
263 tests/tcg/configure.sh 113 scripts/mtest2make.py
129 scripts/create_config 48 scripts/undefsym.py
~5500 various Makefile fragments ~6500 various meson.build files
--------------------------------------------------------------------------
17926 total 13732 total
Completing the conversion took roughly two years and a lot of the complexity
in how QEMU is built is indeed essential, but I think it's agreed that:
- the disruption to the developers was minimal, and even Windows only took
a month or so to solidify;
- there is overall feature parity for both configure/Makefile<->meson and for
tap-driver.pl<->"meson test", but with fewer bugs and fewer (though not zero)
workarounds required. For Meson, the main recurring issue is probably the
gnutls headers issue on Homebrew; see for example commit 76f67bac79f6,
"meson: Propagate gnutls dependency to migration", 2021-04-01)
- the original target of the conversion ("make it trivial to do trivial
things; easy to extend existing things; possible to do everything else")
has been achieved. New dependencies such as ninja, were introduced in
such a way as to make them familiar to shell/Make users, and did
provide subtle quality of life improvements (e.g. rebuild targets
on command line changes)
New build system features since the introduction of Meson include switching
to config/targets files, custom device configuration (--with-devices-ARCH=),
the modinfo mechanism for module loading, entitlement support for
Hypervisor.framework, the preinstall tree, autogenerated parsing of the
configure command line, and cross-compilation of pc-bios/ (admittedly
not done by Meson, but not hindered either).
Big thanks to Akihiko, Alex, Daniel, Marc-André, Richard, Thomas and
everybody else that shared the work and the reviews!
Thanks,
Paolo
Paolo Bonzini (30):
configure: remove useless write_c_skeleton
configure: remove dead function
configure: remove useless test
configure: preserve qemu-ga variables
configure: remove backwards-compatibility and obsolete options
meson: tweak hardening options for Windows
meson: support meson 0.64 -Doptimization=plain
meson: require 0.63.0
meson: use prefer_static option
meson: remove static_kwargs
meson: cleanup dummy-cpus.c rules
modinfo: lookup compile_commands.json by object
configure: remove backwards-compatibility code
configure: test all warnings
meson: cleanup compiler detection
build: move glib detection and workarounds to meson
configure: remove pkg-config functions
configure, meson: move --enable-modules to Meson
configure, meson: move --enable-debug-info to Meson
meson: prepare move of QEMU_CFLAGS to meson
build: move sanitizer tests to meson
build: move SafeStack tests to meson
build: move coroutine backend selection to meson
build: move stack protector flag selection to meson
build: move warning flag selection to meson
build: move remaining compiler flag tests to meson
build: move compiler version check to meson
docs: update build system docs
configure: do not rerun the tests with -Werror
meson: always log qemu-iotests verbosely
accel/meson.build | 9 +-
block/meson.build | 1 +
configure | 760 +-----------------
contrib/plugins/Makefile | 7 +-
docs/devel/build-system.rst | 286 ++++---
meson | 2 +-
meson.build | 684 +++++++++++-----
meson_options.txt | 13 +
plugins/meson.build | 2 +-
qga/meson.build | 2 +-
scripts/meson-buildoptions.py | 3 +
scripts/meson-buildoptions.sh | 22 +
scripts/modinfo-collect.py | 23 +-
tcg/meson.build | 2 +-
tests/qemu-iotests/meson.build | 3 +-
tests/unit/meson.build | 2 +-
...{coroutine-win32.c => coroutine-windows.c} | 0
util/meson.build | 2 +-
18 files changed, 716 insertions(+), 1107 deletions(-)
rename util/{coroutine-win32.c => coroutine-windows.c} (100%)
--
2.38.1
- [PATCH for-8.0 00/30] Meson changes for QEMU 8.0,
Paolo Bonzini <=