* [PULL 00/25] Misc patches for 2022-04-29
@ 2022-04-29 15:22 Paolo Bonzini
2022-04-29 15:22 ` [PULL 01/25] WHPX: support for xcr0 Paolo Bonzini
` (25 more replies)
0 siblings, 26 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel
The following changes since commit f22833602095b05733bceaddeb20f3edfced3c07:
Merge tag 'pull-target-arm-20220428' of https://git.linaro.org/people/pmaydell/qemu-arm into staging (2022-04-28 08:34:17 -0700)
are available in the Git repository at:
https://gitlab.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to ec31a2f9b5b128c06a499ad076d8b29d664d3896:
pc: remove -soundhw pcspk (2022-04-29 15:07:21 +0200)
----------------------------------------------------------------
* WHPX support for xcr0
* qga-wss fixes
* Meson conversions
* Removed -soundhw pcspk
----------------------------------------------------------------
Konstantin Kostiuk (2):
configure: Add cross prefix for widl tool
qga-vss: always build qga-vss.tlb when qga-vss.dll is built
Paolo Bonzini (22):
meson-buildoptions: add support for string options
meson, configure: move Xen detection to meson
configure, meson: move iasl detection to meson
configure: move Windows flags detection to meson
configure: switch string options to automatic parsing
meson, configure: move --tls-priority to meson
meson, configure: move bdrv whitelists to meson
meson, configure: move --with-pkgversion, CONFIG_STAMP to meson
meson, configure: move --interp-prefix to meson
meson: always combine directories with prefix
configure: switch directory options to automatic parsing
meson: pass more options directly as -D
configure: omit options with default values from meson command line
meson, virtio: place all virtio-pci devices under virtio_pci_ss
configure: simplify vhost-net-{user, vdpa} configuration
build: move vhost-vsock configuration to Kconfig
build: move vhost-scsi configuration to Kconfig
build: move vhost-user-fs configuration to Kconfig
meson: create have_vhost_* variables
meson: use have_vhost_* variables to pick sources
configure, meson: move vhost options to Meson
pc: remove -soundhw pcspk
Sunil Muthuswamy (1):
WHPX: support for xcr0
Kconfig.host | 3 -
backends/meson.build | 8 +-
configure | 673 ++-------------------------------------
docs/meson.build | 2 +-
hw/audio/pcspk.c | 10 -
hw/audio/soundhw.c | 27 +-
hw/net/meson.build | 8 +-
hw/scsi/Kconfig | 5 +
hw/virtio/Kconfig | 18 +-
hw/virtio/meson.build | 34 +-
include/hw/audio/soundhw.h | 3 -
include/hw/virtio/virtio-scsi.h | 2 -
meson.build | 256 +++++++++++----
meson_options.txt | 28 +-
net/meson.build | 12 +-
qga/vss-win32/meson.build | 4 +-
scripts/meson-buildoptions.py | 86 ++++-
scripts/meson-buildoptions.sh | 74 ++++-
scripts/qemu-stamp.py | 24 ++
scripts/xen-detect.c | 203 ++++++++++++
target/i386/whpx/whpx-all.c | 89 ++++++
target/i386/whpx/whpx-internal.h | 3 +
tests/meson.build | 2 +-
tests/qtest/meson.build | 4 +-
tools/meson.build | 2 +-
25 files changed, 778 insertions(+), 802 deletions(-)
create mode 100644 scripts/qemu-stamp.py
create mode 100644 scripts/xen-detect.c
--
2.35.1
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PULL 01/25] WHPX: support for xcr0
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 02/25] configure: Add cross prefix for widl tool Paolo Bonzini
` (24 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Sunil Muthuswamy
From: Sunil Muthuswamy <sunilmut@microsoft.com>
Support for xcr0 to be able to enable xsave/xrstor. This by itself
is not sufficient to enable xsave/xrstor. WHPX XSAVE API's also
needs to be hooked up.
Signed-off-by: Sunil Muthuswamy <sunilmut@microsoft.com>
Message-Id: <MW2PR2101MB1116F07C07A26FD7A7ED8DCFC0780@MW2PR2101MB1116.namprd21.prod.outlook.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target/i386/whpx/whpx-all.c | 89 ++++++++++++++++++++++++++++++++
target/i386/whpx/whpx-internal.h | 3 ++
2 files changed, 92 insertions(+)
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index b625ad5bbb..c8376da7ed 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -246,9 +246,15 @@ static bool whpx_allowed;
static bool whp_dispatch_initialized;
static HMODULE hWinHvPlatform, hWinHvEmulation;
static uint32_t max_vcpu_index;
+static WHV_PROCESSOR_XSAVE_FEATURES whpx_xsave_cap;
+
struct whpx_state whpx_global;
struct WHPDispatch whp_dispatch;
+static bool whpx_has_xsave(void)
+{
+ return whpx_xsave_cap.XsaveSupport;
+}
/*
* VP support
@@ -300,6 +306,28 @@ static SegmentCache whpx_seg_h2q(const WHV_X64_SEGMENT_REGISTER *hs)
return qs;
}
+/* X64 Extended Control Registers */
+static void whpx_set_xcrs(CPUState *cpu)
+{
+ struct CPUX86State *env = (CPUArchState *)(cpu->env_ptr);
+ HRESULT hr;
+ struct whpx_state *whpx = &whpx_global;
+ WHV_REGISTER_VALUE xcr0;
+ WHV_REGISTER_NAME xcr0_name = WHvX64RegisterXCr0;
+
+ if (!whpx_has_xsave()) {
+ return;
+ }
+
+ /* Only xcr0 is supported by the hypervisor currently */
+ xcr0.Reg64 = env->xcr0;
+ hr = whp_dispatch.WHvSetVirtualProcessorRegisters(
+ whpx->partition, cpu->cpu_index, &xcr0_name, 1, &xcr0);
+ if (FAILED(hr)) {
+ error_report("WHPX: Failed to set register xcr0, hr=%08lx", hr);
+ }
+}
+
static int whpx_set_tsc(CPUState *cpu)
{
CPUX86State *env = cpu->env_ptr;
@@ -435,6 +463,12 @@ static void whpx_set_registers(CPUState *cpu, int level)
/* 8 Debug Registers - Skipped */
+ /*
+ * Extended control registers needs to be handled separately depending
+ * on whether xsave is supported/enabled or not.
+ */
+ whpx_set_xcrs(cpu);
+
/* 16 XMM registers */
assert(whpx_register_names[idx] == WHvX64RegisterXmm0);
idx_next = idx + 16;
@@ -541,6 +575,30 @@ static int whpx_get_tsc(CPUState *cpu)
return 0;
}
+/* X64 Extended Control Registers */
+static void whpx_get_xcrs(CPUState *cpu)
+{
+ struct CPUX86State *env = (CPUArchState *)(cpu->env_ptr);
+ HRESULT hr;
+ struct whpx_state *whpx = &whpx_global;
+ WHV_REGISTER_VALUE xcr0;
+ WHV_REGISTER_NAME xcr0_name = WHvX64RegisterXCr0;
+
+ if (!whpx_has_xsave()) {
+ return;
+ }
+
+ /* Only xcr0 is supported by the hypervisor currently */
+ hr = whp_dispatch.WHvGetVirtualProcessorRegisters(
+ whpx->partition, cpu->cpu_index, &xcr0_name, 1, &xcr0);
+ if (FAILED(hr)) {
+ error_report("WHPX: Failed to get register xcr0, hr=%08lx", hr);
+ return;
+ }
+
+ env->xcr0 = xcr0.Reg64;
+}
+
static void whpx_get_registers(CPUState *cpu)
{
struct whpx_state *whpx = &whpx_global;
@@ -634,6 +692,12 @@ static void whpx_get_registers(CPUState *cpu)
/* 8 Debug Registers - Skipped */
+ /*
+ * Extended control registers needs to be handled separately depending
+ * on whether xsave is supported/enabled or not.
+ */
+ whpx_get_xcrs(cpu);
+
/* 16 XMM registers */
assert(whpx_register_names[idx] == WHvX64RegisterXmm0);
idx_next = idx + 16;
@@ -2513,6 +2577,31 @@ static int whpx_accel_init(MachineState *ms)
goto error;
}
+ /*
+ * Query the XSAVE capability of the partition. Any error here is not
+ * considered fatal.
+ */
+ hr = whp_dispatch.WHvGetPartitionProperty(
+ whpx->partition,
+ WHvPartitionPropertyCodeProcessorXsaveFeatures,
+ &whpx_xsave_cap,
+ sizeof(whpx_xsave_cap),
+ &whpx_cap_size);
+
+ /*
+ * Windows version which don't support this property will return with the
+ * specific error code.
+ */
+ if (FAILED(hr) && hr != WHV_E_UNKNOWN_PROPERTY) {
+ error_report("WHPX: Failed to query XSAVE capability, hr=%08lx", hr);
+ }
+
+ if (whpx_has_xsave()) {
+ printf("WHPX: Partition XSAVE capable\n");
+ } else {
+ printf("WHPX: Partition is not XSAVE capable\n");
+ }
+
memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY));
prop.ProcessorCount = ms->smp.cpus;
hr = whp_dispatch.WHvSetPartitionProperty(
diff --git a/target/i386/whpx/whpx-internal.h b/target/i386/whpx/whpx-internal.h
index 2416ec7922..dbb7e7ba82 100644
--- a/target/i386/whpx/whpx-internal.h
+++ b/target/i386/whpx/whpx-internal.h
@@ -48,6 +48,9 @@ void whpx_apic_get(DeviceState *s);
#define WHV_E_UNKNOWN_CAPABILITY 0x80370300L
+/* This should eventually come from the Windows SDK */
+#define WHV_E_UNKNOWN_PROPERTY 0x80370302
+
#define LIST_WINHVPLATFORM_FUNCTIONS(X) \
X(HRESULT, WHvGetCapability, (WHV_CAPABILITY_CODE CapabilityCode, VOID* CapabilityBuffer, UINT32 CapabilityBufferSizeInBytes, UINT32* WrittenSizeInBytes)) \
X(HRESULT, WHvCreatePartition, (WHV_PARTITION_HANDLE* Partition)) \
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 02/25] configure: Add cross prefix for widl tool
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
2022-04-29 15:22 ` [PULL 01/25] WHPX: support for xcr0 Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 03/25] qga-vss: always build qga-vss.tlb when qga-vss.dll is built Paolo Bonzini
` (23 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Konstantin Kostiuk, Marc-André Lureau
From: Konstantin Kostiuk <kkostiuk@redhat.com>
The mingw-w64-tool package in Fedora provides widl tool with a
cross prefix, so adds it automatically for cross builds.
WIDL env can be used to redefine the path to tool.
The same behavior as with windres.
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Message-Id: <20220428181525.300521-1-kkostiuk@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 3 +++
1 file changed, 3 insertions(+)
diff --git a/configure b/configure
index 59c43bea05..8b775492d0 100755
--- a/configure
+++ b/configure
@@ -415,6 +415,7 @@ ranlib="${RANLIB-${cross_prefix}ranlib}"
nm="${NM-${cross_prefix}nm}"
smbd="$SMBD"
strip="${STRIP-${cross_prefix}strip}"
+widl="${WIDL-${cross_prefix}widl}"
windres="${WINDRES-${cross_prefix}windres}"
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
@@ -2786,6 +2787,7 @@ if test "$skip_meson" = no; then
echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
fi
echo "strip = [$(meson_quote $strip)]" >> $cross
+ echo "widl = [$(meson_quote $widl)]" >> $cross
echo "windres = [$(meson_quote $windres)]" >> $cross
if test "$cross_compile" = "yes"; then
cross_arg="--cross-file config-meson.cross"
@@ -2907,6 +2909,7 @@ preserve_env PYTHON
preserve_env SDL2_CONFIG
preserve_env SMBD
preserve_env STRIP
+preserve_env WIDL
preserve_env WINDRES
printf "exec" >>config.status
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 03/25] qga-vss: always build qga-vss.tlb when qga-vss.dll is built
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
2022-04-29 15:22 ` [PULL 01/25] WHPX: support for xcr0 Paolo Bonzini
2022-04-29 15:22 ` [PULL 02/25] configure: Add cross prefix for widl tool Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 04/25] meson-buildoptions: add support for string options Paolo Bonzini
` (22 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Konstantin Kostiuk, Marc-André Lureau
From: Konstantin Kostiuk <kkostiuk@redhat.com>
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Message-Id: <20220428181541.300619-1-kkostiuk@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qga/vss-win32/meson.build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/qga/vss-win32/meson.build b/qga/vss-win32/meson.build
index 71c50d0866..26c5dd6e0e 100644
--- a/qga/vss-win32/meson.build
+++ b/qga/vss-win32/meson.build
@@ -23,8 +23,6 @@ qga_vss = shared_module(
]
)
-all_qga += qga_vss
-
if midl.found()
gen_tlb = custom_target('gen-tlb',
input: 'qga-vss.idl',
@@ -36,3 +34,5 @@ else
output: 'qga-vss.tlb',
command: [widl, '-t', '@INPUT@', '-o', '@OUTPUT@'])
endif
+
+all_qga += [ qga_vss, gen_tlb ]
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 04/25] meson-buildoptions: add support for string options
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (2 preceding siblings ...)
2022-04-29 15:22 ` [PULL 03/25] qga-vss: always build qga-vss.tlb when qga-vss.dll is built Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 05/25] meson, configure: move Xen detection to meson Paolo Bonzini
` (21 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Allow using the buildoptions.json file for more options, namely anything
that is not a boolean or multiple-choice.
The mapping between configure and meson is messy for string options,
so allow configure to use to something other than the name in
meson_options.txt. This will come in handy anyway for builtin
Meson options such as b_lto or b_coverage.
Tested-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson_options.txt | 2 +-
scripts/meson-buildoptions.py | 65 ++++++++++++++++++++++++++++++-----
scripts/meson-buildoptions.sh | 6 ++--
3 files changed, 60 insertions(+), 13 deletions(-)
diff --git a/meson_options.txt b/meson_options.txt
index af432a4ee6..390701517c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -11,7 +11,7 @@ option('qemu_firmwarepath', type : 'string', value : '',
option('smbd', type : 'string', value : '',
description: 'Path to smbd for slirp networking')
option('sphinx_build', type : 'string', value : '',
- description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
+ description: 'Use specified sphinx-build for building document')
option('iasl', type : 'string', value : '',
description: 'Path to ACPI disassembler')
option('default_devices', type : 'boolean', value : true,
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 693be7b966..4af8d6e732 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -38,6 +38,11 @@
"trace_file",
}
+OPTION_NAMES = {
+ "malloc": "enable-malloc",
+ "trace_backends": "enable-trace-backends",
+}
+
BUILTIN_OPTIONS = {
"strip",
}
@@ -75,7 +80,7 @@ def help_line(left, opt, indent, long):
right = f'{opt["description"]}'
if long:
value = value_to_help(opt["value"])
- if value != "auto":
+ if value != "auto" and value != "":
right += f" [{value}]"
if "choices" in opt and long:
choices = "/".join(sorted(opt["choices"]))
@@ -96,6 +101,18 @@ def allow_arg(opt):
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
+# Return whether the option (a dictionary) can be used without
+# arguments. Booleans can only be used without arguments;
+# combos require an argument if they accept neither "enabled"
+# nor "disabled"
+def require_arg(opt):
+ if opt["type"] == "boolean":
+ return False
+ if opt["type"] != "combo":
+ return True
+ return not ({"enabled", "disabled"}.intersection(opt["choices"]))
+
+
def filter_options(json):
if ":" in json["name"]:
return False
@@ -110,20 +127,48 @@ def load_options(json):
return sorted(json, key=lambda x: x["name"])
+def cli_option(opt):
+ name = opt["name"]
+ if name in OPTION_NAMES:
+ return OPTION_NAMES[name]
+ return name.replace("_", "-")
+
+
+def cli_help_key(opt):
+ key = cli_option(opt)
+ if require_arg(opt):
+ return key
+ if opt["type"] == "boolean" and opt["value"]:
+ return f"disable-{key}"
+ return f"enable-{key}"
+
+
+def cli_metavar(opt):
+ if opt["type"] == "string":
+ return "VALUE"
+ if opt["type"] == "array":
+ return "CHOICES"
+ return "CHOICE"
+
+
def print_help(options):
print("meson_options_help() {")
- for opt in options:
- key = opt["name"].replace("_", "-")
+ for opt in sorted(options, key=cli_help_key):
+ key = cli_help_key(opt)
# The first section includes options that have an arguments,
# and booleans (i.e., only one of enable/disable makes sense)
- if opt["type"] == "boolean":
- left = f"--disable-{key}" if opt["value"] else f"--enable-{key}"
+ if require_arg(opt):
+ metavar = cli_metavar(opt)
+ left = f"--{key}={metavar}"
+ help_line(left, opt, 27, True)
+ elif opt["type"] == "boolean":
+ left = f"--{key}"
help_line(left, opt, 27, False)
elif allow_arg(opt):
if opt["type"] == "combo" and "enabled" in opt["choices"]:
- left = f"--enable-{key}[=CHOICE]"
+ left = f"--{key}[=CHOICE]"
else:
- left = f"--enable-{key}=CHOICE"
+ left = f"--{key}=CHOICE"
help_line(left, opt, 27, True)
sh_print()
@@ -142,9 +187,11 @@ def print_parse(options):
print("_meson_option_parse() {")
print(" case $1 in")
for opt in options:
- key = opt["name"].replace("_", "-")
+ key = cli_option(opt)
name = opt["name"]
- if opt["type"] == "boolean":
+ if require_arg(opt):
+ print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
+ elif opt["type"] == "boolean":
print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
else:
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 21366b2102..2123317654 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -1,5 +1,7 @@
# This file is generated by meson-buildoptions.py, do not edit!
meson_options_help() {
+ printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
+ printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
printf "%s\n" ' use block whitelist also in tools instead of only'
printf "%s\n" ' QEMU'
@@ -8,7 +10,6 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-cfi Control-Flow Integrity (CFI)'
printf "%s\n" ' --enable-cfi-debug Verbose errors in case of CFI violation'
- printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
printf "%s\n" ' --enable-debug-stack-usage'
printf "%s\n" ' measure coroutine stack usage'
@@ -16,7 +17,6 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
printf "%s\n" ' --enable-gprof QEMU profiling with gprof'
- printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
printf "%s\n" ' jemalloc/system/tcmalloc)'
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
@@ -29,7 +29,7 @@ meson_options_help() {
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-strip Strip targets on install'
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
- printf "%s\n" ' --enable-trace-backends=CHOICE'
+ printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ''
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 05/25] meson, configure: move Xen detection to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (3 preceding siblings ...)
2022-04-29 15:22 ` [PULL 04/25] meson-buildoptions: add support for string options Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 06/25] configure, meson: move iasl " Paolo Bonzini
` (20 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel
This is quite a complicated check. I moved all the test programs to
a single file in scripts/, picking the right program with #if and a -D
flag in meson.build's cc.links() invocation.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 322 +------------------------------------------
meson.build | 112 ++++++++++++---
scripts/xen-detect.c | 203 +++++++++++++++++++++++++++
3 files changed, 296 insertions(+), 341 deletions(-)
create mode 100644 scripts/xen-detect.c
diff --git a/configure b/configure
index 8b775492d0..519982800e 100755
--- a/configure
+++ b/configure
@@ -292,7 +292,6 @@ EXTRA_CXXFLAGS=""
EXTRA_OBJCFLAGS=""
EXTRA_LDFLAGS=""
-xen_ctrl_version="$default_feature"
vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
@@ -346,9 +345,6 @@ default_devices="true"
tcg="enabled"
cfi="false"
-# 4. Detection partly done in configure
-xen=${default_feature:+disabled}
-
# parse CC options second
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
@@ -867,10 +863,6 @@ for opt do
;;
--enable-slirp=*) slirp="$optarg"
;;
- --disable-xen) xen="disabled"
- ;;
- --enable-xen) xen="enabled"
- ;;
--disable-tcg) tcg="disabled"
plugins="no"
;;
@@ -1698,312 +1690,6 @@ if ! has "$pkg_config_exe"; then
error_exit "pkg-config binary '$pkg_config_exe' not found"
fi
-##########################################
-# xen probe
-
-if test "$xen" != "disabled" ; then
- # Check whether Xen library path is specified via --extra-ldflags to avoid
- # overriding this setting with pkg-config output. If not, try pkg-config
- # to obtain all needed flags.
-
- if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
- $pkg_config --exists xencontrol ; then
- xen_ctrl_version="$(printf '%d%02d%02d' \
- $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
- xen=enabled
- xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
- xen_pc="$xen_pc xenevtchn xendevicemodel"
- if $pkg_config --exists xentoolcore; then
- xen_pc="$xen_pc xentoolcore"
- fi
- xen_cflags="$($pkg_config --cflags $xen_pc)"
- xen_libs="$($pkg_config --libs $xen_pc)"
- else
-
- xen_libs="-lxenstore -lxenctrl"
- xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
-
- # First we test whether Xen headers and libraries are available.
- # If no, we are done and there is no Xen support.
- # If yes, more tests are run to detect the Xen version.
-
- # Xen (any)
- cat > $TMPC <<EOF
-#include <xenctrl.h>
-int main(void) {
- return 0;
-}
-EOF
- if ! compile_prog "" "$xen_libs" ; then
- # Xen not found
- if test "$xen" = "enabled" ; then
- feature_not_found "xen" "Install xen devel"
- fi
- xen=disabled
-
- # Xen unstable
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_DEVICEMODEL_API
-#define __XEN_TOOLS__
-#include <xendevicemodel.h>
-#include <xenforeignmemory.h>
-int main(void) {
- xendevicemodel_handle *xd;
- xenforeignmemory_handle *xfmem;
-
- xd = xendevicemodel_open(0, 0);
- xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
- xen_ctrl_version=41100
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenforeignmemory.h>
-#include <xentoolcore.h>
-int main(void) {
- xenforeignmemory_handle *xfmem;
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
- xentoolcore_restrict_all(0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
- xen_ctrl_version=41000
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-#undef XC_WANT_COMPAT_DEVICEMODEL_API
-#define __XEN_TOOLS__
-#include <xendevicemodel.h>
-int main(void) {
- xendevicemodel_handle *xd;
-
- xd = xendevicemodel_open(0, 0);
- xendevicemodel_close(xd);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
- then
- xen_stable_libs="-lxendevicemodel $xen_stable_libs"
- xen_ctrl_version=40900
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-/*
- * If we have stable libs the we don't want the libxc compat
- * layers, regardless of what CFLAGS we may have been given.
- *
- * Also, check if xengnttab_grant_copy_segment_t is defined and
- * grant copy operation is implemented.
- */
-#undef XC_WANT_COMPAT_EVTCHN_API
-#undef XC_WANT_COMPAT_GNTTAB_API
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <xenevtchn.h>
-#include <xengnttab.h>
-#include <xenforeignmemory.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc = NULL;
- xenforeignmemory_handle *xfmem;
- xenevtchn_handle *xe;
- xengnttab_handle *xg;
- xengnttab_grant_copy_segment_t* seg = NULL;
-
- xs_daemon_open();
-
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
-
- xe = xenevtchn_open(0, 0);
- xenevtchn_fd(xe);
-
- xg = xengnttab_open(0, 0);
- xengnttab_grant_copy(xg, 0, seg);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs $xen_stable_libs"
- then
- xen_ctrl_version=40800
- xen=enabled
- elif
- cat > $TMPC <<EOF &&
-/*
- * If we have stable libs the we don't want the libxc compat
- * layers, regardless of what CFLAGS we may have been given.
- */
-#undef XC_WANT_COMPAT_EVTCHN_API
-#undef XC_WANT_COMPAT_GNTTAB_API
-#undef XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <xenevtchn.h>
-#include <xengnttab.h>
-#include <xenforeignmemory.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc = NULL;
- xenforeignmemory_handle *xfmem;
- xenevtchn_handle *xe;
- xengnttab_handle *xg;
-
- xs_daemon_open();
-
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
-
- xfmem = xenforeignmemory_open(0, 0);
- xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
-
- xe = xenevtchn_open(0, 0);
- xenevtchn_fd(xe);
-
- xg = xengnttab_open(0, 0);
- xengnttab_map_grant_ref(xg, 0, 0, 0);
-
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs $xen_stable_libs"
- then
- xen_ctrl_version=40701
- xen=enabled
-
- # Xen 4.6
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
- xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40600
- xen=enabled
-
- # Xen 4.5
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40500
- xen=enabled
-
- elif
- cat > $TMPC <<EOF &&
-#include <xenctrl.h>
-#include <xenstore.h>
-#include <stdint.h>
-#include <xen/hvm/hvm_info_table.h>
-#if !defined(HVM_MAX_VCPUS)
-# error HVM_MAX_VCPUS not defined
-#endif
-int main(void) {
- xc_interface *xc;
- xs_daemon_open();
- xc = xc_interface_open(0, 0, 0);
- xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
- xc_gnttab_open(NULL, 0);
- xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
- xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
- return 0;
-}
-EOF
- compile_prog "" "$xen_libs"
- then
- xen_ctrl_version=40200
- xen=enabled
-
- else
- if test "$xen" = "enabled" ; then
- feature_not_found "xen (unsupported version)" \
- "Install a supported xen (xen 4.2 or newer)"
- fi
- xen=disabled
- fi
-
- if test "$xen" = enabled; then
- if test $xen_ctrl_version -ge 40701 ; then
- xen_libs="$xen_libs $xen_stable_libs "
- fi
- fi
- fi
-fi
-
##########################################
# glib support probe
@@ -2555,12 +2241,6 @@ if test "$modules" = "yes"; then
fi
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
-if test "$xen" = "enabled" ; then
- echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
- echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
- echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
- echo "XEN_LIBS=$xen_libs" >> $config_host_mak
-fi
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
@@ -2839,7 +2519,7 @@ if test "$skip_meson" = no; then
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
- -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
+ -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg \
-Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
diff --git a/meson.build b/meson.build
index 1fe7d257ff..50eb19e0ba 100644
--- a/meson.build
+++ b/meson.build
@@ -348,12 +348,6 @@ accelerators = []
if get_option('kvm').allowed() and targetos == 'linux'
accelerators += 'CONFIG_KVM'
endif
-if get_option('xen').allowed() and 'CONFIG_XEN_BACKEND' in config_host
- accelerators += 'CONFIG_XEN'
- have_xen_pci_passthrough = get_option('xen_pci_passthrough').allowed() and targetos == 'linux'
-else
- have_xen_pci_passthrough = false
-endif
if get_option('whpx').allowed() and targetos == 'windows'
if get_option('whpx').enabled() and host_machine.cpu() != 'x86_64'
error('WHPX requires 64-bit host')
@@ -425,13 +419,6 @@ endif
if 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled()
error('WHPX not available on this platform')
endif
-if not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled()
- if 'CONFIG_XEN' in accelerators
- error('Xen PCI passthrough not available on this platform')
- else
- error('Xen PCI passthrough requested but Xen not enabled')
- endif
-endif
################
# Dependencies #
@@ -1257,10 +1244,86 @@ if not get_option('rdma').auto() or have_system
endif
xen = not_found
-if 'CONFIG_XEN_BACKEND' in config_host
- xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
- link_args: config_host['XEN_LIBS'].split())
+if get_option('xen').enabled() or (get_option('xen').auto() and have_system)
+ xencontrol = dependency('xencontrol', required: false,
+ method: 'pkg-config', kwargs: static_kwargs)
+ if xencontrol.found()
+ xen_pc = declare_dependency(version: xencontrol.version(),
+ dependencies: [
+ xencontrol,
+ # disabler: true makes xen_pc.found() return false if any is not found
+ dependency('xenstore', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xenforeignmemory', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xengnttab', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xenevtchn', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ dependency('xendevicemodel', required: false,
+ method: 'pkg-config', kwargs: static_kwargs,
+ disabler: true),
+ # optional, no "disabler: true"
+ dependency('xentoolcore', required: false,
+ method: 'pkg-config', kwargs: static_kwargs)])
+ if xen_pc.found()
+ xen = xen_pc
+ endif
+ endif
+ if not xen.found()
+ xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1', '4.6.0', '4.5.0', '4.2.0' ]
+ xen_libs = {
+ '4.11.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
+ '4.10.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
+ '4.9.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.8.0': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.7.1': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
+ '4.6.0': [ 'xenstore', 'xenctrl' ],
+ '4.5.0': [ 'xenstore', 'xenctrl' ],
+ '4.2.0': [ 'xenstore', 'xenctrl' ],
+ }
+ xen_deps = {}
+ foreach ver: xen_tests
+ # cache the various library tests to avoid polluting the logs
+ xen_test_deps = []
+ foreach l: xen_libs[ver]
+ if l not in xen_deps
+ xen_deps += { l: cc.find_library(l, required: false) }
+ endif
+ xen_test_deps += xen_deps[l]
+ endforeach
+
+ # Use -D to pick just one of the test programs in scripts/xen-detect.c
+ xen_version = ver.split('.')
+ xen_ctrl_version = xen_version[0] + \
+ ('0' + xen_version[1]).substring(-2) + \
+ ('0' + xen_version[2]).substring(-2)
+ if cc.links(files('scripts/xen-detect.c'),
+ args: '-DCONFIG_XEN_CTRL_INTERFACE_VERSION=' + xen_ctrl_version,
+ dependencies: xen_test_deps)
+ xen = declare_dependency(version: ver, dependencies: xen_test_deps)
+ break
+ endif
+ endforeach
+ endif
+ if xen.found()
+ accelerators += 'CONFIG_XEN'
+ elif get_option('xen').enabled()
+ error('could not compile and link Xen test program')
+ endif
endif
+have_xen_pci_passthrough = get_option('xen_pci_passthrough') \
+ .require(xen.found(),
+ error_message: 'Xen PCI passthrough requested but Xen not enabled') \
+ .require(targetos == 'linux',
+ error_message: 'Xen PCI passthrough not available on this platform') \
+ .allowed()
+
+
cacard = not_found
if not get_option('smartcard').auto() or have_system
cacard = dependency('libcacard', required: get_option('smartcard'),
@@ -1634,6 +1697,15 @@ config_host_data.set('CONFIG_X11', x11.found())
config_host_data.set('CONFIG_DBUS_DISPLAY', dbus_display)
config_host_data.set('CONFIG_CFI', get_option('cfi'))
config_host_data.set('CONFIG_SELINUX', selinux.found())
+config_host_data.set('CONFIG_XEN_BACKEND', xen.found())
+if xen.found()
+ # protect from xen.version() having less than three components
+ xen_version = xen.version().split('.') + ['0', '0']
+ xen_ctrl_version = xen_version[0] + \
+ ('0' + xen_version[1]).substring(-2) + \
+ ('0' + xen_version[2]).substring(-2)
+ config_host_data.set('CONFIG_XEN_CTRL_INTERFACE_VERSION', xen_ctrl_version)
+endif
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
@@ -2358,7 +2430,7 @@ config_all += config_all_devices
config_all += config_host
config_all += config_all_disas
config_all += {
- 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
+ 'CONFIG_XEN': xen.found(),
'CONFIG_SOFTMMU': have_system,
'CONFIG_USER_ONLY': have_user,
'CONFIG_ALL': true,
@@ -3689,9 +3761,9 @@ if have_system
summary_info += {'HVF support': config_all.has_key('CONFIG_HVF')}
summary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')}
summary_info += {'NVMM support': config_all.has_key('CONFIG_NVMM')}
- summary_info += {'Xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
- if config_host.has_key('CONFIG_XEN_BACKEND')
- summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
+ summary_info += {'Xen support': xen.found()}
+ if xen.found()
+ summary_info += {'xen ctrl version': xen.version()}
endif
endif
summary_info += {'TCG support': config_all.has_key('CONFIG_TCG')}
diff --git a/scripts/xen-detect.c b/scripts/xen-detect.c
new file mode 100644
index 0000000000..85e8206490
--- /dev/null
+++ b/scripts/xen-detect.c
@@ -0,0 +1,203 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/* Test programs for various Xen versions that QEMU supports. */
+#if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
+ #undef XC_WANT_COMPAT_DEVICEMODEL_API
+ #define __XEN_TOOLS__
+ #include <xendevicemodel.h>
+ #include <xenforeignmemory.h>
+ int main(void) {
+ xendevicemodel_handle *xd;
+ xenforeignmemory_handle *xfmem;
+
+ xd = xendevicemodel_open(0, 0);
+ xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenforeignmemory.h>
+ #include <xentoolcore.h>
+ int main(void) {
+ xenforeignmemory_handle *xfmem;
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
+ xentoolcore_restrict_all(0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
+ #undef XC_WANT_COMPAT_DEVICEMODEL_API
+ #define __XEN_TOOLS__
+ #include <xendevicemodel.h>
+ int main(void) {
+ xendevicemodel_handle *xd;
+
+ xd = xendevicemodel_open(0, 0);
+ xendevicemodel_close(xd);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
+ /*
+ * If we have stable libs the we don't want the libxc compat
+ * layers, regardless of what CFLAGS we may have been given.
+ *
+ * Also, check if xengnttab_grant_copy_segment_t is defined and
+ * grant copy operation is implemented.
+ */
+ #undef XC_WANT_COMPAT_EVTCHN_API
+ #undef XC_WANT_COMPAT_GNTTAB_API
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <xenevtchn.h>
+ #include <xengnttab.h>
+ #include <xenforeignmemory.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc = NULL;
+ xenforeignmemory_handle *xfmem;
+ xenevtchn_handle *xe;
+ xengnttab_handle *xg;
+ xengnttab_grant_copy_segment_t* seg = NULL;
+
+ xs_daemon_open();
+
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
+
+ xe = xenevtchn_open(0, 0);
+ xenevtchn_fd(xe);
+
+ xg = xengnttab_open(0, 0);
+ xengnttab_grant_copy(xg, 0, seg);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
+ /*
+ * If we have stable libs the we don't want the libxc compat
+ * layers, regardless of what CFLAGS we may have been given.
+ */
+ #undef XC_WANT_COMPAT_EVTCHN_API
+ #undef XC_WANT_COMPAT_GNTTAB_API
+ #undef XC_WANT_COMPAT_MAP_FOREIGN_API
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <xenevtchn.h>
+ #include <xengnttab.h>
+ #include <xenforeignmemory.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc = NULL;
+ xenforeignmemory_handle *xfmem;
+ xenevtchn_handle *xe;
+ xengnttab_handle *xg;
+
+ xs_daemon_open();
+
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
+
+ xe = xenevtchn_open(0, 0);
+ xenevtchn_fd(xe);
+
+ xg = xengnttab_open(0, 0);
+ xengnttab_map_grant_ref(xg, 0, 0, 0);
+
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+ xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
+ return 0;
+ }
+
+#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200
+ #include <xenctrl.h>
+ #include <xenstore.h>
+ #include <stdint.h>
+ #include <xen/hvm/hvm_info_table.h>
+ #if !defined(HVM_MAX_VCPUS)
+ # error HVM_MAX_VCPUS not defined
+ #endif
+ int main(void) {
+ xc_interface *xc;
+ xs_daemon_open();
+ xc = xc_interface_open(0, 0, 0);
+ xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+ xc_gnttab_open(NULL, 0);
+ xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+ xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+ return 0;
+ }
+
+#else
+#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
+#endif
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 06/25] configure, meson: move iasl detection to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (4 preceding siblings ...)
2022-04-29 15:22 ` [PULL 05/25] meson, configure: move Xen detection to meson Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 07/25] configure: move Windows flags " Paolo Bonzini
` (19 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 2 +-
meson.build | 16 +++++++++-------
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/configure b/configure
index 519982800e..b146763fbd 100755
--- a/configure
+++ b/configure
@@ -2508,7 +2508,7 @@ if test "$skip_meson" = no; then
-Daudio_drv_list=$audio_drv_list \
-Ddefault_devices=$default_devices \
-Ddocdir="$docdir" \
- -Diasl="$($iasl -h >/dev/null 2>&1 && printf %s "$iasl")" \
+ -Diasl="$iasl" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
diff --git a/meson.build b/meson.build
index 50eb19e0ba..84f3ae7bd6 100644
--- a/meson.build
+++ b/meson.build
@@ -167,6 +167,12 @@ if 'dtrace' in get_option('trace_backends')
endif
endif
+if get_option('iasl') == ''
+ iasl = find_program('iasl', required: false)
+else
+ iasl = find_program(get_option('iasl'), required: true)
+endif
+
##################
# Compiler flags #
##################
@@ -1584,8 +1590,8 @@ foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
config_host_data.set_quoted('CONFIG_TRACE_FILE', get_option('trace_file'))
-if get_option('iasl') != ''
- config_host_data.set_quoted('CONFIG_IASL', get_option('iasl'))
+if iasl.found()
+ config_host_data.set_quoted('CONFIG_IASL', iasl.full_path())
endif
config_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir'))
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
@@ -3630,11 +3636,7 @@ summary_info += {'sphinx-build': sphinx_build}
if config_host.has_key('HAVE_GDB_BIN')
summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
endif
-if get_option('iasl') != ''
- summary_info += {'iasl': get_option('iasl')}
-else
- summary_info += {'iasl': false}
-endif
+summary_info += {'iasl': iasl}
summary_info += {'genisoimage': config_host['GENISOIMAGE']}
if targetos == 'windows' and have_ga
summary_info += {'wixl': wixl}
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 07/25] configure: move Windows flags detection to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (5 preceding siblings ...)
2022-04-29 15:22 ` [PULL 06/25] configure, meson: move iasl " Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 08/25] configure: switch string options to automatic parsing Paolo Bonzini
` (18 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 20 --------------------
meson.build | 8 ++++++++
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/configure b/configure
index b146763fbd..c54e10ea26 100755
--- a/configure
+++ b/configure
@@ -224,10 +224,6 @@ glob() {
eval test -z '"${1#'"$2"'}"'
}
-ld_has() {
- $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
-}
-
if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
then
error_exit "main directory cannot contain spaces nor colons"
@@ -2089,22 +2085,6 @@ if test "$solaris" = "no" && test "$tsan" = "no"; then
fi
fi
-# Use ASLR, no-SEH and DEP if available
-if test "$mingw32" = "yes" ; then
- flags="--no-seh --nxcompat"
-
- # Disable ASLR for debug builds to allow debugging with gdb
- if test "$debug" = "no" ; then
- flags="--dynamicbase $flags"
- fi
-
- for flag in $flags; do
- if ld_has $flag ; then
- QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
- fi
- done
-fi
-
# Guest agent Windows MSI package
if test "$QEMU_GA_MANUFACTURER" = ""; then
diff --git a/meson.build b/meson.build
index 84f3ae7bd6..31380f1f2e 100644
--- a/meson.build
+++ b/meson.build
@@ -182,6 +182,14 @@ qemu_cxxflags = config_host['QEMU_CXXFLAGS'].split()
qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
qemu_ldflags = config_host['QEMU_LDFLAGS'].split()
+if targetos == 'windows'
+ qemu_ldflags += cc.get_supported_link_arguments('-Wl,--no-seh', '-Wl,--nxcompat')
+ # Disable ASLR for debug builds to allow debugging with gdb
+ if get_option('optimization') == '0'
+ qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase')
+ endif
+endif
+
if get_option('gprof')
qemu_cflags += ['-p']
qemu_cxxflags += ['-p']
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 08/25] configure: switch string options to automatic parsing
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (6 preceding siblings ...)
2022-04-29 15:22 ` [PULL 07/25] configure: move Windows flags " Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 09/25] meson, configure: move --tls-priority to meson Paolo Bonzini
` (17 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 24 +-----------------------
scripts/meson-buildoptions.py | 5 +----
scripts/meson-buildoptions.sh | 9 +++++++++
3 files changed, 11 insertions(+), 27 deletions(-)
diff --git a/configure b/configure
index c54e10ea26..c1eb4923dd 100755
--- a/configure
+++ b/configure
@@ -231,12 +231,10 @@ fi
# default parameters
cpu=""
-iasl="iasl"
interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
-audio_drv_list="default"
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
host_cc="cc"
@@ -312,7 +310,6 @@ linux_user=""
bsd_user=""
pkgversion=""
pie=""
-trace_file="trace"
coroutine=""
tls_priority="NORMAL"
plugins="$default_feature"
@@ -714,8 +711,6 @@ for opt do
;;
--cxx=*)
;;
- --iasl=*) iasl="$optarg"
- ;;
--objcc=*) objcc="$optarg"
;;
--make=*) make="$optarg"
@@ -724,8 +719,6 @@ for opt do
;;
--python=*) python="$optarg" ; explicit_python=yes
;;
- --sphinx-build=*) sphinx_build="$optarg"
- ;;
--skip-meson) skip_meson=yes
;;
--meson=*) meson="$optarg"
@@ -766,8 +759,6 @@ for opt do
error_exit "Can't mix --target-list-exclude with --target-list"
fi
;;
- --with-trace-file=*) trace_file="$optarg"
- ;;
--with-default-devices) default_devices="true"
;;
--without-default-devices) default_devices="false"
@@ -826,8 +817,6 @@ for opt do
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --audio-drv-list=*) audio_drv_list="$optarg"
- ;;
--block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
;;
--block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
@@ -1001,12 +990,7 @@ for opt do
--enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
;;
# everything else has the same name in configure and meson
- --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
- ;;
- *)
- echo "ERROR: unknown option $opt"
- echo "Try '$0 --help' for more information"
- exit 1
+ --*) meson_option_parse "$opt" "$optarg"
;;
esac
done
@@ -1129,7 +1113,6 @@ $(echo Available targets: $default_target_list | \
Advanced options (experts only):
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
--cc=CC use C compiler CC [$cc]
- --iasl=IASL use ACPI compiler IASL [$iasl]
--host-cc=CC use C compiler CC [$host_cc] for code run at
build time
--cxx=CXX use C++ compiler CXX [$cxx]
@@ -1142,7 +1125,6 @@ Advanced options (experts only):
--cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests
--make=MAKE use specified make [$make]
--python=PYTHON use specified python [$python]
- --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
--meson=MESON use specified meson [$meson]
--ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
@@ -2485,15 +2467,11 @@ if test "$skip_meson" = no; then
--sysconfdir "$sysconfdir" \
--localedir "$localedir" \
--localstatedir "$local_statedir" \
- -Daudio_drv_list=$audio_drv_list \
-Ddefault_devices=$default_devices \
-Ddocdir="$docdir" \
- -Diasl="$iasl" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
- -Dsphinx_build="$sphinx_build" \
- -Dtrace_file="$trace_file" \
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
-Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 4af8d6e732..3e540e8bb3 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -26,21 +26,18 @@
import sys
SKIP_OPTIONS = {
- "audio_drv_list",
"default_devices",
"docdir",
"fuzzing_engine",
- "iasl",
"qemu_firmwarepath",
"qemu_suffix",
"smbd",
- "sphinx_build",
- "trace_file",
}
OPTION_NAMES = {
"malloc": "enable-malloc",
"trace_backends": "enable-trace-backends",
+ "trace_file": "with-trace-file",
}
BUILTIN_OPTIONS = {
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 2123317654..bdaa128ee4 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -1,5 +1,7 @@
# This file is generated by meson-buildoptions.py, do not edit!
meson_options_help() {
+ printf "%s\n" ' --audio-drv-list=CHOICES Set audio driver list [default] (choices:'
+ printf "%s\n" ' alsa/coreaudio/default/dsound/jack/oss/pa/sdl)'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
@@ -32,6 +34,9 @@ meson_options_help() {
printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
+ printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
printf "%s\n" 'disabled with --disable-FEATURE, default is enabled if available'
@@ -147,6 +152,7 @@ _meson_option_parse() {
--disable-alsa) printf "%s" -Dalsa=disabled ;;
--enable-attr) printf "%s" -Dattr=enabled ;;
--disable-attr) printf "%s" -Dattr=disabled ;;
+ --audio-drv-list=*) quote_sh "-Daudio_drv_list=$2" ;;
--enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
--disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
--enable-avx2) printf "%s" -Davx2=enabled ;;
@@ -229,6 +235,7 @@ _meson_option_parse() {
--disable-hax) printf "%s" -Dhax=disabled ;;
--enable-hvf) printf "%s" -Dhvf=enabled ;;
--disable-hvf) printf "%s" -Dhvf=disabled ;;
+ --iasl=*) quote_sh "-Diasl=$2" ;;
--enable-iconv) printf "%s" -Diconv=enabled ;;
--disable-iconv) printf "%s" -Diconv=disabled ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
@@ -333,6 +340,7 @@ _meson_option_parse() {
--disable-snappy) printf "%s" -Dsnappy=disabled ;;
--enable-sparse) printf "%s" -Dsparse=enabled ;;
--disable-sparse) printf "%s" -Dsparse=disabled ;;
+ --sphinx-build=*) quote_sh "-Dsphinx_build=$2" ;;
--enable-spice) printf "%s" -Dspice=enabled ;;
--disable-spice) printf "%s" -Dspice=disabled ;;
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
@@ -348,6 +356,7 @@ _meson_option_parse() {
--enable-tpm) printf "%s" -Dtpm=enabled ;;
--disable-tpm) printf "%s" -Dtpm=disabled ;;
--enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
+ --with-trace-file=*) quote_sh "-Dtrace_file=$2" ;;
--enable-u2f) printf "%s" -Du2f=enabled ;;
--disable-u2f) printf "%s" -Du2f=disabled ;;
--enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 09/25] meson, configure: move --tls-priority to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (7 preceding siblings ...)
2022-04-29 15:22 ` [PULL 08/25] configure: switch string options to automatic parsing Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 10/25] meson, configure: move bdrv whitelists " Paolo Bonzini
` (16 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Use the new support for string option parsing.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 5 -----
meson.build | 3 ++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/configure b/configure
index c1eb4923dd..9062f9ccd6 100755
--- a/configure
+++ b/configure
@@ -311,7 +311,6 @@ bsd_user=""
pkgversion=""
pie=""
coroutine=""
-tls_priority="NORMAL"
plugins="$default_feature"
meson=""
meson_args=""
@@ -939,8 +938,6 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
- --tls-priority=*) tls_priority="$optarg"
- ;;
--disable-vhost-user) vhost_user="no"
;;
--enable-vhost-user) vhost_user="yes"
@@ -1170,7 +1167,6 @@ Advanced options (experts only):
--with-coroutine=BACKEND coroutine backend. Supported options:
ucontext, sigaltstack, windows
--enable-gcov enable test coverage analysis with gcov
- --tls-priority default TLS protocol/cipher priority string
--enable-plugins
enable plugins via shared library loading
--disable-containers don't use containers for cross-building
@@ -2201,7 +2197,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 31380f1f2e..f4f518c7b8 100644
--- a/meson.build
+++ b/meson.build
@@ -1598,6 +1598,7 @@ foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
config_host_data.set_quoted('CONFIG_TRACE_FILE', get_option('trace_file'))
+config_host_data.set_quoted('CONFIG_TLS_PRIORITY', get_option('tls_priority'))
if iasl.found()
config_host_data.set_quoted('CONFIG_IASL', iasl.full_path())
endif
@@ -3819,7 +3820,7 @@ summary(summary_info, bool_yn: true, section: 'Block layer support')
# Crypto
summary_info = {}
-summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
+summary_info += {'TLS priority': get_option('tls_priority')}
summary_info += {'GNUTLS support': gnutls}
if gnutls.found()
summary_info += {' GNUTLS crypto': gnutls_crypto.found()}
diff --git a/meson_options.txt b/meson_options.txt
index 390701517c..c8e0a10d91 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -14,6 +14,8 @@ option('sphinx_build', type : 'string', value : '',
description: 'Use specified sphinx-build for building document')
option('iasl', type : 'string', value : '',
description: 'Path to ACPI disassembler')
+option('tls_priority', type : 'string', value : 'NORMAL',
+ description: 'Default TLS protocol/cipher priority string')
option('default_devices', type : 'boolean', value : true,
description: 'Include a default selection of devices in emulators')
option('audio_drv_list', type: 'array', value: ['default'],
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index bdaa128ee4..3919eeec0b 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -36,6 +36,8 @@ meson_options_help() {
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
+ printf "%s\n" ' [NORMAL]'
printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
@@ -351,6 +353,7 @@ _meson_option_parse() {
--disable-tcg) printf "%s" -Dtcg=disabled ;;
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
--disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
+ --tls-priority=*) quote_sh "-Dtls_priority=$2" ;;
--enable-tools) printf "%s" -Dtools=enabled ;;
--disable-tools) printf "%s" -Dtools=disabled ;;
--enable-tpm) printf "%s" -Dtpm=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 10/25] meson, configure: move bdrv whitelists to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (8 preceding siblings ...)
2022-04-29 15:22 ` [PULL 09/25] meson, configure: move --tls-priority to meson Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 11/25] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
` (15 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Use the new support for string option parsing.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 14 --------------
meson.build | 27 ++++++++++++++++-----------
meson_options.txt | 4 ++++
scripts/meson-buildoptions.sh | 8 ++++++++
4 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/configure b/configure
index 9062f9ccd6..e81ea490da 100755
--- a/configure
+++ b/configure
@@ -235,8 +235,6 @@ interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
-block_drv_rw_whitelist=""
-block_drv_ro_whitelist=""
host_cc="cc"
lto="false"
stack_protector=""
@@ -816,10 +814,6 @@ for opt do
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
- ;;
- --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
- ;;
--enable-debug-tcg) debug_tcg="yes"
;;
--disable-debug-tcg) debug_tcg="no"
@@ -1155,12 +1149,6 @@ Advanced options (experts only):
--disable-stack-protector disable compiler-provided stack protection
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
--block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
- --block-drv-rw-whitelist=L
- set block driver read-write whitelist
- (by default affects only QEMU, not tools like qemu-img)
- --block-drv-ro-whitelist=L
- set block driver read-only whitelist
- (by default affects only QEMU, not tools like qemu-img)
--with-trace-file=NAME Full PATH,NAME of file to store traces
Default:trace-<pid>
--cpu=CPU Build for host CPU [$cpu]
@@ -2185,8 +2173,6 @@ fi
if test "$static" = "yes" ; then
echo "CONFIG_STATIC=y" >> $config_host_mak
fi
-echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
-echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
qemu_version=$(head $source_path/VERSION)
echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
diff --git a/meson.build b/meson.build
index f4f518c7b8..750840a0e9 100644
--- a/meson.build
+++ b/meson.build
@@ -1594,6 +1594,19 @@ have_virtfs = get_option('virtfs') \
have_virtfs_proxy_helper = targetos != 'darwin' and have_virtfs and have_tools
+if get_option('block_drv_ro_whitelist') == ''
+ config_host_data.set('CONFIG_BDRV_RO_WHITELIST', '')
+else
+ config_host_data.set('CONFIG_BDRV_RO_WHITELIST',
+ '"' + get_option('block_drv_ro_whitelist').replace(',', '", "') + '"')
+endif
+if get_option('block_drv_rw_whitelist') == ''
+ config_host_data.set('CONFIG_BDRV_RW_WHITELIST', '')
+else
+ config_host_data.set('CONFIG_BDRV_RW_WHITELIST',
+ '"' + get_option('block_drv_rw_whitelist').replace(',', '", "') + '"')
+endif
+
foreach k : get_option('trace_backends')
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
endforeach
@@ -2208,16 +2221,8 @@ config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
'HAVE_GDB_BIN']
-arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
foreach k, v: config_host
- if ignored.contains(k)
- # do nothing
- elif arrays.contains(k)
- if v != ''
- v = '"' + '", "'.join(v.split()) + '", '
- endif
- config_host_data.set(k, v)
- elif k.startswith('CONFIG_')
+ if k.startswith('CONFIG_') and not ignored.contains(k)
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
@@ -3799,8 +3804,8 @@ summary_info = {}
summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
summary_info += {'coroutine pool': have_coroutine_pool}
if have_block
- summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
- summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
+ summary_info += {'Block whitelist (rw)': get_option('block_drv_rw_whitelist')}
+ summary_info += {'Block whitelist (ro)': get_option('block_drv_ro_whitelist')}
summary_info += {'Use block whitelist in tools': get_option('block_drv_whitelist_in_tools')}
summary_info += {'VirtFS support': have_virtfs}
summary_info += {'build virtiofs daemon': have_virtiofsd}
diff --git a/meson_options.txt b/meson_options.txt
index c8e0a10d91..430674522f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -21,6 +21,10 @@ option('default_devices', type : 'boolean', value : true,
option('audio_drv_list', type: 'array', value: ['default'],
choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl'],
description: 'Set audio driver list')
+option('block_drv_rw_whitelist', type : 'string', value : '',
+ description: 'set block driver read-write whitelist (by default affects only QEMU, not tools like qemu-img)')
+option('block_drv_ro_whitelist', type : 'string', value : '',
+ description: 'set block driver read-only whitelist (by default affects only QEMU, not tools like qemu-img)')
option('fuzzing_engine', type : 'string', value : '',
description: 'fuzzing engine library for OSS-Fuzz')
option('trace_file', type: 'string', value: 'trace',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 3919eeec0b..d5cba2638a 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -2,6 +2,12 @@
meson_options_help() {
printf "%s\n" ' --audio-drv-list=CHOICES Set audio driver list [default] (choices:'
printf "%s\n" ' alsa/coreaudio/default/dsound/jack/oss/pa/sdl)'
+ printf "%s\n" ' --block-drv-ro-whitelist=VALUE'
+ printf "%s\n" ' set block driver read-only whitelist (by default'
+ printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
+ printf "%s\n" ' --block-drv-rw-whitelist=VALUE'
+ printf "%s\n" ' set block driver read-write whitelist (by default'
+ printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
@@ -161,6 +167,8 @@ _meson_option_parse() {
--disable-avx2) printf "%s" -Davx2=disabled ;;
--enable-avx512f) printf "%s" -Davx512f=enabled ;;
--disable-avx512f) printf "%s" -Davx512f=disabled ;;
+ --block-drv-ro-whitelist=*) quote_sh "-Dblock_drv_ro_whitelist=$2" ;;
+ --block-drv-rw-whitelist=*) quote_sh "-Dblock_drv_rw_whitelist=$2" ;;
--enable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=true ;;
--disable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=false ;;
--enable-bochs) printf "%s" -Dbochs=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 11/25] meson, configure: move --with-pkgversion, CONFIG_STAMP to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (9 preceding siblings ...)
2022-04-29 15:22 ` [PULL 10/25] meson, configure: move bdrv whitelists " Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:22 ` [PULL 12/25] meson, configure: move --interp-prefix " Paolo Bonzini
` (14 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
The hash is now generated with a Python script.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 23 -----------------------
docs/meson.build | 2 +-
meson.build | 10 +++++++++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.py | 1 +
scripts/meson-buildoptions.sh | 3 +++
scripts/qemu-stamp.py | 24 ++++++++++++++++++++++++
7 files changed, 40 insertions(+), 25 deletions(-)
create mode 100644 scripts/qemu-stamp.py
diff --git a/configure b/configure
index e81ea490da..b8d3d04072 100755
--- a/configure
+++ b/configure
@@ -306,7 +306,6 @@ qemu_suffix="qemu"
softmmu="yes"
linux_user=""
bsd_user=""
-pkgversion=""
pie=""
coroutine=""
plugins="$default_feature"
@@ -897,8 +896,6 @@ for opt do
;;
--enable-fdt=*) fdt="$optarg"
;;
- --with-pkgversion=*) pkgversion="$optarg"
- ;;
--with-coroutine=*) coroutine="$optarg"
;;
--disable-vhost-net) vhost_net="no"
@@ -1136,7 +1133,6 @@ Advanced options (experts only):
--firmwarepath=PATH search PATH for firmware files
--efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
- --with-pkgversion=VERS use specified string as sub-version of the package
--without-default-features default all --enable-* options to "disabled"
--without-default-devices do not include any device that is not needed to
start the emulator (only use if you are including
@@ -1723,21 +1719,6 @@ if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
fi
fi
-##########################################
-# SHA command probe for modules
-if test "$modules" = yes; then
- shacmd_probe="sha1sum sha1 shasum"
- for c in $shacmd_probe; do
- if has $c; then
- shacmd="$c"
- break
- fi
- done
- if test "$shacmd" = ""; then
- error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
- fi
-fi
-
##########################################
# fdt probe
@@ -2174,13 +2155,9 @@ if test "$static" = "yes" ; then
echo "CONFIG_STATIC=y" >> $config_host_mak
fi
qemu_version=$(head $source_path/VERSION)
-echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
if test "$modules" = "yes"; then
- # $shacmd can generate a hash started with digit, which the compiler doesn't
- # like as an symbol. So prefix it with an underscore
- echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
diff --git a/docs/meson.build b/docs/meson.build
index 831d4aea2b..9136fed3b7 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -35,7 +35,7 @@ if sphinx_build.found()
endif
if build_docs
- SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + config_host['PKGVERSION']]
+ SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + get_option('pkgversion')]
man_pages = {
'qemu-ga.8': (have_ga ? 'man8' : ''),
diff --git a/meson.build b/meson.build
index 750840a0e9..0ff752343a 100644
--- a/meson.build
+++ b/meson.build
@@ -1628,6 +1628,14 @@ config_host_data.set_quoted('CONFIG_QEMU_LOCALSTATEDIR', get_option('prefix') /
config_host_data.set_quoted('CONFIG_QEMU_MODDIR', get_option('prefix') / qemu_moddir)
config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_option('sysconfdir'))
+if config_host.has_key('CONFIG_MODULES')
+ config_host_data.set('CONFIG_STAMP', run_command(
+ meson.current_source_dir() / 'scripts/qemu-stamp.py',
+ meson.project_version(), get_option('pkgversion'), '--',
+ meson.current_source_dir() / 'configure',
+ capture: true, check: true).stdout().strip())
+endif
+
have_slirp_smbd = get_option('slirp_smbd') \
.require(targetos != 'windows', error_message: 'Host smbd not supported on this platform.') \
.allowed()
@@ -2798,7 +2806,7 @@ tracetool_depends = files(
qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
meson.current_source_dir(),
- config_host['PKGVERSION'], meson.project_version()]
+ get_option('pkgversion'), meson.project_version()]
qemu_version = custom_target('qemu-version.h',
output: 'qemu-version.h',
command: qemu_version_cmd,
diff --git a/meson_options.txt b/meson_options.txt
index 430674522f..bdb45092ca 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -8,6 +8,8 @@ option('docdir', type : 'string', value : 'doc',
description: 'Base directory for documentation installation (can be empty)')
option('qemu_firmwarepath', type : 'string', value : '',
description: 'search PATH for firmware files')
+option('pkgversion', type : 'string', value : '',
+ description: 'use specified string as sub-version of the package')
option('smbd', type : 'string', value : '',
description: 'Path to smbd for slirp networking')
option('sphinx_build', type : 'string', value : '',
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 3e540e8bb3..0f9603a7f6 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -36,6 +36,7 @@
OPTION_NAMES = {
"malloc": "enable-malloc",
+ "pkgversion": "with-pkgversion",
"trace_backends": "enable-trace-backends",
"trace_file": "with-trace-file",
}
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index d5cba2638a..3a86dd7271 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -44,6 +44,8 @@ meson_options_help() {
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
+ printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the'
+ printf "%s\n" ' package'
printf "%s\n" ' --with-trace-file=VALUE Trace file prefix for simple backend [trace]'
printf "%s\n" ''
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
@@ -309,6 +311,7 @@ _meson_option_parse() {
--disable-pa) printf "%s" -Dpa=disabled ;;
--enable-parallels) printf "%s" -Dparallels=enabled ;;
--disable-parallels) printf "%s" -Dparallels=disabled ;;
+ --with-pkgversion=*) quote_sh "-Dpkgversion=$2" ;;
--enable-png) printf "%s" -Dpng=enabled ;;
--disable-png) printf "%s" -Dpng=disabled ;;
--enable-profiler) printf "%s" -Dprofiler=true ;;
diff --git a/scripts/qemu-stamp.py b/scripts/qemu-stamp.py
new file mode 100644
index 0000000000..7beeeb07ed
--- /dev/null
+++ b/scripts/qemu-stamp.py
@@ -0,0 +1,24 @@
+#! /usr/bin/env python3
+
+# Usage: scripts/qemu-stamp.py STRING1 STRING2... -- FILE1 FILE2...
+import hashlib
+import os
+import sys
+
+sha = hashlib.sha1()
+is_file = False
+for arg in sys.argv[1:]:
+ if arg == '--':
+ is_file = True
+ continue
+ if is_file:
+ with open(arg, 'rb') as f:
+ for chunk in iter(lambda: f.read(65536), b''):
+ sha.update(chunk)
+ else:
+ sha.update(os.fsencode(arg))
+ sha.update(b'\n')
+
+# The hash can start with a digit, which the compiler doesn't
+# like as an symbol. So prefix it with an underscore
+print("_" + sha.hexdigest())
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 12/25] meson, configure: move --interp-prefix to meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (10 preceding siblings ...)
2022-04-29 15:22 ` [PULL 11/25] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
@ 2022-04-29 15:22 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 13/25] meson: always combine directories with prefix Paolo Bonzini
` (13 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
This is the last CONFIG_* entry in config-host.mak that had to be
special cased.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 ------
meson.build | 6 ++----
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
4 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/configure b/configure
index b8d3d04072..4102683d75 100755
--- a/configure
+++ b/configure
@@ -231,7 +231,6 @@ fi
# default parameters
cpu=""
-interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_compile="no"
cross_prefix=""
@@ -697,8 +696,6 @@ for opt do
;;
--prefix=*) prefix="$optarg"
;;
- --interp-prefix=*) interp_prefix="$optarg"
- ;;
--cross-prefix=*)
;;
--cc=*)
@@ -1091,8 +1088,6 @@ Options: [defaults in brackets after descriptions]
Standard options:
--help print this message
--prefix=PREFIX install in PREFIX [$prefix]
- --interp-prefix=PREFIX where to find shared libraries, etc.
- use %M for cpu name [$interp_prefix]
--target-list=LIST set target list (default: build all)
$(echo Available targets: $default_target_list | \
fold -s -w 53 | sed -e 's/^/ /')
@@ -2289,7 +2284,6 @@ for target in $target_list; do
esac
done
-echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
if test "$default_targets" = "yes"; then
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
fi
diff --git a/meson.build b/meson.build
index 0ff752343a..83b06ca611 100644
--- a/meson.build
+++ b/meson.build
@@ -2227,10 +2227,8 @@ if targetos == 'windows' and link_language == 'cpp'
endif
config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
-ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
- 'HAVE_GDB_BIN']
foreach k, v: config_host
- if k.startswith('CONFIG_') and not ignored.contains(k)
+ if k.startswith('CONFIG_')
config_host_data.set(k, v == 'y' ? 1 : v)
endif
endforeach
@@ -2336,7 +2334,7 @@ foreach target : target_dirs
config_target += {
'CONFIG_USER_ONLY': 'y',
'CONFIG_QEMU_INTERP_PREFIX':
- config_host['CONFIG_QEMU_INTERP_PREFIX'].format(config_target['TARGET_NAME'])
+ get_option('interp_prefix').replace('%M', config_target['TARGET_NAME'])
}
endif
diff --git a/meson_options.txt b/meson_options.txt
index bdb45092ca..ae6c4b2475 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -27,6 +27,8 @@ option('block_drv_rw_whitelist', type : 'string', value : '',
description: 'set block driver read-write whitelist (by default affects only QEMU, not tools like qemu-img)')
option('block_drv_ro_whitelist', type : 'string', value : '',
description: 'set block driver read-only whitelist (by default affects only QEMU, not tools like qemu-img)')
+option('interp_prefix', type : 'string', value : '/usr/gnemul/qemu-%M',
+ description: 'where to find shared libraries etc., use %M for cpu name')
option('fuzzing_engine', type : 'string', value : '',
description: 'fuzzing engine library for OSS-Fuzz')
option('trace_file', type: 'string', value: 'trace',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 3a86dd7271..59c4a27c5a 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -41,6 +41,8 @@ meson_options_help() {
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
+ printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
@@ -252,6 +254,7 @@ _meson_option_parse() {
--disable-iconv) printf "%s" -Diconv=disabled ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
+ --interp-prefix=*) quote_sh "-Dinterp_prefix=$2" ;;
--enable-jack) printf "%s" -Djack=enabled ;;
--disable-jack) printf "%s" -Djack=disabled ;;
--enable-keyring) printf "%s" -Dkeyring=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 13/25] meson: always combine directories with prefix
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (11 preceding siblings ...)
2022-04-29 15:22 ` [PULL 12/25] meson, configure: move --interp-prefix " Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 14/25] configure: switch directory options to automatic parsing Paolo Bonzini
` (12 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Meson allows directories such as "bindir" to be relative to the prefix. Right
now configure is forcing an absolute path, but that is not really necessary:
just make sure all uses of the directory variables are prefixed appropriately.
Do the same also for the options that are custom for QEMU, i.e. docdir and
qemu_firmwarepath.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/meson.build b/meson.build
index 83b06ca611..21135fbc52 100644
--- a/meson.build
+++ b/meson.build
@@ -1620,7 +1620,7 @@ config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
config_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir)
config_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir)
-config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('qemu_firmwarepath'))
+config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('prefix') / get_option('qemu_firmwarepath'))
config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir'))
config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir)
config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir'))
@@ -3628,20 +3628,20 @@ endif
summary_info = {}
summary_info += {'Install prefix': get_option('prefix')}
summary_info += {'BIOS directory': qemu_datadir}
-summary_info += {'firmware path': get_option('qemu_firmwarepath')}
-summary_info += {'binary directory': get_option('bindir')}
-summary_info += {'library directory': get_option('libdir')}
+summary_info += {'firmware path': get_option('prefix') / get_option('qemu_firmwarepath')}
+summary_info += {'binary directory': get_option('prefix') / get_option('bindir')}
+summary_info += {'library directory': get_option('prefix') / get_option('libdir')}
summary_info += {'module directory': qemu_moddir}
-summary_info += {'libexec directory': get_option('libexecdir')}
-summary_info += {'include directory': get_option('includedir')}
-summary_info += {'config directory': get_option('sysconfdir')}
+summary_info += {'libexec directory': get_option('prefix') / get_option('libexecdir')}
+summary_info += {'include directory': get_option('prefix') / get_option('includedir')}
+summary_info += {'config directory': get_option('prefix') / get_option('sysconfdir')}
if targetos != 'windows'
- summary_info += {'local state directory': get_option('localstatedir')}
- summary_info += {'Manual directory': get_option('mandir')}
+ summary_info += {'local state directory': get_option('prefix') / get_option('localstatedir')}
+ summary_info += {'Manual directory': get_option('prefix') / get_option('mandir')}
else
summary_info += {'local state directory': 'queried at runtime'}
endif
-summary_info += {'Doc directory': get_option('docdir')}
+summary_info += {'Doc directory': get_option('prefix') / get_option('docdir')}
summary_info += {'Build directory': meson.current_build_dir()}
summary_info += {'Source path': meson.current_source_dir()}
summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 14/25] configure: switch directory options to automatic parsing
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (12 preceding siblings ...)
2022-04-29 15:23 ` [PULL 13/25] meson: always combine directories with prefix Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 15/25] meson: pass more options directly as -D Paolo Bonzini
` (11 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
While prefix, bindir and qemu_suffix needs special treatment due to
differences between Windows and POSIX systems, everything else
needs no extra code in configure.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 58 ++---------------------------------
meson_options.txt | 4 +--
scripts/meson-buildoptions.py | 11 +++++--
scripts/meson-buildoptions.sh | 21 +++++++++++++
4 files changed, 34 insertions(+), 60 deletions(-)
diff --git a/configure b/configure
index 4102683d75..b8e3176808 100755
--- a/configure
+++ b/configure
@@ -311,6 +311,7 @@ plugins="$default_feature"
meson=""
meson_args=""
ninja=""
+bindir="bin"
skip_meson=no
# The following Meson options are handled manually (still they
@@ -670,6 +671,7 @@ if test "$mingw32" = "yes" ; then
CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
write_c_skeleton;
prefix="/qemu"
+ bindir=""
qemu_suffix=""
fi
@@ -776,30 +778,10 @@ for opt do
static="yes"
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
;;
- --mandir=*) mandir="$optarg"
- ;;
--bindir=*) bindir="$optarg"
;;
- --libdir=*) libdir="$optarg"
- ;;
- --libexecdir=*) libexecdir="$optarg"
- ;;
- --includedir=*) includedir="$optarg"
- ;;
- --datadir=*) datadir="$optarg"
- ;;
--with-suffix=*) qemu_suffix="$optarg"
;;
- --docdir=*) docdir="$optarg"
- ;;
- --localedir=*) localedir="$optarg"
- ;;
- --sysconfdir=*) sysconfdir="$optarg"
- ;;
- --localstatedir=*) local_statedir="$optarg"
- ;;
- --firmwarepath=*) firmwarepath="$optarg"
- ;;
--host=*|--build=*|\
--disable-dependency-tracking|\
--sbindir=*|--sharedstatedir=*|\
@@ -1022,23 +1004,6 @@ case $git_submodules_action in
;;
esac
-libdir="${libdir:-$prefix/lib}"
-libexecdir="${libexecdir:-$prefix/libexec}"
-includedir="${includedir:-$prefix/include}"
-
-if test "$mingw32" = "yes" ; then
- bindir="${bindir:-$prefix}"
-else
- bindir="${bindir:-$prefix/bin}"
-fi
-mandir="${mandir:-$prefix/share/man}"
-datadir="${datadir:-$prefix/share}"
-docdir="${docdir:-$prefix/share/doc}"
-sysconfdir="${sysconfdir:-$prefix/etc}"
-local_statedir="${local_statedir:-$prefix/var}"
-firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
-localedir="${localedir:-$datadir/locale}"
-
if eval test -z "\${cross_cc_$cpu}"; then
eval "cross_cc_${cpu}=\$cc"
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
@@ -1116,16 +1081,7 @@ Advanced options (experts only):
--with-git-submodules=validate fail if git submodules are not up to date
--with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
--static enable static build [$static]
- --mandir=PATH install man pages in PATH
- --datadir=PATH install firmware in PATH/$qemu_suffix
- --localedir=PATH install translation in PATH/$qemu_suffix
- --docdir=PATH install documentation in PATH/$qemu_suffix
--bindir=PATH install binaries in PATH
- --libdir=PATH install libraries in PATH
- --libexecdir=PATH install helper binaries in PATH
- --sysconfdir=PATH install config in PATH/$qemu_suffix
- --localstatedir=PATH install local state in PATH (set at runtime on win32)
- --firmwarepath=PATH search PATH for firmware files
--efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
--without-default-features default all --enable-* options to "disabled"
@@ -2410,18 +2366,8 @@ if test "$skip_meson" = no; then
run_meson() {
NINJA=$ninja $meson setup \
--prefix "$prefix" \
- --libdir "$libdir" \
- --libexecdir "$libexecdir" \
--bindir "$bindir" \
- --includedir "$includedir" \
- --datadir "$datadir" \
- --mandir "$mandir" \
- --sysconfdir "$sysconfdir" \
- --localedir "$localedir" \
- --localstatedir "$local_statedir" \
-Ddefault_devices=$default_devices \
- -Ddocdir="$docdir" \
- -Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
diff --git a/meson_options.txt b/meson_options.txt
index ae6c4b2475..15fe40c700 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -4,9 +4,9 @@
option('qemu_suffix', type : 'string', value: 'qemu',
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
-option('docdir', type : 'string', value : 'doc',
+option('docdir', type : 'string', value : 'share/doc',
description: 'Base directory for documentation installation (can be empty)')
-option('qemu_firmwarepath', type : 'string', value : '',
+option('qemu_firmwarepath', type : 'string', value : 'qemu-firmware',
description: 'search PATH for firmware files')
option('pkgversion', type : 'string', value : '',
description: 'use specified string as sub-version of the package')
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 0f9603a7f6..45cda8cd84 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -27,9 +27,7 @@
SKIP_OPTIONS = {
"default_devices",
- "docdir",
"fuzzing_engine",
- "qemu_firmwarepath",
"qemu_suffix",
"smbd",
}
@@ -37,12 +35,21 @@
OPTION_NAMES = {
"malloc": "enable-malloc",
"pkgversion": "with-pkgversion",
+ "qemu_firmwarepath": "firmwarepath",
"trace_backends": "enable-trace-backends",
"trace_file": "with-trace-file",
}
BUILTIN_OPTIONS = {
+ "datadir",
+ "includedir",
+ "libdir",
+ "libexecdir",
+ "localedir",
+ "localstatedir",
+ "mandir",
"strip",
+ "sysconfdir",
}
LINE_WIDTH = 76
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 59c4a27c5a..f6a9b05c40 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -8,8 +8,11 @@ meson_options_help() {
printf "%s\n" ' --block-drv-rw-whitelist=VALUE'
printf "%s\n" ' set block driver read-write whitelist (by default'
printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
+ printf "%s\n" ' --datadir=VALUE Data file directory [share]'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
+ printf "%s\n" ' --docdir=VALUE Base directory for documentation installation'
+ printf "%s\n" ' (can be empty) [share/doc]'
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
printf "%s\n" ' use block whitelist also in tools instead of only'
printf "%s\n" ' QEMU'
@@ -40,10 +43,18 @@ meson_options_help() {
printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
+ printf "%s\n" ' --firmwarepath=VALUE search PATH for firmware files [qemu-firmware]'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
+ printf "%s\n" ' --includedir=VALUE Header file directory [include]'
printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
+ printf "%s\n" ' --libdir=VALUE Library directory [lib64]'
+ printf "%s\n" ' --libexecdir=VALUE Library executable directory [libexec]'
+ printf "%s\n" ' --localedir=VALUE Locale data directory [share/locale]'
+ printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]'
+ printf "%s\n" ' --mandir=VALUE Manual page directory [share/man]'
printf "%s\n" ' --sphinx-build=VALUE Use specified sphinx-build for building document'
+ printf "%s\n" ' --sysconfdir=VALUE Sysconf data directory [etc]'
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
printf "%s\n" ' [NORMAL]'
printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the'
@@ -206,6 +217,7 @@ _meson_option_parse() {
--disable-curl) printf "%s" -Dcurl=disabled ;;
--enable-curses) printf "%s" -Dcurses=enabled ;;
--disable-curses) printf "%s" -Dcurses=disabled ;;
+ --datadir=*) quote_sh "-Ddatadir=$2" ;;
--enable-dbus-display) printf "%s" -Ddbus_display=enabled ;;
--disable-dbus-display) printf "%s" -Ddbus_display=disabled ;;
--enable-debug-mutex) printf "%s" -Ddebug_mutex=true ;;
@@ -214,6 +226,7 @@ _meson_option_parse() {
--disable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=false ;;
--enable-dmg) printf "%s" -Ddmg=enabled ;;
--disable-dmg) printf "%s" -Ddmg=disabled ;;
+ --docdir=*) quote_sh "-Ddocdir=$2" ;;
--enable-docs) printf "%s" -Ddocs=enabled ;;
--disable-docs) printf "%s" -Ddocs=disabled ;;
--enable-dsound) printf "%s" -Ddsound=enabled ;;
@@ -252,6 +265,7 @@ _meson_option_parse() {
--iasl=*) quote_sh "-Diasl=$2" ;;
--enable-iconv) printf "%s" -Diconv=enabled ;;
--disable-iconv) printf "%s" -Diconv=disabled ;;
+ --includedir=*) quote_sh "-Dincludedir=$2" ;;
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
--interp-prefix=*) quote_sh "-Dinterp_prefix=$2" ;;
@@ -265,6 +279,8 @@ _meson_option_parse() {
--disable-l2tpv3) printf "%s" -Dl2tpv3=disabled ;;
--enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
--disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
+ --libdir=*) quote_sh "-Dlibdir=$2" ;;
+ --libexecdir=*) quote_sh "-Dlibexecdir=$2" ;;
--enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
--disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
--enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
@@ -283,6 +299,8 @@ _meson_option_parse() {
--disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
--enable-live-block-migration) printf "%s" -Dlive_block_migration=enabled ;;
--disable-live-block-migration) printf "%s" -Dlive_block_migration=disabled ;;
+ --localedir=*) quote_sh "-Dlocaledir=$2" ;;
+ --localstatedir=*) quote_sh "-Dlocalstatedir=$2" ;;
--enable-lzfse) printf "%s" -Dlzfse=enabled ;;
--disable-lzfse) printf "%s" -Dlzfse=disabled ;;
--enable-lzo) printf "%s" -Dlzo=enabled ;;
@@ -290,6 +308,7 @@ _meson_option_parse() {
--enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
--enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
--disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
+ --mandir=*) quote_sh "-Dmandir=$2" ;;
--enable-membarrier) printf "%s" -Dmembarrier=enabled ;;
--disable-membarrier) printf "%s" -Dmembarrier=disabled ;;
--enable-module-upgrades) printf "%s" -Dmodule_upgrades=true ;;
@@ -325,6 +344,7 @@ _meson_option_parse() {
--disable-qcow1) printf "%s" -Dqcow1=disabled ;;
--enable-qed) printf "%s" -Dqed=enabled ;;
--disable-qed) printf "%s" -Dqed=disabled ;;
+ --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$2" ;;
--enable-qga-vss) printf "%s" -Dqga_vss=enabled ;;
--disable-qga-vss) printf "%s" -Dqga_vss=disabled ;;
--enable-qom-cast-debug) printf "%s" -Dqom_cast_debug=true ;;
@@ -363,6 +383,7 @@ _meson_option_parse() {
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
--enable-strip) printf "%s" -Dstrip=true ;;
--disable-strip) printf "%s" -Dstrip=false ;;
+ --sysconfdir=*) quote_sh "-Dsysconfdir=$2" ;;
--enable-tcg) printf "%s" -Dtcg=enabled ;;
--disable-tcg) printf "%s" -Dtcg=disabled ;;
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 15/25] meson: pass more options directly as -D
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (13 preceding siblings ...)
2022-04-29 15:23 ` [PULL 14/25] configure: switch directory options to automatic parsing Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 16/25] configure: omit options with default values from meson command line Paolo Bonzini
` (10 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
If an option is not used anywhere by the configure script, it can be just
added to $meson_options even if it is not parsed by the automatically
generated bits in scripts/meson-buildoptions.sh.
The only slightly tricky case is $debug, where the
if test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
debug=no
fi
assignment is dead; configure sets fortify_source=no whenever debug=yes.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 39 ++++++++++-------------------------
meson.build | 2 +-
scripts/meson-buildoptions.py | 4 ++++
scripts/meson-buildoptions.sh | 6 ++++++
4 files changed, 22 insertions(+), 29 deletions(-)
diff --git a/configure b/configure
index b8e3176808..fc7868948b 100755
--- a/configure
+++ b/configure
@@ -235,7 +235,6 @@ static="no"
cross_compile="no"
cross_prefix=""
host_cc="cc"
-lto="false"
stack_protector=""
safe_stack=""
use_containers="yes"
@@ -291,13 +290,10 @@ vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
-debug_info="yes"
debug_tcg="no"
-debug="no"
sanitizers="no"
tsan="no"
fortify_source="yes"
-gcov="no"
EXESUF=""
modules="no"
prefix="/usr/local"
@@ -327,10 +323,7 @@ else
fi
fdt="auto"
-# 2. Support --with/--without option
-default_devices="true"
-
-# 3. Automatically enable/disable other options
+# 2. Automatically enable/disable other options
tcg="enabled"
cfi="false"
@@ -680,6 +673,9 @@ werror=""
. $source_path/scripts/meson-buildoptions.sh
meson_options=
+meson_option_add() {
+ meson_options="$meson_options $(quote_sh "$1")"
+}
meson_option_parse() {
meson_options="$meson_options $(_meson_option_parse "$@")"
if test $? -eq 1; then
@@ -732,9 +728,9 @@ for opt do
;;
--cross-cc-*)
;;
- --enable-debug-info) debug_info="yes"
+ --enable-debug-info) meson_option_add -Ddebug=true
;;
- --disable-debug-info) debug_info="no"
+ --disable-debug-info) meson_option_add -Ddebug=false
;;
--enable-modules)
modules="yes"
@@ -754,9 +750,9 @@ for opt do
error_exit "Can't mix --target-list-exclude with --target-list"
fi
;;
- --with-default-devices) default_devices="true"
+ --with-default-devices) meson_option_add -Ddefault_devices=true
;;
- --without-default-devices) default_devices="false"
+ --without-default-devices) meson_option_add -Ddefault_devices=false
;;
--with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
;;
@@ -772,8 +768,6 @@ for opt do
;;
--without-default-features) # processed above
;;
- --enable-gcov) gcov="yes"
- ;;
--static)
static="yes"
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
@@ -800,7 +794,7 @@ for opt do
# Enable debugging options that aren't excessively noisy
debug_tcg="yes"
meson_option_parse --enable-debug-mutex ""
- debug="yes"
+ meson_option_add -Doptimization=0
fortify_source="no"
;;
--enable-sanitizers) sanitizers="yes"
@@ -849,10 +843,6 @@ for opt do
;;
--disable-werror) werror="no"
;;
- --enable-lto) lto="true"
- ;;
- --disable-lto) lto="false"
- ;;
--enable-stack-protector) stack_protector="yes"
;;
--disable-stack-protector) stack_protector="no"
@@ -863,7 +853,7 @@ for opt do
;;
--enable-cfi)
cfi="true";
- lto="true";
+ meson_option_add -Db_lto=true
;;
--disable-cfi) cfi="false"
;;
@@ -1101,7 +1091,6 @@ Advanced options (experts only):
--cpu=CPU Build for host CPU [$cpu]
--with-coroutine=BACKEND coroutine backend. Supported options:
ucontext, sigaltstack, windows
- --enable-gcov enable test coverage analysis with gcov
--enable-plugins
enable plugins via shared library loading
--disable-containers don't use containers for cross-building
@@ -1117,7 +1106,6 @@ cat << EOF
modules modules support (non-Windows)
debug-tcg TCG debugging (default is disabled)
debug-info debugging information
- lto Enable Link-Time Optimization.
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
@@ -1938,7 +1926,6 @@ write_c_skeleton
if test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
- debug=no
fi
case "$ARCH" in
@@ -2367,15 +2354,11 @@ if test "$skip_meson" = no; then
NINJA=$ninja $meson setup \
--prefix "$prefix" \
--bindir "$bindir" \
- -Ddefault_devices=$default_devices \
-Dqemu_suffix="$qemu_suffix" \
-Dsmbd="$smbd" \
- -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
- -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
- -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
- -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg \
+ -Dcfi=$cfi -Dtcg=$tcg \
-Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
diff --git a/meson.build b/meson.build
index 21135fbc52..19966e0a5a 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('qemu', ['c'], meson_version: '>=0.59.3',
default_options: ['warning_level=1', 'c_std=gnu11', 'cpp_std=gnu++11', 'b_colorout=auto',
- 'b_staticpic=false', 'stdsplit=false'],
+ 'b_staticpic=false', 'stdsplit=false', 'optimization=2'],
version: files('VERSION'))
add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true)
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index 45cda8cd84..e624c16b01 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -33,6 +33,8 @@
}
OPTION_NAMES = {
+ "b_coverage": "gcov",
+ "b_lto": "lto",
"malloc": "enable-malloc",
"pkgversion": "with-pkgversion",
"qemu_firmwarepath": "firmwarepath",
@@ -41,6 +43,8 @@
}
BUILTIN_OPTIONS = {
+ "b_coverage",
+ "b_lto",
"datadir",
"includedir",
"libdir",
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index f6a9b05c40..4b0770a9e0 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -27,7 +27,9 @@ meson_options_help() {
printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
+ printf "%s\n" ' --enable-gcov Enable coverage tracking.'
printf "%s\n" ' --enable-gprof QEMU profiling with gprof'
+ printf "%s\n" ' --enable-lto Use link time optimization'
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
printf "%s\n" ' jemalloc/system/tcmalloc)'
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
@@ -182,6 +184,10 @@ _meson_option_parse() {
--disable-avx2) printf "%s" -Davx2=disabled ;;
--enable-avx512f) printf "%s" -Davx512f=enabled ;;
--disable-avx512f) printf "%s" -Davx512f=disabled ;;
+ --enable-gcov) printf "%s" -Db_coverage=true ;;
+ --disable-gcov) printf "%s" -Db_coverage=false ;;
+ --enable-lto) printf "%s" -Db_lto=true ;;
+ --disable-lto) printf "%s" -Db_lto=false ;;
--block-drv-ro-whitelist=*) quote_sh "-Dblock_drv_ro_whitelist=$2" ;;
--block-drv-rw-whitelist=*) quote_sh "-Dblock_drv_rw_whitelist=$2" ;;
--enable-block-drv-whitelist-in-tools) printf "%s" -Dblock_drv_whitelist_in_tools=true ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 16/25] configure: omit options with default values from meson command line
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (14 preceding siblings ...)
2022-04-29 15:23 ` [PULL 15/25] meson: pass more options directly as -D Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 17/25] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
` (9 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
This has no functional change, it only makes the command line shorter
and nicer.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 29 +++++++++++++++++------------
meson.build | 2 +-
meson_options.txt | 2 +-
3 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/configure b/configure
index fc7868948b..1c88e697c5 100755
--- a/configure
+++ b/configure
@@ -2350,19 +2350,24 @@ if test "$skip_meson" = no; then
mv $cross config-meson.cross
rm -rf meson-private meson-info meson-logs
+
+ # Built-in options
+ test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
+ test "$default_feature" = no && meson_option_add -Dauto_features=disabled
+ test "$pie" = no && meson_option_add -Db_pie=false
+ test "$werror" = yes && meson_option_add -Dwerror=true
+
+ # QEMU options
+ test "$capstone" != auto && meson_option_add "-Dcapstone=$capstone"
+ test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
+ test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
+ test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
+ test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
+ test "$slirp" != auto && meson_option_add "-Dslirp=$slirp"
+ test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
+ test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
run_meson() {
- NINJA=$ninja $meson setup \
- --prefix "$prefix" \
- --bindir "$bindir" \
- -Dqemu_suffix="$qemu_suffix" \
- -Dsmbd="$smbd" \
- -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
- -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
- -Dcfi=$cfi -Dtcg=$tcg \
- -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
- $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
- $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
- "$@" $cross_arg "$PWD" "$source_path"
+ NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
}
eval run_meson $meson_options
if test "$?" -ne 0 ; then
diff --git a/meson.build b/meson.build
index 19966e0a5a..7c52ef135c 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('qemu', ['c'], meson_version: '>=0.59.3',
default_options: ['warning_level=1', 'c_std=gnu11', 'cpp_std=gnu++11', 'b_colorout=auto',
- 'b_staticpic=false', 'stdsplit=false', 'optimization=2'],
+ 'b_staticpic=false', 'stdsplit=false', 'optimization=2', 'b_pie=true'],
version: files('VERSION'))
add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true)
diff --git a/meson_options.txt b/meson_options.txt
index 15fe40c700..35f5a72507 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -78,7 +78,7 @@ option('xen', type: 'feature', value: 'auto',
description: 'Xen backend support')
option('xen_pci_passthrough', type: 'feature', value: 'auto',
description: 'Xen PCI passthrough support')
-option('tcg', type: 'feature', value: 'auto',
+option('tcg', type: 'feature', value: 'enabled',
description: 'TCG support')
option('tcg_interpreter', type: 'boolean', value: false,
description: 'TCG with bytecode interpreter (slow)')
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 17/25] meson, virtio: place all virtio-pci devices under virtio_pci_ss
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (15 preceding siblings ...)
2022-04-29 15:23 ` [PULL 16/25] configure: omit options with default values from meson command line Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 18/25] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
` (8 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Since a sourceset already exists for this, avoid unnecessary repeat
of CONFIG_VIRTIO_PCI.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/virtio/meson.build | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 67dc77e00f..f371404b04 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -16,9 +16,7 @@ virtio_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user.c'))
virtio_ss.add(when: 'CONFIG_VHOST_VDPA', if_true: files('vhost-shadow-virtqueue.c', 'vhost-vdpa.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_BALLOON', if_true: files('virtio-balloon.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto.c'))
-virtio_ss.add(when: ['CONFIG_VIRTIO_CRYPTO', 'CONFIG_VIRTIO_PCI'], if_true: files('virtio-crypto-pci.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs.c'))
-virtio_ss.add(when: ['CONFIG_VHOST_USER_FS', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-fs-pci.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_PMEM', if_true: files('virtio-pmem.c'))
virtio_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock.c', 'vhost-vsock-common.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock.c', 'vhost-vsock-common.c'))
@@ -26,17 +24,20 @@ virtio_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_IOMMU', if_true: files('virtio-iommu.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
-virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'], if_true: files('vhost-user-i2c-pci.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
-virtio_ss.add(when: ['CONFIG_VHOST_USER_RNG', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-rng-pci.c'))
virtio_pci_ss = ss.source_set()
virtio_pci_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_SCSI', if_true: files('vhost-user-scsi-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_SCSI', if_true: files('vhost-scsi-pci.c'))
+virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs-pci.c'))
+
+virtio_pci_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_INPUT_HOST', if_true: files('virtio-input-host-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_INPUT', if_true: files('virtio-input-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng-pci.c'))
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 18/25] configure: simplify vhost-net-{user, vdpa} configuration
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (16 preceding siblings ...)
2022-04-29 15:23 ` [PULL 17/25] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 19/25] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
` (7 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Cleanup to ease review of the conversion to meson. vhost_net_user and
vhost_net_vdpa are never assigned anything in the command line parsing
loop, so they are always equal to $vhost_user and $vhost_vdpa.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index 1c88e697c5..d6ddd4f05f 100755
--- a/configure
+++ b/configure
@@ -1555,10 +1555,6 @@ if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
fi
# vhost-user backends
-test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
-if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-net-user requires --enable-vhost-user"
-fi
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-crypto requires --enable-vhost-user"
@@ -1567,16 +1563,11 @@ test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
fi
-#vhost-vdpa backends
-test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
-if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
- error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
-fi
# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
if test "$vhost_net" = ""; then
- test "$vhost_net_user" = "yes" && vhost_net=yes
- test "$vhost_net_vdpa" = "yes" && vhost_net=yes
+ test "$vhost_user" = "yes" && vhost_net=yes
+ test "$vhost_vdpa" = "yes" && vhost_net=yes
test "$vhost_kernel" = "yes" && vhost_net=yes
fi
@@ -2105,10 +2096,10 @@ fi
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_host_mak
fi
-if test "$vhost_net_user" = "yes" ; then
+if test "$vhost_user" = "yes" ; then
echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
fi
-if test "$vhost_net_vdpa" = "yes" ; then
+if test "$vhost_vdpa" = "yes" ; then
echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
fi
if test "$vhost_crypto" = "yes" ; then
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 19/25] build: move vhost-vsock configuration to Kconfig
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (17 preceding siblings ...)
2022-04-29 15:23 ` [PULL 18/25] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 20/25] build: move vhost-scsi " Paolo Bonzini
` (6 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
vhost-vsock and vhost-user-vsock are two devices of their own; it should
be possible to enable/disable them with --without-default-devices, not
--without-default-features. Compute their default value in Kconfig to
obtain the more intuitive behavior.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 16 ----------------
hw/virtio/Kconfig | 10 ++++++++++
meson.build | 1 -
3 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/configure b/configure
index d6ddd4f05f..603434fc7f 100755
--- a/configure
+++ b/configure
@@ -286,7 +286,6 @@ vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
vhost_scsi="$default_feature"
-vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
@@ -879,10 +878,6 @@ for opt do
;;
--enable-vhost-scsi) vhost_scsi="yes"
;;
- --disable-vhost-vsock) vhost_vsock="no"
- ;;
- --enable-vhost-vsock) vhost_vsock="yes"
- ;;
--disable-vhost-user-fs) vhost_user_fs="no"
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
@@ -1109,7 +1104,6 @@ cat << EOF
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
- vhost-vsock virtio sockets device support
vhost-scsi vhost-scsi kernel target support
vhost-crypto vhost-user-crypto backend support
vhost-kernel vhost kernel backend support
@@ -1549,10 +1543,6 @@ test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
fi
-test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
-if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
- error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
-fi
# vhost-user backends
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
@@ -2105,12 +2095,6 @@ fi
if test "$vhost_crypto" = "yes" ; then
echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
fi
-if test "$vhost_vsock" = "yes" ; then
- echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
- if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
- fi
-fi
if test "$vhost_kernel" = "yes" ; then
echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
fi
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index c144d42f9b..b642ae1081 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -59,6 +59,16 @@ config VIRTIO_MEM
depends on VIRTIO_MEM_SUPPORTED
select MEM_DEVICE
+config VHOST_VSOCK
+ bool
+ default y
+ depends on VIRTIO && VHOST_KERNEL
+
+config VHOST_USER_VSOCK
+ bool
+ default y
+ depends on VIRTIO && VHOST_USER
+
config VHOST_USER_I2C
bool
default y
diff --git a/meson.build b/meson.build
index 7c52ef135c..8621f84916 100644
--- a/meson.build
+++ b/meson.build
@@ -3691,7 +3691,6 @@ summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNE
summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
-summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 20/25] build: move vhost-scsi configuration to Kconfig
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (18 preceding siblings ...)
2022-04-29 15:23 ` [PULL 19/25] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 21/25] build: move vhost-user-fs " Paolo Bonzini
` (5 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
vhost-scsi and vhost-user-scsi are two devices of their own; it should
be possible to enable/disable them with --without-default-devices, not
--without-default-features. Compute their default value in Kconfig to
obtain the more intuitive behavior.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 15 ---------------
hw/scsi/Kconfig | 5 +++++
include/hw/virtio/virtio-scsi.h | 2 --
meson.build | 1 -
4 files changed, 5 insertions(+), 18 deletions(-)
diff --git a/configure b/configure
index 603434fc7f..d268a9cf49 100755
--- a/configure
+++ b/configure
@@ -285,7 +285,6 @@ EXTRA_LDFLAGS=""
vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
-vhost_scsi="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
@@ -874,10 +873,6 @@ for opt do
;;
--enable-vhost-crypto) vhost_crypto="yes"
;;
- --disable-vhost-scsi) vhost_scsi="no"
- ;;
- --enable-vhost-scsi) vhost_scsi="yes"
- ;;
--disable-vhost-user-fs) vhost_user_fs="no"
;;
--enable-vhost-user-fs) vhost_user_fs="yes"
@@ -1104,7 +1099,6 @@ cat << EOF
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
vhost-net vhost-net kernel acceleration support
- vhost-scsi vhost-scsi kernel target support
vhost-crypto vhost-user-crypto backend support
vhost-kernel vhost kernel backend support
vhost-user vhost-user backend support
@@ -1538,12 +1532,6 @@ if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
error_exit "vhost-kernel is only available on Linux"
fi
-# vhost-kernel devices
-test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
-if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
- error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
-fi
-
# vhost-user backends
test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
@@ -2080,9 +2068,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$vhost_scsi" = "yes" ; then
- echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
-fi
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_host_mak
fi
diff --git a/hw/scsi/Kconfig b/hw/scsi/Kconfig
index 77d397c949..e7b34dc8e2 100644
--- a/hw/scsi/Kconfig
+++ b/hw/scsi/Kconfig
@@ -48,6 +48,11 @@ config VIRTIO_SCSI
depends on VIRTIO
select SCSI
+config VHOST_SCSI
+ bool
+ default y
+ depends on VIRTIO && VHOST_KERNEL
+
config VHOST_USER_SCSI
bool
# Only PCI devices are provided for now
diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index 543681bc18..0997313f0a 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -55,10 +55,8 @@ struct VirtIOSCSIConf {
bool seg_max_adjust;
uint32_t max_sectors;
uint32_t cmd_per_lun;
-#ifdef CONFIG_VHOST_SCSI
char *vhostfd;
char *wwpn;
-#endif
CharBackend chardev;
uint32_t boot_tpgt;
IOThread *iothread;
diff --git a/meson.build b/meson.build
index 8621f84916..db585832a4 100644
--- a/meson.build
+++ b/meson.build
@@ -3690,7 +3690,6 @@ summary_info += {'QOM debugging': get_option('qom_cast_debug')}
summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
-summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 21/25] build: move vhost-user-fs configuration to Kconfig
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (19 preceding siblings ...)
2022-04-29 15:23 ` [PULL 20/25] build: move vhost-scsi " Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 22/25] meson: create have_vhost_* variables Paolo Bonzini
` (4 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
vhost-user-fs is a device and it should be possible to enable/disable
it with --without-default-devices, not --without-default-features.
Compute its default value in Kconfig to obtain the more intuitive
behavior.
In this case the configure options were undocumented, too.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 12 ------------
hw/virtio/Kconfig | 5 +++++
meson.build | 1 -
3 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index d268a9cf49..9a83d64c9d 100755
--- a/configure
+++ b/configure
@@ -286,7 +286,6 @@ vhost_kernel="$default_feature"
vhost_net="$default_feature"
vhost_crypto="$default_feature"
vhost_user="no"
-vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
debug_tcg="no"
sanitizers="no"
@@ -873,10 +872,6 @@ for opt do
;;
--enable-vhost-crypto) vhost_crypto="yes"
;;
- --disable-vhost-user-fs) vhost_user_fs="no"
- ;;
- --enable-vhost-user-fs) vhost_user_fs="yes"
- ;;
--disable-zlib-test)
;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
@@ -1537,10 +1532,6 @@ test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
error_exit "--enable-vhost-crypto requires --enable-vhost-user"
fi
-test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
-if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
-fi
# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
if test "$vhost_net" = ""; then
@@ -2089,9 +2080,6 @@ fi
if test "$vhost_vdpa" = "yes" ; then
echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
fi
-if test "$vhost_user_fs" = "yes" ; then
- echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
-fi
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index b642ae1081..f8e235f814 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -78,3 +78,8 @@ config VHOST_USER_RNG
bool
default y
depends on VIRTIO && VHOST_USER
+
+config VHOST_USER_FS
+ bool
+ default y
+ depends on VIRTIO && VHOST_USER
diff --git a/meson.build b/meson.build
index db585832a4..53654fc08e 100644
--- a/meson.build
+++ b/meson.build
@@ -3692,7 +3692,6 @@ summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
-summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
summary_info += {'build guest agent': have_ga}
summary(summary_info, bool_yn: true, section: 'Configurable features')
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 22/25] meson: create have_vhost_* variables
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (20 preceding siblings ...)
2022-04-29 15:23 ` [PULL 21/25] build: move vhost-user-fs " Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 23/25] meson: use have_vhost_* variables to pick sources Paolo Bonzini
` (3 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
When using Meson options rather than config-host.h, the "when" clauses
have to be changed to if statements (which is not necessarily great,
though at least it highlights which parts of the build are per-target
and which are not).
Do that before moving vhost logic to meson.build, though for now
the variables are just based on config-host.mak data.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 31 ++++++++++++++++++++-----------
tests/meson.build | 2 +-
tools/meson.build | 2 +-
3 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/meson.build b/meson.build
index 53654fc08e..4545905360 100644
--- a/meson.build
+++ b/meson.build
@@ -312,6 +312,15 @@ have_tpm = get_option('tpm') \
.require(targetos != 'windows', error_message: 'TPM emulation only available on POSIX systems') \
.allowed()
+# vhost
+have_vhost_user = 'CONFIG_VHOST_USER' in config_host
+have_vhost_vdpa = 'CONFIG_VHOST_VDPA' in config_host
+have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
+have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
+have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
+have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
+
# Target-specific libraries and flags
libm = cc.find_library('m', required: false)
threads = dependency('threads')
@@ -1442,7 +1451,7 @@ has_statx_mnt_id = cc.links(statx_mnt_id_test)
have_vhost_user_blk_server = get_option('vhost_user_blk_server') \
.require(targetos == 'linux',
error_message: 'vhost_user_blk_server requires linux') \
- .require('CONFIG_VHOST_USER' in config_host,
+ .require(have_vhost_user,
error_message: 'vhost_user_blk_server requires vhost-user support') \
.disable_auto_if(not have_system) \
.allowed()
@@ -2296,9 +2305,9 @@ host_kconfig = \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
(opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
(x11.found() ? ['CONFIG_X11=y'] : []) + \
- ('CONFIG_VHOST_USER' in config_host ? ['CONFIG_VHOST_USER=y'] : []) + \
- ('CONFIG_VHOST_VDPA' in config_host ? ['CONFIG_VHOST_VDPA=y'] : []) + \
- ('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
+ (have_vhost_user ? ['CONFIG_VHOST_USER=y'] : []) + \
+ (have_vhost_vdpa ? ['CONFIG_VHOST_VDPA=y'] : []) + \
+ (have_vhost_kernel ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
(have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
@@ -2980,7 +2989,7 @@ if have_system or have_user
endif
vhost_user = not_found
-if targetos == 'linux' and 'CONFIG_VHOST_USER' in config_host
+if targetos == 'linux' and have_vhost_user
libvhost_user = subproject('libvhost-user')
vhost_user = libvhost_user.get_variable('vhost_user_dep')
endif
@@ -3561,7 +3570,7 @@ if have_tools
dependencies: qemuutil,
install: true)
- if 'CONFIG_VHOST_USER' in config_host
+ if have_vhost_user
subdir('contrib/vhost-user-blk')
subdir('contrib/vhost-user-gpu')
subdir('contrib/vhost-user-input')
@@ -3687,12 +3696,12 @@ if 'simple' in get_option('trace_backends')
endif
summary_info += {'D-Bus display': dbus_display}
summary_info += {'QOM debugging': get_option('qom_cast_debug')}
-summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
-summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
-summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
-summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
+summary_info += {'vhost-kernel support': have_vhost_kernel}
+summary_info += {'vhost-net support': have_vhost_net}
+summary_info += {'vhost-user support': have_vhost_user}
+summary_info += {'vhost-user-crypto support': have_vhost_user_crypto}
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
-summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
+summary_info += {'vhost-vdpa support': have_vhost_vdpa}
summary_info += {'build guest agent': have_ga}
summary(summary_info, bool_yn: true, section: 'Configurable features')
diff --git a/tests/meson.build b/tests/meson.build
index 4f691e8465..8e318ec513 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -68,7 +68,7 @@ test_deps = {
'test-qht-par': qht_bench,
}
-if have_tools and 'CONFIG_VHOST_USER' in config_host and 'CONFIG_LINUX' in config_host
+if have_tools and have_vhost_user and 'CONFIG_LINUX' in config_host
executable('vhost-user-bridge',
sources: files('vhost-user-bridge.c'),
dependencies: [qemuutil, vhost_user])
diff --git a/tools/meson.build b/tools/meson.build
index 46977af84f..10eb3a043f 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -3,7 +3,7 @@ have_virtiofsd = get_option('virtiofsd') \
error_message: 'virtiofsd requires Linux') \
.require(seccomp.found() and libcap_ng.found(),
error_message: 'virtiofsd requires libcap-ng-devel and seccomp-devel') \
- .require('CONFIG_VHOST_USER' in config_host,
+ .require(have_vhost_user,
error_message: 'virtiofsd needs vhost-user-support') \
.disable_auto_if(not have_tools and not have_system) \
.allowed()
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 23/25] meson: use have_vhost_* variables to pick sources
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (21 preceding siblings ...)
2022-04-29 15:23 ` [PULL 22/25] meson: create have_vhost_* variables Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 24/25] configure, meson: move vhost options to Meson Paolo Bonzini
` (2 subsequent siblings)
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Kconfig.host | 3 ---
backends/meson.build | 8 ++++++--
hw/net/meson.build | 8 ++++++--
hw/virtio/Kconfig | 3 ---
hw/virtio/meson.build | 25 ++++++++++++++++---------
meson.build | 1 +
net/meson.build | 12 +++++++-----
tests/qtest/meson.build | 4 +++-
8 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/Kconfig.host b/Kconfig.host
index 60b9c07b5e..1165c4eacd 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -22,15 +22,12 @@ config TPM
config VHOST_USER
bool
- select VHOST
config VHOST_VDPA
bool
- select VHOST
config VHOST_KERNEL
bool
- select VHOST
config VIRTFS
bool
diff --git a/backends/meson.build b/backends/meson.build
index 535c3ca7dd..b1884a88ec 100644
--- a/backends/meson.build
+++ b/backends/meson.build
@@ -12,9 +12,13 @@ softmmu_ss.add([files(
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files('rng-random.c'))
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files('hostmem-file.c'))
softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('hostmem-memfd.c'))
-softmmu_ss.add(when: ['CONFIG_VHOST_USER', 'CONFIG_VIRTIO'], if_true: files('vhost-user.c'))
+if have_vhost_user
+ softmmu_ss.add(when: 'CONFIG_VIRTIO', if_true: files('vhost-user.c'))
+endif
softmmu_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost.c'))
-softmmu_ss.add(when: ['CONFIG_VIRTIO_CRYPTO', 'CONFIG_VHOST_CRYPTO'], if_true: files('cryptodev-vhost-user.c'))
+if have_vhost_user_crypto
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost-user.c'))
+endif
softmmu_ss.add(when: gio, if_true: files('dbus-vmstate.c'))
softmmu_ss.add(when: 'CONFIG_SGX', if_true: files('hostmem-epc.c'))
diff --git a/hw/net/meson.build b/hw/net/meson.build
index 685b75badb..ebac261542 100644
--- a/hw/net/meson.build
+++ b/hw/net/meson.build
@@ -46,8 +46,12 @@ specific_ss.add(when: 'CONFIG_XILINX_ETHLITE', if_true: files('xilinx_ethlite.c'
softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('net_rx_pkt.c'))
specific_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('virtio-net.c'))
-softmmu_ss.add(when: ['CONFIG_VIRTIO_NET', 'CONFIG_VHOST_NET'], if_true: files('vhost_net.c'), if_false: files('vhost_net-stub.c'))
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost_net-stub.c'))
+if have_vhost_net
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost_net.c'), if_false: files('vhost_net-stub.c'))
+ softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost_net-stub.c'))
+else
+ softmmu_ss.add(files('vhost_net-stub.c'))
+endif
softmmu_ss.add(when: 'CONFIG_ETSEC', if_true: files(
'fsl_etsec/etsec.c',
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index f8e235f814..e9ecae1f50 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -1,6 +1,3 @@
-config VHOST
- bool
-
config VIRTIO
bool
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index f371404b04..7e8877fd64 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -2,18 +2,22 @@ softmmu_virtio_ss = ss.source_set()
softmmu_virtio_ss.add(files('virtio-bus.c'))
softmmu_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('virtio-pci.c'))
softmmu_virtio_ss.add(when: 'CONFIG_VIRTIO_MMIO', if_true: files('virtio-mmio.c'))
-softmmu_virtio_ss.add(when: 'CONFIG_VHOST', if_false: files('vhost-stub.c'))
-
-softmmu_ss.add_all(when: 'CONFIG_VIRTIO', if_true: softmmu_virtio_ss)
-softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
-
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c'))
virtio_ss = ss.source_set()
virtio_ss.add(files('virtio.c'))
-virtio_ss.add(when: 'CONFIG_VHOST', if_true: files('vhost.c', 'vhost-backend.c', 'vhost-iova-tree.c'))
-virtio_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user.c'))
-virtio_ss.add(when: 'CONFIG_VHOST_VDPA', if_true: files('vhost-shadow-virtqueue.c', 'vhost-vdpa.c'))
+
+if have_vhost
+ virtio_ss.add(files('vhost.c', 'vhost-backend.c', 'vhost-iova-tree.c'))
+ if have_vhost_user
+ virtio_ss.add(files('vhost-user.c'))
+ endif
+ if have_vhost_vdpa
+ virtio_ss.add(files('vhost-vdpa.c', 'vhost-shadow-virtqueue.c'))
+ endif
+else
+ softmmu_virtio_ss.add(files('vhost-stub.c'))
+endif
+
virtio_ss.add(when: 'CONFIG_VIRTIO_BALLOON', if_true: files('virtio-balloon.c'))
virtio_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('virtio-crypto.c'))
virtio_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs.c'))
@@ -54,3 +58,6 @@ virtio_pci_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem-pci.c'))
virtio_ss.add_all(when: 'CONFIG_VIRTIO_PCI', if_true: virtio_pci_ss)
specific_ss.add_all(when: 'CONFIG_VIRTIO', if_true: virtio_ss)
+softmmu_ss.add_all(when: 'CONFIG_VIRTIO', if_true: softmmu_virtio_ss)
+softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
+softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c'))
diff --git a/meson.build b/meson.build
index 4545905360..9486270e8a 100644
--- a/meson.build
+++ b/meson.build
@@ -319,6 +319,7 @@ have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost = have_vhost_user or have_vhost_vdpa or have_vhost_kernel
have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
# Target-specific libraries and flags
diff --git a/net/meson.build b/net/meson.build
index 847bc2ac85..c965e83b26 100644
--- a/net/meson.build
+++ b/net/meson.build
@@ -26,10 +26,10 @@ softmmu_ss.add(when: vde, if_true: files('vde.c'))
if have_netmap
softmmu_ss.add(files('netmap.c'))
endif
-vhost_user_ss = ss.source_set()
-vhost_user_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
-softmmu_ss.add_all(when: 'CONFIG_VHOST_NET_USER', if_true: vhost_user_ss)
-softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
+if have_vhost_net_user
+ softmmu_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
+ softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
+endif
softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('tap-linux.c'))
softmmu_ss.add(when: 'CONFIG_BSD', if_true: files('tap-bsd.c'))
@@ -40,6 +40,8 @@ if not config_host.has_key('CONFIG_LINUX') and not config_host.has_key('CONFIG_B
endif
softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files(tap_posix))
softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('tap-win32.c'))
-softmmu_ss.add(when: 'CONFIG_VHOST_NET_VDPA', if_true: files('vhost-vdpa.c'))
+if have_vhost_net_vdpa
+ softmmu_ss.add(files('vhost-vdpa.c'))
+endif
subdir('can')
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 6b9807c183..ca12b313e1 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -263,7 +263,9 @@ qos_test_ss.add(
if have_virtfs
qos_test_ss.add(files('virtio-9p-test.c'))
endif
-qos_test_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user-test.c'))
+if have_vhost_user
+ qos_test_ss.add(files('vhost-user-test.c'))
+endif
if have_tools and have_vhost_user_blk_server
qos_test_ss.add(files('vhost-user-blk-test.c'))
endif
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 24/25] configure, meson: move vhost options to Meson
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (22 preceding siblings ...)
2022-04-29 15:23 ` [PULL 23/25] meson: use have_vhost_* variables to pick sources Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-29 15:23 ` [PULL 25/25] pc: remove -soundhw pcspk Paolo Bonzini
2022-04-30 0:21 ` [PULL 00/25] Misc patches for 2022-04-29 Richard Henderson
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
Finish the conversion by moving all the definitions and the constraint
checks to meson_options.txt and meson.build respectively.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 82 -----------------------------------
meson.build | 33 +++++++++++---
meson_options.txt | 10 +++++
scripts/meson-buildoptions.sh | 15 +++++++
4 files changed, 51 insertions(+), 89 deletions(-)
diff --git a/configure b/configure
index 9a83d64c9d..e77b29b093 100755
--- a/configure
+++ b/configure
@@ -282,11 +282,6 @@ EXTRA_CXXFLAGS=""
EXTRA_OBJCFLAGS=""
EXTRA_LDFLAGS=""
-vhost_kernel="$default_feature"
-vhost_net="$default_feature"
-vhost_crypto="$default_feature"
-vhost_user="no"
-vhost_vdpa="$default_feature"
debug_tcg="no"
sanitizers="no"
tsan="no"
@@ -527,7 +522,6 @@ haiku)
;;
linux)
linux="yes"
- vhost_user=${default_feature:-yes}
;;
esac
@@ -864,14 +858,6 @@ for opt do
;;
--with-coroutine=*) coroutine="$optarg"
;;
- --disable-vhost-net) vhost_net="no"
- ;;
- --enable-vhost-net) vhost_net="yes"
- ;;
- --disable-vhost-crypto) vhost_crypto="no"
- ;;
- --enable-vhost-crypto) vhost_crypto="yes"
- ;;
--disable-zlib-test)
;;
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
@@ -883,18 +869,6 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
- --disable-vhost-user) vhost_user="no"
- ;;
- --enable-vhost-user) vhost_user="yes"
- ;;
- --disable-vhost-vdpa) vhost_vdpa="no"
- ;;
- --enable-vhost-vdpa) vhost_vdpa="yes"
- ;;
- --disable-vhost-kernel) vhost_kernel="no"
- ;;
- --enable-vhost-kernel) vhost_kernel="yes"
- ;;
--disable-capstone) capstone="disabled"
;;
--enable-capstone) capstone="enabled"
@@ -1093,11 +1067,6 @@ cat << EOF
debug-info debugging information
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
- vhost-net vhost-net kernel acceleration support
- vhost-crypto vhost-user-crypto backend support
- vhost-kernel vhost kernel backend support
- vhost-user vhost-user backend support
- vhost-vdpa vhost-vdpa kernel backend support
NOTE: The object files are built at the place where configure is launched
EOF
@@ -1511,35 +1480,6 @@ else
exit 1
fi
-#########################################
-# vhost interdependencies and host support
-
-# vhost backends
-if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
- error_exit "vhost-user is not available on Windows"
-fi
-test "$vhost_vdpa" = "" && vhost_vdpa=$linux
-if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
- error_exit "vhost-vdpa is only available on Linux"
-fi
-test "$vhost_kernel" = "" && vhost_kernel=$linux
-if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
- error_exit "vhost-kernel is only available on Linux"
-fi
-
-# vhost-user backends
-test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
-if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
- error_exit "--enable-vhost-crypto requires --enable-vhost-user"
-fi
-
-# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
-if test "$vhost_net" = ""; then
- test "$vhost_user" = "yes" && vhost_net=yes
- test "$vhost_vdpa" = "yes" && vhost_net=yes
- test "$vhost_kernel" = "yes" && vhost_net=yes
-fi
-
##########################################
# pkg-config probe
@@ -2059,28 +1999,6 @@ if test "$modules" = "yes"; then
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$vhost_net" = "yes" ; then
- echo "CONFIG_VHOST_NET=y" >> $config_host_mak
-fi
-if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
-fi
-if test "$vhost_vdpa" = "yes" ; then
- echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
-fi
-if test "$vhost_crypto" = "yes" ; then
- echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
-fi
-if test "$vhost_kernel" = "yes" ; then
- echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
-fi
-if test "$vhost_user" = "yes" ; then
- echo "CONFIG_VHOST_USER=y" >> $config_host_mak
-fi
-if test "$vhost_vdpa" = "yes" ; then
- echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
-fi
-
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
echo "CONFIG_BSD=y" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 9486270e8a..f6ccc98b4f 100644
--- a/meson.build
+++ b/meson.build
@@ -313,14 +313,26 @@ have_tpm = get_option('tpm') \
.allowed()
# vhost
-have_vhost_user = 'CONFIG_VHOST_USER' in config_host
-have_vhost_vdpa = 'CONFIG_VHOST_VDPA' in config_host
-have_vhost_kernel = 'CONFIG_VHOST_KERNEL' in config_host
-have_vhost_net_user = 'CONFIG_VHOST_NET_USER' in config_host
-have_vhost_net_vdpa = 'CONFIG_VHOST_NET_VDPA' in config_host
-have_vhost_net = 'CONFIG_VHOST_NET' in config_host
+have_vhost_user = get_option('vhost_user') \
+ .disable_auto_if(targetos != 'linux') \
+ .require(targetos != 'windows',
+ error_message: 'vhost-user is not available on Windows').allowed()
+have_vhost_vdpa = get_option('vhost_vdpa') \
+ .require(targetos == 'linux',
+ error_message: 'vhost-vdpa is only available on Linux').allowed()
+have_vhost_kernel = get_option('vhost_kernel') \
+ .require(targetos == 'linux',
+ error_message: 'vhost-kernel is only available on Linux').allowed()
+have_vhost_user_crypto = get_option('vhost_crypto') \
+ .require(have_vhost_user,
+ error_message: 'vhost-crypto requires vhost-user to be enabled').allowed()
+
have_vhost = have_vhost_user or have_vhost_vdpa or have_vhost_kernel
-have_vhost_user_crypto = 'CONFIG_VHOST_CRYPTO' in config_host
+
+have_vhost_net_user = have_vhost_user and get_option('vhost_net').allowed()
+have_vhost_net_vdpa = have_vhost_vdpa and get_option('vhost_net').allowed()
+have_vhost_net_kernel = have_vhost_kernel and get_option('vhost_net').allowed()
+have_vhost_net = have_vhost_net_kernel or have_vhost_net_user or have_vhost_net_vdpa
# Target-specific libraries and flags
libm = cc.find_library('m', required: false)
@@ -1711,6 +1723,13 @@ config_host_data.set('CONFIG_SNAPPY', snappy.found())
config_host_data.set('CONFIG_TPM', have_tpm)
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
config_host_data.set('CONFIG_VDE', vde.found())
+config_host_data.set('CONFIG_VHOST_NET', have_vhost_net)
+config_host_data.set('CONFIG_VHOST_NET_USER', have_vhost_net_user)
+config_host_data.set('CONFIG_VHOST_NET_VDPA', have_vhost_net_vdpa)
+config_host_data.set('CONFIG_VHOST_KERNEL', have_vhost_kernel)
+config_host_data.set('CONFIG_VHOST_USER', have_vhost_user)
+config_host_data.set('CONFIG_VHOST_CRYPTO', have_vhost_user_crypto)
+config_host_data.set('CONFIG_VHOST_VDPA', have_vhost_vdpa)
config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server)
config_host_data.set('CONFIG_PNG', png.found())
config_host_data.set('CONFIG_VNC', vnc.found())
diff --git a/meson_options.txt b/meson_options.txt
index 35f5a72507..29c6b90cec 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -235,6 +235,16 @@ option('oss', type: 'feature', value: 'auto',
option('pa', type: 'feature', value: 'auto',
description: 'PulseAudio sound support')
+option('vhost_kernel', type: 'feature', value: 'auto',
+ description: 'vhost kernel backend support')
+option('vhost_net', type: 'feature', value: 'auto',
+ description: 'vhost-net kernel acceleration support')
+option('vhost_user', type: 'feature', value: 'auto',
+ description: 'vhost-user backend support')
+option('vhost_crypto', type: 'feature', value: 'auto',
+ description: 'vhost-user crypto backend support')
+option('vhost_vdpa', type: 'feature', value: 'auto',
+ description: 'vhost-vdpa kernel backend support')
option('vhost_user_blk_server', type: 'feature', value: 'auto',
description: 'build vhost-user-blk server')
option('virtfs', type: 'feature', value: 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 4b0770a9e0..5d2172bfb4 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -154,8 +154,13 @@ meson_options_help() {
printf "%s\n" ' usb-redir libusbredir support'
printf "%s\n" ' vde vde network backend support'
printf "%s\n" ' vdi vdi image format support'
+ printf "%s\n" ' vhost-crypto vhost-user crypto backend support'
+ printf "%s\n" ' vhost-kernel vhost kernel backend support'
+ printf "%s\n" ' vhost-net vhost-net kernel acceleration support'
+ printf "%s\n" ' vhost-user vhost-user backend support'
printf "%s\n" ' vhost-user-blk-server'
printf "%s\n" ' build vhost-user-blk server'
+ printf "%s\n" ' vhost-vdpa vhost-vdpa kernel backend support'
printf "%s\n" ' virglrenderer virgl rendering support'
printf "%s\n" ' virtfs virtio-9p support'
printf "%s\n" ' virtiofsd build virtiofs daemon (virtiofsd)'
@@ -409,8 +414,18 @@ _meson_option_parse() {
--disable-vde) printf "%s" -Dvde=disabled ;;
--enable-vdi) printf "%s" -Dvdi=enabled ;;
--disable-vdi) printf "%s" -Dvdi=disabled ;;
+ --enable-vhost-crypto) printf "%s" -Dvhost_crypto=enabled ;;
+ --disable-vhost-crypto) printf "%s" -Dvhost_crypto=disabled ;;
+ --enable-vhost-kernel) printf "%s" -Dvhost_kernel=enabled ;;
+ --disable-vhost-kernel) printf "%s" -Dvhost_kernel=disabled ;;
+ --enable-vhost-net) printf "%s" -Dvhost_net=enabled ;;
+ --disable-vhost-net) printf "%s" -Dvhost_net=disabled ;;
+ --enable-vhost-user) printf "%s" -Dvhost_user=enabled ;;
+ --disable-vhost-user) printf "%s" -Dvhost_user=disabled ;;
--enable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=enabled ;;
--disable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=disabled ;;
+ --enable-vhost-vdpa) printf "%s" -Dvhost_vdpa=enabled ;;
+ --disable-vhost-vdpa) printf "%s" -Dvhost_vdpa=disabled ;;
--enable-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
--disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
--enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PULL 25/25] pc: remove -soundhw pcspk
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (23 preceding siblings ...)
2022-04-29 15:23 ` [PULL 24/25] configure, meson: move vhost options to Meson Paolo Bonzini
@ 2022-04-29 15:23 ` Paolo Bonzini
2022-04-30 0:21 ` [PULL 00/25] Misc patches for 2022-04-29 Richard Henderson
25 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2022-04-29 15:23 UTC (permalink / raw)
To: qemu-devel
The pcspk device is the only user of the init_isa function, and the only
-soundhw option which does not create a new device (it hacks into the
PCSpkState by hand). Remove it, since it was deprecated.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/audio/pcspk.c | 10 ----------
hw/audio/soundhw.c | 27 ++++-----------------------
include/hw/audio/soundhw.h | 3 ---
3 files changed, 4 insertions(+), 36 deletions(-)
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index dfc7ebca4e..daf92a4ce1 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -245,18 +245,8 @@ static const TypeInfo pcspk_info = {
.class_init = pcspk_class_initfn,
};
-static int pcspk_audio_init_soundhw(ISABus *bus)
-{
- PCSpkState *s = pcspk_state;
-
- warn_report("'-soundhw pcspk' is deprecated, "
- "please set a backend using '-machine pcspk-audiodev=<name>' instead");
- return pcspk_audio_init(s);
-}
-
static void pcspk_register(void)
{
type_register_static(&pcspk_info);
- isa_register_soundhw("pcspk", "PC speaker", pcspk_audio_init_soundhw);
}
type_init(pcspk_register)
diff --git a/hw/audio/soundhw.c b/hw/audio/soundhw.c
index 173b674ff5..f7d94d7dfa 100644
--- a/hw/audio/soundhw.c
+++ b/hw/audio/soundhw.c
@@ -36,26 +36,12 @@ struct soundhw {
const char *typename;
int enabled;
int isa;
- union {
- int (*init_isa) (ISABus *bus);
- int (*init_pci) (PCIBus *bus);
- } init;
+ int (*init_pci) (PCIBus *bus);
};
static struct soundhw soundhw[9];
static int soundhw_count;
-void isa_register_soundhw(const char *name, const char *descr,
- int (*init_isa)(ISABus *bus))
-{
- assert(soundhw_count < ARRAY_SIZE(soundhw) - 1);
- soundhw[soundhw_count].name = name;
- soundhw[soundhw_count].descr = descr;
- soundhw[soundhw_count].isa = 1;
- soundhw[soundhw_count].init.init_isa = init_isa;
- soundhw_count++;
-}
-
void pci_register_soundhw(const char *name, const char *descr,
int (*init_pci)(PCIBus *bus))
{
@@ -63,7 +49,7 @@ void pci_register_soundhw(const char *name, const char *descr,
soundhw[soundhw_count].name = name;
soundhw[soundhw_count].descr = descr;
soundhw[soundhw_count].isa = 0;
- soundhw[soundhw_count].init.init_pci = init_pci;
+ soundhw[soundhw_count].init_pci = init_pci;
soundhw_count++;
}
@@ -158,18 +144,13 @@ void soundhw_init(void)
} else {
pci_create_simple(pci_bus, -1, c->typename);
}
- } else if (c->isa) {
- if (!isa_bus) {
- error_report("ISA bus not available for %s", c->name);
- exit(1);
- }
- c->init.init_isa(isa_bus);
} else {
+ assert(!c->isa);
if (!pci_bus) {
error_report("PCI bus not available for %s", c->name);
exit(1);
}
- c->init.init_pci(pci_bus);
+ c->init_pci(pci_bus);
}
}
}
diff --git a/include/hw/audio/soundhw.h b/include/hw/audio/soundhw.h
index f09a297854..e68685fcda 100644
--- a/include/hw/audio/soundhw.h
+++ b/include/hw/audio/soundhw.h
@@ -1,9 +1,6 @@
#ifndef HW_SOUNDHW_H
#define HW_SOUNDHW_H
-void isa_register_soundhw(const char *name, const char *descr,
- int (*init_isa)(ISABus *bus));
-
void pci_register_soundhw(const char *name, const char *descr,
int (*init_pci)(PCIBus *bus));
void deprecated_register_soundhw(const char *name, const char *descr,
--
2.35.1
^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PULL 00/25] Misc patches for 2022-04-29
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
` (24 preceding siblings ...)
2022-04-29 15:23 ` [PULL 25/25] pc: remove -soundhw pcspk Paolo Bonzini
@ 2022-04-30 0:21 ` Richard Henderson
25 siblings, 0 replies; 27+ messages in thread
From: Richard Henderson @ 2022-04-30 0:21 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 4/29/22 08:22, Paolo Bonzini wrote:
> The following changes since commit f22833602095b05733bceaddeb20f3edfced3c07:
>
> Merge tag 'pull-target-arm-20220428' of https://git.linaro.org/people/pmaydell/qemu-arm into staging (2022-04-28 08:34:17 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to ec31a2f9b5b128c06a499ad076d8b29d664d3896:
>
> pc: remove -soundhw pcspk (2022-04-29 15:07:21 +0200)
>
> ----------------------------------------------------------------
> * WHPX support for xcr0
> * qga-wss fixes
> * Meson conversions
> * Removed -soundhw pcspk
>
> ----------------------------------------------------------------
> Konstantin Kostiuk (2):
> configure: Add cross prefix for widl tool
> qga-vss: always build qga-vss.tlb when qga-vss.dll is built
>
> Paolo Bonzini (22):
> meson-buildoptions: add support for string options
> meson, configure: move Xen detection to meson
> configure, meson: move iasl detection to meson
> configure: move Windows flags detection to meson
> configure: switch string options to automatic parsing
> meson, configure: move --tls-priority to meson
> meson, configure: move bdrv whitelists to meson
> meson, configure: move --with-pkgversion, CONFIG_STAMP to meson
> meson, configure: move --interp-prefix to meson
> meson: always combine directories with prefix
> configure: switch directory options to automatic parsing
> meson: pass more options directly as -D
> configure: omit options with default values from meson command line
> meson, virtio: place all virtio-pci devices under virtio_pci_ss
> configure: simplify vhost-net-{user, vdpa} configuration
> build: move vhost-vsock configuration to Kconfig
> build: move vhost-scsi configuration to Kconfig
> build: move vhost-user-fs configuration to Kconfig
> meson: create have_vhost_* variables
> meson: use have_vhost_* variables to pick sources
> configure, meson: move vhost options to Meson
> pc: remove -soundhw pcspk
>
> Sunil Muthuswamy (1):
> WHPX: support for xcr0
>
> Kconfig.host | 3 -
> backends/meson.build | 8 +-
> configure | 673 ++-------------------------------------
> docs/meson.build | 2 +-
> hw/audio/pcspk.c | 10 -
> hw/audio/soundhw.c | 27 +-
> hw/net/meson.build | 8 +-
> hw/scsi/Kconfig | 5 +
> hw/virtio/Kconfig | 18 +-
> hw/virtio/meson.build | 34 +-
> include/hw/audio/soundhw.h | 3 -
> include/hw/virtio/virtio-scsi.h | 2 -
> meson.build | 256 +++++++++++----
> meson_options.txt | 28 +-
> net/meson.build | 12 +-
> qga/vss-win32/meson.build | 4 +-
> scripts/meson-buildoptions.py | 86 ++++-
> scripts/meson-buildoptions.sh | 74 ++++-
> scripts/qemu-stamp.py | 24 ++
> scripts/xen-detect.c | 203 ++++++++++++
> target/i386/whpx/whpx-all.c | 89 ++++++
> target/i386/whpx/whpx-internal.h | 3 +
> tests/meson.build | 2 +-
> tests/qtest/meson.build | 4 +-
> tools/meson.build | 2 +-
> 25 files changed, 778 insertions(+), 802 deletions(-)
> create mode 100644 scripts/qemu-stamp.py
> create mode 100644 scripts/xen-detect.c
Fails:
../target/i386/whpx/whpx-all.c: In function 'whpx_set_xcrs':
../target/i386/whpx/whpx-all.c:312:31: error: initialization of 'struct CPUX86State *'
from incompatible pointer type 'CPUArchState *' [-Werror=incompatible-pointer-types]
312 | struct CPUX86State *env = (CPUArchState *)(cpu->env_ptr);
| ^
../target/i386/whpx/whpx-all.c:323:21: error: invalid use of undefined type 'struct
CPUX86State'
323 | xcr0.Reg64 = env->xcr0;
| ^~
../target/i386/whpx/whpx-all.c: In function 'whpx_get_xcrs':
../target/i386/whpx/whpx-all.c:581:31: error: initialization of 'struct CPUX86State *'
from incompatible pointer type 'CPUArchState *' [-Werror=incompatible-pointer-types]
581 | struct CPUX86State *env = (CPUArchState *)(cpu->env_ptr);
| ^
../target/i386/whpx/whpx-all.c:599:8: error: invalid use of undefined type 'struct
CPUX86State'
599 | env->xcr0 = xcr0.Reg64;
| ^~
r~
^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2022-04-30 0:22 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-29 15:22 [PULL 00/25] Misc patches for 2022-04-29 Paolo Bonzini
2022-04-29 15:22 ` [PULL 01/25] WHPX: support for xcr0 Paolo Bonzini
2022-04-29 15:22 ` [PULL 02/25] configure: Add cross prefix for widl tool Paolo Bonzini
2022-04-29 15:22 ` [PULL 03/25] qga-vss: always build qga-vss.tlb when qga-vss.dll is built Paolo Bonzini
2022-04-29 15:22 ` [PULL 04/25] meson-buildoptions: add support for string options Paolo Bonzini
2022-04-29 15:22 ` [PULL 05/25] meson, configure: move Xen detection to meson Paolo Bonzini
2022-04-29 15:22 ` [PULL 06/25] configure, meson: move iasl " Paolo Bonzini
2022-04-29 15:22 ` [PULL 07/25] configure: move Windows flags " Paolo Bonzini
2022-04-29 15:22 ` [PULL 08/25] configure: switch string options to automatic parsing Paolo Bonzini
2022-04-29 15:22 ` [PULL 09/25] meson, configure: move --tls-priority to meson Paolo Bonzini
2022-04-29 15:22 ` [PULL 10/25] meson, configure: move bdrv whitelists " Paolo Bonzini
2022-04-29 15:22 ` [PULL 11/25] meson, configure: move --with-pkgversion, CONFIG_STAMP " Paolo Bonzini
2022-04-29 15:22 ` [PULL 12/25] meson, configure: move --interp-prefix " Paolo Bonzini
2022-04-29 15:23 ` [PULL 13/25] meson: always combine directories with prefix Paolo Bonzini
2022-04-29 15:23 ` [PULL 14/25] configure: switch directory options to automatic parsing Paolo Bonzini
2022-04-29 15:23 ` [PULL 15/25] meson: pass more options directly as -D Paolo Bonzini
2022-04-29 15:23 ` [PULL 16/25] configure: omit options with default values from meson command line Paolo Bonzini
2022-04-29 15:23 ` [PULL 17/25] meson, virtio: place all virtio-pci devices under virtio_pci_ss Paolo Bonzini
2022-04-29 15:23 ` [PULL 18/25] configure: simplify vhost-net-{user, vdpa} configuration Paolo Bonzini
2022-04-29 15:23 ` [PULL 19/25] build: move vhost-vsock configuration to Kconfig Paolo Bonzini
2022-04-29 15:23 ` [PULL 20/25] build: move vhost-scsi " Paolo Bonzini
2022-04-29 15:23 ` [PULL 21/25] build: move vhost-user-fs " Paolo Bonzini
2022-04-29 15:23 ` [PULL 22/25] meson: create have_vhost_* variables Paolo Bonzini
2022-04-29 15:23 ` [PULL 23/25] meson: use have_vhost_* variables to pick sources Paolo Bonzini
2022-04-29 15:23 ` [PULL 24/25] configure, meson: move vhost options to Meson Paolo Bonzini
2022-04-29 15:23 ` [PULL 25/25] pc: remove -soundhw pcspk Paolo Bonzini
2022-04-30 0:21 ` [PULL 00/25] Misc patches for 2022-04-29 Richard Henderson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.