* [PATCH v2 00/34] Misc meson conversions for QEMU 7.1
@ 2022-04-23 12:51 Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 01/34] meson: show final set of compiler flags Paolo Bonzini
` (33 more replies)
0 siblings, 34 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
The more interesting bits here are:
* move all remaining dependencies except glib to Meson (glib depends on
https://github.com/mesonbuild/meson/pull/10206/)
* many more options are parsed from introspection data, including
string options
* make all -D options optional on the meson command line
v1->v2:
- remove CONFIG_XEN_PCI_PASSTHROUGH symbol [patch 12]
- fix get_option('optimization') comparison to use a string [patch 17]
- fix RO/RW typo [patch 20]
Other patches are exactly the same.
Based-on: <20220422100825.3692002-1-mjt@msgid.tls.msk.ru>
Paolo Bonzini (34):
meson: show final set of compiler flags
configure: remove dead code
qga: wixl: get path to sysroot from pkg-config as intended
configure: pc-bios/qemu-icon.bmp does not exist
configure: gcov should not exclude fortify-source
configure: move --enable/--disable-debug-info to second option parsing
pass
configure, meson: move OpenGL check to meson
meson, configure: move RDMA options to meson
meson, configure: move keyctl test to meson
meson, configure: move usbfs test to meson
meson, configure: move libgio test to meson
meson: remove CONFIG_XEN_PCI_PASSTHROUGH from config-target.h
meson, configure: move --enable-module-upgrades to meson
meson, configure: move Xen detection to meson
meson-buildoptions: add support for string options
configure, meson: move iasl detection to meson
configure: move Windows flags detection to meson
configure: switch string options to automatic parsing
meson, configure: move --tls-priority to meson
meson, configure: move bdrv whitelists to meson
meson, configure: move --with-pkgversion, CONFIG_STAMP to meson
meson, configure: move --interp-prefix to meson
meson: always combine directories with prefix
configure: switch directory options to automatic parsing
meson: pass more options directly as -D
configure: omit options with default values from meson command line
meson, virtio: place all virtio-pci devices under virtio_pci_ss
configure: simplify vhost-net-{user, vdpa} configuration
build: move vhost-vsock configuration to Kconfig
build: move vhost-scsi configuration to Kconfig
build: move vhost-user-fs configuration to Kconfig
meson: create have_vhost_* variables
meson: use have_vhost_* variables to pick sources
configure, meson: move vhost options to Meson
Kconfig.host | 3 -
backends/meson.build | 10 +-
configure | 1010 ++-----------------------------
contrib/rdmacm-mux/meson.build | 4 +-
crypto/meson.build | 4 +-
docs/meson.build | 2 +-
hw/net/meson.build | 8 +-
hw/scsi/Kconfig | 5 +
hw/virtio/Kconfig | 18 +-
hw/virtio/meson.build | 34 +-
hw/xen/meson.build | 20 +-
include/hw/virtio/virtio-scsi.h | 2 -
meson.build | 405 ++++++++++---
meson_options.txt | 40 +-
migration/meson.build | 2 +-
net/meson.build | 12 +-
qga/meson.build | 2 +-
scripts/meson-buildoptions.py | 86 ++-
scripts/meson-buildoptions.sh | 93 ++-
scripts/qemu-stamp.py | 24 +
scripts/xen-detect.c | 203 +++++++
tests/meson.build | 2 +-
tests/qtest/meson.build | 9 +-
tools/meson.build | 2 +-
ui/meson.build | 24 +-
util/meson.build | 2 +-
26 files changed, 872 insertions(+), 1154 deletions(-)
create mode 100644 scripts/qemu-stamp.py
create mode 100644 scripts/xen-detect.c
--
2.35.1
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2 01/34] meson: show final set of compiler flags
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 02/34] configure: remove dead code Paolo Bonzini
` (32 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
The actual set of compiler flags can grow beyond what is found by the configure
script, for example if gprof is used. Show the full set in the summary.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/meson.build b/meson.build
index d083c6b7bf..a9949ee9e2 100644
--- a/meson.build
+++ b/meson.build
@@ -3533,10 +3533,10 @@ link_args = get_option(link_language + '_link_args')
if link_args.length() > 0
summary_info += {'LDFLAGS': ' '.join(link_args)}
endif
-summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
-summary_info += {'QEMU_CXXFLAGS': config_host['QEMU_CXXFLAGS']}
-summary_info += {'QEMU_OBJCFLAGS': config_host['QEMU_OBJCFLAGS']}
-summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
+summary_info += {'QEMU_CFLAGS': ' '.join(qemu_cflags)}
+summary_info += {'QEMU_CXXFLAGS': ' '.join(qemu_cxxflags)}
+summary_info += {'QEMU_OBJCFLAGS': ' '.join(qemu_objcflags)}
+summary_info += {'QEMU_LDFLAGS': ' '.join(qemu_ldflags)}
summary_info += {'profiler': get_option('profiler')}
summary_info += {'link-time optimization (LTO)': get_option('b_lto')}
summary_info += {'PIE': get_option('b_pie')}
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 02/34] configure: remove dead code
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 01/34] meson: show final set of compiler flags Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 03/34] qga: wixl: get path to sysroot from pkg-config as intended Paolo Bonzini
` (31 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
tcg_interpreter is never written, it is purely a meson option;
trace_backends is never read.
And SeaBIOS is only build from the source tree with roms/Makefile,
so the config.mak file is unused.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 24 ------------------------
1 file changed, 24 deletions(-)
diff --git a/configure b/configure
index a4942c13e4..9e32c96fce 100755
--- a/configure
+++ b/configure
@@ -320,7 +320,6 @@ linux_user=""
bsd_user=""
pkgversion=""
pie=""
-trace_backends="log"
trace_file="trace"
opengl="$default_feature"
coroutine=""
@@ -391,7 +390,6 @@ for opt do
cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
;;
--cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
- cc_archs="$cc_archs $cc_arch"
eval "cross_cc_${cc_arch}=\$optarg"
cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
;;
@@ -2881,9 +2879,6 @@ fi
if test "$vhost_user_fs" = "yes" ; then
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
fi
-if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
- echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
-fi
if test "$opengl" = "yes" ; then
echo "CONFIG_OPENGL=y" >> $config_host_mak
@@ -3024,7 +3019,6 @@ LINKS="Makefile"
LINKS="$LINKS tests/tcg/Makefile.target"
LINKS="$LINKS pc-bios/optionrom/Makefile"
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
-LINKS="$LINKS roms/seabios/Makefile"
LINKS="$LINKS pc-bios/qemu-icon.bmp"
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
LINKS="$LINKS tests/avocado tests/data"
@@ -3059,24 +3053,6 @@ done
export target_list source_path use_containers cpu host_cc
$source_path/tests/tcg/configure.sh)
-# temporary config to build submodules
-if test -f $source_path/roms/seabios/Makefile; then
- for rom in seabios; do
- config_mak=roms/$rom/config.mak
- echo "# Automatically generated by configure - do not modify" > $config_mak
- echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
- echo "AS=$as" >> $config_mak
- echo "CCAS=$ccas" >> $config_mak
- echo "CC=$cc" >> $config_mak
- echo "BCC=bcc" >> $config_mak
- echo "CPP=$cpp" >> $config_mak
- echo "OBJCOPY=objcopy" >> $config_mak
- echo "IASL=$iasl" >> $config_mak
- echo "LD=$ld" >> $config_mak
- echo "RANLIB=$ranlib" >> $config_mak
- done
-fi
-
config_mak=pc-bios/optionrom/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 03/34] qga: wixl: get path to sysroot from pkg-config as intended
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 01/34] meson: show final set of compiler flags Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 02/34] configure: remove dead code Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 04/34] configure: pc-bios/qemu-icon.bmp does not exist Paolo Bonzini
` (30 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
The .wxs file uses $(var.Mingw_bin) while configure/meson have always
used Mingw_dlls. Fix them to match what was probably intended.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ++--
qga/meson.build | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 9e32c96fce..049f669a94 100755
--- a/configure
+++ b/configure
@@ -2702,7 +2702,7 @@ if test "$QEMU_GA_VERSION" = ""; then
QEMU_GA_VERSION=$(cat $source_path/VERSION)
fi
-QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
+QEMU_GA_MSI_MINGW_BIN_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
# Mac OS X ships with a broken assembler
roms=
@@ -2790,7 +2790,7 @@ if test "$debug_tcg" = "yes" ; then
fi
if test "$mingw32" = "yes" ; then
echo "CONFIG_WIN32=y" >> $config_host_mak
- echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
+ echo "QEMU_GA_MSI_MINGW_BIN_PATH=${QEMU_GA_MSI_MINGW_BIN_PATH}" >> $config_host_mak
echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
diff --git a/qga/meson.build b/qga/meson.build
index 392d560941..6d9f39bb32 100644
--- a/qga/meson.build
+++ b/qga/meson.build
@@ -129,7 +129,7 @@ if targetos == 'windows'
wixl, '-o', '@OUTPUT0@', '@INPUT0@',
qemu_ga_msi_arch[cpu],
qemu_ga_msi_vss,
- '-D', 'Mingw_dlls=' + config_host['QEMU_GA_MSI_MINGW_DLL_PATH'],
+ '-D', 'Mingw_bin=' + config_host['QEMU_GA_MSI_MINGW_BIN_PATH'],
])
all_qga += [qga_msi]
alias_target('msi', qga_msi)
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 04/34] configure: pc-bios/qemu-icon.bmp does not exist
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (2 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 03/34] qga: wixl: get path to sysroot from pkg-config as intended Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 05/34] configure: gcov should not exclude fortify-source Paolo Bonzini
` (29 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau, Thomas Huth
The file has been removed in commit a8260d3876 ("ui: install logo icons to
$prefix/share/icons", 2019-01-21), do not try to symlink it in the build tree.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 1 -
1 file changed, 1 deletion(-)
diff --git a/configure b/configure
index 049f669a94..a6ed3498f2 100755
--- a/configure
+++ b/configure
@@ -3019,7 +3019,6 @@ LINKS="Makefile"
LINKS="$LINKS tests/tcg/Makefile.target"
LINKS="$LINKS pc-bios/optionrom/Makefile"
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
-LINKS="$LINKS pc-bios/qemu-icon.bmp"
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
LINKS="$LINKS tests/avocado tests/data"
LINKS="$LINKS tests/qemu-iotests/check"
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 05/34] configure: gcov should not exclude fortify-source
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (3 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 04/34] configure: pc-bios/qemu-icon.bmp does not exist Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 06/34] configure: move --enable/--disable-debug-info to second option parsing pass Paolo Bonzini
` (28 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
There is no reason other than history (dating back to commit 1d728c3946, "tests: add gcov
support", 2013-01-06) for this, remove this unnecessary conditional.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/configure b/configure
index a6ed3498f2..e404b55da5 100755
--- a/configure
+++ b/configure
@@ -2625,9 +2625,7 @@ fi
write_c_skeleton
-if test "$gcov" = "yes" ; then
- :
-elif test "$fortify_source" = "yes" ; then
+if test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
debug=no
fi
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 06/34] configure: move --enable/--disable-debug-info to second option parsing pass
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (4 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 05/34] configure: gcov should not exclude fortify-source Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 07/34] configure, meson: move OpenGL check to meson Paolo Bonzini
` (27 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau, Thomas Huth
$debug_info is not needed anywhere except in the final meson invocation,
no need to special case it.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/configure b/configure
index e404b55da5..d704029284 100755
--- a/configure
+++ b/configure
@@ -244,7 +244,6 @@ audio_drv_list="default"
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
host_cc="cc"
-debug_info="yes"
lto="false"
stack_protector=""
safe_stack=""
@@ -304,6 +303,7 @@ vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
rdma="$default_feature"
pvrdma="$default_feature"
+debug_info="yes"
debug_tcg="no"
debug="no"
sanitizers="no"
@@ -379,10 +379,6 @@ for opt do
;;
--extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
;;
- --enable-debug-info) debug_info="yes"
- ;;
- --disable-debug-info) debug_info="no"
- ;;
--cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
;;
--cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
@@ -759,12 +755,12 @@ for opt do
;;
--extra-ldflags=*)
;;
- --enable-debug-info)
- ;;
- --disable-debug-info)
- ;;
--cross-cc-*)
;;
+ --enable-debug-info) debug_info="yes"
+ ;;
+ --disable-debug-info) debug_info="no"
+ ;;
--enable-modules)
modules="yes"
;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 07/34] configure, meson: move OpenGL check to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (5 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 06/34] configure: move --enable/--disable-debug-info to second option parsing pass Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 08/34] meson, configure: move RDMA options " Paolo Bonzini
` (26 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 40 -----------------------------------
meson.build | 16 +++++++++-----
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
ui/meson.build | 17 ++++++++-------
5 files changed, 25 insertions(+), 53 deletions(-)
diff --git a/configure b/configure
index d704029284..1aefbc2f68 100755
--- a/configure
+++ b/configure
@@ -321,7 +321,6 @@ bsd_user=""
pkgversion=""
pie=""
trace_file="trace"
-opengl="$default_feature"
coroutine=""
tls_priority="NORMAL"
plugins="$default_feature"
@@ -960,10 +959,6 @@ for opt do
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
;;
- --disable-opengl) opengl="no"
- ;;
- --enable-opengl) opengl="yes"
- ;;
--disable-zlib-test)
;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
@@ -1258,7 +1253,6 @@ cat << EOF
vhost-kernel vhost kernel backend support
vhost-user vhost-user backend support
vhost-vdpa vhost-vdpa kernel backend support
- opengl opengl support
gio libgio support
NOTE: The object files are built at the place where configure is launched
@@ -2278,34 +2272,6 @@ case "$fdt" in
esac
##########################################
-# opengl probe (for sdl2, gtk)
-
-if test "$opengl" != "no" ; then
- epoxy=no
- if $pkg_config epoxy; then
- cat > $TMPC << EOF
-#include <epoxy/egl.h>
-int main(void) { return 0; }
-EOF
- if compile_prog "" "" ; then
- epoxy=yes
- fi
- fi
-
- if test "$epoxy" = "yes" ; then
- opengl_cflags="$($pkg_config --cflags epoxy)"
- opengl_libs="$($pkg_config --libs epoxy)"
- opengl=yes
- else
- if test "$opengl" = "yes" ; then
- feature_not_found "opengl" "Please install epoxy with EGL"
- fi
- opengl_cflags=""
- opengl_libs=""
- opengl=no
- fi
-fi
-
# check for usbfs
have_usbfs=no
if test "$linux_user" = "yes"; then
@@ -2874,12 +2840,6 @@ if test "$vhost_user_fs" = "yes" ; then
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
fi
-if test "$opengl" = "yes" ; then
- echo "CONFIG_OPENGL=y" >> $config_host_mak
- echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
- echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
-fi
-
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
echo "CONFIG_BSD=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index a9949ee9e2..d21902e5d0 100644
--- a/meson.build
+++ b/meson.build
@@ -1000,9 +1000,14 @@ if not get_option('coreaudio').auto() or (targetos == 'darwin' and have_system)
endif
opengl = not_found
-if 'CONFIG_OPENGL' in config_host
- opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
- link_args: config_host['OPENGL_LIBS'].split())
+if not get_option('opengl').auto() or have_system or have_vhost_user_gpu
+ epoxy = dependency('epoxy', method: 'pkg-config',
+ required: get_option('opengl'), kwargs: static_kwargs)
+ if cc.has_header('epoxy/egl.h', dependencies: epoxy)
+ opengl = epoxy
+ elif get_option('opengl').enabled()
+ error('epoxy/egl.h not found')
+ endif
endif
gbm = not_found
if (have_system or have_tools) and (virgl.found() or opengl.found())
@@ -1544,6 +1549,7 @@ config_host_data.set('CONFIG_LINUX_AIO', libaio.found())
config_host_data.set('CONFIG_LINUX_IO_URING', linux_io_uring.found())
config_host_data.set('CONFIG_LIBPMEM', libpmem.found())
config_host_data.set('CONFIG_NUMA', numa.found())
+config_host_data.set('CONFIG_OPENGL', opengl.found())
config_host_data.set('CONFIG_PROFILER', get_option('profiler'))
config_host_data.set('CONFIG_RBD', rbd.found())
config_host_data.set('CONFIG_SDL', sdl.found())
@@ -2091,7 +2097,7 @@ host_kconfig = \
(have_tpm ? ['CONFIG_TPM=y'] : []) + \
(spice.found() ? ['CONFIG_SPICE=y'] : []) + \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
- ('CONFIG_OPENGL' in config_host ? ['CONFIG_OPENGL=y'] : []) + \
+ (opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
(x11.found() ? ['CONFIG_X11=y'] : []) + \
('CONFIG_VHOST_USER' in config_host ? ['CONFIG_VHOST_USER=y'] : []) + \
('CONFIG_VHOST_VDPA' in config_host ? ['CONFIG_VHOST_VDPA=y'] : []) + \
@@ -3706,7 +3712,7 @@ summary_info += {'smartcard support': cacard}
summary_info += {'U2F support': u2f}
summary_info += {'libusb': libusb}
summary_info += {'usb net redir': usbredir}
-summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
+summary_info += {'OpenGL support (epoxy)': opengl}
summary_info += {'GBM': gbm}
summary_info += {'libiscsi support': libiscsi}
summary_info += {'libnfs support': libnfs}
diff --git a/meson_options.txt b/meson_options.txt
index 52b11cead4..bd8efe4fbf 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -149,6 +149,8 @@ option('lzo', type : 'feature', value : 'auto',
description: 'lzo compression support')
option('rbd', type : 'feature', value : 'auto',
description: 'Ceph block device driver')
+option('opengl', type : 'feature', value : 'auto',
+ description: 'OpenGL support')
option('gtk', type : 'feature', value : 'auto',
description: 'GTK+ user interface')
option('sdl', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 1e26f4571e..f91bd9231b 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -91,6 +91,7 @@ meson_options_help() {
printf "%s\n" ' nettle nettle cryptography support'
printf "%s\n" ' numa libnuma support'
printf "%s\n" ' nvmm NVMM acceleration support'
+ printf "%s\n" ' opengl OpenGL support'
printf "%s\n" ' oss OSS sound support'
printf "%s\n" ' pa PulseAudio sound support'
printf "%s\n" ' parallels parallels image format support'
@@ -271,6 +272,8 @@ _meson_option_parse() {
--disable-numa) printf "%s" -Dnuma=disabled ;;
--enable-nvmm) printf "%s" -Dnvmm=enabled ;;
--disable-nvmm) printf "%s" -Dnvmm=disabled ;;
+ --enable-opengl) printf "%s" -Dopengl=enabled ;;
+ --disable-opengl) printf "%s" -Dopengl=disabled ;;
--enable-oss) printf "%s" -Doss=enabled ;;
--disable-oss) printf "%s" -Doss=disabled ;;
--enable-pa) printf "%s" -Dpa=enabled ;;
diff --git a/ui/meson.build b/ui/meson.build
index 64286ba150..b21d3d1534 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -1,5 +1,6 @@
softmmu_ss.add(pixman)
specific_ss.add(when: ['CONFIG_SOFTMMU'], if_true: pixman) # for the include path
+specific_ss.add(when: ['CONFIG_SOFTMMU'], if_true: opengl) # for the include path
softmmu_ss.add(files(
'clipboard.c',
@@ -43,7 +44,6 @@ vnc_ss.add(zlib, png, jpeg, gnutls)
vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
softmmu_ss.add_all(when: vnc, if_true: vnc_ss)
softmmu_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
-specific_ss.add(when: ['CONFIG_SOFTMMU'], if_true: opengl)
ui_modules = {}
@@ -53,17 +53,18 @@ if curses.found()
ui_modules += {'curses' : curses_ss}
endif
-if config_host.has_key('CONFIG_OPENGL')
+softmmu_ss.add(opengl)
+if opengl.found()
opengl_ss = ss.source_set()
opengl_ss.add(gbm)
- opengl_ss.add(when: [opengl, pixman, 'CONFIG_OPENGL'],
+ opengl_ss.add(when: [opengl, pixman],
if_true: files('shader.c', 'console-gl.c', 'egl-helpers.c', 'egl-context.c'))
ui_modules += {'opengl' : opengl_ss}
endif
-if config_host.has_key('CONFIG_OPENGL') and gbm.found()
+if opengl.found() and gbm.found()
egl_headless_ss = ss.source_set()
- egl_headless_ss.add(when: [opengl, gbm, pixman, 'CONFIG_OPENGL'],
+ egl_headless_ss.add(when: [opengl, gbm, pixman],
if_true: files('egl-headless.c'))
ui_modules += {'egl-headless' : egl_headless_ss}
endif
@@ -98,8 +99,8 @@ if gtk.found()
gtk_ss = ss.source_set()
gtk_ss.add(gtk, vte, pixman, files('gtk.c', 'gtk-clipboard.c'))
gtk_ss.add(when: x11, if_true: files('x_keymap.c'))
- gtk_ss.add(when: [opengl, 'CONFIG_OPENGL'], if_true: files('gtk-gl-area.c'))
- gtk_ss.add(when: [x11, opengl, 'CONFIG_OPENGL'], if_true: files('gtk-egl.c'))
+ gtk_ss.add(when: opengl, if_true: files('gtk-gl-area.c'))
+ gtk_ss.add(when: [x11, opengl], if_true: files('gtk-egl.c'))
ui_modules += {'gtk' : gtk_ss}
endif
@@ -112,7 +113,7 @@ if sdl.found()
'sdl2-input.c',
'sdl2.c',
))
- sdl_ss.add(when: [opengl, 'CONFIG_OPENGL'], if_true: files('sdl2-gl.c'))
+ sdl_ss.add(when: opengl, if_true: files('sdl2-gl.c'))
sdl_ss.add(when: x11, if_true: files('x_keymap.c'))
ui_modules += {'sdl' : sdl_ss}
endif
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 08/34] meson, configure: move RDMA options to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (6 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 07/34] configure, meson: move OpenGL check to meson Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 09/34] meson, configure: move keyctl test " Paolo Bonzini
` (25 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 115 ---------------------------------
contrib/rdmacm-mux/meson.build | 4 +-
meson.build | 56 ++++++++++++++--
meson_options.txt | 4 ++
migration/meson.build | 2 +-
scripts/meson-buildoptions.sh | 6 ++
6 files changed, 62 insertions(+), 125 deletions(-)
diff --git a/configure b/configure
index 1aefbc2f68..4deca94235 100755
--- a/configure
+++ b/configure
@@ -301,8 +301,6 @@ vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
-rdma="$default_feature"
-pvrdma="$default_feature"
debug_info="yes"
debug_tcg="no"
debug="no"
@@ -972,14 +970,6 @@ for opt do
;;
--tls-priority=*) tls_priority="$optarg"
;;
- --enable-rdma) rdma="yes"
- ;;
- --disable-rdma) rdma="no"
- ;;
- --enable-pvrdma) pvrdma="yes"
- ;;
- --disable-pvrdma) pvrdma="no"
- ;;
--disable-vhost-user) vhost_user="no"
;;
--enable-vhost-user) vhost_user="yes"
@@ -1244,8 +1234,6 @@ cat << EOF
lto Enable Link-Time Optimization.
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
- rdma Enable RDMA-based migration
- pvrdma Enable PVRDMA support
vhost-net vhost-net kernel acceleration support
vhost-vsock virtio sockets device support
vhost-scsi vhost-scsi kernel target support
@@ -2037,100 +2025,6 @@ EOF
fi
fi
-##########################################
-# RDMA needs OpenFabrics libraries
-if test "$rdma" != "no" ; then
- cat > $TMPC <<EOF
-#include <rdma/rdma_cma.h>
-int main(void) { return 0; }
-EOF
- rdma_libs="-lrdmacm -libverbs -libumad"
- if compile_prog "" "$rdma_libs" ; then
- rdma="yes"
- else
- if test "$rdma" = "yes" ; then
- error_exit \
- " OpenFabrics librdmacm/libibverbs/libibumad not present." \
- " Your options:" \
- " (1) Fast: Install infiniband packages (devel) from your distro." \
- " (2) Cleanest: Install libraries from www.openfabrics.org" \
- " (3) Also: Install softiwarp if you don't have RDMA hardware"
- fi
- rdma="no"
- fi
-fi
-
-##########################################
-# PVRDMA detection
-
-cat > $TMPC <<EOF &&
-#include <sys/mman.h>
-
-int
-main(void)
-{
- char buf = 0;
- void *addr = &buf;
- addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
-
- return 0;
-}
-EOF
-
-if test "$rdma" = "yes" ; then
- case "$pvrdma" in
- "")
- if compile_prog "" ""; then
- pvrdma="yes"
- else
- pvrdma="no"
- fi
- ;;
- "yes")
- if ! compile_prog "" ""; then
- error_exit "PVRDMA is not supported since mremap is not implemented"
- fi
- pvrdma="yes"
- ;;
- "no")
- pvrdma="no"
- ;;
- esac
-else
- if test "$pvrdma" = "yes" ; then
- error_exit "PVRDMA requires rdma suppport"
- fi
- pvrdma="no"
-fi
-
-# Let's see if enhanced reg_mr is supported
-if test "$pvrdma" = "yes" ; then
-
-cat > $TMPC <<EOF &&
-#include <infiniband/verbs.h>
-
-int
-main(void)
-{
- struct ibv_mr *mr;
- struct ibv_pd *pd = NULL;
- size_t length = 10;
- uint64_t iova = 0;
- int access = 0;
- void *addr = NULL;
-
- mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
-
- ibv_dereg_mr(mr);
-
- return 0;
-}
-EOF
- if ! compile_prog "" "-libverbs"; then
- QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
- fi
-fi
-
##########################################
# glib support probe
@@ -2855,15 +2749,6 @@ if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
echo "CONFIG_TSAN=y" >> $config_host_mak
fi
-if test "$rdma" = "yes" ; then
- echo "CONFIG_RDMA=y" >> $config_host_mak
- echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
-fi
-
-if test "$pvrdma" = "yes" ; then
- echo "CONFIG_PVRDMA=y" >> $config_host_mak
-fi
-
if test "$plugins" = "yes" ; then
echo "CONFIG_PLUGIN=y" >> $config_host_mak
fi
diff --git a/contrib/rdmacm-mux/meson.build b/contrib/rdmacm-mux/meson.build
index 7674f54cc5..36c9c89630 100644
--- a/contrib/rdmacm-mux/meson.build
+++ b/contrib/rdmacm-mux/meson.build
@@ -1,7 +1,5 @@
-if 'CONFIG_PVRDMA' in config_host
- # if not found, CONFIG_PVRDMA should not be set
+if have_pvrdma
# FIXME: broken on big endian architectures
- libumad = cc.find_library('ibumad', required: true)
executable('rdmacm-mux', files('main.c'), genh,
dependencies: [glib, libumad],
build_by_default: false,
diff --git a/meson.build b/meson.build
index d21902e5d0..55ad65ce95 100644
--- a/meson.build
+++ b/meson.build
@@ -1217,9 +1217,22 @@ if numa.found() and not cc.links('''
endif
rdma = not_found
-if 'CONFIG_RDMA' in config_host
- rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
+if not get_option('rdma').auto() or have_system
+ libumad = cc.find_library('ibumad', required: get_option('rdma'))
+ rdma_libs = [cc.find_library('rdmacm', has_headers: ['rdma/rdma_cma.h'],
+ required: get_option('rdma'),
+ kwargs: static_kwargs),
+ cc.find_library('ibverbs', required: get_option('rdma'),
+ kwargs: static_kwargs),
+ libumad]
+ rdma = declare_dependency(dependencies: rdma_libs)
+ foreach lib: rdma_libs
+ if not lib.found()
+ rdma = not_found
+ endif
+ endforeach
endif
+
xen = not_found
if 'CONFIG_XEN_BACKEND' in config_host
xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
@@ -1552,6 +1565,7 @@ config_host_data.set('CONFIG_NUMA', numa.found())
config_host_data.set('CONFIG_OPENGL', opengl.found())
config_host_data.set('CONFIG_PROFILER', get_option('profiler'))
config_host_data.set('CONFIG_RBD', rbd.found())
+config_host_data.set('CONFIG_RDMA', rdma.found())
config_host_data.set('CONFIG_SDL', sdl.found())
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
config_host_data.set('CONFIG_SECCOMP', seccomp.found())
@@ -1650,7 +1664,7 @@ config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system', prefix: '
if rdma.found()
config_host_data.set('HAVE_IBV_ADVISE_MR',
cc.has_function('ibv_advise_mr',
- args: config_host['RDMA_LIBS'].split(),
+ dependencies: rdma,
prefix: '#include <infiniband/verbs.h>'))
endif
@@ -1970,6 +1984,36 @@ config_host_data.set('CONFIG_AVX512F_OPT', get_option('avx512f') \
int main(int argc, char *argv[]) { return bar(argv[0]); }
'''), error_message: 'AVX512F not available').allowed())
+have_pvrdma = get_option('pvrdma') \
+ .require(rdma.found(), error_message: 'PVRDMA requires OpenFabrics libraries') \
+ .require(cc.compiles('''
+ int main(void)
+ {
+ char buf = 0;
+ void *addr = &buf;
+ addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
+
+ return 0;
+ }'''), error_message: 'PVRDMA requires mremap').allowed()
+
+if have_pvrdma
+ config_host_data.set('LEGACY_RDMA_REG_MR', not cc.compiles('''
+ #include <infiniband/verbs.h>
+ int main(void)
+ {
+ struct ibv_mr *mr;
+ struct ibv_pd *pd = NULL;
+ size_t length = 10;
+ uint64_t iova = 0;
+ int access = 0;
+ void *addr = NULL;
+
+ mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
+ ibv_dereg_mr(mr);
+ return 0;
+ }'''))
+endif
+
if get_option('membarrier').disabled()
have_membarrier = false
elif targetos == 'windows'
@@ -2104,7 +2148,7 @@ host_kconfig = \
('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
- ('CONFIG_PVRDMA' in config_host ? ['CONFIG_PVRDMA=y'] : []) + \
+ (have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
(multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : [])
ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ]
@@ -3698,8 +3742,8 @@ summary_info += {'l2tpv3 support': have_l2tpv3}
summary_info += {'Linux AIO support': libaio}
summary_info += {'Linux io_uring support': linux_io_uring}
summary_info += {'ATTR/XATTR support': libattr}
-summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
-summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
+summary_info += {'RDMA support': rdma}
+summary_info += {'PVRDMA support': have_pvrdma}
summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
diff --git a/meson_options.txt b/meson_options.txt
index bd8efe4fbf..c00e0866e9 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -151,6 +151,10 @@ option('rbd', type : 'feature', value : 'auto',
description: 'Ceph block device driver')
option('opengl', type : 'feature', value : 'auto',
description: 'OpenGL support')
+option('rdma', type : 'feature', value : 'auto',
+ description: 'Enable RDMA-based migration')
+option('pvrdma', type : 'feature', value : 'auto',
+ description: 'Enable PVRDMA support')
option('gtk', type : 'feature', value : 'auto',
description: 'GTK+ user interface')
option('sdl', type : 'feature', value : 'auto',
diff --git a/migration/meson.build b/migration/meson.build
index 8b5ca5c047..6880b61b10 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -27,7 +27,7 @@ softmmu_ss.add(files(
'tls.c',
), gnutls)
-softmmu_ss.add(when: ['CONFIG_RDMA', rdma], if_true: files('rdma.c'))
+softmmu_ss.add(when: rdma, if_true: files('rdma.c'))
if get_option('live_block_migration').allowed()
softmmu_ss.add(files('block.c'))
endif
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index f91bd9231b..cd922614e8 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -95,10 +95,12 @@ meson_options_help() {
printf "%s\n" ' oss OSS sound support'
printf "%s\n" ' pa PulseAudio sound support'
printf "%s\n" ' parallels parallels image format support'
+ printf "%s\n" ' pvrdma Enable PVRDMA support'
printf "%s\n" ' qcow1 qcow1 image format support'
printf "%s\n" ' qed qed image format support'
printf "%s\n" ' qga-vss build QGA VSS support (broken with MinGW)'
printf "%s\n" ' rbd Ceph block device driver'
+ printf "%s\n" ' rdma Enable RDMA-based migration'
printf "%s\n" ' replication replication support'
printf "%s\n" ' sdl SDL user interface'
printf "%s\n" ' sdl-image SDL Image support for icons'
@@ -282,6 +284,8 @@ _meson_option_parse() {
--disable-parallels) printf "%s" -Dparallels=disabled ;;
--enable-profiler) printf "%s" -Dprofiler=true ;;
--disable-profiler) printf "%s" -Dprofiler=false ;;
+ --enable-pvrdma) printf "%s" -Dpvrdma=enabled ;;
+ --disable-pvrdma) printf "%s" -Dpvrdma=disabled ;;
--enable-qcow1) printf "%s" -Dqcow1=enabled ;;
--disable-qcow1) printf "%s" -Dqcow1=disabled ;;
--enable-qed) printf "%s" -Dqed=enabled ;;
@@ -292,6 +296,8 @@ _meson_option_parse() {
--disable-qom-cast-debug) printf "%s" -Dqom_cast_debug=false ;;
--enable-rbd) printf "%s" -Drbd=enabled ;;
--disable-rbd) printf "%s" -Drbd=disabled ;;
+ --enable-rdma) printf "%s" -Drdma=enabled ;;
+ --disable-rdma) printf "%s" -Drdma=disabled ;;
--enable-replication) printf "%s" -Dreplication=enabled ;;
--disable-replication) printf "%s" -Dreplication=disabled ;;
--enable-rng-none) printf "%s" -Drng_none=true ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 09/34] meson, configure: move keyctl test to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (7 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 08/34] meson, configure: move RDMA options " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 10/34] meson, configure: move usbfs " Paolo Bonzini
` (24 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 44 -----------------------------------
crypto/meson.build | 4 +++-
meson.build | 15 +++++++++++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
5 files changed, 22 insertions(+), 46 deletions(-)
diff --git a/configure b/configure
index 4deca94235..313579019d 100755
--- a/configure
+++ b/configure
@@ -322,7 +322,6 @@ trace_file="trace"
coroutine=""
tls_priority="NORMAL"
plugins="$default_feature"
-secret_keyring="$default_feature"
meson=""
meson_args=""
ninja=""
@@ -1009,10 +1008,6 @@ for opt do
;;
--gdb=*) gdb_bin="$optarg"
;;
- --enable-keyring) secret_keyring="yes"
- ;;
- --disable-keyring) secret_keyring="no"
- ;;
--enable-gio) gio=yes
;;
--disable-gio) gio=no
@@ -2440,41 +2435,6 @@ case "$slirp" in
;;
esac
-##########################################
-# check for usable __NR_keyctl syscall
-
-if test "$linux" = "yes" ; then
-
- have_keyring=no
- cat > $TMPC << EOF
-#include <errno.h>
-#include <asm/unistd.h>
-#include <linux/keyctl.h>
-#include <unistd.h>
-int main(void) {
- return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
-}
-EOF
- if compile_prog "" "" ; then
- have_keyring=yes
- fi
-fi
-if test "$secret_keyring" != "no"
-then
- if test "$have_keyring" = "yes"
- then
- secret_keyring=yes
- else
- if test "$secret_keyring" = "yes"
- then
- error_exit "syscall __NR_keyctl requested, \
-but not implemented on your system"
- else
- secret_keyring=no
- fi
- fi
-fi
-
##########################################
# End of CC checks
# After here, no more $cc or $ld runs
@@ -2760,10 +2720,6 @@ if test -n "$gdb_bin"; then
fi
fi
-if test "$secret_keyring" = "yes" ; then
- echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
-fi
-
echo "ROMS=$roms" >> $config_host_mak
echo "MAKE=$make" >> $config_host_mak
echo "PYTHON=$python" >> $config_host_mak
diff --git a/crypto/meson.build b/crypto/meson.build
index 19c44bea89..f065f2f277 100644
--- a/crypto/meson.build
+++ b/crypto/meson.build
@@ -34,7 +34,9 @@ else
crypto_ss.add(files('hash-glib.c', 'hmac-glib.c', 'pbkdf-stub.c'))
endif
-crypto_ss.add(when: 'CONFIG_SECRET_KEYRING', if_true: files('secret_keyring.c'))
+if have_keyring
+ crypto_ss.add(files('secret_keyring.c'))
+endif
if have_afalg
crypto_ss.add(if_true: files('afalg.c', 'cipher-afalg.c', 'hash-afalg.c'))
endif
diff --git a/meson.build b/meson.build
index 55ad65ce95..b39b157222 100644
--- a/meson.build
+++ b/meson.build
@@ -1938,6 +1938,19 @@ config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
return getauxval(AT_HWCAP) == 0;
}'''))
+have_keyring = get_option('keyring') \
+ .require(targetos == 'linux', error_message: 'keyring is only available on Linux') \
+ .require(cc.compiles('''
+ #include <errno.h>
+ #include <asm/unistd.h>
+ #include <linux/keyctl.h>
+ #include <sys/syscall.h>
+ #include <unistd.h>
+ int main(void) {
+ return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
+ }'''), error_message: 'keyctl syscall not available on this system').allowed()
+config_host_data.set('CONFIG_SECRET_KEYRING', have_keyring)
+
have_cpuid_h = cc.links('''
#include <cpuid.h>
int main(void) {
@@ -3696,7 +3709,7 @@ if nettle.found()
endif
summary_info += {'AF_ALG support': have_afalg}
summary_info += {'rng-none': get_option('rng_none')}
-summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
+summary_info += {'Linux keyring': have_keyring}
summary(summary_info, bool_yn: true, section: 'Crypto')
# Libraries
diff --git a/meson_options.txt b/meson_options.txt
index c00e0866e9..d58c69315c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -90,6 +90,8 @@ option('avx2', type: 'feature', value: 'auto',
description: 'AVX2 optimizations')
option('avx512f', type: 'feature', value: 'disabled',
description: 'AVX512F optimizations')
+option('keyring', type: 'feature', value: 'auto',
+ description: 'Linux keyring support')
option('attr', type : 'feature', value : 'auto',
description: 'attr/xattr support')
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index cd922614e8..0daeb11fd3 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -68,6 +68,7 @@ meson_options_help() {
printf "%s\n" ' hvf HVF acceleration support'
printf "%s\n" ' iconv Font glyph conversion support'
printf "%s\n" ' jack JACK sound support'
+ printf "%s\n" ' keyring Linux keyring support'
printf "%s\n" ' kvm KVM acceleration support'
printf "%s\n" ' l2tpv3 l2tpv3 network backend support'
printf "%s\n" ' libdaxctl libdaxctl support'
@@ -229,6 +230,8 @@ _meson_option_parse() {
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
--enable-jack) printf "%s" -Djack=enabled ;;
--disable-jack) printf "%s" -Djack=disabled ;;
+ --enable-keyring) printf "%s" -Dkeyring=enabled ;;
+ --disable-keyring) printf "%s" -Dkeyring=disabled ;;
--enable-kvm) printf "%s" -Dkvm=enabled ;;
--disable-kvm) printf "%s" -Dkvm=disabled ;;
--enable-l2tpv3) printf "%s" -Dl2tpv3=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 10/34] meson, configure: move usbfs test to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (8 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 09/34] meson, configure: move keyctl test " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 11/34] meson, configure: move libgio " Paolo Bonzini
` (23 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 28 ----------------------------
meson.build | 13 +++++++++++++
2 files changed, 13 insertions(+), 28 deletions(-)
diff --git a/configure b/configure
index 313579019d..d527a9c22e 100755
--- a/configure
+++ b/configure
@@ -2160,31 +2160,6 @@ case "$fdt" in
;;
esac
-##########################################
-# check for usbfs
-have_usbfs=no
-if test "$linux_user" = "yes"; then
- cat > $TMPC << EOF
-#include <linux/usbdevice_fs.h>
-
-#ifndef USBDEVFS_GET_CAPABILITIES
-#error "USBDEVFS_GET_CAPABILITIES undefined"
-#endif
-
-#ifndef USBDEVFS_DISCONNECT_CLAIM
-#error "USBDEVFS_DISCONNECT_CLAIM undefined"
-#endif
-
-int main(void)
-{
- return 0;
-}
-EOF
- if compile_prog "" ""; then
- have_usbfs=yes
- fi
-fi
-
##########################################
# capstone
@@ -2641,9 +2616,6 @@ fi
if test "$module_upgrades" = "yes"; then
echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
fi
-if test "$have_usbfs" = "yes" ; then
- echo "CONFIG_USBFS=y" >> $config_host_mak
-fi
if test "$gio" = "yes" ; then
echo "CONFIG_GIO=y" >> $config_host_mak
echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
diff --git a/meson.build b/meson.build
index b39b157222..a26eb878ea 100644
--- a/meson.build
+++ b/meson.build
@@ -1938,6 +1938,19 @@ config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
return getauxval(AT_HWCAP) == 0;
}'''))
+config_host_data.set('CONFIG_USBFS', have_linux_user and cc.compiles('''
+ #include <linux/usbdevice_fs.h>
+
+ #ifndef USBDEVFS_GET_CAPABILITIES
+ #error "USBDEVFS_GET_CAPABILITIES undefined"
+ #endif
+
+ #ifndef USBDEVFS_DISCONNECT_CLAIM
+ #error "USBDEVFS_DISCONNECT_CLAIM undefined"
+ #endif
+
+ int main(void) { return 0; }'''))
+
have_keyring = get_option('keyring') \
.require(targetos == 'linux', error_message: 'keyring is only available on Linux') \
.require(cc.compiles('''
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 11/34] meson, configure: move libgio test to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (9 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 10/34] meson, configure: move usbfs " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 12/34] meson: remove CONFIG_XEN_PCI_PASSTHROUGH from config-target.h Paolo Bonzini
` (22 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
backends/meson.build | 2 +-
configure | 58 -----------------------------------
meson.build | 32 ++++++++++++++++---
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 ++
tests/qtest/meson.build | 5 ++-
ui/meson.build | 7 ++---
util/meson.build | 2 +-
8 files changed, 39 insertions(+), 72 deletions(-)
diff --git a/backends/meson.build b/backends/meson.build
index 6e68945528..535c3ca7dd 100644
--- a/backends/meson.build
+++ b/backends/meson.build
@@ -15,7 +15,7 @@ softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('hostmem-memfd.c'))
softmmu_ss.add(when: ['CONFIG_VHOST_USER', 'CONFIG_VIRTIO'], if_true: files('vhost-user.c'))
softmmu_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost.c'))
softmmu_ss.add(when: ['CONFIG_VIRTIO_CRYPTO', 'CONFIG_VHOST_CRYPTO'], if_true: files('cryptodev-vhost-user.c'))
-softmmu_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus-vmstate.c'), gio])
+softmmu_ss.add(when: gio, if_true: files('dbus-vmstate.c'))
softmmu_ss.add(when: 'CONFIG_SGX', if_true: files('hostmem-epc.c'))
subdir('tpm')
diff --git a/configure b/configure
index d527a9c22e..1fb70bf614 100755
--- a/configure
+++ b/configure
@@ -325,7 +325,6 @@ plugins="$default_feature"
meson=""
meson_args=""
ninja=""
-gio="$default_feature"
skip_meson=no
# The following Meson options are handled manually (still they
@@ -1008,10 +1007,6 @@ for opt do
;;
--gdb=*) gdb_bin="$optarg"
;;
- --enable-gio) gio=yes
- ;;
- --disable-gio) gio=no
- ;;
# backwards compatibility options
--enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
;;
@@ -1236,7 +1231,6 @@ cat << EOF
vhost-kernel vhost kernel backend support
vhost-user vhost-user backend support
vhost-vdpa vhost-vdpa kernel backend support
- gio libgio support
NOTE: The object files are built at the place where configure is launched
EOF
@@ -2047,50 +2041,6 @@ if test "$static" = yes && test "$mingw32" = yes; then
glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
fi
-if ! test "$gio" = "no"; then
- pass=no
- if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
- gio_cflags=$($pkg_config --cflags gio-2.0)
- gio_libs=$($pkg_config --libs gio-2.0)
- gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
- if ! has "$gdbus_codegen"; then
- gdbus_codegen=
- fi
- # Check that the libraries actually work -- Ubuntu 18.04 ships
- # with pkg-config --static --libs data for gio-2.0 that is missing
- # -lblkid and will give a link error.
- cat > $TMPC <<EOF
-#include <gio/gio.h>
-int main(void)
-{
- g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
- return 0;
-}
-EOF
- if compile_prog "$gio_cflags" "$gio_libs" ; then
- pass=yes
- else
- pass=no
- fi
-
- if test "$pass" = "yes" &&
- $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
- gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
- gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
- fi
- fi
-
- if test "$pass" = "no"; then
- if test "$gio" = "yes"; then
- feature_not_found "gio" "Install libgio >= 2.0"
- else
- gio=no
- fi
- else
- gio=yes
- fi
-fi
-
# Sanity check that the current size_t matches the
# size that glib thinks it should be. This catches
# problems on multi-arch where people try to build
@@ -2616,14 +2566,6 @@ fi
if test "$module_upgrades" = "yes"; then
echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
fi
-if test "$gio" = "yes" ; then
- echo "CONFIG_GIO=y" >> $config_host_mak
- echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
- echo "GIO_LIBS=$gio_libs" >> $config_host_mak
-fi
-if test "$gdbus_codegen" != "" ; then
- echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
-fi
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
if test "$xen" = "enabled" ; then
diff --git a/meson.build b/meson.build
index a26eb878ea..e6015fcae4 100644
--- a/meson.build
+++ b/meson.build
@@ -448,11 +448,32 @@ glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
meson.override_dependency('glib-2.0', glib)
gio = not_found
-if 'CONFIG_GIO' in config_host
- gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
- link_args: config_host['GIO_LIBS'].split(),
- version: config_host['GLIB_VERSION'])
+gdbus_codegen = not_found
+if not get_option('gio').auto() or have_system
+ gio = dependency('gio-2.0', required: get_option('gio'),
+ method: 'pkg-config', kwargs: static_kwargs)
+ if gio.found() and not cc.links('''
+ #include <gio/gio.h>
+ int main(void)
+ {
+ g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
+ return 0;
+ }''', dependencies: [glib, gio])
+ if get_option('gio').enabled()
+ error('The installed libgio is broken for static linking')
+ endif
+ gio = not_found
+ endif
+ if gio.found()
+ gdbus_codegen = find_program(gio.get_variable('gdbus_codegen'),
+ required: get_option('gio'))
+ gio_unix = dependency('gio-unix-2.0', required: get_option('gio'),
+ method: 'pkg-config', kwargs: static_kwargs)
+ gio = declare_dependency(dependencies: [gio, gio_unix],
+ version: gio.version())
+ endif
endif
+
lttng = not_found
if 'ust' in get_option('trace_backends')
lttng = dependency('lttng-ust', required: true, version: '>= 2.1',
@@ -1478,7 +1499,7 @@ dbus_display = get_option('dbus_display') \
error_message: '-display dbus requires glib>=2.64') \
.require(enable_modules,
error_message: '-display dbus requires --enable-modules') \
- .require(config_host.has_key('GDBUS_CODEGEN'),
+ .require(gdbus_codegen.found(),
error_message: '-display dbus requires gdbus-codegen') \
.allowed()
@@ -1540,6 +1561,7 @@ config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
config_host_data.set('CONFIG_CURL', curl.found())
config_host_data.set('CONFIG_CURSES', curses.found())
config_host_data.set('CONFIG_GBM', gbm.found())
+config_host_data.set('CONFIG_GIO', gio.found())
config_host_data.set('CONFIG_GLUSTERFS', glusterfs.found())
if glusterfs.found()
config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', glusterfs.version().version_compare('>=4'))
diff --git a/meson_options.txt b/meson_options.txt
index d58c69315c..d140c0ef89 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -109,6 +109,8 @@ option('cocoa', type : 'feature', value : 'auto',
description: 'Cocoa user interface (macOS only)')
option('curl', type : 'feature', value : 'auto',
description: 'CURL block device driver')
+option('gio', type : 'feature', value : 'auto',
+ description: 'use libgio for D-Bus support')
option('glusterfs', type : 'feature', value : 'auto',
description: 'Glusterfs block device driver')
option('libiscsi', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 0daeb11fd3..92be3e6187 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -59,6 +59,7 @@ meson_options_help() {
printf "%s\n" ' fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports'
printf "%s\n" ' gcrypt libgcrypt cryptography support'
printf "%s\n" ' gettext Localization of the GTK+ user interface'
+ printf "%s\n" ' gio use libgio for D-Bus support'
printf "%s\n" ' glusterfs Glusterfs block device driver'
printf "%s\n" ' gnutls GNUTLS cryptography support'
printf "%s\n" ' gtk GTK+ user interface'
@@ -208,6 +209,8 @@ _meson_option_parse() {
--disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
--enable-gettext) printf "%s" -Dgettext=enabled ;;
--disable-gettext) printf "%s" -Dgettext=disabled ;;
+ --enable-gio) printf "%s" -Dgio=enabled ;;
+ --disable-gio) printf "%s" -Dgio=disabled ;;
--enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
--disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
--enable-gnutls) printf "%s" -Dgnutls=enabled ;;
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 22e1361210..6b9807c183 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -98,14 +98,13 @@ if dbus_display
endif
dbus_daemon = find_program('dbus-daemon', required: false)
-if dbus_daemon.found() and config_host.has_key('GDBUS_CODEGEN')
+if dbus_daemon.found() and gdbus_codegen.found()
# Temporarily disabled due to Patchew failures:
#qtests_i386 += ['dbus-vmstate-test']
dbus_vmstate1 = custom_target('dbus-vmstate description',
output: ['dbus-vmstate1.h', 'dbus-vmstate1.c'],
input: meson.project_source_root() / 'backends/dbus-vmstate1.xml',
- command: [config_host['GDBUS_CODEGEN'],
- '@INPUT@',
+ command: [gdbus_codegen, '@INPUT@',
'--interface-prefix', 'org.qemu',
'--generate-c-code', '@BASENAME@']).to_list()
else
diff --git a/ui/meson.build b/ui/meson.build
index b21d3d1534..eba93b41e3 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -74,14 +74,13 @@ if dbus_display
dbus_display1 = custom_target('dbus-display gdbus-codegen',
output: ['dbus-display1.h', 'dbus-display1.c'],
input: files('dbus-display1.xml'),
- command: [config_host['GDBUS_CODEGEN'],
- '@INPUT@',
+ command: [gdbus_codegen, '@INPUT@',
'--glib-min-required', '2.64',
'--output-directory', meson.current_build_dir(),
'--interface-prefix', 'org.qemu.',
'--c-namespace', 'QemuDBus',
'--generate-c-code', '@BASENAME@'])
- dbus_ss.add(when: [gio, pixman, opengl, 'CONFIG_GIO'],
+ dbus_ss.add(when: [gio, pixman, opengl],
if_true: [files(
'dbus-chardev.c',
'dbus-clipboard.c',
@@ -128,7 +127,7 @@ if spice.found()
ui_modules += {'spice-core' : spice_core_ss}
endif
-if spice.found() and config_host.has_key('CONFIG_GIO')
+if spice.found() and gio.found()
spice_ss = ss.source_set()
spice_ss.add(spice, gio, pixman, files('spice-app.c'))
ui_modules += {'spice-app': spice_ss}
diff --git a/util/meson.build b/util/meson.build
index 82eec004e2..8f16018cd4 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -61,7 +61,7 @@ endif
if have_system
util_ss.add(files('crc-ccitt.c'))
- util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio])
+ util_ss.add(when: gio, if_true: files('dbus.c'))
util_ss.add(when: 'CONFIG_LINUX', if_true: files('userfaultfd.c'))
endif
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 12/34] meson: remove CONFIG_XEN_PCI_PASSTHROUGH from config-target.h
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (10 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 11/34] meson, configure: move libgio " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 13/34] meson, configure: move --enable-module-upgrades to meson Paolo Bonzini
` (21 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
CONFIG_XEN_PCI_PASSTHROUGH is just a global configuration option;
it is never used in the source files, so there is no need to put
CONFIG_XEN_PCI_PASSTHROUGH in config-target.h or even in config-host.h.
This inaccuracy was copied over from the configure script in commit
8a19980e3f ("configure: move accelerator logic to meson", 2020-10-03).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
v1->v2: remove CONFIG_XEN_PCI_PASSTHROUGH symbol
hw/xen/meson.build | 20 ++++++++++++--------
meson.build | 2 --
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/hw/xen/meson.build b/hw/xen/meson.build
index 076954b89c..08dc1f6857 100644
--- a/hw/xen/meson.build
+++ b/hw/xen/meson.build
@@ -8,13 +8,17 @@ softmmu_ss.add(when: ['CONFIG_XEN', xen], if_true: files(
))
xen_specific_ss = ss.source_set()
-xen_specific_ss.add(when: 'CONFIG_XEN_PCI_PASSTHROUGH', if_true: files(
- 'xen-host-pci-device.c',
- 'xen_pt.c',
- 'xen_pt_config_init.c',
- 'xen_pt_graphics.c',
- 'xen_pt_load_rom.c',
- 'xen_pt_msi.c',
-), if_false: files('xen_pt_stub.c'))
+if have_xen_pci_passthrough
+ xen_specific_ss.add(files(
+ 'xen-host-pci-device.c',
+ 'xen_pt.c',
+ 'xen_pt_config_init.c',
+ 'xen_pt_graphics.c',
+ 'xen_pt_load_rom.c',
+ 'xen_pt_msi.c',
+ ))
+else
+ xen_specific_ss.add('xen_pt_stub.c')
+endif
specific_ss.add_all(when: ['CONFIG_XEN', xen], if_true: xen_specific_ss)
diff --git a/meson.build b/meson.build
index e6015fcae4..19032a829b 100644
--- a/meson.build
+++ b/meson.build
@@ -2240,8 +2240,6 @@ foreach target : target_dirs
config_all += { sym: 'y' }
if sym == 'CONFIG_TCG' and tcg_arch == 'tci'
config_target += { 'CONFIG_TCG_INTERPRETER': 'y' }
- elif sym == 'CONFIG_XEN' and have_xen_pci_passthrough
- config_target += { 'CONFIG_XEN_PCI_PASSTHROUGH': 'y' }
endif
if target in modular_tcg
config_target += { 'CONFIG_TCG_MODULAR': 'y' }
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 13/34] meson, configure: move --enable-module-upgrades to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (11 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 12/34] meson: remove CONFIG_XEN_PCI_PASSTHROUGH from config-target.h Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 14/34] meson, configure: move Xen detection " Paolo Bonzini
` (20 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 14 --------------
meson.build | 7 ++++++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 4 ++++
4 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index 1fb70bf614..59c43bea05 100755
--- a/configure
+++ b/configure
@@ -310,7 +310,6 @@ fortify_source="yes"
gcov="no"
EXESUF=""
modules="no"
-module_upgrades="no"
prefix="/usr/local"
qemu_suffix="qemu"
softmmu="yes"
@@ -762,10 +761,6 @@ for opt do
--disable-modules)
modules="no"
;;
- --disable-module-upgrades) module_upgrades="no"
- ;;
- --enable-module-upgrades) module_upgrades="yes"
- ;;
--cpu=*)
;;
--target-list=*) target_list="$optarg"
@@ -1218,7 +1213,6 @@ cat << EOF
bsd-user all BSD usermode emulation targets
pie Position Independent Executables
modules modules support (non-Windows)
- module-upgrades try to load modules from alternate paths for upgrades
debug-tcg TCG debugging (default is disabled)
debug-info debugging information
lto Enable Link-Time Optimization.
@@ -1487,11 +1481,6 @@ if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
error_exit "Modules are not available for Windows"
fi
-# module_upgrades is only reasonable if modules are enabled
-if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
- error_exit "Can't enable module-upgrades as Modules are not enabled"
-fi
-
# Static linking is not possible with plugins, modules or PIE
if test "$static" = "yes" ; then
if test "$modules" = "yes" ; then
@@ -2563,9 +2552,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$module_upgrades" = "yes"; then
- echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
-fi
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
if test "$xen" = "enabled" ; then
diff --git a/meson.build b/meson.build
index 19032a829b..77045cf7d4 100644
--- a/meson.build
+++ b/meson.build
@@ -1548,6 +1548,11 @@ endif
config_host_data.set('HOST_' + host_arch.to_upper(), 1)
+if get_option('module_upgrades') and not enable_modules
+ error('Cannot enable module-upgrades as modules are not enabled')
+endif
+config_host_data.set('CONFIG_MODULE_UPGRADES', get_option('module_upgrades'))
+
config_host_data.set('CONFIG_ATTR', libattr.found())
config_host_data.set('CONFIG_BDRV_WHITELIST_TOOLS', get_option('block_drv_whitelist_in_tools'))
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
@@ -3574,7 +3579,7 @@ summary_info += {'block layer': have_block}
summary_info += {'Install blobs': get_option('install_blobs')}
summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
if config_host.has_key('CONFIG_MODULES')
- summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
+ summary_info += {'alternative module path': get_option('module_upgrades')}
endif
summary_info += {'fuzzing support': get_option('fuzzing')}
if have_system
diff --git a/meson_options.txt b/meson_options.txt
index d140c0ef89..cf18663833 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -34,6 +34,8 @@ option('fuzzing', type : 'boolean', value: false,
description: 'build fuzzing targets')
option('gettext', type : 'feature', value : 'auto',
description: 'Localization of the GTK+ user interface')
+option('module_upgrades', type : 'boolean', value : false,
+ description: 'try to load modules from alternate paths for upgrades')
option('install_blobs', type : 'boolean', value : true,
description: 'install provided firmware blobs')
option('sparse', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 92be3e6187..a269534394 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -19,6 +19,8 @@ meson_options_help() {
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
printf "%s\n" ' jemalloc/system/tcmalloc)'
+ printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
+ printf "%s\n" ' upgrades'
printf "%s\n" ' --enable-profiler profiler support'
printf "%s\n" ' --enable-qom-cast-debug cast debugging support'
printf "%s\n" ' --enable-rng-none dummy RNG, avoid using /dev/(u)random and'
@@ -268,6 +270,8 @@ _meson_option_parse() {
--disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
--enable-membarrier) printf "%s" -Dmembarrier=enabled ;;
--disable-membarrier) printf "%s" -Dmembarrier=disabled ;;
+ --enable-module-upgrades) printf "%s" -Dmodule_upgrades=true ;;
+ --disable-module-upgrades) printf "%s" -Dmodule_upgrades=false ;;
--enable-mpath) printf "%s" -Dmpath=enabled ;;
--disable-mpath) printf "%s" -Dmpath=disabled ;;
--enable-multiprocess) printf "%s" -Dmultiprocess=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 14/34] meson, configure: move Xen detection to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (12 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 13/34] meson, configure: move --enable-module-upgrades to meson Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 15/34] meson-buildoptions: add support for string options Paolo Bonzini
` (19 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
This is quite a complicated check. I moved all the test programs to
a single file in scripts/, picking the right program with #if and a -D
flag in meson.build's cc.links() invocation.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 322 +------------------------------------------
meson.build | 112 ++++++++++++---
scripts/xen-detect.c | 203 +++++++++++++++++++++++++++
3 files changed, 296 insertions(+), 341 deletions(-)
create mode 100644 scripts/xen-detect.c
diff --git a/configure b/configure
index 59c43bea05..a3ac5af863 100755
--- a/configure
+++ b/configure
@@ -292,7 +292,6 @@ EXTRA_CXXFLAGS=""
EXTRA_OBJCFLAGS=""
EXTRA_LDFLAGS=""
-xen_ctrl_version="$default_feature"
vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
@@ -346,9 +345,6 @@ default_devices="true"
tcg="enabled"
cfi="false"
-# 4. Detection partly done in configure
-xen=${default_feature:+disabled}
-
# parse CC options second
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
@@ -866,10 +862,6 @@ for opt do
;;
--enable-slirp=*) slirp="$optarg"
;;
- --disable-xen) xen="disabled"
- ;;
- --enable-xen) xen="enabled"
- ;;
--disable-tcg) tcg="disabled"
plugins="no"
;;
@@ -1697,312 +1689,6 @@ if ! has "$pkg_config_exe"; then
error_exit "pkg-config binary '$pkg_config_exe' not found"
fi
-##########################################
-# xen probe
-
-if test "$xen" != "disabled" ; then
- # Check whether Xen library path is specified via --extra-ldflags to avoid
- # overriding this setting with pkg-config output. If not, try pkg-config
- # to obtain all needed flags.
-
- if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
- $pkg_config --exists xencontrol ; then
- xen_ctrl_version="$(printf '%d%02d%02d' \
- $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
- xen=enabled
- xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
- xen_pc="$xen_pc xenevtchn xendevicemodel"
- if $pkg_config --exists xentoolcore; then
- xen_pc="$xen_pc xentoolcore"
- fi
- xen_cflags="$($pkg_config --cflags $xen_pc)"
- xen_libs="$($pkg_config --libs $xen_pc)"
- else
-
- xen_libs="-lxenstore -lxenctrl"
- xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
-
- # First we test whether Xen headers and libraries are available.
- # If no, we are done and there is no Xen support.
- # If yes, more tests are run to detect the Xen version.
-
- # Xen (any)
- cat > $TMPC <<EOF
-#include <xenctrl.h>
-int main(void) {
- return 0;
-}
-EOF
- if ! compile_prog "" "$xen_libs" ; then
- # Xen not found
- if test "$xen" = "enabled" ; then
- feature_not_found "xen" "Install xen devel"
- fi
- xen=disabled
-
- # Xen unstable
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_DEVICEMODEL_API
-#define __XEN_TOOLS__
-#include <xendevicemodel.h>
-#include <xenforeignmemory.h>
-int main(void) {
- xendevicemodel_handle *xd;
- xenforeignmemory_handle *xfmem;
-
- xd = xendevicemodel_open(0, 0);
- xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
- xen_ctrl_version=41100
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenforeignmemory.h>
-#include <xentoolcore.h>
-int main(void) {
- xenforeignmemory_handle *xfmem;
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
- xentoolcore_restrict_all(0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
- xen_ctrl_version=41000
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_DEVICEMODEL_API
-#define __XEN_TOOLS__
-#include <xendevicemodel.h>
-int main(void) {
- xendevicemodel_handle *xd;
-
- xd = xendevicemodel_open(0, 0);
- xendevicemodel_close(xd);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs"
- xen_ctrl_version=40900
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-/*
- * If we have stable libs the we don't want the libxc compat
- * layers, regardless of what CFLAGS we may have been given.
- *
- * Also, check if xengnttab_grant_copy_segment_t is defined and
- * grant copy operation is implemented.
- */
-#undef XC_WANT_COMPAT_EVTCHN_API
-#undef XC_WANT_COMPAT_GNTTAB_API
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <xenevtchn.h>
-#include <xengnttab.h>
-#include <xenforeignmemory.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc = NULL;
- xenforeignmemory_handle *xfmem;
- xenevtchn_handle *xe;
- xengnttab_handle *xg;
- xengnttab_grant_copy_segment_t* seg = NULL;
-
- xs_daemon_open();
-
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
-
- xe = xenevtchn_open(0, 0);
- xenevtchn_fd(xe);
-
- xg = xengnttab_open(0, 0);
- xengnttab_grant_copy(xg, 0, seg);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs $xen_stable_libs"
- then
- xen_ctrl_version=40800
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-/*
- * If we have stable libs the we don't want the libxc compat
- * layers, regardless of what CFLAGS we may have been given.
- */
-#undef XC_WANT_COMPAT_EVTCHN_API
-#undef XC_WANT_COMPAT_GNTTAB_API
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <xenevtchn.h>
-#include <xengnttab.h>
-#include <xenforeignmemory.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc = NULL;
- xenforeignmemory_handle *xfmem;
- xenevtchn_handle *xe;
- xengnttab_handle *xg;
-
- xs_daemon_open();
-
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
-
- xe = xenevtchn_open(0, 0);
- xenevtchn_fd(xe);
-
- xg = xengnttab_open(0, 0);
- xengnttab_map_grant_ref(xg, 0, 0, 0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs $xen_stable_libs"
- then
- xen_ctrl_version=40701
- xen=enabled
-
- # Xen 4.6
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
- xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40600
- xen=enabled
-
- # Xen 4.5
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40500
- xen=enabled
-
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40200
- xen=enabled
-
- else
- if test "$xen" = "enabled" ; then
- feature_not_found "xen (unsupported version)" \
- "Install a supported xen (xen 4.2 or newer)"
- fi
- xen=disabled
- fi
-
- if test "$xen" = enabled; then
- if test $xen_ctrl_version -ge 40701 ; then
- xen_libs="$xen_libs $xen_stable_libs "
- fi
- fi
- fi
-fi
-
##########################################
# glib support probe
@@ -2554,12 +2240,6 @@ if test "$modules" = "yes"; then
fi
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
-if test "$xen" = "enabled" ; then
- echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
- echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
- echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
- echo "XEN_LIBS=$xen_libs" >> $config_host_mak
-fi
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
@@ -2837,7 +2517,7 @@ if test "$skip_meson" = no; then
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
- -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
+ -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg \
-Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
diff --git a/meson.build b/meson.build
index 77045cf7d4..47e874f0c3 100644
--- a/meson.build
+++ b/meson.build
@@ -348,12 +348,6 @@ accelerators = []
if get_option('kvm').allowed() and targetos == 'linux'
accelerators += 'CONFIG_KVM'
endif
-if get_option('xen').allowed() and 'CONFIG_XEN_BACKEND' in config_host
- accelerators += 'CONFIG_XEN'
- have_xen_pci_passthrough = get_option('xen_pci_passthrough').allowed() and targetos == 'linux'
-else
- have_xen_pci_passthrough = false
-endif
if get_option('whpx').allowed() and targetos == 'windows'
if get_option('whpx').enabled() and host_machine.cpu() != 'x86_64'
error('WHPX requires 64-bit host')
@@ -425,13 +419,6 @@ endif
if 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled()
error('WHPX not available on this platform')
endif
-if not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled()
- if 'CONFIG_XEN' in accelerators
- error('Xen PCI passthrough not available on this platform')
- else
- error('Xen PCI passthrough requested but Xen not enabled')
- endif
-endif
################
# Dependencies #
@@ -1255,10 +1242,86 @@ if not get_option('rdma').auto() or have_system
endif
xen = not_found
-if 'CONFIG_XEN_BACKEND' in config_host
- xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
- link_args: config_host['XEN_LIBS'].split())
+if get_option('xen').enabled() or (get_option('xen').auto() and have_system)
+ xencontrol = dependency('xencontrol', required: false,
+ method: 'pkg-config', kwargs: static_kwargs)
+ if xencontrol.found()
+ xen_pc = declare_dependency(version: xencontrol.version(),
+ dependencies: [
+ xencontrol,
+ # disabler: true makes xen_pc.found() return false if any is not found
+ dependency('xenstore', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xenforeignmemory', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xengnttab', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xenevtchn', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xendevicemodel', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ # optional, no "disabler: true"
+ dependency('xentoolcore', required: false,
+ method: 'pkg-config', kwargs: static_kwargs)])
+ if xen_pc.found()
+ xen = xen_pc
+ endif
+ endif
+ if not xen.found()
+ xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1', '4.6.0', '4.5.0', '4.2.0' ]
+ xen_libs = {
+ '4.11.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
+ '4.10.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
+ '4.9.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.8.0': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.7.1': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.6.0': [ 'xenstore', 'xenctrl' ],
+ '4.5.0': [ 'xenstore', 'xenctrl' ],
+ '4.2.0': [ 'xenstore', 'xenctrl' ],
+ }
+ xen_deps = {}
+ foreach ver: xen_tests
+ # cache the various library tests to avoid polluting the logs
+ xen_test_deps = []
+ foreach l: xen_libs[ver]
+ if l not in xen_deps
+ xen_deps += { l: cc.find_library(l, required: false) }
+ endif
+ xen_test_deps += xen_deps[l]
+ endforeach
+
+ # Use -D to pick just one of the test programs in scripts/xen-detect.c
+ xen_version = ver.split('.')
+ xen_ctrl_version = xen_version[0] + \
+ ('0' + xen_version[1]).substring(-2) + \
+ ('0' + xen_version[2]).substring(-2)
+ if cc.links(files('scripts/xen-detect.c'),
+ args: '-DCONFIG_XEN_CTRL_INTERFACE_VERSION=' + xen_ctrl_version,
+ dependencies: xen_test_deps)
+ xen = declare_dependency(version: ver, dependencies: xen_test_deps)
+ break
+ endif
+ endforeach
+ endif
+ if xen.found()
+ accelerators += 'CONFIG_XEN'
+ elif get_option('xen').enabled()
+ error('could not compile and link Xen test program')
+ endif
endif
+have_xen_pci_passthrough = get_option('xen_pci_passthrough') \
+ .require(xen.found(),
+ error_message: 'Xen PCI passthrough requested but Xen not enabled') \
+ .require(targetos == 'linux',
+ error_message: 'Xen PCI passthrough not available on this platform') \
+ .allowed()
+
+
cacard = not_found
if not get_option('smartcard').auto() or have_system
cacard = dependency('libcacard', required: get_option('smartcard'),
@@ -1632,6 +1695,15 @@ config_host_data.set('CONFIG_X11', x11.found())
config_host_data.set('CONFIG_DBUS_DISPLAY', dbus_display)
config_host_data.set('CONFIG_CFI', get_option('cfi'))
config_host_data.set('CONFIG_SELINUX', selinux.found())
+config_host_data.set('CONFIG_XEN_BACKEND', xen.found())
+if xen.found()
+ # protect from xen.version() having less than three components
+ xen_version = xen.version().split('.') + ['0', '0']
+ xen_ctrl_version = xen_version[0] + \
+ ('0' + xen_version[1]).substring(-2) + \
+ ('0' + xen_version[2]).substring(-2)
+ config_host_data.set('CONFIG_XEN_CTRL_INTERFACE_VERSION', xen_ctrl_version)
+endif
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
@@ -2356,7 +2428,7 @@ config_all += config_all_devices
config_all += config_host
config_all += config_all_disas
config_all += {
- 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
+ 'CONFIG_XEN': xen.found(),
'CONFIG_SOFTMMU': have_system,
'CONFIG_USER_ONLY': have_user,
'CONFIG_ALL': true,
@@ -3687,9 +3759,9 @@ if have_system
summary_info += {'HVF support': config_all.has_key('CONFIG_HVF')}
summary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')}
summary_info += {'NVMM support': config_all.has_key('CONFIG_NVMM')}
- summary_info += {'Xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
- if config_host.has_key('CONFIG_XEN_BACKEND')
- summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
+ summary_info += {'Xen support': xen.found()}
+ if xen.found()
+ summary_info += {'xen ctrl version': xen.version()}
endif
endif
summary_info += {'TCG support': config_all.has_key('CONFIG_TCG')}
diff --git a/scripts/xen-detect.c b/scripts/xen-detect.c
new file mode 100644
index 0000000000..85e8206490
--- /dev/null
+++ b/scripts/xen-detect.c
@@ -0,0 +1,203 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/* Test programs for various Xen versions that QEMU supports. */
+#if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
+ #undef XC_WANT_COMPAT_DEVICEMODEL_API
+ #define __XEN_TOOLS__
+ #include <xendevicemodel.h>
+ #include <xenforeignmemory.h>
+ int main(void) {
+ xendevicemodel_handle *xd;
+ xenforeignmemory_handle *xfmem;
+
+ xd = xendevicemodel_open(0, 0);
+ xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenforeignmemory.h>
+ #include <xentoolcore.h>
+ int main(void) {
+ xenforeignmemory_handle *xfmem;
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
+ xentoolcore_restrict_all(0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
+ #undef XC_WANT_COMPAT_DEVICEMODEL_API
+ #define __XEN_TOOLS__
+ #include <xendevicemodel.h>
+ int main(void) {
+ xendevicemodel_handle *xd;
+
+ xd = xendevicemodel_open(0, 0);
+ xendevicemodel_close(xd);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
+ /*
+ * If we have stable libs the we don't want the libxc compat
+ * layers, regardless of what CFLAGS we may have been given.
+ *
+ * Also, check if xengnttab_grant_copy_segment_t is defined and
+ * grant copy operation is implemented.
+ */
+ #undef XC_WANT_COMPAT_EVTCHN_API
+ #undef XC_WANT_COMPAT_GNTTAB_API
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <xenevtchn.h>
+ #include <xengnttab.h>
+ #include <xenforeignmemory.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc = NULL;
+ xenforeignmemory_handle *xfmem;
+ xenevtchn_handle *xe;
+ xengnttab_handle *xg;
+ xengnttab_grant_copy_segment_t* seg = NULL;
+
+ xs_daemon_open();
+
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
+
+ xe = xenevtchn_open(0, 0);
+ xenevtchn_fd(xe);
+
+ xg = xengnttab_open(0, 0);
+ xengnttab_grant_copy(xg, 0, seg);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
+ /*
+ * If we have stable libs the we don't want the libxc compat
+ * layers, regardless of what CFLAGS we may have been given.
+ */
+ #undef XC_WANT_COMPAT_EVTCHN_API
+ #undef XC_WANT_COMPAT_GNTTAB_API
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <xenevtchn.h>
+ #include <xengnttab.h>
+ #include <xenforeignmemory.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc = NULL;
+ xenforeignmemory_handle *xfmem;
+ xenevtchn_handle *xe;
+ xengnttab_handle *xg;
+
+ xs_daemon_open();
+
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
+
+ xe = xenevtchn_open(0, 0);
+ xenevtchn_fd(xe);
+
+ xg = xengnttab_open(0, 0);
+ xengnttab_map_grant_ref(xg, 0, 0, 0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+ xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ return 0;
+ }
+
+#else
+#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
+#endif
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 15/34] meson-buildoptions: add support for string options
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (13 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 14/34] meson, configure: move Xen detection " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 16/34] configure, meson: move iasl detection to meson Paolo Bonzini
` (18 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Allow using the buildoptions.json file for more options, namely anything
that is not a boolean or multiple-choice.
The mapping between configure and meson is messy for string options,
so allow configure to use to something other than the name in
meson_options.txt. This will come in handy anyway for builtin
Meson options such as b_lto or b_coverage.
Tested-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson_options.txt | 2 +-
scripts/meson-buildoptions.py | 65 ++++++++++++++++++++++++++++++-----
scripts/meson-buildoptions.sh | 6 ++--
3 files changed, 60 insertions(+), 13 deletions(-)
diff --git a/meson_options.txt b/meson_options.txt
index cf18663833..415fcc448e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -11,7 +11,7 @@ option('qemu_firmwarepath', type : 'string', value : '',
option('smbd', type : 'string', value : '',
description: 'Path to smbd for slirp networking')
option('sphinx_build', type : 'string', value : '',
- description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
+ description: 'Use specified sphinx-build for building document')
option('iasl', type : 'string', value : '',
description: 'Path to ACPI disassembler')
option('default_devices', type : 'boolean', value : true,
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 693be7b966..4af8d6e732 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -38,6 +38,11 @@
"trace_file",
}
+OPTION_NAMES = {
+ "malloc": "enable-malloc",
+ "trace_backends": "enable-trace-backends",
+}
+
BUILTIN_OPTIONS = {
"strip",
}
@@ -75,7 +80,7 @@ def help_line(left, opt, indent, long):
right = f'{opt["description"]}'
if long:
value = value_to_help(opt["value"])
- if value != "auto":
+ if value != "auto" and value != "":
right += f" [{value}]"
if "choices" in opt and long:
choices = "/".join(sorted(opt["choices"]))
@@ -96,6 +101,18 @@ def allow_arg(opt):
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
+# Return whether the option (a dictionary) can be used without
+# arguments. Booleans can only be used without arguments;
+# combos require an argument if they accept neither "enabled"
+# nor "disabled"
+def require_arg(opt):
+ if opt["type"] == "boolean":
+ return False
+ if opt["type"] != "combo":
+ return True
+ return not ({"enabled", "disabled"}.intersection(opt["choices"]))
+
+
def filter_options(json):
if ":" in json["name"]:
return False
@@ -110,20 +127,48 @@ def load_options(json):
return sorted(json, key=lambda x: x["name"])
+def cli_option(opt):
+ name = opt["name"]
+ if name in OPTION_NAMES:
+ return OPTION_NAMES[name]
+ return name.replace("_", "-")
+
+
+def cli_help_key(opt):
+ key = cli_option(opt)
+ if require_arg(opt):
+ return key
+ if opt["type"] == "boolean" and opt["value"]:
+ return f"disable-{key}"
+ return f"enable-{key}"
+
+
+def cli_metavar(opt):
+ if opt["type"] == "string":
+ return "VALUE"
+ if opt["type"] == "array":
+ return "CHOICES"
+ return "CHOICE"
+
+
def print_help(options):
print("meson_options_help() {")
- for opt in options:
- key = opt["name"].replace("_", "-")
+ for opt in sorted(options, key=cli_help_key):
+ key = cli_help_key(opt)
# The first section includes options that have an arguments,
# and booleans (i.e., only one of enable/disable makes sense)
- if opt["type"] == "boolean":
- left = f"--disable-{key}" if opt["value"] else f"--enable-{key}"
+ if require_arg(opt):
+ metavar = cli_metavar(opt)
+ left = f"--{key}={metavar}"
+ help_line(left, opt, 27, True)
+ elif opt["type"] == "boolean":
+ left = f"--{key}"
help_line(left, opt, 27, False)
elif allow_arg(opt):
if opt["type"] == "combo" and "enabled" in opt["choices"]:
- left = f"--enable-{key}[=CHOICE]"
+ left = f"--{key}[=CHOICE]"
else:
- left = f"--enable-{key}=CHOICE"
+ left = f"--{key}=CHOICE"
help_line(left, opt, 27, True)
sh_print()
@@ -142,9 +187,11 @@ def print_parse(options):
print("_meson_option_parse() {")
print(" case $1 in")
for opt in options:
- key = opt["name"].replace("_", "-")
+ key = cli_option(opt)
name = opt["name"]
- if opt["type"] == "boolean":
+ if require_arg(opt):
+ print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
+ elif opt["type"] == "boolean":
print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
else:
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index a269534394..5a06b7915c 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -1,5 +1,7 @@
# This file is generated by meson-buildoptions.py, do not edit!
meson_options_help() {
+ printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
+ printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
printf "%s\n" ' use block whitelist also in tools instead of only'
printf "%s\n" ' QEMU'
@@ -8,7 +10,6 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-cfi Control-Flow Integrity (CFI)'
printf "%s\n" ' --enable-cfi-debug Verbose errors in case of CFI violation'
- printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
printf "%s\n" ' --enable-debug-stack-usage'
printf "%s\n" ' measure coroutine stack usage'
@@ -16,7 +17,6 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
printf "%s\n" ' --enable-gprof QEMU profiling with gprof'
- printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
printf "%s\n" ' jemalloc/system/tcmalloc)'
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
@@ -29,7 +29,7 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-strip Strip targets on install'
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
- printf "%s\n" ' --enable-trace-backends=CHOICE'
+ printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ''
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 16/34] configure, meson: move iasl detection to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (14 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 15/34] meson-buildoptions: add support for string options Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 17/34] configure: move Windows flags " Paolo Bonzini
` (17 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 2 +-
meson.build | 16 +++++++++-------
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/configure b/configure
index a3ac5af863..0b236fda59 100755
--- a/configure
+++ b/configure
@@ -2506,7 +2506,7 @@ if test "$skip_meson" = no; then
-Daudio_drv_list=$audio_drv_list \
-Ddefault_devices=$default_devices \
-Ddocdir="$docdir" \
- -Diasl="$($iasl -h >/dev/null 2>&1 && printf %s "$iasl")" \
+ -Diasl="$iasl" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
diff --git a/meson.build b/meson.build
index 47e874f0c3..1a9549d90c 100644
--- a/meson.build
+++ b/meson.build
@@ -167,6 +167,12 @@ if 'dtrace' in get_option('trace_backends')
endif
endif
+if get_option('iasl') == ''
+ iasl = find_program('iasl', required: false)
+else
+ iasl = find_program(get_option('iasl'), required: true)
+endif
+
##################
# Compiler flags #
##################
@@ -1582,8 +1588,8 @@ foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
config_host_data.set_quoted('CONFIG_TRACE_FILE', get_option('trace_file'))
-if get_option('iasl') != ''
- config_host_data.set_quoted('CONFIG_IASL', get_option('iasl'))
+if iasl.found()
+ config_host_data.set_quoted('CONFIG_IASL', iasl.full_path())
endif
config_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir'))
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
@@ -3628,11 +3634,7 @@ summary_info += {'sphinx-build': sphinx_build}
if config_host.has_key('HAVE_GDB_BIN')
summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
endif
-if get_option('iasl') != ''
- summary_info += {'iasl': get_option('iasl')}
-else
- summary_info += {'iasl': false}
-endif
+summary_info += {'iasl': iasl}
summary_info += {'genisoimage': config_host['GENISOIMAGE']}
if targetos == 'windows' and have_ga
summary_info += {'wixl': wixl}
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 17/34] configure: move Windows flags detection to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (15 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 16/34] configure, meson: move iasl detection to meson Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-24 12:33 ` Marc-André Lureau
2022-04-23 12:51 ` [PATCH v2 18/34] configure: switch string options to automatic parsing Paolo Bonzini
` (16 subsequent siblings)
33 siblings, 1 reply; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
v1->v2: fix get_option('optimization') comparison to use a string
configure | 20 --------------------
meson.build | 8 ++++++++
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/configure b/configure
index 0b236fda59..a6ba59cf6f 100755
--- a/configure
+++ b/configure
@@ -224,10 +224,6 @@ glob() {
eval test -z '"${1#'"$2"'}"'
}
-ld_has() {
- $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
-}
-
if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
then
error_exit "main directory cannot contain spaces nor colons"
@@ -2088,22 +2084,6 @@ if test "$solaris" = "no" && test "$tsan" = "no"; then
fi
fi
-# Use ASLR, no-SEH and DEP if available
-if test "$mingw32" = "yes" ; then
- flags="--no-seh --nxcompat"
-
- # Disable ASLR for debug builds to allow debugging with gdb
- if test "$debug" = "no" ; then
- flags="--dynamicbase $flags"
- fi
-
- for flag in $flags; do
- if ld_has $flag ; then
- QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
- fi
- done
-fi
-
# Guest agent Windows MSI package
if test "$QEMU_GA_MANUFACTURER" = ""; then
diff --git a/meson.build b/meson.build
index 1a9549d90c..d569c6e944 100644
--- a/meson.build
+++ b/meson.build
@@ -182,6 +182,14 @@ qemu_cxxflags = config_host['QEMU_CXXFLAGS'].split()
qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
qemu_ldflags = config_host['QEMU_LDFLAGS'].split()
+if targetos == 'windows'
+ qemu_ldflags += cc.get_supported_link_arguments('-Wl,--no-seh', '-Wl,--nxcompat')
+ # Disable ASLR for debug builds to allow debugging with gdb
+ if get_option('optimization') == '0'
+ qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase')
+ endif
+endif
+
if get_option('gprof')
qemu_cflags += ['-p']
qemu_cxxflags += ['-p']
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 18/34] configure: switch string options to automatic parsing
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (16 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 17/34] configure: move Windows flags " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 19/34] meson, configure: move --tls-priority to meson Paolo Bonzini
` (15 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 24 +-----------------------
scripts/meson-buildoptions.py | 5 +----
scripts/meson-buildoptions.sh | 9 +++++++++
3 files changed, 11 insertions(+), 27 deletions(-)
diff --git a/configure b/configure
index a6ba59cf6f..8de8fea4af 100755
--- a/configure
+++ b/configure
@@ -231,12 +231,10 @@ fi
# default parameters
cpu=""
-iasl="iasl"
interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
-audio_drv_list="default"
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
host_cc="cc"
@@ -312,7 +310,6 @@ linux_user=""
bsd_user=""
pkgversion=""
pie=""
-trace_file="trace"
coroutine=""
tls_priority="NORMAL"
plugins="$default_feature"
@@ -713,8 +710,6 @@ for opt do
;;
--cxx=*)
;;
- --iasl=*) iasl="$optarg"
- ;;
--objcc=*) objcc="$optarg"
;;
--make=*) make="$optarg"
@@ -723,8 +718,6 @@ for opt do
;;
--python=*) python="$optarg" ; explicit_python=yes
;;
- --sphinx-build=*) sphinx_build="$optarg"
- ;;
--skip-meson) skip_meson=yes
;;
--meson=*) meson="$optarg"
@@ -765,8 +758,6 @@ for opt do
error_exit "Can't mix --target-list-exclude with --target-list"
fi
;;
- --with-trace-file=*) trace_file="$optarg"
- ;;
--with-default-devices) default_devices="true"
;;
--without-default-devices) default_devices="false"
@@ -825,8 +816,6 @@ for opt do
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --audio-drv-list=*) audio_drv_list="$optarg"
- ;;
--block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
;;
--block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
@@ -1000,12 +989,7 @@ for opt do
--enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
;;
# everything else has the same name in configure and meson
- --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
- ;;
- *)
- echo "ERROR: unknown option $opt"
- echo "Try '$0 --help' for more information"
- exit 1
+ --*) meson_option_parse "$opt" "$optarg"
;;
esac
done
@@ -1128,7 +1112,6 @@ $(echo Available targets: $default_target_list | \
Advanced options (experts only):
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
--cc=CC use C compiler CC [$cc]
- --iasl=IASL use ACPI compiler IASL [$iasl]
--host-cc=CC use C compiler CC [$host_cc] for code run at
build time
--cxx=CXX use C++ compiler CXX [$cxx]
@@ -1141,7 +1124,6 @@ Advanced options (experts only):
--cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests
--make=MAKE use specified make [$make]
--python=PYTHON use specified python [$python]
- --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
--meson=MESON use specified meson [$meson]
--ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
@@ -2483,15 +2465,11 @@ if test "$skip_meson" = no; then
--sysconfdir "$sysconfdir" \
--localedir "$localedir" \
--localstatedir "$local_statedir" \
- -Daudio_drv_list=$audio_drv_list \
-Ddefault_devices=$default_devices \
-Ddocdir="$docdir" \
- -Diasl="$iasl" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
- -Dsphinx_build="$sphinx_build" \
- -Dtrace_file="$trace_file" \
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
-Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 4af8d6e732..3e540e8bb3 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -26,21 +26,18 @@
import sys
SKIP_OPTIONS = {
- "audio_drv_list",
"default_devices",
"docdir",
"fuzzing_engine",
- "iasl",
"qemu_firmwarepath",
"qemu_suffix",
"smbd",
- "sphinx_build",
- "trace_file",
}
OPTION_NAMES = {
"malloc": "enable-malloc",
"trace_backends": "enable-trace-backends",
+ "trace_file": "with-trace-file",
}
BUILTIN_OPTIONS = {
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 5a06b7915c..63f2f1abcf 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -1,5 +1,7 @@
# This file is generated by meson-buildoptions.py, do not edit!
meson_options_help() {
+ printf "%s\n" ' --audio-drv-list=CHOICES Set audio driver list [default] (choices:'
+ printf "%s\n" ' alsa/coreaudio/default/dsound/jack/oss/pa/sdl)'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
@@ -32,6 +34,9 @@ meson_options_help() {
printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
+ printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
printf "%s\n" 'disabled with --disable-FEATURE, default is enabled if available'
@@ -147,6 +152,7 @@ _meson_option_parse() {
--disable-alsa) printf "%s" -Dalsa=disabled ;;
--enable-attr) printf "%s" -Dattr=enabled ;;
--disable-attr) printf "%s" -Dattr=disabled ;;
+ --audio-drv-list=*) quote_sh "-Daudio_drv_list=$2" ;;
--enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
--disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
--enable-avx2) printf "%s" -Davx2=enabled ;;
@@ -229,6 +235,7 @@ _meson_option_parse() {
--disable-hax) printf "%s" -Dhax=disabled ;;
--enable-hvf) printf "%s" -Dhvf=enabled ;;
--disable-hvf) printf "%s" -Dhvf=disabled ;;
+ --iasl=*) quote_sh "-Diasl=$2" ;;
--enable-iconv) printf "%s" -Diconv=enabled ;;
--disable-iconv) printf "%s" -Diconv=disabled ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
@@ -331,6 +338,7 @@ _meson_option_parse() {
--disable-snappy) printf "%s" -Dsnappy=disabled ;;
--enable-sparse) printf "%s" -Dsparse=enabled ;;
--disable-sparse) printf "%s" -Dsparse=disabled ;;
+ --sphinx-build=*) quote_sh "-Dsphinx_build=$2" ;;
--enable-spice) printf "%s" -Dspice=enabled ;;
--disable-spice) printf "%s" -Dspice=disabled ;;
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
@@ -346,6 +354,7 @@ _meson_option_parse() {
--enable-tpm) printf "%s" -Dtpm=enabled ;;
--disable-tpm) printf "%s" -Dtpm=disabled ;;
--enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
+ --with-trace-file=*) quote_sh "-Dtrace_file=$2" ;;
--enable-u2f) printf "%s" -Du2f=enabled ;;
--disable-u2f) printf "%s" -Du2f=disabled ;;
--enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 19/34] meson, configure: move --tls-priority to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (17 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 18/34] configure: switch string options to automatic parsing Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 20/34] meson, configure: move bdrv whitelists " Paolo Bonzini
` (14 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Use the new support for string option parsing.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 5 -----
meson.build | 3 ++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/configure b/configure
index 8de8fea4af..c23f12159e 100755
--- a/configure
+++ b/configure
@@ -311,7 +311,6 @@ bsd_user=""
pkgversion=""
pie=""
coroutine=""
-tls_priority="NORMAL"
plugins="$default_feature"
meson=""
meson_args=""
@@ -938,8 +937,6 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
- --tls-priority=*) tls_priority="$optarg"
- ;;
--disable-vhost-user) vhost_user="no"
;;
--enable-vhost-user) vhost_user="yes"
@@ -1169,7 +1166,6 @@ Advanced options (experts only):
--with-coroutine=BACKEND coroutine backend. Supported options:
ucontext, sigaltstack, windows
--enable-gcov enable test coverage analysis with gcov
- --tls-priority default TLS protocol/cipher priority string
--enable-plugins
enable plugins via shared library loading
--disable-containers don't use containers for cross-building
@@ -2200,7 +2196,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index d569c6e944..f0b861aacd 100644
--- a/meson.build
+++ b/meson.build
@@ -1596,6 +1596,7 @@ foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
config_host_data.set_quoted('CONFIG_TRACE_FILE', get_option('trace_file'))
+config_host_data.set_quoted('CONFIG_TLS_PRIORITY', get_option('tls_priority'))
if iasl.found()
config_host_data.set_quoted('CONFIG_IASL', iasl.full_path())
endif
@@ -3817,7 +3818,7 @@ summary(summary_info, bool_yn: true, section: 'Block layer support')
# Crypto
summary_info = {}
-summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
+summary_info += {'TLS priority': get_option('tls_priority')}
summary_info += {'GNUTLS support': gnutls}
if gnutls.found()
summary_info += {' GNUTLS crypto': gnutls_crypto.found()}
diff --git a/meson_options.txt b/meson_options.txt
index 415fcc448e..891c0ec130 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -14,6 +14,8 @@ option('sphinx_build', type : 'string', value : '',
description: 'Use specified sphinx-build for building document')
option('iasl', type : 'string', value : '',
description: 'Path to ACPI disassembler')
+option('tls_priority', type : 'string', value : 'NORMAL',
+ description: 'Default TLS protocol/cipher priority string')
option('default_devices', type : 'boolean', value : true,
description: 'Include a default selection of devices in emulators')
option('audio_drv_list', type: 'array', value: ['default'],
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 63f2f1abcf..0e0548aa87 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -36,6 +36,8 @@ meson_options_help() {
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
+ printf "%s\n" ' [NORMAL]'
printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
@@ -349,6 +351,7 @@ _meson_option_parse() {
--disable-tcg) printf "%s" -Dtcg=disabled ;;
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
--disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
+ --tls-priority=*) quote_sh "-Dtls_priority=$2" ;;
--enable-tools) printf "%s" -Dtools=enabled ;;
--disable-tools) printf "%s" -Dtools=disabled ;;
--enable-tpm) printf "%s" -Dtpm=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 20/34] meson, configure: move bdrv whitelists to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (18 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 19/34] meson, configure: move --tls-priority to meson Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 21/34] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
` (13 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Use the new support for string option parsing.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
v1->v2: fix RO/RW typo
configure | 14 --------------
meson.build | 27 ++++++++++++++++-----------
meson_options.txt | 4 ++++
scripts/meson-buildoptions.sh | 8 ++++++++
4 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/configure b/configure
index c23f12159e..56dcc7ba8e 100755
--- a/configure
+++ b/configure
@@ -235,8 +235,6 @@ interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
-block_drv_rw_whitelist=""
-block_drv_ro_whitelist=""
host_cc="cc"
lto="false"
stack_protector=""
@@ -815,10 +813,6 @@ for opt do
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
- ;;
- --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
- ;;
--enable-debug-tcg) debug_tcg="yes"
;;
--disable-debug-tcg) debug_tcg="no"
@@ -1154,12 +1148,6 @@ Advanced options (experts only):
--disable-stack-protector disable compiler-provided stack protection
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
--block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
- --block-drv-rw-whitelist=L
- set block driver read-write whitelist
- (by default affects only QEMU, not tools like qemu-img)
- --block-drv-ro-whitelist=L
- set block driver read-only whitelist
- (by default affects only QEMU, not tools like qemu-img)
--with-trace-file=NAME Full PATH,NAME of file to store traces
Default:trace-<pid>
--cpu=CPU Build for host CPU [$cpu]
@@ -2184,8 +2172,6 @@ fi
if test "$static" = "yes" ; then
echo "CONFIG_STATIC=y" >> $config_host_mak
fi
-echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
-echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
qemu_version=$(head $source_path/VERSION)
echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
diff --git a/meson.build b/meson.build
index f0b861aacd..da8d3076d7 100644
--- a/meson.build
+++ b/meson.build
@@ -1592,6 +1592,19 @@ have_virtfs = get_option('virtfs') \
have_virtfs_proxy_helper = targetos != 'darwin' and have_virtfs and have_tools
+if get_option('block_drv_ro_whitelist') == ''
+ config_host_data.set('CONFIG_BDRV_RO_WHITELIST', '')
+else
+ config_host_data.set('CONFIG_BDRV_RO_WHITELIST',
+ '"' + get_option('block_drv_ro_whitelist').replace(',', '", "') + '"')
+endif
+if get_option('block_drv_rw_whitelist') == ''
+ config_host_data.set('CONFIG_BDRV_RW_WHITELIST', '')
+else
+ config_host_data.set('CONFIG_BDRV_RW_WHITELIST',
+ '"' + get_option('block_drv_rw_whitelist').replace(',', '", "') + '"')
+endif
+
foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
@@ -2206,16 +2219,8 @@ config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
'HAVE_GDB_BIN']
-arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
foreach k, v: config_host
- if ignored.contains(k)
- # do nothing
- elif arrays.contains(k)
- if v != ''
- v = '"' + '", "'.join(v.split()) + '", '
- endif
- config_host_data.set(k, v)
- elif k.startswith('CONFIG_')
+ if k.startswith('CONFIG_') and not ignored.contains(k)
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
@@ -3797,8 +3802,8 @@ summary_info = {}
summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
summary_info += {'coroutine pool': have_coroutine_pool}
if have_block
- summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
- summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
+ summary_info += {'Block whitelist (rw)': get_option('block_drv_rw_whitelist')}
+ summary_info += {'Block whitelist (ro)': get_option('block_drv_ro_whitelist')}
summary_info += {'Use block whitelist in tools': get_option('block_drv_whitelist_in_tools')}
summary_info += {'VirtFS support': have_virtfs}
summary_info += {'build virtiofs daemon': have_virtiofsd}
diff --git a/meson_options.txt b/meson_options.txt
index 891c0ec130..ec974003b3 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -21,6 +21,10 @@ option('default_devices', type : 'boolean', value : true,
option('audio_drv_list', type: 'array', value: ['default'],
choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl'],
description: 'Set audio driver list')
+option('block_drv_rw_whitelist', type : 'string', value : '',
+ description: 'set block driver read-write whitelist (by default affects only QEMU, not tools like qemu-img)')
+option('block_drv_ro_whitelist', type : 'string', value : '',
+ description: 'set block driver read-only whitelist (by default affects only QEMU, not tools like qemu-img)')
option('fuzzing_engine', type : 'string', value : '',
description: 'fuzzing engine library for OSS-Fuzz')
option('trace_file', type: 'string', value: 'trace',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 0e0548aa87..4c49d4af08 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -2,6 +2,12 @@
meson_options_help() {
printf "%s\n" ' --audio-drv-list=CHOICES Set audio driver list [default] (choices:'
printf "%s\n" ' alsa/coreaudio/default/dsound/jack/oss/pa/sdl)'
+ printf "%s\n" ' --block-drv-ro-whitelist=VALUE'
+ printf "%s\n" ' set block driver read-only whitelist (by default'
+ printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
+ printf "%s\n" ' --block-drv-rw-whitelist=VALUE'
+ printf "%s\n" ' set block driver read-write whitelist (by default'
+ printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
@@ -161,6 +167,8 @@ _meson_option_parse() {
--disable-avx2) printf "%s" -Davx2=disabled ;;
--enable-avx512f) printf "%s" -Davx512f=enabled ;;
--disable-avx512f) printf "%s" -Davx512f=disabled ;;
+ --block-drv-ro-whitelist=*) quote_sh "-Dblock_drv_ro_whitelist=$2" ;;
+ --block-drv-rw-whitelist=*) quote_sh "-Dblock_drv_rw_whitelist=$2" ;;
--enable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=true ;;
--disable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=false ;;
--enable-bochs) printf "%s" -Dbochs=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 21/34] meson, configure: move --with-pkgversion, CONFIG_STAMP to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (19 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 20/34] meson, configure: move bdrv whitelists " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 22/34] meson, configure: move --interp-prefix " Paolo Bonzini
` (12 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
The hash is now generated with a Python script.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 23 -----------------------
docs/meson.build | 2 +-
meson.build | 10 +++++++++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.py | 1 +
scripts/meson-buildoptions.sh | 3 +++
scripts/qemu-stamp.py | 24 ++++++++++++++++++++++++
7 files changed, 40 insertions(+), 25 deletions(-)
create mode 100644 scripts/qemu-stamp.py
diff --git a/configure b/configure
index 56dcc7ba8e..3f0fe1c4e1 100755
--- a/configure
+++ b/configure
@@ -306,7 +306,6 @@ qemu_suffix="qemu"
softmmu="yes"
linux_user=""
bsd_user=""
-pkgversion=""
pie=""
coroutine=""
plugins="$default_feature"
@@ -896,8 +895,6 @@ for opt do
;;
--enable-fdt=*) fdt="$optarg"
;;
- --with-pkgversion=*) pkgversion="$optarg"
- ;;
--with-coroutine=*) coroutine="$optarg"
;;
--disable-vhost-net) vhost_net="no"
@@ -1135,7 +1132,6 @@ Advanced options (experts only):
--firmwarepath=PATH search PATH for firmware files
--efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
- --with-pkgversion=VERS use specified string as sub-version of the package
--without-default-features default all --enable-* options to "disabled"
--without-default-devices do not include any device that is not needed to
start the emulator (only use if you are including
@@ -1722,21 +1718,6 @@ if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
fi
fi
-##########################################
-# SHA command probe for modules
-if test "$modules" = yes; then
- shacmd_probe="sha1sum sha1 shasum"
- for c in $shacmd_probe; do
- if has $c; then
- shacmd="$c"
- break
- fi
- done
- if test "$shacmd" = ""; then
- error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
- fi
-fi
-
##########################################
# fdt probe
@@ -2173,13 +2154,9 @@ if test "$static" = "yes" ; then
echo "CONFIG_STATIC=y" >> $config_host_mak
fi
qemu_version=$(head $source_path/VERSION)
-echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
if test "$modules" = "yes"; then
- # $shacmd can generate a hash started with digit, which the compiler doesn't
- # like as an symbol. So prefix it with an underscore
- echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
diff --git a/docs/meson.build b/docs/meson.build
index 831d4aea2b..9136fed3b7 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -35,7 +35,7 @@ if sphinx_build.found()
endif
if build_docs
- SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + config_host['PKGVERSION']]
+ SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + get_option('pkgversion')]
man_pages = {
'qemu-ga.8': (have_ga ? 'man8' : ''),
diff --git a/meson.build b/meson.build
index da8d3076d7..66b2a3aa31 100644
--- a/meson.build
+++ b/meson.build
@@ -1626,6 +1626,14 @@ config_host_data.set_quoted('CONFIG_QEMU_LOCALSTATEDIR', get_option('prefix') /
config_host_data.set_quoted('CONFIG_QEMU_MODDIR', get_option('prefix') / qemu_moddir)
config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_option('sysconfdir'))
+if config_host.has_key('CONFIG_MODULES')
+ config_host_data.set('CONFIG_STAMP', run_command(
+ meson.current_source_dir() / 'scripts/qemu-stamp.py',
+ meson.project_version(), get_option('pkgversion'), '--',
+ meson.current_source_dir() / 'configure',
+ capture: true, check: true).stdout().strip())
+endif
+
have_slirp_smbd = get_option('slirp_smbd') \
.require(targetos != 'windows', error_message: 'Host smbd not supported on this platform.') \
.allowed()
@@ -2796,7 +2804,7 @@ tracetool_depends = files(
qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
meson.current_source_dir(),
- config_host['PKGVERSION'], meson.project_version()]
+ get_option('pkgversion'), meson.project_version()]
qemu_version = custom_target('qemu-version.h',
output: 'qemu-version.h',
command: qemu_version_cmd,
diff --git a/meson_options.txt b/meson_options.txt
index ec974003b3..dc6fb796c6 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -8,6 +8,8 @@ option('docdir', type : 'string', value : 'doc',
description: 'Base directory for documentation installation (can be empty)')
option('qemu_firmwarepath', type : 'string', value : '',
description: 'search PATH for firmware files')
+option('pkgversion', type : 'string', value : '',
+ description: 'use specified string as sub-version of the package')
option('smbd', type : 'string', value : '',
description: 'Path to smbd for slirp networking')
option('sphinx_build', type : 'string', value : '',
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 3e540e8bb3..0f9603a7f6 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -36,6 +36,7 @@
OPTION_NAMES = {
"malloc": "enable-malloc",
+ "pkgversion": "with-pkgversion",
"trace_backends": "enable-trace-backends",
"trace_file": "with-trace-file",
}
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 4c49d4af08..bf9878e24f 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -44,6 +44,8 @@ meson_options_help() {
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
+ printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the'
+ printf "%s\n" ' package'
printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
@@ -309,6 +311,7 @@ _meson_option_parse() {
--disable-pa) printf "%s" -Dpa=disabled ;;
--enable-parallels) printf "%s" -Dparallels=enabled ;;
--disable-parallels) printf "%s" -Dparallels=disabled ;;
+ --with-pkgversion=*) quote_sh "-Dpkgversion=$2" ;;
--enable-profiler) printf "%s" -Dprofiler=true ;;
--disable-profiler) printf "%s" -Dprofiler=false ;;
--enable-pvrdma) printf "%s" -Dpvrdma=enabled ;;
diff --git a/scripts/qemu-stamp.py b/scripts/qemu-stamp.py
new file mode 100644
index 0000000000..7beeeb07ed
--- /dev/null
+++ b/scripts/qemu-stamp.py
@@ -0,0 +1,24 @@
+#! /usr/bin/env python3
+
+# Usage: scripts/qemu-stamp.py STRING1 STRING2... -- FILE1 FILE2...
+import hashlib
+import os
+import sys
+
+sha = hashlib.sha1()
+is_file = False
+for arg in sys.argv[1:]:
+ if arg == '--':
+ is_file = True
+ continue
+ if is_file:
+ with open(arg, 'rb') as f:
+ for chunk in iter(lambda: f.read(65536), b''):
+ sha.update(chunk)
+ else:
+ sha.update(os.fsencode(arg))
+ sha.update(b'\n')
+
+# The hash can start with a digit, which the compiler doesn't
+# like as an symbol. So prefix it with an underscore
+print("_" + sha.hexdigest())
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 22/34] meson, configure: move --interp-prefix to meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (20 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 21/34] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 23/34] meson: always combine directories with prefix Paolo Bonzini
` (11 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
This is the last CONFIG_* entry in config-host.mak that had to be
special cased.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 ------
meson.build | 6 ++----
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
4 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/configure b/configure
index 3f0fe1c4e1..2987713a85 100755
--- a/configure
+++ b/configure
@@ -231,7 +231,6 @@ fi
# default parameters
cpu=""
-interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
@@ -696,8 +695,6 @@ for opt do
;;
--prefix=*) prefix="$optarg"
;;
- --interp-prefix=*) interp_prefix="$optarg"
- ;;
--cross-prefix=*)
;;
--cc=*)
@@ -1090,8 +1087,6 @@ Options: [defaults in brackets after descriptions]
Standard options:
--help print this message
--prefix=PREFIX install in PREFIX [$prefix]
- --interp-prefix=PREFIX where to find shared libraries, etc.
- use %M for cpu name [$interp_prefix]
--target-list=LIST set target list (default: build all)
$(echo Available targets: $default_target_list | \
fold -s -w 53 | sed -e 's/^/ /')
@@ -2288,7 +2283,6 @@ for target in $target_list; do
esac
done
-echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
if test "$default_targets" = "yes"; then
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
fi
diff --git a/meson.build b/meson.build
index 66b2a3aa31..1fdc74c86a 100644
--- a/meson.build
+++ b/meson.build
@@ -2225,10 +2225,8 @@ if targetos == 'windows' and link_language == 'cpp'
endif
config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
-ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
- 'HAVE_GDB_BIN']
foreach k, v: config_host
- if k.startswith('CONFIG_') and not ignored.contains(k)
+ if k.startswith('CONFIG_')
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
@@ -2334,7 +2332,7 @@ foreach target : target_dirs
config_target += {
'CONFIG_USER_ONLY': 'y',
'CONFIG_QEMU_INTERP_PREFIX':
- config_host['CONFIG_QEMU_INTERP_PREFIX'].format(config_target['TARGET_NAME'])
+ get_option('interp_prefix').replace('%M', config_target['TARGET_NAME'])
}
endif
diff --git a/meson_options.txt b/meson_options.txt
index dc6fb796c6..848426460c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -27,6 +27,8 @@ option('block_drv_rw_whitelist', type : 'string', value : '',
description: 'set block driver read-write whitelist (by default affects only QEMU, not tools like qemu-img)')
option('block_drv_ro_whitelist', type : 'string', value : '',
description: 'set block driver read-only whitelist (by default affects only QEMU, not tools like qemu-img)')
+option('interp_prefix', type : 'string', value : '/usr/gnemul/qemu-%M',
+ description: 'where to find shared libraries etc., use %M for cpu name')
option('fuzzing_engine', type : 'string', value : '',
description: 'fuzzing engine library for OSS-Fuzz')
option('trace_file', type: 'string', value: 'trace',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index bf9878e24f..a0c86db116 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -41,6 +41,8 @@ meson_options_help() {
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
+ printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
@@ -252,6 +254,7 @@ _meson_option_parse() {
--disable-iconv) printf "%s" -Diconv=disabled ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
+ --interp-prefix=*) quote_sh "-Dinterp_prefix=$2" ;;
--enable-jack) printf "%s" -Djack=enabled ;;
--disable-jack) printf "%s" -Djack=disabled ;;
--enable-keyring) printf "%s" -Dkeyring=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 23/34] meson: always combine directories with prefix
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (21 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 22/34] meson, configure: move --interp-prefix " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 24/34] configure: switch directory options to automatic parsing Paolo Bonzini
` (10 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Meson allows directories such as "bindir" to be relative to the prefix. Right
now configure is forcing an absolute path, but that is not really necessary:
just make sure all uses of the directory variables are prefixed appropriately.
Do the same also for the options that are custom for QEMU, i.e. docdir and
qemu_firmwarepath.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/meson.build b/meson.build
index 1fdc74c86a..cdbdb1ef8b 100644
--- a/meson.build
+++ b/meson.build
@@ -1618,7 +1618,7 @@ config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
config_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir)
config_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir)
-config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('qemu_firmwarepath'))
+config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('prefix') / get_option('qemu_firmwarepath'))
config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir'))
config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir)
config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir'))
@@ -3626,20 +3626,20 @@ endif
summary_info = {}
summary_info += {'Install prefix': get_option('prefix')}
summary_info += {'BIOS directory': qemu_datadir}
-summary_info += {'firmware path': get_option('qemu_firmwarepath')}
-summary_info += {'binary directory': get_option('bindir')}
-summary_info += {'library directory': get_option('libdir')}
+summary_info += {'firmware path': get_option('prefix') / get_option('qemu_firmwarepath')}
+summary_info += {'binary directory': get_option('prefix') / get_option('bindir')}
+summary_info += {'library directory': get_option('prefix') / get_option('libdir')}
summary_info += {'module directory': qemu_moddir}
-summary_info += {'libexec directory': get_option('libexecdir')}
-summary_info += {'include directory': get_option('includedir')}
-summary_info += {'config directory': get_option('sysconfdir')}
+summary_info += {'libexec directory': get_option('prefix') / get_option('libexecdir')}
+summary_info += {'include directory': get_option('prefix') / get_option('includedir')}
+summary_info += {'config directory': get_option('prefix') / get_option('sysconfdir')}
if targetos != 'windows'
- summary_info += {'local state directory': get_option('localstatedir')}
- summary_info += {'Manual directory': get_option('mandir')}
+ summary_info += {'local state directory': get_option('prefix') / get_option('localstatedir')}
+ summary_info += {'Manual directory': get_option('prefix') / get_option('mandir')}
else
summary_info += {'local state directory': 'queried at runtime'}
endif
-summary_info += {'Doc directory': get_option('docdir')}
+summary_info += {'Doc directory': get_option('prefix') / get_option('docdir')}
summary_info += {'Build directory': meson.current_build_dir()}
summary_info += {'Source path': meson.current_source_dir()}
summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 24/34] configure: switch directory options to automatic parsing
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (22 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 23/34] meson: always combine directories with prefix Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 25/34] meson: pass more options directly as -D Paolo Bonzini
` (9 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
While prefix, bindir and qemu_suffix needs special treatment due to
differences between Windows and POSIX systems, everything else
needs no extra code in configure.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 58 ++---------------------------------
meson_options.txt | 4 +--
scripts/meson-buildoptions.py | 11 +++++--
scripts/meson-buildoptions.sh | 21 +++++++++++++
4 files changed, 34 insertions(+), 60 deletions(-)
diff --git a/configure b/configure
index 2987713a85..1640cae307 100755
--- a/configure
+++ b/configure
@@ -311,6 +311,7 @@ plugins="$default_feature"
meson=""
meson_args=""
ninja=""
+bindir="bin"
skip_meson=no
# The following Meson options are handled manually (still they
@@ -669,6 +670,7 @@ if test "$mingw32" = "yes" ; then
CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
write_c_skeleton;
prefix="/qemu"
+ bindir=""
qemu_suffix=""
fi
@@ -775,30 +777,10 @@ for opt do
static="yes"
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
;;
- --mandir=*) mandir="$optarg"
- ;;
--bindir=*) bindir="$optarg"
;;
- --libdir=*) libdir="$optarg"
- ;;
- --libexecdir=*) libexecdir="$optarg"
- ;;
- --includedir=*) includedir="$optarg"
- ;;
- --datadir=*) datadir="$optarg"
- ;;
--with-suffix=*) qemu_suffix="$optarg"
;;
- --docdir=*) docdir="$optarg"
- ;;
- --localedir=*) localedir="$optarg"
- ;;
- --sysconfdir=*) sysconfdir="$optarg"
- ;;
- --localstatedir=*) local_statedir="$optarg"
- ;;
- --firmwarepath=*) firmwarepath="$optarg"
- ;;
--host=*|--build=*|\
--disable-dependency-tracking|\
--sbindir=*|--sharedstatedir=*|\
@@ -1021,23 +1003,6 @@ case $git_submodules_action in
;;
esac
-libdir="${libdir:-$prefix/lib}"
-libexecdir="${libexecdir:-$prefix/libexec}"
-includedir="${includedir:-$prefix/include}"
-
-if test "$mingw32" = "yes" ; then
- bindir="${bindir:-$prefix}"
-else
- bindir="${bindir:-$prefix/bin}"
-fi
-mandir="${mandir:-$prefix/share/man}"
-datadir="${datadir:-$prefix/share}"
-docdir="${docdir:-$prefix/share/doc}"
-sysconfdir="${sysconfdir:-$prefix/etc}"
-local_statedir="${local_statedir:-$prefix/var}"
-firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
-localedir="${localedir:-$datadir/locale}"
-
if eval test -z "\${cross_cc_$cpu}"; then
eval "cross_cc_${cpu}=\$cc"
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
@@ -1115,16 +1080,7 @@ Advanced options (experts only):
--with-git-submodules=validate fail if git submodules are not up to date
--with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
--static enable static build [$static]
- --mandir=PATH install man pages in PATH
- --datadir=PATH install firmware in PATH/$qemu_suffix
- --localedir=PATH install translation in PATH/$qemu_suffix
- --docdir=PATH install documentation in PATH/$qemu_suffix
--bindir=PATH install binaries in PATH
- --libdir=PATH install libraries in PATH
- --libexecdir=PATH install helper binaries in PATH
- --sysconfdir=PATH install config in PATH/$qemu_suffix
- --localstatedir=PATH install local state in PATH (set at runtime on win32)
- --firmwarepath=PATH search PATH for firmware files
--efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
--without-default-features default all --enable-* options to "disabled"
@@ -2408,18 +2364,8 @@ if test "$skip_meson" = no; then
run_meson() {
NINJA=$ninja $meson setup \
--prefix "$prefix" \
- --libdir "$libdir" \
- --libexecdir "$libexecdir" \
--bindir "$bindir" \
- --includedir "$includedir" \
- --datadir "$datadir" \
- --mandir "$mandir" \
- --sysconfdir "$sysconfdir" \
- --localedir "$localedir" \
- --localstatedir "$local_statedir" \
-Ddefault_devices=$default_devices \
- -Ddocdir="$docdir" \
- -Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
diff --git a/meson_options.txt b/meson_options.txt
index 848426460c..a76fadbd7d 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -4,9 +4,9 @@
option('qemu_suffix', type : 'string', value: 'qemu',
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
-option('docdir', type : 'string', value : 'doc',
+option('docdir', type : 'string', value : 'share/doc',
description: 'Base directory for documentation installation (can be empty)')
-option('qemu_firmwarepath', type : 'string', value : '',
+option('qemu_firmwarepath', type : 'string', value : 'qemu-firmware',
description: 'search PATH for firmware files')
option('pkgversion', type : 'string', value : '',
description: 'use specified string as sub-version of the package')
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 0f9603a7f6..45cda8cd84 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -27,9 +27,7 @@
SKIP_OPTIONS = {
"default_devices",
- "docdir",
"fuzzing_engine",
- "qemu_firmwarepath",
"qemu_suffix",
"smbd",
}
@@ -37,12 +35,21 @@
OPTION_NAMES = {
"malloc": "enable-malloc",
"pkgversion": "with-pkgversion",
+ "qemu_firmwarepath": "firmwarepath",
"trace_backends": "enable-trace-backends",
"trace_file": "with-trace-file",
}
BUILTIN_OPTIONS = {
+ "datadir",
+ "includedir",
+ "libdir",
+ "libexecdir",
+ "localedir",
+ "localstatedir",
+ "mandir",
"strip",
+ "sysconfdir",
}
LINE_WIDTH = 76
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index a0c86db116..a52cc14d13 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -8,8 +8,11 @@ meson_options_help() {
printf "%s\n" ' --block-drv-rw-whitelist=VALUE'
printf "%s\n" ' set block driver read-write whitelist (by default'
printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
+ printf "%s\n" ' --datadir=VALUE Data file directory [share]'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
+ printf "%s\n" ' --docdir=VALUE Base directory for documentation installation'
+ printf "%s\n" ' (can be empty) [share/doc]'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
printf "%s\n" ' use block whitelist also in tools instead of only'
printf "%s\n" ' QEMU'
@@ -40,10 +43,18 @@ meson_options_help() {
printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
+ printf "%s\n" ' --firmwarepath=VALUE search PATH for firmware files [qemu-firmware]'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --includedir=VALUE Header file directory [include]'
printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
+ printf "%s\n" ' --libdir=VALUE Library directory [lib64]'
+ printf "%s\n" ' --libexecdir=VALUE Library executable directory [libexec]'
+ printf "%s\n" ' --localedir=VALUE Locale data directory [share/locale]'
+ printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]'
+ printf "%s\n" ' --mandir=VALUE Manual page directory [share/man]'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --sysconfdir=VALUE Sysconf data directory [etc]'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the'
@@ -206,6 +217,7 @@ _meson_option_parse() {
--disable-curl) printf "%s" -Dcurl=disabled ;;
--enable-curses) printf "%s" -Dcurses=enabled ;;
--disable-curses) printf "%s" -Dcurses=disabled ;;
+ --datadir=*) quote_sh "-Ddatadir=$2" ;;
--enable-dbus-display) printf "%s" -Ddbus_display=enabled ;;
--disable-dbus-display) printf "%s" -Ddbus_display=disabled ;;
--enable-debug-mutex) printf "%s" -Ddebug_mutex=true ;;
@@ -214,6 +226,7 @@ _meson_option_parse() {
--disable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=false ;;
--enable-dmg) printf "%s" -Ddmg=enabled ;;
--disable-dmg) printf "%s" -Ddmg=disabled ;;
+ --docdir=*) quote_sh "-Ddocdir=$2" ;;
--enable-docs) printf "%s" -Ddocs=enabled ;;
--disable-docs) printf "%s" -Ddocs=disabled ;;
--enable-dsound) printf "%s" -Ddsound=enabled ;;
@@ -252,6 +265,7 @@ _meson_option_parse() {
--iasl=*) quote_sh "-Diasl=$2" ;;
--enable-iconv) printf "%s" -Diconv=enabled ;;
--disable-iconv) printf "%s" -Diconv=disabled ;;
+ --includedir=*) quote_sh "-Dincludedir=$2" ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
--interp-prefix=*) quote_sh "-Dinterp_prefix=$2" ;;
@@ -265,6 +279,8 @@ _meson_option_parse() {
--disable-l2tpv3) printf "%s" -Dl2tpv3=disabled ;;
--enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
--disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
+ --libdir=*) quote_sh "-Dlibdir=$2" ;;
+ --libexecdir=*) quote_sh "-Dlibexecdir=$2" ;;
--enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
--disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
--enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
@@ -283,6 +299,8 @@ _meson_option_parse() {
--disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
--enable-live-block-migration) printf "%s" -Dlive_block_migration=enabled ;;
--disable-live-block-migration) printf "%s" -Dlive_block_migration=disabled ;;
+ --localedir=*) quote_sh "-Dlocaledir=$2" ;;
+ --localstatedir=*) quote_sh "-Dlocalstatedir=$2" ;;
--enable-lzfse) printf "%s" -Dlzfse=enabled ;;
--disable-lzfse) printf "%s" -Dlzfse=disabled ;;
--enable-lzo) printf "%s" -Dlzo=enabled ;;
@@ -290,6 +308,7 @@ _meson_option_parse() {
--enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
--enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
--disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
+ --mandir=*) quote_sh "-Dmandir=$2" ;;
--enable-membarrier) printf "%s" -Dmembarrier=enabled ;;
--disable-membarrier) printf "%s" -Dmembarrier=disabled ;;
--enable-module-upgrades) printf "%s" -Dmodule_upgrades=true ;;
@@ -323,6 +342,7 @@ _meson_option_parse() {
--disable-qcow1) printf "%s" -Dqcow1=disabled ;;
--enable-qed) printf "%s" -Dqed=enabled ;;
--disable-qed) printf "%s" -Dqed=disabled ;;
+ --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$2" ;;
--enable-qga-vss) printf "%s" -Dqga_vss=enabled ;;
--disable-qga-vss) printf "%s" -Dqga_vss=disabled ;;
--enable-qom-cast-debug) printf "%s" -Dqom_cast_debug=true ;;
@@ -361,6 +381,7 @@ _meson_option_parse() {
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
--enable-strip) printf "%s" -Dstrip=true ;;
--disable-strip) printf "%s" -Dstrip=false ;;
+ --sysconfdir=*) quote_sh "-Dsysconfdir=$2" ;;
--enable-tcg) printf "%s" -Dtcg=enabled ;;
--disable-tcg) printf "%s" -Dtcg=disabled ;;
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 25/34] meson: pass more options directly as -D
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (23 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 24/34] configure: switch directory options to automatic parsing Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 26/34] configure: omit options with default values from meson command line Paolo Bonzini
` (8 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
If an option is not used anywhere by the configure script, it can be just
added to $meson_options even if it is not parsed by the automatically
generated bits in scripts/meson-buildoptions.sh.
The only slightly tricky case is $debug, where the
if test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
debug=no
fi
assignment is dead; configure sets fortify_source=no whenever debug=yes.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 39 ++++++++++-------------------------
meson.build | 2 +-
scripts/meson-buildoptions.py | 4 ++++
scripts/meson-buildoptions.sh | 6 ++++++
4 files changed, 22 insertions(+), 29 deletions(-)
diff --git a/configure b/configure
index 1640cae307..c6edbceff0 100755
--- a/configure
+++ b/configure
@@ -235,7 +235,6 @@ static="no"
cross_compile="no"
cross_prefix=""
host_cc="cc"
-lto="false"
stack_protector=""
safe_stack=""
use_containers="yes"
@@ -291,13 +290,10 @@ vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
-debug_info="yes"
debug_tcg="no"
-debug="no"
sanitizers="no"
tsan="no"
fortify_source="yes"
-gcov="no"
EXESUF=""
modules="no"
prefix="/usr/local"
@@ -327,10 +323,7 @@ else
fi
fdt="auto"
-# 2. Support --with/--without option
-default_devices="true"
-
-# 3. Automatically enable/disable other options
+# 2. Automatically enable/disable other options
tcg="enabled"
cfi="false"
@@ -679,6 +672,9 @@ werror=""
. $source_path/scripts/meson-buildoptions.sh
meson_options=
+meson_option_add() {
+ meson_options="$meson_options $(quote_sh "$1")"
+}
meson_option_parse() {
meson_options="$meson_options $(_meson_option_parse "$@")"
if test $? -eq 1; then
@@ -731,9 +727,9 @@ for opt do
;;
--cross-cc-*)
;;
- --enable-debug-info) debug_info="yes"
+ --enable-debug-info) meson_option_add -Ddebug=true
;;
- --disable-debug-info) debug_info="no"
+ --disable-debug-info) meson_option_add -Ddebug=false
;;
--enable-modules)
modules="yes"
@@ -753,9 +749,9 @@ for opt do
error_exit "Can't mix --target-list-exclude with --target-list"
fi
;;
- --with-default-devices) default_devices="true"
+ --with-default-devices) meson_option_add -Ddefault_devices=true
;;
- --without-default-devices) default_devices="false"
+ --without-default-devices) meson_option_add -Ddefault_devices=false
;;
--with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
;;
@@ -771,8 +767,6 @@ for opt do
;;
--without-default-features) # processed above
;;
- --enable-gcov) gcov="yes"
- ;;
--static)
static="yes"
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
@@ -799,7 +793,7 @@ for opt do
# Enable debugging options that aren't excessively noisy
debug_tcg="yes"
meson_option_parse --enable-debug-mutex ""
- debug="yes"
+ meson_option_add -Doptimization=0
fortify_source="no"
;;
--enable-sanitizers) sanitizers="yes"
@@ -848,10 +842,6 @@ for opt do
;;
--disable-werror) werror="no"
;;
- --enable-lto) lto="true"
- ;;
- --disable-lto) lto="false"
- ;;
--enable-stack-protector) stack_protector="yes"
;;
--disable-stack-protector) stack_protector="no"
@@ -862,7 +852,7 @@ for opt do
;;
--enable-cfi)
cfi="true";
- lto="true";
+ meson_option_add -Db_lto=true
;;
--disable-cfi) cfi="false"
;;
@@ -1100,7 +1090,6 @@ Advanced options (experts only):
--cpu=CPU Build for host CPU [$cpu]
--with-coroutine=BACKEND coroutine backend. Supported options:
ucontext, sigaltstack, windows
- --enable-gcov enable test coverage analysis with gcov
--enable-plugins
enable plugins via shared library loading
--disable-containers don't use containers for cross-building
@@ -1116,7 +1105,6 @@ cat << EOF
modules modules support (non-Windows)
debug-tcg TCG debugging (default is disabled)
debug-info debugging information
- lto Enable Link-Time Optimization.
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
@@ -1937,7 +1925,6 @@ write_c_skeleton
if test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
- debug=no
fi
case "$ARCH" in
@@ -2365,15 +2352,11 @@ if test "$skip_meson" = no; then
NINJA=$ninja $meson setup \
--prefix "$prefix" \
--bindir "$bindir" \
- -Ddefault_devices=$default_devices \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
- -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
- -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
- -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
- -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg \
+ -Dcfi=$cfi -Dtcg=$tcg \
-Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
diff --git a/meson.build b/meson.build
index cdbdb1ef8b..1fa4cc255e 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('qemu', ['c'], meson_version: '>=0.59.3',
default_options: ['warning_level=1', 'c_std=gnu11', 'cpp_std=gnu++11', 'b_colorout=auto',
- 'b_staticpic=false', 'stdsplit=false'],
+ 'b_staticpic=false', 'stdsplit=false', 'optimization=2'],
version: files('VERSION'))
add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true)
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 45cda8cd84..e624c16b01 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -33,6 +33,8 @@
}
OPTION_NAMES = {
+ "b_coverage": "gcov",
+ "b_lto": "lto",
"malloc": "enable-malloc",
"pkgversion": "with-pkgversion",
"qemu_firmwarepath": "firmwarepath",
@@ -41,6 +43,8 @@
}
BUILTIN_OPTIONS = {
+ "b_coverage",
+ "b_lto",
"datadir",
"includedir",
"libdir",
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index a52cc14d13..274639777e 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -27,7 +27,9 @@ meson_options_help() {
printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
+ printf "%s\n" ' --enable-gcov Enable coverage tracking.'
printf "%s\n" ' --enable-gprof QEMU profiling with gprof'
+ printf "%s\n" ' --enable-lto Use link time optimization'
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
printf "%s\n" ' jemalloc/system/tcmalloc)'
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
@@ -182,6 +184,10 @@ _meson_option_parse() {
--disable-avx2) printf "%s" -Davx2=disabled ;;
--enable-avx512f) printf "%s" -Davx512f=enabled ;;
--disable-avx512f) printf "%s" -Davx512f=disabled ;;
+ --enable-gcov) printf "%s" -Db_coverage=true ;;
+ --disable-gcov) printf "%s" -Db_coverage=false ;;
+ --enable-lto) printf "%s" -Db_lto=true ;;
+ --disable-lto) printf "%s" -Db_lto=false ;;
--block-drv-ro-whitelist=*) quote_sh "-Dblock_drv_ro_whitelist=$2" ;;
--block-drv-rw-whitelist=*) quote_sh "-Dblock_drv_rw_whitelist=$2" ;;
--enable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=true ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 26/34] configure: omit options with default values from meson command line
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (24 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 25/34] meson: pass more options directly as -D Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 27/34] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
` (7 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
This has no functional change, it only makes the command line shorter
and nicer.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 29 +++++++++++++++++------------
meson.build | 2 +-
meson_options.txt | 2 +-
3 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/configure b/configure
index c6edbceff0..19947d8d6c 100755
--- a/configure
+++ b/configure
@@ -2348,19 +2348,24 @@ if test "$skip_meson" = no; then
mv $cross config-meson.cross
rm -rf meson-private meson-info meson-logs
+
+ # Built-in options
+ test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
+ test "$default_feature" = no && meson_option_add -Dauto_features=disabled
+ test "$pie" = no && meson_option_add -Db_pie=false
+ test "$werror" = yes && meson_option_add -Dwerror=true
+
+ # QEMU options
+ test "$capstone" != auto && meson_option_add "-Dcapstone=$capstone"
+ test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
+ test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
+ test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
+ test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
+ test "$slirp" != auto && meson_option_add "-Dslirp=$slirp"
+ test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
+ test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
run_meson() {
- NINJA=$ninja $meson setup \
- --prefix "$prefix" \
- --bindir "$bindir" \
- -Dqemu_suffix="$qemu_suffix" \
- -Dsmbd="$smbd" \
- -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
- -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
- -Dcfi=$cfi -Dtcg=$tcg \
- -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
- $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
- $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
- "$@" $cross_arg "$PWD" "$source_path"
+ NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
}
eval run_meson $meson_options
if test "$?" -ne 0 ; then
diff --git a/meson.build b/meson.build
index 1fa4cc255e..6913ab0251 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('qemu', ['c'], meson_version: '>=0.59.3',
default_options: ['warning_level=1', 'c_std=gnu11', 'cpp_std=gnu++11', 'b_colorout=auto',
- 'b_staticpic=false', 'stdsplit=false', 'optimization=2'],
+ 'b_staticpic=false', 'stdsplit=false', 'optimization=2', 'b_pie=true'],
version: files('VERSION'))
add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true)
diff --git a/meson_options.txt b/meson_options.txt
index a76fadbd7d..8efd5f520c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -78,7 +78,7 @@ option('xen', type: 'feature', value: 'auto',
description: 'Xen backend support')
option('xen_pci_passthrough', type: 'feature', value: 'auto',
description: 'Xen PCI passthrough support')
-option('tcg', type: 'feature', value: 'auto',
+option('tcg', type: 'feature', value: 'enabled',
description: 'TCG support')
option('tcg_interpreter', type: 'boolean', value: false,
description: 'TCG with bytecode interpreter (slow)')
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 27/34] meson, virtio: place all virtio-pci devices under virtio_pci_ss
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (25 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 26/34] configure: omit options with default values from meson command line Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 28/34] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
` (6 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Since a sourceset already exists for this, avoid unnecessary repeat
of CONFIG_VIRTIO_PCI.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/virtio/meson.build | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 67dc77e00f..f371404b04 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -16,9 +16,7 @@ virtio_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user.c'))
virtio_ss.add(when: 'CONFIG_VHOST_VDPA', if_true: files('vhost-shadow-virtqueue.c', 'vhost-vdpa.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_BALLOON', if_true: files('virtio-balloon.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto.c'))
-virtio_ss.add(when: ['CONFIG_VIRTIO_CRYPTO', 'CONFIG_VIRTIO_PCI'], if_true: files('virtio-crypto-pci.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs.c'))
-virtio_ss.add(when: ['CONFIG_VHOST_USER_FS', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-fs-pci.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_PMEM', if_true: files('virtio-pmem.c'))
virtio_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock.c', 'vhost-vsock-common.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock.c', 'vhost-vsock-common.c'))
@@ -26,17 +24,20 @@ virtio_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_IOMMU', if_true: files('virtio-iommu.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
-virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'], if_true: files('vhost-user-i2c-pci.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
-virtio_ss.add(when: ['CONFIG_VHOST_USER_RNG', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-rng-pci.c'))
virtio_pci_ss = ss.source_set()
virtio_pci_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_SCSI', if_true: files('vhost-user-scsi-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_SCSI', if_true: files('vhost-scsi-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs-pci.c'))
+
+virtio_pci_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_INPUT_HOST', if_true: files('virtio-input-host-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_INPUT', if_true: files('virtio-input-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng-pci.c'))
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 28/34] configure: simplify vhost-net-{user, vdpa} configuration
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (26 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 27/34] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 29/34] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
` (5 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Cleanup to ease review of the conversion to meson. vhost_net_user and
vhost_net_vdpa are never assigned anything in the command line parsing
loop, so they are always equal to $vhost_user and $vhost_vdpa.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index 19947d8d6c..c5bffcf703 100755
--- a/configure
+++ b/configure
@@ -1554,10 +1554,6 @@ if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
fi
# vhost-user backends
-test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
-if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-net-user requires --enable-vhost-user"
-fi
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-crypto requires --enable-vhost-user"
@@ -1566,16 +1562,11 @@ test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
fi
-#vhost-vdpa backends
-test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
-if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
- error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
-fi
# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
if test "$vhost_net" = ""; then
- test "$vhost_net_user" = "yes" && vhost_net=yes
- test "$vhost_net_vdpa" = "yes" && vhost_net=yes
+ test "$vhost_user" = "yes" && vhost_net=yes
+ test "$vhost_vdpa" = "yes" && vhost_net=yes
test "$vhost_kernel" = "yes" && vhost_net=yes
fi
@@ -2104,10 +2095,10 @@ fi
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_host_mak
fi
-if test "$vhost_net_user" = "yes" ; then
+if test "$vhost_user" = "yes" ; then
echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
fi
-if test "$vhost_net_vdpa" = "yes" ; then
+if test "$vhost_vdpa" = "yes" ; then
echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
fi
if test "$vhost_crypto" = "yes" ; then
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 29/34] build: move vhost-vsock configuration to Kconfig
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (27 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 28/34] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 30/34] build: move vhost-scsi " Paolo Bonzini
` (4 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
vhost-vsock and vhost-user-vsock are two devices of their own; it should
be possible to enable/disable them with --without-default-devices, not
--without-default-features. Compute their default value in Kconfig to
obtain the more intuitive behavior.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 16 ----------------
hw/virtio/Kconfig | 10 ++++++++++
meson.build | 1 -
3 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/configure b/configure
index c5bffcf703..18b18a6551 100755
--- a/configure
+++ b/configure
@@ -286,7 +286,6 @@ vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
vhost_scsi="$default_feature"
-vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
@@ -878,10 +877,6 @@ for opt do
;;
--enable-vhost-scsi) vhost_scsi="yes"
;;
- --disable-vhost-vsock) vhost_vsock="no"
- ;;
- --enable-vhost-vsock) vhost_vsock="yes"
- ;;
--disable-vhost-user-fs) vhost_user_fs="no"
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
@@ -1108,7 +1103,6 @@ cat << EOF
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
- vhost-vsock virtio sockets device support
vhost-scsi vhost-scsi kernel target support
vhost-crypto vhost-user-crypto backend support
vhost-kernel vhost kernel backend support
@@ -1548,10 +1542,6 @@ test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
fi
-test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
-if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
- error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
-fi
# vhost-user backends
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
@@ -2104,12 +2094,6 @@ fi
if test "$vhost_crypto" = "yes" ; then
echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
fi
-if test "$vhost_vsock" = "yes" ; then
- echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
- if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
- fi
-fi
if test "$vhost_kernel" = "yes" ; then
echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
fi
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index c144d42f9b..b642ae1081 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -59,6 +59,16 @@ config VIRTIO_MEM
depends on VIRTIO_MEM_SUPPORTED
select MEM_DEVICE
+config VHOST_VSOCK
+ bool
+ default y
+ depends on VIRTIO && VHOST_KERNEL
+
+config VHOST_USER_VSOCK
+ bool
+ default y
+ depends on VIRTIO && VHOST_USER
+
config VHOST_USER_I2C
bool
default y
diff --git a/meson.build b/meson.build
index 6913ab0251..a2de079801 100644
--- a/meson.build
+++ b/meson.build
@@ -3689,7 +3689,6 @@ summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNE
summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
-summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 30/34] build: move vhost-scsi configuration to Kconfig
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (28 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 29/34] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 31/34] build: move vhost-user-fs " Paolo Bonzini
` (3 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
vhost-scsi and vhost-user-scsi are two devices of their own; it should
be possible to enable/disable them with --without-default-devices, not
--without-default-features. Compute their default value in Kconfig to
obtain the more intuitive behavior.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 15 ---------------
hw/scsi/Kconfig | 5 +++++
include/hw/virtio/virtio-scsi.h | 2 --
meson.build | 1 -
4 files changed, 5 insertions(+), 18 deletions(-)
diff --git a/configure b/configure
index 18b18a6551..ceef39a615 100755
--- a/configure
+++ b/configure
@@ -285,7 +285,6 @@ EXTRA_LDFLAGS=""
vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
-vhost_scsi="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
@@ -873,10 +872,6 @@ for opt do
;;
--enable-vhost-crypto) vhost_crypto="yes"
;;
- --disable-vhost-scsi) vhost_scsi="no"
- ;;
- --enable-vhost-scsi) vhost_scsi="yes"
- ;;
--disable-vhost-user-fs) vhost_user_fs="no"
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
@@ -1103,7 +1098,6 @@ cat << EOF
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
- vhost-scsi vhost-scsi kernel target support
vhost-crypto vhost-user-crypto backend support
vhost-kernel vhost kernel backend support
vhost-user vhost-user backend support
@@ -1537,12 +1531,6 @@ if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
error_exit "vhost-kernel is only available on Linux"
fi
-# vhost-kernel devices
-test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
-if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
- error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
-fi
-
# vhost-user backends
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
@@ -2079,9 +2067,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$vhost_scsi" = "yes" ; then
- echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
-fi
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_host_mak
fi
diff --git a/hw/scsi/Kconfig b/hw/scsi/Kconfig
index 77d397c949..e7b34dc8e2 100644
--- a/hw/scsi/Kconfig
+++ b/hw/scsi/Kconfig
@@ -48,6 +48,11 @@ config VIRTIO_SCSI
depends on VIRTIO
select SCSI
+config VHOST_SCSI
+ bool
+ default y
+ depends on VIRTIO && VHOST_KERNEL
+
config VHOST_USER_SCSI
bool
# Only PCI devices are provided for now
diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index 543681bc18..0997313f0a 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -55,10 +55,8 @@ struct VirtIOSCSIConf {
bool seg_max_adjust;
uint32_t max_sectors;
uint32_t cmd_per_lun;
-#ifdef CONFIG_VHOST_SCSI
char *vhostfd;
char *wwpn;
-#endif
CharBackend chardev;
uint32_t boot_tpgt;
IOThread *iothread;
diff --git a/meson.build b/meson.build
index a2de079801..ac1a8fd4e7 100644
--- a/meson.build
+++ b/meson.build
@@ -3688,7 +3688,6 @@ summary_info += {'QOM debugging': get_option('qom_cast_debug')}
summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
-summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 31/34] build: move vhost-user-fs configuration to Kconfig
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (29 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 30/34] build: move vhost-scsi " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 32/34] meson: create have_vhost_* variables Paolo Bonzini
` (2 subsequent siblings)
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
vhost-user-fs is a device and it should be possible to enable/disable
it with --without-default-devices, not --without-default-features.
Compute its default value in Kconfig to obtain the more intuitive
behavior.
In this case the configure options were undocumented, too.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 12 ------------
hw/virtio/Kconfig | 5 +++++
meson.build | 1 -
3 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index ceef39a615..3389db6f3a 100755
--- a/configure
+++ b/configure
@@ -286,7 +286,6 @@ vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
vhost_user="no"
-vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
debug_tcg="no"
sanitizers="no"
@@ -872,10 +871,6 @@ for opt do
;;
--enable-vhost-crypto) vhost_crypto="yes"
;;
- --disable-vhost-user-fs) vhost_user_fs="no"
- ;;
- --enable-vhost-user-fs) vhost_user_fs="yes"
- ;;
--disable-zlib-test)
;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
@@ -1536,10 +1531,6 @@ test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-crypto requires --enable-vhost-user"
fi
-test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
-if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
-fi
# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
if test "$vhost_net" = ""; then
@@ -2088,9 +2079,6 @@ fi
if test "$vhost_vdpa" = "yes" ; then
echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
fi
-if test "$vhost_user_fs" = "yes" ; then
- echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
-fi
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index b642ae1081..f8e235f814 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -78,3 +78,8 @@ config VHOST_USER_RNG
bool
default y
depends on VIRTIO && VHOST_USER
+
+config VHOST_USER_FS
+ bool
+ default y
+ depends on VIRTIO && VHOST_USER
diff --git a/meson.build b/meson.build
index ac1a8fd4e7..85059154e4 100644
--- a/meson.build
+++ b/meson.build
@@ -3690,7 +3690,6 @@ summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
-summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
summary_info += {'build guest agent': have_ga}
summary(summary_info, bool_yn: true, section: 'Configurable features')
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 32/34] meson: create have_vhost_* variables
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (30 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 31/34] build: move vhost-user-fs " Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 33/34] meson: use have_vhost_* variables to pick sources Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 34/34] configure, meson: move vhost options to Meson Paolo Bonzini
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
When using Meson options rather than config-host.h, the "when" clauses
have to be changed to if statements (which is not necessarily great,
though at least it highlights which parts of the build are per-target
and which are not).
Do that before moving vhost logic to meson.build, though for now
the variables are just based on config-host.mak data.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 31 ++++++++++++++++++++-----------
tests/meson.build | 2 +-
tools/meson.build | 2 +-
3 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/meson.build b/meson.build
index 85059154e4..259c8d9174 100644
--- a/meson.build
+++ b/meson.build
@@ -312,6 +312,15 @@ have_tpm = get_option('tpm') \
.require(targetos != 'windows', error_message: 'TPM emulation only available on POSIX systems') \
.allowed()
+# vhost
+have_vhost_user = 'CONFIG_VHOST_USER' in config_host
+have_vhost_vdpa = 'CONFIG_VHOST_VDPA' in config_host
+have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
+have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
+have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
+have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
+
# Target-specific libraries and flags
libm = cc.find_library('m', required: false)
threads = dependency('threads')
@@ -1440,7 +1449,7 @@ has_statx_mnt_id = cc.links(statx_mnt_id_test)
have_vhost_user_blk_server = get_option('vhost_user_blk_server') \
.require(targetos == 'linux',
error_message: 'vhost_user_blk_server requires linux') \
- .require('CONFIG_VHOST_USER' in config_host,
+ .require(have_vhost_user,
error_message: 'vhost_user_blk_server requires vhost-user support') \
.disable_auto_if(not have_system) \
.allowed()
@@ -2294,9 +2303,9 @@ host_kconfig = \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
(opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
(x11.found() ? ['CONFIG_X11=y'] : []) + \
- ('CONFIG_VHOST_USER' in config_host ? ['CONFIG_VHOST_USER=y'] : []) + \
- ('CONFIG_VHOST_VDPA' in config_host ? ['CONFIG_VHOST_VDPA=y'] : []) + \
- ('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
+ (have_vhost_user ? ['CONFIG_VHOST_USER=y'] : []) + \
+ (have_vhost_vdpa ? ['CONFIG_VHOST_VDPA=y'] : []) + \
+ (have_vhost_kernel ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
(have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
@@ -2978,7 +2987,7 @@ if have_system or have_user
endif
vhost_user = not_found
-if targetos == 'linux' and 'CONFIG_VHOST_USER' in config_host
+if targetos == 'linux' and have_vhost_user
libvhost_user = subproject('libvhost-user')
vhost_user = libvhost_user.get_variable('vhost_user_dep')
endif
@@ -3559,7 +3568,7 @@ if have_tools
dependencies: qemuutil,
install: true)
- if 'CONFIG_VHOST_USER' in config_host
+ if have_vhost_user
subdir('contrib/vhost-user-blk')
subdir('contrib/vhost-user-gpu')
subdir('contrib/vhost-user-input')
@@ -3685,12 +3694,12 @@ if 'simple' in get_option('trace_backends')
endif
summary_info += {'D-Bus display': dbus_display}
summary_info += {'QOM debugging': get_option('qom_cast_debug')}
-summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
-summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
-summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
-summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
+summary_info += {'vhost-kernel support': have_vhost_kernel}
+summary_info += {'vhost-net support': have_vhost_net}
+summary_info += {'vhost-user support': have_vhost_user}
+summary_info += {'vhost-user-crypto support': have_vhost_user_crypto}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
-summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
+summary_info += {'vhost-vdpa support': have_vhost_vdpa}
summary_info += {'build guest agent': have_ga}
summary(summary_info, bool_yn: true, section: 'Configurable features')
diff --git a/tests/meson.build b/tests/meson.build
index 4f691e8465..8e318ec513 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -68,7 +68,7 @@ test_deps = {
'test-qht-par': qht_bench,
}
-if have_tools and 'CONFIG_VHOST_USER' in config_host and 'CONFIG_LINUX' in config_host
+if have_tools and have_vhost_user and 'CONFIG_LINUX' in config_host
executable('vhost-user-bridge',
sources: files('vhost-user-bridge.c'),
dependencies: [qemuutil, vhost_user])
diff --git a/tools/meson.build b/tools/meson.build
index 46977af84f..10eb3a043f 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -3,7 +3,7 @@ have_virtiofsd = get_option('virtiofsd') \
error_message: 'virtiofsd requires Linux') \
.require(seccomp.found() and libcap_ng.found(),
error_message: 'virtiofsd requires libcap-ng-devel and seccomp-devel') \
- .require('CONFIG_VHOST_USER' in config_host,
+ .require(have_vhost_user,
error_message: 'virtiofsd needs vhost-user-support') \
.disable_auto_if(not have_tools and not have_system) \
.allowed()
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 33/34] meson: use have_vhost_* variables to pick sources
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (31 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 32/34] meson: create have_vhost_* variables Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 34/34] configure, meson: move vhost options to Meson Paolo Bonzini
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Kconfig.host | 3 ---
backends/meson.build | 8 ++++++--
hw/net/meson.build | 8 ++++++--
hw/virtio/Kconfig | 3 ---
hw/virtio/meson.build | 25 ++++++++++++++++---------
meson.build | 1 +
net/meson.build | 12 +++++++-----
tests/qtest/meson.build | 4 +++-
8 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/Kconfig.host b/Kconfig.host
index 60b9c07b5e..1165c4eacd 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -22,15 +22,12 @@ config TPM
config VHOST_USER
bool
- select VHOST
config VHOST_VDPA
bool
- select VHOST
config VHOST_KERNEL
bool
- select VHOST
config VIRTFS
bool
diff --git a/backends/meson.build b/backends/meson.build
index 535c3ca7dd..b1884a88ec 100644
--- a/backends/meson.build
+++ b/backends/meson.build
@@ -12,9 +12,13 @@ softmmu_ss.add([files(
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files('rng-random.c'))
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files('hostmem-file.c'))
softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('hostmem-memfd.c'))
-softmmu_ss.add(when: ['CONFIG_VHOST_USER', 'CONFIG_VIRTIO'], if_true: files('vhost-user.c'))
+if have_vhost_user
+ softmmu_ss.add(when: 'CONFIG_VIRTIO', if_true: files('vhost-user.c'))
+endif
softmmu_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost.c'))
-softmmu_ss.add(when: ['CONFIG_VIRTIO_CRYPTO', 'CONFIG_VHOST_CRYPTO'], if_true: files('cryptodev-vhost-user.c'))
+if have_vhost_user_crypto
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost-user.c'))
+endif
softmmu_ss.add(when: gio, if_true: files('dbus-vmstate.c'))
softmmu_ss.add(when: 'CONFIG_SGX', if_true: files('hostmem-epc.c'))
diff --git a/hw/net/meson.build b/hw/net/meson.build
index 685b75badb..ebac261542 100644
--- a/hw/net/meson.build
+++ b/hw/net/meson.build
@@ -46,8 +46,12 @@ specific_ss.add(when: 'CONFIG_XILINX_ETHLITE', if_true: files('xilinx_ethlite.c'
softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('net_rx_pkt.c'))
specific_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('virtio-net.c'))
-softmmu_ss.add(when: ['CONFIG_VIRTIO_NET', 'CONFIG_VHOST_NET'], if_true: files('vhost_net.c'), if_false: files('vhost_net-stub.c'))
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost_net-stub.c'))
+if have_vhost_net
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost_net.c'), if_false: files('vhost_net-stub.c'))
+ softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost_net-stub.c'))
+else
+ softmmu_ss.add(files('vhost_net-stub.c'))
+endif
softmmu_ss.add(when: 'CONFIG_ETSEC', if_true: files(
'fsl_etsec/etsec.c',
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index f8e235f814..e9ecae1f50 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -1,6 +1,3 @@
-config VHOST
- bool
-
config VIRTIO
bool
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index f371404b04..7e8877fd64 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -2,18 +2,22 @@ softmmu_virtio_ss = ss.source_set()
softmmu_virtio_ss.add(files('virtio-bus.c'))
softmmu_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('virtio-pci.c'))
softmmu_virtio_ss.add(when: 'CONFIG_VIRTIO_MMIO', if_true: files('virtio-mmio.c'))
-softmmu_virtio_ss.add(when: 'CONFIG_VHOST', if_false: files('vhost-stub.c'))
-
-softmmu_ss.add_all(when: 'CONFIG_VIRTIO', if_true: softmmu_virtio_ss)
-softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
-
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c'))
virtio_ss = ss.source_set()
virtio_ss.add(files('virtio.c'))
-virtio_ss.add(when: 'CONFIG_VHOST', if_true: files('vhost.c', 'vhost-backend.c', 'vhost-iova-tree.c'))
-virtio_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user.c'))
-virtio_ss.add(when: 'CONFIG_VHOST_VDPA', if_true: files('vhost-shadow-virtqueue.c', 'vhost-vdpa.c'))
+
+if have_vhost
+ virtio_ss.add(files('vhost.c', 'vhost-backend.c', 'vhost-iova-tree.c'))
+ if have_vhost_user
+ virtio_ss.add(files('vhost-user.c'))
+ endif
+ if have_vhost_vdpa
+ virtio_ss.add(files('vhost-vdpa.c', 'vhost-shadow-virtqueue.c'))
+ endif
+else
+ softmmu_virtio_ss.add(files('vhost-stub.c'))
+endif
+
virtio_ss.add(when: 'CONFIG_VIRTIO_BALLOON', if_true: files('virtio-balloon.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs.c'))
@@ -54,3 +58,6 @@ virtio_pci_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem-pci.c'))
virtio_ss.add_all(when: 'CONFIG_VIRTIO_PCI', if_true: virtio_pci_ss)
specific_ss.add_all(when: 'CONFIG_VIRTIO', if_true: virtio_ss)
+softmmu_ss.add_all(when: 'CONFIG_VIRTIO', if_true: softmmu_virtio_ss)
+softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
+softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c'))
diff --git a/meson.build b/meson.build
index 259c8d9174..da8ba8f159 100644
--- a/meson.build
+++ b/meson.build
@@ -319,6 +319,7 @@ have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost = have_vhost_user or have_vhost_vdpa or have_vhost_kernel
have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
# Target-specific libraries and flags
diff --git a/net/meson.build b/net/meson.build
index 847bc2ac85..c965e83b26 100644
--- a/net/meson.build
+++ b/net/meson.build
@@ -26,10 +26,10 @@ softmmu_ss.add(when: vde, if_true: files('vde.c'))
if have_netmap
softmmu_ss.add(files('netmap.c'))
endif
-vhost_user_ss = ss.source_set()
-vhost_user_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
-softmmu_ss.add_all(when: 'CONFIG_VHOST_NET_USER', if_true: vhost_user_ss)
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
+if have_vhost_net_user
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
+ softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
+endif
softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('tap-linux.c'))
softmmu_ss.add(when: 'CONFIG_BSD', if_true: files('tap-bsd.c'))
@@ -40,6 +40,8 @@ if not config_host.has_key('CONFIG_LINUX') and not config_host.has_key('CONFIG_B
endif
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files(tap_posix))
softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('tap-win32.c'))
-softmmu_ss.add(when: 'CONFIG_VHOST_NET_VDPA', if_true: files('vhost-vdpa.c'))
+if have_vhost_net_vdpa
+ softmmu_ss.add(files('vhost-vdpa.c'))
+endif
subdir('can')
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 6b9807c183..ca12b313e1 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -263,7 +263,9 @@ qos_test_ss.add(
if have_virtfs
qos_test_ss.add(files('virtio-9p-test.c'))
endif
-qos_test_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user-test.c'))
+if have_vhost_user
+ qos_test_ss.add(files('vhost-user-test.c'))
+endif
if have_tools and have_vhost_user_blk_server
qos_test_ss.add(files('vhost-user-blk-test.c'))
endif
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v2 34/34] configure, meson: move vhost options to Meson
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
` (32 preceding siblings ...)
2022-04-23 12:51 ` [PATCH v2 33/34] meson: use have_vhost_* variables to pick sources Paolo Bonzini
@ 2022-04-23 12:51 ` Paolo Bonzini
33 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2022-04-23 12:51 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau
Finish the conversion by moving all the definitions and the constraint
checks to meson_options.txt and meson.build respectively.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 82 -----------------------------------
meson.build | 33 +++++++++++---
meson_options.txt | 10 +++++
scripts/meson-buildoptions.sh | 15 +++++++
4 files changed, 51 insertions(+), 89 deletions(-)
diff --git a/configure b/configure
index 3389db6f3a..ee371c2a1f 100755
--- a/configure
+++ b/configure
@@ -282,11 +282,6 @@ EXTRA_CXXFLAGS=""
EXTRA_OBJCFLAGS=""
EXTRA_LDFLAGS=""
-vhost_kernel="$default_feature"
-vhost_net="$default_feature"
-vhost_crypto="$default_feature"
-vhost_user="no"
-vhost_vdpa="$default_feature"
debug_tcg="no"
sanitizers="no"
tsan="no"
@@ -526,7 +521,6 @@ haiku)
;;
linux)
linux="yes"
- vhost_user=${default_feature:-yes}
;;
esac
@@ -863,14 +857,6 @@ for opt do
;;
--with-coroutine=*) coroutine="$optarg"
;;
- --disable-vhost-net) vhost_net="no"
- ;;
- --enable-vhost-net) vhost_net="yes"
- ;;
- --disable-vhost-crypto) vhost_crypto="no"
- ;;
- --enable-vhost-crypto) vhost_crypto="yes"
- ;;
--disable-zlib-test)
;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
@@ -882,18 +868,6 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
- --disable-vhost-user) vhost_user="no"
- ;;
- --enable-vhost-user) vhost_user="yes"
- ;;
- --disable-vhost-vdpa) vhost_vdpa="no"
- ;;
- --enable-vhost-vdpa) vhost_vdpa="yes"
- ;;
- --disable-vhost-kernel) vhost_kernel="no"
- ;;
- --enable-vhost-kernel) vhost_kernel="yes"
- ;;
--disable-capstone) capstone="disabled"
;;
--enable-capstone) capstone="enabled"
@@ -1092,11 +1066,6 @@ cat << EOF
debug-info debugging information
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
- vhost-net vhost-net kernel acceleration support
- vhost-crypto vhost-user-crypto backend support
- vhost-kernel vhost kernel backend support
- vhost-user vhost-user backend support
- vhost-vdpa vhost-vdpa kernel backend support
NOTE: The object files are built at the place where configure is launched
EOF
@@ -1510,35 +1479,6 @@ else
exit 1
fi
-#########################################
-# vhost interdependencies and host support
-
-# vhost backends
-if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
- error_exit "vhost-user is not available on Windows"
-fi
-test "$vhost_vdpa" = "" && vhost_vdpa=$linux
-if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
- error_exit "vhost-vdpa is only available on Linux"
-fi
-test "$vhost_kernel" = "" && vhost_kernel=$linux
-if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
- error_exit "vhost-kernel is only available on Linux"
-fi
-
-# vhost-user backends
-test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
-if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-crypto requires --enable-vhost-user"
-fi
-
-# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
-if test "$vhost_net" = ""; then
- test "$vhost_user" = "yes" && vhost_net=yes
- test "$vhost_vdpa" = "yes" && vhost_net=yes
- test "$vhost_kernel" = "yes" && vhost_net=yes
-fi
-
##########################################
# pkg-config probe
@@ -2058,28 +1998,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$vhost_net" = "yes" ; then
- echo "CONFIG_VHOST_NET=y" >> $config_host_mak
-fi
-if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
-fi
-if test "$vhost_vdpa" = "yes" ; then
- echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
-fi
-if test "$vhost_crypto" = "yes" ; then
- echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
-fi
-if test "$vhost_kernel" = "yes" ; then
- echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
-fi
-if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_USER=y" >> $config_host_mak
-fi
-if test "$vhost_vdpa" = "yes" ; then
- echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
-fi
-
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
echo "CONFIG_BSD=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index da8ba8f159..326100adf4 100644
--- a/meson.build
+++ b/meson.build
@@ -313,14 +313,26 @@ have_tpm = get_option('tpm') \
.allowed()
# vhost
-have_vhost_user = 'CONFIG_VHOST_USER' in config_host
-have_vhost_vdpa = 'CONFIG_VHOST_VDPA' in config_host
-have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
-have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
-have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
-have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost_user = get_option('vhost_user') \
+ .disable_auto_if(targetos != 'linux') \
+ .require(targetos != 'windows',
+ error_message: 'vhost-user is not available on Windows').allowed()
+have_vhost_vdpa = get_option('vhost_vdpa') \
+ .require(targetos == 'linux',
+ error_message: 'vhost-vdpa is only available on Linux').allowed()
+have_vhost_kernel = get_option('vhost_kernel') \
+ .require(targetos == 'linux',
+ error_message: 'vhost-kernel is only available on Linux').allowed()
+have_vhost_user_crypto = get_option('vhost_crypto') \
+ .require(have_vhost_user,
+ error_message: 'vhost-crypto requires vhost-user to be enabled').allowed()
+
have_vhost = have_vhost_user or have_vhost_vdpa or have_vhost_kernel
-have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
+
+have_vhost_net_user = have_vhost_user and get_option('vhost_net').allowed()
+have_vhost_net_vdpa = have_vhost_vdpa and get_option('vhost_net').allowed()
+have_vhost_net_kernel = have_vhost_kernel and get_option('vhost_net').allowed()
+have_vhost_net = have_vhost_net_kernel or have_vhost_net_user or have_vhost_net_vdpa
# Target-specific libraries and flags
libm = cc.find_library('m', required: false)
@@ -1709,6 +1721,13 @@ config_host_data.set('CONFIG_SNAPPY', snappy.found())
config_host_data.set('CONFIG_TPM', have_tpm)
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
config_host_data.set('CONFIG_VDE', vde.found())
+config_host_data.set('CONFIG_VHOST_NET', have_vhost_net)
+config_host_data.set('CONFIG_VHOST_NET_USER', have_vhost_net_user)
+config_host_data.set('CONFIG_VHOST_NET_VDPA', have_vhost_net_vdpa)
+config_host_data.set('CONFIG_VHOST_KERNEL', have_vhost_kernel)
+config_host_data.set('CONFIG_VHOST_USER', have_vhost_user)
+config_host_data.set('CONFIG_VHOST_CRYPTO', have_vhost_user_crypto)
+config_host_data.set('CONFIG_VHOST_VDPA', have_vhost_vdpa)
config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server)
config_host_data.set('CONFIG_VNC', vnc.found())
config_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
diff --git a/meson_options.txt b/meson_options.txt
index 8efd5f520c..24a2a593f0 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -235,6 +235,16 @@ option('oss', type: 'feature', value: 'auto',
option('pa', type: 'feature', value: 'auto',
description: 'PulseAudio sound support')
+option('vhost_kernel', type: 'feature', value: 'auto',
+ description: 'vhost kernel backend support')
+option('vhost_net', type: 'feature', value: 'auto',
+ description: 'vhost-net kernel acceleration support')
+option('vhost_user', type: 'feature', value: 'auto',
+ description: 'vhost-user backend support')
+option('vhost_crypto', type: 'feature', value: 'auto',
+ description: 'vhost-user crypto backend support')
+option('vhost_vdpa', type: 'feature', value: 'auto',
+ description: 'vhost-vdpa kernel backend support')
option('vhost_user_blk_server', type: 'feature', value: 'auto',
description: 'build vhost-user-blk server')
option('virtfs', type: 'feature', value: 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 274639777e..28258e1478 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -153,8 +153,13 @@ meson_options_help() {
printf "%s\n" ' usb-redir libusbredir support'
printf "%s\n" ' vde vde network backend support'
printf "%s\n" ' vdi vdi image format support'
+ printf "%s\n" ' vhost-crypto vhost-user crypto backend support'
+ printf "%s\n" ' vhost-kernel vhost kernel backend support'
+ printf "%s\n" ' vhost-net vhost-net kernel acceleration support'
+ printf "%s\n" ' vhost-user vhost-user backend support'
printf "%s\n" ' vhost-user-blk-server'
printf "%s\n" ' build vhost-user-blk server'
+ printf "%s\n" ' vhost-vdpa vhost-vdpa kernel backend support'
printf "%s\n" ' virglrenderer virgl rendering support'
printf "%s\n" ' virtfs virtio-9p support'
printf "%s\n" ' virtiofsd build virtiofs daemon (virtiofsd)'
@@ -407,8 +412,18 @@ _meson_option_parse() {
--disable-vde) printf "%s" -Dvde=disabled ;;
--enable-vdi) printf "%s" -Dvdi=enabled ;;
--disable-vdi) printf "%s" -Dvdi=disabled ;;
+ --enable-vhost-crypto) printf "%s" -Dvhost_crypto=enabled ;;
+ --disable-vhost-crypto) printf "%s" -Dvhost_crypto=disabled ;;
+ --enable-vhost-kernel) printf "%s" -Dvhost_kernel=enabled ;;
+ --disable-vhost-kernel) printf "%s" -Dvhost_kernel=disabled ;;
+ --enable-vhost-net) printf "%s" -Dvhost_net=enabled ;;
+ --disable-vhost-net) printf "%s" -Dvhost_net=disabled ;;
+ --enable-vhost-user) printf "%s" -Dvhost_user=enabled ;;
+ --disable-vhost-user) printf "%s" -Dvhost_user=disabled ;;
--enable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=enabled ;;
--disable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=disabled ;;
+ --enable-vhost-vdpa) printf "%s" -Dvhost_vdpa=enabled ;;
+ --disable-vhost-vdpa) printf "%s" -Dvhost_vdpa=disabled ;;
--enable-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
--disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
--enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH v2 17/34] configure: move Windows flags detection to meson
2022-04-23 12:51 ` [PATCH v2 17/34] configure: move Windows flags " Paolo Bonzini
@ 2022-04-24 12:33 ` Marc-André Lureau
0 siblings, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2022-04-24 12:33 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 2267 bytes --]
On Sat, Apr 23, 2022 at 5:09 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> v1->v2: fix get_option('optimization') comparison to use a string
>
> configure | 20 --------------------
> meson.build | 8 ++++++++
> 2 files changed, 8 insertions(+), 20 deletions(-)
>
> diff --git a/configure b/configure
> index 0b236fda59..a6ba59cf6f 100755
> --- a/configure
> +++ b/configure
> @@ -224,10 +224,6 @@ glob() {
> eval test -z '"${1#'"$2"'}"'
> }
>
> -ld_has() {
> - $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
> -}
> -
> if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
> then
> error_exit "main directory cannot contain spaces nor colons"
> @@ -2088,22 +2084,6 @@ if test "$solaris" = "no" && test "$tsan" = "no";
> then
> fi
> fi
>
> -# Use ASLR, no-SEH and DEP if available
> -if test "$mingw32" = "yes" ; then
> - flags="--no-seh --nxcompat"
> -
> - # Disable ASLR for debug builds to allow debugging with gdb
> - if test "$debug" = "no" ; then
> - flags="--dynamicbase $flags"
> - fi
> -
> - for flag in $flags; do
> - if ld_has $flag ; then
> - QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
> - fi
> - done
> -fi
> -
> # Guest agent Windows MSI package
>
> if test "$QEMU_GA_MANUFACTURER" = ""; then
> diff --git a/meson.build b/meson.build
> index 1a9549d90c..d569c6e944 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -182,6 +182,14 @@ qemu_cxxflags = config_host['QEMU_CXXFLAGS'].split()
> qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
> qemu_ldflags = config_host['QEMU_LDFLAGS'].split()
>
> +if targetos == 'windows'
> + qemu_ldflags += cc.get_supported_link_arguments('-Wl,--no-seh',
> '-Wl,--nxcompat')
> + # Disable ASLR for debug builds to allow debugging with gdb
> + if get_option('optimization') == '0'
> + qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase')
> + endif
> +endif
> +
> if get_option('gprof')
> qemu_cflags += ['-p']
> qemu_cxxflags += ['-p']
> --
> 2.35.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3493 bytes --]
^ permalink raw reply [flat|nested] 36+ messages in thread
end of thread, other threads:[~2022-04-24 12:36 UTC | newest]
Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-23 12:51 [PATCH v2 00/34] Misc meson conversions for QEMU 7.1 Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 01/34] meson: show final set of compiler flags Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 02/34] configure: remove dead code Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 03/34] qga: wixl: get path to sysroot from pkg-config as intended Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 04/34] configure: pc-bios/qemu-icon.bmp does not exist Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 05/34] configure: gcov should not exclude fortify-source Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 06/34] configure: move --enable/--disable-debug-info to second option parsing pass Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 07/34] configure, meson: move OpenGL check to meson Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 08/34] meson, configure: move RDMA options " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 09/34] meson, configure: move keyctl test " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 10/34] meson, configure: move usbfs " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 11/34] meson, configure: move libgio " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 12/34] meson: remove CONFIG_XEN_PCI_PASSTHROUGH from config-target.h Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 13/34] meson, configure: move --enable-module-upgrades to meson Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 14/34] meson, configure: move Xen detection " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 15/34] meson-buildoptions: add support for string options Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 16/34] configure, meson: move iasl detection to meson Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 17/34] configure: move Windows flags " Paolo Bonzini
2022-04-24 12:33 ` Marc-André Lureau
2022-04-23 12:51 ` [PATCH v2 18/34] configure: switch string options to automatic parsing Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 19/34] meson, configure: move --tls-priority to meson Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 20/34] meson, configure: move bdrv whitelists " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 21/34] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 22/34] meson, configure: move --interp-prefix " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 23/34] meson: always combine directories with prefix Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 24/34] configure: switch directory options to automatic parsing Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 25/34] meson: pass more options directly as -D Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 26/34] configure: omit options with default values from meson command line Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 27/34] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 28/34] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 29/34] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 30/34] build: move vhost-scsi " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 31/34] build: move vhost-user-fs " Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 32/34] meson: create have_vhost_* variables Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 33/34] meson: use have_vhost_* variables to pick sources Paolo Bonzini
2022-04-23 12:51 ` [PATCH v2 34/34] configure, meson: move vhost options to Meson Paolo Bonzini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.