* [PATCH 01/24] configure: remove --oss-lib
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
@ 2021-10-07 13:06 ` Paolo Bonzini
2021-10-07 17:32 ` Thomas Huth
2021-10-07 20:42 ` Marc-André Lureau
2021-10-07 13:06 ` [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT Paolo Bonzini
` (22 subsequent siblings)
23 siblings, 2 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:06 UTC (permalink / raw)
To: qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
OSS is a kernel API, so the option should not be needed. The library
is used on NetBSD, where OSS is emulated, so keep the variable.
Cc: Gerd Hoffman <kraxel@redhat.com>
Cc: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 3 ---
1 file changed, 3 deletions(-)
diff --git a/configure b/configure
index 877bf3d76a..ab6bc0c994 100755
--- a/configure
+++ b/configure
@@ -1007,8 +1007,6 @@ for opt do
;;
--enable-gettext) gettext="enabled"
;;
- --oss-lib=*) oss_lib="$optarg"
- ;;
--audio-drv-list=*) audio_drv_list="$optarg"
;;
--block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
@@ -1815,7 +1813,6 @@ Advanced options (experts only):
--disable-slirp disable SLIRP userspace network connectivity
--enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
--enable-malloc-trim enable libc malloc_trim() for memory optimization
- --oss-lib path to OSS library
--cpu=CPU Build for host CPU [$cpu]
--with-coroutine=BACKEND coroutine backend. Supported options:
ucontext, sigaltstack, windows
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 01/24] configure: remove --oss-lib
2021-10-07 13:06 ` [PATCH 01/24] configure: remove --oss-lib Paolo Bonzini
@ 2021-10-07 17:32 ` Thomas Huth
2021-10-07 20:42 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Thomas Huth @ 2021-10-07 17:32 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
On 07/10/2021 15.06, Paolo Bonzini wrote:
> OSS is a kernel API, so the option should not be needed. The library
> is used on NetBSD, where OSS is emulated, so keep the variable.
>
> Cc: Gerd Hoffman <kraxel@redhat.com>
> Cc: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git a/configure b/configure
> index 877bf3d76a..ab6bc0c994 100755
> --- a/configure
> +++ b/configure
> @@ -1007,8 +1007,6 @@ for opt do
> ;;
> --enable-gettext) gettext="enabled"
> ;;
> - --oss-lib=*) oss_lib="$optarg"
> - ;;
> --audio-drv-list=*) audio_drv_list="$optarg"
> ;;
> --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
> @@ -1815,7 +1813,6 @@ Advanced options (experts only):
> --disable-slirp disable SLIRP userspace network connectivity
> --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
> --enable-malloc-trim enable libc malloc_trim() for memory optimization
> - --oss-lib path to OSS library
> --cpu=CPU Build for host CPU [$cpu]
> --with-coroutine=BACKEND coroutine backend. Supported options:
> ucontext, sigaltstack, windows
>
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 01/24] configure: remove --oss-lib
2021-10-07 13:06 ` [PATCH 01/24] configure: remove --oss-lib Paolo Bonzini
2021-10-07 17:32 ` Thomas Huth
@ 2021-10-07 20:42 ` Marc-André Lureau
2021-10-08 9:19 ` Paolo Bonzini
1 sibling, 1 reply; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Volker Rümelin, QEMU, Gerd Hoffman
[-- Attachment #1: Type: text/plain, Size: 1985 bytes --]
Hi
On Thu, Oct 7, 2021 at 5:11 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> OSS is a kernel API, so the option should not be needed. The library
> is used on NetBSD, where OSS is emulated, so keep the variable.
>
> Cc: Gerd Hoffman <kraxel@redhat.com>
> Cc: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Not just NetBSD. You could --audio-drv-list=oss and --oss-lib= to specify
the library to link with.
However, I am not sure this is still needed. It was introduced in:
commit 2f6a1ab038eefd6e5a9cfc8ec49435f6ad025812
Author: Blue Swirl <blauwirbel@gmail.com>
Date: Thu Aug 21 18:00:53 2008 +0000
Fix OSS on OpenBSD
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5045
c046a42c-6fe2-441c-8c8c-71466251a162
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
> configure | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git a/configure b/configure
> index 877bf3d76a..ab6bc0c994 100755
> --- a/configure
> +++ b/configure
> @@ -1007,8 +1007,6 @@ for opt do
> ;;
> --enable-gettext) gettext="enabled"
> ;;
> - --oss-lib=*) oss_lib="$optarg"
> - ;;
> --audio-drv-list=*) audio_drv_list="$optarg"
> ;;
> --block-drv-rw-whitelist=*|--block-drv-whitelist=*)
> block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
> @@ -1815,7 +1813,6 @@ Advanced options (experts only):
> --disable-slirp disable SLIRP userspace network connectivity
> --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter,
> experimental and slow)
> --enable-malloc-trim enable libc malloc_trim() for memory
> optimization
> - --oss-lib path to OSS library
> --cpu=CPU Build for host CPU [$cpu]
> --with-coroutine=BACKEND coroutine backend. Supported options:
> ucontext, sigaltstack, windows
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3173 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 01/24] configure: remove --oss-lib
2021-10-07 20:42 ` Marc-André Lureau
@ 2021-10-08 9:19 ` Paolo Bonzini
0 siblings, 0 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-08 9:19 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: Volker Rümelin, QEMU, Gerd Hoffman
On 07/10/21 22:42, Marc-André Lureau wrote:
>
> Cc: Gerd Hoffman <kraxel@redhat.com <mailto:kraxel@redhat.com>>
> Cc: Volker Rümelin <vr_qemu@t-online.de <mailto:vr_qemu@t-online.de>>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com
> <mailto:pbonzini@redhat.com>>
>
> Not just NetBSD. You could --audio-drv-list=oss and --oss-lib= to
> specify the library to link with.
Yes, but the question is who would use --oss-lib. And secondarily, if
the answer is not "no one", whether they would be accomodated better by
a change to QEMU itself.
For example OpenBSD support was removed in 2013:
Remove OSS support for OpenBSD
Remove the OSS support for OpenBSD. The OSS API has not been usable
for quite some time.
Signed-off-by: Brad Smith <brad@comstyle.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
However, if it came back from the dead, one could just
if not cc.has_header('sys/soundcard.h')
# not found
- elif targetos == 'netbsd'
+ elif targetos in ['netbsd', 'openbsd']
oss = cc.find_library('ossaudio', required: get_option('oss'),
kwargs: static_kwargs)
else
instead of using something like --oss-lib.
Paolo
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
2021-10-07 13:06 ` [PATCH 01/24] configure: remove --oss-lib Paolo Bonzini
@ 2021-10-07 13:06 ` Paolo Bonzini
2021-10-07 20:42 ` Marc-André Lureau
2021-10-07 13:06 ` [PATCH 03/24] configure, meson: move audio driver detection to Meson Paolo Bonzini
` (21 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:06 UTC (permalink / raw)
To: qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
Ever since winwaveaudio was removed in 2015, CONFIG_AUDIO_WIN_INT
is only set if dsound is in use, so use CONFIG_AUDIO_DSOUND directly.
Cc: Gerd Hoffman <kraxel@redhat.com>
Cc: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
audio/meson.build | 4 ++--
configure | 5 -----
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/audio/meson.build b/audio/meson.build
index 7d53b0f920..9a95c58f18 100644
--- a/audio/meson.build
+++ b/audio/meson.build
@@ -8,8 +8,8 @@ softmmu_ss.add(files(
))
softmmu_ss.add(when: [coreaudio, 'CONFIG_AUDIO_COREAUDIO'], if_true: files('coreaudio.c'))
-softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'], if_true: files('dsoundaudio.c'))
-softmmu_ss.add(when: ['CONFIG_AUDIO_WIN_INT'], if_true: files('audio_win_int.c'))
+softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'],
+ if_true: files('dsoundaudio.c', 'audio_win_int.c'))
audio_modules = {}
foreach m : [
diff --git a/configure b/configure
index ab6bc0c994..6a6273ce7b 100755
--- a/configure
+++ b/configure
@@ -245,7 +245,6 @@ block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
block_drv_whitelist_tools="no"
host_cc="cc"
-audio_win_int=""
libs_qga=""
debug_info="yes"
lto="false"
@@ -3075,7 +3074,6 @@ for drv in $audio_drv_list; do
dsound)
dsound_libs="-lole32 -ldxguid"
- audio_win_int="yes"
;;
oss)
@@ -4560,9 +4558,6 @@ if test "$libjack" = "yes" ; then
echo "CONFIG_LIBJACK=y" >> $config_host_mak
fi
echo "JACK_LIBS=$jack_libs" >> $config_host_mak
-if test "$audio_win_int" = "yes" ; then
- echo "CONFIG_AUDIO_WIN_INT=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
if test "$block_drv_whitelist_tools" = "yes" ; then
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT
2021-10-07 13:06 ` [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT Paolo Bonzini
@ 2021-10-07 20:42 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Volker Rümelin, QEMU, Gerd Hoffman
[-- Attachment #1: Type: text/plain, Size: 2254 bytes --]
On Thu, Oct 7, 2021 at 5:09 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Ever since winwaveaudio was removed in 2015, CONFIG_AUDIO_WIN_INT
> is only set if dsound is in use, so use CONFIG_AUDIO_DSOUND directly.
>
> Cc: Gerd Hoffman <kraxel@redhat.com>
> Cc: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
> audio/meson.build | 4 ++--
> configure | 5 -----
> 2 files changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/audio/meson.build b/audio/meson.build
> index 7d53b0f920..9a95c58f18 100644
> --- a/audio/meson.build
> +++ b/audio/meson.build
> @@ -8,8 +8,8 @@ softmmu_ss.add(files(
> ))
>
> softmmu_ss.add(when: [coreaudio, 'CONFIG_AUDIO_COREAUDIO'], if_true:
> files('coreaudio.c'))
> -softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'], if_true:
> files('dsoundaudio.c'))
> -softmmu_ss.add(when: ['CONFIG_AUDIO_WIN_INT'], if_true:
> files('audio_win_int.c'))
> +softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'],
> + if_true: files('dsoundaudio.c', 'audio_win_int.c'))
>
> audio_modules = {}
> foreach m : [
> diff --git a/configure b/configure
> index ab6bc0c994..6a6273ce7b 100755
> --- a/configure
> +++ b/configure
> @@ -245,7 +245,6 @@ block_drv_rw_whitelist=""
> block_drv_ro_whitelist=""
> block_drv_whitelist_tools="no"
> host_cc="cc"
> -audio_win_int=""
> libs_qga=""
> debug_info="yes"
> lto="false"
> @@ -3075,7 +3074,6 @@ for drv in $audio_drv_list; do
>
> dsound)
> dsound_libs="-lole32 -ldxguid"
> - audio_win_int="yes"
> ;;
>
> oss)
> @@ -4560,9 +4558,6 @@ if test "$libjack" = "yes" ; then
> echo "CONFIG_LIBJACK=y" >> $config_host_mak
> fi
> echo "JACK_LIBS=$jack_libs" >> $config_host_mak
> -if test "$audio_win_int" = "yes" ; then
> - echo "CONFIG_AUDIO_WIN_INT=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
> if test "$block_drv_whitelist_tools" = "yes" ; then
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3520 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 03/24] configure, meson: move audio driver detection to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
2021-10-07 13:06 ` [PATCH 01/24] configure: remove --oss-lib Paolo Bonzini
2021-10-07 13:06 ` [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT Paolo Bonzini
@ 2021-10-07 13:06 ` Paolo Bonzini
2021-10-07 20:42 ` Marc-André Lureau
2021-10-07 13:06 ` [PATCH 04/24] meson: define symbols for all available audio drivers Paolo Bonzini
` (20 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:06 UTC (permalink / raw)
To: qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
This brings a change that makes audio drivers more similar to all
other modules. All drivers are built by default, while
--audio-drv-list only governs the default choice of the audio driver.
Meson options are added to disable the drivers, and the next patches
will fix the help messages and command line options, and especially
make the non-default drivers available via -audiodev.
Cc: Gerd Hoffman <kraxel@redhat.com>
Cc: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
audio/meson.build | 23 +++---
configure | 184 +---------------------------------------------
meson.build | 137 +++++++++++++++++++++++++++++-----
meson_options.txt | 18 ++++-
4 files changed, 147 insertions(+), 215 deletions(-)
diff --git a/audio/meson.build b/audio/meson.build
index 9a95c58f18..462533bb8c 100644
--- a/audio/meson.build
+++ b/audio/meson.build
@@ -7,23 +7,22 @@ softmmu_ss.add(files(
'wavcapture.c',
))
-softmmu_ss.add(when: [coreaudio, 'CONFIG_AUDIO_COREAUDIO'], if_true: files('coreaudio.c'))
-softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'],
- if_true: files('dsoundaudio.c', 'audio_win_int.c'))
+softmmu_ss.add(when: coreaudio, if_true: files('coreaudio.c'))
+softmmu_ss.add(when: dsound, if_true: files('dsoundaudio.c', 'audio_win_int.c'))
audio_modules = {}
foreach m : [
- ['CONFIG_AUDIO_ALSA', 'alsa', alsa, 'alsaaudio.c'],
- ['CONFIG_AUDIO_OSS', 'oss', oss, 'ossaudio.c'],
- ['CONFIG_AUDIO_PA', 'pa', pulse, 'paaudio.c'],
- ['CONFIG_AUDIO_SDL', 'sdl', sdl, 'sdlaudio.c'],
- ['CONFIG_AUDIO_JACK', 'jack', jack, 'jackaudio.c'],
- ['CONFIG_SPICE', 'spice', spice, 'spiceaudio.c']
+ ['alsa', alsa, files('alsaaudio.c')],
+ ['oss', oss, files('ossaudio.c')],
+ ['pa', pulse, files('paaudio.c')],
+ ['sdl', sdl, files('sdlaudio.c')],
+ ['jack', jack, files('jackaudio.c')],
+ ['spice', spice, files('spiceaudio.c')]
]
- if config_host.has_key(m[0])
+ if m[1].found()
module_ss = ss.source_set()
- module_ss.add(when: m[2], if_true: files(m[3]))
- audio_modules += {m[1] : module_ss}
+ module_ss.add(m[1], m[2])
+ audio_modules += {m[0] : module_ss}
endif
endforeach
diff --git a/configure b/configure
index 6a6273ce7b..fcadcf9577 100755
--- a/configure
+++ b/configure
@@ -240,7 +240,7 @@ interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
-audio_drv_list=""
+audio_drv_list="default"
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
block_drv_whitelist_tools="no"
@@ -299,7 +299,6 @@ fdt="auto"
netmap="no"
sdl="auto"
sdl_image="auto"
-coreaudio="auto"
virtiofsd="auto"
virtfs="auto"
libudev="auto"
@@ -356,7 +355,6 @@ module_upgrades="no"
prefix="/usr/local"
qemu_suffix="qemu"
slirp="auto"
-oss_lib=""
bsd="no"
linux="no"
solaris="no"
@@ -703,54 +701,35 @@ fi
case $targetos in
MINGW32*)
mingw32="yes"
- audio_possible_drivers="dsound sdl"
- if check_include dsound.h; then
- audio_drv_list="dsound"
- else
- audio_drv_list=""
- fi
supported_os="yes"
plugins="no"
pie="no"
;;
GNU/kFreeBSD)
bsd="yes"
- audio_drv_list="oss try-sdl"
- audio_possible_drivers="oss sdl pa"
;;
FreeBSD)
bsd="yes"
bsd_user="yes"
make="${MAKE-gmake}"
- audio_drv_list="oss try-sdl"
- audio_possible_drivers="oss sdl pa"
# needed for kinfo_getvmmap(3) in libutil.h
netmap="" # enable netmap autodetect
;;
DragonFly)
bsd="yes"
make="${MAKE-gmake}"
- audio_drv_list="oss try-sdl"
- audio_possible_drivers="oss sdl pa"
;;
NetBSD)
bsd="yes"
make="${MAKE-gmake}"
- audio_drv_list="oss try-sdl"
- audio_possible_drivers="oss sdl"
- oss_lib="-lossaudio"
;;
OpenBSD)
bsd="yes"
make="${MAKE-gmake}"
- audio_drv_list="try-sdl"
- audio_possible_drivers="sdl"
;;
Darwin)
bsd="yes"
darwin="yes"
- audio_drv_list="try-coreaudio try-sdl"
- audio_possible_drivers="coreaudio sdl"
# Disable attempts to use ObjectiveC features in os/object.h since they
# won't work when we're compiling with gcc as a C compiler.
QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
@@ -759,10 +738,6 @@ SunOS)
solaris="yes"
make="${MAKE-gmake}"
smbd="${SMBD-/usr/sfw/sbin/smbd}"
- if test -f /usr/include/sys/soundcard.h ; then
- audio_drv_list="oss try-sdl"
- fi
- audio_possible_drivers="oss sdl"
# needed for CMSG_ macros in sys/socket.h
QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
# needed for TIOCWIN* defines in termios.h
@@ -774,8 +749,6 @@ Haiku)
QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
;;
Linux)
- audio_drv_list="try-pa oss"
- audio_possible_drivers="oss alsa sdl pa"
linux="yes"
linux_user="yes"
vhost_user=${default_feature:-yes}
@@ -1795,7 +1768,6 @@ Advanced options (experts only):
--disable-werror disable compilation abort on warning
--disable-stack-protector disable compiler-provided stack protection
--audio-drv-list=LIST set audio drivers list:
- Available drivers: $audio_possible_drivers
--block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
--block-drv-rw-whitelist=L
set block driver read-write whitelist
@@ -2398,12 +2370,6 @@ if test -z "$want_tools"; then
fi
fi
-##########################################
-# Disable features only meaningful for system-mode emulation
-if test "$softmmu" = "no"; then
- audio_drv_list=""
-fi
-
##########################################
# L2TPV3 probe
@@ -2982,130 +2948,6 @@ EOF
fi
fi
-##########################################
-# detect CoreAudio
-if test "$coreaudio" != "no" ; then
- coreaudio_libs="-framework CoreAudio"
- cat > $TMPC << EOF
-#include <CoreAudio/CoreAudio.h>
-int main(void)
-{
- return (int)AudioGetCurrentHostTime();
-}
-EOF
- if compile_prog "" "$coreaudio_libs" ; then
- coreaudio=yes
- else
- coreaudio=no
- fi
-fi
-
-##########################################
-# Sound support libraries probe
-
-audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
-for drv in $audio_drv_list; do
- case $drv in
- alsa | try-alsa)
- if $pkg_config alsa --exists; then
- alsa_libs=$($pkg_config alsa --libs)
- alsa_cflags=$($pkg_config alsa --cflags)
- alsa=yes
- if test "$drv" = "try-alsa"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
- fi
- else
- if test "$drv" = "try-alsa"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
- else
- error_exit "$drv check failed" \
- "Make sure to have the $drv libs and headers installed."
- fi
- fi
- ;;
-
- pa | try-pa)
- if $pkg_config libpulse --exists; then
- libpulse=yes
- pulse_libs=$($pkg_config libpulse --libs)
- pulse_cflags=$($pkg_config libpulse --cflags)
- if test "$drv" = "try-pa"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
- fi
- else
- if test "$drv" = "try-pa"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
- else
- error_exit "$drv check failed" \
- "Make sure to have the $drv libs and headers installed."
- fi
- fi
- ;;
-
- sdl)
- if test "$sdl" = "no"; then
- error_exit "sdl not found or disabled, can not use sdl audio driver"
- fi
- ;;
-
- try-sdl)
- if test "$sdl" = "no"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
- else
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
- fi
- ;;
-
- coreaudio | try-coreaudio)
- if test "$coreaudio" = "no"; then
- if test "$drv" = "try-coreaudio"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
- else
- error_exit "$drv check failed" \
- "Make sure to have the $drv is available."
- fi
- else
- coreaudio_libs="-framework CoreAudio"
- if test "$drv" = "try-coreaudio"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
- fi
- fi
- ;;
-
- dsound)
- dsound_libs="-lole32 -ldxguid"
- ;;
-
- oss)
- oss_libs="$oss_lib"
- ;;
-
- jack | try-jack)
- if $pkg_config jack --exists; then
- libjack=yes
- jack_libs=$($pkg_config jack --libs)
- if test "$drv" = "try-jack"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
- fi
- else
- if test "$drv" = "try-jack"; then
- audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
- else
- error_exit "$drv check failed" \
- "Make sure to have the $drv libs and headers installed."
- fi
- fi
- ;;
-
- *)
- echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
- error_exit "Unknown driver '$drv' selected" \
- "Possible drivers are: $audio_possible_drivers"
- }
- ;;
- esac
-done
-
##########################################
# plugin linker support probe
@@ -4536,28 +4378,6 @@ fi
if test "$gprof" = "yes" ; then
echo "CONFIG_GPROF=y" >> $config_host_mak
fi
-echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
-for drv in $audio_drv_list; do
- def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
- echo "$def=y" >> $config_host_mak
-done
-if test "$alsa" = "yes" ; then
- echo "CONFIG_ALSA=y" >> $config_host_mak
-fi
-echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
-echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
-if test "$libpulse" = "yes" ; then
- echo "CONFIG_LIBPULSE=y" >> $config_host_mak
-fi
-echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
-echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
-echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
-echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
-echo "OSS_LIBS=$oss_libs" >> $config_host_mak
-if test "$libjack" = "yes" ; then
- echo "CONFIG_LIBJACK=y" >> $config_host_mak
-fi
-echo "JACK_LIBS=$jack_libs" >> $config_host_mak
echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
if test "$block_drv_whitelist_tools" = "yes" ; then
@@ -5195,7 +5015,7 @@ if test "$skip_meson" = no; then
-Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
-Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
- -Dtcg_interpreter=$tcg_interpreter \
+ -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
$cross_arg \
"$PWD" "$source_path"
diff --git a/meson.build b/meson.build
index 7b596fdcd9..13b725181a 100644
--- a/meson.build
+++ b/meson.build
@@ -430,20 +430,23 @@ vde = not_found
if config_host.has_key('CONFIG_VDE')
vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
endif
+
pulse = not_found
-if 'CONFIG_LIBPULSE' in config_host
- pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
- link_args: config_host['PULSE_LIBS'].split())
+if not get_option('pa').auto() or (targetos == 'linux' and have_system)
+ pulse = dependency('libpulse', required: get_option('pa'),
+ method: 'pkg-config', kwargs: static_kwargs)
endif
alsa = not_found
-if 'CONFIG_ALSA' in config_host
- alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
- link_args: config_host['ALSA_LIBS'].split())
+if not get_option('alsa').auto() or (targetos == 'linux' and have_system)
+ alsa = dependency('alsa', required: get_option('alsa'),
+ method: 'pkg-config', kwargs: static_kwargs)
endif
jack = not_found
-if 'CONFIG_LIBJACK' in config_host
- jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
+if not get_option('jack').auto() or have_system
+ jack = dependency('jack', required: get_option('jack'),
+ method: 'pkg-config', kwargs: static_kwargs)
endif
+
spice = not_found
spice_headers = not_found
spice_protocol = not_found
@@ -803,16 +806,59 @@ if liblzfse.found() and not cc.links('''
endif
oss = not_found
-if 'CONFIG_AUDIO_OSS' in config_host
- oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
+if not get_option('oss').auto() or have_system
+ if not cc.has_header('sys/soundcard.h')
+ # not found
+ elif targetos == 'netbsd'
+ oss = cc.find_library('ossaudio', required: get_option('oss'),
+ kwargs: static_kwargs)
+ else
+ oss = declare_dependency()
+ endif
+
+ if not oss.found()
+ if get_option('oss').enabled()
+ error('OSS not found')
+ else
+ warning('OSS not found, disabling')
+ endif
+ endif
endif
dsound = not_found
-if 'CONFIG_AUDIO_DSOUND' in config_host
- dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
+if not get_option('dsound').auto() or (targetos == 'windows' and have_system)
+ if cc.has_header('dsound.h')
+ dsound = declare_dependency(link_args: ['-lole32', '-ldxguid'])
+ endif
+
+ if not dsound.found()
+ if get_option('dsound').enabled()
+ error('DirectSound not found')
+ else
+ warning('DirectSound not found, disabling')
+ endif
+ endif
endif
+
coreaudio = not_found
-if 'CONFIG_AUDIO_COREAUDIO' in config_host
- coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
+if not get_option('coreaudio').auto() or (targetos == 'darwin' and have_system)
+ coreaudio = dependency('appleframeworks', modules: 'CoreAudio',
+ required: get_option('coreaudio'))
+ if coreaudio.found() and not cc.links('''
+ #include <CoreAudio/CoreAudio.h>
+ int main(void)
+ {
+ return (int)AudioGetCurrentHostTime();
+ }''')
+ coreaudio = not_found
+ endif
+
+ if not coreaudio.found()
+ if get_option('coreaudio').enabled()
+ error('CoreAudio not found')
+ else
+ warning('CoreAudio not found, disabling')
+ endif
+ endif
endif
opengl = not_found
@@ -1158,6 +1204,49 @@ if libbpf.found() and not cc.links('''
endif
endif
+#################
+# config-host.h #
+#################
+
+audio_drivers_selected = []
+if have_system
+ audio_drivers_available = {
+ 'alsa': alsa.found(),
+ 'coreaudio': coreaudio.found(),
+ 'dsound': dsound.found(),
+ 'jack': jack.found(),
+ 'oss': oss.found(),
+ 'pa': pulse.found(),
+ 'sdl': sdl.found(),
+ }
+
+ # Default to native drivers first, OSS second, SDL third
+ audio_drivers_priority = \
+ [ 'pa', 'coreaudio', 'dsound', 'oss' ] + \
+ (targetos == 'linux' ? [] : [ 'sdl' ])
+ audio_drivers_default = []
+ foreach k: audio_drivers_priority
+ if audio_drivers_available[k]
+ audio_drivers_default += k
+ endif
+ endforeach
+
+ foreach k: get_option('audio_drv_list')
+ if k == 'default'
+ audio_drivers_selected += audio_drivers_default
+ elif not audio_drivers_available[k]
+ error('Audio driver "@0@" not available.'.format(k))
+ else
+ audio_drivers_selected += k
+ endif
+ endforeach
+endif
+foreach k: audio_drivers_selected
+ config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), true)
+endforeach
+config_host_data.set('CONFIG_AUDIO_DRIVERS',
+ '"' + '", "'.join(audio_drivers_selected) + '", ')
+
if get_option('cfi')
cfi_flags=[]
# Check for dependency on LTO
@@ -1201,10 +1290,6 @@ endif
have_host_block_device = (targetos != 'darwin' or
cc.has_header('IOKit/storage/IOMedia.h'))
-#################
-# config-host.h #
-#################
-
have_virtfs = (targetos == 'linux' and
have_system and
libattr.found() and
@@ -1449,7 +1534,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
-arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
+arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
strings = ['HOST_DSOSUF', 'CONFIG_IASL']
foreach k, v: config_host
if ignored.contains(k)
@@ -2885,7 +2970,7 @@ if config_host.has_key('CONFIG_MODULES')
endif
summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
if have_system
- summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
+ summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
endif
summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
if config_host['TRACE_BACKENDS'].split().contains('simple')
@@ -3073,6 +3158,18 @@ if vnc.found()
summary_info += {'VNC JPEG support': jpeg}
summary_info += {'VNC PNG support': png}
endif
+if targetos not in ['darwin', 'haiku', 'windows']
+ summary_info += {'OSS support': oss}
+elif targetos == 'darwin'
+ summary_info += {'CoreAudio support': coreaudio}
+elif targetos == 'windows'
+ summary_info += {'DirectSound support': dsound}
+endif
+if targetos == 'linux'
+ summary_info += {'ALSA support': alsa}
+ summary_info += {'PulseAudio support': pulse}
+endif
+summary_info += {'JACK support': jack}
summary_info += {'brlapi support': brlapi}
summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
diff --git a/meson_options.txt b/meson_options.txt
index 2c89e79e8b..052c4f088e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,9 +6,12 @@ option('qemu_firmwarepath', type : 'string', value : '',
description: 'search PATH for firmware files')
option('sphinx_build', type : 'string', value : '',
description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
-
option('default_devices', type : 'boolean', value : true,
description: 'Include a default selection of devices in emulators')
+option('audio_drv_list', type: 'array', value: ['default'],
+ choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl'],
+ description: 'Set audio driver list')
+
option('docs', type : 'feature', value : 'auto',
description: 'Documentations build support')
option('gettext', type : 'feature', value : 'auto',
@@ -139,6 +142,19 @@ option('fuse', type: 'feature', value: 'auto',
option('fuse_lseek', type : 'feature', value : 'auto',
description: 'SEEK_HOLE/SEEK_DATA support for FUSE exports')
+option('alsa', type: 'feature', value: 'auto',
+ description: 'ALSA sound support')
+option('coreaudio', type: 'feature', value: 'auto',
+ description: 'CoreAudio sound support')
+option('dsound', type: 'feature', value: 'auto',
+ description: 'DirectSound sound support')
+option('jack', type: 'feature', value: 'auto',
+ description: 'JACK sound support')
+option('oss', type: 'feature', value: 'auto',
+ description: 'OSS sound support')
+option('pa', type: 'feature', value: 'auto',
+ description: 'PulseAudio sound support')
+
option('vhost_user_blk_server', type: 'feature', value: 'auto',
description: 'build vhost-user-blk server')
option('virtfs', type: 'feature', value: 'auto',
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 03/24] configure, meson: move audio driver detection to Meson
2021-10-07 13:06 ` [PATCH 03/24] configure, meson: move audio driver detection to Meson Paolo Bonzini
@ 2021-10-07 20:42 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Volker Rümelin, QEMU, Gerd Hoffman
[-- Attachment #1: Type: text/plain, Size: 21511 bytes --]
On Thu, Oct 7, 2021 at 5:07 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> This brings a change that makes audio drivers more similar to all
> other modules. All drivers are built by default, while
> --audio-drv-list only governs the default choice of the audio driver.
>
> Meson options are added to disable the drivers, and the next patches
> will fix the help messages and command line options, and especially
> make the non-default drivers available via -audiodev.
>
> Cc: Gerd Hoffman <kraxel@redhat.com>
> Cc: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
tricky.. but lgtm
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
> audio/meson.build | 23 +++---
> configure | 184 +---------------------------------------------
> meson.build | 137 +++++++++++++++++++++++++++++-----
> meson_options.txt | 18 ++++-
> 4 files changed, 147 insertions(+), 215 deletions(-)
>
> diff --git a/audio/meson.build b/audio/meson.build
> index 9a95c58f18..462533bb8c 100644
> --- a/audio/meson.build
> +++ b/audio/meson.build
> @@ -7,23 +7,22 @@ softmmu_ss.add(files(
> 'wavcapture.c',
> ))
>
> -softmmu_ss.add(when: [coreaudio, 'CONFIG_AUDIO_COREAUDIO'], if_true:
> files('coreaudio.c'))
> -softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'],
> - if_true: files('dsoundaudio.c', 'audio_win_int.c'))
> +softmmu_ss.add(when: coreaudio, if_true: files('coreaudio.c'))
> +softmmu_ss.add(when: dsound, if_true: files('dsoundaudio.c',
> 'audio_win_int.c'))
>
> audio_modules = {}
> foreach m : [
> - ['CONFIG_AUDIO_ALSA', 'alsa', alsa, 'alsaaudio.c'],
> - ['CONFIG_AUDIO_OSS', 'oss', oss, 'ossaudio.c'],
> - ['CONFIG_AUDIO_PA', 'pa', pulse, 'paaudio.c'],
> - ['CONFIG_AUDIO_SDL', 'sdl', sdl, 'sdlaudio.c'],
> - ['CONFIG_AUDIO_JACK', 'jack', jack, 'jackaudio.c'],
> - ['CONFIG_SPICE', 'spice', spice, 'spiceaudio.c']
> + ['alsa', alsa, files('alsaaudio.c')],
> + ['oss', oss, files('ossaudio.c')],
> + ['pa', pulse, files('paaudio.c')],
> + ['sdl', sdl, files('sdlaudio.c')],
> + ['jack', jack, files('jackaudio.c')],
> + ['spice', spice, files('spiceaudio.c')]
> ]
> - if config_host.has_key(m[0])
> + if m[1].found()
> module_ss = ss.source_set()
> - module_ss.add(when: m[2], if_true: files(m[3]))
> - audio_modules += {m[1] : module_ss}
> + module_ss.add(m[1], m[2])
> + audio_modules += {m[0] : module_ss}
> endif
> endforeach
>
> diff --git a/configure b/configure
> index 6a6273ce7b..fcadcf9577 100755
> --- a/configure
> +++ b/configure
> @@ -240,7 +240,7 @@ interp_prefix="/usr/gnemul/qemu-%M"
> static="no"
> cross_compile="no"
> cross_prefix=""
> -audio_drv_list=""
> +audio_drv_list="default"
> block_drv_rw_whitelist=""
> block_drv_ro_whitelist=""
> block_drv_whitelist_tools="no"
> @@ -299,7 +299,6 @@ fdt="auto"
> netmap="no"
> sdl="auto"
> sdl_image="auto"
> -coreaudio="auto"
> virtiofsd="auto"
> virtfs="auto"
> libudev="auto"
> @@ -356,7 +355,6 @@ module_upgrades="no"
> prefix="/usr/local"
> qemu_suffix="qemu"
> slirp="auto"
> -oss_lib=""
> bsd="no"
> linux="no"
> solaris="no"
> @@ -703,54 +701,35 @@ fi
> case $targetos in
> MINGW32*)
> mingw32="yes"
> - audio_possible_drivers="dsound sdl"
> - if check_include dsound.h; then
> - audio_drv_list="dsound"
> - else
> - audio_drv_list=""
> - fi
> supported_os="yes"
> plugins="no"
> pie="no"
> ;;
> GNU/kFreeBSD)
> bsd="yes"
> - audio_drv_list="oss try-sdl"
> - audio_possible_drivers="oss sdl pa"
> ;;
> FreeBSD)
> bsd="yes"
> bsd_user="yes"
> make="${MAKE-gmake}"
> - audio_drv_list="oss try-sdl"
> - audio_possible_drivers="oss sdl pa"
> # needed for kinfo_getvmmap(3) in libutil.h
> netmap="" # enable netmap autodetect
> ;;
> DragonFly)
> bsd="yes"
> make="${MAKE-gmake}"
> - audio_drv_list="oss try-sdl"
> - audio_possible_drivers="oss sdl pa"
> ;;
> NetBSD)
> bsd="yes"
> make="${MAKE-gmake}"
> - audio_drv_list="oss try-sdl"
> - audio_possible_drivers="oss sdl"
> - oss_lib="-lossaudio"
> ;;
> OpenBSD)
> bsd="yes"
> make="${MAKE-gmake}"
> - audio_drv_list="try-sdl"
> - audio_possible_drivers="sdl"
> ;;
> Darwin)
> bsd="yes"
> darwin="yes"
> - audio_drv_list="try-coreaudio try-sdl"
> - audio_possible_drivers="coreaudio sdl"
> # Disable attempts to use ObjectiveC features in os/object.h since they
> # won't work when we're compiling with gcc as a C compiler.
> QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
> @@ -759,10 +738,6 @@ SunOS)
> solaris="yes"
> make="${MAKE-gmake}"
> smbd="${SMBD-/usr/sfw/sbin/smbd}"
> - if test -f /usr/include/sys/soundcard.h ; then
> - audio_drv_list="oss try-sdl"
> - fi
> - audio_possible_drivers="oss sdl"
> # needed for CMSG_ macros in sys/socket.h
> QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
> # needed for TIOCWIN* defines in termios.h
> @@ -774,8 +749,6 @@ Haiku)
> QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC
> $QEMU_CFLAGS"
> ;;
> Linux)
> - audio_drv_list="try-pa oss"
> - audio_possible_drivers="oss alsa sdl pa"
> linux="yes"
> linux_user="yes"
> vhost_user=${default_feature:-yes}
> @@ -1795,7 +1768,6 @@ Advanced options (experts only):
> --disable-werror disable compilation abort on warning
> --disable-stack-protector disable compiler-provided stack protection
> --audio-drv-list=LIST set audio drivers list:
> - Available drivers: $audio_possible_drivers
> --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
> --block-drv-rw-whitelist=L
> set block driver read-write whitelist
> @@ -2398,12 +2370,6 @@ if test -z "$want_tools"; then
> fi
> fi
>
> -##########################################
> -# Disable features only meaningful for system-mode emulation
> -if test "$softmmu" = "no"; then
> - audio_drv_list=""
> -fi
> -
> ##########################################
> # L2TPV3 probe
>
> @@ -2982,130 +2948,6 @@ EOF
> fi
> fi
>
> -##########################################
> -# detect CoreAudio
> -if test "$coreaudio" != "no" ; then
> - coreaudio_libs="-framework CoreAudio"
> - cat > $TMPC << EOF
> -#include <CoreAudio/CoreAudio.h>
> -int main(void)
> -{
> - return (int)AudioGetCurrentHostTime();
> -}
> -EOF
> - if compile_prog "" "$coreaudio_libs" ; then
> - coreaudio=yes
> - else
> - coreaudio=no
> - fi
> -fi
> -
> -##########################################
> -# Sound support libraries probe
> -
> -audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
> -for drv in $audio_drv_list; do
> - case $drv in
> - alsa | try-alsa)
> - if $pkg_config alsa --exists; then
> - alsa_libs=$($pkg_config alsa --libs)
> - alsa_cflags=$($pkg_config alsa --cflags)
> - alsa=yes
> - if test "$drv" = "try-alsa"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-alsa/alsa/')
> - fi
> - else
> - if test "$drv" = "try-alsa"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-alsa//')
> - else
> - error_exit "$drv check failed" \
> - "Make sure to have the $drv libs and headers installed."
> - fi
> - fi
> - ;;
> -
> - pa | try-pa)
> - if $pkg_config libpulse --exists; then
> - libpulse=yes
> - pulse_libs=$($pkg_config libpulse --libs)
> - pulse_cflags=$($pkg_config libpulse --cflags)
> - if test "$drv" = "try-pa"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-pa/pa/')
> - fi
> - else
> - if test "$drv" = "try-pa"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
> - else
> - error_exit "$drv check failed" \
> - "Make sure to have the $drv libs and headers installed."
> - fi
> - fi
> - ;;
> -
> - sdl)
> - if test "$sdl" = "no"; then
> - error_exit "sdl not found or disabled, can not use sdl audio
> driver"
> - fi
> - ;;
> -
> - try-sdl)
> - if test "$sdl" = "no"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
> - else
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
> - fi
> - ;;
> -
> - coreaudio | try-coreaudio)
> - if test "$coreaudio" = "no"; then
> - if test "$drv" = "try-coreaudio"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-coreaudio//')
> - else
> - error_exit "$drv check failed" \
> - "Make sure to have the $drv is available."
> - fi
> - else
> - coreaudio_libs="-framework CoreAudio"
> - if test "$drv" = "try-coreaudio"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-coreaudio/coreaudio/')
> - fi
> - fi
> - ;;
> -
> - dsound)
> - dsound_libs="-lole32 -ldxguid"
> - ;;
> -
> - oss)
> - oss_libs="$oss_lib"
> - ;;
> -
> - jack | try-jack)
> - if $pkg_config jack --exists; then
> - libjack=yes
> - jack_libs=$($pkg_config jack --libs)
> - if test "$drv" = "try-jack"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-jack/jack/')
> - fi
> - else
> - if test "$drv" = "try-jack"; then
> - audio_drv_list=$(echo "$audio_drv_list" | sed -e
> 's/try-jack//')
> - else
> - error_exit "$drv check failed" \
> - "Make sure to have the $drv libs and headers installed."
> - fi
> - fi
> - ;;
> -
> - *)
> - echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
> - error_exit "Unknown driver '$drv' selected" \
> - "Possible drivers are: $audio_possible_drivers"
> - }
> - ;;
> - esac
> -done
> -
> ##########################################
> # plugin linker support probe
>
> @@ -4536,28 +4378,6 @@ fi
> if test "$gprof" = "yes" ; then
> echo "CONFIG_GPROF=y" >> $config_host_mak
> fi
> -echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
> -for drv in $audio_drv_list; do
> - def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
> - echo "$def=y" >> $config_host_mak
> -done
> -if test "$alsa" = "yes" ; then
> - echo "CONFIG_ALSA=y" >> $config_host_mak
> -fi
> -echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
> -echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
> -if test "$libpulse" = "yes" ; then
> - echo "CONFIG_LIBPULSE=y" >> $config_host_mak
> -fi
> -echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
> -echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
> -echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
> -echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
> -echo "OSS_LIBS=$oss_libs" >> $config_host_mak
> -if test "$libjack" = "yes" ; then
> - echo "CONFIG_LIBJACK=y" >> $config_host_mak
> -fi
> -echo "JACK_LIBS=$jack_libs" >> $config_host_mak
> echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >>
> $config_host_mak
> echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >>
> $config_host_mak
> if test "$block_drv_whitelist_tools" = "yes" ; then
> @@ -5195,7 +5015,7 @@ if test "$skip_meson" = no; then
> -Dvhost_user_blk_server=$vhost_user_blk_server
> -Dmultiprocess=$multiprocess \
> -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek
> -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
> $(if test "$default_feature" = no; then echo
> "-Dauto_features=disabled"; fi) \
> - -Dtcg_interpreter=$tcg_interpreter \
> + -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> $cross_arg \
> "$PWD" "$source_path"
>
> diff --git a/meson.build b/meson.build
> index 7b596fdcd9..13b725181a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -430,20 +430,23 @@ vde = not_found
> if config_host.has_key('CONFIG_VDE')
> vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
> endif
> +
> pulse = not_found
> -if 'CONFIG_LIBPULSE' in config_host
> - pulse = declare_dependency(compile_args:
> config_host['PULSE_CFLAGS'].split(),
> - link_args: config_host['PULSE_LIBS'].split())
> +if not get_option('pa').auto() or (targetos == 'linux' and have_system)
> + pulse = dependency('libpulse', required: get_option('pa'),
> + method: 'pkg-config', kwargs: static_kwargs)
> endif
> alsa = not_found
> -if 'CONFIG_ALSA' in config_host
> - alsa = declare_dependency(compile_args:
> config_host['ALSA_CFLAGS'].split(),
> - link_args: config_host['ALSA_LIBS'].split())
> +if not get_option('alsa').auto() or (targetos == 'linux' and have_system)
> + alsa = dependency('alsa', required: get_option('alsa'),
> + method: 'pkg-config', kwargs: static_kwargs)
> endif
> jack = not_found
> -if 'CONFIG_LIBJACK' in config_host
> - jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
> +if not get_option('jack').auto() or have_system
> + jack = dependency('jack', required: get_option('jack'),
> + method: 'pkg-config', kwargs: static_kwargs)
> endif
> +
> spice = not_found
> spice_headers = not_found
> spice_protocol = not_found
> @@ -803,16 +806,59 @@ if liblzfse.found() and not cc.links('''
> endif
>
> oss = not_found
> -if 'CONFIG_AUDIO_OSS' in config_host
> - oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
> +if not get_option('oss').auto() or have_system
> + if not cc.has_header('sys/soundcard.h')
> + # not found
> + elif targetos == 'netbsd'
> + oss = cc.find_library('ossaudio', required: get_option('oss'),
> + kwargs: static_kwargs)
> + else
> + oss = declare_dependency()
> + endif
> +
> + if not oss.found()
> + if get_option('oss').enabled()
> + error('OSS not found')
> + else
> + warning('OSS not found, disabling')
> + endif
> + endif
> endif
> dsound = not_found
> -if 'CONFIG_AUDIO_DSOUND' in config_host
> - dsound = declare_dependency(link_args:
> config_host['DSOUND_LIBS'].split())
> +if not get_option('dsound').auto() or (targetos == 'windows' and
> have_system)
> + if cc.has_header('dsound.h')
> + dsound = declare_dependency(link_args: ['-lole32', '-ldxguid'])
> + endif
> +
> + if not dsound.found()
> + if get_option('dsound').enabled()
> + error('DirectSound not found')
> + else
> + warning('DirectSound not found, disabling')
> + endif
> + endif
> endif
> +
> coreaudio = not_found
> -if 'CONFIG_AUDIO_COREAUDIO' in config_host
> - coreaudio = declare_dependency(link_args:
> config_host['COREAUDIO_LIBS'].split())
> +if not get_option('coreaudio').auto() or (targetos == 'darwin' and
> have_system)
> + coreaudio = dependency('appleframeworks', modules: 'CoreAudio',
> + required: get_option('coreaudio'))
> + if coreaudio.found() and not cc.links('''
> + #include <CoreAudio/CoreAudio.h>
> + int main(void)
> + {
> + return (int)AudioGetCurrentHostTime();
> + }''')
> + coreaudio = not_found
> + endif
> +
> + if not coreaudio.found()
> + if get_option('coreaudio').enabled()
> + error('CoreAudio not found')
> + else
> + warning('CoreAudio not found, disabling')
> + endif
> + endif
> endif
>
> opengl = not_found
> @@ -1158,6 +1204,49 @@ if libbpf.found() and not cc.links('''
> endif
> endif
>
> +#################
> +# config-host.h #
> +#################
> +
> +audio_drivers_selected = []
> +if have_system
> + audio_drivers_available = {
> + 'alsa': alsa.found(),
> + 'coreaudio': coreaudio.found(),
> + 'dsound': dsound.found(),
> + 'jack': jack.found(),
> + 'oss': oss.found(),
> + 'pa': pulse.found(),
> + 'sdl': sdl.found(),
> + }
> +
> + # Default to native drivers first, OSS second, SDL third
> + audio_drivers_priority = \
> + [ 'pa', 'coreaudio', 'dsound', 'oss' ] + \
> + (targetos == 'linux' ? [] : [ 'sdl' ])
> + audio_drivers_default = []
> + foreach k: audio_drivers_priority
> + if audio_drivers_available[k]
> + audio_drivers_default += k
> + endif
> + endforeach
> +
> + foreach k: get_option('audio_drv_list')
> + if k == 'default'
> + audio_drivers_selected += audio_drivers_default
> + elif not audio_drivers_available[k]
> + error('Audio driver "@0@" not available.'.format(k))
> + else
> + audio_drivers_selected += k
> + endif
> + endforeach
> +endif
> +foreach k: audio_drivers_selected
> + config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), true)
> +endforeach
> +config_host_data.set('CONFIG_AUDIO_DRIVERS',
> + '"' + '", "'.join(audio_drivers_selected) + '", ')
> +
> if get_option('cfi')
> cfi_flags=[]
> # Check for dependency on LTO
> @@ -1201,10 +1290,6 @@ endif
> have_host_block_device = (targetos != 'darwin' or
> cc.has_header('IOKit/storage/IOMedia.h'))
>
> -#################
> -# config-host.h #
> -#################
> -
> have_virtfs = (targetos == 'linux' and
> have_system and
> libattr.found() and
> @@ -1449,7 +1534,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
>
>
> ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
> -arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST',
> 'CONFIG_BDRV_RO_WHITELIST']
> +arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> strings = ['HOST_DSOSUF', 'CONFIG_IASL']
> foreach k, v: config_host
> if ignored.contains(k)
> @@ -2885,7 +2970,7 @@ if config_host.has_key('CONFIG_MODULES')
> endif
> summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
> if have_system
> - summary_info += {'Audio drivers':
> config_host['CONFIG_AUDIO_DRIVERS']}
> + summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
> endif
> summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
> if config_host['TRACE_BACKENDS'].split().contains('simple')
> @@ -3073,6 +3158,18 @@ if vnc.found()
> summary_info += {'VNC JPEG support': jpeg}
> summary_info += {'VNC PNG support': png}
> endif
> +if targetos not in ['darwin', 'haiku', 'windows']
> + summary_info += {'OSS support': oss}
> +elif targetos == 'darwin'
> + summary_info += {'CoreAudio support': coreaudio}
> +elif targetos == 'windows'
> + summary_info += {'DirectSound support': dsound}
> +endif
> +if targetos == 'linux'
> + summary_info += {'ALSA support': alsa}
> + summary_info += {'PulseAudio support': pulse}
> +endif
> +summary_info += {'JACK support': jack}
> summary_info += {'brlapi support': brlapi}
> summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
> summary_info += {'netmap support':
> config_host.has_key('CONFIG_NETMAP')}
> diff --git a/meson_options.txt b/meson_options.txt
> index 2c89e79e8b..052c4f088e 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -6,9 +6,12 @@ option('qemu_firmwarepath', type : 'string', value : '',
> description: 'search PATH for firmware files')
> option('sphinx_build', type : 'string', value : '',
> description: 'Use specified sphinx-build [$sphinx_build] for
> building document (default to be empty)')
> -
> option('default_devices', type : 'boolean', value : true,
> description: 'Include a default selection of devices in emulators')
> +option('audio_drv_list', type: 'array', value: ['default'],
> + choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss',
> 'pa', 'sdl'],
> + description: 'Set audio driver list')
> +
> option('docs', type : 'feature', value : 'auto',
> description: 'Documentations build support')
> option('gettext', type : 'feature', value : 'auto',
> @@ -139,6 +142,19 @@ option('fuse', type: 'feature', value: 'auto',
> option('fuse_lseek', type : 'feature', value : 'auto',
> description: 'SEEK_HOLE/SEEK_DATA support for FUSE exports')
>
> +option('alsa', type: 'feature', value: 'auto',
> + description: 'ALSA sound support')
> +option('coreaudio', type: 'feature', value: 'auto',
> + description: 'CoreAudio sound support')
> +option('dsound', type: 'feature', value: 'auto',
> + description: 'DirectSound sound support')
> +option('jack', type: 'feature', value: 'auto',
> + description: 'JACK sound support')
> +option('oss', type: 'feature', value: 'auto',
> + description: 'OSS sound support')
> +option('pa', type: 'feature', value: 'auto',
> + description: 'PulseAudio sound support')
> +
> option('vhost_user_blk_server', type: 'feature', value: 'auto',
> description: 'build vhost-user-blk server')
> option('virtfs', type: 'feature', value: 'auto',
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 28166 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 04/24] meson: define symbols for all available audio drivers
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (2 preceding siblings ...)
2021-10-07 13:06 ` [PATCH 03/24] configure, meson: move audio driver detection to Meson Paolo Bonzini
@ 2021-10-07 13:06 ` Paolo Bonzini
2021-10-07 13:06 ` [PATCH 05/24] configure: add command line options for " Paolo Bonzini
` (19 subsequent siblings)
23 siblings, 0 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:06 UTC (permalink / raw)
To: qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
All drivers are now built by default if the corresponding libraries
are available, similar to how all other modules behave;
--audio-drv-list only governs the default choice of the audio driver.
Adjust the CONFIG_AUDIO_* preprocessor symbols so that they are
based on library availability rather than --audio-drv-list, so that
the tests and -audiodev help follow the new logic.
Cc: Gerd Hoffman <kraxel@redhat.com>
Cc: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/meson.build b/meson.build
index 13b725181a..0e9733a833 100644
--- a/meson.build
+++ b/meson.build
@@ -1219,6 +1219,9 @@ if have_system
'pa': pulse.found(),
'sdl': sdl.found(),
}
+ foreach k, v: audio_drivers_available
+ config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), v)
+ endforeach
# Default to native drivers first, OSS second, SDL third
audio_drivers_priority = \
@@ -1241,9 +1244,6 @@ if have_system
endif
endforeach
endif
-foreach k: audio_drivers_selected
- config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), true)
-endforeach
config_host_data.set('CONFIG_AUDIO_DRIVERS',
'"' + '", "'.join(audio_drivers_selected) + '", ')
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* [PATCH 05/24] configure: add command line options for audio drivers
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (3 preceding siblings ...)
2021-10-07 13:06 ` [PATCH 04/24] meson: define symbols for all available audio drivers Paolo Bonzini
@ 2021-10-07 13:06 ` Paolo Bonzini
2021-10-07 20:42 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
` (18 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:06 UTC (permalink / raw)
To: qemu-devel; +Cc: Volker Rümelin, Gerd Hoffman
Handle the choice of audio drivers the same as all other dependencies.
Cc: Gerd Hoffman <kraxel@redhat.com>
Cc: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/configure b/configure
index fcadcf9577..5541671b58 100755
--- a/configure
+++ b/configure
@@ -310,6 +310,12 @@ vnc_sasl="auto"
vnc_jpeg="auto"
vnc_png="auto"
xkbcommon="auto"
+alsa="auto"
+coreaudio="auto"
+dsound="auto"
+jack="auto"
+oss="auto"
+pa="auto"
xen=${default_feature:+disabled}
xen_ctrl_version="$default_feature"
xen_pci_passthrough="auto"
@@ -1051,6 +1057,30 @@ for opt do
;;
--enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
;;
+ --disable-alsa) alsa="disabled"
+ ;;
+ --enable-alsa) alsa="enabled"
+ ;;
+ --disable-coreaudio) coreaudio="disabled"
+ ;;
+ --enable-coreaudio) coreaudio="enabled"
+ ;;
+ --disable-dsound) dsound="disabled"
+ ;;
+ --enable-dsound) dsound="enabled"
+ ;;
+ --disable-jack) jack="disabled"
+ ;;
+ --enable-jack) jack="enabled"
+ ;;
+ --disable-oss) oss="disabled"
+ ;;
+ --enable-oss) oss="enabled"
+ ;;
+ --disable-pa) pa="disabled"
+ ;;
+ --enable-pa) pa="enabled"
+ ;;
--disable-brlapi) brlapi="disabled"
;;
--enable-brlapi) brlapi="enabled"
@@ -1849,6 +1879,12 @@ disabled with --disable-FEATURE, default is enabled if available
mpath Multipath persistent reservation passthrough
xen xen backend driver support
xen-pci-passthrough PCI passthrough support for Xen
+ alsa ALSA sound support
+ coreaudio CoreAudio sound support
+ dsound DirectSound sound support
+ jack JACK sound support
+ oss OSS sound support
+ pa PulseAudio sound support
brlapi BrlAPI (Braile)
curl curl connectivity
membarrier membarrier system call (for Linux 4.14+ or Windows)
@@ -5015,7 +5051,8 @@ if test "$skip_meson" = no; then
-Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
-Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
- -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
+ -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
+ -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
$cross_arg \
"$PWD" "$source_path"
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 05/24] configure: add command line options for audio drivers
2021-10-07 13:06 ` [PATCH 05/24] configure: add command line options for " Paolo Bonzini
@ 2021-10-07 20:42 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Volker Rümelin, QEMU, Gerd Hoffman
[-- Attachment #1: Type: text/plain, Size: 3106 bytes --]
On Thu, Oct 7, 2021 at 5:13 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Handle the choice of audio drivers the same as all other dependencies.
>
> Cc: Gerd Hoffman <kraxel@redhat.com>
> Cc: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
> configure | 39 ++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/configure b/configure
> index fcadcf9577..5541671b58 100755
> --- a/configure
> +++ b/configure
> @@ -310,6 +310,12 @@ vnc_sasl="auto"
> vnc_jpeg="auto"
> vnc_png="auto"
> xkbcommon="auto"
> +alsa="auto"
> +coreaudio="auto"
> +dsound="auto"
> +jack="auto"
> +oss="auto"
> +pa="auto"
> xen=${default_feature:+disabled}
> xen_ctrl_version="$default_feature"
> xen_pci_passthrough="auto"
> @@ -1051,6 +1057,30 @@ for opt do
> ;;
> --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
> ;;
> + --disable-alsa) alsa="disabled"
> + ;;
> + --enable-alsa) alsa="enabled"
> + ;;
> + --disable-coreaudio) coreaudio="disabled"
> + ;;
> + --enable-coreaudio) coreaudio="enabled"
> + ;;
> + --disable-dsound) dsound="disabled"
> + ;;
> + --enable-dsound) dsound="enabled"
> + ;;
> + --disable-jack) jack="disabled"
> + ;;
> + --enable-jack) jack="enabled"
> + ;;
> + --disable-oss) oss="disabled"
> + ;;
> + --enable-oss) oss="enabled"
> + ;;
> + --disable-pa) pa="disabled"
> + ;;
> + --enable-pa) pa="enabled"
> + ;;
> --disable-brlapi) brlapi="disabled"
> ;;
> --enable-brlapi) brlapi="enabled"
> @@ -1849,6 +1879,12 @@ disabled with --disable-FEATURE, default is enabled
> if available
> mpath Multipath persistent reservation passthrough
> xen xen backend driver support
> xen-pci-passthrough PCI passthrough support for Xen
> + alsa ALSA sound support
> + coreaudio CoreAudio sound support
> + dsound DirectSound sound support
> + jack JACK sound support
> + oss OSS sound support
> + pa PulseAudio sound support
> brlapi BrlAPI (Braile)
> curl curl connectivity
> membarrier membarrier system call (for Linux 4.14+ or Windows)
> @@ -5015,7 +5051,8 @@ if test "$skip_meson" = no; then
> -Dvhost_user_blk_server=$vhost_user_blk_server
> -Dmultiprocess=$multiprocess \
> -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek
> -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
> $(if test "$default_feature" = no; then echo
> "-Dauto_features=disabled"; fi) \
> - -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> + -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack
> -Doss=$oss \
> + -Dpa=$pa -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> $cross_arg \
> "$PWD" "$source_path"
>
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 4532 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (4 preceding siblings ...)
2021-10-07 13:06 ` [PATCH 05/24] configure: add command line options for " Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 13:48 ` Philippe Mathieu-Daudé
` (2 more replies)
2021-10-07 13:08 ` [PATCH 07/24] configure, meson: move fuzzing configuration to Meson Paolo Bonzini
` (17 subsequent siblings)
23 siblings, 3 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Alexander Oleinik
Pass CONFIG_FUZZ via host_kconfig, and use it to select the
sparse-mem device.
Cc: Alexander Oleinik <alxndr@bu.edu>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Kconfig.host | 4 ++++
hw/mem/Kconfig | 3 +++
hw/mem/meson.build | 2 +-
meson.build | 1 +
4 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/Kconfig.host b/Kconfig.host
index 24255ef441..60b9c07b5e 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -41,3 +41,7 @@ config PVRDMA
config MULTIPROCESS_ALLOWED
bool
imply MULTIPROCESS
+
+config FUZZ
+ bool
+ select SPARSE_MEM
diff --git a/hw/mem/Kconfig b/hw/mem/Kconfig
index 8b19fdc49f..03dbb3c7df 100644
--- a/hw/mem/Kconfig
+++ b/hw/mem/Kconfig
@@ -8,3 +8,6 @@ config MEM_DEVICE
config NVDIMM
bool
select MEM_DEVICE
+
+config SPARSE_MEM
+ bool
diff --git a/hw/mem/meson.build b/hw/mem/meson.build
index 3c8fdef9f9..82f86d117e 100644
--- a/hw/mem/meson.build
+++ b/hw/mem/meson.build
@@ -6,4 +6,4 @@ mem_ss.add(when: 'CONFIG_NVDIMM', if_true: files('nvdimm.c'))
softmmu_ss.add_all(when: 'CONFIG_MEM_DEVICE', if_true: mem_ss)
-softmmu_ss.add(when: 'CONFIG_FUZZ', if_true: files('sparse-mem.c'))
+softmmu_ss.add(when: 'CONFIG_SPARSE_MEM', if_true: files('sparse-mem.c'))
diff --git a/meson.build b/meson.build
index 0e9733a833..f03bfff7a1 100644
--- a/meson.build
+++ b/meson.build
@@ -1602,6 +1602,7 @@ endif
have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
host_kconfig = \
+ ('CONFIG_FUZZ' in config_host ? ['CONFIG_FUZZ=y'] : []) + \
('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
@ 2021-10-07 13:48 ` Philippe Mathieu-Daudé
2021-10-07 20:42 ` Marc-André Lureau
2021-10-08 3:08 ` Alexander Bulekov
2 siblings, 0 replies; 60+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-10-07 13:48 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: Alexander Oleinik
On 10/7/21 15:08, Paolo Bonzini wrote:
> Pass CONFIG_FUZZ via host_kconfig, and use it to select the
> sparse-mem device.
>
> Cc: Alexander Oleinik <alxndr@bu.edu>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> Kconfig.host | 4 ++++
> hw/mem/Kconfig | 3 +++
> hw/mem/meson.build | 2 +-
> meson.build | 1 +
> 4 files changed, 9 insertions(+), 1 deletion(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
2021-10-07 13:48 ` Philippe Mathieu-Daudé
@ 2021-10-07 20:42 ` Marc-André Lureau
2021-10-08 3:08 ` Alexander Bulekov
2 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Alexander Oleinik, QEMU
[-- Attachment #1: Type: text/plain, Size: 2081 bytes --]
On Thu, Oct 7, 2021 at 5:20 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Pass CONFIG_FUZZ via host_kconfig, and use it to select the
> sparse-mem device.
>
> Cc: Alexander Oleinik <alxndr@bu.edu>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> Kconfig.host | 4 ++++
> hw/mem/Kconfig | 3 +++
> hw/mem/meson.build | 2 +-
> meson.build | 1 +
> 4 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/Kconfig.host b/Kconfig.host
> index 24255ef441..60b9c07b5e 100644
> --- a/Kconfig.host
> +++ b/Kconfig.host
> @@ -41,3 +41,7 @@ config PVRDMA
> config MULTIPROCESS_ALLOWED
> bool
> imply MULTIPROCESS
> +
> +config FUZZ
> + bool
> + select SPARSE_MEM
> diff --git a/hw/mem/Kconfig b/hw/mem/Kconfig
> index 8b19fdc49f..03dbb3c7df 100644
> --- a/hw/mem/Kconfig
> +++ b/hw/mem/Kconfig
> @@ -8,3 +8,6 @@ config MEM_DEVICE
> config NVDIMM
> bool
> select MEM_DEVICE
> +
> +config SPARSE_MEM
> + bool
> diff --git a/hw/mem/meson.build b/hw/mem/meson.build
> index 3c8fdef9f9..82f86d117e 100644
> --- a/hw/mem/meson.build
> +++ b/hw/mem/meson.build
> @@ -6,4 +6,4 @@ mem_ss.add(when: 'CONFIG_NVDIMM', if_true:
> files('nvdimm.c'))
>
> softmmu_ss.add_all(when: 'CONFIG_MEM_DEVICE', if_true: mem_ss)
>
> -softmmu_ss.add(when: 'CONFIG_FUZZ', if_true: files('sparse-mem.c'))
> +softmmu_ss.add(when: 'CONFIG_SPARSE_MEM', if_true: files('sparse-mem.c'))
> diff --git a/meson.build b/meson.build
> index 0e9733a833..f03bfff7a1 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1602,6 +1602,7 @@ endif
>
> have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
> host_kconfig = \
> + ('CONFIG_FUZZ' in config_host ? ['CONFIG_FUZZ=y'] : []) + \
> ('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
> ('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
> (have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3103 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
2021-10-07 13:48 ` Philippe Mathieu-Daudé
2021-10-07 20:42 ` Marc-André Lureau
@ 2021-10-08 3:08 ` Alexander Bulekov
2 siblings, 0 replies; 60+ messages in thread
From: Alexander Bulekov @ 2021-10-08 3:08 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
On 211007 1508, Paolo Bonzini wrote:
> Pass CONFIG_FUZZ via host_kconfig, and use it to select the
> sparse-mem device.
>
> Cc: Alexander Oleinik <alxndr@bu.edu>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Thank you
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 07/24] configure, meson: move fuzzing configuration to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (5 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-08 3:10 ` Alexander Bulekov
2021-10-07 13:08 ` [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h Paolo Bonzini
` (16 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Alexander Oleinik
Cc: Alexander Oleinik <alxndr@bu.edu>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 71 +++---------------------------------
meson.build | 51 +++++++++++++++++++++++---
meson_options.txt | 4 ++
tests/qtest/fuzz/meson.build | 6 ++-
4 files changed, 59 insertions(+), 73 deletions(-)
diff --git a/configure b/configure
index 5541671b58..f5dfcf1a08 100755
--- a/configure
+++ b/configure
@@ -436,7 +436,7 @@ debug_mutex="no"
libpmem="auto"
default_devices="true"
plugins="$default_feature"
-fuzzing="no"
+fuzzing="false"
rng_none="no"
secret_keyring="$default_feature"
libdaxctl="auto"
@@ -566,15 +566,6 @@ int main(void) { return 0; }
EOF
}
-write_c_fuzzer_skeleton() {
- cat > $TMPC <<EOF
-#include <stdint.h>
-#include <sys/types.h>
-int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
-int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
-EOF
-}
-
if check_define __linux__ ; then
targetos="Linux"
elif check_define _WIN32 ; then
@@ -1538,9 +1529,9 @@ for opt do
;;
--disable-containers) use_containers="no"
;;
- --enable-fuzzing) fuzzing=yes
+ --enable-fuzzing) fuzzing=true
;;
- --disable-fuzzing) fuzzing=no
+ --disable-fuzzing) fuzzing=false
;;
--gdb=*) gdb_bin="$optarg"
;;
@@ -4055,26 +4046,6 @@ EOF
fi
fi
-##########################################
-# checks for fuzzer
-if test "$fuzzing" = "yes" ; then
- write_c_fuzzer_skeleton
- if test -z "${LIB_FUZZING_ENGINE+xxx}"; then
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
- have_fuzzer=yes
- else
- error_exit "Your compiler doesn't support -fsanitize=fuzzer"
- exit 1
- fi
- fi
-
- have_clang_coverage_filter=no
- echo > $TMPTXT
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer -fsanitize-coverage-allowlist=$TMPTXT" ""; then
- have_clang_coverage_filter=yes
- fi
-fi
-
# Thread sanitizer is, for now, much noisier than the other sanitizers;
# keep it separate until that is not the case.
if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
@@ -4700,34 +4671,6 @@ fi
if test "$have_mlockall" = "yes" ; then
echo "HAVE_MLOCKALL=y" >> $config_host_mak
fi
-if test "$fuzzing" = "yes" ; then
- # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
- # needed CFLAGS have already been provided
- if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
- # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
- # compiled code.
- QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
- # To build non-fuzzer binaries with --enable-fuzzing, link everything with
- # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
- # the fuzzer-related callbacks added by instrumentation.
- QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
- # For the actual fuzzer binaries, we need to link against the libfuzzer
- # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
- # rule for the fuzzer adds these to the link_args. They need to be
- # configurable, to support OSS-Fuzz
- FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
- else
- FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
- fi
-
- # Specify a filter to only instrument code that is directly related to
- # virtual-devices.
- if test "$have_clang_coverage_filter" = "yes" ; then
- cp "$source_path/scripts/oss-fuzz/instrumentation-filter-template" \
- instrumentation-filter
- QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize-coverage-allowlist=instrumentation-filter"
- fi
-fi
if test "$plugins" = "yes" ; then
echo "CONFIG_PLUGIN=y" >> $config_host_mak
@@ -4791,11 +4734,6 @@ if test "$gcov" = "yes" ; then
echo "CONFIG_GCOV=y" >> $config_host_mak
fi
-if test "$fuzzing" != "no"; then
- echo "CONFIG_FUZZ=y" >> $config_host_mak
-fi
-echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
-
if test "$rng_none" = "yes"; then
echo "CONFIG_RNG_NONE=y" >> $config_host_mak
fi
@@ -5031,7 +4969,8 @@ if test "$skip_meson" = no; then
-Dstrip=$(if test "$strip_opt" = 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 -Dcfi_debug=$cfi_debug \
+ -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing \
+ $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
-Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
diff --git a/meson.build b/meson.build
index f03bfff7a1..745b8c3c46 100644
--- a/meson.build
+++ b/meson.build
@@ -117,10 +117,37 @@ endforeach
# Specify linker-script with add_project_link_arguments so that it is not placed
# within a linker --start-group/--end-group pair
-if 'CONFIG_FUZZ' in config_host
- add_project_link_arguments(['-Wl,-T,',
- (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
+if get_option('fuzzing')
+ add_project_link_arguments(['-Wl,-T,',
+ (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
+ native: false, language: ['c', 'cpp', 'objc'])
+
+ # Specify a filter to only instrument code that is directly related to
+ # virtual-devices.
+ configure_file(output: 'instrumentation-filter',
+ input: 'scripts/oss-fuzz/instrumentation-filter-template',
+ copy: true)
+ add_global_arguments(
+ cc.get_supported_arguments('-fsanitize-coverage-allowlist=instrumentation-filter'),
+ native: false, language: ['c', 'cpp', 'objc'])
+
+ if get_option('fuzzing_engine') == ''
+ # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
+ # compiled code. To build non-fuzzer binaries with --enable-fuzzing, link
+ # everything with fsanitize=fuzzer-no-link. Otherwise, the linker will be
+ # unable to bind the fuzzer-related callbacks added by instrumentation.
+ add_global_arguments('-fsanitize=fuzzer-no-link',
+ native: false, language: ['c', 'cpp', 'objc'])
+ add_global_link_arguments('-fsanitize=fuzzer-no-link',
native: false, language: ['c', 'cpp', 'objc'])
+ # For the actual fuzzer binaries, we need to link against the libfuzzer
+ # library. They need to be configurable, to support OSS-Fuzz
+ fuzz_exe_ldflags = ['-fsanitize=fuzzer']
+ else
+ # LIB_FUZZING_ENGINE was set; assume we are running on OSS-Fuzz, and
+ # the needed CFLAGS have already been provided
+ fuzz_exe_ldflags = get_option('fuzzing_engine').split()
+ endif
endif
add_global_arguments(config_host['QEMU_CFLAGS'].split(),
@@ -163,6 +190,17 @@ endif
# Target-specific checks and dependencies #
###########################################
+if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
+ not cc.links('''
+ #include <stdint.h>
+ #include <sys/types.h>
+ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
+ ''',
+ args: ['-Werror', '-fsanitize=fuzzer'])
+ error('Your compiler does not support -fsanitize=fuzzer')
+endif
+
if targetos != 'linux' and get_option('mpath').enabled()
error('Multipath is supported only on Linux')
endif
@@ -1327,6 +1365,7 @@ config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_opti
config_host_data.set('CONFIG_ATTR', libattr.found())
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
config_host_data.set('CONFIG_COCOA', cocoa.found())
+config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
config_host_data.set('CONFIG_LZO', lzo.found())
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
@@ -1602,7 +1641,7 @@ endif
have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
host_kconfig = \
- ('CONFIG_FUZZ' in config_host ? ['CONFIG_FUZZ=y'] : []) + \
+ (get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
@@ -2729,7 +2768,7 @@ foreach target : target_dirs
'dependencies': []
}]
endif
- if config_host.has_key('CONFIG_FUZZ')
+ if get_option('fuzzing')
specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
execs += [{
'name': 'qemu-fuzz-' + target_name,
@@ -2969,7 +3008,7 @@ 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')}
endif
-summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
+summary_info += {'fuzzing support': get_option('fuzzing')}
if have_system
summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
endif
diff --git a/meson_options.txt b/meson_options.txt
index 052c4f088e..100c30e967 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -11,9 +11,13 @@ 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('fuzzing_engine', type : 'string', value : '',
+ description: 'fuzzing engine library for OSS-Fuzz')
option('docs', type : 'feature', value : 'auto',
description: 'Documentations build support')
+option('fuzzing', type : 'boolean', value: false,
+ description: 'build fuzzing targets')
option('gettext', type : 'feature', value : 'auto',
description: 'Localization of the GTK+ user interface')
option('install_blobs', type : 'boolean', value : true,
diff --git a/tests/qtest/fuzz/meson.build b/tests/qtest/fuzz/meson.build
index 8af6848cd5..189901d4a2 100644
--- a/tests/qtest/fuzz/meson.build
+++ b/tests/qtest/fuzz/meson.build
@@ -1,3 +1,7 @@
+if not get_option('fuzzing')
+ subdir_done()
+endif
+
specific_fuzz_ss.add(files('fuzz.c', 'fork_fuzz.c', 'qos_fuzz.c',
'qtest_wrappers.c'), qos)
@@ -9,7 +13,7 @@ specific_fuzz_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio_blk_fuzz.
specific_fuzz_ss.add(files('generic_fuzz.c'))
fork_fuzz = declare_dependency(
- link_args: config_host['FUZZ_EXE_LDFLAGS'].split() +
+ link_args: fuzz_exe_ldflags +
['-Wl,-wrap,qtest_inb',
'-Wl,-wrap,qtest_inw',
'-Wl,-wrap,qtest_inl',
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 07/24] configure, meson: move fuzzing configuration to Meson
2021-10-07 13:08 ` [PATCH 07/24] configure, meson: move fuzzing configuration to Meson Paolo Bonzini
@ 2021-10-08 3:10 ` Alexander Bulekov
0 siblings, 0 replies; 60+ messages in thread
From: Alexander Bulekov @ 2021-10-08 3:10 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
On 211007 1508, Paolo Bonzini wrote:
> Cc: Alexander Oleinik <alxndr@bu.edu>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Thanks!
> ---
> configure | 71 +++---------------------------------
> meson.build | 51 +++++++++++++++++++++++---
> meson_options.txt | 4 ++
> tests/qtest/fuzz/meson.build | 6 ++-
> 4 files changed, 59 insertions(+), 73 deletions(-)
>
> diff --git a/configure b/configure
> index 5541671b58..f5dfcf1a08 100755
> --- a/configure
> +++ b/configure
> @@ -436,7 +436,7 @@ debug_mutex="no"
> libpmem="auto"
> default_devices="true"
> plugins="$default_feature"
> -fuzzing="no"
> +fuzzing="false"
> rng_none="no"
> secret_keyring="$default_feature"
> libdaxctl="auto"
> @@ -566,15 +566,6 @@ int main(void) { return 0; }
> EOF
> }
>
> -write_c_fuzzer_skeleton() {
> - cat > $TMPC <<EOF
> -#include <stdint.h>
> -#include <sys/types.h>
> -int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
> -int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
> -EOF
> -}
> -
> if check_define __linux__ ; then
> targetos="Linux"
> elif check_define _WIN32 ; then
> @@ -1538,9 +1529,9 @@ for opt do
> ;;
> --disable-containers) use_containers="no"
> ;;
> - --enable-fuzzing) fuzzing=yes
> + --enable-fuzzing) fuzzing=true
> ;;
> - --disable-fuzzing) fuzzing=no
> + --disable-fuzzing) fuzzing=false
> ;;
> --gdb=*) gdb_bin="$optarg"
> ;;
> @@ -4055,26 +4046,6 @@ EOF
> fi
> fi
>
> -##########################################
> -# checks for fuzzer
> -if test "$fuzzing" = "yes" ; then
> - write_c_fuzzer_skeleton
> - if test -z "${LIB_FUZZING_ENGINE+xxx}"; then
> - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
> - have_fuzzer=yes
> - else
> - error_exit "Your compiler doesn't support -fsanitize=fuzzer"
> - exit 1
> - fi
> - fi
> -
> - have_clang_coverage_filter=no
> - echo > $TMPTXT
> - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer -fsanitize-coverage-allowlist=$TMPTXT" ""; then
> - have_clang_coverage_filter=yes
> - fi
> -fi
> -
> # Thread sanitizer is, for now, much noisier than the other sanitizers;
> # keep it separate until that is not the case.
> if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
> @@ -4700,34 +4671,6 @@ fi
> if test "$have_mlockall" = "yes" ; then
> echo "HAVE_MLOCKALL=y" >> $config_host_mak
> fi
> -if test "$fuzzing" = "yes" ; then
> - # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
> - # needed CFLAGS have already been provided
> - if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
> - # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
> - # compiled code.
> - QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
> - # To build non-fuzzer binaries with --enable-fuzzing, link everything with
> - # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
> - # the fuzzer-related callbacks added by instrumentation.
> - QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
> - # For the actual fuzzer binaries, we need to link against the libfuzzer
> - # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
> - # rule for the fuzzer adds these to the link_args. They need to be
> - # configurable, to support OSS-Fuzz
> - FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
> - else
> - FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
> - fi
> -
> - # Specify a filter to only instrument code that is directly related to
> - # virtual-devices.
> - if test "$have_clang_coverage_filter" = "yes" ; then
> - cp "$source_path/scripts/oss-fuzz/instrumentation-filter-template" \
> - instrumentation-filter
> - QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize-coverage-allowlist=instrumentation-filter"
> - fi
> -fi
>
> if test "$plugins" = "yes" ; then
> echo "CONFIG_PLUGIN=y" >> $config_host_mak
> @@ -4791,11 +4734,6 @@ if test "$gcov" = "yes" ; then
> echo "CONFIG_GCOV=y" >> $config_host_mak
> fi
>
> -if test "$fuzzing" != "no"; then
> - echo "CONFIG_FUZZ=y" >> $config_host_mak
> -fi
> -echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
> -
> if test "$rng_none" = "yes"; then
> echo "CONFIG_RNG_NONE=y" >> $config_host_mak
> fi
> @@ -5031,7 +4969,8 @@ if test "$skip_meson" = no; then
> -Dstrip=$(if test "$strip_opt" = 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 -Dcfi_debug=$cfi_debug \
> + -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing \
> + $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
> -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
> -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
> -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
> diff --git a/meson.build b/meson.build
> index f03bfff7a1..745b8c3c46 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -117,10 +117,37 @@ endforeach
>
> # Specify linker-script with add_project_link_arguments so that it is not placed
> # within a linker --start-group/--end-group pair
> -if 'CONFIG_FUZZ' in config_host
> - add_project_link_arguments(['-Wl,-T,',
> - (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
> +if get_option('fuzzing')
> + add_project_link_arguments(['-Wl,-T,',
> + (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
> + native: false, language: ['c', 'cpp', 'objc'])
> +
> + # Specify a filter to only instrument code that is directly related to
> + # virtual-devices.
> + configure_file(output: 'instrumentation-filter',
> + input: 'scripts/oss-fuzz/instrumentation-filter-template',
> + copy: true)
> + add_global_arguments(
> + cc.get_supported_arguments('-fsanitize-coverage-allowlist=instrumentation-filter'),
> + native: false, language: ['c', 'cpp', 'objc'])
> +
> + if get_option('fuzzing_engine') == ''
> + # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
> + # compiled code. To build non-fuzzer binaries with --enable-fuzzing, link
> + # everything with fsanitize=fuzzer-no-link. Otherwise, the linker will be
> + # unable to bind the fuzzer-related callbacks added by instrumentation.
> + add_global_arguments('-fsanitize=fuzzer-no-link',
> + native: false, language: ['c', 'cpp', 'objc'])
> + add_global_link_arguments('-fsanitize=fuzzer-no-link',
> native: false, language: ['c', 'cpp', 'objc'])
> + # For the actual fuzzer binaries, we need to link against the libfuzzer
> + # library. They need to be configurable, to support OSS-Fuzz
> + fuzz_exe_ldflags = ['-fsanitize=fuzzer']
> + else
> + # LIB_FUZZING_ENGINE was set; assume we are running on OSS-Fuzz, and
> + # the needed CFLAGS have already been provided
> + fuzz_exe_ldflags = get_option('fuzzing_engine').split()
> + endif
> endif
>
> add_global_arguments(config_host['QEMU_CFLAGS'].split(),
> @@ -163,6 +190,17 @@ endif
> # Target-specific checks and dependencies #
> ###########################################
>
> +if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
> + not cc.links('''
> + #include <stdint.h>
> + #include <sys/types.h>
> + int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
> + int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
> + ''',
> + args: ['-Werror', '-fsanitize=fuzzer'])
> + error('Your compiler does not support -fsanitize=fuzzer')
> +endif
> +
> if targetos != 'linux' and get_option('mpath').enabled()
> error('Multipath is supported only on Linux')
> endif
> @@ -1327,6 +1365,7 @@ config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_opti
> config_host_data.set('CONFIG_ATTR', libattr.found())
> config_host_data.set('CONFIG_BRLAPI', brlapi.found())
> config_host_data.set('CONFIG_COCOA', cocoa.found())
> +config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
> config_host_data.set('CONFIG_LIBUDEV', libudev.found())
> config_host_data.set('CONFIG_LZO', lzo.found())
> config_host_data.set('CONFIG_MPATH', mpathpersist.found())
> @@ -1602,7 +1641,7 @@ endif
>
> have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
> host_kconfig = \
> - ('CONFIG_FUZZ' in config_host ? ['CONFIG_FUZZ=y'] : []) + \
> + (get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
> ('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
> ('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
> (have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
> @@ -2729,7 +2768,7 @@ foreach target : target_dirs
> 'dependencies': []
> }]
> endif
> - if config_host.has_key('CONFIG_FUZZ')
> + if get_option('fuzzing')
> specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
> execs += [{
> 'name': 'qemu-fuzz-' + target_name,
> @@ -2969,7 +3008,7 @@ 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')}
> endif
> -summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
> +summary_info += {'fuzzing support': get_option('fuzzing')}
> if have_system
> summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
> endif
> diff --git a/meson_options.txt b/meson_options.txt
> index 052c4f088e..100c30e967 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -11,9 +11,13 @@ 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('fuzzing_engine', type : 'string', value : '',
> + description: 'fuzzing engine library for OSS-Fuzz')
>
> option('docs', type : 'feature', value : 'auto',
> description: 'Documentations build support')
> +option('fuzzing', type : 'boolean', value: false,
> + description: 'build fuzzing targets')
> option('gettext', type : 'feature', value : 'auto',
> description: 'Localization of the GTK+ user interface')
> option('install_blobs', type : 'boolean', value : true,
> diff --git a/tests/qtest/fuzz/meson.build b/tests/qtest/fuzz/meson.build
> index 8af6848cd5..189901d4a2 100644
> --- a/tests/qtest/fuzz/meson.build
> +++ b/tests/qtest/fuzz/meson.build
> @@ -1,3 +1,7 @@
> +if not get_option('fuzzing')
> + subdir_done()
> +endif
> +
> specific_fuzz_ss.add(files('fuzz.c', 'fork_fuzz.c', 'qos_fuzz.c',
> 'qtest_wrappers.c'), qos)
>
> @@ -9,7 +13,7 @@ specific_fuzz_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio_blk_fuzz.
> specific_fuzz_ss.add(files('generic_fuzz.c'))
>
> fork_fuzz = declare_dependency(
> - link_args: config_host['FUZZ_EXE_LDFLAGS'].split() +
> + link_args: fuzz_exe_ldflags +
> ['-Wl,-wrap,qtest_inb',
> '-Wl,-wrap,qtest_inw',
> '-Wl,-wrap,qtest_inl',
> --
> 2.31.1
>
>
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (6 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 07/24] configure, meson: move fuzzing configuration to Meson Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:42 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 09/24] trace: move configuration from configure to Meson Paolo Bonzini
` (15 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Hajnoczi
Add the suffix directly in trace/simple.c, so that quoting is done
properly by Meson.
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 2 --
meson.build | 2 +-
trace/simple.c | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index f5dfcf1a08..98723db0cd 100755
--- a/configure
+++ b/configure
@@ -4578,8 +4578,6 @@ if have_backend "nop"; then
fi
if have_backend "simple"; then
echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
- # Set the appropriate trace file.
- trace_file="\"$trace_file-\" FMT_pid"
fi
if have_backend "log"; then
echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 745b8c3c46..8752b757cc 100644
--- a/meson.build
+++ b/meson.build
@@ -1574,7 +1574,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
-strings = ['HOST_DSOSUF', 'CONFIG_IASL']
+strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'CONFIG_TRACE_FILE']
foreach k, v: config_host
if ignored.contains(k)
# do nothing
diff --git a/trace/simple.c b/trace/simple.c
index ac499edee0..18af590cf7 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -364,7 +364,7 @@ void st_set_trace_file(const char *file)
if (!file) {
/* Type cast needed for Windows where getpid() returns an int. */
- trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE, (pid_t)getpid());
+ trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE "-" FMT_pid, (pid_t)getpid());
} else {
trace_file_name = g_strdup_printf("%s", file);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h
2021-10-07 13:08 ` [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h Paolo Bonzini
@ 2021-10-07 20:42 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:42 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU, Stefan Hajnoczi
[-- Attachment #1: Type: text/plain, Size: 2096 bytes --]
On Thu, Oct 7, 2021 at 5:09 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Add the suffix directly in trace/simple.c, so that quoting is done
> properly by Meson.
>
> Cc: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 2 --
> meson.build | 2 +-
> trace/simple.c | 2 +-
> 3 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/configure b/configure
> index f5dfcf1a08..98723db0cd 100755
> --- a/configure
> +++ b/configure
> @@ -4578,8 +4578,6 @@ if have_backend "nop"; then
> fi
> if have_backend "simple"; then
> echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
> - # Set the appropriate trace file.
> - trace_file="\"$trace_file-\" FMT_pid"
> fi
> if have_backend "log"; then
> echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
> diff --git a/meson.build b/meson.build
> index 745b8c3c46..8752b757cc 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1574,7 +1574,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
>
> ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
> arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> -strings = ['HOST_DSOSUF', 'CONFIG_IASL']
> +strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'CONFIG_TRACE_FILE']
> foreach k, v: config_host
> if ignored.contains(k)
> # do nothing
> diff --git a/trace/simple.c b/trace/simple.c
> index ac499edee0..18af590cf7 100644
> --- a/trace/simple.c
> +++ b/trace/simple.c
> @@ -364,7 +364,7 @@ void st_set_trace_file(const char *file)
>
> if (!file) {
> /* Type cast needed for Windows where getpid() returns an int. */
> - trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE,
> (pid_t)getpid());
> + trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE "-" FMT_pid,
> (pid_t)getpid());
> } else {
> trace_file_name = g_strdup_printf("%s", file);
> }
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3164 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 09/24] trace: move configuration from configure to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (7 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF " Paolo Bonzini
` (14 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Hajnoczi
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 91 +--------------------------------------------
docs/meson.build | 2 +-
meson.build | 51 +++++++++++++++++++++----
meson_options.txt | 6 +++
scripts/meson.build | 2 +-
trace/meson.build | 15 +++++---
6 files changed, 61 insertions(+), 106 deletions(-)
diff --git a/configure b/configure
index 98723db0cd..4bfc5e350d 100755
--- a/configure
+++ b/configure
@@ -216,10 +216,6 @@ version_ge () {
done
}
-have_backend () {
- echo "$trace_backends" | grep "$1" >/dev/null
-}
-
glob() {
eval test -z '"${1#'"$2"'}"'
}
@@ -3512,56 +3508,6 @@ case "$capstone" in
;;
esac
-##########################################
-# check if we have posix_syslog
-
-posix_syslog=no
-cat > $TMPC << EOF
-#include <syslog.h>
-int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
-EOF
-if compile_prog "" "" ; then
- posix_syslog=yes
-fi
-
-##########################################
-# check if trace backend exists
-
-$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
-if test "$?" -ne 0 ; then
- error_exit "invalid trace backends" \
- "Please choose supported trace backends."
-fi
-
-##########################################
-# For 'ust' backend, test if ust headers are present
-if have_backend "ust"; then
- if $pkg_config lttng-ust --exists; then
- lttng_ust_libs=$($pkg_config --libs lttng-ust)
- else
- error_exit "Trace backend 'ust' missing lttng-ust header files"
- fi
-fi
-
-##########################################
-# For 'dtrace' backend, test if 'dtrace' command is present
-if have_backend "dtrace"; then
- if ! has 'dtrace' ; then
- error_exit "dtrace command is not found in PATH $PATH"
- fi
- trace_backend_stap="no"
- if has 'stap' ; then
- trace_backend_stap="yes"
-
- # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
- # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
- # instead. QEMU --enable-modules depends on this because the SystemTap
- # semaphores are linked into the main binary and not the module's shared
- # object.
- QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
- fi
-fi
-
##########################################
# check and set a backend for coroutine
@@ -4572,42 +4518,6 @@ if test "$tpm" = "yes"; then
echo 'CONFIG_TPM=y' >> $config_host_mak
fi
-echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
-if have_backend "nop"; then
- echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
-fi
-if have_backend "simple"; then
- echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
-fi
-if have_backend "log"; then
- echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
-fi
-if have_backend "ust"; then
- echo "CONFIG_TRACE_UST=y" >> $config_host_mak
- echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
-fi
-if have_backend "dtrace"; then
- echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
- if test "$trace_backend_stap" = "yes" ; then
- echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
- fi
-fi
-if have_backend "ftrace"; then
- if test "$linux" = "yes" ; then
- echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
- else
- feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
- fi
-fi
-if have_backend "syslog"; then
- if test "$posix_syslog" = "yes" ; then
- echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
- else
- feature_not_found "syslog(trace backend)" "syslog not available"
- fi
-fi
-echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
-
if test "$rdma" = "yes" ; then
echo "CONFIG_RDMA=y" >> $config_host_mak
echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
@@ -4990,6 +4900,7 @@ if test "$skip_meson" = no; then
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
-Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
-Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
+ -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file \
$cross_arg \
"$PWD" "$source_path"
diff --git a/docs/meson.build b/docs/meson.build
index be4dc30f39..19cce670a2 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -57,7 +57,7 @@ if build_docs
'qemu-nbd.8': (have_tools ? 'man8' : ''),
'qemu-pr-helper.8': (have_tools ? 'man8' : ''),
'qemu-storage-daemon.1': (have_tools ? 'man1' : ''),
- 'qemu-trace-stap.1': (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
+ 'qemu-trace-stap.1': (stap.found() ? 'man1' : ''),
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
'qemu.1': 'man1',
diff --git a/meson.build b/meson.build
index 8752b757cc..98fa4b68d9 100644
--- a/meson.build
+++ b/meson.build
@@ -111,6 +111,22 @@ foreach target : edk2_targets
endif
endforeach
+dtrace = not_found
+stap = not_found
+if 'dtrace' in get_option('trace_backends')
+ dtrace = find_program('dtrace', required: true)
+ stap = find_program('stap', required: false)
+ if stap.found()
+ # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
+ # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
+ # instead. QEMU --enable-modules depends on this because the SystemTap
+ # semaphores are linked into the main binary and not the module's shared
+ # object.
+ add_global_arguments('-DSTAP_SDT_V2',
+ native: false, language: ['c', 'cpp', 'objc'])
+ endif
+endif
+
##################
# Compiler flags #
##################
@@ -201,6 +217,19 @@ if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
error('Your compiler does not support -fsanitize=fuzzer')
endif
+if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
+ error('ftrace is supported only on Linux')
+endif
+if 'syslog' in get_option('trace_backends') and not cc.compiles('''
+ #include <syslog.h>
+ int main(void) {
+ openlog("qemu", LOG_PID, LOG_DAEMON);
+ syslog(LOG_INFO, "configure");
+ return 0;
+ }''')
+ error('syslog is not supported on this system')
+endif
+
if targetos != 'linux' and get_option('mpath').enabled()
error('Multipath is supported only on Linux')
endif
@@ -361,8 +390,9 @@ if 'CONFIG_GIO' in config_host
link_args: config_host['GIO_LIBS'].split())
endif
lttng = not_found
-if 'CONFIG_TRACE_UST' in config_host
- lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
+if 'ust' in get_option('trace_backends')
+ lttng = dependency('lttng-ust', required: true, method: 'pkg-config',
+ kwargs: static_kwargs)
endif
pixman = not_found
if have_system or have_tools
@@ -1349,6 +1379,11 @@ elif get_option('virtfs').disabled()
have_virtfs = false
endif
+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_BINDIR', get_option('prefix') / get_option('bindir'))
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
@@ -1574,7 +1609,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
-strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'CONFIG_TRACE_FILE']
+strings = ['HOST_DSOSUF', 'CONFIG_IASL']
foreach k, v: config_host
if ignored.contains(k)
# do nothing
@@ -2112,7 +2147,7 @@ qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py',
tracetool = [
python, files('scripts/tracetool.py'),
- '--backend=' + config_host['TRACE_BACKENDS']
+ '--backend=' + ','.join(get_option('trace_backends'))
]
tracetool_depends = files(
'scripts/tracetool/backend/log.py',
@@ -2831,7 +2866,7 @@ foreach target : target_dirs
emulators += {exe['name']: emulator}
endif
- if 'CONFIG_TRACE_SYSTEMTAP' in config_host
+ if stap.found()
foreach stp: [
{'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
{'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
@@ -3012,9 +3047,9 @@ summary_info += {'fuzzing support': get_option('fuzzing')}
if have_system
summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
endif
-summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
-if config_host['TRACE_BACKENDS'].split().contains('simple')
- summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
+summary_info += {'Trace backends': ','.join(get_option('trace_backends'))}
+if 'simple' in get_option('trace_backends')
+ summary_info += {'Trace output file': get_option('trace_file') + '-<pid>'}
endif
summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
diff --git a/meson_options.txt b/meson_options.txt
index 100c30e967..8f9c3b5b17 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -13,6 +13,8 @@ option('audio_drv_list', type: 'array', value: ['default'],
description: 'Set audio driver list')
option('fuzzing_engine', type : 'string', value : '',
description: 'fuzzing engine library for OSS-Fuzz')
+option('trace_file', type: 'string', value: 'trace',
+ description: 'Trace file prefix for simple backend')
option('docs', type : 'feature', value : 'auto',
description: 'Documentations build support')
@@ -146,6 +148,10 @@ option('fuse', type: 'feature', value: 'auto',
option('fuse_lseek', type : 'feature', value : 'auto',
description: 'SEEK_HOLE/SEEK_DATA support for FUSE exports')
+option('trace_backends', type: 'array', value: ['log'],
+ choices: ['dtrace', 'ftrace', 'log', 'nop', 'simple', 'syslog', 'ust'],
+ description: 'Set available tracing backends')
+
option('alsa', type: 'feature', value: 'auto',
description: 'ALSA sound support')
option('coreaudio', type: 'feature', value: 'auto',
diff --git a/scripts/meson.build b/scripts/meson.build
index e8cc63896d..1c89e10a76 100644
--- a/scripts/meson.build
+++ b/scripts/meson.build
@@ -1,3 +1,3 @@
-if 'CONFIG_TRACE_SYSTEMTAP' in config_host
+if stap.found()
install_data('qemu-trace-stap', install_dir: get_option('bindir'))
endif
diff --git a/trace/meson.build b/trace/meson.build
index b8f95de200..573dd699c6 100644
--- a/trace/meson.build
+++ b/trace/meson.build
@@ -2,7 +2,6 @@
specific_ss.add(files('control-target.c'))
trace_events_files = []
-dtrace = find_program('dtrace', required: 'CONFIG_TRACE_DTRACE' in config_host)
foreach dir : [ '.' ] + trace_events_subdirs
trace_events_file = meson.project_source_root() / dir / 'trace-events'
trace_events_files += [ trace_events_file ]
@@ -21,7 +20,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
input: trace_events_file,
command: [ tracetool, group, '--format=c', '@INPUT@', '@OUTPUT@' ],
depend_files: tracetool_depends)
- if 'CONFIG_TRACE_UST' in config_host
+ if 'ust' in get_option('trace_backends')
trace_ust_h = custom_target(fmt.format('trace-ust', 'h'),
output: fmt.format('trace-ust', 'h'),
input: trace_events_file,
@@ -31,7 +30,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
genh += trace_ust_h
endif
trace_ss.add(trace_h, trace_c)
- if 'CONFIG_TRACE_DTRACE' in config_host
+ if 'dtrace' in get_option('trace_backends')
trace_dtrace = custom_target(fmt.format('trace-dtrace', 'dtrace'),
output: fmt.format('trace-dtrace', 'dtrace'),
input: trace_events_file,
@@ -76,7 +75,7 @@ foreach d : [
specific_ss.add(when: 'CONFIG_TCG', if_true: gen)
endforeach
-if 'CONFIG_TRACE_UST' in config_host
+if 'ust' in get_option('trace_backends')
trace_ust_all_h = custom_target('trace-ust-all.h',
output: 'trace-ust-all.h',
input: trace_events_files,
@@ -91,7 +90,11 @@ if 'CONFIG_TRACE_UST' in config_host
genh += trace_ust_all_h
endif
-trace_ss.add(when: 'CONFIG_TRACE_SIMPLE', if_true: files('simple.c'))
-trace_ss.add(when: 'CONFIG_TRACE_FTRACE', if_true: files('ftrace.c'))
+if 'simple' in get_option('trace_backends')
+ trace_ss.add(files('simple.c'))
+endif
+if 'ftrace' in get_option('trace_backends')
+ trace_ss.add(files('ftrace.c'))
+endif
trace_ss.add(files('control.c'))
trace_ss.add(files('qmp.c'))
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 09/24] trace: move configuration from configure to Meson
2021-10-07 13:08 ` [PATCH 09/24] trace: move configuration from configure to Meson Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU, Stefan Hajnoczi
[-- Attachment #1: Type: text/plain, Size: 14447 bytes --]
On Thu, Oct 7, 2021 at 5:17 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Cc: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
lgtm
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 91 +--------------------------------------------
> docs/meson.build | 2 +-
> meson.build | 51 +++++++++++++++++++++----
> meson_options.txt | 6 +++
> scripts/meson.build | 2 +-
> trace/meson.build | 15 +++++---
> 6 files changed, 61 insertions(+), 106 deletions(-)
>
> diff --git a/configure b/configure
> index 98723db0cd..4bfc5e350d 100755
> --- a/configure
> +++ b/configure
> @@ -216,10 +216,6 @@ version_ge () {
> done
> }
>
> -have_backend () {
> - echo "$trace_backends" | grep "$1" >/dev/null
> -}
> -
> glob() {
> eval test -z '"${1#'"$2"'}"'
> }
> @@ -3512,56 +3508,6 @@ case "$capstone" in
> ;;
> esac
>
> -##########################################
> -# check if we have posix_syslog
> -
> -posix_syslog=no
> -cat > $TMPC << EOF
> -#include <syslog.h>
> -int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO,
> "configure"); return 0; }
> -EOF
> -if compile_prog "" "" ; then
> - posix_syslog=yes
> -fi
> -
> -##########################################
> -# check if trace backend exists
> -
> -$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends"
> --check-backends > /dev/null 2> /dev/null
> -if test "$?" -ne 0 ; then
> - error_exit "invalid trace backends" \
> - "Please choose supported trace backends."
> -fi
> -
> -##########################################
> -# For 'ust' backend, test if ust headers are present
> -if have_backend "ust"; then
> - if $pkg_config lttng-ust --exists; then
> - lttng_ust_libs=$($pkg_config --libs lttng-ust)
> - else
> - error_exit "Trace backend 'ust' missing lttng-ust header files"
> - fi
> -fi
> -
> -##########################################
> -# For 'dtrace' backend, test if 'dtrace' command is present
> -if have_backend "dtrace"; then
> - if ! has 'dtrace' ; then
> - error_exit "dtrace command is not found in PATH $PATH"
> - fi
> - trace_backend_stap="no"
> - if has 'stap' ; then
> - trace_backend_stap="yes"
> -
> - # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
> - # visibility. Define STAP_SDT_V2 to produce 'default' symbol
> visibility
> - # instead. QEMU --enable-modules depends on this because the SystemTap
> - # semaphores are linked into the main binary and not the module's
> shared
> - # object.
> - QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
> - fi
> -fi
> -
> ##########################################
> # check and set a backend for coroutine
>
> @@ -4572,42 +4518,6 @@ if test "$tpm" = "yes"; then
> echo 'CONFIG_TPM=y' >> $config_host_mak
> fi
>
> -echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
> -if have_backend "nop"; then
> - echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
> -fi
> -if have_backend "simple"; then
> - echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
> -fi
> -if have_backend "log"; then
> - echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
> -fi
> -if have_backend "ust"; then
> - echo "CONFIG_TRACE_UST=y" >> $config_host_mak
> - echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
> -fi
> -if have_backend "dtrace"; then
> - echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
> - if test "$trace_backend_stap" = "yes" ; then
> - echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
> - fi
> -fi
> -if have_backend "ftrace"; then
> - if test "$linux" = "yes" ; then
> - echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
> - else
> - feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
> - fi
> -fi
> -if have_backend "syslog"; then
> - if test "$posix_syslog" = "yes" ; then
> - echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
> - else
> - feature_not_found "syslog(trace backend)" "syslog not available"
> - fi
> -fi
> -echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
> -
> if test "$rdma" = "yes" ; then
> echo "CONFIG_RDMA=y" >> $config_host_mak
> echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
> @@ -4990,6 +4900,7 @@ if test "$skip_meson" = no; then
> $(if test "$default_feature" = no; then echo
> "-Dauto_features=disabled"; fi) \
> -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack
> -Doss=$oss \
> -Dpa=$pa -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> + -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file \
> $cross_arg \
> "$PWD" "$source_path"
>
> diff --git a/docs/meson.build b/docs/meson.build
> index be4dc30f39..19cce670a2 100644
> --- a/docs/meson.build
> +++ b/docs/meson.build
> @@ -57,7 +57,7 @@ if build_docs
> 'qemu-nbd.8': (have_tools ? 'man8' : ''),
> 'qemu-pr-helper.8': (have_tools ? 'man8' : ''),
> 'qemu-storage-daemon.1': (have_tools ? 'man1' : ''),
> - 'qemu-trace-stap.1':
> (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
> + 'qemu-trace-stap.1': (stap.found() ? 'man1' : ''),
> 'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
> 'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
> 'qemu.1': 'man1',
> diff --git a/meson.build b/meson.build
> index 8752b757cc..98fa4b68d9 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -111,6 +111,22 @@ foreach target : edk2_targets
> endif
> endforeach
>
> +dtrace = not_found
> +stap = not_found
> +if 'dtrace' in get_option('trace_backends')
> + dtrace = find_program('dtrace', required: true)
> + stap = find_program('stap', required: false)
> + if stap.found()
> + # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
> + # visibility. Define STAP_SDT_V2 to produce 'default' symbol
> visibility
> + # instead. QEMU --enable-modules depends on this because the SystemTap
> + # semaphores are linked into the main binary and not the module's
> shared
> + # object.
> + add_global_arguments('-DSTAP_SDT_V2',
> + native: false, language: ['c', 'cpp', 'objc'])
> + endif
> +endif
> +
> ##################
> # Compiler flags #
> ##################
> @@ -201,6 +217,19 @@ if get_option('fuzzing') and
> get_option('fuzzing_engine') == '' and \
> error('Your compiler does not support -fsanitize=fuzzer')
> endif
>
> +if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
> + error('ftrace is supported only on Linux')
> +endif
> +if 'syslog' in get_option('trace_backends') and not cc.compiles('''
> + #include <syslog.h>
> + int main(void) {
> + openlog("qemu", LOG_PID, LOG_DAEMON);
> + syslog(LOG_INFO, "configure");
> + return 0;
> + }''')
> + error('syslog is not supported on this system')
> +endif
> +
> if targetos != 'linux' and get_option('mpath').enabled()
> error('Multipath is supported only on Linux')
> endif
> @@ -361,8 +390,9 @@ if 'CONFIG_GIO' in config_host
> link_args: config_host['GIO_LIBS'].split())
> endif
> lttng = not_found
> -if 'CONFIG_TRACE_UST' in config_host
> - lttng = declare_dependency(link_args:
> config_host['LTTNG_UST_LIBS'].split())
> +if 'ust' in get_option('trace_backends')
> + lttng = dependency('lttng-ust', required: true, method: 'pkg-config',
> + kwargs: static_kwargs)
> endif
> pixman = not_found
> if have_system or have_tools
> @@ -1349,6 +1379,11 @@ elif get_option('virtfs').disabled()
> have_virtfs = false
> endif
>
> +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_BINDIR', get_option('prefix') /
> get_option('bindir'))
> config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
> config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') /
> qemu_confdir)
> @@ -1574,7 +1609,7 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
>
> ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
> arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> -strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'CONFIG_TRACE_FILE']
> +strings = ['HOST_DSOSUF', 'CONFIG_IASL']
> foreach k, v: config_host
> if ignored.contains(k)
> # do nothing
> @@ -2112,7 +2147,7 @@ qapi_gen_depends = [ meson.current_source_dir() /
> 'scripts/qapi/__init__.py',
>
> tracetool = [
> python, files('scripts/tracetool.py'),
> - '--backend=' + config_host['TRACE_BACKENDS']
> + '--backend=' + ','.join(get_option('trace_backends'))
> ]
> tracetool_depends = files(
> 'scripts/tracetool/backend/log.py',
> @@ -2831,7 +2866,7 @@ foreach target : target_dirs
> emulators += {exe['name']: emulator}
> endif
>
> - if 'CONFIG_TRACE_SYSTEMTAP' in config_host
> + if stap.found()
> foreach stp: [
> {'ext': '.stp-build', 'fmt': 'stap', 'bin':
> meson.current_build_dir() / exe['name'], 'install': false},
> {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') /
> get_option('bindir') / exe['name'], 'install': true},
> @@ -3012,9 +3047,9 @@ summary_info += {'fuzzing support':
> get_option('fuzzing')}
> if have_system
> summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
> endif
> -summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
> -if config_host['TRACE_BACKENDS'].split().contains('simple')
> - summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE']
> + '-<pid>'}
> +summary_info += {'Trace backends':
> ','.join(get_option('trace_backends'))}
> +if 'simple' in get_option('trace_backends')
> + summary_info += {'Trace output file': get_option('trace_file') +
> '-<pid>'}
> endif
> summary_info += {'QOM debugging':
> config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
> summary_info += {'vhost-kernel support':
> config_host.has_key('CONFIG_VHOST_KERNEL')}
> diff --git a/meson_options.txt b/meson_options.txt
> index 100c30e967..8f9c3b5b17 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -13,6 +13,8 @@ option('audio_drv_list', type: 'array', value:
> ['default'],
> description: 'Set audio driver list')
> option('fuzzing_engine', type : 'string', value : '',
> description: 'fuzzing engine library for OSS-Fuzz')
> +option('trace_file', type: 'string', value: 'trace',
> + description: 'Trace file prefix for simple backend')
>
> option('docs', type : 'feature', value : 'auto',
> description: 'Documentations build support')
> @@ -146,6 +148,10 @@ option('fuse', type: 'feature', value: 'auto',
> option('fuse_lseek', type : 'feature', value : 'auto',
> description: 'SEEK_HOLE/SEEK_DATA support for FUSE exports')
>
> +option('trace_backends', type: 'array', value: ['log'],
> + choices: ['dtrace', 'ftrace', 'log', 'nop', 'simple', 'syslog',
> 'ust'],
> + description: 'Set available tracing backends')
> +
> option('alsa', type: 'feature', value: 'auto',
> description: 'ALSA sound support')
> option('coreaudio', type: 'feature', value: 'auto',
> diff --git a/scripts/meson.build b/scripts/meson.build
> index e8cc63896d..1c89e10a76 100644
> --- a/scripts/meson.build
> +++ b/scripts/meson.build
> @@ -1,3 +1,3 @@
> -if 'CONFIG_TRACE_SYSTEMTAP' in config_host
> +if stap.found()
> install_data('qemu-trace-stap', install_dir: get_option('bindir'))
> endif
> diff --git a/trace/meson.build b/trace/meson.build
> index b8f95de200..573dd699c6 100644
> --- a/trace/meson.build
> +++ b/trace/meson.build
> @@ -2,7 +2,6 @@
> specific_ss.add(files('control-target.c'))
>
> trace_events_files = []
> -dtrace = find_program('dtrace', required: 'CONFIG_TRACE_DTRACE' in
> config_host)
> foreach dir : [ '.' ] + trace_events_subdirs
> trace_events_file = meson.project_source_root() / dir / 'trace-events'
> trace_events_files += [ trace_events_file ]
> @@ -21,7 +20,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
> input: trace_events_file,
> command: [ tracetool, group, '--format=c',
> '@INPUT@', '@OUTPUT@' ],
> depend_files: tracetool_depends)
> - if 'CONFIG_TRACE_UST' in config_host
> + if 'ust' in get_option('trace_backends')
> trace_ust_h = custom_target(fmt.format('trace-ust', 'h'),
> output: fmt.format('trace-ust', 'h'),
> input: trace_events_file,
> @@ -31,7 +30,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
> genh += trace_ust_h
> endif
> trace_ss.add(trace_h, trace_c)
> - if 'CONFIG_TRACE_DTRACE' in config_host
> + if 'dtrace' in get_option('trace_backends')
> trace_dtrace = custom_target(fmt.format('trace-dtrace', 'dtrace'),
> output: fmt.format('trace-dtrace',
> 'dtrace'),
> input: trace_events_file,
> @@ -76,7 +75,7 @@ foreach d : [
> specific_ss.add(when: 'CONFIG_TCG', if_true: gen)
> endforeach
>
> -if 'CONFIG_TRACE_UST' in config_host
> +if 'ust' in get_option('trace_backends')
> trace_ust_all_h = custom_target('trace-ust-all.h',
> output: 'trace-ust-all.h',
> input: trace_events_files,
> @@ -91,7 +90,11 @@ if 'CONFIG_TRACE_UST' in config_host
> genh += trace_ust_all_h
> endif
>
> -trace_ss.add(when: 'CONFIG_TRACE_SIMPLE', if_true: files('simple.c'))
> -trace_ss.add(when: 'CONFIG_TRACE_FTRACE', if_true: files('ftrace.c'))
> +if 'simple' in get_option('trace_backends')
> + trace_ss.add(files('simple.c'))
> +endif
> +if 'ftrace' in get_option('trace_backends')
> + trace_ss.add(files('ftrace.c'))
> +endif
> trace_ss.add(files('control.c'))
> trace_ss.add(files('qmp.c'))
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 18979 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (8 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 09/24] trace: move configuration from configure to Meson Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 13:44 ` Philippe Mathieu-Daudé
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object Paolo Bonzini
` (13 subsequent siblings)
23 siblings, 2 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
This is just a constant string, there is no need to pass it in config-host.mak.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 ------
meson.build | 10 +++++-----
2 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/configure b/configure
index 4bfc5e350d..f91b8e1f0d 100755
--- a/configure
+++ b/configure
@@ -351,7 +351,6 @@ bigendian="no"
mingw32="no"
gcov="no"
EXESUF=""
-HOST_DSOSUF=".so"
modules="no"
module_upgrades="no"
prefix="/usr/local"
@@ -594,9 +593,6 @@ fi
# cross-compiling to one of these OSes then you'll need to specify
# the correct CPU with the --cpu option.
case $targetos in
-Darwin)
- HOST_DSOSUF=".dylib"
- ;;
SunOS)
# $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
@@ -785,7 +781,6 @@ fi
if test "$mingw32" = "yes" ; then
EXESUF=".exe"
- HOST_DSOSUF=".dll"
# MinGW needs -mthreads for TLS and macro _MT.
CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
write_c_skeleton;
@@ -4636,7 +4631,6 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
-echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
if test "$gcov" = "yes" ; then
echo "CONFIG_GCOV=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 98fa4b68d9..6842402a60 100644
--- a/meson.build
+++ b/meson.build
@@ -250,6 +250,7 @@ iokit = []
emulator_link_args = []
nvmm =not_found
hvf = not_found
+host_dsosuf = '.so'
if targetos == 'windows'
socket = cc.find_library('ws2_32')
winmm = cc.find_library('winmm')
@@ -258,9 +259,11 @@ if targetos == 'windows'
version_res = win.compile_resources('version.rc',
depend_files: files('pc-bios/qemu-nsis.ico'),
include_directories: include_directories('.'))
+ host_dsosuf = '.dll'
elif targetos == 'darwin'
coref = dependency('appleframeworks', modules: 'CoreFoundation')
iokit = dependency('appleframeworks', modules: 'IOKit', required: false)
+ host_dsosuf = '.dylib'
elif targetos == 'sunos'
socket = [cc.find_library('socket'),
cc.find_library('nsl'),
@@ -1460,6 +1463,7 @@ config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
+config_host_data.set_quoted('CONFIG_HOST_DSOSUF', host_dsosuf)
config_host_data.set('HAVE_HOST_BLOCK_DEVICE', have_host_block_device)
# has_header
@@ -1606,10 +1610,9 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
return printf("%zu", SIZE_MAX);
}''', args: ['-Werror']))
-
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
-strings = ['HOST_DSOSUF', 'CONFIG_IASL']
+strings = ['CONFIG_IASL']
foreach k, v: config_host
if ignored.contains(k)
# do nothing
@@ -1621,9 +1624,6 @@ foreach k, v: config_host
elif k == 'ARCH'
config_host_data.set('HOST_' + v.to_upper(), 1)
elif strings.contains(k)
- if not k.startswith('CONFIG_')
- k = 'CONFIG_' + k.to_upper()
- endif
config_host_data.set_quoted(k, v)
elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
config_host_data.set(k, v == 'y' ? 1 : v)
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF to Meson
2021-10-07 13:08 ` [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF " Paolo Bonzini
@ 2021-10-07 13:44 ` Philippe Mathieu-Daudé
2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-10-07 13:44 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 10/7/21 15:08, Paolo Bonzini wrote:
> This is just a constant string, there is no need to pass it in config-host.mak.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 6 ------
> meson.build | 10 +++++-----
> 2 files changed, 5 insertions(+), 11 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF to Meson
2021-10-07 13:08 ` [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF " Paolo Bonzini
2021-10-07 13:44 ` Philippe Mathieu-Daudé
@ 2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 4353 bytes --]
On Thu, Oct 7, 2021 at 5:14 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> This is just a constant string, there is no need to pass it in
> config-host.mak.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
I am surprised not to find a way for meson to return it, but I am not sure
where it would fit either. compiler.get_{lib,exe}_suffix()? Or maybe a fake
build/lib target and check the path()..
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 6 ------
> meson.build | 10 +++++-----
> 2 files changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/configure b/configure
> index 4bfc5e350d..f91b8e1f0d 100755
> --- a/configure
> +++ b/configure
> @@ -351,7 +351,6 @@ bigendian="no"
> mingw32="no"
> gcov="no"
> EXESUF=""
> -HOST_DSOSUF=".so"
> modules="no"
> module_upgrades="no"
> prefix="/usr/local"
> @@ -594,9 +593,6 @@ fi
> # cross-compiling to one of these OSes then you'll need to specify
> # the correct CPU with the --cpu option.
> case $targetos in
> -Darwin)
> - HOST_DSOSUF=".dylib"
> - ;;
> SunOS)
> # $(uname -m) returns i86pc even on an x86_64 box, so default based on
> isainfo
> if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
> @@ -785,7 +781,6 @@ fi
>
> if test "$mingw32" = "yes" ; then
> EXESUF=".exe"
> - HOST_DSOSUF=".dll"
> # MinGW needs -mthreads for TLS and macro _MT.
> CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
> write_c_skeleton;
> @@ -4636,7 +4631,6 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
> echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
> echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
> echo "EXESUF=$EXESUF" >> $config_host_mak
> -echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
> echo "LIBS_QGA=$libs_qga" >> $config_host_mak
> if test "$gcov" = "yes" ; then
> echo "CONFIG_GCOV=y" >> $config_host_mak
> diff --git a/meson.build b/meson.build
> index 98fa4b68d9..6842402a60 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -250,6 +250,7 @@ iokit = []
> emulator_link_args = []
> nvmm =not_found
> hvf = not_found
> +host_dsosuf = '.so'
> if targetos == 'windows'
> socket = cc.find_library('ws2_32')
> winmm = cc.find_library('winmm')
> @@ -258,9 +259,11 @@ if targetos == 'windows'
> version_res = win.compile_resources('version.rc',
> depend_files:
> files('pc-bios/qemu-nsis.ico'),
> include_directories:
> include_directories('.'))
> + host_dsosuf = '.dll'
> elif targetos == 'darwin'
> coref = dependency('appleframeworks', modules: 'CoreFoundation')
> iokit = dependency('appleframeworks', modules: 'IOKit', required: false)
> + host_dsosuf = '.dylib'
> elif targetos == 'sunos'
> socket = [cc.find_library('socket'),
> cc.find_library('nsl'),
> @@ -1460,6 +1463,7 @@ config_host_data.set('QEMU_VERSION_MAJOR',
> meson.project_version().split('.')[0]
> config_host_data.set('QEMU_VERSION_MINOR',
> meson.project_version().split('.')[1])
> config_host_data.set('QEMU_VERSION_MICRO',
> meson.project_version().split('.')[2])
>
> +config_host_data.set_quoted('CONFIG_HOST_DSOSUF', host_dsosuf)
> config_host_data.set('HAVE_HOST_BLOCK_DEVICE', have_host_block_device)
>
> # has_header
> @@ -1606,10 +1610,9 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
> return printf("%zu", SIZE_MAX);
> }''', args: ['-Werror']))
>
> -
> ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
> arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> -strings = ['HOST_DSOSUF', 'CONFIG_IASL']
> +strings = ['CONFIG_IASL']
> foreach k, v: config_host
> if ignored.contains(k)
> # do nothing
> @@ -1621,9 +1624,6 @@ foreach k, v: config_host
> elif k == 'ARCH'
> config_host_data.set('HOST_' + v.to_upper(), 1)
> elif strings.contains(k)
> - if not k.startswith('CONFIG_')
> - k = 'CONFIG_' + k.to_upper()
> - endif
> config_host_data.set_quoted(k, v)
> elif k.startswith('CONFIG_') or k.startswith('HAVE_') or
> k.startswith('HOST_')
> config_host_data.set(k, v == 'y' ? 1 : v)
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 6058 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (9 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF " Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 13:45 ` Philippe Mathieu-Daudé
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak Paolo Bonzini
` (12 subsequent siblings)
23 siblings, 2 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
No need to pass it in config-host.mak.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ----
meson.build | 3 ++-
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/configure b/configure
index f91b8e1f0d..35e25bb960 100755
--- a/configure
+++ b/configure
@@ -347,7 +347,6 @@ tsan="no"
fortify_source="$default_feature"
strip_opt="yes"
tcg_interpreter="false"
-bigendian="no"
mingw32="no"
gcov="no"
EXESUF=""
@@ -4262,9 +4261,6 @@ fi
if test "$strip_opt" = "yes" ; then
echo "STRIP=${strip}" >> $config_host_mak
fi
-if test "$bigendian" = "yes" ; then
- echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
-fi
if test "$mingw32" = "yes" ; then
echo "CONFIG_WIN32=y" >> $config_host_mak
if test "$guest_agent_with_vss" = "yes" ; then
diff --git a/meson.build b/meson.build
index 6842402a60..9bb443387a 100644
--- a/meson.build
+++ b/meson.build
@@ -1465,6 +1465,7 @@ config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]
config_host_data.set_quoted('CONFIG_HOST_DSOSUF', host_dsosuf)
config_host_data.set('HAVE_HOST_BLOCK_DEVICE', have_host_block_device)
+config_host_data.set('HOST_WORDS_BIGENDIAN', host_machine.endian() == 'big')
# has_header
config_host_data.set('CONFIG_EPOLL', cc.has_header('sys/epoll.h'))
@@ -1625,7 +1626,7 @@ foreach k, v: config_host
config_host_data.set('HOST_' + v.to_upper(), 1)
elif strings.contains(k)
config_host_data.set_quoted(k, v)
- elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
+ elif k.startswith('CONFIG_') or k.startswith('HAVE_')
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object
2021-10-07 13:08 ` [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object Paolo Bonzini
@ 2021-10-07 13:45 ` Philippe Mathieu-Daudé
2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-10-07 13:45 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 10/7/21 15:08, Paolo Bonzini wrote:
> No need to pass it in config-host.mak.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 4 ----
> meson.build | 3 ++-
> 2 files changed, 2 insertions(+), 5 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object
2021-10-07 13:08 ` [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object Paolo Bonzini
2021-10-07 13:45 ` Philippe Mathieu-Daudé
@ 2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 2084 bytes --]
On Thu, Oct 7, 2021 at 5:14 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> No need to pass it in config-host.mak.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Or we could eventually use G_BYTE_ORDER, I guess.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
> configure | 4 ----
> meson.build | 3 ++-
> 2 files changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/configure b/configure
> index f91b8e1f0d..35e25bb960 100755
> --- a/configure
> +++ b/configure
> @@ -347,7 +347,6 @@ tsan="no"
> fortify_source="$default_feature"
> strip_opt="yes"
> tcg_interpreter="false"
> -bigendian="no"
> mingw32="no"
> gcov="no"
> EXESUF=""
> @@ -4262,9 +4261,6 @@ fi
> if test "$strip_opt" = "yes" ; then
> echo "STRIP=${strip}" >> $config_host_mak
> fi
> -if test "$bigendian" = "yes" ; then
> - echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
> -fi
> if test "$mingw32" = "yes" ; then
> echo "CONFIG_WIN32=y" >> $config_host_mak
> if test "$guest_agent_with_vss" = "yes" ; then
> diff --git a/meson.build b/meson.build
> index 6842402a60..9bb443387a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1465,6 +1465,7 @@ config_host_data.set('QEMU_VERSION_MICRO',
> meson.project_version().split('.')[2]
>
> config_host_data.set_quoted('CONFIG_HOST_DSOSUF', host_dsosuf)
> config_host_data.set('HAVE_HOST_BLOCK_DEVICE', have_host_block_device)
> +config_host_data.set('HOST_WORDS_BIGENDIAN', host_machine.endian() ==
> 'big')
>
> # has_header
> config_host_data.set('CONFIG_EPOLL', cc.has_header('sys/epoll.h'))
> @@ -1625,7 +1626,7 @@ foreach k, v: config_host
> config_host_data.set('HOST_' + v.to_upper(), 1)
> elif strings.contains(k)
> config_host_data.set_quoted(k, v)
> - elif k.startswith('CONFIG_') or k.startswith('HAVE_') or
> k.startswith('HOST_')
> + elif k.startswith('CONFIG_') or k.startswith('HAVE_')
> config_host_data.set(k, v == 'y' ? 1 : v)
> endif
> endforeach
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3260 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (10 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson Paolo Bonzini
` (11 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 3 ---
meson.build | 1 +
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/configure b/configure
index 35e25bb960..499c84859d 100755
--- a/configure
+++ b/configure
@@ -4628,9 +4628,6 @@ echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
-if test "$gcov" = "yes" ; then
- echo "CONFIG_GCOV=y" >> $config_host_mak
-fi
if test "$rng_none" = "yes"; then
echo "CONFIG_RNG_NONE=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 9bb443387a..2962c24eb5 100644
--- a/meson.build
+++ b/meson.build
@@ -1404,6 +1404,7 @@ config_host_data.set('CONFIG_ATTR', libattr.found())
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
config_host_data.set('CONFIG_COCOA', cocoa.found())
config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
+config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
config_host_data.set('CONFIG_LZO', lzo.found())
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak
2021-10-07 13:08 ` [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 1524 bytes --]
On Thu, Oct 7, 2021 at 5:24 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 3 ---
> meson.build | 1 +
> 2 files changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/configure b/configure
> index 35e25bb960..499c84859d 100755
> --- a/configure
> +++ b/configure
> @@ -4628,9 +4628,6 @@ echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
> echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
> echo "EXESUF=$EXESUF" >> $config_host_mak
> echo "LIBS_QGA=$libs_qga" >> $config_host_mak
> -if test "$gcov" = "yes" ; then
> - echo "CONFIG_GCOV=y" >> $config_host_mak
> -fi
>
> if test "$rng_none" = "yes"; then
> echo "CONFIG_RNG_NONE=y" >> $config_host_mak
> diff --git a/meson.build b/meson.build
> index 9bb443387a..2962c24eb5 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1404,6 +1404,7 @@ config_host_data.set('CONFIG_ATTR', libattr.found())
> config_host_data.set('CONFIG_BRLAPI', brlapi.found())
> config_host_data.set('CONFIG_COCOA', cocoa.found())
> config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
> +config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
> config_host_data.set('CONFIG_LIBUDEV', libudev.found())
> config_host_data.set('CONFIG_LZO', lzo.found())
> config_host_data.set('CONFIG_MPATH', mpathpersist.found())
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2494 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (11 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 14/24] configure, meson: move pthread_setname_np checks " Paolo Bonzini
` (10 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Remove some special cases by moving them to Meson.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 37 -------------------------------------
meson.build | 22 ++++++++++++++++++++--
2 files changed, 20 insertions(+), 39 deletions(-)
diff --git a/configure b/configure
index 499c84859d..52f89b05d6 100755
--- a/configure
+++ b/configure
@@ -2401,18 +2401,6 @@ else
l2tpv3=no
fi
-cat > $TMPC <<EOF
-#include <sys/mman.h>
-int main(int argc, char *argv[]) {
- return mlockall(MCL_FUTURE);
-}
-EOF
-if compile_prog "" "" ; then
- have_mlockall=yes
-else
- have_mlockall=no
-fi
-
#########################################
# vhost interdependencies and host support
@@ -3840,21 +3828,6 @@ if test "$fortify_source" != "no"; then
fi
fi
-##########################################
-# check if struct fsxattr is available via linux/fs.h
-
-have_fsxattr=no
-cat > $TMPC << EOF
-#include <linux/fs.h>
-struct fsxattr foo;
-int main(void) {
- return 0;
-}
-EOF
-if compile_prog "" "" ; then
- have_fsxattr=yes
-fi
-
##########################################
# check for usable membarrier system call
if test "$membarrier" = "yes"; then
@@ -4356,13 +4329,6 @@ if test "$gdbus_codegen" != "" ; then
fi
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
-# Work around a system header bug with some kernel/XFS header
-# versions where they both try to define 'struct fsxattr':
-# xfs headers will not try to redefine structs from linux headers
-# if this macro is set.
-if test "$have_fsxattr" = "yes" ; then
- echo "HAVE_FSXATTR=y" >> $config_host_mak
-fi
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
@@ -4567,9 +4533,6 @@ fi
if test "$parallels" = "yes" ; then
echo "CONFIG_PARALLELS=y" >> $config_host_mak
fi
-if test "$have_mlockall" = "yes" ; then
- echo "HAVE_MLOCKALL=y" >> $config_host_mak
-fi
if test "$plugins" = "yes" ; then
echo "CONFIG_PLUGIN=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 2962c24eb5..935a20c198 100644
--- a/meson.build
+++ b/meson.build
@@ -1604,6 +1604,23 @@ config_host_data.set('CONFIG_SPLICE', cc.links(gnu_source_prefix + '''
return 0;
}'''))
+config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
+ #include <sys/mman.h>
+ int main(int argc, char *argv[]) {
+ return mlockall(MCL_FUTURE);
+ }'''))
+
+# Work around a system header bug with some kernel/XFS header
+# versions where they both try to define 'struct fsxattr':
+# xfs headers will not try to redefine structs from linux headers
+# if this macro is set.
+config_host_data.set('HAVE_FSXATTR', cc.links('''
+ #include <linux/fs.h>'
+ struct fsxattr foo;
+ int main(void) {
+ return 0;
+ }'''))
+
# Some versions of Mac OS X incorrectly define SIZE_MAX
config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
#include <stdint.h>
@@ -1612,7 +1629,8 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
return printf("%zu", SIZE_MAX);
}''', args: ['-Werror']))
-ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
+ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
+ 'HAVE_GDB_BIN']
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
strings = ['CONFIG_IASL']
foreach k, v: config_host
@@ -1627,7 +1645,7 @@ foreach k, v: config_host
config_host_data.set('HOST_' + v.to_upper(), 1)
elif strings.contains(k)
config_host_data.set_quoted(k, v)
- elif k.startswith('CONFIG_') or k.startswith('HAVE_')
+ elif k.startswith('CONFIG_')
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson
2021-10-07 13:08 ` [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 4321 bytes --]
On Thu, Oct 7, 2021 at 5:23 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Remove some special cases by moving them to Meson.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 37 -------------------------------------
> meson.build | 22 ++++++++++++++++++++--
> 2 files changed, 20 insertions(+), 39 deletions(-)
>
> diff --git a/configure b/configure
> index 499c84859d..52f89b05d6 100755
> --- a/configure
> +++ b/configure
> @@ -2401,18 +2401,6 @@ else
> l2tpv3=no
> fi
>
> -cat > $TMPC <<EOF
> -#include <sys/mman.h>
> -int main(int argc, char *argv[]) {
> - return mlockall(MCL_FUTURE);
> -}
> -EOF
> -if compile_prog "" "" ; then
> - have_mlockall=yes
> -else
> - have_mlockall=no
> -fi
> -
> #########################################
> # vhost interdependencies and host support
>
> @@ -3840,21 +3828,6 @@ if test "$fortify_source" != "no"; then
> fi
> fi
>
> -##########################################
> -# check if struct fsxattr is available via linux/fs.h
> -
> -have_fsxattr=no
> -cat > $TMPC << EOF
> -#include <linux/fs.h>
> -struct fsxattr foo;
> -int main(void) {
> - return 0;
> -}
> -EOF
> -if compile_prog "" "" ; then
> - have_fsxattr=yes
> -fi
> -
> ##########################################
> # check for usable membarrier system call
> if test "$membarrier" = "yes"; then
> @@ -4356,13 +4329,6 @@ if test "$gdbus_codegen" != "" ; then
> fi
> echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
>
> -# Work around a system header bug with some kernel/XFS header
> -# versions where they both try to define 'struct fsxattr':
> -# xfs headers will not try to redefine structs from linux headers
> -# if this macro is set.
> -if test "$have_fsxattr" = "yes" ; then
> - echo "HAVE_FSXATTR=y" >> $config_host_mak
> -fi
> 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
> @@ -4567,9 +4533,6 @@ fi
> if test "$parallels" = "yes" ; then
> echo "CONFIG_PARALLELS=y" >> $config_host_mak
> fi
> -if test "$have_mlockall" = "yes" ; then
> - echo "HAVE_MLOCKALL=y" >> $config_host_mak
> -fi
>
> if test "$plugins" = "yes" ; then
> echo "CONFIG_PLUGIN=y" >> $config_host_mak
> diff --git a/meson.build b/meson.build
> index 2962c24eb5..935a20c198 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1604,6 +1604,23 @@ config_host_data.set('CONFIG_SPLICE',
> cc.links(gnu_source_prefix + '''
> return 0;
> }'''))
>
> +config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
> + #include <sys/mman.h>
> + int main(int argc, char *argv[]) {
> + return mlockall(MCL_FUTURE);
> + }'''))
> +
> +# Work around a system header bug with some kernel/XFS header
> +# versions where they both try to define 'struct fsxattr':
> +# xfs headers will not try to redefine structs from linux headers
> +# if this macro is set.
> +config_host_data.set('HAVE_FSXATTR', cc.links('''
> + #include <linux/fs.h>'
> + struct fsxattr foo;
> + int main(void) {
> + return 0;
> + }'''))
> +
> # Some versions of Mac OS X incorrectly define SIZE_MAX
> config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
> #include <stdint.h>
> @@ -1612,7 +1629,8 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
> return printf("%zu", SIZE_MAX);
> }''', args: ['-Werror']))
>
> -ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
> +ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
> + 'HAVE_GDB_BIN']
> arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> strings = ['CONFIG_IASL']
> foreach k, v: config_host
> @@ -1627,7 +1645,7 @@ foreach k, v: config_host
> config_host_data.set('HOST_' + v.to_upper(), 1)
> elif strings.contains(k)
> config_host_data.set_quoted(k, v)
> - elif k.startswith('CONFIG_') or k.startswith('HAVE_')
> + elif k.startswith('CONFIG_')
> config_host_data.set(k, v == 'y' ? 1 : v)
> endif
> endforeach
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 5974 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 14/24] configure, meson: move pthread_setname_np checks to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (12 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 15/24] configure, meson: move libaio check to meson.build Paolo Bonzini
` (9 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
This makes the pthreads check dead in configure, so remove it
as well.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 78 ----------------------------------------
meson.build | 23 ++++++++++++
util/qemu-thread-posix.c | 5 ++-
3 files changed, 25 insertions(+), 81 deletions(-)
diff --git a/configure b/configure
index 52f89b05d6..a1e142d5f8 100755
--- a/configure
+++ b/configure
@@ -3146,71 +3146,6 @@ if test "$modules" = yes; then
fi
fi
-##########################################
-# pthread probe
-PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
-
-pthread=no
-cat > $TMPC << EOF
-#include <pthread.h>
-static void *f(void *p) { return NULL; }
-int main(void) {
- pthread_t thread;
- pthread_create(&thread, 0, f, 0);
- return 0;
-}
-EOF
-if compile_prog "" "" ; then
- pthread=yes
-else
- for pthread_lib in $PTHREADLIBS_LIST; do
- if compile_prog "" "$pthread_lib" ; then
- pthread=yes
- break
- fi
- done
-fi
-
-if test "$mingw32" != yes && test "$pthread" = no; then
- error_exit "pthread check failed" \
- "Make sure to have the pthread libs and headers installed."
-fi
-
-# check for pthread_setname_np with thread id
-pthread_setname_np_w_tid=no
-cat > $TMPC << EOF
-#include <pthread.h>
-
-static void *f(void *p) { return NULL; }
-int main(void)
-{
- pthread_t thread;
- pthread_create(&thread, 0, f, 0);
- pthread_setname_np(thread, "QEMU");
- return 0;
-}
-EOF
-if compile_prog "" "$pthread_lib" ; then
- pthread_setname_np_w_tid=yes
-fi
-
-# check for pthread_setname_np without thread id
-pthread_setname_np_wo_tid=no
-cat > $TMPC << EOF
-#include <pthread.h>
-
-static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
-int main(void)
-{
- pthread_t thread;
- pthread_create(&thread, 0, f, 0);
- return 0;
-}
-EOF
-if compile_prog "" "$pthread_lib" ; then
- pthread_setname_np_wo_tid=yes
-fi
-
##########################################
# libssh probe
if test "$libssh" != "no" ; then
@@ -4496,19 +4431,6 @@ if test "$debug_mutex" = "yes" ; then
echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
fi
-# Hold two types of flag:
-# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
-# a thread we have a handle to
-# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
-# platform
-if test "$pthread_setname_np_w_tid" = "yes" ; then
- echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
- echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
-elif test "$pthread_setname_np_wo_tid" = "yes" ; then
- echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
- echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
-fi
-
if test "$bochs" = "yes" ; then
echo "CONFIG_BOCHS=y" >> $config_host_mak
fi
diff --git a/meson.build b/meson.build
index 935a20c198..54b2afdb96 100644
--- a/meson.build
+++ b/meson.build
@@ -1586,6 +1586,29 @@ config_host_data.set('CONFIG_POSIX_MADVISE', cc.links(gnu_source_prefix + '''
#include <sys/mman.h>
#include <stddef.h>
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }'''))
+
+config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
+ #include <pthread.h>
+
+ static void *f(void *p) { return NULL; }
+ int main(void)
+ {
+ pthread_t thread;
+ pthread_create(&thread, 0, f, 0);
+ pthread_setname_np(thread, "QEMU");
+ return 0;
+ }''', dependencies: threads))
+config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links('''
+ #include <pthread.h>
+
+ static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
+ int main(void)
+ {
+ pthread_t thread;
+ pthread_create(&thread, 0, f, 0);
+ return 0;
+ }''', dependencies: threads))
+
config_host_data.set('CONFIG_SIGNALFD', cc.links(gnu_source_prefix + '''
#include <unistd.h>
#include <sys/syscall.h>
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 6c5004220d..e1225b63bd 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -23,7 +23,8 @@ void qemu_thread_naming(bool enable)
{
name_threads = enable;
-#ifndef CONFIG_THREAD_SETNAME_BYTHREAD
+#if !defined CONFIG_PTHREAD_SETNAME_NP_W_TID && \
+ !defined CONFIG_PTHREAD_SETNAME_NP_WO_TID
/* This is a debugging option, not fatal */
if (enable) {
fprintf(stderr, "qemu: thread naming not supported on this host\n");
@@ -522,7 +523,6 @@ static void *qemu_thread_start(void *args)
void *arg = qemu_thread_args->arg;
void *r;
-#ifdef CONFIG_THREAD_SETNAME_BYTHREAD
/* Attempt to set the threads name; note that this is for debug, so
* we're not going to fail if we can't set it.
*/
@@ -533,7 +533,6 @@ static void *qemu_thread_start(void *args)
pthread_setname_np(qemu_thread_args->name);
# endif
}
-#endif
QEMU_TSAN_ANNOTATE_THREAD_NAME(qemu_thread_args->name);
g_free(qemu_thread_args->name);
g_free(qemu_thread_args);
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 14/24] configure, meson: move pthread_setname_np checks to Meson
2021-10-07 13:08 ` [PATCH 14/24] configure, meson: move pthread_setname_np checks " Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 5854 bytes --]
On Thu, Oct 7, 2021 at 5:19 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> This makes the pthreads check dead in configure, so remove it
> as well.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
(a shame that g_system_thread_set_name() is not exported imho)
---
> configure | 78 ----------------------------------------
> meson.build | 23 ++++++++++++
> util/qemu-thread-posix.c | 5 ++-
> 3 files changed, 25 insertions(+), 81 deletions(-)
>
> diff --git a/configure b/configure
> index 52f89b05d6..a1e142d5f8 100755
> --- a/configure
> +++ b/configure
> @@ -3146,71 +3146,6 @@ if test "$modules" = yes; then
> fi
> fi
>
> -##########################################
> -# pthread probe
> -PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
> -
> -pthread=no
> -cat > $TMPC << EOF
> -#include <pthread.h>
> -static void *f(void *p) { return NULL; }
> -int main(void) {
> - pthread_t thread;
> - pthread_create(&thread, 0, f, 0);
> - return 0;
> -}
> -EOF
> -if compile_prog "" "" ; then
> - pthread=yes
> -else
> - for pthread_lib in $PTHREADLIBS_LIST; do
> - if compile_prog "" "$pthread_lib" ; then
> - pthread=yes
> - break
> - fi
> - done
> -fi
> -
> -if test "$mingw32" != yes && test "$pthread" = no; then
> - error_exit "pthread check failed" \
> - "Make sure to have the pthread libs and headers installed."
> -fi
> -
> -# check for pthread_setname_np with thread id
> -pthread_setname_np_w_tid=no
> -cat > $TMPC << EOF
> -#include <pthread.h>
> -
> -static void *f(void *p) { return NULL; }
> -int main(void)
> -{
> - pthread_t thread;
> - pthread_create(&thread, 0, f, 0);
> - pthread_setname_np(thread, "QEMU");
> - return 0;
> -}
> -EOF
> -if compile_prog "" "$pthread_lib" ; then
> - pthread_setname_np_w_tid=yes
> -fi
> -
> -# check for pthread_setname_np without thread id
> -pthread_setname_np_wo_tid=no
> -cat > $TMPC << EOF
> -#include <pthread.h>
> -
> -static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
> -int main(void)
> -{
> - pthread_t thread;
> - pthread_create(&thread, 0, f, 0);
> - return 0;
> -}
> -EOF
> -if compile_prog "" "$pthread_lib" ; then
> - pthread_setname_np_wo_tid=yes
> -fi
> -
> ##########################################
> # libssh probe
> if test "$libssh" != "no" ; then
> @@ -4496,19 +4431,6 @@ if test "$debug_mutex" = "yes" ; then
> echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
> fi
>
> -# Hold two types of flag:
> -# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name
> on
> -# a thread we have a handle to
> -# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
> -# platform
> -if test "$pthread_setname_np_w_tid" = "yes" ; then
> - echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
> - echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
> -elif test "$pthread_setname_np_wo_tid" = "yes" ; then
> - echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
> - echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
> -fi
> -
> if test "$bochs" = "yes" ; then
> echo "CONFIG_BOCHS=y" >> $config_host_mak
> fi
> diff --git a/meson.build b/meson.build
> index 935a20c198..54b2afdb96 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1586,6 +1586,29 @@ config_host_data.set('CONFIG_POSIX_MADVISE',
> cc.links(gnu_source_prefix + '''
> #include <sys/mman.h>
> #include <stddef.h>
> int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED);
> }'''))
> +
> +config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
> + #include <pthread.h>
> +
> + static void *f(void *p) { return NULL; }
> + int main(void)
> + {
> + pthread_t thread;
> + pthread_create(&thread, 0, f, 0);
> + pthread_setname_np(thread, "QEMU");
> + return 0;
> + }''', dependencies: threads))
> +config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links('''
> + #include <pthread.h>
> +
> + static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
> + int main(void)
> + {
> + pthread_t thread;
> + pthread_create(&thread, 0, f, 0);
> + return 0;
> + }''', dependencies: threads))
> +
> config_host_data.set('CONFIG_SIGNALFD', cc.links(gnu_source_prefix + '''
> #include <unistd.h>
> #include <sys/syscall.h>
> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
> index 6c5004220d..e1225b63bd 100644
> --- a/util/qemu-thread-posix.c
> +++ b/util/qemu-thread-posix.c
> @@ -23,7 +23,8 @@ void qemu_thread_naming(bool enable)
> {
> name_threads = enable;
>
> -#ifndef CONFIG_THREAD_SETNAME_BYTHREAD
> +#if !defined CONFIG_PTHREAD_SETNAME_NP_W_TID && \
> + !defined CONFIG_PTHREAD_SETNAME_NP_WO_TID
> /* This is a debugging option, not fatal */
> if (enable) {
> fprintf(stderr, "qemu: thread naming not supported on this
> host\n");
> @@ -522,7 +523,6 @@ static void *qemu_thread_start(void *args)
> void *arg = qemu_thread_args->arg;
> void *r;
>
> -#ifdef CONFIG_THREAD_SETNAME_BYTHREAD
> /* Attempt to set the threads name; note that this is for debug, so
> * we're not going to fail if we can't set it.
> */
> @@ -533,7 +533,6 @@ static void *qemu_thread_start(void *args)
> pthread_setname_np(qemu_thread_args->name);
> # endif
> }
> -#endif
> QEMU_TSAN_ANNOTATE_THREAD_NAME(qemu_thread_args->name);
> g_free(qemu_thread_args->name);
> g_free(qemu_thread_args);
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 7742 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 15/24] configure, meson: move libaio check to meson.build
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (13 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 14/24] configure, meson: move pthread_setname_np checks " Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 19:24 ` Richard Henderson
2021-10-07 13:08 ` [PATCH 16/24] configure, meson: move vde detection to meson Paolo Bonzini
` (8 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
block/meson.build | 2 +-
configure | 31 ++++---------------------------
meson.build | 10 ++++++++--
meson_options.txt | 2 ++
stubs/meson.build | 4 +++-
5 files changed, 18 insertions(+), 31 deletions(-)
diff --git a/block/meson.build b/block/meson.build
index 66ee11e62c..deb73ca389 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -65,7 +65,7 @@ block_ss.add(when: 'CONFIG_POSIX', if_true: [files('file-posix.c'), coref, iokit
block_ss.add(when: libiscsi, if_true: files('iscsi-opts.c'))
block_ss.add(when: 'CONFIG_LINUX', if_true: files('nvme.c'))
block_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
-block_ss.add(when: ['CONFIG_LINUX_AIO', libaio], if_true: files('linux-aio.c'))
+block_ss.add(when: libaio, if_true: files('linux-aio.c'))
block_ss.add(when: linux_io_uring, if_true: files('io_uring.c'))
block_modules = {}
diff --git a/configure b/configure
index a1e142d5f8..86bc4b52d7 100755
--- a/configure
+++ b/configure
@@ -315,7 +315,7 @@ pa="auto"
xen=${default_feature:+disabled}
xen_ctrl_version="$default_feature"
xen_pci_passthrough="auto"
-linux_aio="$default_feature"
+linux_aio="auto"
linux_io_uring="auto"
cap_ng="auto"
attr="auto"
@@ -1196,9 +1196,9 @@ for opt do
;;
--enable-fdt=system) fdt="system"
;;
- --disable-linux-aio) linux_aio="no"
+ --disable-linux-aio) linux_aio="disabled"
;;
- --enable-linux-aio) linux_aio="yes"
+ --enable-linux-aio) linux_aio="enabled"
;;
--disable-linux-io-uring) linux_io_uring="disabled"
;;
@@ -3161,26 +3161,6 @@ if test "$libssh" != "no" ; then
fi
fi
-##########################################
-# linux-aio probe
-
-if test "$linux_aio" != "no" ; then
- cat > $TMPC <<EOF
-#include <libaio.h>
-#include <sys/eventfd.h>
-#include <stddef.h>
-int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
-EOF
- if compile_prog "" "-laio" ; then
- linux_aio=yes
- else
- if test "$linux_aio" = "yes" ; then
- feature_not_found "linux AIO" "Install libaio devel"
- fi
- linux_aio=no
- fi
-fi
-
##########################################
# TPM emulation is only on POSIX
@@ -4270,9 +4250,6 @@ if test "$xen" = "enabled" ; then
echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
echo "XEN_LIBS=$xen_libs" >> $config_host_mak
fi
-if test "$linux_aio" = "yes" ; then
- echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
-fi
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
@@ -4772,7 +4749,7 @@ if test "$skip_meson" = no; then
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
-Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
-Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
- -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file \
+ -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
$cross_arg \
"$PWD" "$source_path"
diff --git a/meson.build b/meson.build
index 54b2afdb96..0be11e5e08 100644
--- a/meson.build
+++ b/meson.build
@@ -402,9 +402,14 @@ if have_system or have_tools
pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
method: 'pkg-config', kwargs: static_kwargs)
endif
-libaio = cc.find_library('aio', required: false)
zlib = dependency('zlib', required: true, kwargs: static_kwargs)
+libaio = not_found
+if not get_option('linux_aio').auto() or have_block
+ libaio = cc.find_library('aio', has_headers: ['libaio.h'],
+ required: get_option('linux_aio'),
+ kwargs: static_kwargs)
+endif
linux_io_uring = not_found
if not get_option('linux_io_uring').auto() or have_block
linux_io_uring = dependency('liburing', required: get_option('linux_io_uring'),
@@ -1429,6 +1434,7 @@ config_host_data.set('CONFIG_EBPF', libbpf.found())
config_host_data.set('CONFIG_LIBDAXCTL', libdaxctl.found())
config_host_data.set('CONFIG_LIBISCSI', libiscsi.found())
config_host_data.set('CONFIG_LIBNFS', libnfs.found())
+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_RBD', rbd.found())
@@ -3291,7 +3297,7 @@ summary_info += {'JACK support': jack}
summary_info += {'brlapi support': brlapi}
summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
-summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
+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')}
diff --git a/meson_options.txt b/meson_options.txt
index 8f9c3b5b17..904e15d54c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -103,6 +103,8 @@ option('libusb', type : 'feature', value : 'auto',
description: 'libusb support for USB passthrough')
option('libxml2', type : 'feature', value : 'auto',
description: 'libxml2 support for Parallels image format')
+option('linux_aio', type : 'feature', value : 'auto',
+ description: 'Linux AIO support')
option('linux_io_uring', type : 'feature', value : 'auto',
description: 'Linux io_uring support')
option('lzfse', type : 'feature', value : 'auto',
diff --git a/stubs/meson.build b/stubs/meson.build
index beee31ec73..c8568cf588 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -20,7 +20,9 @@ endif
stub_ss.add(files('iothread-lock.c'))
stub_ss.add(files('isa-bus.c'))
stub_ss.add(files('is-daemonized.c'))
-stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
+if libaio.found()
+ stub_ss.add(if_true: files('linux-aio.c'))
+endif
stub_ss.add(files('migr-blocker.c'))
stub_ss.add(files('module-opts.c'))
stub_ss.add(files('monitor.c'))
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 15/24] configure, meson: move libaio check to meson.build
2021-10-07 13:08 ` [PATCH 15/24] configure, meson: move libaio check to meson.build Paolo Bonzini
@ 2021-10-07 19:24 ` Richard Henderson
2021-10-08 8:30 ` Paolo Bonzini
0 siblings, 1 reply; 60+ messages in thread
From: Richard Henderson @ 2021-10-07 19:24 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 10/7/21 6:08 AM, Paolo Bonzini wrote:
> +++ b/stubs/meson.build
> @@ -20,7 +20,9 @@ endif
> stub_ss.add(files('iothread-lock.c'))
> stub_ss.add(files('isa-bus.c'))
> stub_ss.add(files('is-daemonized.c'))
> -stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
> +if libaio.found()
> + stub_ss.add(if_true: files('linux-aio.c'))
> +endif
This bit doesn't look quite right, with the if_true.
r~
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 15/24] configure, meson: move libaio check to meson.build
2021-10-07 19:24 ` Richard Henderson
@ 2021-10-08 8:30 ` Paolo Bonzini
2021-10-08 8:47 ` Marc-André Lureau
0 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-08 8:30 UTC (permalink / raw)
To: Richard Henderson, qemu-devel
On 07/10/21 21:24, Richard Henderson wrote:
> On 10/7/21 6:08 AM, Paolo Bonzini wrote:
>> +++ b/stubs/meson.build
>> @@ -20,7 +20,9 @@ endif
>> stub_ss.add(files('iothread-lock.c'))
>> stub_ss.add(files('isa-bus.c'))
>> stub_ss.add(files('is-daemonized.c'))
>> -stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
>> +if libaio.found()
>> + stub_ss.add(if_true: files('linux-aio.c'))
>> +endif
>
> This bit doesn't look quite right, with the if_true.
It looks silly but it works ("when: []" is always-true, just like in
python all([]) is true). I'll remove the if_true in v2.
Paolo
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 15/24] configure, meson: move libaio check to meson.build
2021-10-08 8:30 ` Paolo Bonzini
@ 2021-10-08 8:47 ` Marc-André Lureau
2021-10-08 9:15 ` Paolo Bonzini
0 siblings, 1 reply; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-08 8:47 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Richard Henderson, QEMU
[-- Attachment #1: Type: text/plain, Size: 869 bytes --]
Hi
On Fri, Oct 8, 2021 at 12:32 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> On 07/10/21 21:24, Richard Henderson wrote:
> > On 10/7/21 6:08 AM, Paolo Bonzini wrote:
> >> +++ b/stubs/meson.build
> >> @@ -20,7 +20,9 @@ endif
> >> stub_ss.add(files('iothread-lock.c'))
> >> stub_ss.add(files('isa-bus.c'))
> >> stub_ss.add(files('is-daemonized.c'))
> >> -stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
> >> +if libaio.found()
> >> + stub_ss.add(if_true: files('linux-aio.c'))
> >> +endif
> >
> > This bit doesn't look quite right, with the if_true.
>
> It looks silly but it works ("when: []" is always-true, just like in
> python all([]) is true). I'll remove the if_true in v2.
>
>
and why not keep the one-liner version?:
stub_ss.add(when: libaio, if_true: files('linux-aio.c'))
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 1447 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 15/24] configure, meson: move libaio check to meson.build
2021-10-08 8:47 ` Marc-André Lureau
@ 2021-10-08 9:15 ` Paolo Bonzini
0 siblings, 0 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-08 9:15 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: Richard Henderson, QEMU
On 08/10/21 10:47, Marc-André Lureau wrote:
>
>
> It looks silly but it works ("when: []" is always-true, just like in
> python all([]) is true). I'll remove the if_true in v2.
>
>
> and why not keep the one-liner version?:
> stub_ss.add(when: libaio, if_true: files('linux-aio.c'))
It would link libaio even in files that don't use it. The stub is used
by those files that get util/async.c via libqemuutil, but not
block/linux-aio.c.
This particular stub (and the equivalent io_uring one) is a bit silly
though.
Someone should check exactly which files get which stub, maybe there are
opportunities for simplifications. For example if a stub is only used
by the unit tests, we might as well move more code to libqemuutil and
remove the stub.
Paolo
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 16/24] configure, meson: move vde detection to meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (14 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 15/24] configure, meson: move libaio check to meson.build Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 17/24] configure, meson: move netmap " Paolo Bonzini
` (7 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 35 ++++-------------------------------
meson.build | 26 +++++++++++++++++++++++---
meson_options.txt | 2 ++
net/meson.build | 2 +-
4 files changed, 30 insertions(+), 35 deletions(-)
diff --git a/configure b/configure
index 86bc4b52d7..a2b1d54be8 100755
--- a/configure
+++ b/configure
@@ -301,7 +301,7 @@ libudev="auto"
mpath="auto"
vnc="auto"
sparse="auto"
-vde="$default_feature"
+vde="auto"
vnc_sasl="auto"
vnc_jpeg="auto"
vnc_png="auto"
@@ -1022,9 +1022,9 @@ for opt do
;;
--enable-slirp=system) slirp="system"
;;
- --disable-vde) vde="no"
+ --disable-vde) vde="disabled"
;;
- --enable-vde) vde="yes"
+ --enable-vde) vde="enabled"
;;
--disable-netmap) netmap="no"
;;
@@ -2901,30 +2901,6 @@ EOF
fi
fi
-##########################################
-# vde libraries probe
-if test "$vde" != "no" ; then
- vde_libs="-lvdeplug"
- cat > $TMPC << EOF
-#include <libvdeplug.h>
-int main(void)
-{
- struct vde_open_args a = {0, 0, 0};
- char s[] = "";
- vde_open(s, s, &a);
- return 0;
-}
-EOF
- if compile_prog "" "$vde_libs" ; then
- vde=yes
- else
- if test "$vde" = "yes" ; then
- feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
- fi
- vde=no
- fi
-fi
-
##########################################
# netmap support probe
# Apart from looking for netmap headers, we make sure that the host API version
@@ -4197,10 +4173,6 @@ if test "$slirp_smbd" = "yes" ; then
echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
fi
-if test "$vde" = "yes" ; then
- echo "CONFIG_VDE=y" >> $config_host_mak
- echo "VDE_LIBS=$vde_libs" >> $config_host_mak
-fi
if test "$netmap" = "yes" ; then
echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
@@ -4750,6 +4722,7 @@ if test "$skip_meson" = no; then
-Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
-Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
-Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
+ -Dvde=$vde \
$cross_arg \
"$PWD" "$source_path"
diff --git a/meson.build b/meson.build
index 0be11e5e08..46d8798a19 100644
--- a/meson.build
+++ b/meson.build
@@ -502,9 +502,28 @@ else
xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
method: 'pkg-config', kwargs: static_kwargs)
endif
+
vde = not_found
-if config_host.has_key('CONFIG_VDE')
- vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
+if not get_option('vde').auto() or have_system or have_tools
+ vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
+ required: get_option('vde'),
+ kwargs: static_kwargs)
+endif
+if vde.found() and not cc.links('''
+ #include <libvdeplug.h>
+ int main(void)
+ {
+ struct vde_open_args a = {0, 0, 0};
+ char s[] = "";
+ vde_open(s, s, &a);
+ return 0;
+ }''', dependencies: vde)
+ vde = not_found
+ if get_option('cap_ng').enabled()
+ error('could not link libvdeplug')
+ else
+ warning('could not link libvdeplug, disabling')
+ endif
endif
pulse = not_found
@@ -1443,6 +1462,7 @@ config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
config_host_data.set('CONFIG_SECCOMP', seccomp.found())
config_host_data.set('CONFIG_SNAPPY', snappy.found())
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
+config_host_data.set('CONFIG_VDE', vde.found())
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())
@@ -3295,7 +3315,7 @@ if targetos == 'linux'
endif
summary_info += {'JACK support': jack}
summary_info += {'brlapi support': brlapi}
-summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
+summary_info += {'vde support': vde}
summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
summary_info += {'Linux AIO support': libaio}
summary_info += {'Linux io_uring support': linux_io_uring}
diff --git a/meson_options.txt b/meson_options.txt
index 904e15d54c..7d0fa1c7f4 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -129,6 +129,8 @@ option('u2f', type : 'feature', value : 'auto',
description: 'U2F emulation support')
option('usb_redir', type : 'feature', value : 'auto',
description: 'libusbredir support')
+option('vde', type : 'feature', value : 'auto',
+ description: 'vde network backend support')
option('virglrenderer', type : 'feature', value : 'auto',
description: 'virgl rendering support')
option('vnc', type : 'feature', value : 'auto',
diff --git a/net/meson.build b/net/meson.build
index 1076b0a7ab..491144a697 100644
--- a/net/meson.build
+++ b/net/meson.build
@@ -20,7 +20,7 @@ softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
-softmmu_ss.add(when: ['CONFIG_VDE', vde], if_true: files('vde.c'))
+softmmu_ss.add(when: vde, if_true: files('vde.c'))
softmmu_ss.add(when: 'CONFIG_NETMAP', if_true: files('netmap.c'))
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'))
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 16/24] configure, meson: move vde detection to meson
2021-10-07 13:08 ` [PATCH 16/24] configure, meson: move vde detection to meson Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 6274 bytes --]
On Thu, Oct 7, 2021 at 5:26 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 35 ++++-------------------------------
> meson.build | 26 +++++++++++++++++++++++---
> meson_options.txt | 2 ++
> net/meson.build | 2 +-
> 4 files changed, 30 insertions(+), 35 deletions(-)
>
> diff --git a/configure b/configure
> index 86bc4b52d7..a2b1d54be8 100755
> --- a/configure
> +++ b/configure
> @@ -301,7 +301,7 @@ libudev="auto"
> mpath="auto"
> vnc="auto"
> sparse="auto"
> -vde="$default_feature"
> +vde="auto"
> vnc_sasl="auto"
> vnc_jpeg="auto"
> vnc_png="auto"
> @@ -1022,9 +1022,9 @@ for opt do
> ;;
> --enable-slirp=system) slirp="system"
> ;;
> - --disable-vde) vde="no"
> + --disable-vde) vde="disabled"
> ;;
> - --enable-vde) vde="yes"
> + --enable-vde) vde="enabled"
> ;;
> --disable-netmap) netmap="no"
> ;;
> @@ -2901,30 +2901,6 @@ EOF
> fi
> fi
>
> -##########################################
> -# vde libraries probe
> -if test "$vde" != "no" ; then
> - vde_libs="-lvdeplug"
> - cat > $TMPC << EOF
> -#include <libvdeplug.h>
> -int main(void)
> -{
> - struct vde_open_args a = {0, 0, 0};
> - char s[] = "";
> - vde_open(s, s, &a);
> - return 0;
> -}
> -EOF
> - if compile_prog "" "$vde_libs" ; then
> - vde=yes
> - else
> - if test "$vde" = "yes" ; then
> - feature_not_found "vde" "Install vde (Virtual Distributed Ethernet)
> devel"
> - fi
> - vde=no
> - fi
> -fi
> -
> ##########################################
> # netmap support probe
> # Apart from looking for netmap headers, we make sure that the host API
> version
> @@ -4197,10 +4173,6 @@ if test "$slirp_smbd" = "yes" ; then
> echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
> echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
> fi
> -if test "$vde" = "yes" ; then
> - echo "CONFIG_VDE=y" >> $config_host_mak
> - echo "VDE_LIBS=$vde_libs" >> $config_host_mak
> -fi
> if test "$netmap" = "yes" ; then
> echo "CONFIG_NETMAP=y" >> $config_host_mak
> fi
> @@ -4750,6 +4722,7 @@ if test "$skip_meson" = no; then
> -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack
> -Doss=$oss \
> -Dpa=$pa -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file
> -Dlinux_aio=$linux_aio \
> + -Dvde=$vde \
> $cross_arg \
> "$PWD" "$source_path"
>
> diff --git a/meson.build b/meson.build
> index 0be11e5e08..46d8798a19 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -502,9 +502,28 @@ else
> xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
> method: 'pkg-config', kwargs: static_kwargs)
> endif
> +
> vde = not_found
> -if config_host.has_key('CONFIG_VDE')
> - vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
> +if not get_option('vde').auto() or have_system or have_tools
> + vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
> + required: get_option('vde'),
> + kwargs: static_kwargs)
> +endif
> +if vde.found() and not cc.links('''
> + #include <libvdeplug.h>
> + int main(void)
> + {
> + struct vde_open_args a = {0, 0, 0};
> + char s[] = "";
> + vde_open(s, s, &a);
> + return 0;
> + }''', dependencies: vde)
> + vde = not_found
> + if get_option('cap_ng').enabled()
> + error('could not link libvdeplug')
> + else
> + warning('could not link libvdeplug, disabling')
> + endif
> endif
>
> pulse = not_found
> @@ -1443,6 +1462,7 @@ config_host_data.set('CONFIG_SDL_IMAGE',
> sdl_image.found())
> config_host_data.set('CONFIG_SECCOMP', seccomp.found())
> config_host_data.set('CONFIG_SNAPPY', snappy.found())
> config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
> +config_host_data.set('CONFIG_VDE', vde.found())
> 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())
> @@ -3295,7 +3315,7 @@ if targetos == 'linux'
> endif
> summary_info += {'JACK support': jack}
> summary_info += {'brlapi support': brlapi}
> -summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
> +summary_info += {'vde support': vde}
> summary_info += {'netmap support':
> config_host.has_key('CONFIG_NETMAP')}
> summary_info += {'Linux AIO support': libaio}
> summary_info += {'Linux io_uring support': linux_io_uring}
> diff --git a/meson_options.txt b/meson_options.txt
> index 904e15d54c..7d0fa1c7f4 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -129,6 +129,8 @@ option('u2f', type : 'feature', value : 'auto',
> description: 'U2F emulation support')
> option('usb_redir', type : 'feature', value : 'auto',
> description: 'libusbredir support')
> +option('vde', type : 'feature', value : 'auto',
> + description: 'vde network backend support')
> option('virglrenderer', type : 'feature', value : 'auto',
> description: 'virgl rendering support')
> option('vnc', type : 'feature', value : 'auto',
> diff --git a/net/meson.build b/net/meson.build
> index 1076b0a7ab..491144a697 100644
> --- a/net/meson.build
> +++ b/net/meson.build
> @@ -20,7 +20,7 @@ softmmu_ss.add(when: 'CONFIG_TCG', if_true:
> files('filter-replay.c'))
>
> softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
> softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
> -softmmu_ss.add(when: ['CONFIG_VDE', vde], if_true: files('vde.c'))
> +softmmu_ss.add(when: vde, if_true: files('vde.c'))
> softmmu_ss.add(when: 'CONFIG_NETMAP', if_true: files('netmap.c'))
> 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'))
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 8473 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 17/24] configure, meson: move netmap detection to meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (15 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 16/24] configure, meson: move vde detection to meson Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 17:55 ` Thomas Huth
2021-10-07 13:08 ` [PATCH 18/24] configure, meson: move Spice configure handling " Paolo Bonzini
` (6 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 40 ++++------------------------------------
meson.build | 19 ++++++++++++++++++-
meson_options.txt | 2 ++
net/meson.build | 4 +++-
4 files changed, 27 insertions(+), 38 deletions(-)
diff --git a/configure b/configure
index a2b1d54be8..bb3bb3e58f 100755
--- a/configure
+++ b/configure
@@ -292,7 +292,7 @@ iconv="auto"
curses="auto"
docs="auto"
fdt="auto"
-netmap="no"
+netmap="auto"
sdl="auto"
sdl_image="auto"
virtiofsd="auto"
@@ -701,7 +701,6 @@ FreeBSD)
bsd_user="yes"
make="${MAKE-gmake}"
# needed for kinfo_getvmmap(3) in libutil.h
- netmap="" # enable netmap autodetect
;;
DragonFly)
bsd="yes"
@@ -1026,9 +1025,9 @@ for opt do
;;
--enable-vde) vde="enabled"
;;
- --disable-netmap) netmap="no"
+ --disable-netmap) netmap="disabled"
;;
- --enable-netmap) netmap="yes"
+ --enable-netmap) netmap="enabled"
;;
--disable-xen) xen="disabled"
;;
@@ -2901,34 +2900,6 @@ EOF
fi
fi
-##########################################
-# netmap support probe
-# Apart from looking for netmap headers, we make sure that the host API version
-# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
-# a minor/major version number. Minor new features will be marked with values up
-# to 15, and if something happens that requires a change to the backend we will
-# move above 15, submit the backend fixes and modify this two bounds.
-if test "$netmap" != "no" ; then
- cat > $TMPC << EOF
-#include <inttypes.h>
-#include <net/if.h>
-#include <net/netmap.h>
-#include <net/netmap_user.h>
-#if (NETMAP_API < 11) || (NETMAP_API > 15)
-#error
-#endif
-int main(void) { return 0; }
-EOF
- if compile_prog "" "" ; then
- netmap=yes
- else
- if test "$netmap" = "yes" ; then
- feature_not_found "netmap"
- fi
- netmap=no
- fi
-fi
-
##########################################
# plugin linker support probe
@@ -4173,9 +4144,6 @@ if test "$slirp_smbd" = "yes" ; then
echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
fi
-if test "$netmap" = "yes" ; then
- echo "CONFIG_NETMAP=y" >> $config_host_mak
-fi
if test "$l2tpv3" = "yes" ; then
echo "CONFIG_L2TPV3=y" >> $config_host_mak
fi
@@ -4722,7 +4690,7 @@ if test "$skip_meson" = no; then
-Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
-Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
-Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
- -Dvde=$vde \
+ -Dnetmap=$netmap -Dvde=$vde \
$cross_arg \
"$PWD" "$source_path"
diff --git a/meson.build b/meson.build
index 46d8798a19..96f87630f0 100644
--- a/meson.build
+++ b/meson.build
@@ -1659,6 +1659,23 @@ config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
return mlockall(MCL_FUTURE);
}'''))
+have_netmap = false
+if not get_option('netmap').disabled() and targetos == 'freebsd'
+ have_netmap = cc.compiles('''
+ #include <inttypes.h>
+ #include <net/if.h>
+ #include <net/netmap.h>
+ #include <net/netmap_user.h>
+ #if (NETMAP_API < 11) || (NETMAP_API > 15)
+ #error
+ #endif
+ int main(void) { return 0; }''')
+endif
+if not have_netmap and get_option('netmap').enabled()
+ error('Netmap headers not available')
+endif
+config_host_data.set('CONFIG_NETMAP', have_netmap)
+
# Work around a system header bug with some kernel/XFS header
# versions where they both try to define 'struct fsxattr':
# xfs headers will not try to redefine structs from linux headers
@@ -3316,7 +3333,7 @@ endif
summary_info += {'JACK support': jack}
summary_info += {'brlapi support': brlapi}
summary_info += {'vde support': vde}
-summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
+summary_info += {'netmap support': have_netmap}
summary_info += {'Linux AIO support': libaio}
summary_info += {'Linux io_uring support': linux_io_uring}
summary_info += {'ATTR/XATTR support': libattr}
diff --git a/meson_options.txt b/meson_options.txt
index 7d0fa1c7f4..d8e67ae481 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -129,6 +129,8 @@ option('u2f', type : 'feature', value : 'auto',
description: 'U2F emulation support')
option('usb_redir', type : 'feature', value : 'auto',
description: 'libusbredir support')
+option('netmap', type : 'feature', value : 'auto',
+ description: 'netmap network backend support')
option('vde', type : 'feature', value : 'auto',
description: 'vde network backend support')
option('virglrenderer', type : 'feature', value : 'auto',
diff --git a/net/meson.build b/net/meson.build
index 491144a697..94383e7460 100644
--- a/net/meson.build
+++ b/net/meson.build
@@ -21,7 +21,9 @@ softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
softmmu_ss.add(when: vde, if_true: files('vde.c'))
-softmmu_ss.add(when: 'CONFIG_NETMAP', if_true: files('netmap.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)
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 17/24] configure, meson: move netmap detection to meson
2021-10-07 13:08 ` [PATCH 17/24] configure, meson: move netmap " Paolo Bonzini
@ 2021-10-07 17:55 ` Thomas Huth
0 siblings, 0 replies; 60+ messages in thread
From: Thomas Huth @ 2021-10-07 17:55 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 07/10/2021 15.08, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 40 ++++------------------------------------
> meson.build | 19 ++++++++++++++++++-
> meson_options.txt | 2 ++
> net/meson.build | 4 +++-
> 4 files changed, 27 insertions(+), 38 deletions(-)
>
> diff --git a/configure b/configure
> index a2b1d54be8..bb3bb3e58f 100755
> --- a/configure
> +++ b/configure
> @@ -292,7 +292,7 @@ iconv="auto"
> curses="auto"
> docs="auto"
> fdt="auto"
> -netmap="no"
> +netmap="auto"
> sdl="auto"
> sdl_image="auto"
> virtiofsd="auto"
> @@ -701,7 +701,6 @@ FreeBSD)
> bsd_user="yes"
> make="${MAKE-gmake}"
> # needed for kinfo_getvmmap(3) in libutil.h
> - netmap="" # enable netmap autodetect
> ;;
> DragonFly)
> bsd="yes"
> @@ -1026,9 +1025,9 @@ for opt do
> ;;
> --enable-vde) vde="enabled"
> ;;
> - --disable-netmap) netmap="no"
> + --disable-netmap) netmap="disabled"
> ;;
> - --enable-netmap) netmap="yes"
> + --enable-netmap) netmap="enabled"
> ;;
> --disable-xen) xen="disabled"
> ;;
> @@ -2901,34 +2900,6 @@ EOF
> fi
> fi
>
> -##########################################
> -# netmap support probe
> -# Apart from looking for netmap headers, we make sure that the host API version
> -# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
> -# a minor/major version number. Minor new features will be marked with values up
> -# to 15, and if something happens that requires a change to the backend we will
> -# move above 15, submit the backend fixes and modify this two bounds.
> -if test "$netmap" != "no" ; then
> - cat > $TMPC << EOF
> -#include <inttypes.h>
> -#include <net/if.h>
> -#include <net/netmap.h>
> -#include <net/netmap_user.h>
> -#if (NETMAP_API < 11) || (NETMAP_API > 15)
> -#error
> -#endif
> -int main(void) { return 0; }
> -EOF
> - if compile_prog "" "" ; then
> - netmap=yes
> - else
> - if test "$netmap" = "yes" ; then
> - feature_not_found "netmap"
> - fi
> - netmap=no
> - fi
> -fi
> -
> ##########################################
> # plugin linker support probe
>
> @@ -4173,9 +4144,6 @@ if test "$slirp_smbd" = "yes" ; then
> echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
> echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
> fi
> -if test "$netmap" = "yes" ; then
> - echo "CONFIG_NETMAP=y" >> $config_host_mak
> -fi
> if test "$l2tpv3" = "yes" ; then
> echo "CONFIG_L2TPV3=y" >> $config_host_mak
> fi
> @@ -4722,7 +4690,7 @@ if test "$skip_meson" = no; then
> -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
> -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
> -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
> - -Dvde=$vde \
> + -Dnetmap=$netmap -Dvde=$vde \
> $cross_arg \
> "$PWD" "$source_path"
>
> diff --git a/meson.build b/meson.build
> index 46d8798a19..96f87630f0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1659,6 +1659,23 @@ config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
> return mlockall(MCL_FUTURE);
> }'''))
>
> +have_netmap = false
> +if not get_option('netmap').disabled() and targetos == 'freebsd'
The "and targetos == 'freebsd'" seems wrong. netmap is also usable on Linux,
and I cannot use --enable-netmap anymore after this patch. It works again
once I removed the freebsd check here.
Thomas
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 18/24] configure, meson: move Spice configure handling to meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (16 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 17/24] configure, meson: move netmap " Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 13:08 ` [PATCH 19/24] configure: remove obsolete Solaris ar check Paolo Bonzini
` (5 subsequent siblings)
23 siblings, 0 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Add meson feature options for Spice and Spice protocol, and move
detection logic out of configure.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20211007102453.978041-1-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
chardev/meson.build | 2 +-
configure | 47 +--------------------------------------------
meson.build | 29 +++++++++++++++++-----------
meson_options.txt | 4 ++++
ui/meson.build | 4 ++--
5 files changed, 26 insertions(+), 60 deletions(-)
diff --git a/chardev/meson.build b/chardev/meson.build
index 32377af383..325ba2bdb9 100644
--- a/chardev/meson.build
+++ b/chardev/meson.build
@@ -35,7 +35,7 @@ if brlapi.found()
chardev_modules += { 'baum': module_ss }
endif
-if config_host.has_key('CONFIG_SPICE')
+if spice.found()
module_ss = ss.source_set()
module_ss.add(when: [spice], if_true: files('spice.c'))
chardev_modules += { 'spice': module_ss }
diff --git a/configure b/configure
index bb3bb3e58f..016814d23b 100755
--- a/configure
+++ b/configure
@@ -369,7 +369,7 @@ pie=""
qom_cast_debug="yes"
trace_backends="log"
trace_file="trace"
-spice="$default_feature"
+spice="auto"
spice_protocol="auto"
rbd="auto"
smartcard="auto"
@@ -3229,41 +3229,6 @@ EOF
fi
fi
-##########################################
-# spice probe
-if test "$spice_protocol" != "no" ; then
- spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
- if $pkg_config --atleast-version=0.12.3 spice-protocol; then
- spice_protocol="yes"
- else
- if test "$spice_protocol" = "yes" ; then
- feature_not_found "spice_protocol" \
- "Install spice-protocol(>=0.12.3) devel"
- fi
- spice_protocol="no"
- fi
-fi
-
-if test "$spice" != "no" ; then
- cat > $TMPC << EOF
-#include <spice.h>
-int main(void) { spice_server_new(); return 0; }
-EOF
- spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
- spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
- if $pkg_config --atleast-version=0.12.5 spice-server && \
- test "$spice_protocol" = "yes" && \
- compile_prog "$spice_cflags" "$spice_libs" ; then
- spice="yes"
- else
- if test "$spice" = "yes" ; then
- feature_not_found "spice" \
- "Install spice-server(>=0.12.5) devel"
- fi
- spice="no"
- fi
-fi
-
##########################################
# check if we have VSS SDK headers for win
@@ -4233,16 +4198,6 @@ if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
fi
-if test "$spice_protocol" = "yes" ; then
- echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
- echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
-fi
-if test "$spice" = "yes" ; then
- echo "CONFIG_SPICE=y" >> $config_host_mak
- echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
- echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
-fi
-
if test "$opengl" = "yes" ; then
echo "CONFIG_OPENGL=y" >> $config_host_mak
echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 96f87630f0..0721309ed1 100644
--- a/meson.build
+++ b/meson.build
@@ -542,17 +542,20 @@ if not get_option('jack').auto() or have_system
method: 'pkg-config', kwargs: static_kwargs)
endif
-spice = not_found
-spice_headers = not_found
spice_protocol = not_found
-if 'CONFIG_SPICE' in config_host
- spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
- link_args: config_host['SPICE_LIBS'].split())
- spice_headers = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split())
+if not get_option('spice_protocol').auto() or have_system
+ spice_protocol = dependency('spice-protocol', version: '>=0.12.3',
+ required: get_option('spice_protocol'),
+ method: 'pkg-config', kwargs: static_kwargs)
endif
-if 'CONFIG_SPICE_PROTOCOL' in config_host
- spice_protocol = declare_dependency(compile_args: config_host['SPICE_PROTOCOL_CFLAGS'].split())
+spice = not_found
+if not get_option('spice').auto() or have_system
+ spice = dependency('spice-server', version: '>=0.12.5',
+ required: get_option('spice'),
+ method: 'pkg-config', kwargs: static_kwargs)
endif
+spice_headers = spice.partial_dependency(compile_args: true, includes: true)
+
rt = cc.find_library('rt', required: false)
libdl = not_found
if 'CONFIG_PLUGIN' in config_host
@@ -1483,6 +1486,8 @@ config_host_data.set('CONFIG_STATX', has_statx)
config_host_data.set('CONFIG_ZSTD', zstd.found())
config_host_data.set('CONFIG_FUSE', fuse.found())
config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
+config_host_data.set('CONFIG_SPICE_PROTOCOL', spice_protocol.found())
+config_host_data.set('CONFIG_SPICE', spice.found())
config_host_data.set('CONFIG_X11', x11.found())
config_host_data.set('CONFIG_CFI', get_option('cfi'))
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
@@ -1764,7 +1769,7 @@ have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
host_kconfig = \
(get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
- ('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
+ (spice.found() ? ['CONFIG_SPICE=y'] : []) + \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
('CONFIG_OPENGL' in config_host ? ['CONFIG_OPENGL=y'] : []) + \
(x11.found() ? ['CONFIG_X11=y'] : []) + \
@@ -3342,8 +3347,10 @@ summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
-# TODO: add back protocol and server version
-summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
+summary_info += {'spice protocol support': spice_protocol}
+if spice_protocol.found()
+ summary_info += {' spice server support': spice}
+endif
summary_info += {'rbd support': rbd}
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
summary_info += {'smartcard support': cacard}
diff --git a/meson_options.txt b/meson_options.txt
index d8e67ae481..5a140af7f7 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -125,6 +125,10 @@ option('smartcard', type : 'feature', value : 'auto',
description: 'CA smartcard emulation support')
option('snappy', type : 'feature', value : 'auto',
description: 'snappy compression support')
+option('spice', type : 'feature', value : 'auto',
+ description: 'Spice server support')
+option('spice_protocol', type : 'feature', value : 'auto',
+ description: 'Spice protocol support')
option('u2f', type : 'feature', value : 'auto',
description: 'U2F emulation support')
option('usb_redir', type : 'feature', value : 'auto',
diff --git a/ui/meson.build b/ui/meson.build
index a73beb0e54..ee8ef27714 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -89,7 +89,7 @@ if sdl.found()
ui_modules += {'sdl' : sdl_ss}
endif
-if config_host.has_key('CONFIG_SPICE')
+if spice.found()
spice_core_ss = ss.source_set()
spice_core_ss.add(spice, pixman, files(
'spice-core.c',
@@ -99,7 +99,7 @@ if config_host.has_key('CONFIG_SPICE')
ui_modules += {'spice-core' : spice_core_ss}
endif
-if config_host.has_key('CONFIG_SPICE') and config_host.has_key('CONFIG_GIO')
+if spice.found() and config_host.has_key('CONFIG_GIO')
spice_ss = ss.source_set()
spice_ss.add(spice, gio, pixman, files('spice-app.c'))
ui_modules += {'spice-app': spice_ss}
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* [PATCH 19/24] configure: remove obsolete Solaris ar check
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (17 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 18/24] configure, meson: move Spice configure handling " Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 18:19 ` Thomas Huth
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 20/24] configure, meson: move more compiler checks to Meson Paolo Bonzini
` (4 subsequent siblings)
23 siblings, 2 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Meson already has its own logic to find the "ar" binary, so remove the
Solaris specific check.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/configure b/configure
index 016814d23b..2091844ad6 100755
--- a/configure
+++ b/configure
@@ -2284,21 +2284,6 @@ EOF
fi
fi
-#########################################
-# Solaris specific configure tool chain decisions
-
-if test "$solaris" = "yes" ; then
- if has ar; then
- :
- else
- if test -f /usr/ccs/bin/ar ; then
- error_exit "No path includes ar" \
- "Add /usr/ccs/bin to your path and rerun configure"
- fi
- error_exit "No path includes ar"
- fi
-fi
-
if test "$tcg" = "enabled"; then
git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 19/24] configure: remove obsolete Solaris ar check
2021-10-07 13:08 ` [PATCH 19/24] configure: remove obsolete Solaris ar check Paolo Bonzini
@ 2021-10-07 18:19 ` Thomas Huth
2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Thomas Huth @ 2021-10-07 18:19 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: Michele Denber
On 07/10/2021 15.08, Paolo Bonzini wrote:
> Meson already has its own logic to find the "ar" binary, so remove the
> Solaris specific check.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 15 ---------------
> 1 file changed, 15 deletions(-)
>
> diff --git a/configure b/configure
> index 016814d23b..2091844ad6 100755
> --- a/configure
> +++ b/configure
> @@ -2284,21 +2284,6 @@ EOF
> fi
> fi
>
> -#########################################
> -# Solaris specific configure tool chain decisions
> -
> -if test "$solaris" = "yes" ; then
> - if has ar; then
> - :
> - else
> - if test -f /usr/ccs/bin/ar ; then
> - error_exit "No path includes ar" \
> - "Add /usr/ccs/bin to your path and rerun configure"
> - fi
> - error_exit "No path includes ar"
> - fi
> -fi
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 19/24] configure: remove obsolete Solaris ar check
2021-10-07 13:08 ` [PATCH 19/24] configure: remove obsolete Solaris ar check Paolo Bonzini
2021-10-07 18:19 ` Thomas Huth
@ 2021-10-07 20:41 ` Marc-André Lureau
1 sibling, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 1198 bytes --]
On Thu, Oct 7, 2021 at 5:17 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Meson already has its own logic to find the "ar" binary, so remove the
> Solaris specific check.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 15 ---------------
> 1 file changed, 15 deletions(-)
>
> diff --git a/configure b/configure
> index 016814d23b..2091844ad6 100755
> --- a/configure
> +++ b/configure
> @@ -2284,21 +2284,6 @@ EOF
> fi
> fi
>
> -#########################################
> -# Solaris specific configure tool chain decisions
> -
> -if test "$solaris" = "yes" ; then
> - if has ar; then
> - :
> - else
> - if test -f /usr/ccs/bin/ar ; then
> - error_exit "No path includes ar" \
> - "Add /usr/ccs/bin to your path and rerun configure"
> - fi
> - error_exit "No path includes ar"
> - fi
> -fi
> -
> if test "$tcg" = "enabled"; then
> git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
> git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2070 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 20/24] configure, meson: move more compiler checks to Meson
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (18 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 19/24] configure: remove obsolete Solaris ar check Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update Paolo Bonzini
` (3 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 91 -----------------------------------------------------
meson.build | 45 ++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 91 deletions(-)
diff --git a/configure b/configure
index 2091844ad6..33d330dcc9 100755
--- a/configure
+++ b/configure
@@ -3108,19 +3108,6 @@ elif test "$tpm" = "yes"; then
fi
fi
-##########################################
-# iovec probe
-cat > $TMPC <<EOF
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <unistd.h>
-int main(void) { return sizeof(struct iovec); }
-EOF
-iovec=no
-if compile_prog "" "" ; then
- iovec=yes
-fi
-
##########################################
# fdt probe
@@ -3562,42 +3549,6 @@ EOF
fi
fi
-#########################################
-# See if 64-bit atomic operations are supported.
-# Note that without __atomic builtins, we can only
-# assume atomic loads/stores max at pointer size.
-
-cat > $TMPC << EOF
-#include <stdint.h>
-int main(void)
-{
- uint64_t x = 0, y = 0;
- y = __atomic_load_n(&x, __ATOMIC_RELAXED);
- __atomic_store_n(&x, y, __ATOMIC_RELAXED);
- __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
- __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
- __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
- return 0;
-}
-EOF
-if compile_prog "" "" ; then
- atomic64=yes
-fi
-
-########################################
-# check if getauxval is available.
-
-getauxval=no
-cat > $TMPC << EOF
-#include <sys/auxv.h>
-int main(void) {
- return getauxval(AT_HWCAP) == 0;
-}
-EOF
-if compile_prog "" "" ; then
- getauxval=yes
-fi
-
########################################
# check if ccache is interfering with
# semantic analysis of macros
@@ -3671,33 +3622,6 @@ else
membarrier=no
fi
-##########################################
-# check for usable AF_VSOCK environment
-have_af_vsock=no
-cat > $TMPC << EOF
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#if !defined(AF_VSOCK)
-# error missing AF_VSOCK flag
-#endif
-#include <linux/vm_sockets.h>
-int main(void) {
- int sock, ret;
- struct sockaddr_vm svm;
- socklen_t len = sizeof(svm);
- sock = socket(AF_VSOCK, SOCK_STREAM, 0);
- ret = getpeername(sock, (struct sockaddr *)&svm, &len);
- if ((ret == -1) && (errno == ENOTCONN)) {
- return 0;
- }
- return -1;
-}
-EOF
-if compile_prog "" "" ; then
- have_af_vsock=yes
-fi
-
##########################################
# check for usable AF_ALG environment
have_afalg=no
@@ -4173,9 +4097,6 @@ fi
if test "$vhost_user_fs" = "yes" ; then
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
fi
-if test "$iovec" = "yes" ; then
- echo "CONFIG_IOVEC=y" >> $config_host_mak
-fi
if test "$membarrier" = "yes" ; then
echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
fi
@@ -4245,14 +4166,6 @@ if test "$cmpxchg128" = "yes" ; then
echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
fi
-if test "$atomic64" = "yes" ; then
- echo "CONFIG_ATOMIC64=y" >> $config_host_mak
-fi
-
-if test "$getauxval" = "yes" ; then
- echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
-fi
-
if test "$libssh" = "yes" ; then
echo "CONFIG_LIBSSH=y" >> $config_host_mak
echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
@@ -4280,10 +4193,6 @@ if test "$replication" = "yes" ; then
echo "CONFIG_REPLICATION=y" >> $config_host_mak
fi
-if test "$have_af_vsock" = "yes" ; then
- echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
-fi
-
if test "$debug_mutex" = "yes" ; then
echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
fi
diff --git a/meson.build b/meson.build
index 0721309ed1..f08f364c90 100644
--- a/meson.build
+++ b/meson.build
@@ -1552,6 +1552,8 @@ config_host_data.set('CONFIG_INOTIFY',
cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
config_host_data.set('CONFIG_INOTIFY1',
cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
+config_host_data.set('CONFIG_IOVEC',
+ cc.has_header_symbol('sys/uio.h', 'struct iovec'))
config_host_data.set('CONFIG_MACHINE_BSWAP_H',
cc.has_header_symbol('machine/bswap.h', 'bswap32',
prefix: '''#include <sys/endian.h>
@@ -1700,6 +1702,49 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
return printf("%zu", SIZE_MAX);
}''', args: ['-Werror']))
+# See if 64-bit atomic operations are supported.
+# Note that without __atomic builtins, we can only
+# assume atomic loads/stores max at pointer size.
+config_host_data.set('CONFIG_ATOMIC64', cc.links('''
+ cat > $TMPC << EOF
+ #include <stdint.h>
+ int main(void)
+ {
+ uint64_t x = 0, y = 0;
+ y = __atomic_load_n(&x, __ATOMIC_RELAXED);
+ __atomic_store_n(&x, y, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
+ __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
+ __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
+ return 0;
+ }'''))
+
+config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
+ #include <sys/auxv.h>
+ int main(void) {
+ return getauxval(AT_HWCAP) == 0;
+ }'''))
+
+config_host_data.set('CONFIG_AF_VSOCK', cc.compiles(gnu_source_prefix + '''
+ #include <errno.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #if !defined(AF_VSOCK)
+ # error missing AF_VSOCK flag
+ #endif
+ #include <linux/vm_sockets.h>
+ int main(void) {
+ int sock, ret;
+ struct sockaddr_vm svm;
+ socklen_t len = sizeof(svm);
+ sock = socket(AF_VSOCK, SOCK_STREAM, 0);
+ ret = getpeername(sock, (struct sockaddr *)&svm, &len);
+ if ((ret == -1) && (errno == ENOTCONN)) {
+ return 0;
+ }
+ return -1;
+ }'''))
+
ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
'HAVE_GDB_BIN']
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 20/24] configure, meson: move more compiler checks to Meson
2021-10-07 13:08 ` [PATCH 20/24] configure, meson: move more compiler checks to Meson Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 6757 bytes --]
On Thu, Oct 7, 2021 at 5:24 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
lgtm
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 91 -----------------------------------------------------
> meson.build | 45 ++++++++++++++++++++++++++
> 2 files changed, 45 insertions(+), 91 deletions(-)
>
> diff --git a/configure b/configure
> index 2091844ad6..33d330dcc9 100755
> --- a/configure
> +++ b/configure
> @@ -3108,19 +3108,6 @@ elif test "$tpm" = "yes"; then
> fi
> fi
>
> -##########################################
> -# iovec probe
> -cat > $TMPC <<EOF
> -#include <sys/types.h>
> -#include <sys/uio.h>
> -#include <unistd.h>
> -int main(void) { return sizeof(struct iovec); }
> -EOF
> -iovec=no
> -if compile_prog "" "" ; then
> - iovec=yes
> -fi
> -
> ##########################################
> # fdt probe
>
> @@ -3562,42 +3549,6 @@ EOF
> fi
> fi
>
> -#########################################
> -# See if 64-bit atomic operations are supported.
> -# Note that without __atomic builtins, we can only
> -# assume atomic loads/stores max at pointer size.
> -
> -cat > $TMPC << EOF
> -#include <stdint.h>
> -int main(void)
> -{
> - uint64_t x = 0, y = 0;
> - y = __atomic_load_n(&x, __ATOMIC_RELAXED);
> - __atomic_store_n(&x, y, __ATOMIC_RELAXED);
> - __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED,
> __ATOMIC_RELAXED);
> - __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
> - __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
> - return 0;
> -}
> -EOF
> -if compile_prog "" "" ; then
> - atomic64=yes
> -fi
> -
> -########################################
> -# check if getauxval is available.
> -
> -getauxval=no
> -cat > $TMPC << EOF
> -#include <sys/auxv.h>
> -int main(void) {
> - return getauxval(AT_HWCAP) == 0;
> -}
> -EOF
> -if compile_prog "" "" ; then
> - getauxval=yes
> -fi
> -
> ########################################
> # check if ccache is interfering with
> # semantic analysis of macros
> @@ -3671,33 +3622,6 @@ else
> membarrier=no
> fi
>
> -##########################################
> -# check for usable AF_VSOCK environment
> -have_af_vsock=no
> -cat > $TMPC << EOF
> -#include <errno.h>
> -#include <sys/types.h>
> -#include <sys/socket.h>
> -#if !defined(AF_VSOCK)
> -# error missing AF_VSOCK flag
> -#endif
> -#include <linux/vm_sockets.h>
> -int main(void) {
> - int sock, ret;
> - struct sockaddr_vm svm;
> - socklen_t len = sizeof(svm);
> - sock = socket(AF_VSOCK, SOCK_STREAM, 0);
> - ret = getpeername(sock, (struct sockaddr *)&svm, &len);
> - if ((ret == -1) && (errno == ENOTCONN)) {
> - return 0;
> - }
> - return -1;
> -}
> -EOF
> -if compile_prog "" "" ; then
> - have_af_vsock=yes
> -fi
> -
> ##########################################
> # check for usable AF_ALG environment
> have_afalg=no
> @@ -4173,9 +4097,6 @@ fi
> if test "$vhost_user_fs" = "yes" ; then
> echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
> fi
> -if test "$iovec" = "yes" ; then
> - echo "CONFIG_IOVEC=y" >> $config_host_mak
> -fi
> if test "$membarrier" = "yes" ; then
> echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
> fi
> @@ -4245,14 +4166,6 @@ if test "$cmpxchg128" = "yes" ; then
> echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
> fi
>
> -if test "$atomic64" = "yes" ; then
> - echo "CONFIG_ATOMIC64=y" >> $config_host_mak
> -fi
> -
> -if test "$getauxval" = "yes" ; then
> - echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
> -fi
> -
> if test "$libssh" = "yes" ; then
> echo "CONFIG_LIBSSH=y" >> $config_host_mak
> echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
> @@ -4280,10 +4193,6 @@ if test "$replication" = "yes" ; then
> echo "CONFIG_REPLICATION=y" >> $config_host_mak
> fi
>
> -if test "$have_af_vsock" = "yes" ; then
> - echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
> -fi
> -
> if test "$debug_mutex" = "yes" ; then
> echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
> fi
> diff --git a/meson.build b/meson.build
> index 0721309ed1..f08f364c90 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1552,6 +1552,8 @@ config_host_data.set('CONFIG_INOTIFY',
> cc.has_header_symbol('sys/inotify.h',
> 'inotify_init'))
> config_host_data.set('CONFIG_INOTIFY1',
> cc.has_header_symbol('sys/inotify.h',
> 'inotify_init1'))
> +config_host_data.set('CONFIG_IOVEC',
> + cc.has_header_symbol('sys/uio.h', 'struct iovec'))
> config_host_data.set('CONFIG_MACHINE_BSWAP_H',
> cc.has_header_symbol('machine/bswap.h', 'bswap32',
> prefix: '''#include
> <sys/endian.h>
> @@ -1700,6 +1702,49 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not
> cc.compiles('''
> return printf("%zu", SIZE_MAX);
> }''', args: ['-Werror']))
>
> +# See if 64-bit atomic operations are supported.
> +# Note that without __atomic builtins, we can only
> +# assume atomic loads/stores max at pointer size.
> +config_host_data.set('CONFIG_ATOMIC64', cc.links('''
> + cat > $TMPC << EOF
> + #include <stdint.h>
> + int main(void)
> + {
> + uint64_t x = 0, y = 0;
> + y = __atomic_load_n(&x, __ATOMIC_RELAXED);
> + __atomic_store_n(&x, y, __ATOMIC_RELAXED);
> + __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED,
> __ATOMIC_RELAXED);
> + __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
> + __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
> + return 0;
> + }'''))
> +
> +config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
> + #include <sys/auxv.h>
> + int main(void) {
> + return getauxval(AT_HWCAP) == 0;
> + }'''))
> +
> +config_host_data.set('CONFIG_AF_VSOCK', cc.compiles(gnu_source_prefix +
> '''
> + #include <errno.h>
> + #include <sys/types.h>
> + #include <sys/socket.h>
> + #if !defined(AF_VSOCK)
> + # error missing AF_VSOCK flag
> + #endif
> + #include <linux/vm_sockets.h>
> + int main(void) {
> + int sock, ret;
> + struct sockaddr_vm svm;
> + socklen_t len = sizeof(svm);
> + sock = socket(AF_VSOCK, SOCK_STREAM, 0);
> + ret = getpeername(sock, (struct sockaddr *)&svm, &len);
> + if ((ret == -1) && (errno == ENOTCONN)) {
> + return 0;
> + }
> + return -1;
> + }'''))
> +
> ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
> 'HAVE_GDB_BIN']
> arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 9040 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (19 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 20/24] configure, meson: move more compiler checks to Meson Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt Paolo Bonzini
` (2 subsequent siblings)
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
The options were deprecated in 6.0. That said, we do not really have a
formal deprecation cycle for build-time changes, since they do not affect
users.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 8 --------
1 file changed, 8 deletions(-)
diff --git a/configure b/configure
index 33d330dcc9..d00ba0cbd2 100755
--- a/configure
+++ b/configure
@@ -1483,14 +1483,6 @@ for opt do
;;
--with-git=*) git="$optarg"
;;
- --enable-git-update)
- git_submodules_action="update"
- echo "--enable-git-update deprecated, use --with-git-submodules=update"
- ;;
- --disable-git-update)
- git_submodules_action="validate"
- echo "--disable-git-update deprecated, use --with-git-submodules=validate"
- ;;
--with-git-submodules=*)
git_submodules_action="$optarg"
;;
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update
2021-10-07 13:08 ` [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 1111 bytes --]
On Thu, Oct 7, 2021 at 5:23 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> The options were deprecated in 6.0. That said, we do not really have a
> formal deprecation cycle for build-time changes, since they do not affect
> users.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/configure b/configure
> index 33d330dcc9..d00ba0cbd2 100755
> --- a/configure
> +++ b/configure
> @@ -1483,14 +1483,6 @@ for opt do
> ;;
> --with-git=*) git="$optarg"
> ;;
> - --enable-git-update)
> - git_submodules_action="update"
> - echo "--enable-git-update deprecated, use
> --with-git-submodules=update"
> - ;;
> - --disable-git-update)
> - git_submodules_action="validate"
> - echo "--disable-git-update deprecated, use
> --with-git-submodules=validate"
> - ;;
> --with-git-submodules=*)
> git_submodules_action="$optarg"
> ;;
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 1926 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (20 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 23/24] configure: prepare for auto-generated option parsing Paolo Bonzini
2021-10-07 13:08 ` [PATCH 24/24] configure: automatically parse command line for meson -D options Paolo Bonzini
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel
Options such as "--enable-capstone=git" do not make much sense when building
from a tarball. Accept "internal" for consistency with the meson options.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index d00ba0cbd2..d2f754d5d1 100755
--- a/configure
+++ b/configure
@@ -1019,7 +1019,7 @@ for opt do
;;
--enable-slirp=git) slirp="internal"
;;
- --enable-slirp=system) slirp="system"
+ --enable-slirp=*) slirp="$optarg"
;;
--disable-vde) vde="disabled"
;;
@@ -1193,7 +1193,7 @@ for opt do
;;
--enable-fdt=git) fdt="internal"
;;
- --enable-fdt=system) fdt="system"
+ --enable-fdt=*) fdt="$optarg"
;;
--disable-linux-aio) linux_aio="disabled"
;;
@@ -1479,7 +1479,7 @@ for opt do
;;
--enable-capstone=git) capstone="internal"
;;
- --enable-capstone=system) capstone="system"
+ --enable-capstone=*) capstone="$optarg"
;;
--with-git=*) git="$optarg"
;;
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt
2021-10-07 13:08 ` [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU
[-- Attachment #1: Type: text/plain, Size: 1345 bytes --]
On Thu, Oct 7, 2021 at 5:25 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Options such as "--enable-capstone=git" do not make much sense when
> building
> from a tarball. Accept "internal" for consistency with the meson options.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> configure | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/configure b/configure
> index d00ba0cbd2..d2f754d5d1 100755
> --- a/configure
> +++ b/configure
> @@ -1019,7 +1019,7 @@ for opt do
> ;;
> --enable-slirp=git) slirp="internal"
> ;;
> - --enable-slirp=system) slirp="system"
> + --enable-slirp=*) slirp="$optarg"
> ;;
> --disable-vde) vde="disabled"
> ;;
> @@ -1193,7 +1193,7 @@ for opt do
> ;;
> --enable-fdt=git) fdt="internal"
> ;;
> - --enable-fdt=system) fdt="system"
> + --enable-fdt=*) fdt="$optarg"
> ;;
> --disable-linux-aio) linux_aio="disabled"
> ;;
> @@ -1479,7 +1479,7 @@ for opt do
> ;;
> --enable-capstone=git) capstone="internal"
> ;;
> - --enable-capstone=system) capstone="system"
> + --enable-capstone=*) capstone="$optarg"
> ;;
> --with-git=*) git="$optarg"
> ;;
> --
> 2.31.1
>
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2277 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 23/24] configure: prepare for auto-generated option parsing
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (21 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 16:53 ` Thomas Huth
2021-10-07 13:08 ` [PATCH 24/24] configure: automatically parse command line for meson -D options Paolo Bonzini
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth
Prepare the configure script and Makefile for automatically generated
help and parsing.
Because we need to run the script to generate the full help, we
cannot rely on the user supplying the path to a Python interpreter
with --python; therefore, the introspection output is parsed into
shell functions and stored in scripts/. The converter is written
in Python as standard for QEMU, and this commit contains a stub.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile | 8 ++++-
configure | 31 ++++++++++++-----
scripts/meson-buildoptions.py | 63 +++++++++++++++++++++++++++++++++++
scripts/meson-buildoptions.sh | 12 +++++++
4 files changed, 104 insertions(+), 10 deletions(-)
create mode 100755 scripts/meson-buildoptions.py
create mode 100644 scripts/meson-buildoptions.sh
diff --git a/Makefile b/Makefile
index 401c623a65..fe9415ac64 100644
--- a/Makefile
+++ b/Makefile
@@ -87,7 +87,7 @@ x := $(shell rm -rf meson-private meson-info meson-logs)
endif
# 1. ensure config-host.mak is up-to-date
-config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
+config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/scripts/meson-buildoptions.sh $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
@echo config-host.mak is out-of-date, running configure
@if test -f meson-private/coredata.dat; then \
./config.status --skip-meson; \
@@ -124,6 +124,12 @@ ifneq ($(MESON),)
Makefile.mtest: build.ninja scripts/mtest2make.py
$(MESON) introspect --targets --tests --benchmarks | $(PYTHON) scripts/mtest2make.py > $@
-include Makefile.mtest
+
+.PHONY: update-buildoptions
+all update-buildoptions: $(SRC_PATH)/scripts/meson-buildoptions.sh
+$(SRC_PATH)/scripts/meson-buildoptions.sh: $(SRC_PATH)/meson_options.txt
+ $(MESON) introspect --buildoptions $(SRC_PATH)/meson.build | $(PYTHON) \
+ scripts/meson-buildoptions.py > $@.tmp && mv $@.tmp $@
endif
# 4. Rules to bridge to other makefiles
diff --git a/configure b/configure
index d2f754d5d1..d979476e03 100755
--- a/configure
+++ b/configure
@@ -789,6 +789,18 @@ fi
werror=""
+. $source_path/scripts/meson-buildoptions.sh
+
+meson_options=
+meson_option_parse() {
+ meson_options="$meson_options $(_meson_option_parse "$@")"
+ if test $? -eq 1; then
+ echo "ERROR: unknown option $1"
+ echo "Try '$0 --help' for more information"
+ exit 1
+ fi
+}
+
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
case "$opt" in
@@ -1548,6 +1560,8 @@ for opt do
;;
--disable-slirp-smbd) slirp_smbd=no
;;
+ --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
+ ;;
*)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
@@ -1802,11 +1816,9 @@ Advanced options (experts only):
enable plugins via shared library loading
--disable-containers don't use containers for cross-building
--gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
-
-Optional features, enabled with --enable-FEATURE and
-disabled with --disable-FEATURE, default is enabled if available
-(unless built with --without-default-features):
-
+EOF
+ meson_options_help
+cat << EOF
system all system emulation targets
user supported user emulation targets
linux-user all linux usermode emulation targets
@@ -4487,7 +4499,8 @@ if test "$skip_meson" = no; then
mv $cross config-meson.cross
rm -rf meson-private meson-info meson-logs
- NINJA=$ninja $meson setup \
+ run_meson() {
+ NINJA=$ninja $meson setup \
--prefix "$prefix" \
--libdir "$libdir" \
--libexecdir "$libexecdir" \
@@ -4532,9 +4545,9 @@ if test "$skip_meson" = no; then
-Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
-Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
-Dnetmap=$netmap -Dvde=$vde \
- $cross_arg \
- "$PWD" "$source_path"
-
+ "$@" $cross_arg "$PWD" "$source_path"
+ }
+ eval run_meson $meson_options
if test "$?" -ne 0 ; then
error_exit "meson setup failed"
fi
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
new file mode 100755
index 0000000000..8948c296b7
--- /dev/null
+++ b/scripts/meson-buildoptions.py
@@ -0,0 +1,63 @@
+#! /usr/bin/env python3
+
+# Generate configure command line options handling code, based on Meson's
+# user build options introspection data
+#
+# Copyright (C) 2021 Red Hat, Inc.
+#
+# Author: Paolo Bonzini <pbonzini@redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+import json
+import textwrap
+import shlex
+import sys
+
+def sh_print(line=""):
+ print(' printf "%s\\n"', shlex.quote(line))
+
+
+def load_options(json):
+ json = [
+ x
+ for x in json
+ if x["section"] == "user"
+ and ":" not in x["name"]
+ and x["name"] not in SKIP_OPTIONS
+ ]
+ return sorted(json, key=lambda x: x["name"])
+
+
+def print_help(options):
+ print("meson_options_help() {")
+ sh_print()
+ sh_print("Optional features, enabled with --enable-FEATURE and")
+ sh_print("disabled with --disable-FEATURE, default is enabled if available")
+ sh_print("(unless built with --without-default-features):")
+ sh_print()
+ print("}")
+
+
+def print_parse(options):
+ print("_meson_option_parse() {")
+ print(" case $1 in")
+ print(" *) return 1 ;;")
+ print(" esac")
+ print("}")
+
+
+options = load_options(json.load(sys.stdin))
+print_help(options)
+print_parse(options)
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
new file mode 100644
index 0000000000..3be3058a6c
--- /dev/null
+++ b/scripts/meson-buildoptions.sh
@@ -0,0 +1,12 @@
+meson_options_help() {
+ 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'
+ printf "%s\n" '(unless built with --without-default-features):'
+ printf "%s\n" ''
+}
+_meson_option_parse() {
+ case $1 in
+ *) return 1 ;;
+ esac
+}
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 23/24] configure: prepare for auto-generated option parsing
2021-10-07 13:08 ` [PATCH 23/24] configure: prepare for auto-generated option parsing Paolo Bonzini
@ 2021-10-07 16:53 ` Thomas Huth
2021-10-08 8:42 ` Paolo Bonzini
0 siblings, 1 reply; 60+ messages in thread
From: Thomas Huth @ 2021-10-07 16:53 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 07/10/2021 15.08, Paolo Bonzini wrote:
> Prepare the configure script and Makefile for automatically generated
> help and parsing.
>
> Because we need to run the script to generate the full help, we
> cannot rely on the user supplying the path to a Python interpreter
> with --python; therefore, the introspection output is parsed into
> shell functions and stored in scripts/. The converter is written
> in Python as standard for QEMU, and this commit contains a stub.
Looks like a good approach to me! I've just got two questions below...
> diff --git a/configure b/configure
> index d2f754d5d1..d979476e03 100755
> --- a/configure
> +++ b/configure
> @@ -789,6 +789,18 @@ fi
>
> werror=""
>
> +. $source_path/scripts/meson-buildoptions.sh
> +
> +meson_options=
> +meson_option_parse() {
> + meson_options="$meson_options $(_meson_option_parse "$@")"
> + if test $? -eq 1; then
> + echo "ERROR: unknown option $1"
> + echo "Try '$0 --help' for more information"
> + exit 1
> + fi
> +}
Why the detour via this wrapper and $(_meson_option_parse) ? Couldn't you
simply add the stuff directly to $meson_options in _meson_option_parse() ?
> for opt do
> optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
> case "$opt" in
> @@ -1548,6 +1560,8 @@ for opt do
> ;;
> --disable-slirp-smbd) slirp_smbd=no
> ;;
> + --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
> + ;;
> *)
> echo "ERROR: unknown option $opt"
> echo "Try '$0 --help' for more information"
> @@ -1802,11 +1816,9 @@ Advanced options (experts only):
> enable plugins via shared library loading
> --disable-containers don't use containers for cross-building
> --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
> -
> -Optional features, enabled with --enable-FEATURE and
> -disabled with --disable-FEATURE, default is enabled if available
> -(unless built with --without-default-features):
> -
> +EOF
> + meson_options_help
> +cat << EOF
> system all system emulation targets
> user supported user emulation targets
> linux-user all linux usermode emulation targets
> @@ -4487,7 +4499,8 @@ if test "$skip_meson" = no; then
> mv $cross config-meson.cross
>
> rm -rf meson-private meson-info meson-logs
> - NINJA=$ninja $meson setup \
> + run_meson() {
> + NINJA=$ninja $meson setup \
> --prefix "$prefix" \
> --libdir "$libdir" \
> --libexecdir "$libexecdir" \
> @@ -4532,9 +4545,9 @@ if test "$skip_meson" = no; then
> -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
> -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
> -Dnetmap=$netmap -Dvde=$vde \
> - $cross_arg \
> - "$PWD" "$source_path"
> -
> + "$@" $cross_arg "$PWD" "$source_path"
> + }
> + eval run_meson $meson_options
> if test "$?" -ne 0 ; then
> error_exit "meson setup failed"
> fi
> diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
> new file mode 100755
> index 0000000000..8948c296b7
> --- /dev/null
> +++ b/scripts/meson-buildoptions.py
> @@ -0,0 +1,63 @@
> +#! /usr/bin/env python3
> +
> +# Generate configure command line options handling code, based on Meson's
> +# user build options introspection data
> +#
> +# Copyright (C) 2021 Red Hat, Inc.
> +#
> +# Author: Paolo Bonzini <pbonzini@redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2, or (at your option)
> +# any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <https://www.gnu.org/licenses/>.
> +
> +import json
> +import textwrap
> +import shlex
> +import sys
> +
> +def sh_print(line=""):
> + print(' printf "%s\\n"', shlex.quote(line))
> +
> +
> +def load_options(json):
> + json = [
> + x
> + for x in json
> + if x["section"] == "user"
> + and ":" not in x["name"]
> + and x["name"] not in SKIP_OPTIONS
> + ]
> + return sorted(json, key=lambda x: x["name"])
> +
> +
> +def print_help(options):
> + print("meson_options_help() {")
> + sh_print()
> + sh_print("Optional features, enabled with --enable-FEATURE and")
> + sh_print("disabled with --disable-FEATURE, default is enabled if available")
> + sh_print("(unless built with --without-default-features):")
> + sh_print()
> + print("}")
> +
> +
> +def print_parse(options):
> + print("_meson_option_parse() {")
> + print(" case $1 in")
> + print(" *) return 1 ;;")
> + print(" esac")
> + print("}")
> +
> +
> +options = load_options(json.load(sys.stdin))
Could you maybe print a header line first, à la:
# This file is generated by meson-buildoptions.py, do not edit!
?
> +print_help(options)
> +print_parse(options)
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> new file mode 100644
> index 0000000000..3be3058a6c
> --- /dev/null
> +++ b/scripts/meson-buildoptions.sh
> @@ -0,0 +1,12 @@
> +meson_options_help() {
> + 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'
> + printf "%s\n" '(unless built with --without-default-features):'
> + printf "%s\n" ''
> +}
> +_meson_option_parse() {
> + case $1 in
> + *) return 1 ;;
> + esac
> +}
>
Tested-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 23/24] configure: prepare for auto-generated option parsing
2021-10-07 16:53 ` Thomas Huth
@ 2021-10-08 8:42 ` Paolo Bonzini
0 siblings, 0 replies; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-08 8:42 UTC (permalink / raw)
To: Thomas Huth, qemu-devel
On 07/10/21 18:53, Thomas Huth wrote:
>> +meson_options=
>> +meson_option_parse() {
>> + meson_options="$meson_options $(_meson_option_parse "$@")"
>> + if test $? -eq 1; then
>> + echo "ERROR: unknown option $1"
>> + echo "Try '$0 --help' for more information"
>> + exit 1
>> + fi
>> +}
>
> Why the detour via this wrapper and $(_meson_option_parse) ? Couldn't
> you simply add the stuff directly to $meson_options in
> _meson_option_parse() ?
Mostly to keep the amount of shell-in-Python code as small as possible.
Also, I liked that the generated shell code was completely independent
of the configure script, did not use global variables and did not have
to know that "meson_options" is tied to the way the "run_meson" shell
function uses eval.
>> +options = load_options(json.load(sys.stdin))
>
> Could you maybe print a header line first, à la:
>
> # This file is generated by meson-buildoptions.py, do not edit!
Yes, of course.
Paolo
^ permalink raw reply [flat|nested] 60+ messages in thread
* [PATCH 24/24] configure: automatically parse command line for meson -D options
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
` (22 preceding siblings ...)
2021-10-07 13:08 ` [PATCH 23/24] configure: prepare for auto-generated option parsing Paolo Bonzini
@ 2021-10-07 13:08 ` Paolo Bonzini
2021-10-07 20:41 ` Marc-André Lureau
23 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-07 13:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth
Right now meson_options.txt lists about 90 options. Each option
needs code in configure to parse it and pass the option down to Meson as
a -D command-line argument; in addition the default must be duplicated
between configure and meson_options.txt. This series tries to remove
the code duplication by generating the case statement for those --enable
and --disable options, as well as the corresponding help text.
About 80% of the options can be handled completely by the new mechanism.
Eight meson options are not of the --enable/--disable kind. Six more need
to be parsed in configure for various reasons documented in the patch,
but they still have their help automatically generated.
The advantages are:
- less code in configure
- parsing and help is more consistent (for example --enable-blobs was
not supported)
- options are described entirely in one place, meson_options.txt.
This make it more attractive to use Meson options instead of
hand-crafted configure options and config-host.mak
A few options change name: --enable-tcmalloc and --enable-jemalloc
become --enable-malloc={tcmalloc,jemalloc}; --disable-blobs becomes
--disable-install-blobs; --enable-trace-backend becomes
--enable-trace-backends.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 540 ++--------------------------------
docs/devel/build-system.rst | 133 +++++----
meson_options.txt | 8 +
scripts/meson-buildoptions.py | 92 ++++++
scripts/meson-buildoptions.sh | 256 ++++++++++++++++
5 files changed, 449 insertions(+), 580 deletions(-)
diff --git a/configure b/configure
index d979476e03..4e1dfbea14 100755
--- a/configure
+++ b/configure
@@ -286,41 +286,8 @@ for opt do
esac
done
-brlapi="auto"
-curl="auto"
-iconv="auto"
-curses="auto"
-docs="auto"
-fdt="auto"
-netmap="auto"
-sdl="auto"
-sdl_image="auto"
-virtiofsd="auto"
-virtfs="auto"
-libudev="auto"
-mpath="auto"
-vnc="auto"
-sparse="auto"
-vde="auto"
-vnc_sasl="auto"
-vnc_jpeg="auto"
-vnc_png="auto"
-xkbcommon="auto"
-alsa="auto"
-coreaudio="auto"
-dsound="auto"
-jack="auto"
-oss="auto"
-pa="auto"
-xen=${default_feature:+disabled}
xen_ctrl_version="$default_feature"
-xen_pci_passthrough="auto"
-linux_aio="auto"
-linux_io_uring="auto"
-cap_ng="auto"
-attr="auto"
xfs="$default_feature"
-tcg="enabled"
membarrier="$default_feature"
vhost_kernel="$default_feature"
vhost_net="$default_feature"
@@ -328,15 +295,8 @@ vhost_crypto="$default_feature"
vhost_scsi="$default_feature"
vhost_vsock="$default_feature"
vhost_user="no"
-vhost_user_blk_server="auto"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
-bpf="auto"
-kvm="auto"
-hax="auto"
-hvf="auto"
-whpx="auto"
-nvmm="auto"
rdma="$default_feature"
pvrdma="$default_feature"
gprof="no"
@@ -346,7 +306,6 @@ sanitizers="no"
tsan="no"
fortify_source="$default_feature"
strip_opt="yes"
-tcg_interpreter="false"
mingw32="no"
gcov="no"
EXESUF=""
@@ -354,62 +313,32 @@ modules="no"
module_upgrades="no"
prefix="/usr/local"
qemu_suffix="qemu"
-slirp="auto"
bsd="no"
linux="no"
solaris="no"
profiler="no"
-cocoa="auto"
softmmu="yes"
linux_user="no"
bsd_user="no"
-blobs="true"
pkgversion=""
pie=""
qom_cast_debug="yes"
trace_backends="log"
trace_file="trace"
-spice="auto"
-spice_protocol="auto"
-rbd="auto"
-smartcard="auto"
-u2f="auto"
-libusb="auto"
-usb_redir="auto"
opengl="$default_feature"
cpuid_h="no"
avx2_opt="$default_feature"
-capstone="auto"
-lzo="auto"
-snappy="auto"
-bzip2="auto"
-lzfse="auto"
-zstd="auto"
guest_agent="$default_feature"
guest_agent_with_vss="no"
guest_agent_ntddscsi="no"
-guest_agent_msi="auto"
vss_win32_sdk="$default_feature"
win_sdk="no"
want_tools="$default_feature"
-libiscsi="auto"
-libnfs="auto"
coroutine=""
coroutine_pool="$default_feature"
debug_stack_usage="no"
crypto_afalg="no"
-cfi="false"
-cfi_debug="false"
-seccomp="auto"
-glusterfs="auto"
-gtk="auto"
tls_priority="NORMAL"
-gnutls="auto"
-nettle="auto"
-gcrypt="auto"
-auth_pam="auto"
-vte="auto"
-virglrenderer="auto"
tpm="$default_feature"
libssh="$default_feature"
live_block_migration=${default_feature:-yes}
@@ -427,24 +356,34 @@ qed=${default_feature:-yes}
parallels=${default_feature:-yes}
libxml2="auto"
debug_mutex="no"
-libpmem="auto"
-default_devices="true"
plugins="$default_feature"
-fuzzing="false"
rng_none="no"
secret_keyring="$default_feature"
libdaxctl="auto"
meson=""
+meson_args=""
ninja=""
+gio="$default_feature"
skip_meson=no
-gettext="auto"
-fuse="auto"
-fuse_lseek="auto"
-multiprocess="auto"
slirp_smbd="$default_feature"
-malloc_trim="auto"
-gio="$default_feature"
+# The following Meson options are handled manually (still they
+# are included in the automatically generated help message)
+
+# 1. Track which submodules are needed
+capstone="auto"
+fdt="auto"
+slirp="auto"
+
+# 2. Support --with/--without option
+default_devices="true"
+
+# 3. Automatically enable/disable other options
+tcg="enabled"
+cfi="false"
+
+# 4. Detection partly done in configure
+xen=${default_feature:+disabled}
# parse CC options second
for opt do
@@ -874,11 +813,6 @@ for opt do
error_exit "Can't mix --target-list-exclude with --target-list"
fi
;;
- --enable-trace-backends=*) trace_backends="$optarg"
- ;;
- # XXX: backwards compatibility
- --enable-trace-backend=*) trace_backends="$optarg"
- ;;
--with-trace-file=*) trace_file="$optarg"
;;
--with-default-devices) default_devices="true"
@@ -941,42 +875,10 @@ for opt do
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --disable-sdl) sdl="disabled"
- ;;
- --enable-sdl) sdl="enabled"
- ;;
- --disable-sdl-image) sdl_image="disabled"
- ;;
- --enable-sdl-image) sdl_image="enabled"
- ;;
--disable-qom-cast-debug) qom_cast_debug="no"
;;
--enable-qom-cast-debug) qom_cast_debug="yes"
;;
- --disable-virtfs) virtfs="disabled"
- ;;
- --enable-virtfs) virtfs="enabled"
- ;;
- --disable-libudev) libudev="disabled"
- ;;
- --enable-libudev) libudev="enabled"
- ;;
- --disable-virtiofsd) virtiofsd="disabled"
- ;;
- --enable-virtiofsd) virtiofsd="enabled"
- ;;
- --disable-mpath) mpath="disabled"
- ;;
- --enable-mpath) mpath="enabled"
- ;;
- --disable-vnc) vnc="disabled"
- ;;
- --enable-vnc) vnc="enabled"
- ;;
- --disable-gettext) gettext="disabled"
- ;;
- --enable-gettext) gettext="enabled"
- ;;
--audio-drv-list=*) audio_drv_list="$optarg"
;;
--block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
@@ -1007,24 +909,8 @@ for opt do
;;
--disable-tsan) tsan="no"
;;
- --enable-sparse) sparse="enabled"
- ;;
- --disable-sparse) sparse="disabled"
- ;;
--disable-strip) strip_opt="no"
;;
- --disable-vnc-sasl) vnc_sasl="disabled"
- ;;
- --enable-vnc-sasl) vnc_sasl="enabled"
- ;;
- --disable-vnc-jpeg) vnc_jpeg="disabled"
- ;;
- --enable-vnc-jpeg) vnc_jpeg="enabled"
- ;;
- --disable-vnc-png) vnc_png="disabled"
- ;;
- --enable-vnc-png) vnc_png="enabled"
- ;;
--disable-slirp) slirp="disabled"
;;
--enable-slirp) slirp="enabled"
@@ -1033,113 +919,17 @@ for opt do
;;
--enable-slirp=*) slirp="$optarg"
;;
- --disable-vde) vde="disabled"
- ;;
- --enable-vde) vde="enabled"
- ;;
- --disable-netmap) netmap="disabled"
- ;;
- --enable-netmap) netmap="enabled"
- ;;
--disable-xen) xen="disabled"
;;
--enable-xen) xen="enabled"
;;
- --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
- ;;
- --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
- ;;
- --disable-alsa) alsa="disabled"
- ;;
- --enable-alsa) alsa="enabled"
- ;;
- --disable-coreaudio) coreaudio="disabled"
- ;;
- --enable-coreaudio) coreaudio="enabled"
- ;;
- --disable-dsound) dsound="disabled"
- ;;
- --enable-dsound) dsound="enabled"
- ;;
- --disable-jack) jack="disabled"
- ;;
- --enable-jack) jack="enabled"
- ;;
- --disable-oss) oss="disabled"
- ;;
- --enable-oss) oss="enabled"
- ;;
- --disable-pa) pa="disabled"
- ;;
- --enable-pa) pa="enabled"
- ;;
- --disable-brlapi) brlapi="disabled"
- ;;
- --enable-brlapi) brlapi="enabled"
- ;;
- --disable-kvm) kvm="disabled"
- ;;
- --enable-kvm) kvm="enabled"
- ;;
- --disable-hax) hax="disabled"
- ;;
- --enable-hax) hax="enabled"
- ;;
- --disable-hvf) hvf="disabled"
- ;;
- --enable-hvf) hvf="enabled"
- ;;
- --disable-nvmm) nvmm="disabled"
- ;;
- --enable-nvmm) nvmm="enabled"
- ;;
- --disable-whpx) whpx="disabled"
- ;;
- --enable-whpx) whpx="enabled"
- ;;
- --disable-tcg-interpreter) tcg_interpreter="false"
- ;;
- --enable-tcg-interpreter) tcg_interpreter="true"
- ;;
- --disable-cap-ng) cap_ng="disabled"
- ;;
- --enable-cap-ng) cap_ng="enabled"
- ;;
--disable-tcg) tcg="disabled"
plugins="no"
;;
--enable-tcg) tcg="enabled"
;;
- --disable-malloc-trim) malloc_trim="disabled"
- ;;
- --enable-malloc-trim) malloc_trim="enabled"
- ;;
- --disable-spice) spice="no"
- ;;
- --enable-spice)
- spice_protocol="yes"
- spice="yes"
- ;;
- --disable-spice-protocol)
- spice_protocol="no"
- spice="no"
- ;;
- --enable-spice-protocol) spice_protocol="yes"
- ;;
- --disable-libiscsi) libiscsi="disabled"
- ;;
- --enable-libiscsi) libiscsi="enabled"
- ;;
- --disable-libnfs) libnfs="disabled"
- ;;
- --enable-libnfs) libnfs="enabled"
- ;;
--enable-profiler) profiler="yes"
;;
- --disable-cocoa) cocoa="disabled"
- ;;
- --enable-cocoa) cocoa="enabled"
- ;;
--disable-system) softmmu="no"
;;
--enable-system) softmmu="yes"
@@ -1183,22 +973,6 @@ for opt do
;;
--disable-cfi) cfi="false"
;;
- --enable-cfi-debug) cfi_debug="true"
- ;;
- --disable-cfi-debug) cfi_debug="false"
- ;;
- --disable-curses) curses="disabled"
- ;;
- --enable-curses) curses="enabled"
- ;;
- --disable-iconv) iconv="disabled"
- ;;
- --enable-iconv) iconv="enabled"
- ;;
- --disable-curl) curl="disabled"
- ;;
- --enable-curl) curl="enabled"
- ;;
--disable-fdt) fdt="disabled"
;;
--enable-fdt) fdt="enabled"
@@ -1207,28 +981,10 @@ for opt do
;;
--enable-fdt=*) fdt="$optarg"
;;
- --disable-linux-aio) linux_aio="disabled"
- ;;
- --enable-linux-aio) linux_aio="enabled"
- ;;
- --disable-linux-io-uring) linux_io_uring="disabled"
- ;;
- --enable-linux-io-uring) linux_io_uring="enabled"
- ;;
- --disable-attr) attr="disabled"
- ;;
- --enable-attr) attr="enabled"
- ;;
--disable-membarrier) membarrier="no"
;;
--enable-membarrier) membarrier="yes"
;;
- --disable-bpf) bpf="disabled"
- ;;
- --enable-bpf) bpf="enabled"
- ;;
- --disable-blobs) blobs="false"
- ;;
--with-pkgversion=*) pkgversion="$optarg"
;;
--with-coroutine=*) coroutine="$optarg"
@@ -1243,10 +999,6 @@ for opt do
;;
--disable-crypto-afalg) crypto_afalg="no"
;;
- --disable-docs) docs="disabled"
- ;;
- --enable-docs) docs="enabled"
- ;;
--disable-vhost-net) vhost_net="no"
;;
--enable-vhost-net) vhost_net="yes"
@@ -1263,10 +1015,6 @@ for opt do
;;
--enable-vhost-vsock) vhost_vsock="yes"
;;
- --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
- ;;
- --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
- ;;
--disable-vhost-user-fs) vhost_user_fs="no"
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
@@ -1275,60 +1023,16 @@ for opt do
;;
--enable-opengl) opengl="yes"
;;
- --disable-rbd) rbd="disabled"
- ;;
- --enable-rbd) rbd="enabled"
- ;;
--disable-xfsctl) xfs="no"
;;
--enable-xfsctl) xfs="yes"
;;
- --disable-smartcard) smartcard="disabled"
- ;;
- --enable-smartcard) smartcard="enabled"
- ;;
- --disable-u2f) u2f="disabled"
- ;;
- --enable-u2f) u2f="enabled"
- ;;
- --disable-libusb) libusb="disabled"
- ;;
- --enable-libusb) libusb="enabled"
- ;;
- --disable-usb-redir) usb_redir="disabled"
- ;;
- --enable-usb-redir) usb_redir="enabled"
- ;;
--disable-zlib-test)
;;
- --disable-lzo) lzo="disabled"
- ;;
- --enable-lzo) lzo="enabled"
- ;;
- --disable-snappy) snappy="disabled"
- ;;
- --enable-snappy) snappy="enabled"
- ;;
- --disable-bzip2) bzip2="disabled"
- ;;
- --enable-bzip2) bzip2="enabled"
- ;;
- --enable-lzfse) lzfse="enabled"
- ;;
- --disable-lzfse) lzfse="disabled"
- ;;
- --disable-zstd) zstd="disabled"
- ;;
- --enable-zstd) zstd="enabled"
- ;;
--enable-guest-agent) guest_agent="yes"
;;
--disable-guest-agent) guest_agent="no"
;;
- --enable-guest-agent-msi) guest_agent_msi="enabled"
- ;;
- --disable-guest-agent-msi) guest_agent_msi="disabled"
- ;;
--with-vss-sdk) vss_win32_sdk=""
;;
--with-vss-sdk=*) vss_win32_sdk="$optarg"
@@ -1345,12 +1049,6 @@ for opt do
;;
--disable-tools) want_tools="no"
;;
- --enable-seccomp) seccomp="enabled"
- ;;
- --disable-seccomp) seccomp="disabled"
- ;;
- --disable-glusterfs) glusterfs="disabled"
- ;;
--disable-avx2) avx2_opt="no"
;;
--enable-avx2) avx2_opt="yes"
@@ -1359,9 +1057,6 @@ for opt do
;;
--enable-avx512f) avx512f_opt="yes"
;;
-
- --enable-glusterfs) glusterfs="enabled"
- ;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
;;
@@ -1371,28 +1066,8 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
- --disable-gtk) gtk="disabled"
- ;;
- --enable-gtk) gtk="enabled"
- ;;
--tls-priority=*) tls_priority="$optarg"
;;
- --disable-gnutls) gnutls="disabled"
- ;;
- --enable-gnutls) gnutls="enabled"
- ;;
- --disable-nettle) nettle="disabled"
- ;;
- --enable-nettle) nettle="enabled"
- ;;
- --disable-gcrypt) gcrypt="disabled"
- ;;
- --enable-gcrypt) gcrypt="enabled"
- ;;
- --disable-auth-pam) auth_pam="disabled"
- ;;
- --enable-auth-pam) auth_pam="enabled"
- ;;
--enable-rdma) rdma="yes"
;;
--disable-rdma) rdma="no"
@@ -1401,14 +1076,6 @@ for opt do
;;
--disable-pvrdma) pvrdma="no"
;;
- --disable-vte) vte="disabled"
- ;;
- --enable-vte) vte="enabled"
- ;;
- --disable-virglrenderer) virglrenderer="disabled"
- ;;
- --enable-virglrenderer) virglrenderer="enabled"
- ;;
--disable-tpm) tpm="no"
;;
--enable-tpm) tpm="yes"
@@ -1425,18 +1092,6 @@ for opt do
;;
--enable-numa) numa="yes"
;;
- --disable-libxml2) libxml2="disabled"
- ;;
- --enable-libxml2) libxml2="enabled"
- ;;
- --disable-tcmalloc) tcmalloc="no"
- ;;
- --enable-tcmalloc) tcmalloc="yes"
- ;;
- --disable-jemalloc) jemalloc="no"
- ;;
- --enable-jemalloc) jemalloc="yes"
- ;;
--disable-replication) replication="no"
;;
--enable-replication) replication="yes"
@@ -1502,14 +1157,6 @@ for opt do
;;
--disable-debug-mutex) debug_mutex=no
;;
- --enable-libpmem) libpmem="enabled"
- ;;
- --disable-libpmem) libpmem="disabled"
- ;;
- --enable-xkbcommon) xkbcommon="enabled"
- ;;
- --disable-xkbcommon) xkbcommon="disabled"
- ;;
--enable-plugins) if test "$mingw32" = "yes"; then
error_exit "TCG plugins not currently supported on Windows platforms"
else
@@ -1522,10 +1169,6 @@ for opt do
;;
--disable-containers) use_containers="no"
;;
- --enable-fuzzing) fuzzing=true
- ;;
- --disable-fuzzing) fuzzing=false
- ;;
--gdb=*) gdb_bin="$optarg"
;;
--enable-rng-none) rng_none=yes
@@ -1536,22 +1179,6 @@ for opt do
;;
--disable-keyring) secret_keyring="no"
;;
- --enable-libdaxctl) libdaxctl="enabled"
- ;;
- --disable-libdaxctl) libdaxctl="disabled"
- ;;
- --enable-fuse) fuse="enabled"
- ;;
- --disable-fuse) fuse="disabled"
- ;;
- --enable-fuse-lseek) fuse_lseek="enabled"
- ;;
- --disable-fuse-lseek) fuse_lseek="disabled"
- ;;
- --enable-multiprocess) multiprocess="enabled"
- ;;
- --disable-multiprocess) multiprocess="disabled"
- ;;
--enable-gio) gio=yes
;;
--disable-gio) gio=no
@@ -1714,9 +1341,6 @@ for config in $mak_wilds; do
fi
done
-# Enumerate public trace backends for --help output
-trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
-
if test x"$show_help" = x"yes" ; then
cat << EOF
@@ -1793,18 +1417,12 @@ Advanced options (experts only):
(by default affects only QEMU, not tools like qemu-img)
--enable-block-drv-whitelist-in-tools
use block whitelist also in tools instead of only QEMU
- --enable-trace-backends=B Set trace backend
- Available backends: $trace_backend_list
--with-trace-file=NAME Full PATH,NAME of file to store traces
Default:trace-<pid>
- --disable-slirp disable SLIRP userspace network connectivity
- --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
- --enable-malloc-trim enable libc malloc_trim() for memory optimization
--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
- --disable-blobs disable installing provided firmware blobs
--with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
--with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
--tls-priority default TLS protocol/cipher priority string
@@ -1823,9 +1441,7 @@ cat << EOF
user supported user emulation targets
linux-user all linux usermode emulation targets
bsd-user all BSD usermode emulation targets
- docs build documentation
guest-agent build the QEMU Guest Agent
- guest-agent-msi build guest agent Windows MSI installation package
pie Position Independent Executables
modules modules support (non-Windows)
module-upgrades try to load modules from alternate paths for upgrades
@@ -1835,98 +1451,26 @@ cat << EOF
sparse sparse checker
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
- cfi Enable Control-Flow Integrity for indirect function calls.
- In case of a cfi violation, QEMU is terminated with SIGILL
- Depends on lto and is incompatible with modules
- Automatically enables Link-Time Optimization (lto)
- cfi-debug In case of a cfi violation, a message containing the line that
- triggered the error is written to stderr. After the error,
- QEMU is still terminated with SIGILL
- gnutls GNUTLS cryptography support
- nettle nettle cryptography support
- gcrypt libgcrypt cryptography support
- auth-pam PAM access control
- sdl SDL UI
- sdl-image SDL Image support for icons
- gtk gtk UI
- vte vte support for the gtk UI
- curses curses UI
- iconv font glyph conversion support
- vnc VNC UI support
- vnc-sasl SASL encryption for VNC server
- vnc-jpeg JPEG lossy compression for VNC server
- vnc-png PNG compression for VNC server
- cocoa Cocoa UI (Mac OS X only)
- virtfs VirtFS
- virtiofsd build virtiofs daemon (virtiofsd)
- libudev Use libudev to enumerate host devices
- mpath Multipath persistent reservation passthrough
- xen xen backend driver support
- xen-pci-passthrough PCI passthrough support for Xen
- alsa ALSA sound support
- coreaudio CoreAudio sound support
- dsound DirectSound sound support
- jack JACK sound support
- oss OSS sound support
- pa PulseAudio sound support
- brlapi BrlAPI (Braile)
- curl curl connectivity
membarrier membarrier system call (for Linux 4.14+ or Windows)
- fdt fdt device tree
- kvm KVM acceleration support
- hax HAX acceleration support
- hvf Hypervisor.framework acceleration support
- nvmm NVMM acceleration support
- whpx Windows Hypervisor Platform acceleration support
rdma Enable RDMA-based migration
pvrdma Enable PVRDMA support
- vde support for vde network
- netmap support for netmap network
- linux-aio Linux AIO support
- linux-io-uring Linux io_uring support
- cap-ng libcap-ng support
- attr attr and xattr support
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
vhost-user vhost-user backend support
- vhost-user-blk-server vhost-user-blk server support
vhost-vdpa vhost-vdpa kernel backend support
- bpf BPF kernel support
- spice spice
- spice-protocol spice-protocol
- rbd rados block device (rbd)
- libiscsi iscsi support
- libnfs nfs support
- smartcard smartcard support (libcacard)
- u2f U2F support (u2f-emu)
- libusb libusb (for usb passthrough)
live-block-migration Block migration in the main migration stream
- usb-redir usb network redirection support
- lzo support of lzo compression library
- snappy support of snappy compression library
- bzip2 support of bzip2 compression library
- (for reading bzip2-compressed dmg images)
- lzfse support of lzfse compression library
- (for reading lzfse-compressed dmg images)
- zstd support for zstd compression library
- (for migration compression and qcow2 cluster compression)
- seccomp seccomp support
coroutine-pool coroutine freelist (better performance)
- glusterfs GlusterFS backend
tpm TPM support
libssh ssh block device support
numa libnuma support
libxml2 for Parallels image format
- tcmalloc tcmalloc support
- jemalloc jemalloc support
avx2 AVX2 optimization support
avx512f AVX512F optimization support
replication replication support
opengl opengl support
- virglrenderer virgl rendering support
xfsctl xfsctl support
qom-cast-debug cast debugging support
tools build qemu-io, qemu-nbd and qemu-img tools
@@ -1939,15 +1483,8 @@ cat << EOF
qed qed image format support
parallels parallels image format support
crypto-afalg Linux AF_ALG crypto backend driver
- capstone capstone disassembler support
debug-mutex mutex debugging support
- libpmem libpmem support
- xkbcommon xkbcommon support
rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
- libdaxctl libdaxctl support
- fuse FUSE block device export
- fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
- multiprocess Out of process device emulation support
gio libgio support
slirp-smbd use smbd (at path --smbd=*) in slirp networking
@@ -3171,16 +2708,6 @@ EOF
fi
fi
-malloc=system
-if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
- echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
- exit 1
-elif test "$tcmalloc" = "yes" ; then
- malloc=tcmalloc
-elif test "$jemalloc" = "yes" ; then
- malloc=jemalloc
-fi
-
# check for usbfs
have_usbfs=no
if test "$linux_user" = "yes"; then
@@ -4511,40 +4038,23 @@ 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" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
+ -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) \
-Dstrip=$(if test "$strip_opt" = 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 -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing \
+ -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
+ -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
- -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
- -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
- -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
- -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
- -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
- -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
- -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
- -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
- -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
- -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
- -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
- -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
- -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
- -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
- -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
- -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
- -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
- -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
- -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
- -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
- -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
- -Dnetmap=$netmap -Dvde=$vde \
"$@" $cross_arg "$PWD" "$source_path"
}
eval run_meson $meson_options
diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst
index 0f636d620e..b79012b965 100644
--- a/docs/devel/build-system.rst
+++ b/docs/devel/build-system.rst
@@ -42,73 +42,21 @@ perform a build:
../configure
make
-For now, checks on the compilation environment are found in configure
-rather than meson.build, though this is expected to change. The command
-line is parsed in the configure script and, whenever needed, converted
-into the appropriate options to Meson.
-
-New checks should be added to Meson, which usually comprises the
-following tasks:
-
- - Add a Meson build option to meson_options.txt.
-
- - Add support to the command line arg parser to handle any new
- ``--enable-XXX``/``--disable-XXX`` flags required by the feature.
-
- - Add information to the help output message to report on the new
- feature flag.
-
- - Add code to perform the actual feature check.
-
- - Add code to include the feature status in ``config-host.h``
-
- - Add code to print out the feature status in the configure summary
- upon completion.
-
-
-Taking the probe for SDL2_Image as an example, we have the following pieces
-in configure::
-
- # Initial variable state
- sdl_image=auto
-
- ..snip..
-
- # Configure flag processing
- --disable-sdl-image) sdl_image=disabled
- ;;
- --enable-sdl-image) sdl_image=enabled
- ;;
-
- ..snip..
-
- # Help output feature message
- sdl-image SDL Image support for icons
-
- ..snip..
-
- # Meson invocation
- -Dsdl_image=$sdl_image
-
-In meson_options.txt::
-
- option('sdl', type : 'feature', value : 'auto',
- description: 'SDL Image support for icons')
-
-In meson.build::
-
- # Detect dependency
- sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
- method: 'pkg-config',
- kwargs: static_kwargs)
-
- # Create config-host.h (if applicable)
- config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
-
- # Summary
- summary_info += {'SDL image support': sdl_image.found()}
+The configure script automatically recognizes
+command line options for which a same-named Meson option exists;
+dashes in the command line are replaced with underscores.
+Many checks on the compilation environment are still found in configure
+rather than `meson.build`, but new checks should be added directly to
+`meson.build`.
+Patches are also welcome to move existing checks from the configure
+phase to `meson.build`. When doing so, ensure that `meson.build` does
+not use anymore the keys that you have removed from `config-host.mak`.
+Typically these will be replaced in `meson.build` by boolean variables,
+``get_option('optname')`` invocations, or `dep.found()` expressions.
+In general, the remaining checks have little or no interdependencies,
+so they can be moved one by one.
Helper functions
----------------
@@ -335,6 +283,61 @@ new target, or enabling new devices or hardware for a particular
system/userspace emulation target
+Adding checks
+-------------
+
+New checks should be added to Meson. Compiler checks can be as simple as
+the following::
+
+ config_host_data.set('HAVE_BTRFS_H', cc.has_header('linux/btrfs.h'))
+
+A more complex task such as adding a new dependency usually
+comprises the following tasks:
+
+ - Add a Meson build option to meson_options.txt.
+
+ - Add code to perform the actual feature check.
+
+ - Add code to include the feature status in `config-host.h`
+
+ - Add code to print out the feature status in the configure summary
+ upon completion.
+
+Taking the probe for SDL2_Image as an example, we have the following
+in ``meson_options.txt``::
+
+ option('sdl_image', type : 'feature', value : 'auto',
+ description: 'SDL Image support for icons')
+
+Unless the option was given a non-``auto`` value (on the configure
+command line), the detection code must be performed only if the
+dependency will be used::
+
+ sdl_image = not_found
+ if not get_option('sdl_image').auto() or have_system
+ sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
+ method: 'pkg-config',
+ static: enable_static)
+ endif
+
+This avoids warnings on static builds of user-mode emulators, for example.
+Most of the libraries used by system-mode emulators are not available for
+static linking.
+
+The other supporting code is generally simple::
+
+ # Create config-host.h (if applicable)
+ config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
+
+ # Summary
+ summary_info += {'SDL image support': sdl_image.found()}
+
+For the configure script to parse the new option, the
+``scripts/meson-buildoptions.sh`` file must be up-to-date; ``make
+For the configure script to parse the new option, the ``meson-buildoptions.json``
+update-buildoptions`` (or just `make`) will take care of updating it.
+
+
Support scripts
---------------
diff --git a/meson_options.txt b/meson_options.txt
index 5a140af7f7..4ab4570125 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,3 +1,7 @@
+# These options do not correspond to a --enable/--disable-* option
+# on the configure script command line. If you add more, list them in
+# scripts/meson-buildoptions.py's SKIP_OPTIONS constant too.
+
option('qemu_suffix', type : 'string', value: 'qemu',
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
option('docdir', type : 'string', value : 'doc',
@@ -16,6 +20,10 @@ option('fuzzing_engine', type : 'string', value : '',
option('trace_file', type: 'string', value: 'trace',
description: 'Trace file prefix for simple backend')
+# Everything else can be set via --enable/--disable-* option
+# on the configure script command line. After adding an option
+# here make sure to run "make update-buildoptions".
+
option('docs', type : 'feature', value : 'auto',
description: 'Documentations build support')
option('fuzzing', type : 'boolean', value: false,
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 8948c296b7..9132e86efb 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -25,10 +25,71 @@
import shlex
import sys
+SKIP_OPTIONS = {
+ "audio_drv_list",
+ "default_devices",
+ "docdir",
+ "fuzzing_engine",
+ "qemu_firmwarepath",
+ "qemu_suffix",
+ "sphinx_build",
+ "trace_file",
+}
+
+LINE_WIDTH = 76
+
+# Convert the default value of an option to the string used in
+# the help message
+def value_to_help(value):
+ if isinstance(value, list):
+ return ",".join(value)
+ if isinstance(value, bool):
+ return "enabled" if value else "disabled"
+ return str(value)
+
+
+def wrap(left, text, indent):
+ length = LINE_WIDTH - indent
+ if len(left) >= indent:
+ yield left
+ yield from wrap("", text, indent)
+ else:
+ spaces = " " * indent
+ left = (left + spaces)[0:indent]
+ yield from textwrap.wrap(
+ text, width=LINE_WIDTH, initial_indent=left, subsequent_indent=spaces
+ )
+
+
def sh_print(line=""):
print(' printf "%s\\n"', shlex.quote(line))
+def help_line(left, opt, indent, long):
+ right = f"{opt['description']}"
+ if long:
+ value = value_to_help(opt["value"])
+ if value != "auto":
+ right += f" [{value}]"
+ if "choices" in opt and long:
+ choices = "/".join(sorted(opt["choices"]))
+ right += f" (choices: {choices})"
+ for x in wrap(" " + left, right, indent):
+ sh_print(x)
+
+
+# Return whether the option (a dictionary) can be used with
+# arguments. Booleans can never be used with arguments;
+# combos allow an argument only if they accept other values
+# than "auto", "enabled", and "disabled".
+def allow_arg(opt):
+ if opt["type"] == "boolean":
+ return False
+ if opt["type"] != "combo":
+ return True
+ return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
+
+
def load_options(json):
json = [
x
@@ -42,17 +103,48 @@ def load_options(json):
def print_help(options):
print("meson_options_help() {")
+ for opt in options:
+ key = opt["name"].replace("_", "-")
+ # 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}"
+ help_line(left, opt, 27, False)
+ elif allow_arg(opt):
+ if opt["type"] == "combo" and "enabled" in opt["choices"]:
+ left = f"--enable-{key}[=CHOICE]"
+ else:
+ left = f"--enable-{key}=CHOICE"
+ help_line(left, opt, 27, True)
+
sh_print()
sh_print("Optional features, enabled with --enable-FEATURE and")
sh_print("disabled with --disable-FEATURE, default is enabled if available")
sh_print("(unless built with --without-default-features):")
sh_print()
+ for opt in options:
+ key = opt["name"].replace("_", "-")
+ if opt["type"] != "boolean" and not allow_arg(opt):
+ help_line(key, opt, 18, False)
print("}")
def print_parse(options):
print("_meson_option_parse() {")
print(" case $1 in")
+ for opt in options:
+ key = opt["name"].replace("_", "-")
+ name = opt["name"]
+ if opt["type"] == "boolean":
+ print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
+ print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
+ else:
+ if opt["type"] == "combo" and "enabled" in opt["choices"]:
+ print(f' --enable-{key}) printf "%s" -D{name}=enabled ;;')
+ if opt["type"] == "combo" and "disabled" in opt["choices"]:
+ print(f' --disable-{key}) printf "%s" -D{name}=disabled ;;')
+ if allow_arg(opt):
+ print(f' --enable-{key}=*) quote_sh "-D{name}=$2" ;;')
print(" *) return 1 ;;")
print(" esac")
print("}")
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 3be3058a6c..b81e99644f 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -1,12 +1,268 @@
meson_options_help() {
+ printf "%s\n" ' --enable-capstone[=CHOICE]'
+ printf "%s\n" ' Whether and how to find the capstone library'
+ 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" ' --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" ' --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-slirp[=CHOICE] Whether and how to find the slirp library'
+ printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
+ printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (experimental and'
+ printf "%s\n" ' slow)'
+ printf "%s\n" ' --enable-trace-backends=CHOICE'
+ printf "%s\n" ' Set available tracing backends [log]'
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'
printf "%s\n" '(unless built with --without-default-features):'
printf "%s\n" ''
+ printf "%s\n" ' alsa ALSA sound support'
+ printf "%s\n" ' attr attr/xattr support'
+ printf "%s\n" ' auth-pam PAM access control'
+ printf "%s\n" ' bpf eBPF support'
+ printf "%s\n" ' brlapi brlapi character device driver'
+ printf "%s\n" ' bzip2 bzip2 support for DMG images'
+ printf "%s\n" ' cap-ng cap_ng support'
+ printf "%s\n" ' cocoa Cocoa user interface (macOS only)'
+ printf "%s\n" ' coreaudio CoreAudio sound support'
+ printf "%s\n" ' curl CURL block device driver'
+ printf "%s\n" ' curses curses UI'
+ printf "%s\n" ' docs Documentations build support'
+ printf "%s\n" ' dsound DirectSound sound support'
+ printf "%s\n" ' fuse FUSE block device export'
+ 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" ' glusterfs Glusterfs block device driver'
+ printf "%s\n" ' gnutls GNUTLS cryptography support'
+ printf "%s\n" ' gtk GTK+ user interface'
+ printf "%s\n" ' guest-agent-msi Build MSI package for the QEMU Guest Agent'
+ printf "%s\n" ' hax HAX acceleration support'
+ 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" ' kvm KVM acceleration support'
+ printf "%s\n" ' libdaxctl libdaxctl support'
+ printf "%s\n" ' libiscsi libiscsi userspace initiator'
+ printf "%s\n" ' libnfs libnfs block device driver'
+ printf "%s\n" ' libpmem libpmem support'
+ printf "%s\n" ' libudev Use libudev to enumerate host devices'
+ printf "%s\n" ' libusb libusb support for USB passthrough'
+ printf "%s\n" ' libxml2 libxml2 support for Parallels image format'
+ printf "%s\n" ' linux-aio Linux AIO support'
+ printf "%s\n" ' linux-io-uring Linux io_uring support'
+ printf "%s\n" ' lzfse lzfse support for DMG images'
+ printf "%s\n" ' lzo lzo compression support'
+ printf "%s\n" ' malloc-trim enable libc malloc_trim() for memory optimization'
+ printf "%s\n" ' mpath Multipath persistent reservation passthrough'
+ printf "%s\n" ' multiprocess Out of process device emulation support'
+ printf "%s\n" ' netmap netmap network backend support'
+ printf "%s\n" ' nettle nettle cryptography support'
+ printf "%s\n" ' nvmm NVMM acceleration support'
+ printf "%s\n" ' oss OSS sound support'
+ printf "%s\n" ' pa PulseAudio sound support'
+ printf "%s\n" ' rbd Ceph block device driver'
+ printf "%s\n" ' sdl SDL user interface'
+ printf "%s\n" ' sdl-image SDL Image support for icons'
+ printf "%s\n" ' seccomp seccomp support'
+ printf "%s\n" ' smartcard CA smartcard emulation support'
+ printf "%s\n" ' snappy snappy compression support'
+ printf "%s\n" ' sparse sparse checker'
+ printf "%s\n" ' spice Spice server support'
+ printf "%s\n" ' spice-protocol Spice protocol support'
+ printf "%s\n" ' tcg TCG support'
+ printf "%s\n" ' u2f U2F emulation support'
+ printf "%s\n" ' usb-redir libusbredir support'
+ printf "%s\n" ' vde vde network backend support'
+ printf "%s\n" ' vhost-user-blk-server'
+ printf "%s\n" ' build vhost-user-blk server'
+ printf "%s\n" ' virglrenderer virgl rendering support'
+ printf "%s\n" ' virtfs virtio-9p support'
+ printf "%s\n" ' virtiofsd build virtiofs daemon (virtiofsd)'
+ printf "%s\n" ' vnc VNC server'
+ printf "%s\n" ' vnc-jpeg JPEG lossy compression for VNC server'
+ printf "%s\n" ' vnc-png PNG compression for VNC server'
+ printf "%s\n" ' vnc-sasl SASL authentication for VNC server'
+ printf "%s\n" ' vte vte support for the gtk UI'
+ printf "%s\n" ' whpx WHPX acceleration support'
+ printf "%s\n" ' xen Xen backend support'
+ printf "%s\n" ' xen-pci-passthrough'
+ printf "%s\n" ' Xen PCI passthrough support'
+ printf "%s\n" ' xkbcommon xkbcommon support'
+ printf "%s\n" ' zstd zstd compression support'
}
_meson_option_parse() {
case $1 in
+ --enable-alsa) printf "%s" -Dalsa=enabled ;;
+ --disable-alsa) printf "%s" -Dalsa=disabled ;;
+ --enable-attr) printf "%s" -Dattr=enabled ;;
+ --disable-attr) printf "%s" -Dattr=disabled ;;
+ --enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
+ --disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
+ --enable-bpf) printf "%s" -Dbpf=enabled ;;
+ --disable-bpf) printf "%s" -Dbpf=disabled ;;
+ --enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
+ --disable-brlapi) printf "%s" -Dbrlapi=disabled ;;
+ --enable-bzip2) printf "%s" -Dbzip2=enabled ;;
+ --disable-bzip2) printf "%s" -Dbzip2=disabled ;;
+ --enable-cap-ng) printf "%s" -Dcap_ng=enabled ;;
+ --disable-cap-ng) printf "%s" -Dcap_ng=disabled ;;
+ --enable-capstone) printf "%s" -Dcapstone=enabled ;;
+ --disable-capstone) printf "%s" -Dcapstone=disabled ;;
+ --enable-capstone=*) quote_sh "-Dcapstone=$2" ;;
+ --enable-cfi) printf "%s" -Dcfi=true ;;
+ --disable-cfi) printf "%s" -Dcfi=false ;;
+ --enable-cfi-debug) printf "%s" -Dcfi_debug=true ;;
+ --disable-cfi-debug) printf "%s" -Dcfi_debug=false ;;
+ --enable-cocoa) printf "%s" -Dcocoa=enabled ;;
+ --disable-cocoa) printf "%s" -Dcocoa=disabled ;;
+ --enable-coreaudio) printf "%s" -Dcoreaudio=enabled ;;
+ --disable-coreaudio) printf "%s" -Dcoreaudio=disabled ;;
+ --enable-curl) printf "%s" -Dcurl=enabled ;;
+ --disable-curl) printf "%s" -Dcurl=disabled ;;
+ --enable-curses) printf "%s" -Dcurses=enabled ;;
+ --disable-curses) printf "%s" -Dcurses=disabled ;;
+ --enable-docs) printf "%s" -Ddocs=enabled ;;
+ --disable-docs) printf "%s" -Ddocs=disabled ;;
+ --enable-dsound) printf "%s" -Ddsound=enabled ;;
+ --disable-dsound) printf "%s" -Ddsound=disabled ;;
+ --enable-fdt) printf "%s" -Dfdt=enabled ;;
+ --disable-fdt) printf "%s" -Dfdt=disabled ;;
+ --enable-fdt=*) quote_sh "-Dfdt=$2" ;;
+ --enable-fuse) printf "%s" -Dfuse=enabled ;;
+ --disable-fuse) printf "%s" -Dfuse=disabled ;;
+ --enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
+ --disable-fuse-lseek) printf "%s" -Dfuse_lseek=disabled ;;
+ --enable-fuzzing) printf "%s" -Dfuzzing=true ;;
+ --disable-fuzzing) printf "%s" -Dfuzzing=false ;;
+ --enable-gcrypt) printf "%s" -Dgcrypt=enabled ;;
+ --disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
+ --enable-gettext) printf "%s" -Dgettext=enabled ;;
+ --disable-gettext) printf "%s" -Dgettext=disabled ;;
+ --enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
+ --disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
+ --enable-gnutls) printf "%s" -Dgnutls=enabled ;;
+ --disable-gnutls) printf "%s" -Dgnutls=disabled ;;
+ --enable-gtk) printf "%s" -Dgtk=enabled ;;
+ --disable-gtk) printf "%s" -Dgtk=disabled ;;
+ --enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
+ --disable-guest-agent-msi) printf "%s" -Dguest_agent_msi=disabled ;;
+ --enable-hax) printf "%s" -Dhax=enabled ;;
+ --disable-hax) printf "%s" -Dhax=disabled ;;
+ --enable-hvf) printf "%s" -Dhvf=enabled ;;
+ --disable-hvf) printf "%s" -Dhvf=disabled ;;
+ --enable-iconv) printf "%s" -Diconv=enabled ;;
+ --disable-iconv) printf "%s" -Diconv=disabled ;;
+ --enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
+ --disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
+ --enable-jack) printf "%s" -Djack=enabled ;;
+ --disable-jack) printf "%s" -Djack=disabled ;;
+ --enable-kvm) printf "%s" -Dkvm=enabled ;;
+ --disable-kvm) printf "%s" -Dkvm=disabled ;;
+ --enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
+ --disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
+ --enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
+ --disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
+ --enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
+ --disable-libnfs) printf "%s" -Dlibnfs=disabled ;;
+ --enable-libpmem) printf "%s" -Dlibpmem=enabled ;;
+ --disable-libpmem) printf "%s" -Dlibpmem=disabled ;;
+ --enable-libudev) printf "%s" -Dlibudev=enabled ;;
+ --disable-libudev) printf "%s" -Dlibudev=disabled ;;
+ --enable-libusb) printf "%s" -Dlibusb=enabled ;;
+ --disable-libusb) printf "%s" -Dlibusb=disabled ;;
+ --enable-libxml2) printf "%s" -Dlibxml2=enabled ;;
+ --disable-libxml2) printf "%s" -Dlibxml2=disabled ;;
+ --enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;;
+ --disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;;
+ --enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;;
+ --disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
+ --enable-lzfse) printf "%s" -Dlzfse=enabled ;;
+ --disable-lzfse) printf "%s" -Dlzfse=disabled ;;
+ --enable-lzo) printf "%s" -Dlzo=enabled ;;
+ --disable-lzo) printf "%s" -Dlzo=disabled ;;
+ --enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
+ --enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
+ --disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
+ --enable-mpath) printf "%s" -Dmpath=enabled ;;
+ --disable-mpath) printf "%s" -Dmpath=disabled ;;
+ --enable-multiprocess) printf "%s" -Dmultiprocess=enabled ;;
+ --disable-multiprocess) printf "%s" -Dmultiprocess=disabled ;;
+ --enable-netmap) printf "%s" -Dnetmap=enabled ;;
+ --disable-netmap) printf "%s" -Dnetmap=disabled ;;
+ --enable-nettle) printf "%s" -Dnettle=enabled ;;
+ --disable-nettle) printf "%s" -Dnettle=disabled ;;
+ --enable-nvmm) printf "%s" -Dnvmm=enabled ;;
+ --disable-nvmm) printf "%s" -Dnvmm=disabled ;;
+ --enable-oss) printf "%s" -Doss=enabled ;;
+ --disable-oss) printf "%s" -Doss=disabled ;;
+ --enable-pa) printf "%s" -Dpa=enabled ;;
+ --disable-pa) printf "%s" -Dpa=disabled ;;
+ --enable-rbd) printf "%s" -Drbd=enabled ;;
+ --disable-rbd) printf "%s" -Drbd=disabled ;;
+ --enable-sdl) printf "%s" -Dsdl=enabled ;;
+ --disable-sdl) printf "%s" -Dsdl=disabled ;;
+ --enable-sdl-image) printf "%s" -Dsdl_image=enabled ;;
+ --disable-sdl-image) printf "%s" -Dsdl_image=disabled ;;
+ --enable-seccomp) printf "%s" -Dseccomp=enabled ;;
+ --disable-seccomp) printf "%s" -Dseccomp=disabled ;;
+ --enable-slirp) printf "%s" -Dslirp=enabled ;;
+ --disable-slirp) printf "%s" -Dslirp=disabled ;;
+ --enable-slirp=*) quote_sh "-Dslirp=$2" ;;
+ --enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
+ --disable-smartcard) printf "%s" -Dsmartcard=disabled ;;
+ --enable-snappy) printf "%s" -Dsnappy=enabled ;;
+ --disable-snappy) printf "%s" -Dsnappy=disabled ;;
+ --enable-sparse) printf "%s" -Dsparse=enabled ;;
+ --disable-sparse) printf "%s" -Dsparse=disabled ;;
+ --enable-spice) printf "%s" -Dspice=enabled ;;
+ --disable-spice) printf "%s" -Dspice=disabled ;;
+ --enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
+ --disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
+ --enable-tcg) printf "%s" -Dtcg=enabled ;;
+ --disable-tcg) printf "%s" -Dtcg=disabled ;;
+ --enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
+ --disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
+ --enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
+ --enable-u2f) printf "%s" -Du2f=enabled ;;
+ --disable-u2f) printf "%s" -Du2f=disabled ;;
+ --enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
+ --disable-usb-redir) printf "%s" -Dusb_redir=disabled ;;
+ --enable-vde) printf "%s" -Dvde=enabled ;;
+ --disable-vde) printf "%s" -Dvde=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-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
+ --disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
+ --enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
+ --disable-virtfs) printf "%s" -Dvirtfs=disabled ;;
+ --enable-virtiofsd) printf "%s" -Dvirtiofsd=enabled ;;
+ --disable-virtiofsd) printf "%s" -Dvirtiofsd=disabled ;;
+ --enable-vnc) printf "%s" -Dvnc=enabled ;;
+ --disable-vnc) printf "%s" -Dvnc=disabled ;;
+ --enable-vnc-jpeg) printf "%s" -Dvnc_jpeg=enabled ;;
+ --disable-vnc-jpeg) printf "%s" -Dvnc_jpeg=disabled ;;
+ --enable-vnc-png) printf "%s" -Dvnc_png=enabled ;;
+ --disable-vnc-png) printf "%s" -Dvnc_png=disabled ;;
+ --enable-vnc-sasl) printf "%s" -Dvnc_sasl=enabled ;;
+ --disable-vnc-sasl) printf "%s" -Dvnc_sasl=disabled ;;
+ --enable-vte) printf "%s" -Dvte=enabled ;;
+ --disable-vte) printf "%s" -Dvte=disabled ;;
+ --enable-whpx) printf "%s" -Dwhpx=enabled ;;
+ --disable-whpx) printf "%s" -Dwhpx=disabled ;;
+ --enable-xen) printf "%s" -Dxen=enabled ;;
+ --disable-xen) printf "%s" -Dxen=disabled ;;
+ --enable-xen-pci-passthrough) printf "%s" -Dxen_pci_passthrough=enabled ;;
+ --disable-xen-pci-passthrough) printf "%s" -Dxen_pci_passthrough=disabled ;;
+ --enable-xkbcommon) printf "%s" -Dxkbcommon=enabled ;;
+ --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
+ --enable-zstd) printf "%s" -Dzstd=enabled ;;
+ --disable-zstd) printf "%s" -Dzstd=disabled ;;
*) return 1 ;;
esac
}
--
2.31.1
^ permalink raw reply related [flat|nested] 60+ messages in thread
* Re: [PATCH 24/24] configure: automatically parse command line for meson -D options
2021-10-07 13:08 ` [PATCH 24/24] configure: automatically parse command line for meson -D options Paolo Bonzini
@ 2021-10-07 20:41 ` Marc-André Lureau
2021-10-08 8:43 ` Paolo Bonzini
0 siblings, 1 reply; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-07 20:41 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Thomas Huth, QEMU
[-- Attachment #1: Type: text/plain, Size: 58112 bytes --]
Hi
On Thu, Oct 7, 2021 at 5:28 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> Right now meson_options.txt lists about 90 options. Each option
> needs code in configure to parse it and pass the option down to Meson as
> a -D command-line argument; in addition the default must be duplicated
> between configure and meson_options.txt. This series tries to remove
> the code duplication by generating the case statement for those --enable
> and --disable options, as well as the corresponding help text.
>
> About 80% of the options can be handled completely by the new mechanism.
> Eight meson options are not of the --enable/--disable kind. Six more need
> to be parsed in configure for various reasons documented in the patch,
> but they still have their help automatically generated.
>
> The advantages are:
>
> - less code in configure
>
> - parsing and help is more consistent (for example --enable-blobs was
> not supported)
>
> - options are described entirely in one place, meson_options.txt.
> This make it more attractive to use Meson options instead of
> hand-crafted configure options and config-host.mak
>
> A few options change name: --enable-tcmalloc and --enable-jemalloc
> become --enable-malloc={tcmalloc,jemalloc}; --disable-blobs becomes
> --disable-install-blobs; --enable-trace-backend becomes
> --enable-trace-backends.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>
I have not investigated why, but this broke at least
--enable-trace-backend=log for me:
ERROR: unknown option --enable-trace-backend=log
---
> configure | 540 ++--------------------------------
> docs/devel/build-system.rst | 133 +++++----
> meson_options.txt | 8 +
> scripts/meson-buildoptions.py | 92 ++++++
> scripts/meson-buildoptions.sh | 256 ++++++++++++++++
> 5 files changed, 449 insertions(+), 580 deletions(-)
>
> diff --git a/configure b/configure
> index d979476e03..4e1dfbea14 100755
> --- a/configure
> +++ b/configure
> @@ -286,41 +286,8 @@ for opt do
> esac
> done
>
> -brlapi="auto"
> -curl="auto"
> -iconv="auto"
> -curses="auto"
> -docs="auto"
> -fdt="auto"
> -netmap="auto"
> -sdl="auto"
> -sdl_image="auto"
> -virtiofsd="auto"
> -virtfs="auto"
> -libudev="auto"
> -mpath="auto"
> -vnc="auto"
> -sparse="auto"
> -vde="auto"
> -vnc_sasl="auto"
> -vnc_jpeg="auto"
> -vnc_png="auto"
> -xkbcommon="auto"
> -alsa="auto"
> -coreaudio="auto"
> -dsound="auto"
> -jack="auto"
> -oss="auto"
> -pa="auto"
> -xen=${default_feature:+disabled}
> xen_ctrl_version="$default_feature"
> -xen_pci_passthrough="auto"
> -linux_aio="auto"
> -linux_io_uring="auto"
> -cap_ng="auto"
> -attr="auto"
> xfs="$default_feature"
> -tcg="enabled"
> membarrier="$default_feature"
> vhost_kernel="$default_feature"
> vhost_net="$default_feature"
> @@ -328,15 +295,8 @@ vhost_crypto="$default_feature"
> vhost_scsi="$default_feature"
> vhost_vsock="$default_feature"
> vhost_user="no"
> -vhost_user_blk_server="auto"
> vhost_user_fs="$default_feature"
> vhost_vdpa="$default_feature"
> -bpf="auto"
> -kvm="auto"
> -hax="auto"
> -hvf="auto"
> -whpx="auto"
> -nvmm="auto"
> rdma="$default_feature"
> pvrdma="$default_feature"
> gprof="no"
> @@ -346,7 +306,6 @@ sanitizers="no"
> tsan="no"
> fortify_source="$default_feature"
> strip_opt="yes"
> -tcg_interpreter="false"
> mingw32="no"
> gcov="no"
> EXESUF=""
> @@ -354,62 +313,32 @@ modules="no"
> module_upgrades="no"
> prefix="/usr/local"
> qemu_suffix="qemu"
> -slirp="auto"
> bsd="no"
> linux="no"
> solaris="no"
> profiler="no"
> -cocoa="auto"
> softmmu="yes"
> linux_user="no"
> bsd_user="no"
> -blobs="true"
> pkgversion=""
> pie=""
> qom_cast_debug="yes"
> trace_backends="log"
> trace_file="trace"
> -spice="auto"
> -spice_protocol="auto"
> -rbd="auto"
> -smartcard="auto"
> -u2f="auto"
> -libusb="auto"
> -usb_redir="auto"
> opengl="$default_feature"
> cpuid_h="no"
> avx2_opt="$default_feature"
> -capstone="auto"
> -lzo="auto"
> -snappy="auto"
> -bzip2="auto"
> -lzfse="auto"
> -zstd="auto"
> guest_agent="$default_feature"
> guest_agent_with_vss="no"
> guest_agent_ntddscsi="no"
> -guest_agent_msi="auto"
> vss_win32_sdk="$default_feature"
> win_sdk="no"
> want_tools="$default_feature"
> -libiscsi="auto"
> -libnfs="auto"
> coroutine=""
> coroutine_pool="$default_feature"
> debug_stack_usage="no"
> crypto_afalg="no"
> -cfi="false"
> -cfi_debug="false"
> -seccomp="auto"
> -glusterfs="auto"
> -gtk="auto"
> tls_priority="NORMAL"
> -gnutls="auto"
> -nettle="auto"
> -gcrypt="auto"
> -auth_pam="auto"
> -vte="auto"
> -virglrenderer="auto"
> tpm="$default_feature"
> libssh="$default_feature"
> live_block_migration=${default_feature:-yes}
> @@ -427,24 +356,34 @@ qed=${default_feature:-yes}
> parallels=${default_feature:-yes}
> libxml2="auto"
> debug_mutex="no"
> -libpmem="auto"
> -default_devices="true"
> plugins="$default_feature"
> -fuzzing="false"
> rng_none="no"
> secret_keyring="$default_feature"
> libdaxctl="auto"
> meson=""
> +meson_args=""
> ninja=""
> +gio="$default_feature"
> skip_meson=no
> -gettext="auto"
> -fuse="auto"
> -fuse_lseek="auto"
> -multiprocess="auto"
> slirp_smbd="$default_feature"
>
> -malloc_trim="auto"
> -gio="$default_feature"
> +# The following Meson options are handled manually (still they
> +# are included in the automatically generated help message)
> +
> +# 1. Track which submodules are needed
> +capstone="auto"
> +fdt="auto"
> +slirp="auto"
> +
> +# 2. Support --with/--without option
> +default_devices="true"
> +
> +# 3. Automatically enable/disable other options
> +tcg="enabled"
> +cfi="false"
> +
> +# 4. Detection partly done in configure
> +xen=${default_feature:+disabled}
>
> # parse CC options second
> for opt do
> @@ -874,11 +813,6 @@ for opt do
> error_exit "Can't mix --target-list-exclude with
> --target-list"
> fi
> ;;
> - --enable-trace-backends=*) trace_backends="$optarg"
> - ;;
> - # XXX: backwards compatibility
> - --enable-trace-backend=*) trace_backends="$optarg"
> - ;;
> --with-trace-file=*) trace_file="$optarg"
> ;;
> --with-default-devices) default_devices="true"
> @@ -941,42 +875,10 @@ for opt do
> # configure to be used by RPM and similar macros that set
> # lots of directory switches by default.
> ;;
> - --disable-sdl) sdl="disabled"
> - ;;
> - --enable-sdl) sdl="enabled"
> - ;;
> - --disable-sdl-image) sdl_image="disabled"
> - ;;
> - --enable-sdl-image) sdl_image="enabled"
> - ;;
> --disable-qom-cast-debug) qom_cast_debug="no"
> ;;
> --enable-qom-cast-debug) qom_cast_debug="yes"
> ;;
> - --disable-virtfs) virtfs="disabled"
> - ;;
> - --enable-virtfs) virtfs="enabled"
> - ;;
> - --disable-libudev) libudev="disabled"
> - ;;
> - --enable-libudev) libudev="enabled"
> - ;;
> - --disable-virtiofsd) virtiofsd="disabled"
> - ;;
> - --enable-virtiofsd) virtiofsd="enabled"
> - ;;
> - --disable-mpath) mpath="disabled"
> - ;;
> - --enable-mpath) mpath="enabled"
> - ;;
> - --disable-vnc) vnc="disabled"
> - ;;
> - --enable-vnc) vnc="enabled"
> - ;;
> - --disable-gettext) gettext="disabled"
> - ;;
> - --enable-gettext) gettext="enabled"
> - ;;
> --audio-drv-list=*) audio_drv_list="$optarg"
> ;;
> --block-drv-rw-whitelist=*|--block-drv-whitelist=*)
> block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
> @@ -1007,24 +909,8 @@ for opt do
> ;;
> --disable-tsan) tsan="no"
> ;;
> - --enable-sparse) sparse="enabled"
> - ;;
> - --disable-sparse) sparse="disabled"
> - ;;
> --disable-strip) strip_opt="no"
> ;;
> - --disable-vnc-sasl) vnc_sasl="disabled"
> - ;;
> - --enable-vnc-sasl) vnc_sasl="enabled"
> - ;;
> - --disable-vnc-jpeg) vnc_jpeg="disabled"
> - ;;
> - --enable-vnc-jpeg) vnc_jpeg="enabled"
> - ;;
> - --disable-vnc-png) vnc_png="disabled"
> - ;;
> - --enable-vnc-png) vnc_png="enabled"
> - ;;
> --disable-slirp) slirp="disabled"
> ;;
> --enable-slirp) slirp="enabled"
> @@ -1033,113 +919,17 @@ for opt do
> ;;
> --enable-slirp=*) slirp="$optarg"
> ;;
> - --disable-vde) vde="disabled"
> - ;;
> - --enable-vde) vde="enabled"
> - ;;
> - --disable-netmap) netmap="disabled"
> - ;;
> - --enable-netmap) netmap="enabled"
> - ;;
> --disable-xen) xen="disabled"
> ;;
> --enable-xen) xen="enabled"
> ;;
> - --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
> - ;;
> - --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
> - ;;
> - --disable-alsa) alsa="disabled"
> - ;;
> - --enable-alsa) alsa="enabled"
> - ;;
> - --disable-coreaudio) coreaudio="disabled"
> - ;;
> - --enable-coreaudio) coreaudio="enabled"
> - ;;
> - --disable-dsound) dsound="disabled"
> - ;;
> - --enable-dsound) dsound="enabled"
> - ;;
> - --disable-jack) jack="disabled"
> - ;;
> - --enable-jack) jack="enabled"
> - ;;
> - --disable-oss) oss="disabled"
> - ;;
> - --enable-oss) oss="enabled"
> - ;;
> - --disable-pa) pa="disabled"
> - ;;
> - --enable-pa) pa="enabled"
> - ;;
> - --disable-brlapi) brlapi="disabled"
> - ;;
> - --enable-brlapi) brlapi="enabled"
> - ;;
> - --disable-kvm) kvm="disabled"
> - ;;
> - --enable-kvm) kvm="enabled"
> - ;;
> - --disable-hax) hax="disabled"
> - ;;
> - --enable-hax) hax="enabled"
> - ;;
> - --disable-hvf) hvf="disabled"
> - ;;
> - --enable-hvf) hvf="enabled"
> - ;;
> - --disable-nvmm) nvmm="disabled"
> - ;;
> - --enable-nvmm) nvmm="enabled"
> - ;;
> - --disable-whpx) whpx="disabled"
> - ;;
> - --enable-whpx) whpx="enabled"
> - ;;
> - --disable-tcg-interpreter) tcg_interpreter="false"
> - ;;
> - --enable-tcg-interpreter) tcg_interpreter="true"
> - ;;
> - --disable-cap-ng) cap_ng="disabled"
> - ;;
> - --enable-cap-ng) cap_ng="enabled"
> - ;;
> --disable-tcg) tcg="disabled"
> plugins="no"
> ;;
> --enable-tcg) tcg="enabled"
> ;;
> - --disable-malloc-trim) malloc_trim="disabled"
> - ;;
> - --enable-malloc-trim) malloc_trim="enabled"
> - ;;
> - --disable-spice) spice="no"
> - ;;
> - --enable-spice)
> - spice_protocol="yes"
> - spice="yes"
> - ;;
> - --disable-spice-protocol)
> - spice_protocol="no"
> - spice="no"
> - ;;
> - --enable-spice-protocol) spice_protocol="yes"
> - ;;
> - --disable-libiscsi) libiscsi="disabled"
> - ;;
> - --enable-libiscsi) libiscsi="enabled"
> - ;;
> - --disable-libnfs) libnfs="disabled"
> - ;;
> - --enable-libnfs) libnfs="enabled"
> - ;;
> --enable-profiler) profiler="yes"
> ;;
> - --disable-cocoa) cocoa="disabled"
> - ;;
> - --enable-cocoa) cocoa="enabled"
> - ;;
> --disable-system) softmmu="no"
> ;;
> --enable-system) softmmu="yes"
> @@ -1183,22 +973,6 @@ for opt do
> ;;
> --disable-cfi) cfi="false"
> ;;
> - --enable-cfi-debug) cfi_debug="true"
> - ;;
> - --disable-cfi-debug) cfi_debug="false"
> - ;;
> - --disable-curses) curses="disabled"
> - ;;
> - --enable-curses) curses="enabled"
> - ;;
> - --disable-iconv) iconv="disabled"
> - ;;
> - --enable-iconv) iconv="enabled"
> - ;;
> - --disable-curl) curl="disabled"
> - ;;
> - --enable-curl) curl="enabled"
> - ;;
> --disable-fdt) fdt="disabled"
> ;;
> --enable-fdt) fdt="enabled"
> @@ -1207,28 +981,10 @@ for opt do
> ;;
> --enable-fdt=*) fdt="$optarg"
> ;;
> - --disable-linux-aio) linux_aio="disabled"
> - ;;
> - --enable-linux-aio) linux_aio="enabled"
> - ;;
> - --disable-linux-io-uring) linux_io_uring="disabled"
> - ;;
> - --enable-linux-io-uring) linux_io_uring="enabled"
> - ;;
> - --disable-attr) attr="disabled"
> - ;;
> - --enable-attr) attr="enabled"
> - ;;
> --disable-membarrier) membarrier="no"
> ;;
> --enable-membarrier) membarrier="yes"
> ;;
> - --disable-bpf) bpf="disabled"
> - ;;
> - --enable-bpf) bpf="enabled"
> - ;;
> - --disable-blobs) blobs="false"
> - ;;
> --with-pkgversion=*) pkgversion="$optarg"
> ;;
> --with-coroutine=*) coroutine="$optarg"
> @@ -1243,10 +999,6 @@ for opt do
> ;;
> --disable-crypto-afalg) crypto_afalg="no"
> ;;
> - --disable-docs) docs="disabled"
> - ;;
> - --enable-docs) docs="enabled"
> - ;;
> --disable-vhost-net) vhost_net="no"
> ;;
> --enable-vhost-net) vhost_net="yes"
> @@ -1263,10 +1015,6 @@ for opt do
> ;;
> --enable-vhost-vsock) vhost_vsock="yes"
> ;;
> - --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
> - ;;
> - --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
> - ;;
> --disable-vhost-user-fs) vhost_user_fs="no"
> ;;
> --enable-vhost-user-fs) vhost_user_fs="yes"
> @@ -1275,60 +1023,16 @@ for opt do
> ;;
> --enable-opengl) opengl="yes"
> ;;
> - --disable-rbd) rbd="disabled"
> - ;;
> - --enable-rbd) rbd="enabled"
> - ;;
> --disable-xfsctl) xfs="no"
> ;;
> --enable-xfsctl) xfs="yes"
> ;;
> - --disable-smartcard) smartcard="disabled"
> - ;;
> - --enable-smartcard) smartcard="enabled"
> - ;;
> - --disable-u2f) u2f="disabled"
> - ;;
> - --enable-u2f) u2f="enabled"
> - ;;
> - --disable-libusb) libusb="disabled"
> - ;;
> - --enable-libusb) libusb="enabled"
> - ;;
> - --disable-usb-redir) usb_redir="disabled"
> - ;;
> - --enable-usb-redir) usb_redir="enabled"
> - ;;
> --disable-zlib-test)
> ;;
> - --disable-lzo) lzo="disabled"
> - ;;
> - --enable-lzo) lzo="enabled"
> - ;;
> - --disable-snappy) snappy="disabled"
> - ;;
> - --enable-snappy) snappy="enabled"
> - ;;
> - --disable-bzip2) bzip2="disabled"
> - ;;
> - --enable-bzip2) bzip2="enabled"
> - ;;
> - --enable-lzfse) lzfse="enabled"
> - ;;
> - --disable-lzfse) lzfse="disabled"
> - ;;
> - --disable-zstd) zstd="disabled"
> - ;;
> - --enable-zstd) zstd="enabled"
> - ;;
> --enable-guest-agent) guest_agent="yes"
> ;;
> --disable-guest-agent) guest_agent="no"
> ;;
> - --enable-guest-agent-msi) guest_agent_msi="enabled"
> - ;;
> - --disable-guest-agent-msi) guest_agent_msi="disabled"
> - ;;
> --with-vss-sdk) vss_win32_sdk=""
> ;;
> --with-vss-sdk=*) vss_win32_sdk="$optarg"
> @@ -1345,12 +1049,6 @@ for opt do
> ;;
> --disable-tools) want_tools="no"
> ;;
> - --enable-seccomp) seccomp="enabled"
> - ;;
> - --disable-seccomp) seccomp="disabled"
> - ;;
> - --disable-glusterfs) glusterfs="disabled"
> - ;;
> --disable-avx2) avx2_opt="no"
> ;;
> --enable-avx2) avx2_opt="yes"
> @@ -1359,9 +1057,6 @@ for opt do
> ;;
> --enable-avx512f) avx512f_opt="yes"
> ;;
> -
> - --enable-glusterfs) glusterfs="enabled"
> - ;;
> --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
> echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
> ;;
> @@ -1371,28 +1066,8 @@ for opt do
> --enable-uuid|--disable-uuid)
> echo "$0: $opt is obsolete, UUID support is always built" >&2
> ;;
> - --disable-gtk) gtk="disabled"
> - ;;
> - --enable-gtk) gtk="enabled"
> - ;;
> --tls-priority=*) tls_priority="$optarg"
> ;;
> - --disable-gnutls) gnutls="disabled"
> - ;;
> - --enable-gnutls) gnutls="enabled"
> - ;;
> - --disable-nettle) nettle="disabled"
> - ;;
> - --enable-nettle) nettle="enabled"
> - ;;
> - --disable-gcrypt) gcrypt="disabled"
> - ;;
> - --enable-gcrypt) gcrypt="enabled"
> - ;;
> - --disable-auth-pam) auth_pam="disabled"
> - ;;
> - --enable-auth-pam) auth_pam="enabled"
> - ;;
> --enable-rdma) rdma="yes"
> ;;
> --disable-rdma) rdma="no"
> @@ -1401,14 +1076,6 @@ for opt do
> ;;
> --disable-pvrdma) pvrdma="no"
> ;;
> - --disable-vte) vte="disabled"
> - ;;
> - --enable-vte) vte="enabled"
> - ;;
> - --disable-virglrenderer) virglrenderer="disabled"
> - ;;
> - --enable-virglrenderer) virglrenderer="enabled"
> - ;;
> --disable-tpm) tpm="no"
> ;;
> --enable-tpm) tpm="yes"
> @@ -1425,18 +1092,6 @@ for opt do
> ;;
> --enable-numa) numa="yes"
> ;;
> - --disable-libxml2) libxml2="disabled"
> - ;;
> - --enable-libxml2) libxml2="enabled"
> - ;;
> - --disable-tcmalloc) tcmalloc="no"
> - ;;
> - --enable-tcmalloc) tcmalloc="yes"
> - ;;
> - --disable-jemalloc) jemalloc="no"
> - ;;
> - --enable-jemalloc) jemalloc="yes"
> - ;;
> --disable-replication) replication="no"
> ;;
> --enable-replication) replication="yes"
> @@ -1502,14 +1157,6 @@ for opt do
> ;;
> --disable-debug-mutex) debug_mutex=no
> ;;
> - --enable-libpmem) libpmem="enabled"
> - ;;
> - --disable-libpmem) libpmem="disabled"
> - ;;
> - --enable-xkbcommon) xkbcommon="enabled"
> - ;;
> - --disable-xkbcommon) xkbcommon="disabled"
> - ;;
> --enable-plugins) if test "$mingw32" = "yes"; then
> error_exit "TCG plugins not currently supported
> on Windows platforms"
> else
> @@ -1522,10 +1169,6 @@ for opt do
> ;;
> --disable-containers) use_containers="no"
> ;;
> - --enable-fuzzing) fuzzing=true
> - ;;
> - --disable-fuzzing) fuzzing=false
> - ;;
> --gdb=*) gdb_bin="$optarg"
> ;;
> --enable-rng-none) rng_none=yes
> @@ -1536,22 +1179,6 @@ for opt do
> ;;
> --disable-keyring) secret_keyring="no"
> ;;
> - --enable-libdaxctl) libdaxctl="enabled"
> - ;;
> - --disable-libdaxctl) libdaxctl="disabled"
> - ;;
> - --enable-fuse) fuse="enabled"
> - ;;
> - --disable-fuse) fuse="disabled"
> - ;;
> - --enable-fuse-lseek) fuse_lseek="enabled"
> - ;;
> - --disable-fuse-lseek) fuse_lseek="disabled"
> - ;;
> - --enable-multiprocess) multiprocess="enabled"
> - ;;
> - --disable-multiprocess) multiprocess="disabled"
> - ;;
> --enable-gio) gio=yes
> ;;
> --disable-gio) gio=no
> @@ -1714,9 +1341,6 @@ for config in $mak_wilds; do
> fi
> done
>
> -# Enumerate public trace backends for --help output
> -trace_backend_list=$(echo $(grep -le '^PUBLIC = True$'
> "$source_path"/scripts/tracetool/backend/*.py | sed -e
> 's/^.*\/\(.*\)\.py$/\1/'))
> -
> if test x"$show_help" = x"yes" ; then
> cat << EOF
>
> @@ -1793,18 +1417,12 @@ Advanced options (experts only):
> (by default affects only QEMU, not tools like
> qemu-img)
> --enable-block-drv-whitelist-in-tools
> use block whitelist also in tools instead of
> only QEMU
> - --enable-trace-backends=B Set trace backend
> - Available backends: $trace_backend_list
> --with-trace-file=NAME Full PATH,NAME of file to store traces
> Default:trace-<pid>
> - --disable-slirp disable SLIRP userspace network connectivity
> - --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter,
> experimental and slow)
> - --enable-malloc-trim enable libc malloc_trim() for memory
> optimization
> --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
> - --disable-blobs disable installing provided firmware blobs
> --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
> --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS
> .tlb)
> --tls-priority default TLS protocol/cipher priority string
> @@ -1823,9 +1441,7 @@ cat << EOF
> user supported user emulation targets
> linux-user all linux usermode emulation targets
> bsd-user all BSD usermode emulation targets
> - docs build documentation
> guest-agent build the QEMU Guest Agent
> - guest-agent-msi build guest agent Windows MSI installation package
> pie Position Independent Executables
> modules modules support (non-Windows)
> module-upgrades try to load modules from alternate paths for upgrades
> @@ -1835,98 +1451,26 @@ cat << EOF
> sparse sparse checker
> safe-stack SafeStack Stack Smash Protection. Depends on
> clang/llvm >= 3.7 and requires coroutine backend
> ucontext.
> - cfi Enable Control-Flow Integrity for indirect function
> calls.
> - In case of a cfi violation, QEMU is terminated with
> SIGILL
> - Depends on lto and is incompatible with modules
> - Automatically enables Link-Time Optimization (lto)
> - cfi-debug In case of a cfi violation, a message containing the
> line that
> - triggered the error is written to stderr. After the
> error,
> - QEMU is still terminated with SIGILL
> - gnutls GNUTLS cryptography support
> - nettle nettle cryptography support
> - gcrypt libgcrypt cryptography support
> - auth-pam PAM access control
> - sdl SDL UI
> - sdl-image SDL Image support for icons
> - gtk gtk UI
> - vte vte support for the gtk UI
> - curses curses UI
> - iconv font glyph conversion support
> - vnc VNC UI support
> - vnc-sasl SASL encryption for VNC server
> - vnc-jpeg JPEG lossy compression for VNC server
> - vnc-png PNG compression for VNC server
> - cocoa Cocoa UI (Mac OS X only)
> - virtfs VirtFS
> - virtiofsd build virtiofs daemon (virtiofsd)
> - libudev Use libudev to enumerate host devices
> - mpath Multipath persistent reservation passthrough
> - xen xen backend driver support
> - xen-pci-passthrough PCI passthrough support for Xen
> - alsa ALSA sound support
> - coreaudio CoreAudio sound support
> - dsound DirectSound sound support
> - jack JACK sound support
> - oss OSS sound support
> - pa PulseAudio sound support
> - brlapi BrlAPI (Braile)
> - curl curl connectivity
> membarrier membarrier system call (for Linux 4.14+ or Windows)
> - fdt fdt device tree
> - kvm KVM acceleration support
> - hax HAX acceleration support
> - hvf Hypervisor.framework acceleration support
> - nvmm NVMM acceleration support
> - whpx Windows Hypervisor Platform acceleration support
> rdma Enable RDMA-based migration
> pvrdma Enable PVRDMA support
> - vde support for vde network
> - netmap support for netmap network
> - linux-aio Linux AIO support
> - linux-io-uring Linux io_uring support
> - cap-ng libcap-ng support
> - attr attr and xattr support
> 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
> vhost-user vhost-user backend support
> - vhost-user-blk-server vhost-user-blk server support
> vhost-vdpa vhost-vdpa kernel backend support
> - bpf BPF kernel support
> - spice spice
> - spice-protocol spice-protocol
> - rbd rados block device (rbd)
> - libiscsi iscsi support
> - libnfs nfs support
> - smartcard smartcard support (libcacard)
> - u2f U2F support (u2f-emu)
> - libusb libusb (for usb passthrough)
> live-block-migration Block migration in the main migration stream
> - usb-redir usb network redirection support
> - lzo support of lzo compression library
> - snappy support of snappy compression library
> - bzip2 support of bzip2 compression library
> - (for reading bzip2-compressed dmg images)
> - lzfse support of lzfse compression library
> - (for reading lzfse-compressed dmg images)
> - zstd support for zstd compression library
> - (for migration compression and qcow2 cluster
> compression)
> - seccomp seccomp support
> coroutine-pool coroutine freelist (better performance)
> - glusterfs GlusterFS backend
> tpm TPM support
> libssh ssh block device support
> numa libnuma support
> libxml2 for Parallels image format
> - tcmalloc tcmalloc support
> - jemalloc jemalloc support
> avx2 AVX2 optimization support
> avx512f AVX512F optimization support
> replication replication support
> opengl opengl support
> - virglrenderer virgl rendering support
> xfsctl xfsctl support
> qom-cast-debug cast debugging support
> tools build qemu-io, qemu-nbd and qemu-img tools
> @@ -1939,15 +1483,8 @@ cat << EOF
> qed qed image format support
> parallels parallels image format support
> crypto-afalg Linux AF_ALG crypto backend driver
> - capstone capstone disassembler support
> debug-mutex mutex debugging support
> - libpmem libpmem support
> - xkbcommon xkbcommon support
> rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
> - libdaxctl libdaxctl support
> - fuse FUSE block device export
> - fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
> - multiprocess Out of process device emulation support
> gio libgio support
> slirp-smbd use smbd (at path --smbd=*) in slirp networking
>
> @@ -3171,16 +2708,6 @@ EOF
> fi
> fi
>
> -malloc=system
> -if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
> - echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
> - exit 1
> -elif test "$tcmalloc" = "yes" ; then
> - malloc=tcmalloc
> -elif test "$jemalloc" = "yes" ; then
> - malloc=jemalloc
> -fi
> -
> # check for usbfs
> have_usbfs=no
> if test "$linux_user" = "yes"; then
> @@ -4511,40 +4038,23 @@ 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" \
> -Dqemu_firmwarepath="$firmwarepath" \
> -Dqemu_suffix="$qemu_suffix" \
> + -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) \
> -Dstrip=$(if test "$strip_opt" = 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 -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing
> \
> + -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
> + -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
> $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo
> "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
> - -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
> - -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
> - -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
> - -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl
> -Dsdl_image=$sdl_image \
> - -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir
> -Dvte=$vte \
> - -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg
> -Dvnc_png=$vnc_png \
> - -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f
> -Dvirtiofsd=$virtiofsd \
> - -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
> - -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2
> -Dlibiscsi=$libiscsi \
> - -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses
> -Dlibudev=$libudev\
> - -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse
> -Dlibxml2=$libxml2 \
> - -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem
> -Dlinux_io_uring=$linux_io_uring \
> - -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt
> -Dauth_pam=$auth_pam \
> - -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng
> \
> - -Dattr=$attr -Ddefault_devices=$default_devices
> -Dvirglrenderer=$virglrenderer \
> - -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
> - -Dvhost_user_blk_server=$vhost_user_blk_server
> -Dmultiprocess=$multiprocess \
> - -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek
> -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
> $(if test "$default_feature" = no; then echo
> "-Dauto_features=disabled"; fi) \
> - -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack
> -Doss=$oss \
> - -Dpa=$pa -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> - -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file
> -Dlinux_aio=$linux_aio \
> - -Dnetmap=$netmap -Dvde=$vde \
> "$@" $cross_arg "$PWD" "$source_path"
> }
> eval run_meson $meson_options
> diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst
> index 0f636d620e..b79012b965 100644
> --- a/docs/devel/build-system.rst
> +++ b/docs/devel/build-system.rst
> @@ -42,73 +42,21 @@ perform a build:
> ../configure
> make
>
> -For now, checks on the compilation environment are found in configure
> -rather than meson.build, though this is expected to change. The command
> -line is parsed in the configure script and, whenever needed, converted
> -into the appropriate options to Meson.
> -
> -New checks should be added to Meson, which usually comprises the
> -following tasks:
> -
> - - Add a Meson build option to meson_options.txt.
> -
> - - Add support to the command line arg parser to handle any new
> - ``--enable-XXX``/``--disable-XXX`` flags required by the feature.
> -
> - - Add information to the help output message to report on the new
> - feature flag.
> -
> - - Add code to perform the actual feature check.
> -
> - - Add code to include the feature status in ``config-host.h``
> -
> - - Add code to print out the feature status in the configure summary
> - upon completion.
> -
> -
> -Taking the probe for SDL2_Image as an example, we have the following
> pieces
> -in configure::
> -
> - # Initial variable state
> - sdl_image=auto
> -
> - ..snip..
> -
> - # Configure flag processing
> - --disable-sdl-image) sdl_image=disabled
> - ;;
> - --enable-sdl-image) sdl_image=enabled
> - ;;
> -
> - ..snip..
> -
> - # Help output feature message
> - sdl-image SDL Image support for icons
> -
> - ..snip..
> -
> - # Meson invocation
> - -Dsdl_image=$sdl_image
> -
> -In meson_options.txt::
> -
> - option('sdl', type : 'feature', value : 'auto',
> - description: 'SDL Image support for icons')
> -
> -In meson.build::
> -
> - # Detect dependency
> - sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
> - method: 'pkg-config',
> - kwargs: static_kwargs)
> -
> - # Create config-host.h (if applicable)
> - config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
> -
> - # Summary
> - summary_info += {'SDL image support': sdl_image.found()}
> +The configure script automatically recognizes
> +command line options for which a same-named Meson option exists;
> +dashes in the command line are replaced with underscores.
>
> +Many checks on the compilation environment are still found in configure
> +rather than `meson.build`, but new checks should be added directly to
> +`meson.build`.
>
> +Patches are also welcome to move existing checks from the configure
> +phase to `meson.build`. When doing so, ensure that `meson.build` does
> +not use anymore the keys that you have removed from `config-host.mak`.
> +Typically these will be replaced in `meson.build` by boolean variables,
> +``get_option('optname')`` invocations, or `dep.found()` expressions.
> +In general, the remaining checks have little or no interdependencies,
> +so they can be moved one by one.
>
> Helper functions
> ----------------
> @@ -335,6 +283,61 @@ new target, or enabling new devices or hardware for a
> particular
> system/userspace emulation target
>
>
> +Adding checks
> +-------------
> +
> +New checks should be added to Meson. Compiler checks can be as simple as
> +the following::
> +
> + config_host_data.set('HAVE_BTRFS_H', cc.has_header('linux/btrfs.h'))
> +
> +A more complex task such as adding a new dependency usually
> +comprises the following tasks:
> +
> + - Add a Meson build option to meson_options.txt.
> +
> + - Add code to perform the actual feature check.
> +
> + - Add code to include the feature status in `config-host.h`
> +
> + - Add code to print out the feature status in the configure summary
> + upon completion.
> +
> +Taking the probe for SDL2_Image as an example, we have the following
> +in ``meson_options.txt``::
> +
> + option('sdl_image', type : 'feature', value : 'auto',
> + description: 'SDL Image support for icons')
> +
> +Unless the option was given a non-``auto`` value (on the configure
> +command line), the detection code must be performed only if the
> +dependency will be used::
> +
> + sdl_image = not_found
> + if not get_option('sdl_image').auto() or have_system
> + sdl_image = dependency('SDL2_image', required:
> get_option('sdl_image'),
> + method: 'pkg-config',
> + static: enable_static)
> + endif
> +
> +This avoids warnings on static builds of user-mode emulators, for example.
> +Most of the libraries used by system-mode emulators are not available for
> +static linking.
> +
> +The other supporting code is generally simple::
> +
> + # Create config-host.h (if applicable)
> + config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
> +
> + # Summary
> + summary_info += {'SDL image support': sdl_image.found()}
> +
> +For the configure script to parse the new option, the
> +``scripts/meson-buildoptions.sh`` file must be up-to-date; ``make
> +For the configure script to parse the new option, the
> ``meson-buildoptions.json``
> +update-buildoptions`` (or just `make`) will take care of updating it.
> +
> +
> Support scripts
> ---------------
>
> diff --git a/meson_options.txt b/meson_options.txt
> index 5a140af7f7..4ab4570125 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -1,3 +1,7 @@
> +# These options do not correspond to a --enable/--disable-* option
> +# on the configure script command line. If you add more, list them in
> +# scripts/meson-buildoptions.py's SKIP_OPTIONS constant too.
> +
> option('qemu_suffix', type : 'string', value: 'qemu',
> description: 'Suffix for QEMU data/modules/config directories (can
> be empty)')
> option('docdir', type : 'string', value : 'doc',
> @@ -16,6 +20,10 @@ option('fuzzing_engine', type : 'string', value : '',
> option('trace_file', type: 'string', value: 'trace',
> description: 'Trace file prefix for simple backend')
>
> +# Everything else can be set via --enable/--disable-* option
> +# on the configure script command line. After adding an option
> +# here make sure to run "make update-buildoptions".
> +
> option('docs', type : 'feature', value : 'auto',
> description: 'Documentations build support')
> option('fuzzing', type : 'boolean', value: false,
> diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
> index 8948c296b7..9132e86efb 100755
> --- a/scripts/meson-buildoptions.py
> +++ b/scripts/meson-buildoptions.py
> @@ -25,10 +25,71 @@
> import shlex
> import sys
>
> +SKIP_OPTIONS = {
> + "audio_drv_list",
> + "default_devices",
> + "docdir",
> + "fuzzing_engine",
> + "qemu_firmwarepath",
> + "qemu_suffix",
> + "sphinx_build",
> + "trace_file",
> +}
> +
> +LINE_WIDTH = 76
> +
> +# Convert the default value of an option to the string used in
> +# the help message
> +def value_to_help(value):
> + if isinstance(value, list):
> + return ",".join(value)
> + if isinstance(value, bool):
> + return "enabled" if value else "disabled"
> + return str(value)
> +
> +
> +def wrap(left, text, indent):
> + length = LINE_WIDTH - indent
> + if len(left) >= indent:
> + yield left
> + yield from wrap("", text, indent)
> + else:
> + spaces = " " * indent
> + left = (left + spaces)[0:indent]
> + yield from textwrap.wrap(
> + text, width=LINE_WIDTH, initial_indent=left,
> subsequent_indent=spaces
> + )
> +
> +
> def sh_print(line=""):
> print(' printf "%s\\n"', shlex.quote(line))
>
>
> +def help_line(left, opt, indent, long):
> + right = f"{opt['description']}"
> + if long:
> + value = value_to_help(opt["value"])
> + if value != "auto":
> + right += f" [{value}]"
> + if "choices" in opt and long:
> + choices = "/".join(sorted(opt["choices"]))
> + right += f" (choices: {choices})"
> + for x in wrap(" " + left, right, indent):
> + sh_print(x)
> +
> +
> +# Return whether the option (a dictionary) can be used with
> +# arguments. Booleans can never be used with arguments;
> +# combos allow an argument only if they accept other values
> +# than "auto", "enabled", and "disabled".
> +def allow_arg(opt):
> + if opt["type"] == "boolean":
> + return False
> + if opt["type"] != "combo":
> + return True
> + return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
> +
> +
> def load_options(json):
> json = [
> x
> @@ -42,17 +103,48 @@ def load_options(json):
>
> def print_help(options):
> print("meson_options_help() {")
> + for opt in options:
> + key = opt["name"].replace("_", "-")
> + # 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}"
> + help_line(left, opt, 27, False)
> + elif allow_arg(opt):
> + if opt["type"] == "combo" and "enabled" in opt["choices"]:
> + left = f"--enable-{key}[=CHOICE]"
> + else:
> + left = f"--enable-{key}=CHOICE"
> + help_line(left, opt, 27, True)
> +
> sh_print()
> sh_print("Optional features, enabled with --enable-FEATURE and")
> sh_print("disabled with --disable-FEATURE, default is enabled if
> available")
> sh_print("(unless built with --without-default-features):")
> sh_print()
> + for opt in options:
> + key = opt["name"].replace("_", "-")
> + if opt["type"] != "boolean" and not allow_arg(opt):
> + help_line(key, opt, 18, False)
> print("}")
>
>
> def print_parse(options):
> print("_meson_option_parse() {")
> print(" case $1 in")
> + for opt in options:
> + key = opt["name"].replace("_", "-")
> + name = opt["name"]
> + if opt["type"] == "boolean":
> + print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
> + print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
> + else:
> + if opt["type"] == "combo" and "enabled" in opt["choices"]:
> + print(f' --enable-{key}) printf "%s" -D{name}=enabled
> ;;')
> + if opt["type"] == "combo" and "disabled" in opt["choices"]:
> + print(f' --disable-{key}) printf "%s"
> -D{name}=disabled ;;')
> + if allow_arg(opt):
> + print(f' --enable-{key}=*) quote_sh "-D{name}=$2" ;;')
> print(" *) return 1 ;;")
> print(" esac")
> print("}")
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 3be3058a6c..b81e99644f 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -1,12 +1,268 @@
> meson_options_help() {
> + printf "%s\n" ' --enable-capstone[=CHOICE]'
> + printf "%s\n" ' Whether and how to find the
> capstone library'
> + 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" ' --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" ' --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-slirp[=CHOICE] Whether and how to find the
> slirp library'
> + printf "%s\n" ' (choices:
> auto/disabled/enabled/internal/system)'
> + printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter
> (experimental and'
> + printf "%s\n" ' slow)'
> + printf "%s\n" ' --enable-trace-backends=CHOICE'
> + printf "%s\n" ' Set available tracing
> backends [log]'
> 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'
> printf "%s\n" '(unless built with --without-default-features):'
> printf "%s\n" ''
> + printf "%s\n" ' alsa ALSA sound support'
> + printf "%s\n" ' attr attr/xattr support'
> + printf "%s\n" ' auth-pam PAM access control'
> + printf "%s\n" ' bpf eBPF support'
> + printf "%s\n" ' brlapi brlapi character device driver'
> + printf "%s\n" ' bzip2 bzip2 support for DMG images'
> + printf "%s\n" ' cap-ng cap_ng support'
> + printf "%s\n" ' cocoa Cocoa user interface (macOS only)'
> + printf "%s\n" ' coreaudio CoreAudio sound support'
> + printf "%s\n" ' curl CURL block device driver'
> + printf "%s\n" ' curses curses UI'
> + printf "%s\n" ' docs Documentations build support'
> + printf "%s\n" ' dsound DirectSound sound support'
> + printf "%s\n" ' fuse FUSE block device export'
> + 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" ' glusterfs Glusterfs block device driver'
> + printf "%s\n" ' gnutls GNUTLS cryptography support'
> + printf "%s\n" ' gtk GTK+ user interface'
> + printf "%s\n" ' guest-agent-msi Build MSI package for the QEMU Guest
> Agent'
> + printf "%s\n" ' hax HAX acceleration support'
> + 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" ' kvm KVM acceleration support'
> + printf "%s\n" ' libdaxctl libdaxctl support'
> + printf "%s\n" ' libiscsi libiscsi userspace initiator'
> + printf "%s\n" ' libnfs libnfs block device driver'
> + printf "%s\n" ' libpmem libpmem support'
> + printf "%s\n" ' libudev Use libudev to enumerate host devices'
> + printf "%s\n" ' libusb libusb support for USB passthrough'
> + printf "%s\n" ' libxml2 libxml2 support for Parallels image
> format'
> + printf "%s\n" ' linux-aio Linux AIO support'
> + printf "%s\n" ' linux-io-uring Linux io_uring support'
> + printf "%s\n" ' lzfse lzfse support for DMG images'
> + printf "%s\n" ' lzo lzo compression support'
> + printf "%s\n" ' malloc-trim enable libc malloc_trim() for memory
> optimization'
> + printf "%s\n" ' mpath Multipath persistent reservation
> passthrough'
> + printf "%s\n" ' multiprocess Out of process device emulation
> support'
> + printf "%s\n" ' netmap netmap network backend support'
> + printf "%s\n" ' nettle nettle cryptography support'
> + printf "%s\n" ' nvmm NVMM acceleration support'
> + printf "%s\n" ' oss OSS sound support'
> + printf "%s\n" ' pa PulseAudio sound support'
> + printf "%s\n" ' rbd Ceph block device driver'
> + printf "%s\n" ' sdl SDL user interface'
> + printf "%s\n" ' sdl-image SDL Image support for icons'
> + printf "%s\n" ' seccomp seccomp support'
> + printf "%s\n" ' smartcard CA smartcard emulation support'
> + printf "%s\n" ' snappy snappy compression support'
> + printf "%s\n" ' sparse sparse checker'
> + printf "%s\n" ' spice Spice server support'
> + printf "%s\n" ' spice-protocol Spice protocol support'
> + printf "%s\n" ' tcg TCG support'
> + printf "%s\n" ' u2f U2F emulation support'
> + printf "%s\n" ' usb-redir libusbredir support'
> + printf "%s\n" ' vde vde network backend support'
> + printf "%s\n" ' vhost-user-blk-server'
> + printf "%s\n" ' build vhost-user-blk server'
> + printf "%s\n" ' virglrenderer virgl rendering support'
> + printf "%s\n" ' virtfs virtio-9p support'
> + printf "%s\n" ' virtiofsd build virtiofs daemon (virtiofsd)'
> + printf "%s\n" ' vnc VNC server'
> + printf "%s\n" ' vnc-jpeg JPEG lossy compression for VNC server'
> + printf "%s\n" ' vnc-png PNG compression for VNC server'
> + printf "%s\n" ' vnc-sasl SASL authentication for VNC server'
> + printf "%s\n" ' vte vte support for the gtk UI'
> + printf "%s\n" ' whpx WHPX acceleration support'
> + printf "%s\n" ' xen Xen backend support'
> + printf "%s\n" ' xen-pci-passthrough'
> + printf "%s\n" ' Xen PCI passthrough support'
> + printf "%s\n" ' xkbcommon xkbcommon support'
> + printf "%s\n" ' zstd zstd compression support'
> }
> _meson_option_parse() {
> case $1 in
> + --enable-alsa) printf "%s" -Dalsa=enabled ;;
> + --disable-alsa) printf "%s" -Dalsa=disabled ;;
> + --enable-attr) printf "%s" -Dattr=enabled ;;
> + --disable-attr) printf "%s" -Dattr=disabled ;;
> + --enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
> + --disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
> + --enable-bpf) printf "%s" -Dbpf=enabled ;;
> + --disable-bpf) printf "%s" -Dbpf=disabled ;;
> + --enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
> + --disable-brlapi) printf "%s" -Dbrlapi=disabled ;;
> + --enable-bzip2) printf "%s" -Dbzip2=enabled ;;
> + --disable-bzip2) printf "%s" -Dbzip2=disabled ;;
> + --enable-cap-ng) printf "%s" -Dcap_ng=enabled ;;
> + --disable-cap-ng) printf "%s" -Dcap_ng=disabled ;;
> + --enable-capstone) printf "%s" -Dcapstone=enabled ;;
> + --disable-capstone) printf "%s" -Dcapstone=disabled ;;
> + --enable-capstone=*) quote_sh "-Dcapstone=$2" ;;
> + --enable-cfi) printf "%s" -Dcfi=true ;;
> + --disable-cfi) printf "%s" -Dcfi=false ;;
> + --enable-cfi-debug) printf "%s" -Dcfi_debug=true ;;
> + --disable-cfi-debug) printf "%s" -Dcfi_debug=false ;;
> + --enable-cocoa) printf "%s" -Dcocoa=enabled ;;
> + --disable-cocoa) printf "%s" -Dcocoa=disabled ;;
> + --enable-coreaudio) printf "%s" -Dcoreaudio=enabled ;;
> + --disable-coreaudio) printf "%s" -Dcoreaudio=disabled ;;
> + --enable-curl) printf "%s" -Dcurl=enabled ;;
> + --disable-curl) printf "%s" -Dcurl=disabled ;;
> + --enable-curses) printf "%s" -Dcurses=enabled ;;
> + --disable-curses) printf "%s" -Dcurses=disabled ;;
> + --enable-docs) printf "%s" -Ddocs=enabled ;;
> + --disable-docs) printf "%s" -Ddocs=disabled ;;
> + --enable-dsound) printf "%s" -Ddsound=enabled ;;
> + --disable-dsound) printf "%s" -Ddsound=disabled ;;
> + --enable-fdt) printf "%s" -Dfdt=enabled ;;
> + --disable-fdt) printf "%s" -Dfdt=disabled ;;
> + --enable-fdt=*) quote_sh "-Dfdt=$2" ;;
> + --enable-fuse) printf "%s" -Dfuse=enabled ;;
> + --disable-fuse) printf "%s" -Dfuse=disabled ;;
> + --enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
> + --disable-fuse-lseek) printf "%s" -Dfuse_lseek=disabled ;;
> + --enable-fuzzing) printf "%s" -Dfuzzing=true ;;
> + --disable-fuzzing) printf "%s" -Dfuzzing=false ;;
> + --enable-gcrypt) printf "%s" -Dgcrypt=enabled ;;
> + --disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
> + --enable-gettext) printf "%s" -Dgettext=enabled ;;
> + --disable-gettext) printf "%s" -Dgettext=disabled ;;
> + --enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
> + --disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
> + --enable-gnutls) printf "%s" -Dgnutls=enabled ;;
> + --disable-gnutls) printf "%s" -Dgnutls=disabled ;;
> + --enable-gtk) printf "%s" -Dgtk=enabled ;;
> + --disable-gtk) printf "%s" -Dgtk=disabled ;;
> + --enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
> + --disable-guest-agent-msi) printf "%s" -Dguest_agent_msi=disabled ;;
> + --enable-hax) printf "%s" -Dhax=enabled ;;
> + --disable-hax) printf "%s" -Dhax=disabled ;;
> + --enable-hvf) printf "%s" -Dhvf=enabled ;;
> + --disable-hvf) printf "%s" -Dhvf=disabled ;;
> + --enable-iconv) printf "%s" -Diconv=enabled ;;
> + --disable-iconv) printf "%s" -Diconv=disabled ;;
> + --enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
> + --disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
> + --enable-jack) printf "%s" -Djack=enabled ;;
> + --disable-jack) printf "%s" -Djack=disabled ;;
> + --enable-kvm) printf "%s" -Dkvm=enabled ;;
> + --disable-kvm) printf "%s" -Dkvm=disabled ;;
> + --enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
> + --disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
> + --enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
> + --disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
> + --enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
> + --disable-libnfs) printf "%s" -Dlibnfs=disabled ;;
> + --enable-libpmem) printf "%s" -Dlibpmem=enabled ;;
> + --disable-libpmem) printf "%s" -Dlibpmem=disabled ;;
> + --enable-libudev) printf "%s" -Dlibudev=enabled ;;
> + --disable-libudev) printf "%s" -Dlibudev=disabled ;;
> + --enable-libusb) printf "%s" -Dlibusb=enabled ;;
> + --disable-libusb) printf "%s" -Dlibusb=disabled ;;
> + --enable-libxml2) printf "%s" -Dlibxml2=enabled ;;
> + --disable-libxml2) printf "%s" -Dlibxml2=disabled ;;
> + --enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;;
> + --disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;;
> + --enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;;
> + --disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
> + --enable-lzfse) printf "%s" -Dlzfse=enabled ;;
> + --disable-lzfse) printf "%s" -Dlzfse=disabled ;;
> + --enable-lzo) printf "%s" -Dlzo=enabled ;;
> + --disable-lzo) printf "%s" -Dlzo=disabled ;;
> + --enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
> + --enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
> + --disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
> + --enable-mpath) printf "%s" -Dmpath=enabled ;;
> + --disable-mpath) printf "%s" -Dmpath=disabled ;;
> + --enable-multiprocess) printf "%s" -Dmultiprocess=enabled ;;
> + --disable-multiprocess) printf "%s" -Dmultiprocess=disabled ;;
> + --enable-netmap) printf "%s" -Dnetmap=enabled ;;
> + --disable-netmap) printf "%s" -Dnetmap=disabled ;;
> + --enable-nettle) printf "%s" -Dnettle=enabled ;;
> + --disable-nettle) printf "%s" -Dnettle=disabled ;;
> + --enable-nvmm) printf "%s" -Dnvmm=enabled ;;
> + --disable-nvmm) printf "%s" -Dnvmm=disabled ;;
> + --enable-oss) printf "%s" -Doss=enabled ;;
> + --disable-oss) printf "%s" -Doss=disabled ;;
> + --enable-pa) printf "%s" -Dpa=enabled ;;
> + --disable-pa) printf "%s" -Dpa=disabled ;;
> + --enable-rbd) printf "%s" -Drbd=enabled ;;
> + --disable-rbd) printf "%s" -Drbd=disabled ;;
> + --enable-sdl) printf "%s" -Dsdl=enabled ;;
> + --disable-sdl) printf "%s" -Dsdl=disabled ;;
> + --enable-sdl-image) printf "%s" -Dsdl_image=enabled ;;
> + --disable-sdl-image) printf "%s" -Dsdl_image=disabled ;;
> + --enable-seccomp) printf "%s" -Dseccomp=enabled ;;
> + --disable-seccomp) printf "%s" -Dseccomp=disabled ;;
> + --enable-slirp) printf "%s" -Dslirp=enabled ;;
> + --disable-slirp) printf "%s" -Dslirp=disabled ;;
> + --enable-slirp=*) quote_sh "-Dslirp=$2" ;;
> + --enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
> + --disable-smartcard) printf "%s" -Dsmartcard=disabled ;;
> + --enable-snappy) printf "%s" -Dsnappy=enabled ;;
> + --disable-snappy) printf "%s" -Dsnappy=disabled ;;
> + --enable-sparse) printf "%s" -Dsparse=enabled ;;
> + --disable-sparse) printf "%s" -Dsparse=disabled ;;
> + --enable-spice) printf "%s" -Dspice=enabled ;;
> + --disable-spice) printf "%s" -Dspice=disabled ;;
> + --enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
> + --disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
> + --enable-tcg) printf "%s" -Dtcg=enabled ;;
> + --disable-tcg) printf "%s" -Dtcg=disabled ;;
> + --enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
> + --disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
> + --enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
> + --enable-u2f) printf "%s" -Du2f=enabled ;;
> + --disable-u2f) printf "%s" -Du2f=disabled ;;
> + --enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
> + --disable-usb-redir) printf "%s" -Dusb_redir=disabled ;;
> + --enable-vde) printf "%s" -Dvde=enabled ;;
> + --disable-vde) printf "%s" -Dvde=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-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
> + --disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
> + --enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
> + --disable-virtfs) printf "%s" -Dvirtfs=disabled ;;
> + --enable-virtiofsd) printf "%s" -Dvirtiofsd=enabled ;;
> + --disable-virtiofsd) printf "%s" -Dvirtiofsd=disabled ;;
> + --enable-vnc) printf "%s" -Dvnc=enabled ;;
> + --disable-vnc) printf "%s" -Dvnc=disabled ;;
> + --enable-vnc-jpeg) printf "%s" -Dvnc_jpeg=enabled ;;
> + --disable-vnc-jpeg) printf "%s" -Dvnc_jpeg=disabled ;;
> + --enable-vnc-png) printf "%s" -Dvnc_png=enabled ;;
> + --disable-vnc-png) printf "%s" -Dvnc_png=disabled ;;
> + --enable-vnc-sasl) printf "%s" -Dvnc_sasl=enabled ;;
> + --disable-vnc-sasl) printf "%s" -Dvnc_sasl=disabled ;;
> + --enable-vte) printf "%s" -Dvte=enabled ;;
> + --disable-vte) printf "%s" -Dvte=disabled ;;
> + --enable-whpx) printf "%s" -Dwhpx=enabled ;;
> + --disable-whpx) printf "%s" -Dwhpx=disabled ;;
> + --enable-xen) printf "%s" -Dxen=enabled ;;
> + --disable-xen) printf "%s" -Dxen=disabled ;;
> + --enable-xen-pci-passthrough) printf "%s"
> -Dxen_pci_passthrough=enabled ;;
> + --disable-xen-pci-passthrough) printf "%s"
> -Dxen_pci_passthrough=disabled ;;
> + --enable-xkbcommon) printf "%s" -Dxkbcommon=enabled ;;
> + --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
> + --enable-zstd) printf "%s" -Dzstd=enabled ;;
> + --disable-zstd) printf "%s" -Dzstd=disabled ;;
> *) return 1 ;;
> esac
> }
> --
> 2.31.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 73551 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 24/24] configure: automatically parse command line for meson -D options
2021-10-07 20:41 ` Marc-André Lureau
@ 2021-10-08 8:43 ` Paolo Bonzini
2021-10-08 8:46 ` Marc-André Lureau
0 siblings, 1 reply; 60+ messages in thread
From: Paolo Bonzini @ 2021-10-08 8:43 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: Thomas Huth, QEMU
On 07/10/21 22:41, Marc-André Lureau wrote:
>
> I have not investigated why, but this broke at least
> --enable-trace-backend=log for me:
> ERROR: unknown option --enable-trace-backend=log
From the commit message:
"A few options change name: --enable-tcmalloc and --enable-jemalloc
become --enable-malloc={tcmalloc,jemalloc}; --disable-blobs becomes
--disable-install-blobs; --enable-trace-backend becomes
--enable-trace-backends".
I'll add some code for backwards compatibility.
Paolo
^ permalink raw reply [flat|nested] 60+ messages in thread
* Re: [PATCH 24/24] configure: automatically parse command line for meson -D options
2021-10-08 8:43 ` Paolo Bonzini
@ 2021-10-08 8:46 ` Marc-André Lureau
0 siblings, 0 replies; 60+ messages in thread
From: Marc-André Lureau @ 2021-10-08 8:46 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Thomas Huth, QEMU
[-- Attachment #1: Type: text/plain, Size: 774 bytes --]
Hi
On Fri, Oct 8, 2021 at 12:43 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
> On 07/10/21 22:41, Marc-André Lureau wrote:
> >
> > I have not investigated why, but this broke at least
> > --enable-trace-backend=log for me:
> > ERROR: unknown option --enable-trace-backend=log
>
> From the commit message:
>
> "A few options change name: --enable-tcmalloc and --enable-jemalloc
> become --enable-malloc={tcmalloc,jemalloc}; --disable-blobs becomes
> --disable-install-blobs; --enable-trace-backend becomes
> --enable-trace-backends".
>
>
Right, I got tired of reviewing at this point to read the whole thing.
> I'll add some code for backwards compatibility.
>
Yes, I guess that will help others as well, thanks!
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 1391 bytes --]
^ permalink raw reply [flat|nested] 60+ messages in thread