* fix --disable-tcg builds (Claudio)
* Fixes for macOS --enable-modules build and OpenBSD curses/iconv detection (myself) * Start preparing for meson 0.56 (myself) * Move directory configuration to meson (myself) * Start untangling qemu_init (myself) * Windows fixes (Sunil) * Remove -no-kbm (Thomas) -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl+WrxEUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNQAggAqfucqEQvz6s+DCPv2u572diyMvhe Y7vmaQF0qYKoAvy5OLqGlqXVsn8lwf19zJWo9Z7k4qNefWl84ii0J/kEmnolzTGq 7Z0CRSnGbNQy9YedYXuymaR3E0VY+6lsPnzIpufQISzQRdjzT8OQ51DMAhc04oQl saXsts7y+om+tzvW2JFGtNsfFRUjcRKqjIAVfwneBXFW9TRD2epvYxz/S0o+XJwF eSiINvTqDxxPyy6XJykC46xf/TTfReHv6fQgTn7Jw3TQuo4m7qXLi5Vj8W1erZJv t3xhZNabt813T6ztNcAAuJ0srIn55Ac7Fuq3/1ecgeVD08ntmabe4WhKRg== =931x -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging * fix --disable-tcg builds (Claudio) * Fixes for macOS --enable-modules build and OpenBSD curses/iconv detection (myself) * Start preparing for meson 0.56 (myself) * Move directory configuration to meson (myself) * Start untangling qemu_init (myself) * Windows fixes (Sunil) * Remove -no-kbm (Thomas) # gpg: Signature made Mon 26 Oct 2020 11:12:17 GMT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini-gitlab/tags/for-upstream: machine: move SMP initialization from vl.c machine: move UP defaults to class_base_init machine: remove deprecated -machine enforce-config-section option win32: boot broken when bind & data dir are the same WHPX: Fix WHPX build break configure: move install_blobs from configure to meson configure: remove unused variable from config-host.mak configure: move directory options from config-host.mak to meson configure: allow configuring localedir Makefile: separate meson rerun from the rest of the ninja invocation Remove deprecated -no-kvm option replay: do not build if TCG is not available qtest: unbreak non-TCG builds in bios-tables-test hw/core/qdev-clock: add a reference on aliased clocks do not use colons in test names meson: rewrite curses/iconv test build: fix macOS --enable-modules build Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
a95e0396c8
@ -40,7 +40,7 @@ macos_xcode_task:
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure --extra-cflags='-Wno-error=deprecated-declarations'
|
||||
- ../configure --extra-cflags='-Wno-error=deprecated-declarations' --enable-modules
|
||||
--enable-werror --cc=clang || { cat config.log meson-logs/meson-log.txt; exit 1; }
|
||||
- gmake -j$(sysctl -n hw.ncpu)
|
||||
- gmake check V=1
|
||||
|
44
Makefile
44
Makefile
@ -92,39 +92,58 @@ endif
|
||||
ifeq ($(NINJA),)
|
||||
.PHONY: config-host.mak
|
||||
x := $(shell rm -rf meson-private meson-info meson-logs)
|
||||
else
|
||||
export NINJA
|
||||
endif
|
||||
ifeq ($(wildcard build.ninja),)
|
||||
.PHONY: config-host.mak
|
||||
x := $(shell rm -rf meson-private meson-info meson-logs)
|
||||
endif
|
||||
ifeq ($(origin prefix),file)
|
||||
.PHONY: config-host.mak
|
||||
x := $(shell rm -rf meson-private meson-info meson-logs)
|
||||
endif
|
||||
|
||||
# 1. ensure config-host.mak is up-to-date
|
||||
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
||||
@echo $@ is out-of-date, running configure
|
||||
@echo config-host.mak is out-of-date, running configure
|
||||
@if test -f meson-private/coredata.dat; then \
|
||||
./config.status --skip-meson; \
|
||||
else \
|
||||
./config.status; \
|
||||
./config.status && touch build.ninja.stamp; \
|
||||
fi
|
||||
|
||||
# 2. ensure generated build files are up-to-date
|
||||
# 2. meson.stamp exists if meson has run at least once (so ninja reconfigure
|
||||
# works), but otherwise never needs to be updated
|
||||
meson-private/coredata.dat: meson.stamp
|
||||
meson.stamp: config-host.mak
|
||||
@touch meson.stamp
|
||||
|
||||
# 3. ensure generated build files are up-to-date
|
||||
|
||||
ifneq ($(NINJA),)
|
||||
# A separate rule is needed for Makefile dependencies to avoid -n
|
||||
export NINJA
|
||||
Makefile.ninja: build.ninja
|
||||
$(quiet-@){ echo 'ninja-targets = \'; $(NINJA) -t targets all | sed 's/:.*//; $$!s/$$/ \\/'; } > $@
|
||||
$(quiet-@){ \
|
||||
echo 'ninja-targets = \'; \
|
||||
$(NINJA) -t targets all | sed 's/:.*//; $$!s/$$/ \\/'; \
|
||||
echo 'build-files = \'; \
|
||||
$(NINJA) -t query build.ninja | sed -n '1,/^ input:/d; /^ outputs:/q; s/$$/ \\/p'; \
|
||||
} > $@.tmp && mv $@.tmp $@
|
||||
-include Makefile.ninja
|
||||
|
||||
# A separate rule is needed for Makefile dependencies to avoid -n
|
||||
build.ninja: build.ninja.stamp
|
||||
build.ninja.stamp: meson.stamp $(build-files)
|
||||
$(NINJA) $(if $V,-v,) build.ninja && touch $@
|
||||
endif
|
||||
|
||||
ifneq ($(MESON),)
|
||||
# The dependency on config-host.mak ensures that meson has run
|
||||
Makefile.mtest: build.ninja scripts/mtest2make.py config-host.mak
|
||||
Makefile.mtest: build.ninja scripts/mtest2make.py
|
||||
$(MESON) introspect --targets --tests --benchmarks | $(PYTHON) scripts/mtest2make.py > $@
|
||||
-include Makefile.mtest
|
||||
endif
|
||||
|
||||
# 3. Rules to bridge to other makefiles
|
||||
# 4. Rules to bridge to other makefiles
|
||||
|
||||
ifneq ($(NINJA),)
|
||||
NINJAFLAGS = $(if $V,-v,) \
|
||||
@ -135,7 +154,10 @@ ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
|
||||
ninja-cmd-goals += $(foreach t, $(.tests), $(.test.deps.$t))
|
||||
|
||||
makefile-targets := build.ninja ctags TAGS cscope dist clean uninstall
|
||||
ninja-targets := $(filter-out $(makefile-targets), $(ninja-targets))
|
||||
# "ninja -t targets" also lists all prerequisites. If build system
|
||||
# files are marked as PHONY, however, Make will always try to execute
|
||||
# "ninja build.ninja".
|
||||
ninja-targets := $(filter-out $(build-files) $(makefile-targets), $(ninja-targets))
|
||||
.PHONY: $(ninja-targets) run-ninja
|
||||
$(ninja-targets): run-ninja
|
||||
|
||||
@ -214,7 +236,7 @@ distclean: clean
|
||||
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
||||
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
|
||||
rm -rf meson-private meson-logs meson-info compile_commands.json
|
||||
rm -f Makefile.ninja Makefile.mtest
|
||||
rm -f Makefile.ninja Makefile.mtest build.ninja.stamp meson.stamp
|
||||
rm -f config.log
|
||||
rm -f linux-headers/asm
|
||||
rm -Rf .sdk
|
||||
|
@ -7,7 +7,6 @@ block_ss.add(files(
|
||||
'backup-top.c',
|
||||
'blkdebug.c',
|
||||
'blklogwrites.c',
|
||||
'blkreplay.c',
|
||||
'blkverify.c',
|
||||
'block-backend.c',
|
||||
'block-copy.c',
|
||||
@ -42,6 +41,8 @@ block_ss.add(files(
|
||||
'write-threshold.c',
|
||||
), zstd, zlib)
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
|
||||
|
||||
block_ss.add(when: 'CONFIG_QCOW1', if_true: files('qcow.c'))
|
||||
block_ss.add(when: 'CONFIG_VDI', if_true: files('vdi.c'))
|
||||
block_ss.add(when: 'CONFIG_CLOOP', if_true: files('cloop.c'))
|
||||
|
64
configure
vendored
64
configure
vendored
@ -362,8 +362,7 @@ cocoa="auto"
|
||||
softmmu="yes"
|
||||
linux_user="no"
|
||||
bsd_user="no"
|
||||
blobs="yes"
|
||||
edk2_blobs="no"
|
||||
blobs="true"
|
||||
pkgversion=""
|
||||
pie=""
|
||||
qom_cast_debug="yes"
|
||||
@ -962,6 +961,8 @@ for opt do
|
||||
;;
|
||||
--docdir=*) docdir="$optarg"
|
||||
;;
|
||||
--localedir=*) localedir="$optarg"
|
||||
;;
|
||||
--sysconfdir=*) sysconfdir="$optarg"
|
||||
;;
|
||||
--localstatedir=*) local_statedir="$optarg"
|
||||
@ -971,7 +972,7 @@ for opt do
|
||||
--host=*|--build=*|\
|
||||
--disable-dependency-tracking|\
|
||||
--sbindir=*|--sharedstatedir=*|\
|
||||
--oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
|
||||
--oldincludedir=*|--datarootdir=*|--infodir=*|\
|
||||
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
|
||||
# These switches are silently ignored, for compatibility with
|
||||
# autoconf-generated configure scripts. This allows QEMU's
|
||||
@ -1203,7 +1204,7 @@ for opt do
|
||||
;;
|
||||
--enable-membarrier) membarrier="yes"
|
||||
;;
|
||||
--disable-blobs) blobs="no"
|
||||
--disable-blobs) blobs="false"
|
||||
;;
|
||||
--with-pkgversion=*) pkgversion="$optarg"
|
||||
;;
|
||||
@ -1521,7 +1522,6 @@ for opt do
|
||||
esac
|
||||
done
|
||||
|
||||
firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
|
||||
libdir="${libdir:-$prefix/lib}"
|
||||
libexecdir="${libexecdir:-$prefix/libexec}"
|
||||
includedir="${includedir:-$prefix/include}"
|
||||
@ -1532,7 +1532,7 @@ if test "$mingw32" = "yes" ; then
|
||||
docdir="$prefix"
|
||||
bindir="$prefix"
|
||||
sysconfdir="$prefix"
|
||||
local_statedir=
|
||||
local_statedir="$prefix"
|
||||
else
|
||||
mandir="${mandir:-$prefix/share/man}"
|
||||
datadir="${datadir:-$prefix/share}"
|
||||
@ -1541,6 +1541,8 @@ else
|
||||
sysconfdir="${sysconfdir:-$prefix/etc}"
|
||||
local_statedir="${local_statedir:-$prefix/var}"
|
||||
fi
|
||||
firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
|
||||
localedir="${localedir:-$datadir/locale}"
|
||||
|
||||
case "$cpu" in
|
||||
ppc)
|
||||
@ -1670,6 +1672,7 @@ Advanced options (experts only):
|
||||
--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
|
||||
@ -2217,18 +2220,6 @@ case " $target_list " in
|
||||
;;
|
||||
esac
|
||||
|
||||
for target in $target_list; do
|
||||
case "$target" in
|
||||
arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
|
||||
edk2_blobs="yes"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# The EDK2 binaries are compressed with bzip2
|
||||
if test "$edk2_blobs" = "yes" && ! has bzip2; then
|
||||
error_exit "The bzip2 program is required for building QEMU"
|
||||
fi
|
||||
|
||||
feature_not_found() {
|
||||
feature=$1
|
||||
remedy=$2
|
||||
@ -3608,7 +3599,6 @@ else
|
||||
if test "$found" = "no"; then
|
||||
LIBS="$pthread_lib $LIBS"
|
||||
fi
|
||||
PTHREAD_LIB="$pthread_lib"
|
||||
break
|
||||
fi
|
||||
done
|
||||
@ -5725,13 +5715,6 @@ if test "$mingw32" = "yes" ; then
|
||||
done
|
||||
fi
|
||||
|
||||
qemu_confdir="$sysconfdir/$qemu_suffix"
|
||||
qemu_moddir="$libdir/$qemu_suffix"
|
||||
qemu_datadir="$datadir/$qemu_suffix"
|
||||
qemu_localedir="$datadir/locale"
|
||||
qemu_icondir="$datadir/icons"
|
||||
qemu_desktopdir="$datadir/applications"
|
||||
|
||||
# We can only support ivshmem if we have eventfd
|
||||
if [ "$eventfd" = "yes" ]; then
|
||||
ivshmem=yes
|
||||
@ -5898,23 +5881,6 @@ echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
||||
echo >> $config_host_mak
|
||||
|
||||
echo all: >> $config_host_mak
|
||||
echo "prefix=$prefix" >> $config_host_mak
|
||||
echo "bindir=$bindir" >> $config_host_mak
|
||||
echo "libdir=$libdir" >> $config_host_mak
|
||||
echo "libexecdir=$libexecdir" >> $config_host_mak
|
||||
echo "includedir=$includedir" >> $config_host_mak
|
||||
echo "sysconfdir=$sysconfdir" >> $config_host_mak
|
||||
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
|
||||
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
|
||||
echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
|
||||
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
|
||||
if test "$mingw32" = "no" ; then
|
||||
echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
|
||||
fi
|
||||
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
|
||||
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
|
||||
echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
|
||||
echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
|
||||
echo "GIT=$git" >> $config_host_mak
|
||||
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
|
||||
echo "GIT_UPDATE=$git_update" >> $config_host_mak
|
||||
@ -6297,9 +6263,6 @@ fi
|
||||
if test "$vhost_user_fs" = "yes" ; then
|
||||
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$blobs" = "yes" ; then
|
||||
echo "INSTALL_BLOBS=yes" >> $config_host_mak
|
||||
fi
|
||||
if test "$iovec" = "yes" ; then
|
||||
echo "CONFIG_IOVEC=y" >> $config_host_mak
|
||||
fi
|
||||
@ -6762,7 +6725,6 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
|
||||
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
||||
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
|
||||
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
|
||||
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
|
||||
echo "EXESUF=$EXESUF" >> $config_host_mak
|
||||
echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
|
||||
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
|
||||
@ -6777,10 +6739,6 @@ if test "$fuzzing" != "no"; then
|
||||
fi
|
||||
echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
|
||||
|
||||
if test "$edk2_blobs" = "yes" ; then
|
||||
echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$rng_none" = "yes"; then
|
||||
echo "CONFIG_RNG_NONE=y" >> $config_host_mak
|
||||
fi
|
||||
@ -6997,8 +6955,10 @@ NINJA=$ninja $meson setup \
|
||||
--datadir "$datadir" \
|
||||
--mandir "$mandir" \
|
||||
--sysconfdir "$sysconfdir" \
|
||||
--localedir "$localedir" \
|
||||
--localstatedir "$local_statedir" \
|
||||
-Ddocdir="$docdir" \
|
||||
-Dqemu_firmwarepath="$firmwarepath" \
|
||||
-Dqemu_suffix="$qemu_suffix" \
|
||||
-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) \
|
||||
@ -7015,7 +6975,7 @@ NINJA=$ninja $meson setup \
|
||||
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \
|
||||
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
|
||||
-Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
|
||||
-Ddocs=$docs -Dsphinx_build=$sphinx_build \
|
||||
-Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
|
||||
$cross_arg \
|
||||
"$PWD" "$source_path"
|
||||
|
||||
|
@ -9,6 +9,6 @@ if 'CONFIG_TOOLS' in config_host and 'CONFIG_VIRGL' in config_host \
|
||||
|
||||
configure_file(input: '50-qemu-gpu.json.in',
|
||||
output: '50-qemu-gpu.json',
|
||||
configuration: config_host,
|
||||
configuration: { 'libexecdir' : get_option('libexecdir') },
|
||||
install_dir: qemu_datadir / 'vhost-user')
|
||||
endif
|
||||
|
@ -21,17 +21,6 @@ deprecated.
|
||||
System emulator command line arguments
|
||||
--------------------------------------
|
||||
|
||||
``-machine enforce-config-section=on|off`` (since 3.1)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``enforce-config-section`` parameter is replaced by the
|
||||
``-global migration.send-configuration={on|off}`` option.
|
||||
|
||||
``-no-kvm`` (since 1.3.0)
|
||||
'''''''''''''''''''''''''
|
||||
|
||||
The ``-no-kvm`` argument is now a synonym for setting ``-accel tcg``.
|
||||
|
||||
``-usbdevice`` (since 2.10.0)
|
||||
'''''''''''''''''''''''''''''
|
||||
|
||||
@ -504,6 +493,12 @@ System emulator command line arguments
|
||||
The ``name`` parameter of the ``-net`` option was a synonym
|
||||
for the ``id`` parameter, which should now be used instead.
|
||||
|
||||
``-no-kvm`` (removed in 5.2)
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
The ``-no-kvm`` argument was a synonym for setting ``-machine accel=tcg``.
|
||||
|
||||
|
||||
QEMU Machine Protocol (QMP) commands
|
||||
------------------------------------
|
||||
|
||||
@ -688,6 +683,12 @@ Support for invalid topologies is removed, the user must ensure
|
||||
topologies described with -smp include all possible cpus, i.e.
|
||||
*sockets* * *cores* * *threads* = *maxcpus*.
|
||||
|
||||
``-machine enforce-config-section=on|off`` (removed 5.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``enforce-config-section`` property was replaced by the
|
||||
``-global migration.send-configuration={on|off}`` option.
|
||||
|
||||
Block devices
|
||||
-------------
|
||||
|
||||
|
@ -411,24 +411,6 @@ static bool machine_get_suppress_vmdesc(Object *obj, Error **errp)
|
||||
return ms->suppress_vmdesc;
|
||||
}
|
||||
|
||||
static void machine_set_enforce_config_section(Object *obj, bool value,
|
||||
Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
|
||||
warn_report("enforce-config-section is deprecated, please use "
|
||||
"-global migration.send-configuration=on|off instead");
|
||||
|
||||
ms->enforce_config_section = value;
|
||||
}
|
||||
|
||||
static bool machine_get_enforce_config_section(Object *obj, Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
|
||||
return ms->enforce_config_section;
|
||||
}
|
||||
|
||||
static char *machine_get_memory_encryption(Object *obj, Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
@ -857,11 +839,6 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
||||
object_class_property_set_description(oc, "suppress-vmdesc",
|
||||
"Set on to disable self-describing migration");
|
||||
|
||||
object_class_property_add_bool(oc, "enforce-config-section",
|
||||
machine_get_enforce_config_section, machine_set_enforce_config_section);
|
||||
object_class_property_set_description(oc, "enforce-config-section",
|
||||
"Set on to enforce configuration section migration");
|
||||
|
||||
object_class_property_add_str(oc, "memory-encryption",
|
||||
machine_get_memory_encryption, machine_set_memory_encryption);
|
||||
object_class_property_set_description(oc, "memory-encryption",
|
||||
@ -876,8 +853,12 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
||||
|
||||
static void machine_class_base_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
mc->max_cpus = mc->max_cpus ?: 1;
|
||||
mc->min_cpus = mc->min_cpus ?: 1;
|
||||
mc->default_cpus = mc->default_cpus ?: 1;
|
||||
|
||||
if (!object_class_is_abstract(oc)) {
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
const char *cname = object_class_get_name(oc);
|
||||
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
|
||||
mc->name = g_strndup(cname,
|
||||
@ -926,6 +907,13 @@ static void machine_initfn(Object *obj)
|
||||
/* Register notifier when init is done for sysbus sanity checks */
|
||||
ms->sysbus_notifier.notify = machine_init_notify;
|
||||
qemu_add_machine_init_done_notifier(&ms->sysbus_notifier);
|
||||
|
||||
/* default to mc->default_cpus */
|
||||
ms->smp.cpus = mc->default_cpus;
|
||||
ms->smp.max_cpus = mc->default_cpus;
|
||||
ms->smp.cores = 1;
|
||||
ms->smp.threads = 1;
|
||||
ms->smp.sockets = 1;
|
||||
}
|
||||
|
||||
static void machine_finalize(Object *obj)
|
||||
|
@ -61,6 +61,14 @@ static NamedClockList *qdev_init_clocklist(DeviceState *dev, const char *name,
|
||||
object_get_typename(OBJECT(clk)),
|
||||
(Object **) &ncl->clock,
|
||||
NULL, OBJ_PROP_LINK_STRONG);
|
||||
/*
|
||||
* Since the link property has the OBJ_PROP_LINK_STRONG flag, the clk
|
||||
* object reference count gets decremented on property deletion.
|
||||
* However object_property_add_link does not increment it since it
|
||||
* doesn't know the linked object. Increment it here to ensure the
|
||||
* aliased clock stays alive during this device life-time.
|
||||
*/
|
||||
object_ref(OBJECT(clk));
|
||||
}
|
||||
|
||||
ncl->clock = clk;
|
||||
|
@ -268,7 +268,6 @@ struct MachineState {
|
||||
char *firmware;
|
||||
bool iommu;
|
||||
bool suppress_vmdesc;
|
||||
bool enforce_config_section;
|
||||
bool enable_graphics;
|
||||
char *memory_encryption;
|
||||
char *ram_memdev_id;
|
||||
|
178
meson.build
178
meson.build
@ -29,8 +29,14 @@ if get_option('qemu_suffix').startswith('/')
|
||||
error('qemu_suffix cannot start with a /')
|
||||
endif
|
||||
|
||||
qemu_confdir = get_option('sysconfdir') / get_option('qemu_suffix')
|
||||
qemu_datadir = get_option('datadir') / get_option('qemu_suffix')
|
||||
qemu_docdir = get_option('docdir') / get_option('qemu_suffix')
|
||||
qemu_moddir = get_option('libdir') / get_option('qemu_suffix')
|
||||
|
||||
qemu_desktopdir = get_option('datadir') / 'applications'
|
||||
qemu_icondir = get_option('datadir') / 'icons'
|
||||
|
||||
config_host_data = configuration_data()
|
||||
genh = []
|
||||
|
||||
@ -198,7 +204,7 @@ else
|
||||
have_xen_pci_passthrough = false
|
||||
endif
|
||||
if not get_option('whpx').disabled() and targetos == 'windows'
|
||||
if get_option('whpx').enabled() and cpu != 'x86_64'
|
||||
if get_option('whpx').enabled() and host_machine.cpu() != 'x86_64'
|
||||
error('WHPX requires 64-bit host')
|
||||
elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \
|
||||
cc.has_header('WinHvEmulation.h', required: get_option('whpx'))
|
||||
@ -465,70 +471,89 @@ endif
|
||||
iconv = not_found
|
||||
curses = not_found
|
||||
if have_system and not get_option('curses').disabled()
|
||||
if not get_option('iconv').disabled()
|
||||
libiconv = cc.find_library('iconv',
|
||||
required: false,
|
||||
static: enable_static)
|
||||
if cc.links('''
|
||||
#include <iconv.h>
|
||||
int main(void) {
|
||||
iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
|
||||
return conv != (iconv_t) -1;
|
||||
}''', dependencies: [libiconv])
|
||||
iconv = declare_dependency(dependencies: [libiconv])
|
||||
curses_test = '''
|
||||
#include <locale.h>
|
||||
#include <curses.h>
|
||||
#include <wchar.h>
|
||||
int main(void) {
|
||||
wchar_t wch = L'w';
|
||||
setlocale(LC_ALL, "");
|
||||
resize_term(0, 0);
|
||||
addwstr(L"wide chars\n");
|
||||
addnwstr(&wch, 1);
|
||||
add_wch(WACS_DEGREE);
|
||||
return 0;
|
||||
}'''
|
||||
|
||||
curses = dependency((targetos == 'windows' ? 'ncurses' : 'ncursesw'),
|
||||
required: false,
|
||||
method: 'pkg-config',
|
||||
static: enable_static)
|
||||
msg = get_option('curses').enabled() ? 'curses library not found' : ''
|
||||
if curses.found()
|
||||
if cc.links(curses_test, dependencies: [curses])
|
||||
curses = declare_dependency(compile_args: '-DNCURSES_WIDECHAR', dependencies: [curses])
|
||||
else
|
||||
msg = 'curses package not usable'
|
||||
curses = not_found
|
||||
endif
|
||||
endif
|
||||
if get_option('iconv').enabled() and not iconv.found()
|
||||
error('Cannot detect iconv API')
|
||||
endif
|
||||
if iconv.found()
|
||||
curses_libname_list = ['ncursesw', 'ncurses', 'cursesw', 'pdcurses']
|
||||
curses_test = '''
|
||||
#include <locale.h>
|
||||
#include <curses.h>
|
||||
#include <wchar.h>
|
||||
int main(void) {
|
||||
wchar_t wch = L'w';
|
||||
setlocale(LC_ALL, "");
|
||||
resize_term(0, 0);
|
||||
addwstr(L"wide chars\n");
|
||||
addnwstr(&wch, 1);
|
||||
add_wch(WACS_DEGREE);
|
||||
return 0;
|
||||
}'''
|
||||
foreach curses_libname : curses_libname_list
|
||||
libcurses = dependency(curses_libname,
|
||||
required: false,
|
||||
method: 'pkg-config',
|
||||
static: enable_static)
|
||||
|
||||
if not libcurses.found()
|
||||
dirs = ['/usr/include/ncursesw']
|
||||
if targetos == 'windows'
|
||||
dirs = []
|
||||
endif
|
||||
if not curses.found()
|
||||
curses_compile_args = ['-DNCURSES_WIDECHAR']
|
||||
has_curses_h = cc.has_header('curses.h', args: curses_compile_args)
|
||||
if targetos != 'windows' and not has_curses_h
|
||||
message('Trying with /usr/include/ncursesw')
|
||||
curses_compile_args += ['-I/usr/include/ncursesw']
|
||||
has_curses_h = cc.has_header('curses.h', args: curses_compile_args)
|
||||
endif
|
||||
if has_curses_h
|
||||
curses_libname_list = (targetos == 'windows' ? ['pdcurses'] : ['ncursesw', 'cursesw'])
|
||||
foreach curses_libname : curses_libname_list
|
||||
libcurses = cc.find_library(curses_libname,
|
||||
required: false,
|
||||
dirs: dirs,
|
||||
static: enable_static)
|
||||
endif
|
||||
if libcurses.found()
|
||||
if cc.links(curses_test, dependencies: [libcurses])
|
||||
curses = declare_dependency(compile_args: '-DNCURSES_WIDECHAR', dependencies: [libcurses])
|
||||
break
|
||||
if libcurses.found()
|
||||
if cc.links(curses_test, args: curses_compile_args, dependencies: libcurses)
|
||||
curses = declare_dependency(compile_args: curses_compile_args,
|
||||
dependencies: [libcurses])
|
||||
break
|
||||
else
|
||||
msg = 'curses library not usable'
|
||||
endif
|
||||
endif
|
||||
endforeach
|
||||
endif
|
||||
endif
|
||||
if not get_option('iconv').disabled()
|
||||
foreach link_args : [ ['-liconv'], [] ]
|
||||
# Programs will be linked with glib and this will bring in libiconv on FreeBSD.
|
||||
# We need to use libiconv if available because mixing libiconv's headers with
|
||||
# the system libc does not work.
|
||||
# However, without adding glib to the dependencies -L/usr/local/lib will not be
|
||||
# included in the command line and libiconv will not be found.
|
||||
if cc.links('''
|
||||
#include <iconv.h>
|
||||
int main(void) {
|
||||
iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
|
||||
return conv != (iconv_t) -1;
|
||||
}''', args: config_host['GLIB_CFLAGS'].split() + config_host['GLIB_LIBS'].split() + link_args)
|
||||
iconv = declare_dependency(link_args: link_args, dependencies: glib)
|
||||
break
|
||||
endif
|
||||
endforeach
|
||||
endif
|
||||
if not curses.found()
|
||||
if iconv.found()
|
||||
if get_option('curses').enabled()
|
||||
error('Cannot find curses')
|
||||
endif
|
||||
elif get_option('curses').enabled()
|
||||
error('iconv required for curses UI but not available')
|
||||
if curses.found() and not iconv.found()
|
||||
if get_option('iconv').enabled()
|
||||
error('iconv not available')
|
||||
endif
|
||||
msg = 'iconv required for curses UI but not available'
|
||||
curses = not_found
|
||||
endif
|
||||
if not curses.found() and msg != ''
|
||||
if get_option('curses').enabled()
|
||||
error(msg)
|
||||
else
|
||||
warning('iconv required for curses UI but not available, disabling')
|
||||
warning(msg + ', disabling')
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@ -715,6 +740,19 @@ endif
|
||||
# config-host.h #
|
||||
#################
|
||||
|
||||
config_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir'))
|
||||
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
|
||||
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
|
||||
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_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'))
|
||||
config_host_data.set_quoted('CONFIG_QEMU_LOCALSTATEDIR', get_option('prefix') / get_option('localstatedir'))
|
||||
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'))
|
||||
|
||||
config_host_data.set('CONFIG_COCOA', cocoa.found())
|
||||
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
|
||||
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
|
||||
@ -737,9 +775,7 @@ config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]
|
||||
|
||||
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
|
||||
arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
|
||||
strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir',
|
||||
'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
|
||||
'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir']
|
||||
strings = ['HOST_DSOSUF', 'CONFIG_IASL']
|
||||
foreach k, v: config_host
|
||||
if ignored.contains(k)
|
||||
# do nothing
|
||||
@ -1633,7 +1669,7 @@ foreach m : block_mods + softmmu_mods
|
||||
name_prefix: '',
|
||||
link_whole: m,
|
||||
install: true,
|
||||
install_dir: config_host['qemu_moddir'])
|
||||
install_dir: qemu_moddir)
|
||||
endforeach
|
||||
|
||||
softmmu_ss.add(authz, blockdev, chardev, crypto, io, qmp)
|
||||
@ -1794,7 +1830,7 @@ foreach target : target_dirs
|
||||
output: exe['name'] + stp['ext'],
|
||||
capture: true,
|
||||
install: stp['install'],
|
||||
install_dir: qemu_datadir / '../systemtap/tapset',
|
||||
install_dir: get_option('datadir') / 'systemtap/tapset',
|
||||
command: [
|
||||
tracetool, '--group=all', '--format=' + stp['fmt'],
|
||||
'--binary=' + stp['bin'],
|
||||
@ -1906,17 +1942,17 @@ endif
|
||||
#########################
|
||||
|
||||
summary_info = {}
|
||||
summary_info += {'Install prefix': config_host['prefix']}
|
||||
summary_info += {'BIOS directory': config_host['qemu_datadir']}
|
||||
summary_info += {'firmware path': config_host['qemu_firmwarepath']}
|
||||
summary_info += {'binary directory': config_host['bindir']}
|
||||
summary_info += {'library directory': config_host['libdir']}
|
||||
summary_info += {'module directory': config_host['qemu_moddir']}
|
||||
summary_info += {'libexec directory': config_host['libexecdir']}
|
||||
summary_info += {'include directory': config_host['includedir']}
|
||||
summary_info += {'config directory': config_host['sysconfdir']}
|
||||
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 += {'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')}
|
||||
if targetos != 'windows'
|
||||
summary_info += {'local state directory': config_host['qemu_localstatedir']}
|
||||
summary_info += {'local state directory': get_option('localstatedir')}
|
||||
summary_info += {'Manual directory': get_option('mandir')}
|
||||
else
|
||||
summary_info += {'local state directory': 'queried at runtime'}
|
||||
@ -2028,7 +2064,7 @@ summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
|
||||
summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
|
||||
summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
|
||||
summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
|
||||
summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
|
||||
summary_info += {'Install blobs': get_option('install_blobs')}
|
||||
summary_info += {'KVM support': config_all.has_key('CONFIG_KVM')}
|
||||
summary_info += {'HAX support': config_all.has_key('CONFIG_HAX')}
|
||||
summary_info += {'HVF support': config_all.has_key('CONFIG_HVF')}
|
||||
|
@ -2,6 +2,8 @@ option('qemu_suffix', type : 'string', value: 'qemu',
|
||||
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
|
||||
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('sphinx_build', type : 'string', value : '',
|
||||
description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
|
||||
|
||||
@ -9,6 +11,8 @@ option('docs', type : 'feature', value : 'auto',
|
||||
description: 'Documentations build support')
|
||||
option('gettext', type : 'boolean', value : true,
|
||||
description: 'Localization of the GTK+ user interface')
|
||||
option('install_blobs', type : 'boolean', value : true,
|
||||
description: 'install provided firmware blobs')
|
||||
option('sparse', type : 'feature', value : 'auto',
|
||||
description: 'sparse checker')
|
||||
|
||||
|
@ -145,7 +145,6 @@ static void migrate_fd_cancel(MigrationState *s);
|
||||
|
||||
void migration_object_init(void)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
Error *err = NULL;
|
||||
|
||||
/* This can only be called once. */
|
||||
@ -170,15 +169,6 @@ void migration_object_init(void)
|
||||
error_report_err(err);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* We cannot really do this in migration_instance_init() since at
|
||||
* that time global properties are not yet applied, then this
|
||||
* value will be definitely replaced by something else.
|
||||
*/
|
||||
if (ms->enforce_config_section) {
|
||||
current_migration->send_configuration = true;
|
||||
}
|
||||
}
|
||||
|
||||
void migration_shutdown(void)
|
||||
|
@ -7,7 +7,6 @@ softmmu_ss.add(files(
|
||||
'eth.c',
|
||||
'filter-buffer.c',
|
||||
'filter-mirror.c',
|
||||
'filter-replay.c',
|
||||
'filter-rewriter.c',
|
||||
'filter.c',
|
||||
'hub.c',
|
||||
@ -17,6 +16,8 @@ softmmu_ss.add(files(
|
||||
'util.c',
|
||||
))
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
|
||||
softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
|
||||
softmmu_ss.add(when: ['CONFIG_VDE', vde], if_true: files('vde.c'))
|
||||
|
@ -8,7 +8,7 @@ foreach f: [
|
||||
]
|
||||
configure_file(input: files(f),
|
||||
output: f,
|
||||
configuration: {'DATADIR': config_host['qemu_datadir']},
|
||||
install: install_blobs,
|
||||
configuration: {'DATADIR': qemu_datadir},
|
||||
install: get_option('install_blobs'),
|
||||
install_dir: qemu_datadir / 'firmware')
|
||||
endforeach
|
||||
|
@ -1,7 +1,8 @@
|
||||
bzip2 = find_program('bzip2')
|
||||
|
||||
install_blobs = 'INSTALL_BLOBS' in config_host
|
||||
if 'DECOMPRESS_EDK2_BLOBS' in config_host
|
||||
if 'arm-softmmu' in target_dirs or \
|
||||
'aarch64-softmmu' in target_dirs or \
|
||||
'i386-softmmu' in target_dirs or \
|
||||
'x86_64-softmmu' in target_dirs
|
||||
bzip2 = find_program('bzip2', required: true)
|
||||
fds = [
|
||||
'edk2-aarch64-code.fd',
|
||||
'edk2-arm-code.fd',
|
||||
@ -18,7 +19,7 @@ if 'DECOMPRESS_EDK2_BLOBS' in config_host
|
||||
output: f,
|
||||
input: '@0@.bz2'.format(f),
|
||||
capture: true,
|
||||
install: install_blobs,
|
||||
install: get_option('install_blobs'),
|
||||
install_dir: qemu_datadir,
|
||||
command: [ bzip2, '-dc', '@INPUT0@' ])
|
||||
endforeach
|
||||
@ -85,8 +86,8 @@ blobs = files(
|
||||
'npcm7xx_bootrom.bin',
|
||||
)
|
||||
|
||||
if install_blobs
|
||||
install_data(blobs, install_dir: config_host['qemu_datadir'])
|
||||
if get_option('install_blobs')
|
||||
install_data(blobs, install_dir: qemu_datadir)
|
||||
endif
|
||||
|
||||
subdir('descriptors')
|
||||
|
@ -34,7 +34,6 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
|
||||
" dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n"
|
||||
" suppress-vmdesc=on|off disables self-describing migration (default=off)\n"
|
||||
" nvdimm=on|off controls NVDIMM support (default=off)\n"
|
||||
" enforce-config-section=on|off enforce configuration section migration (default=off)\n"
|
||||
" memory-encryption=@var{} memory encryption object to use (default=none)\n"
|
||||
" hmat=on|off controls ACPI HMAT support (default=off)\n",
|
||||
QEMU_ARCH_ALL)
|
||||
@ -91,13 +90,6 @@ SRST
|
||||
``nvdimm=on|off``
|
||||
Enables or disables NVDIMM support. The default is off.
|
||||
|
||||
``enforce-config-section=on|off``
|
||||
If ``enforce-config-section`` is set to on, force migration code
|
||||
to send configuration section even if the machine-type sets the
|
||||
``migration.send-configuration`` property to off. NOTE: this
|
||||
parameter is deprecated. Please use ``-global``
|
||||
``migration.send-configuration``\ =on\|off instead.
|
||||
|
||||
``memory-encryption=``
|
||||
Memory encryption object to use. The default is none.
|
||||
|
||||
@ -4351,9 +4343,6 @@ SRST
|
||||
Enable FIPS 140-2 compliance mode.
|
||||
ERST
|
||||
|
||||
HXCOMM Deprecated by -accel tcg
|
||||
DEF("no-kvm", 0, QEMU_OPTION_no_kvm, "", QEMU_ARCH_I386)
|
||||
|
||||
DEF("msg", HAS_ARG, QEMU_OPTION_msg,
|
||||
"-msg [timestamp[=on|off]][,guest-name=[on|off]]\n"
|
||||
" control error message format\n"
|
||||
|
@ -1,4 +1,4 @@
|
||||
softmmu_ss.add(files(
|
||||
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files(
|
||||
'replay.c',
|
||||
'replay-internal.c',
|
||||
'replay-events.c',
|
||||
@ -10,4 +10,4 @@ softmmu_ss.add(files(
|
||||
'replay-audio.c',
|
||||
'replay-random.c',
|
||||
'replay-debugging.c',
|
||||
))
|
||||
), if_false: files('stubs-system.c'))
|
||||
|
96
replay/stubs-system.c
Normal file
96
replay/stubs-system.c
Normal file
@ -0,0 +1,96 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/replay.h"
|
||||
#include "ui/input.h"
|
||||
|
||||
void replay_input_event(QemuConsole *src, InputEvent *evt)
|
||||
{
|
||||
qemu_input_event_send_impl(src, evt);
|
||||
}
|
||||
|
||||
void replay_input_sync_event(void)
|
||||
{
|
||||
qemu_input_event_sync_impl();
|
||||
}
|
||||
|
||||
void replay_add_blocker(Error *reason)
|
||||
{
|
||||
}
|
||||
void replay_audio_in(size_t *recorded, void *samples, size_t *wpos, size_t size)
|
||||
{
|
||||
}
|
||||
void replay_audio_out(size_t *played)
|
||||
{
|
||||
}
|
||||
void replay_breakpoint(void)
|
||||
{
|
||||
}
|
||||
bool replay_can_snapshot(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void replay_configure(struct QemuOpts *opts)
|
||||
{
|
||||
}
|
||||
void replay_flush_events(void)
|
||||
{
|
||||
}
|
||||
void replay_gdb_attached(void)
|
||||
{
|
||||
}
|
||||
bool replay_running_debug(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
void replay_shutdown_request(ShutdownCause cause)
|
||||
{
|
||||
}
|
||||
void replay_start(void)
|
||||
{
|
||||
}
|
||||
void replay_vmstate_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#include "monitor/monitor.h"
|
||||
#include "monitor/hmp.h"
|
||||
#include "qapi/qapi-commands-replay.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
void hmp_info_replay(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
error_report("replay support not available");
|
||||
}
|
||||
void hmp_replay_break(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
error_report("replay support not available");
|
||||
}
|
||||
void hmp_replay_delete_break(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
error_report("replay support not available");
|
||||
}
|
||||
void hmp_replay_seek(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
error_report("replay support not available");
|
||||
}
|
||||
ReplayInfo *qmp_query_replay(Error **errp)
|
||||
{
|
||||
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||
"replay support not available");
|
||||
return NULL;
|
||||
}
|
||||
void qmp_replay_break(int64_t icount, Error **errp)
|
||||
{
|
||||
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||
"replay support not available");
|
||||
}
|
||||
void qmp_replay_delete_break(Error **errp)
|
||||
{
|
||||
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||
"replay support not available");
|
||||
}
|
||||
void qmp_replay_seek(int64_t icount, Error **errp)
|
||||
{
|
||||
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||
"replay support not available");
|
||||
}
|
@ -15,12 +15,11 @@ def filter_lines_set(stdout, from_staticlib):
|
||||
linesSet = set()
|
||||
for line in stdout.splitlines():
|
||||
tokens = line.split(b' ')
|
||||
if len(tokens) >= 1:
|
||||
if len(tokens) > 1:
|
||||
if from_staticlib and tokens[1] == b'U':
|
||||
continue
|
||||
if not from_staticlib and tokens[1] != b'U':
|
||||
continue
|
||||
if len(tokens) >= 2:
|
||||
if from_staticlib and tokens[1] == b'U':
|
||||
continue
|
||||
if not from_staticlib and tokens[1] != b'U':
|
||||
continue
|
||||
new_line = b'-Wl,-u,' + tokens[0]
|
||||
if not new_line in linesSet:
|
||||
linesSet.add(new_line)
|
||||
|
16
softmmu/vl.c
16
softmmu/vl.c
@ -3506,10 +3506,6 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case QEMU_OPTION_no_kvm:
|
||||
olist = qemu_find_opts("machine");
|
||||
qemu_opts_parse_noisily(olist, "accel=tcg", false);
|
||||
break;
|
||||
case QEMU_OPTION_accel:
|
||||
accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
|
||||
optarg, true);
|
||||
@ -3978,18 +3974,6 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* machine_class: default to UP */
|
||||
machine_class->max_cpus = machine_class->max_cpus ?: 1;
|
||||
machine_class->min_cpus = machine_class->min_cpus ?: 1;
|
||||
machine_class->default_cpus = machine_class->default_cpus ?: 1;
|
||||
|
||||
/* default to machine_class->default_cpus */
|
||||
current_machine->smp.cpus = machine_class->default_cpus;
|
||||
current_machine->smp.max_cpus = machine_class->default_cpus;
|
||||
current_machine->smp.cores = 1;
|
||||
current_machine->smp.threads = 1;
|
||||
current_machine->smp.sockets = 1;
|
||||
|
||||
machine_class->smp_parse(current_machine,
|
||||
qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
|
||||
|
||||
|
@ -33,7 +33,6 @@ stub_ss.add(files('qtest.c'))
|
||||
stub_ss.add(files('ram-block.c'))
|
||||
stub_ss.add(files('ramfb.c'))
|
||||
stub_ss.add(files('replay.c'))
|
||||
stub_ss.add(files('replay-user.c'))
|
||||
stub_ss.add(files('runstate-check.c'))
|
||||
stub_ss.add(files('set-fd-handler.c'))
|
||||
stub_ss.add(files('sysbus.c'))
|
||||
@ -47,6 +46,9 @@ stub_ss.add(files('vmstate.c'))
|
||||
stub_ss.add(files('vm-stop.c'))
|
||||
stub_ss.add(files('win32-kbd-hook.c'))
|
||||
stub_ss.add(files('cpu-synchronize-state.c'))
|
||||
if have_block
|
||||
stub_ss.add(files('replay-tools.c'))
|
||||
endif
|
||||
if have_system
|
||||
stub_ss.add(files('semihost.c'))
|
||||
stub_ss.add(files('xen-hw-stub.c'))
|
||||
|
83
stubs/replay-tools.c
Normal file
83
stubs/replay-tools.c
Normal file
@ -0,0 +1,83 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/replay.h"
|
||||
#include "block/aio.h"
|
||||
|
||||
bool replay_events_enabled(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int64_t replay_save_clock(unsigned int kind, int64_t clock, int64_t raw_icount)
|
||||
{
|
||||
abort();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int64_t replay_read_clock(unsigned int kind)
|
||||
{
|
||||
abort();
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t replay_get_current_icount(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void replay_bh_schedule_event(QEMUBH *bh)
|
||||
{
|
||||
qemu_bh_schedule(bh);
|
||||
}
|
||||
|
||||
void replay_bh_schedule_oneshot_event(AioContext *ctx,
|
||||
QEMUBHFunc *cb, void *opaque)
|
||||
{
|
||||
aio_bh_schedule_oneshot(ctx, cb, opaque);
|
||||
}
|
||||
|
||||
bool replay_checkpoint(ReplayCheckpoint checkpoint)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void replay_mutex_lock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_mutex_unlock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_register_char_driver(Chardev *chr)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_chr_be_write(Chardev *s, uint8_t *buf, int len)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_write_event_save(int res, int offset)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_write_event_load(int *res, int *offset)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
int replay_char_read_all_load(uint8_t *buf)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_read_all_save_error(int res)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_read_all_save_buf(uint8_t *buf, int offset)
|
||||
{
|
||||
abort();
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/replay.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
void replay_bh_schedule_oneshot_event(AioContext *ctx,
|
||||
QEMUBHFunc *cb, void *opaque)
|
||||
{
|
||||
aio_bh_schedule_oneshot(ctx, cb, opaque);
|
||||
}
|
@ -3,83 +3,10 @@
|
||||
|
||||
ReplayMode replay_mode;
|
||||
|
||||
int64_t replay_save_clock(unsigned int kind, int64_t clock, int64_t raw_icount)
|
||||
{
|
||||
abort();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int64_t replay_read_clock(unsigned int kind)
|
||||
{
|
||||
abort();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool replay_checkpoint(ReplayCheckpoint checkpoint)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool replay_events_enabled(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void replay_finish(void)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_register_char_driver(Chardev *chr)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_chr_be_write(Chardev *s, uint8_t *buf, int len)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_write_event_save(int res, int offset)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_write_event_load(int *res, int *offset)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
int replay_char_read_all_load(uint8_t *buf)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_read_all_save_error(int res)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_char_read_all_save_buf(uint8_t *buf, int offset)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void replay_block_event(QEMUBH *bh, uint64_t id)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t blkreplay_next_id(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void replay_mutex_lock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_mutex_unlock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void replay_save_random(int ret, void *buf, size_t len)
|
||||
{
|
||||
}
|
||||
@ -89,11 +16,6 @@ int replay_read_random(void *buf, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t replay_get_current_icount(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool replay_reverse_step(void)
|
||||
{
|
||||
return false;
|
||||
|
@ -603,7 +603,7 @@ fptest_rounding_args = ['-r', 'all']
|
||||
# FIXME: i32_to_extF80 (broken), i64_to_extF80 (broken)
|
||||
# extF80_roundToInt (broken)
|
||||
foreach k, v : softfloat_conv_tests
|
||||
test('fp-test:' + k, fptest,
|
||||
test('fp-test-' + k, fptest,
|
||||
args: fptest_args + fptest_rounding_args + v.split(),
|
||||
suite: ['softfloat', 'softfloat-conv'])
|
||||
endforeach
|
||||
@ -612,13 +612,13 @@ endforeach
|
||||
# extF80_{mulAdd} (missing)
|
||||
foreach k, v : softfloat_tests
|
||||
extF80_broken = ['lt_quiet', 'rem'].contains(k)
|
||||
test('fp-test:' + k, fptest,
|
||||
test('fp-test-' + k, fptest,
|
||||
args: fptest_args + fptest_rounding_args +
|
||||
['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k] +
|
||||
(extF80_broken ? [] : ['extF80_' + k]),
|
||||
suite: ['softfloat', 'softfloat-' + v])
|
||||
endforeach
|
||||
test('fp-test:mulAdd', fptest,
|
||||
test('fp-test-mulAdd', fptest,
|
||||
# no fptest_rounding_args
|
||||
args: fptest_args +
|
||||
['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'],
|
||||
|
@ -122,8 +122,3 @@ void qemu_bh_delete(QEMUBH *bh)
|
||||
{
|
||||
g_free(bh);
|
||||
}
|
||||
|
||||
void replay_bh_schedule_event(QEMUBH *bh)
|
||||
{
|
||||
bh->cb(bh->opaque);
|
||||
}
|
||||
|
@ -127,6 +127,9 @@ static void free_test_data(test_data *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!data->tables) {
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < data->tables->len; ++i) {
|
||||
cleanup_table_descriptor(&g_array_index(data->tables, AcpiSdtTable, i));
|
||||
}
|
||||
@ -656,6 +659,13 @@ static void test_acpi_one(const char *params, test_data *data)
|
||||
char *args;
|
||||
bool use_uefi = data->uefi_fl1 && data->uefi_fl2;
|
||||
|
||||
#ifndef CONFIG_TCG
|
||||
if (data->tcg_only) {
|
||||
g_test_skip("TCG disabled, skipping ACPI tcg_only test");
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_TCG */
|
||||
|
||||
if (use_uefi) {
|
||||
/*
|
||||
* TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3)
|
||||
|
@ -252,7 +252,7 @@ foreach dir : target_dirs
|
||||
}
|
||||
endif
|
||||
# FIXME: missing dependency on the emulator binary and qemu-img
|
||||
test('qtest-@0@: @1@'.format(target_base, test),
|
||||
test('qtest-@0@/@1@'.format(target_base, test),
|
||||
qtest_executables[test],
|
||||
depends: [test_deps, qtest_emulator],
|
||||
env: qtest_env,
|
||||
|
@ -31,6 +31,9 @@ static int query_error_class(const char *cmd)
|
||||
#ifndef CONFIG_SPICE
|
||||
{ "query-spice", ERROR_CLASS_COMMAND_NOT_FOUND },
|
||||
#endif
|
||||
#ifndef CONFIG_TCG
|
||||
{ "query-replay", ERROR_CLASS_COMMAND_NOT_FOUND },
|
||||
#endif
|
||||
#ifndef CONFIG_VNC
|
||||
{ "query-vnc", ERROR_CLASS_GENERIC_ERROR },
|
||||
{ "query-vnc-servers", ERROR_CLASS_GENERIC_ERROR },
|
||||
|
@ -15,5 +15,5 @@ executable('virtiofsd', files(
|
||||
|
||||
configure_file(input: '50-qemu-virtiofsd.json.in',
|
||||
output: '50-qemu-virtiofsd.json',
|
||||
configuration: config_host,
|
||||
configuration: { 'libexecdir' : get_option('libexecdir') },
|
||||
install_dir: qemu_datadir / 'vhost-user')
|
||||
|
@ -2,12 +2,12 @@ foreach s: [16, 24, 32, 48, 64, 128, 256, 512]
|
||||
s = '@0@x@0@'.format(s.to_string())
|
||||
install_data('qemu_@0@.png'.format(s),
|
||||
rename: 'qemu.png',
|
||||
install_dir: config_host['qemu_icondir'] / 'hicolor' / s / 'apps')
|
||||
install_dir: qemu_icondir / 'hicolor' / s / 'apps')
|
||||
endforeach
|
||||
|
||||
install_data('qemu_32x32.bmp',
|
||||
rename: 'qemu.bmp',
|
||||
install_dir: config_host['qemu_icondir'] / 'hicolor' / '32x32' / 'apps')
|
||||
install_dir: qemu_icondir / 'hicolor' / '32x32' / 'apps')
|
||||
|
||||
install_data('qemu.svg',
|
||||
install_dir: config_host['qemu_icondir'] / 'hicolor' / 'scalable' / 'apps')
|
||||
install_dir: qemu_icondir / 'hicolor' / 'scalable' / 'apps')
|
||||
|
@ -139,7 +139,7 @@ subdir('shader')
|
||||
if have_system
|
||||
subdir('icons')
|
||||
|
||||
install_data('qemu.desktop', install_dir: config_host['qemu_desktopdir'])
|
||||
install_data('qemu.desktop', install_dir: qemu_desktopdir)
|
||||
endif
|
||||
|
||||
modules += {'ui': ui_modules}
|
||||
|
@ -949,7 +949,7 @@ char *get_relocated_path(const char *dir)
|
||||
bindir += len_bindir;
|
||||
dir = next_component(dir, &len_dir);
|
||||
bindir = next_component(bindir, &len_bindir);
|
||||
} while (len_dir == len_bindir && !memcmp(dir, bindir, len_dir));
|
||||
} while (len_dir && len_dir == len_bindir && !memcmp(dir, bindir, len_dir));
|
||||
|
||||
/* Ascend from bindir to the common prefix with dir. */
|
||||
while (len_bindir) {
|
||||
|
@ -1,2 +0,0 @@
|
||||
@set VERSION @VERSION@
|
||||
@set CONFDIR @qemu_confdir@
|
Loading…
Reference in New Issue
Block a user