x86 and build system changes for 2023-10-18
Subsystems (2)
The following changes since commit 800485762e6564e04e2ab315132d477069562d91:
Merge tag 'python-pull-request' of https://gitlab.com/jsnow/qemu into staging (2023-10-16 12:37:48 -0400)
are available in the Git repository at:
https://gitlab.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to 528148980adb78bc368a5254204e2ea98e4f6b6c:
configure: define "pkg-config" in addition to "pkgconfig" (2023-10-18 10:01:02 +0200)
----------------------------------------------------------------
* build system and Python cleanups
* fix netbsd VM build
* allow non-relocatable installs
* allow using command line options to configure qemu-ga
* target/i386: check intercept for XSETBV
* target/i386: fix CPUID_HT exposure
----------------------------------------------------------------
Emmanouil Pitsidianakis (1):
scripts/get_maintainer.pl: don't print parentheses
John Snow (2):
iotests: get rid of '..' in path environment output
iotests: use the correct python to run linters
Paolo Bonzini (26):
target/i386: check intercept for XSETBV
tests/vm: netbsd: install dtc
tests/docker: avoid invalid escape in Python string docs/sphinx: avoid invalid escape in Python string target/hexagon: avoid invalid escape in Python string tests/avocado: avoid invalid escape in Python string tests/vm: avoid invalid escape in Python string
tracetool: avoid invalid escape in Python string
meson: do not build shaders by default
meson: do not use set10
meson, cutils: allow non-relocatable installs
configure: clean up handling of CFI option
hw/xen: cleanup sourcesets
hw/remote: move stub vfu_object_set_bus_irq out of stubs/ tests/tcg/arm: move non-SVE tests out of conditional configure, tests/tcg: simplify GDB conditionals
configure: clean up plugin option handling
configure: clean up PIE option handling
configure: remove some dead cruft
configure: move target-specific defaults to an external machine file
configure: move environment-specific defaults to config-meson.cross
configure: unify handling of several Debian cross containers configure, meson: use command line options to configure qemu-ga
meson-buildoptions: document the data at the top
meson: add a note on why we use config_host for program paths
configure: define "pkg-config" in addition to "pkgconfig"
Thomas Huth (1):
scripts: Mark feature_to_c.py as non-executable to fix a build issue
Xiaoyao Li (1):
target/i386/cpu: Fix CPUID_HT exposure
Yonggang Luo (1):
Revert "configure: Add workaround for ccache and clang"
configs/meson/windows.txt | 9 + configure | 288 +++++++-------------- docs/sphinx/hxtool.py | 2 +- hw/arm/meson.build | 1 - hw/i386/meson.build | 1 - hw/remote/meson.build | 4 +- .../remote/vfio-user-obj-stub.c | 0 hw/xen/meson.build | 11 +- include/qemu/compiler.h | 15 ++ meson.build | 31 ++- meson_options.txt | 9 + qga/meson.build | 9 +- scripts/feature_to_c.py | 0 scripts/get_maintainer.pl | 1 + scripts/meson-buildoptions.py | 32 ++- scripts/meson-buildoptions.sh | 26 +- scripts/tracetool/__init__.py | 14 +- scripts/tracetool/format/log_stap.py | 2 +- stubs/meson.build | 1 - target/hexagon/hex_common.py | 4 +- target/i386/cpu.c | 1 + target/i386/kvm/kvm.c | 2 + target/i386/svm.h | 1 + target/i386/tcg/translate.c | 1 + tests/avocado/virtio_check_params.py | 2 +- tests/docker/docker.py | 2 +- tests/qemu-iotests/linters.py | 2 +- tests/qemu-iotests/testenv.py | 2 +- tests/tcg/aarch64/Makefile.target | 16 +- tests/tcg/multiarch/Makefile.target | 18 +- tests/tcg/multiarch/system/Makefile.softmmu-target | 15 +- tests/tcg/s390x/Makefile.target | 6 +- tests/unit/test-coroutine.c | 2 +- tests/vm/basevm.py | 6 +- tests/vm/netbsd | 6 +- ui/shader/meson.build | 1 + util/cutils.c | 11 +- util/qemu-coroutine.c | 4 +- 38 files changed, 283 insertions(+), 275 deletions(-) create mode 100644 configs/meson/windows.txt rename stubs/vfio-user-obj.c => hw/remote/vfio-user-obj-stub.c (100%) mode change 100755 => 100644 scripts/feature_to_c.py
Signature · 1 line
2.41.0
[PULL 01/32] iotests: get rid of '..' in path environment output
From: John Snow <[email protected]>
Resolve the build_root before we append more items onto it so that the environment output is more concise with less parent directory confetti in it.
Message-ID: <[email protected]>
--- tests/qemu-iotests/testenv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/qemu-iotests/testenv.py +1 -1
@@ -216,7 +216,7 @@ def __init__(self, source_dir: str, build_dir: str, self.source_iotests = source_dir self.build_iotests = build_dir - self.build_root = os.path.join(self.build_iotests, '..', '..') + self.build_root = Path(self.build_iotests).parent.parent self.init_directories()
Signature · 1 line
2.41.0
[PULL 05/32] target/i386: check intercept for XSETBV
In reply to Paolo BonziniNote that this intercept is special; it is checked before the #GP exception.
--- target/i386/svm.h | 1 + target/i386/tcg/translate.c | 1 + 2 files changed, 2 insertions(+)
target/i386/svm.h +1 -0
@@ -132,6 +132,7 @@/* only included in documentation, maybe wrong */ #define SVM_EXIT_MONITOR 0x08a#define SVM_EXIT_MWAIT 0x08b +#define SVM_EXIT_XSETBV 0x08d#define SVM_EXIT_NPF 0x400#define SVM_EXIT_ERR -1
target/i386/tcg/translate.c +1 -0
@@ -5916,6 +5916,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) | PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } +gen_svm_check_intercept (s,SVM_EXIT_XSETBV );if (!check_cpl0 (s)) {break ; }
Signature · 1 line
2.41.0
[PULL 07/32] scripts: Mark feature_to_c.py as non-executable to fix a build issue
In reply to Paolo BonziniFrom: Thomas Huth <[email protected]>
Meson tries to run scripts via the shebang line if they files are marked as executable. If "python3" is not in the $PATH, or if it is a version that is too old, then the script execution fails. We should make sure to run scripts via the python3 interpreter that is used for Meson itself. For this, the files need to be marked as non-executable, then meson will use the python3 binary that has been used to run itself.
Message-ID: <[email protected]>
--- scripts/feature_to_c.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 scripts/feature_to_c.py
scripts/feature_to_c.py +0 -0
Signature · 1 line
2.41.0
[PULL 10/32] docs/sphinx: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal.
--- docs/sphinx/hxtool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
docs/sphinx/hxtool.py +1 -1
@@ -49,7 +49,7 @@ def serror(file, lnum, errtext): def parse_directive(line): """Return first word of line, if any""" - return re.split('\W', line)[0] + return re.split(r'\W', line)[0] def parse_defheading(file, lnum, line): """Handle a DEFHEADING directive"""
Signature · 1 line
2.41.0
[PULL 02/32] iotests: use the correct python to run linters
In reply to Paolo BonziniFrom: John Snow <[email protected]>
Whichever python is used to run iotest 297 should be the one used to actually run the linters.
Message-ID: <[email protected]>
--- tests/qemu-iotests/linters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/qemu-iotests/linters.py +1 -1
@@ -68,7 +68,7 @@ def run_linter( :raise CalledProcessError: If the linter process exits with failure. """ subprocess.run( - ('python3', '-m', tool, *args), + (sys.executable, '-m', tool, *args), env=env, check=True, stdout=subprocess.PIPE if suppress_output else None,
Signature · 1 line
2.41.0
[PULL 06/32] tests/vm: netbsd: install dtc
In reply to Paolo BonziniInstall dtc as it is now a mandatory external dependency in order to build QEMU.
--- tests/vm/netbsd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
tests/vm/netbsd +5 -1
@@ -40,6 +40,9 @@ class NetBSDVM(basevm.BaseVM): "gsed", "gettext-tools", + # libs: basic + "dtc", + # libs: crypto "gnutls",
@@ -67,7 +70,8 @@ class NetBSDVM(basevm.BaseVM): mkdir src build; cd src; tar -xf /dev/rld1a; cd ../build - ../src/configure --disable-opengl {configure_opts}; + ../src/configure --disable-opengl --extra-ldflags=-L/usr/pkg/lib \ + --extra-cflags=-I/usr/pkg/include {configure_opts}; gmake --output-sync -j{jobs} {target} {verbose}; """ poweroff = "/sbin/poweroff"
Signature · 1 line
2.41.0
[PULL 24/32] configure: clean up PIE option handling
In reply to Paolo BonziniKeep together all the conditions that lead to disabling PIE.
--- configure | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-)
configure +14 -21
@@ -373,17 +373,6 @@ else targetos=bogus fi -# OS specific - -case $targetos in -windows) - pie="no" -;; -haiku) - pie="no" -;; -esac - if test ! -z "$cpu" ; then # command line argument :
@@ -1088,19 +1077,23 @@ static THREAD int tls_var; int main(void) { return tls_var; } EOF -if test "$static" = "yes"; then - if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then +if test "$targetos" = windows || test "$targetos" = haiku; then + if test "$pie" = "yes"; then + error_exit "PIE not available due to missing OS support" + fi + pie=no +fi + +if test "$pie" != "no"; then + if test "$static" = "yes"; then + pie_ldflags=-static-pie + else + pie_ldflags=-pie + fi + if compile_prog "-Werror -fPIE -DPIE" "$pie_ldflags"; then pie="yes" elif test "$pie" = "yes"; then error_exit "-static-pie not available due to missing toolchain support" - else - pie="no" - fi -elif test "$pie" != "no"; then - if compile_prog "-Werror -fPIE -DPIE" "-pie"; then - pie="yes" - elif test "$pie" = "yes"; then - error_exit "PIE not available due to missing toolchain support" else echo "Disabling PIE due to missing toolchain support" pie="no"
Signature · 1 line
2.41.0
[PULL 03/32] Revert "configure: Add workaround for ccache and clang"
In reply to Paolo BonziniFrom: Yonggang Luo <[email protected]>
This reverts commit fd0e60530f10078f488fa3e9591cc7db5732989c.
According to https://peter.eisentraut.org/blog/2014/12/01/ccache-and-clang-part-3
it's already fixed in new version of ccache
According to https://ccache.dev/manual/4.8.html#config_run_second_cppCCACHE_CPP2 are default to true for new version ccache
Message-ID: <[email protected]>
--- configure | 32 -------------------------------- 1 file changed, 32 deletions(-)
configure +0 -32
@@ -1166,34 +1166,6 @@ EOF fi fi -######################################## -# check if ccache is interfering with -# semantic analysis of macros - -unset CCACHE_CPP2 -ccache_cpp2=no -cat > $TMPC << EOF -static const int Z = 1; -#define fn() ({ Z; }) -#define TAUT(X) ((X) == Z) -#define PAREN(X, Y) (X == Y) -#define ID(X) (X) -int main(void) -{ - int x = 0, y = 0; - x = ID(x); - x = fn(); - fn(); - if (PAREN(x, y)) return 0; - if (TAUT(Z)) return 0; - return 0; -} -EOF - -if ! compile_object "-Werror"; then - ccache_cpp2=yes -fi - ########################################## # functions to probe cross compilers
@@ -1726,10 +1698,6 @@ if test "$default_targets" = "yes"; then echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak fi -if test "$ccache_cpp2" = "yes"; then - echo "export CCACHE_CPP2=y" >> $config_host_mak -fi - # contrib/plugins configuration echo "# Automatically generated by configure - do not modify" > contrib/plugins/$config_host_mak echo "SRC_PATH=$source_path/contrib/plugins" >> contrib/plugins/$config_host_mak
Signature · 1 line
2.41.0
[PULL 30/32] meson-buildoptions: document the data at the top
In reply to Paolo Bonzini--- scripts/meson-buildoptions.py | 8 ++++++++ 1 file changed, 8 insertions(+)
scripts/meson-buildoptions.py +8 -0
@@ -25,11 +25,15 @@ import shlex import sys +# Options with nonstandard names (e.g. --with/--without) or OS-dependent +# defaults. Try not to add any. SKIP_OPTIONS = { "default_devices", "fuzzing_engine", } +# Options whose name doesn't match the option for backwards compatibility +# reasons, because Meson gives them a funny name, or both OPTION_NAMES = { "b_coverage": "gcov", "b_lto": "lto",
@@ -49,6 +53,10 @@ "werror", } +# Builtin options that should be definable via configure. Some of the others +# we really do not want (e.g. c_args is defined via the native file, not +# via -D, because it's a mix of CFLAGS and --extra-cflags); for specific +# cases "../configure -D" can be used as an escape hatch. BUILTIN_OPTIONS = { "b_coverage", "b_lto",
Signature · 1 line
2.41.0
[PULL 18/32] configure: clean up handling of CFI option
In reply to Paolo BonziniAvoid that --enable-cfi --disable-cfi leaves b_lto set to true.
--- configure | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
configure +7 -6
@@ -625,7 +625,10 @@ meson_option_build_array() { meson_options= meson_option_add() { - meson_options="$meson_options $(quote_sh "$1")" + local arg + for arg; do + meson_options="$meson_options $(quote_sh "$arg")" + done } meson_option_parse() { meson_options="$meson_options $(_meson_option_parse "$@")"
@@ -767,11 +770,9 @@ for opt do ;; --disable-werror) werror="no" ;; - --enable-cfi) - cfi="true"; - meson_option_add -Db_lto=true + --enable-cfi) cfi=true ;; - --disable-cfi) cfi="false" + --disable-cfi) cfi=false ;; --disable-download) download="disabled"; git_submodules_action=validate; ;;
@@ -1845,7 +1846,7 @@ if test "$skip_meson" = no; then test "$werror" = yes && meson_option_add -Dwerror=true # QEMU options - test "$cfi" != false && meson_option_add "-Dcfi=$cfi" + test "$cfi" != false && meson_option_add "-Dcfi=$cfi" "-Db_lto=$cfi" test "$docs" != auto && meson_option_add "-Ddocs=$docs" test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE" test "$plugins" = yes && meson_option_add "-Dplugins=true"
Signature · 1 line
2.41.0
[PULL 13/32] tests/vm: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal or by double-escaping the backslash.
--- tests/vm/basevm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
tests/vm/basevm.py +3 -3
@@ -331,8 +331,8 @@ def console_init(self, timeout = None): def console_log(self, text): for line in re.split("[\r\n]", text): # filter out terminal escape sequences - line = re.sub("\x1b\[[0-9;?]*[a-zA-Z]", "", line) - line = re.sub("\x1b\([0-9;?]*[a-zA-Z]", "", line) + line = re.sub("\x1b\\[[0-9;?]*[a-zA-Z]", "", line) + line = re.sub("\x1b\\([0-9;?]*[a-zA-Z]", "", line) # replace unprintable chars line = re.sub("\x1b", "<esc>", line) line = re.sub("[\x00-\x1f]", ".", line)
@@ -530,7 +530,7 @@ def get_qemu_version(qemu_path): and return the major number.""" output = subprocess.check_output([qemu_path, '--version']) version_line = output.decode("utf-8") - version_num = re.split(' |\(', version_line)[3].split('.')[0] + version_num = re.split(r' |\(', version_line)[3].split('.')[0] return int(version_num) def parse_config(config, args):
Signature · 1 line
2.41.0
[PULL 16/32] meson: do not use set10
In reply to Paolo BonziniMake all items of config-host.h consistent. To keep the --disable-coroutine-pool code visible to the compiler, mutuate the IS_ENABLED() macro from Linux.
--- include/qemu/compiler.h | 15 +++++++++++++++ meson.build | 2 +- tests/unit/test-coroutine.c | 2 +- util/qemu-coroutine.c | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-)
include/qemu/compiler.h +15 -0
@@ -212,4 +212,19 @@# define QEMU_USED #endif +/* +* Ugly CPP trick that is like "defined FOO", but also works in C +* code. Useful to replace #ifdef with "if" statements; assumes +* the symbol was defined with Meson's "config.set()", so it is empty +* if defined. +*/ +#define IS_ENABLED (x) IS_EMPTY(x) + +#define IS_EMPTY_JUNK_ junk, +#define IS_EMPTY (value) IS_EMPTY_(IS_EMPTY_JUNK_##value) + +/* Expands to either SECOND_ARG(junk, 1, 0) or SECOND_ARG(IS_EMPTY_JUNK_CONFIG_FOO 1, 0) */ +#define SECOND_ARG (first, second, ...) second +#define IS_EMPTY_ (junk_maybecomma) SECOND_ARG(junk_maybecomma 1, 0) +#endif /* COMPILER_H */
meson.build +1 -1
@@ -2194,7 +2194,7 @@ if get_option('debug_stack_usage') and have_coroutine_pool message('Disabling coroutine pool to measure stack usage') have_coroutine_pool = false endif -config_host_data.set10('CONFIG_COROUTINE_POOL', have_coroutine_pool) +config_host_data.set('CONFIG_COROUTINE_POOL', have_coroutine_pool) config_host_data.set('CONFIG_DEBUG_GRAPH_LOCK', get_option('debug_graph_lock')) config_host_data.set('CONFIG_DEBUG_MUTEX', get_option('debug_mutex')) config_host_data.set('CONFIG_DEBUG_STACK_USAGE', get_option('debug_stack_usage'))
tests/unit/test-coroutine.c +1 -1
@@ -645,7 +645,7 @@ int main(int argc, char **argv)* with a sentinel value. If there is no freelist this would legitimately * crash, so skip it. */ -if (CONFIG_COROUTINE_POOL ) { +if (IS_ENABLED (CONFIG_COROUTINE_POOL )) {g_test_add_func ("/basic/no-dangling-access" , test_no_dangling_access); }
util/qemu-coroutine.c +2 -2
@@ -57,7 +57,7 @@ Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque) {Coroutine *co =NULL ; -if (CONFIG_COROUTINE_POOL ) { +if (IS_ENABLED (CONFIG_COROUTINE_POOL )) {CoroutineQSList *alloc_pool =get_ptr_alloc_pool (); co =QSLIST_FIRST (alloc_pool);
@@ -99,7 +99,7 @@ static void coroutine_delete(Coroutine *co) { co->caller =NULL ; -if (CONFIG_COROUTINE_POOL ) { +if (IS_ENABLED (CONFIG_COROUTINE_POOL )) {if (release_pool_size <qatomic_read (&pool_max_size) *2 ) {QSLIST_INSERT_HEAD_ATOMIC (&release_pool, co, pool_next);qatomic_inc (&release_pool_size);
Signature · 1 line
2.41.0
[PULL 12/32] tests/avocado: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal.
--- tests/avocado/virtio_check_params.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/avocado/virtio_check_params.py +1 -1
@@ -43,7 +43,7 @@ class VirtioMaxSegSettingsCheck(QemuSystemTest): @staticmethod def make_pattern(props): - pattern_items = ['{0} = \w+'.format(prop) for prop in props] + pattern_items = [r'{0} = \w+'.format(prop) for prop in props] return '|'.join(pattern_items) def query_virtqueue(self, vm, dev_type_name):
Signature · 1 line
2.41.0
[PULL 27/32] configure: move environment-specific defaults to config-meson.cross
In reply to Paolo BonziniStore the -Werror and SMBD defaults in the machine file, which still allows them to be overridden on the command line and enables automatic parsing of the related options.
--- configure | 37 +++++++++++++---------------------- scripts/meson-buildoptions.py | 3 ++- scripts/meson-buildoptions.sh | 5 +++++ 3 files changed, 21 insertions(+), 24 deletions(-)
configure +14 -23
@@ -258,7 +258,6 @@ skip_meson=no use_containers="yes" gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") gdb_arches="" -werror="" # Don't accept a target_list environment variable. unset target_list
@@ -314,7 +313,6 @@ objcopy="${OBJCOPY-${cross_prefix}objcopy}" ld="${LD-${cross_prefix}ld}" 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}"
@@ -651,8 +649,6 @@ for opt do ;; --ninja=*) ninja="$optarg" ;; - --smbd=*) smbd="$optarg" - ;; --extra-cflags=*) ;; --extra-cxxflags=*)
@@ -744,10 +740,6 @@ for opt do ;; --disable-pie) pie="no" ;; - --enable-werror) werror="yes" - ;; - --disable-werror) werror="no" - ;; --enable-cfi) cfi=true ;; --disable-cfi) cfi=false
@@ -879,7 +871,6 @@ Advanced options (experts only): --cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases --python=PYTHON use specified python [$python] --ninja=NINJA use specified ninja [$ninja] - --smbd=SMBD use specified smbd [$smbd] --static enable static build [$static] --without-default-features default all --enable-* options to "disabled" --without-default-devices do not include any device that is not needed to
@@ -887,7 +878,6 @@ Advanced options (experts only): desired devices in configs/devices/) --with-devices-ARCH=NAME override default configs/devices --enable-debug enable common debug build options - --disable-werror disable compilation abort on warning --cpu=CPU Build for host CPU [$cpu] --disable-containers don't use containers for cross-building --container-engine=TYPE which container engine to use [$container_engine]
@@ -1011,17 +1001,6 @@ if test -z "$ninja"; then fi fi -# Consult white-list to determine whether to enable werror -# by default. Only enable by default for git builds -if test -z "$werror" ; then - if test -e "$source_path/.git" && \ - { test "$targetos" = linux || test "$targetos" = "windows"; }; then - werror="yes" - else - werror="no" - fi -fi - if test "$targetos" = "bogus"; then # Now that we know that we're not printing the help and that # the compiler works (so the results of the check_defines we used
@@ -1764,6 +1743,20 @@ if test "$skip_meson" = no; then test -n "$objcc" && echo "objc_args = [$(meson_quote $OBJCFLAGS $EXTRA_OBJCFLAGS)]" >> $cross echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross + + # Only enable by default for git builds and on select OSes + echo "# environment defaults, can still be overridden on " >> $cross + echo "# the command line" >> $cross + if test -e "$source_path/.git" && \ + { test "$targetos" = linux || test "$targetos" = "windows"; }; then + echo 'werror = true' >> $cross + fi + echo "[project options]" >> $cross + if test "$SMBD" != ''; then + echo "smbd = $(meson_quote "$SMBD")" >> $cross + fi + + echo >> $cross echo "[binaries]" >> $cross echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
@@ -1818,14 +1811,12 @@ if test "$skip_meson" = no; then test "$default_feature" = no && meson_option_add -Dauto_features=disabled test "$static" = yes && meson_option_add -Dprefer_static=true test "$pie" = no && meson_option_add -Db_pie=false - test "$werror" = yes && meson_option_add -Dwerror=true # QEMU options test "$cfi" != false && meson_option_add "-Dcfi=$cfi" "-Db_lto=$cfi" test "$docs" != auto && meson_option_add "-Ddocs=$docs" test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE" test "$plugins" = yes && meson_option_add "-Dplugins=true" - test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd" test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg" run_meson() { NINJA=$ninja $meson setup "$@" "$PWD" "$source_path"
scripts/meson-buildoptions.py +2 -1
@@ -28,7 +28,6 @@ SKIP_OPTIONS = { "default_devices", "fuzzing_engine", - "smbd", } OPTION_NAMES = {
@@ -47,6 +46,7 @@ # Options that configure autodetects, even though meson defines them as boolean AUTO_OPTIONS = { "plugins", + "werror", } BUILTIN_OPTIONS = {
@@ -64,6 +64,7 @@ "prefix", "strip", "sysconfdir", + "werror", } LINE_WIDTH = 76
scripts/meson-buildoptions.sh +5 -0
@@ -64,6 +64,7 @@ meson_options_help() { printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]' printf "%s\n" ' --mandir=VALUE Manual page directory [share/man]' printf "%s\n" ' --prefix=VALUE Installation prefix [/usr/local]' + printf "%s\n" ' --smbd=VALUE Path to smbd for slirp networking' 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]'
@@ -205,6 +206,7 @@ meson_options_help() { printf "%s\n" ' vpc vpc image format support' printf "%s\n" ' vte vte support for the gtk UI' printf "%s\n" ' vvfat vvfat image format support' + printf "%s\n" ' werror Treat warnings as errors' printf "%s\n" ' whpx WHPX acceleration support' printf "%s\n" ' xen Xen backend support' printf "%s\n" ' xen-pci-passthrough'
@@ -453,6 +455,7 @@ _meson_option_parse() { --disable-slirp-smbd) printf "%s" -Dslirp_smbd=disabled ;; --enable-smartcard) printf "%s" -Dsmartcard=enabled ;; --disable-smartcard) printf "%s" -Dsmartcard=disabled ;; + --smbd=*) quote_sh "-Dsmbd=$2" ;; --enable-snappy) printf "%s" -Dsnappy=enabled ;; --disable-snappy) printf "%s" -Dsnappy=disabled ;; --enable-sndio) printf "%s" -Dsndio=enabled ;;
@@ -529,6 +532,8 @@ _meson_option_parse() { --disable-vte) printf "%s" -Dvte=disabled ;; --enable-vvfat) printf "%s" -Dvvfat=enabled ;; --disable-vvfat) printf "%s" -Dvvfat=disabled ;; + --enable-werror) printf "%s" -Dwerror=true ;; + --disable-werror) printf "%s" -Dwerror=false ;; --enable-whpx) printf "%s" -Dwhpx=enabled ;; --disable-whpx) printf "%s" -Dwhpx=disabled ;; --enable-xen) printf "%s" -Dxen=enabled ;;
Signature · 1 line
2.41.0
[PULL 29/32] configure, meson: use command line options to configure qemu-ga
In reply to Paolo BonziniPreserve the functionality of the environment variables, but allow using the command line instead.
--- configure | 16 +++++++++------- meson_options.txt | 7 +++++++ qga/meson.build | 9 ++++++--- scripts/meson-buildoptions.sh | 9 +++++++++ 4 files changed, 31 insertions(+), 10 deletions(-)
configure +9 -7
@@ -1592,12 +1592,6 @@ echo >> $config_host_mak echo all: >> $config_host_mak -if test "$targetos" = "windows"; then - echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER-QEMU}" >> $config_host_mak - echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO-Linux}" >> $config_host_mak - echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak -fi - echo "SRC_PATH=$source_path" >> $config_host_mak echo "TARGET_DIRS=$target_list" >> $config_host_mak echo "GDB=$gdb_bin" >> $config_host_mak
@@ -1724,6 +1718,15 @@ if test "$skip_meson" = no; then if test "$SMBD" != ''; then echo "smbd = $(meson_quote "$SMBD")" >> $cross fi + if test "${QEMU_GA_MANUFACTURER}" != ''; then + echo "qemu_ga_manufacturer = $(meson_quote "${QEMU_GA_MANUFACTURER}")" >> $cross + fi + if test "${QEMU_GA_DISTRO}" != ''; then + echo "qemu_ga_distro = $(meson_quote "${QEMU_GA_DISTRO}")" >> $cross + fi + if test "${QEMU_GA_VERSION}" != ''; then + echo "qemu_ga_version = $(meson_quote "${QEMU_GA_VERSION}")" >> $cross + fi echo >> $cross echo "[binaries]" >> $cross
@@ -1775,7 +1778,6 @@ if test "$skip_meson" = no; then rm -rf meson-private meson-info meson-logs - # Built-in options test "$download" = "disabled" && meson_option_add "--wrap-mode=nodownload" test "$default_feature" = no && meson_option_add -Dauto_features=disabled test "$static" = yes && meson_option_add -Dprefer_static=true
meson_options.txt +7 -0
@@ -353,5 +353,12 @@ option('qom_cast_debug', type: 'boolean', value: true, option('slirp_smbd', type : 'feature', value : 'auto', description: 'use smbd (at path --smbd=*) in slirp networking') +option('qemu_ga_manufacturer', type: 'string', value: 'QEMU', + description: '"manufacturer" name for qemu-ga registry entries') +option('qemu_ga_distro', type: 'string', value: 'Linux', + description: 'second path element in qemu-ga registry entries') +option('qemu_ga_version', type: 'string', value: '', + description: 'version number for qemu-ga installer') + option('hexagon_idef_parser', type : 'boolean', value : true, description: 'use idef-parser to automatically generate TCG code for the Hexagon frontend')
qga/meson.build +6 -3
@@ -145,6 +145,9 @@ if targetos == 'windows' else libpcre = 'libpcre2' endif + qga_msi_version = get_option('qemu_ga_version') == '' \ + ? project.version() \ + : get_option('qemu_ga_version') qga_msi = custom_target('QGA MSI', input: files('installer/qemu-ga.wxs'), output: 'qemu-ga-@[email protected]'.format(host_arch),
@@ -155,9 +158,9 @@ if targetos == 'windows' qemu_ga_msi_vss, '-D', 'BUILD_DIR=' + meson.project_build_root(), '-D', 'BIN_DIR=' + glib_pc.get_variable('bindir'), - '-D', 'QEMU_GA_VERSION=' + config_host['QEMU_GA_VERSION'], - '-D', 'QEMU_GA_MANUFACTURER=' + config_host['QEMU_GA_MANUFACTURER'], - '-D', 'QEMU_GA_DISTRO=' + config_host['QEMU_GA_DISTRO'], + '-D', 'QEMU_GA_VERSION=' + qga_msi_version, + '-D', 'QEMU_GA_MANUFACTURER=' + get_option('qemu_ga_manufacturer'), + '-D', 'QEMU_GA_DISTRO=' + get_option('qemu_ga_distro'), '-D', 'LIBPCRE=' + libpcre, ]) all_qga += [qga_msi]
scripts/meson-buildoptions.sh +9 -0
@@ -64,6 +64,12 @@ meson_options_help() { printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]' printf "%s\n" ' --mandir=VALUE Manual page directory [share/man]' printf "%s\n" ' --prefix=VALUE Installation prefix [/usr/local]' + printf "%s\n" ' --qemu-ga-distro=VALUE second path element in qemu-ga registry entries' + printf "%s\n" ' [Linux]' + printf "%s\n" ' --qemu-ga-manufacturer=VALUE' + printf "%s\n" ' "manufacturer" name for qemu-ga registry entries' + printf "%s\n" ' [QEMU]' + printf "%s\n" ' --qemu-ga-version=VALUE version number for qemu-ga installer' printf "%s\n" ' --smbd=VALUE Path to smbd for slirp networking' printf "%s\n" ' --sysconfdir=VALUE Sysconf data directory [etc]' printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
@@ -422,6 +428,9 @@ _meson_option_parse() { --enable-qed) printf "%s" -Dqed=enabled ;; --disable-qed) printf "%s" -Dqed=disabled ;; --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$(meson_option_build_array $2)" ;; + --qemu-ga-distro=*) quote_sh "-Dqemu_ga_distro=$2" ;; + --qemu-ga-manufacturer=*) quote_sh "-Dqemu_ga_manufacturer=$2" ;; + --qemu-ga-version=*) quote_sh "-Dqemu_ga_version=$2" ;; --with-suffix=*) quote_sh "-Dqemu_suffix=$2" ;; --enable-qga-vss) printf "%s" -Dqga_vss=enabled ;; --disable-qga-vss) printf "%s" -Dqga_vss=disabled ;;
Signature · 1 line
2.41.0
[PULL 31/32] meson: add a note on why we use config_host for program paths
In reply to Paolo Bonzini--- meson.build | 5 +++++ 1 file changed, 5 insertions(+)
meson.build +5 -0
@@ -4021,6 +4021,11 @@ summary(summary_info, bool_yn: true, section: 'Directories') summary_info = {} summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} summary_info += {'sphinx-build': sphinx_build} + +# FIXME: the [binaries] section of machine files, which can be probed +# with find_program(), would be great for passing gdb and genisoimage +# paths from configure to Meson. However, there seems to be no way to +# hide a program (for example if gdb is too old). if config_host.has_key('GDB') summary_info += {'gdb': config_host['GDB']} endif
Signature · 1 line
2.41.0
[PULL 26/32] configure: move target-specific defaults to an external machine file
In reply to Paolo BonziniEnable Windows-specific defaults with a machine file, so that related options can be automatically parsed and included in the help message.
--- configs/meson/windows.txt | 9 +++++++++ configure | 37 ++++++++++++++--------------------- scripts/meson-buildoptions.py | 4 +++- scripts/meson-buildoptions.sh | 7 +++++++ 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 configs/meson/windows.txt
configs/meson/windows.txt new file +9 -0
@@ -0,0 +1,9 @@ +# target-specific defaults, can still be overridden on +# the command line + +[built-in options] +bindir = '' +prefix = '/qemu' + +[project options] +qemu_suffix = ''
configure +15 -22
@@ -246,8 +246,6 @@ default_cflags='-O2 -g' git_submodules_action="update" docs="auto" EXESUF="" -prefix="/usr/local" -qemu_suffix="qemu" system="yes" linux_user="" bsd_user=""
@@ -256,7 +254,6 @@ subdirs="" ninja="" python= download="enabled" -bindir="bin" skip_meson=no use_containers="yes" gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
@@ -583,9 +580,6 @@ done if test "$targetos" = "windows" ; then EXESUF=".exe" - prefix="/qemu" - bindir="" - qemu_suffix="" fi meson_option_build_array() {
@@ -622,6 +616,14 @@ meson_option_parse() { fi } +meson_add_machine_file() { + if test "$cross_compile" = "yes"; then + meson_option_add --cross-file "$1" + else + meson_option_add --native-file "$1" + fi +} + for opt do optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') case "$opt" in
@@ -629,8 +631,6 @@ for opt do ;; --version|-V) exec cat "$source_path/VERSION" ;; - --prefix=*) prefix="$optarg" - ;; --cross-prefix=*) ;; --cc=*)
@@ -701,10 +701,6 @@ for opt do ;; --static) static="yes" ;; - --bindir=*) bindir="$optarg" - ;; - --with-suffix=*) qemu_suffix="$optarg" - ;; --host=*|--build=*|\ --disable-dependency-tracking|\ --sbindir=*|--sharedstatedir=*|\
@@ -861,7 +857,6 @@ Options: [defaults in brackets after descriptions] Standard options: --help print this message - --prefix=PREFIX install in PREFIX [$prefix] --target-list=LIST set target list (default: build all) $(echo Available targets: $default_target_list | \ fold -s -w 53 | sed -e 's/^/ /')
@@ -886,8 +881,6 @@ Advanced options (experts only): --ninja=NINJA use specified ninja [$ninja] --smbd=SMBD use specified smbd [$smbd] --static enable static build [$static] - --bindir=PATH install binaries in PATH - --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] --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
@@ -1803,24 +1796,25 @@ if test "$skip_meson" = no; then else echo "endian = 'little'" >> $cross fi - cross_arg="--cross-file config-meson.cross" native="config-meson.native.new" echo "# Automatically generated by configure - do not modify" > $native echo "[binaries]" >> $native echo "c = [$(meson_quote $host_cc)]" >> $native mv $native config-meson.native - cross_arg="$cross_arg --native-file config-meson.native" - else - cross_arg="--native-file config-meson.cross" + meson_option_add --native-file + meson_option_add config-meson.native fi mv $cross config-meson.cross + meson_add_machine_file config-meson.cross + if test -f "$source_path/configs/meson/$targetos.txt"; then + meson_add_machine_file $source_path/configs/meson/$targetos.txt + fi rm -rf meson-private meson-info meson-logs # Built-in options test "$download" = "disabled" && meson_option_add "--wrap-mode=nodownload" - test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir" test "$default_feature" = no && meson_option_add -Dauto_features=disabled test "$static" = yes && meson_option_add -Dprefer_static=true test "$pie" = no && meson_option_add -Db_pie=false
@@ -1831,11 +1825,10 @@ if test "$skip_meson" = no; then test "$docs" != auto && meson_option_add "-Ddocs=$docs" test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE" test "$plugins" = yes && meson_option_add "-Dplugins=true" - test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix" test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd" test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg" run_meson() { - NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path" + NINJA=$ninja $meson setup "$@" "$PWD" "$source_path" } eval run_meson $meson_options if test "$?" -ne 0 ; then
scripts/meson-buildoptions.py +3 -1
@@ -28,7 +28,6 @@ SKIP_OPTIONS = { "default_devices", "fuzzing_engine", - "qemu_suffix", "smbd", }
@@ -40,6 +39,7 @@ "malloc": "enable-malloc", "pkgversion": "with-pkgversion", "qemu_firmwarepath": "firmwarepath", + "qemu_suffix": "with-suffix", "trace_backends": "enable-trace-backends", "trace_file": "with-trace-file", }
@@ -52,6 +52,7 @@ BUILTIN_OPTIONS = { "b_coverage", "b_lto", + "bindir", "datadir", "debug", "includedir",
@@ -60,6 +61,7 @@ "localedir", "localstatedir", "mandir", + "prefix", "strip", "sysconfdir", }
scripts/meson-buildoptions.sh +7 -0
@@ -3,6 +3,7 @@ meson_options_help() { printf "%s\n" ' --audio-drv-list=CHOICES Set audio driver list [default] (choices: alsa/co' printf "%s\n" ' reaudio/default/dsound/jack/oss/pa/pipewire/sdl/s' printf "%s\n" ' ndio)' + printf "%s\n" ' --bindir=VALUE Executable directory [bin]' 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)'
@@ -62,6 +63,7 @@ meson_options_help() { 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" ' --prefix=VALUE Installation prefix [/usr/local]' 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]'
@@ -69,6 +71,8 @@ meson_options_help() { printf "%s\n" ' auto/sigaltstack/ucontext/windows)' printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the' printf "%s\n" ' package' + printf "%s\n" ' --with-suffix=VALUE Suffix for QEMU data/modules/config directories' + printf "%s\n" ' (can be empty) [qemu]' 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'
@@ -229,6 +233,7 @@ _meson_option_parse() { --disable-gcov) printf "%s" -Db_coverage=false ;; --enable-lto) printf "%s" -Db_lto=true ;; --disable-lto) printf "%s" -Db_lto=false ;; + --bindir=*) quote_sh "-Dbindir=$2" ;; --enable-blkio) printf "%s" -Dblkio=enabled ;; --disable-blkio) printf "%s" -Dblkio=disabled ;; --block-drv-ro-whitelist=*) quote_sh "-Dblock_drv_ro_whitelist=$2" ;;
@@ -407,6 +412,7 @@ _meson_option_parse() { --disable-plugins) printf "%s" -Dplugins=false ;; --enable-png) printf "%s" -Dpng=enabled ;; --disable-png) printf "%s" -Dpng=disabled ;; + --prefix=*) quote_sh "-Dprefix=$2" ;; --enable-pvrdma) printf "%s" -Dpvrdma=enabled ;; --disable-pvrdma) printf "%s" -Dpvrdma=disabled ;; --enable-qcow1) printf "%s" -Dqcow1=enabled ;;
@@ -414,6 +420,7 @@ _meson_option_parse() { --enable-qed) printf "%s" -Dqed=enabled ;; --disable-qed) printf "%s" -Dqed=disabled ;; --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$(meson_option_build_array $2)" ;; + --with-suffix=*) quote_sh "-Dqemu_suffix=$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 ;;
Signature · 1 line
2.41.0
[PULL 11/32] target/hexagon: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal.
--- target/hexagon/hex_common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
target/hexagon/hex_common.py +2 -2
@@ -45,7 +45,7 @@ def uniquify(seq): immre = re.compile(r"[#]([rRsSuUm])(\d+)(?:[:](\d+))?") reg_or_immre = re.compile( r"(((?<!DUP)[MNRCOPQXSGVZA])([stuvwxyzdefg]+)" - + "([.]?[LlHh]?)(\d+S?))|([#]([rRsSuUm])(\d+)[:]?(\d+)?)" + r"([.]?[LlHh]?)(\d+S?))|([#]([rRsSuUm])(\d+)[:]?(\d+)?)" ) relimmre = re.compile(r"[#]([rR])(\d+)(?:[:](\d+))?") absimmre = re.compile(r"[#]([sSuUm])(\d+)(?:[:](\d+))?")
@@ -337,7 +337,7 @@ def read_attribs_file(name): def read_overrides_file(name): - overridere = re.compile("#define fGEN_TCG_([A-Za-z0-9_]+)\(.*") + overridere = re.compile(r"#define fGEN_TCG_([A-Za-z0-9_]+)\(.*") for line in open(name, "rt").readlines(): if not overridere.match(line): continue
Signature · 1 line
2.41.0
[PULL 08/32] scripts/get_maintainer.pl: don't print parentheses
In reply to Paolo BonziniFrom: Emmanouil Pitsidianakis <[email protected]>
When called from git-send-email, some results contain unclosed parentheses from the subsystem title, for example:
(cc-cmd) Adding cc: [email protected] (open list:PowerNV (Non-Virt...) from: 'scripts/get_maintainer.pl --nogit-fallback' (cc-cmd) Adding cc: [email protected] (open list:All patches CC here) from: 'scripts/get_maintainer.pl --nogit-fallback' Unmatched () '(open list:PowerNV (Non-Virt...)' '' at /usr/lib/git-core/git-send-email line 642. error: unable to extract a valid address from: [email protected] (open list:PowerNV (Non-Virt...) What to do with this address? ([q]uit|[d]rop|[e]dit): d
This commit removes all parentheses from results.
Message-ID: <[email protected]>
--- scripts/get_maintainer.pl | 1 + 1 file changed, 1 insertion(+)
scripts/get_maintainer.pl +1 -0
@@ -907,6 +907,7 @@ sub get_subsystem_name { if (length($subsystem) > 20) { $subsystem = substr($subsystem, 0, 17); $subsystem =~ s/\s*$//; + $subsystem =~ s/[()]//g; $subsystem = $subsystem . "..."; } return $subsystem;
Signature · 1 line
2.41.0
[PULL 04/32] target/i386/cpu: Fix CPUID_HT exposure
In reply to Paolo BonziniFrom: Xiaoyao Li <[email protected]>
When explicitly booting a multiple vcpus vm with "-cpu +ht", it gets warning of
warning: host doesn't support requested feature: CPUID.01H:EDX.ht [bit 28]
Make CPUID_HT as supported unconditionally can resolve the warning. However it introduces another issue that it also expose CPUID_HT to guest when "-cpu host/max" with only 1 vcpu. To fix this, need mark CPUID_HT as the no_autoenable_flags.
Message-ID: <[email protected]>
--- target/i386/cpu.c | 1 + target/i386/kvm/kvm.c | 2 ++ 2 files changed, 3 insertions(+)
target/i386/cpu.c +1 -0
@@ -778,6 +778,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .cpuid = {.eax = 1, .reg = R_EDX, }, .tcg_features = TCG_FEATURES, + .no_autoenable_flags = CPUID_HT, }, [FEAT_1_ECX] = { .type = CPUID_FEATURE_WORD,
target/i386/kvm/kvm.c +2 -0
@@ -373,6 +373,8 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,if (function ==1 && reg ==R_EDX ) {/* KVM before 2.6.30 misreports the following features */ ret |=CPUID_MTRR |CPUID_PAT |CPUID_MCE |CPUID_MCA ; +/* KVM never reports CPUID_HT but QEMU can support when vcpus > 1 */ + ret |=CPUID_HT ; }else if (function ==1 && reg ==R_ECX ) {/* We can set the hypervisor flag, even if KVM does not return it on * GET_SUPPORTED_CPUID
Signature · 1 line
2.41.0
[PULL 22/32] configure, tests/tcg: simplify GDB conditionals
In reply to Paolo BonziniUnify HAVE_GDB_BIN (currently in config-host.mak) and HOST_GDB_SUPPORTS_ARCH into a single GDB variable in config-target.mak.
--- configure | 30 +++++++++---------- meson.build | 4 +-- tests/tcg/aarch64/Makefile.target | 6 ++-- tests/tcg/multiarch/Makefile.target | 18 ++++------- .../multiarch/system/Makefile.softmmu-target | 15 ++++------ tests/tcg/s390x/Makefile.target | 6 ++-- 6 files changed, 33 insertions(+), 46 deletions(-)
configure +14 -16
@@ -1140,6 +1140,18 @@ if test "$tcg" = "auto"; then fi fi +######################################### +# gdb test + +if test -n "$gdb_bin"; then + gdb_version=$($gdb_bin --version | head -n 1) + if version_ge ${gdb_version##* } 9.1; then + gdb_arches=$($python "$source_path/scripts/probe-gdb-support.py" $gdb_bin) + else + gdb_bin="" + fi +fi + ########################################## # big/little endian test cat > $TMPC << EOF
@@ -1660,17 +1672,7 @@ fi echo "SRC_PATH=$source_path" >> $config_host_mak echo "TARGET_DIRS=$target_list" >> $config_host_mak - -if test -n "$gdb_bin"; then - gdb_version=$($gdb_bin --version | head -n 1) - if version_ge ${gdb_version##* } 9.1; then - echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak - gdb_arches=$($python "$source_path/scripts/probe-gdb-support.py" $gdb_bin) - else - gdb_bin="" - fi -fi - +echo "GDB=$gdb_bin" >> $config_host_mak if test "$container" != no; then echo "RUNC=$runc" >> $config_host_mak fi
@@ -1715,10 +1717,6 @@ mkdir -p tests/tcg echo "# Automatically generated by configure - do not modify" > $config_host_mak echo "SRC_PATH=$source_path" >> $config_host_mak -# versioned checked in the main config_host.mak above -if test -n "$gdb_bin"; then - echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak -fi if test "$plugins" = "yes" ; then echo "CONFIG_PLUGIN=y" >> $config_host_mak fi
@@ -1755,7 +1753,7 @@ for target in $target_list; do # will GDB work with these binaries? if test "${gdb_arches#*$arch}" != "$gdb_arches"; then - echo "HOST_GDB_SUPPORTS_ARCH=y" >> "$config_target_mak" + echo "GDB=$gdb_bin" >> $config_target_mak fi echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
meson.build +2 -2
@@ -4021,8 +4021,8 @@ summary(summary_info, bool_yn: true, section: 'Directories') summary_info = {} summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} summary_info += {'sphinx-build': sphinx_build} -if config_host.has_key('HAVE_GDB_BIN') - summary_info += {'gdb': config_host['HAVE_GDB_BIN']} +if config_host.has_key('GDB') + summary_info += {'gdb': config_host['GDB']} endif summary_info += {'iasl': iasl} summary_info += {'genisoimage': config_host['GENISOIMAGE']}
tests/tcg/aarch64/Makefile.target +3 -3
@@ -105,19 +105,19 @@ sha512-sve: sha512.c TESTS += sha512-sve -ifeq ($(HOST_GDB_SUPPORTS_ARCH),y) +ifneq ($(GDB),) GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py run-gdbstub-sysregs: sysregs $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(AARCH64_SRC)/gdbstub/test-sve.py, \ basic gdbstub SVE support) run-gdbstub-sve-ioctls: sve-ioctls $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(AARCH64_SRC)/gdbstub/test-sve-ioctl.py, \ basic gdbstub SVE ZLEN support)
tests/tcg/multiarch/Makefile.target +6 -12
@@ -63,45 +63,39 @@ run-test-mmap: test-mmap run-test-mmap-%: test-mmap $(call run-test, test-mmap-$*, $(QEMU) -p $* $<, $< ($* byte pages)) -ifneq ($(HAVE_GDB_BIN),) -ifeq ($(HOST_GDB_SUPPORTS_ARCH),y) +ifneq ($(GDB),) GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py run-gdbstub-sha1: sha1 $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(MULTIARCH_SRC)/gdbstub/sha1.py, \ basic gdbstub support) run-gdbstub-qxfer-auxv-read: sha1 $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(MULTIARCH_SRC)/gdbstub/test-qxfer-auxv-read.py, \ basic gdbstub qXfer:auxv:read support) run-gdbstub-proc-mappings: sha1 $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(MULTIARCH_SRC)/gdbstub/test-proc-mappings.py, \ proc mappings support) run-gdbstub-thread-breakpoint: testthread $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(MULTIARCH_SRC)/gdbstub/test-thread-breakpoint.py, \ hitting a breakpoint on non-main thread) - else run-gdbstub-%: - $(call skip-test, "gdbstub test $*", "no guest arch support") -endif -else -run-gdbstub-%: - $(call skip-test, "gdbstub test $*", "need working gdb") + $(call skip-test, "gdbstub test $*", "need working gdb with $(patsubst -%,,$(TARGET_NAME)) support") endif EXTRA_RUNS += run-gdbstub-sha1 run-gdbstub-qxfer-auxv-read \ run-gdbstub-proc-mappings run-gdbstub-thread-breakpoint
tests/tcg/multiarch/system/Makefile.softmmu-target +5 -10
@@ -14,13 +14,12 @@ VPATH+=$(MULTIARCH_SYSTEM_SRC) MULTIARCH_TEST_SRCS=$(wildcard $(MULTIARCH_SYSTEM_SRC)/*.c) MULTIARCH_TESTS = $(patsubst $(MULTIARCH_SYSTEM_SRC)/%.c, %, $(MULTIARCH_TEST_SRCS)) -ifneq ($(HAVE_GDB_BIN),) -ifeq ($(HOST_GDB_SUPPORTS_ARCH),y) +ifneq ($(GDB),) GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py run-gdbstub-memory: memory $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) \ --output $<.gdb.out \ --qargs \
@@ -29,7 +28,7 @@ run-gdbstub-memory: memory softmmu gdbstub support) run-gdbstub-interrupt: interrupt $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) \ --output $<.gdb.out \ --qargs \
@@ -38,7 +37,7 @@ run-gdbstub-interrupt: interrupt softmmu gdbstub support) run-gdbstub-untimely-packet: hello $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --gdb-args "-ex 'set debug remote 1'" \ --output untimely-packet.gdb.out \ --stderr untimely-packet.gdb.err \
@@ -51,11 +50,7 @@ run-gdbstub-untimely-packet: hello "GREP", file untimely-packet.gdb.err) else run-gdbstub-%: - $(call skip-test, "gdbstub test $*", "no guest arch support") -endif -else -run-gdbstub-%: - $(call skip-test, "gdbstub test $*", "need working gdb") + $(call skip-test, "gdbstub test $*", "need working gdb with $(patsubst -%,,$(TARGET_NAME)) support") endif MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt run-gdbstub-untimely-packet
tests/tcg/s390x/Makefile.target +3 -3
@@ -81,12 +81,12 @@ $(Z15_TESTS): CFLAGS+=-march=z15 -O2 TESTS+=$(Z15_TESTS) endif -ifeq ($(HOST_GDB_SUPPORTS_ARCH),y) +ifneq ($(GDB),) GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py run-gdbstub-signals-s390x: signals-s390x $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(S390X_SRC)/gdbstub/test-signals-s390x.py, \ mixing signals and debugging)
@@ -95,7 +95,7 @@ hello-s390x-asm: CFLAGS+=-nostdlib run-gdbstub-svc: hello-s390x-asm $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(HAVE_GDB_BIN) \ + --gdb $(GDB) \ --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ --bin $< --test $(S390X_SRC)/gdbstub/test-svc.py, \ single-stepping svc)
Signature · 1 line
2.41.0
[PULL 23/32] configure: clean up plugin option handling
In reply to Paolo BonziniKeep together all the conditions that lead to disabling plugins, and remove now-dead code.
Since the option was not in SKIP_OPTIONS, it was present twice in the help message, both from configure and from meson-buildoptions.sh. Remove the duplication and take the occasion to document the option as autodetected, which it is.
--- configure | 39 +++++++++++++++-------------------- scripts/meson-buildoptions.py | 17 ++++++++++----- scripts/meson-buildoptions.sh | 2 +- 3 files changed, 30 insertions(+), 28 deletions(-)
configure +17 -22
@@ -377,7 +377,6 @@ fi case $targetos in windows) - plugins="no" pie="no" ;; haiku)
@@ -741,7 +740,6 @@ for opt do default_cflags='-O0 -g' ;; --disable-tcg) tcg="disabled" - plugins="no" ;; --enable-tcg) tcg="enabled" ;;
@@ -778,11 +776,7 @@ for opt do ;; --enable-download) download="enabled"; git_submodules_action=update; ;; - --enable-plugins) if test "$targetos" = "windows"; then - error_exit "TCG plugins not currently supported on Windows platforms" - else - plugins="yes" - fi + --enable-plugins) plugins="yes" ;; --disable-plugins) plugins="no" ;;
@@ -808,11 +802,6 @@ then git_submodules_action="validate" fi -# test for any invalid configuration combinations -if test "$plugins" = "yes" -a "$tcg" = "disabled"; then - error_exit "Can't enable plugins on non-TCG builds" -fi - if ! test -f "$source_path/subprojects/keycodemapdb/README" \ && test "$download" = disabled then
@@ -923,8 +912,6 @@ Advanced options (experts only): --enable-debug enable common debug build options --disable-werror disable compilation abort on warning --cpu=CPU Build for host CPU [$cpu] - --enable-plugins - enable plugins via shared library loading --disable-containers don't use containers for cross-building --container-engine=TYPE which container engine to use [$container_engine] --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
@@ -1066,15 +1053,27 @@ if test "$targetos" = "bogus"; then error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" fi +# test for any invalid configuration combinations +if test "$targetos" = "windows"; then + if test "$plugins" = "yes"; then + error_exit "TCG plugins not currently supported on Windows platforms" + fi + plugins="no" +fi +if test "$tcg" = "disabled" ; then + if test "$plugins" = "yes"; then + error_exit "Can't enable plugins on non-TCG builds" + fi + plugins="no" +fi if test "$static" = "yes" ; then if test "$plugins" = "yes"; then error_exit "static and plugins are mutually incompatible" - else - plugins="no" fi + plugins="no" fi -test "$plugins" = "" && plugins=yes -if test "$plugins" = "yes"; then +if test "$plugins" != "no"; then + plugins=yes subdirs="$subdirs contrib/plugins" fi
@@ -1717,10 +1716,6 @@ mkdir -p tests/tcg echo "# Automatically generated by configure - do not modify" > $config_host_mak echo "SRC_PATH=$source_path" >> $config_host_mak -if test "$plugins" = "yes" ; then - echo "CONFIG_PLUGIN=y" >> $config_host_mak -fi - tcg_tests_targets= for target in $target_list; do arch=${target%%-*}
scripts/meson-buildoptions.py +12 -5
@@ -44,6 +44,11 @@ "trace_file": "with-trace-file", } +# Options that configure autodetects, even though meson defines them as boolean +AUTO_OPTIONS = { + "plugins", +} + BUILTIN_OPTIONS = { "b_coverage", "b_lto",
@@ -168,6 +173,7 @@ def cli_metavar(opt): def print_help(options): print("meson_options_help() {") + feature_opts = [] for opt in sorted(options, key=cli_help_key): key = cli_help_key(opt) # The first section includes options that have an arguments,
@@ -176,7 +182,7 @@ def print_help(options): metavar = cli_metavar(opt) left = f"--{key}={metavar}" help_line(left, opt, 27, True) - elif opt["type"] == "boolean": + elif opt["type"] == "boolean" and opt["name"] not in AUTO_OPTIONS: left = f"--{key}" help_line(left, opt, 27, False) elif allow_arg(opt):
@@ -185,16 +191,17 @@ def print_help(options): else: left = f"--{key}=CHOICE" help_line(left, opt, 27, True) + else: + feature_opts.append(opt) sh_print() sh_print("Optional features, enabled with --enable-FEATURE and") sh_print("disabled with --disable-FEATURE, default is enabled if available") sh_print("(unless built with --without-default-features):") sh_print() - for opt in options: - key = opt["name"].replace("_", "-") - if opt["type"] != "boolean" and not allow_arg(opt): - help_line(key, opt, 18, False) + for opt in sorted(feature_opts, key=cli_option): + key = cli_option(opt) + help_line(key, opt, 18, False) print("}")
scripts/meson-buildoptions.sh +1 -1
@@ -40,7 +40,6 @@ meson_options_help() { printf "%s\n" ' jemalloc/system/tcmalloc)' printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for' printf "%s\n" ' upgrades' - printf "%s\n" ' --enable-plugins TCG plugins via shared library loading' printf "%s\n" ' --enable-rng-none dummy RNG, avoid using /dev/(u)random and' printf "%s\n" ' getrandom()' printf "%s\n" ' --enable-safe-stack SafeStack Stack Smash Protection (requires'
@@ -149,6 +148,7 @@ meson_options_help() { printf "%s\n" ' pa PulseAudio sound support' printf "%s\n" ' parallels parallels image format support' printf "%s\n" ' pipewire PipeWire sound support' + printf "%s\n" ' plugins TCG plugins via shared library loading' printf "%s\n" ' png PNG support with libpng' printf "%s\n" ' pvrdma Enable PVRDMA support' printf "%s\n" ' qcow1 qcow1 image format support'
Signature · 1 line
2.41.0
[PULL 19/32] hw/xen: cleanup sourcesets
In reply to Paolo Bonzinixen_ss is added unconditionally to arm_ss and i386_ss (the only targets that can have CONFIG_XEN enabled) and its contents are gated by CONFIG_XEN; xen_specific_ss has no condition for its constituent files but is gated on CONFIG_XEN when its added to specific_ss.
So xen_ss is a duplicate of xen_specific_ss, though defined in a different way. Merge the two by eliminating xen_ss.
--- hw/arm/meson.build | 1 - hw/i386/meson.build | 1 - hw/xen/meson.build | 11 ++++------- 3 files changed, 4 insertions(+), 9 deletions(-)
hw/arm/meson.build +0 -1
@@ -64,7 +64,6 @@ arm_ss.add(when: 'CONFIG_ARM_SMMUV3', if_true: files('smmuv3.c')) arm_ss.add(when: 'CONFIG_FSL_IMX6UL', if_true: files('fsl-imx6ul.c', 'mcimx6ul-evk.c')) arm_ss.add(when: 'CONFIG_NRF51_SOC', if_true: files('nrf51_soc.c')) arm_ss.add(when: 'CONFIG_XEN', if_true: files('xen_arm.c')) -arm_ss.add_all(xen_ss) system_ss.add(when: 'CONFIG_ARM_SMMUV3', if_true: files('smmu-common.c')) system_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4_boards.c'))
hw/i386/meson.build +0 -1
@@ -32,6 +32,5 @@ subdir('kvm') subdir('xen') i386_ss.add_all(xenpv_ss) -i386_ss.add_all(xen_ss) hw_arch += {'i386': i386_ss}
hw/xen/meson.build +4 -7
@@ -12,6 +12,10 @@ system_ss.add(when: ['CONFIG_XEN', xen], if_true: files( )) xen_specific_ss = ss.source_set() +xen_specific_ss.add(files( + 'xen-mapcache.c', + 'xen-hvm-common.c', +)) if have_xen_pci_passthrough xen_specific_ss.add(files( 'xen-host-pci-device.c',
@@ -26,10 +30,3 @@ else endif specific_ss.add_all(when: ['CONFIG_XEN', xen], if_true: xen_specific_ss) - -xen_ss = ss.source_set() - -xen_ss.add(when: 'CONFIG_XEN', if_true: files( - 'xen-mapcache.c', - 'xen-hvm-common.c', -))
Signature · 1 line
2.41.0
[PULL 28/32] configure: unify handling of several Debian cross containers
In reply to Paolo BonziniThe Debian and GNU architecture names match very often, even though there are common cases (32-bit Arm or 64-bit x86) where they do not and other cases in which the GNU triplet is actually a quadruplet. But it is still possible to group the common case into a single case inside probe_target_compiler.
--- configure | 41 +++++------------------------------------ 1 file changed, 5 insertions(+), 36 deletions(-)
configure +5 -36
@@ -1281,10 +1281,6 @@ probe_target_compiler() { container_cross_prefix=aarch64-linux-gnu- container_cross_cc=${container_cross_prefix}gcc ;; - alpha) - container_image=debian-alpha-cross - container_cross_prefix=alpha-linux-gnu- - ;; arm) # We don't have any bigendian build tools so we only use this for ARM container_image=debian-armhf-cross
@@ -1299,10 +1295,6 @@ probe_target_compiler() { container_cross_prefix=hexagon-unknown-linux-musl- container_cross_cc=${container_cross_prefix}clang ;; - hppa) - container_image=debian-hppa-cross - container_cross_prefix=hppa-linux-gnu- - ;; i386) container_image=fedora-i386-cross container_cross_prefix=
@@ -1311,10 +1303,6 @@ probe_target_compiler() { container_image=debian-loongarch-cross container_cross_prefix=loongarch64-unknown-linux-gnu- ;; - m68k) - container_image=debian-m68k-cross - container_cross_prefix=m68k-linux-gnu- - ;; microblaze) container_image=debian-microblaze-cross container_cross_prefix=microblaze-linux-musl-
@@ -1327,14 +1315,6 @@ probe_target_compiler() { container_image=debian-mips64-cross container_cross_prefix=mips64-linux-gnuabi64- ;; - mipsel) - container_image=debian-mipsel-cross - container_cross_prefix=mipsel-linux-gnu- - ;; - mips) - container_image=debian-mips-cross - container_cross_prefix=mips-linux-gnu- - ;; nios2) container_image=debian-nios2-cross container_cross_prefix=nios2-linux-gnu-
@@ -1349,22 +1329,6 @@ probe_target_compiler() { container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu- container_cross_cc=${container_cross_prefix}gcc-10 ;; - riscv64) - container_image=debian-riscv64-test-cross - container_cross_prefix=riscv64-linux-gnu- - ;; - s390x) - container_image=debian-s390x-cross - container_cross_prefix=s390x-linux-gnu- - ;; - sh4) - container_image=debian-sh4-cross - container_cross_prefix=sh4-linux-gnu- - ;; - sparc64) - container_image=debian-sparc64-cross - container_cross_prefix=sparc64-linux-gnu- - ;; tricore) container_image=debian-tricore-cross container_cross_prefix=tricore-
@@ -1379,6 +1343,11 @@ probe_target_compiler() { # default to the dc232b cpu container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf- ;; + *) + # Debian and GNU architecture names usually match + container_image=debian-$target_arch-cross + container_cross_prefix=$target_arch-linux-gnu- + ;; esac : ${container_cross_cc:=${container_cross_prefix}gcc} : ${container_cross_ar:=${container_cross_prefix}ar}
Signature · 1 line
2.41.0
[PULL 15/32] meson: do not build shaders by default
In reply to Paolo BonziniThey are not needed when building user-mode emulators.
--- ui/shader/meson.build | 1 + 1 file changed, 1 insertion(+)
ui/shader/meson.build +1 -0
@@ -10,5 +10,6 @@ foreach e : shaders output: output, capture: true, input: files('@0@.@1@'.format(e[0], e[1])), + build_by_default: false, command: [shaderinclude, '@INPUT0@']) endforeach
Signature · 1 line
2.41.0
[PULL 32/32] configure: define "pkg-config" in addition to "pkgconfig"
In reply to Paolo BonziniMeson used to allow both "pkgconfig" and "pkg-config" entries in machine files; the former was used for dependency lookup and the latter was used as return value for "find_program('pkg-config')", which is a less common use-case and one that QEMU does not need.
This inconsistency is going to be fixed by Meson 1.3, which will deprecate "pkgconfig" in favor of "pkg-config" (the less common one, but it makes sense because it matches the name of the binary). For backward compatibility it is still allowed to define both, so do that in the configure-generated machine file.
Related: https://github.com/mesonbuild/meson/pull/12385
--- configure | 1 + 1 file changed, 1 insertion(+)
configure +1 -0
@@ -1736,6 +1736,7 @@ if test "$skip_meson" = no; then echo "ar = [$(meson_quote $ar)]" >> $cross echo "nm = [$(meson_quote $nm)]" >> $cross echo "pkgconfig = [$(meson_quote $pkg_config)]" >> $cross + echo "pkg-config = [$(meson_quote $pkg_config)]" >> $cross echo "ranlib = [$(meson_quote $ranlib)]" >> $cross if has $sdl2_config; then echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
Signature · 1 line
2.41.0
[PULL 20/32] hw/remote: move stub vfu_object_set_bus_irq out of stubs/
In reply to Paolo Bonzini--- hw/remote/meson.build | 4 +++- stubs/vfio-user-obj.c => hw/remote/vfio-user-obj-stub.c | 0 stubs/meson.build | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) rename stubs/vfio-user-obj.c => hw/remote/vfio-user-obj-stub.c (100%)
hw/remote/meson.build +3 -1
@@ -7,9 +7,11 @@ remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('remote-obj.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iommu.c')) -remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: files('vfio-user-obj.c')) remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: libvfio_user_dep) +remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: files('vfio-user-obj.c'), + if_false: files('vfio-user-obj-stub.c')) +remote_ss.add(when: 'CONFIG_ALL', if_true: files('vfio-user-obj-stub.c')) specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('memory.c')) specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy-memory-listener.c'))
hw/remote/vfio-user-obj-stub.c renamed from stubs/vfio-user-obj.c +0 -0
stubs/meson.build +0 -1
@@ -65,4 +65,3 @@ else stub_ss.add(files('qdev.c')) endif stub_ss.add(files('semihost-all.c')) -stub_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_false: files('vfio-user-obj.c'))
Signature · 1 line
2.41.0
[PULL 25/32] configure: remove some dead cruft
In reply to Paolo Bonziniprint_error is only invoked in one place, and $git is unused.
--- configure | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
configure +1 -6
@@ -94,7 +94,7 @@ quote_sh() { printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&'," } -print_error() { +error_exit() { (echo echo "ERROR: $1" while test -n "$2"; do
@@ -102,10 +102,6 @@ print_error() { shift done echo) >&2 -} - -error_exit() { - print_error "$@" exit 1 }
@@ -248,7 +244,6 @@ done default_cflags='-O2 -g' git_submodules_action="update" -git="git" docs="auto" EXESUF="" prefix="/usr/local"
Signature · 1 line
2.41.0
[PULL 09/32] tests/docker: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal.
--- tests/docker/docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/docker/docker.py +1 -1
@@ -186,7 +186,7 @@ def _check_binfmt_misc(executable): (binary)) return None, True - m = re.search("interpreter (\S+)\n", entry) + m = re.search(r"interpreter (\S+)\n", entry) interp = m.group(1) if interp and interp != executable: print("binfmt_misc for %s does not point to %s, using %s" %
Signature · 1 line
2.41.0
[PULL 21/32] tests/tcg/arm: move non-SVE tests out of conditional
In reply to Paolo Bonzinitest-aes, sha1-vector and sha512-vector need not be conditional on $(CROSS_CC_HAS_SVE), reorganize the "if"s to move them outside.
--- tests/tcg/aarch64/Makefile.target | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
tests/tcg/aarch64/Makefile.target +4 -6
@@ -73,11 +73,6 @@ endif # System Registers Tests AARCH64_TESTS += sysregs -ifneq ($(CROSS_CC_HAS_SVE),) -# SVE ioctl test -AARCH64_TESTS += sve-ioctls -sve-ioctls: CFLAGS+=-march=armv8.1-a+sve - AARCH64_TESTS += test-aes test-aes: CFLAGS += -O -march=armv8-a+aes test-aes: test-aes-main.c.inc
@@ -100,12 +95,15 @@ sha512-vector: sha512.c TESTS += sha512-vector ifneq ($(CROSS_CC_HAS_SVE),) +# SVE ioctl test +AARCH64_TESTS += sve-ioctls +sve-ioctls: CFLAGS+=-march=armv8.1-a+sve + sha512-sve: CFLAGS=-O3 -march=armv8.1-a+sve sha512-sve: sha512.c $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) TESTS += sha512-sve -endif ifeq ($(HOST_GDB_SUPPORTS_ARCH),y) GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py
Signature · 1 line
2.41.0
[PULL 14/32] tracetool: avoid invalid escape in Python string
In reply to Paolo BonziniThis is an error in Python 3.12; fix it by using a raw string literal.
--- scripts/tracetool/__init__.py | 14 +++++++------- scripts/tracetool/format/log_stap.py | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-)
scripts/tracetool/__init__.py +7 -7
@@ -210,12 +210,12 @@ class Event(object): """ - _CRE = re.compile("((?P<props>[\w\s]+)\s+)?" - "(?P<name>\w+)" - "\((?P<args>[^)]*)\)" - "\s*" - "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?" - "\s*") + _CRE = re.compile(r"((?P<props>[\w\s]+)\s+)?" + r"(?P<name>\w+)" + r"\((?P<args>[^)]*)\)" + r"\s*" + r"(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?" + r"\s*") _VALID_PROPS = set(["disable", "vcpu"])
@@ -326,7 +326,7 @@ def __repr__(self): fmt) # Star matching on PRI is dangerous as one might have multiple # arguments with that format, hence the non-greedy version of it. - _FMT = re.compile("(%[\d\.]*\w+|%.*?PRI\S+)") + _FMT = re.compile(r"(%[\d\.]*\w+|%.*?PRI\S+)") def formats(self): """List conversion specifiers in the argument print format string."""
scripts/tracetool/format/log_stap.py +1 -1
@@ -83,7 +83,7 @@ def c_fmt_to_stap(fmt): # and "%ll" is not valid at all. Similarly the size_t # based "%z" size qualifier is not valid. We just # strip all size qualifiers for sanity. - fmt = re.sub("%(\d*)(l+|z)(x|u|d)", "%\\1\\3", "".join(bits)) + fmt = re.sub(r"%(\d*)(l+|z)(x|u|d)", r"%\1\3", "".join(bits)) return fmt def generate(events, backend, group):
Signature · 1 line
2.41.0
[PULL 17/32] meson, cutils: allow non-relocatable installs
In reply to Paolo BonziniSay QEMU is configured with bindir = "/usr/bin" and a firmware path that starts with "/usr/share/qemu". Ever since QEMU 5.2, QEMU's install has been relocatable: if you move qemu-system-x86_64 from /usr/bin to /home/username/bin, it will start looking for firmware in /home/username/share/qemu. Previously, you would get a non-relocatable install where the moved QEMU will keep looking for firmware in /usr/share/qemu.
Windows almost always wants relocatable installs, and in fact that is why QEMU 5.2 introduced relocatability in the first place. However, newfangled distribution mechanisms such as AppImage
(https://docs.appimage.org/reference/best-practices.html), and possibly NixOS, also dislike using at runtime the absolute paths that were established at build time.
On POSIX systems you almost never care; if you do, your usecase dictates which one is desirable, so there's no single answer. Obviously relocatability works fine most of the time, because not many people have complained about QEMU's switch to relocatable install, and that's why until now there was no way to disable relocatability.
But a non-relocatable, non-modular binary can help if you want to do experiments with old firmware and new QEMU or vice versa (because you can just upgrade/downgrade the firmware package, and use rpm2cpio or similar to extract the QEMU binaries outside /usr), so allow both. This patch allows one to build a non-relocatable install using a new option to configure. Why? Because it's not too hard, and because it helps the user double check the relocatability of their install.
Note that the same code that handles relocation also lets you run QEMU from the build tree and pick e.g. firmware files from the source tree transparently. Therefore that part remains active with this patch, even if you configure with --disable-relocatable.
--- meson.build | 20 ++++++++++++++++++++ meson_options.txt | 2 ++ scripts/meson-buildoptions.sh | 3 +++ util/cutils.c | 11 ++++++++--- 4 files changed, 33 insertions(+), 3 deletions(-)
meson.build +20 -0
@@ -2111,6 +2111,7 @@ config_host_data.set('CONFIG_OPENGL', opengl.found()) config_host_data.set('CONFIG_PLUGIN', get_option('plugins')) config_host_data.set('CONFIG_RBD', rbd.found()) config_host_data.set('CONFIG_RDMA', rdma.found()) +config_host_data.set('CONFIG_RELOCATABLE', get_option('relocatable')) config_host_data.set('CONFIG_SAFESTACK', get_option('safe_stack')) config_host_data.set('CONFIG_SDL', sdl.found()) config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
@@ -4054,6 +4055,7 @@ 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 += {'Relocatable install': get_option('relocatable')} summary_info += {'vhost-kernel support': have_vhost_kernel} summary_info += {'vhost-net support': have_vhost_net} summary_info += {'vhost-user support': have_vhost_user}
@@ -4356,3 +4358,21 @@ if host_arch == 'unknown' or not supported_oses.contains(targetos) message('If you want to help supporting QEMU on this platform, please') message('contact the developers at [email protected].') endif + +actually_reloc = get_option('relocatable') +# check if get_relocated_path() is actually able to relocate paths +if get_option('relocatable') and \ + not (get_option('prefix') / get_option('bindir')).startswith(get_option('prefix') / '') + message() + warning('bindir not included within prefix, the installation will not be relocatable.') + actually_reloc = false +endif +if not actually_reloc and (targetos == 'windows' or get_option('relocatable')) + if targetos == 'windows' + message() + warning('Windows installs should usually be relocatable.') + endif + message() + message('QEMU will have to be installed under ' + get_option('prefix') + '.') + message('Use --disable-relocatable to remove this warning.') +endif
meson_options.txt +2 -0
@@ -101,6 +101,8 @@ option('cfi_debug', type: 'boolean', value: false, description: 'Verbose errors in case of CFI violation') option('multiprocess', type: 'feature', value: 'auto', description: 'Out of process device emulation support') +option('relocatable', type : 'boolean', value : 'true', + description: 'toggle relocatable install') option('vfio_user_server', type: 'feature', value: 'disabled', description: 'vfio-user server support') option('dbus_display', type: 'feature', value: 'auto',
scripts/meson-buildoptions.sh +3 -0
@@ -17,6 +17,7 @@ meson_options_help() { printf "%s\n" ' code for the Hexagon frontend' printf "%s\n" ' --disable-install-blobs install provided firmware blobs' printf "%s\n" ' --disable-qom-cast-debug cast debugging support' + printf "%s\n" ' --disable-relocatable toggle relocatable install' 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'
@@ -421,6 +422,8 @@ _meson_option_parse() { --disable-rbd) printf "%s" -Drbd=disabled ;; --enable-rdma) printf "%s" -Drdma=enabled ;; --disable-rdma) printf "%s" -Drdma=disabled ;; + --enable-relocatable) printf "%s" -Drelocatable=true ;; + --disable-relocatable) printf "%s" -Drelocatable=false ;; --enable-replication) printf "%s" -Dreplication=enabled ;; --disable-replication) printf "%s" -Dreplication=disabled ;; --enable-rng-none) printf "%s" -Drng_none=true ;;
util/cutils.c +8 -3
@@ -1178,9 +1178,11 @@ char *get_relocated_path(const char *dir)#else g_string_append (result, dir);#endif - }else if (!starts_with_prefix (dir) || !starts_with_prefix (bindir)) { -g_string_assign (result, dir); - }else { + goto out; + } + +if (IS_ENABLED (CONFIG_RELOCATABLE ) && +starts_with_prefix (dir) &&starts_with_prefix (bindir)) {g_string_assign (result, exec_dir);/* Advance over common components. */
@@ -1203,7 +1205,10 @@ char *get_relocated_path(const char *dir)assert (G_IS_DIR_SEPARATOR (dir[-1 ]));g_string_append (result, dir -1 ); } + goto out; } +g_string_assign (result, dir); +out:return g_string_free (result, false); }
Signature · 1 line
2.41.0
Re: [PULL 17/32] meson, cutils: allow non-relocatable installs
Quoted 29 lines · Paolo Bonzini
Say QEMU is configured with bindir = "
/usr/bin" and a firmware path that starts with "/usr/share/qemu". Ever since QEMU 5.2, QEMU's install has been relocatable: if you move qemu-system-x86_64 from/usr/binto/home/username/bin, it will start looking for firmware in/home/username/share/qemu. Previously, you would get a non-relocatable install where the moved QEMU will keep looking for firmware in/usr/share/qemu.Windows almost always wants relocatable installs, and in fact that is why QEMU 5.2 introduced relocatability in the first place. However, newfangled distribution mechanisms such as AppImage
(https://docs.appimage.org/reference/best-practices.html), and possibly NixOS, also dislike using at runtime the absolute paths that were established at build time.On POSIX systems you almost never care; if you do, your usecase dictates which one is desirable, so there's no single answer. Obviously relocatability works fine most of the time, because not many people have complained about QEMU's switch to relocatable install, and that's why until now there was no way to disable relocatability.
But a non-relocatable, non-modular binary can help if you want to do experiments with old firmware and new QEMU or vice versa (because you can just upgrade/downgrade the firmware package, and use rpm2cpio or similar to extract the QEMU binaries outside /usr), so allow both. This patch allows one to build a non-relocatable install using a new option to configure. Why? Because it's not too hard, and because it helps the user double check the relocatability of their install.
Quoted 4 lines
Note that the same code that handles relocation also lets you run QEMU from the build tree and pick e.g. firmware files from the source tree transparently. Therefore that part remains active with this patch, even if you configure with --disable-relocatable.
Thank you very much for this Paolo. It was on my todo list for quite some time :)
/mjt
Stefan Hajnoczi
AppliedApplied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/8.2 for any user-visible changes.