mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-28 04:43:54 -06:00
* only build util/async-teardown.c when system build is requested
* target/i386: fix BQL handling of the legacy FERR interrupts * target/i386: fix memory operand size for CVTPS2PD * target/i386: Add support for AMX-COMPLEX in CPUID enumeration * compile plugins on Darwin * configure and meson cleanups * drop mkvenv support for Python 3.7 and Debian10 * add wrap file for libblkio * tweak KVM stubs -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmT5t6UUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroMmjwf+MpvVuq+nn+3PqGUXgnzJx5ccA5ne O9Xy8+1GdlQPzBw/tPovxXDSKn3HQtBfxObn2CCE1tu/4uHWpBA1Vksn++NHdUf2 P0yoHxGskJu5iYYTtIcNw5cH2i+AizdiXuEjhfNjqD5Y234cFoHnUApt9e3zBvVO cwGD7WpPuSb4g38hHkV6nKcx72o7b4ejDToqUVZJ2N+RkddSqB03fSdrOru0hR7x V+lay0DYdFszNDFm05LJzfDbcrHuSryGA91wtty7Fzj6QhR/HBHQCUZJxMB5PI7F Zy4Zdpu60zxtSxUqeKgIi7UhNFgMcax2Hf9QEqdc/B4ARoBbboh4q4u8kQ== =dH7/ -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * only build util/async-teardown.c when system build is requested * target/i386: fix BQL handling of the legacy FERR interrupts * target/i386: fix memory operand size for CVTPS2PD * target/i386: Add support for AMX-COMPLEX in CPUID enumeration * compile plugins on Darwin * configure and meson cleanups * drop mkvenv support for Python 3.7 and Debian10 * add wrap file for libblkio * tweak KVM stubs # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmT5t6UUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroMmjwf+MpvVuq+nn+3PqGUXgnzJx5ccA5ne # O9Xy8+1GdlQPzBw/tPovxXDSKn3HQtBfxObn2CCE1tu/4uHWpBA1Vksn++NHdUf2 # P0yoHxGskJu5iYYTtIcNw5cH2i+AizdiXuEjhfNjqD5Y234cFoHnUApt9e3zBvVO # cwGD7WpPuSb4g38hHkV6nKcx72o7b4ejDToqUVZJ2N+RkddSqB03fSdrOru0hR7x # V+lay0DYdFszNDFm05LJzfDbcrHuSryGA91wtty7Fzj6QhR/HBHQCUZJxMB5PI7F # Zy4Zdpu60zxtSxUqeKgIi7UhNFgMcax2Hf9QEqdc/B4ARoBbboh4q4u8kQ== # =dH7/ # -----END PGP SIGNATURE----- # gpg: Signature made Thu 07 Sep 2023 07:44:37 EDT # 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 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (51 commits) docs/system/replay: do not show removed command line option subprojects: add wrap file for libblkio sysemu/kvm: Restrict kvm_pc_setup_irq_routing() to x86 targets sysemu/kvm: Restrict kvm_has_pit_state2() to x86 targets sysemu/kvm: Restrict kvm_get_apic_state() to x86 targets sysemu/kvm: Restrict kvm_arch_get_supported_cpuid/msr() to x86 targets target/i386: Restrict declarations specific to CONFIG_KVM target/i386: Allow elision of kvm_hv_vpindex_settable() target/i386: Allow elision of kvm_enable_x2apic() target/i386: Remove unused KVM stubs target/i386/cpu-sysemu: Inline kvm_apic_in_kernel() target/i386/helper: Restrict KVM declarations to system emulation hw/i386/fw_cfg: Include missing 'cpu.h' header hw/i386/pc: Include missing 'cpu.h' header hw/i386/pc: Include missing 'sysemu/tcg.h' header Revert "mkvenv: work around broken pip installations on Debian 10" mkvenv: assume presence of importlib.metadata Python: Drop support for Python 3.7 configure: remove dead code meson: list leftover CONFIG_* symbols ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
03a3a62fbd
64 changed files with 551 additions and 775 deletions
29
Makefile
29
Makefile
|
@ -164,14 +164,6 @@ ifneq ($(filter $(ninja-targets), $(ninja-cmd-goals)),)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_PLUGIN),y)
|
|
||||||
.PHONY: plugins
|
|
||||||
plugins:
|
|
||||||
$(call quiet-command,\
|
|
||||||
$(MAKE) $(SUBDIR_MAKEFLAGS) -C contrib/plugins V="$(V)", \
|
|
||||||
"BUILD", "example plugins")
|
|
||||||
endif # $(CONFIG_PLUGIN)
|
|
||||||
|
|
||||||
else # config-host.mak does not exist
|
else # config-host.mak does not exist
|
||||||
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
||||||
$(error Please call configure before running make)
|
$(error Please call configure before running make)
|
||||||
|
@ -184,15 +176,20 @@ include $(SRC_PATH)/tests/Makefile.include
|
||||||
|
|
||||||
all: recurse-all
|
all: recurse-all
|
||||||
|
|
||||||
ROMS_RULES=$(foreach t, all clean distclean, $(addsuffix /$(t), $(ROMS)))
|
SUBDIR_RULES=$(foreach t, all clean distclean, $(addsuffix /$(t), $(SUBDIRS)))
|
||||||
.PHONY: $(ROMS_RULES)
|
.PHONY: $(SUBDIR_RULES)
|
||||||
$(ROMS_RULES):
|
$(SUBDIR_RULES):
|
||||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) V="$(V)" TARGET_DIR="$(dir $@)" $(notdir $@),)
|
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) V="$(V)" TARGET_DIR="$(dir $@)" $(notdir $@),)
|
||||||
|
|
||||||
|
ifneq ($(filter contrib/plugins, $(SUBDIRS)),)
|
||||||
|
.PHONY: plugins
|
||||||
|
plugins: contrib/plugins/all
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: recurse-all recurse-clean
|
.PHONY: recurse-all recurse-clean
|
||||||
recurse-all: $(addsuffix /all, $(ROMS))
|
recurse-all: $(addsuffix /all, $(SUBDIRS))
|
||||||
recurse-clean: $(addsuffix /clean, $(ROMS))
|
recurse-clean: $(addsuffix /clean, $(SUBDIRS))
|
||||||
recurse-distclean: $(addsuffix /distclean, $(ROMS))
|
recurse-distclean: $(addsuffix /distclean, $(SUBDIRS))
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
@ -296,7 +293,7 @@ help:
|
||||||
$(call print-help,cscope,Generate cscope index)
|
$(call print-help,cscope,Generate cscope index)
|
||||||
$(call print-help,sparse,Run sparse on the QEMU source)
|
$(call print-help,sparse,Run sparse on the QEMU source)
|
||||||
@echo ''
|
@echo ''
|
||||||
ifeq ($(CONFIG_PLUGIN),y)
|
ifneq ($(filter contrib/plugins, $(SUBDIRS)),)
|
||||||
@echo 'Plugin targets:'
|
@echo 'Plugin targets:'
|
||||||
$(call print-help,plugins,Build the example TCG plugins)
|
$(call print-help,plugins,Build the example TCG plugins)
|
||||||
@echo ''
|
@echo ''
|
||||||
|
@ -316,7 +313,7 @@ endif
|
||||||
@echo 'Documentation targets:'
|
@echo 'Documentation targets:'
|
||||||
$(call print-help,html man,Build documentation in specified format)
|
$(call print-help,html man,Build documentation in specified format)
|
||||||
@echo ''
|
@echo ''
|
||||||
ifdef CONFIG_WIN32
|
ifneq ($(filter msi, $(ninja-targets)),)
|
||||||
@echo 'Windows targets:'
|
@echo 'Windows targets:'
|
||||||
$(call print-help,installer,Build NSIS-based installer for QEMU)
|
$(call print-help,installer,Build NSIS-based installer for QEMU)
|
||||||
$(call print-help,msi,Build MSI-based installer for qemu-ga)
|
$(call print-help,msi,Build MSI-based installer for qemu-ga)
|
||||||
|
|
|
@ -11,7 +11,9 @@ tcg_ss.add(files(
|
||||||
))
|
))
|
||||||
tcg_ss.add(when: 'CONFIG_USER_ONLY', if_true: files('user-exec.c'))
|
tcg_ss.add(when: 'CONFIG_USER_ONLY', if_true: files('user-exec.c'))
|
||||||
tcg_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_false: files('user-exec-stub.c'))
|
tcg_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_false: files('user-exec-stub.c'))
|
||||||
tcg_ss.add(when: 'CONFIG_PLUGIN', if_true: [files('plugin-gen.c')])
|
if get_option('plugins')
|
||||||
|
tcg_ss.add(files('plugin-gen.c'))
|
||||||
|
endif
|
||||||
tcg_ss.add(when: libdw, if_true: files('debuginfo.c'))
|
tcg_ss.add(when: libdw, if_true: files('debuginfo.c'))
|
||||||
tcg_ss.add(when: 'CONFIG_LINUX', if_true: files('perf.c'))
|
tcg_ss.add(when: 'CONFIG_LINUX', if_true: files('perf.c'))
|
||||||
specific_ss.add_all(when: 'CONFIG_TCG', if_true: tcg_ss)
|
specific_ss.add_all(when: 'CONFIG_TCG', if_true: tcg_ss)
|
||||||
|
|
|
@ -26,7 +26,7 @@ chardev_ss.add(when: 'CONFIG_WIN32', if_true: files(
|
||||||
'char-win.c',
|
'char-win.c',
|
||||||
))
|
))
|
||||||
|
|
||||||
chardev_ss = chardev_ss.apply(config_host, strict: false)
|
chardev_ss = chardev_ss.apply(config_targetos, strict: false)
|
||||||
|
|
||||||
system_ss.add(files(
|
system_ss.add(files(
|
||||||
'char-hmp-cmds.c',
|
'char-hmp-cmds.c',
|
||||||
|
|
162
configure
vendored
162
configure
vendored
|
@ -245,10 +245,9 @@ for opt do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
default_cflags='-O2 -g'
|
||||||
git_submodules_action="update"
|
git_submodules_action="update"
|
||||||
git="git"
|
git="git"
|
||||||
debug_tcg="no"
|
|
||||||
docs="auto"
|
docs="auto"
|
||||||
EXESUF=""
|
EXESUF=""
|
||||||
prefix="/usr/local"
|
prefix="/usr/local"
|
||||||
|
@ -257,6 +256,7 @@ softmmu="yes"
|
||||||
linux_user=""
|
linux_user=""
|
||||||
bsd_user=""
|
bsd_user=""
|
||||||
plugins="$default_feature"
|
plugins="$default_feature"
|
||||||
|
subdirs=""
|
||||||
ninja=""
|
ninja=""
|
||||||
python=
|
python=
|
||||||
download="enabled"
|
download="enabled"
|
||||||
|
@ -288,7 +288,7 @@ static="no"
|
||||||
# ${cross_prefix}gcc (if cross-prefix specified)
|
# ${cross_prefix}gcc (if cross-prefix specified)
|
||||||
# system compiler
|
# system compiler
|
||||||
if test -z "${CC}${cross_prefix}"; then
|
if test -z "${CC}${cross_prefix}"; then
|
||||||
cc="$host_cc"
|
cc="cc"
|
||||||
else
|
else
|
||||||
cc="${CC-${cross_prefix}gcc}"
|
cc="${CC-${cross_prefix}gcc}"
|
||||||
fi
|
fi
|
||||||
|
@ -374,45 +374,14 @@ fi
|
||||||
|
|
||||||
# OS specific
|
# OS specific
|
||||||
|
|
||||||
mingw32="no"
|
|
||||||
bsd="no"
|
|
||||||
linux="no"
|
|
||||||
solaris="no"
|
|
||||||
case $targetos in
|
case $targetos in
|
||||||
windows)
|
windows)
|
||||||
mingw32="yes"
|
|
||||||
plugins="no"
|
plugins="no"
|
||||||
pie="no"
|
pie="no"
|
||||||
;;
|
;;
|
||||||
gnu/kfreebsd)
|
|
||||||
bsd="yes"
|
|
||||||
;;
|
|
||||||
freebsd)
|
|
||||||
bsd="yes"
|
|
||||||
# needed for kinfo_getvmmap(3) in libutil.h
|
|
||||||
;;
|
|
||||||
dragonfly)
|
|
||||||
bsd="yes"
|
|
||||||
;;
|
|
||||||
netbsd)
|
|
||||||
bsd="yes"
|
|
||||||
;;
|
|
||||||
openbsd)
|
|
||||||
bsd="yes"
|
|
||||||
;;
|
|
||||||
darwin)
|
|
||||||
bsd="yes"
|
|
||||||
darwin="yes"
|
|
||||||
;;
|
|
||||||
sunos)
|
|
||||||
solaris="yes"
|
|
||||||
;;
|
|
||||||
haiku)
|
haiku)
|
||||||
pie="no"
|
pie="no"
|
||||||
;;
|
;;
|
||||||
linux)
|
|
||||||
linux="yes"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test ! -z "$cpu" ; then
|
if test ! -z "$cpu" ; then
|
||||||
|
@ -583,16 +552,16 @@ if test -n "$linux_arch" && ! test -d "$source_path/linux-headers/asm-$linux_arc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_py_version() {
|
check_py_version() {
|
||||||
# We require python >= 3.7.
|
# We require python >= 3.8.
|
||||||
# NB: a True python conditional creates a non-zero return code (Failure)
|
# NB: a True python conditional creates a non-zero return code (Failure)
|
||||||
"$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
|
"$1" -c 'import sys; sys.exit(sys.version_info < (3,8))'
|
||||||
}
|
}
|
||||||
|
|
||||||
first_python=
|
first_python=
|
||||||
if test -z "${PYTHON}"; then
|
if test -z "${PYTHON}"; then
|
||||||
# A bare 'python' is traditionally python 2.x, but some distros
|
# A bare 'python' is traditionally python 2.x, but some distros
|
||||||
# have it as python 3.x, so check in both places.
|
# have it as python 3.x, so check in both places.
|
||||||
for binary in python3 python python3.11 python3.10 python3.9 python3.8 python3.7; do
|
for binary in python3 python python3.11 python3.10 python3.9 python3.8; do
|
||||||
if has "$binary"; then
|
if has "$binary"; then
|
||||||
python=$(command -v "$binary")
|
python=$(command -v "$binary")
|
||||||
if check_py_version "$python"; then
|
if check_py_version "$python"; then
|
||||||
|
@ -627,7 +596,7 @@ do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if test "$mingw32" = "yes" ; then
|
if test "$targetos" = "windows" ; then
|
||||||
EXESUF=".exe"
|
EXESUF=".exe"
|
||||||
prefix="/qemu"
|
prefix="/qemu"
|
||||||
bindir=""
|
bindir=""
|
||||||
|
@ -758,16 +727,13 @@ for opt do
|
||||||
# configure to be used by RPM and similar macros that set
|
# configure to be used by RPM and similar macros that set
|
||||||
# lots of directory switches by default.
|
# lots of directory switches by default.
|
||||||
;;
|
;;
|
||||||
--enable-debug-tcg) debug_tcg="yes"
|
|
||||||
;;
|
|
||||||
--disable-debug-tcg) debug_tcg="no"
|
|
||||||
;;
|
|
||||||
--enable-debug)
|
--enable-debug)
|
||||||
# Enable debugging options that aren't excessively noisy
|
# Enable debugging options that aren't excessively noisy
|
||||||
debug_tcg="yes"
|
meson_option_parse --enable-debug-tcg ""
|
||||||
meson_option_parse --enable-debug-graph-lock ""
|
meson_option_parse --enable-debug-graph-lock ""
|
||||||
meson_option_parse --enable-debug-mutex ""
|
meson_option_parse --enable-debug-mutex ""
|
||||||
meson_option_add -Doptimization=0
|
meson_option_add -Doptimization=0
|
||||||
|
default_cflags='-O0 -g'
|
||||||
;;
|
;;
|
||||||
--disable-tcg) tcg="disabled"
|
--disable-tcg) tcg="disabled"
|
||||||
plugins="no"
|
plugins="no"
|
||||||
|
@ -809,7 +775,7 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-download) download="enabled"; git_submodules_action=update;
|
--enable-download) download="enabled"; git_submodules_action=update;
|
||||||
;;
|
;;
|
||||||
--enable-plugins) if test "$mingw32" = "yes"; then
|
--enable-plugins) if test "$targetos" = "windows"; then
|
||||||
error_exit "TCG plugins not currently supported on Windows platforms"
|
error_exit "TCG plugins not currently supported on Windows platforms"
|
||||||
else
|
else
|
||||||
plugins="yes"
|
plugins="yes"
|
||||||
|
@ -871,30 +837,36 @@ fi
|
||||||
default_target_list=""
|
default_target_list=""
|
||||||
mak_wilds=""
|
mak_wilds=""
|
||||||
|
|
||||||
if [ "$linux_user" != no ]; then
|
if [ -n "$host_arch" ] && [ -d "$source_path/common-user/host/$host_arch" ]; then
|
||||||
if [ "$targetos" = linux ] && [ -n "$host_arch" ]; then
|
if [ "$linux_user" != no ]; then
|
||||||
|
if [ "$targetos" = linux ]; then
|
||||||
linux_user=yes
|
linux_user=yes
|
||||||
elif [ "$linux_user" = yes ]; then
|
elif [ "$linux_user" = yes ]; then
|
||||||
error_exit "linux-user not supported on this architecture"
|
error_exit "linux-user not supported on this architecture"
|
||||||
fi
|
fi
|
||||||
fi
|
if [ "$linux_user" = "yes" ]; then
|
||||||
if [ "$bsd_user" != no ]; then
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$bsd_user" != no ]; then
|
||||||
if [ "$bsd_user" = "" ]; then
|
if [ "$bsd_user" = "" ]; then
|
||||||
test $targetos = freebsd && bsd_user=yes
|
test $targetos = freebsd && bsd_user=yes
|
||||||
fi
|
fi
|
||||||
if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
|
if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
|
||||||
error_exit "bsd-user not supported on this host OS"
|
error_exit "bsd-user not supported on this host OS"
|
||||||
fi
|
fi
|
||||||
|
if [ "$bsd_user" = "yes" ]; then
|
||||||
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$linux_user" = yes ] || [ "$bsd_user" = yes ]; then
|
||||||
|
error_exit "user mode emulation not supported on this architecture"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "$softmmu" = "yes" ]; then
|
if [ "$softmmu" = "yes" ]; then
|
||||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
||||||
fi
|
fi
|
||||||
if [ "$linux_user" = "yes" ]; then
|
|
||||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
|
|
||||||
fi
|
|
||||||
if [ "$bsd_user" = "yes" ]; then
|
|
||||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for config in $mak_wilds; do
|
for config in $mak_wilds; do
|
||||||
target="$(basename "$config" .mak)"
|
target="$(basename "$config" .mak)"
|
||||||
|
@ -921,8 +893,8 @@ Advanced options (experts only):
|
||||||
-Dmesonoptname=val passthrough option to meson unmodified
|
-Dmesonoptname=val passthrough option to meson unmodified
|
||||||
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
|
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
|
||||||
--cc=CC use C compiler CC [$cc]
|
--cc=CC use C compiler CC [$cc]
|
||||||
--host-cc=CC use C compiler CC [$host_cc] for code run at
|
--host-cc=CC when cross compiling, use C compiler CC for code run
|
||||||
build time
|
at build time [$host_cc]
|
||||||
--cxx=CXX use C++ compiler CXX [$cxx]
|
--cxx=CXX use C++ compiler CXX [$cxx]
|
||||||
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
||||||
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
|
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
|
||||||
|
@ -958,7 +930,6 @@ cat << EOF
|
||||||
linux-user all linux usermode emulation targets
|
linux-user all linux usermode emulation targets
|
||||||
bsd-user all BSD usermode emulation targets
|
bsd-user all BSD usermode emulation targets
|
||||||
pie Position Independent Executables
|
pie Position Independent Executables
|
||||||
debug-tcg TCG debugging (default is disabled)
|
|
||||||
|
|
||||||
NOTE: The object files are built at the place where configure is launched
|
NOTE: The object files are built at the place where configure is launched
|
||||||
EOF
|
EOF
|
||||||
|
@ -981,7 +952,7 @@ then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! check_py_version "$python"; then
|
if ! check_py_version "$python"; then
|
||||||
error_exit "Cannot use '$python', Python >= 3.7 is required." \
|
error_exit "Cannot use '$python', Python >= 3.8 is required." \
|
||||||
"Use --python=/path/to/python to specify a supported Python." \
|
"Use --python=/path/to/python to specify a supported Python." \
|
||||||
"Maybe try:" \
|
"Maybe try:" \
|
||||||
" openSUSE Leap 15.3+: zypper install python39" \
|
" openSUSE Leap 15.3+: zypper install python39" \
|
||||||
|
@ -1074,7 +1045,7 @@ fi
|
||||||
# by default. Only enable by default for git builds
|
# by default. Only enable by default for git builds
|
||||||
if test -z "$werror" ; then
|
if test -z "$werror" ; then
|
||||||
if test -e "$source_path/.git" && \
|
if test -e "$source_path/.git" && \
|
||||||
{ test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
|
{ test "$targetos" = linux || test "$targetos" = "windows"; }; then
|
||||||
werror="yes"
|
werror="yes"
|
||||||
else
|
else
|
||||||
werror="no"
|
werror="no"
|
||||||
|
@ -1097,6 +1068,9 @@ if test "$static" = "yes" ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
test "$plugins" = "" && plugins=yes
|
test "$plugins" = "" && plugins=yes
|
||||||
|
if test "$plugins" = "yes"; then
|
||||||
|
subdirs="$subdirs contrib/plugins"
|
||||||
|
fi
|
||||||
|
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
|
|
||||||
|
@ -1152,14 +1126,6 @@ else
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# see if system emulation was really requested
|
|
||||||
case " $target_list " in
|
|
||||||
*"-softmmu "*) softmmu=yes
|
|
||||||
;;
|
|
||||||
*) softmmu=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test "$tcg" = "auto"; then
|
if test "$tcg" = "auto"; then
|
||||||
if test -z "$target_list"; then
|
if test -z "$target_list"; then
|
||||||
tcg="disabled"
|
tcg="disabled"
|
||||||
|
@ -1657,12 +1623,11 @@ done
|
||||||
echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
|
echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
|
||||||
|
|
||||||
# Mac OS X ships with a broken assembler
|
# Mac OS X ships with a broken assembler
|
||||||
roms=
|
|
||||||
if have_target i386-softmmu x86_64-softmmu && \
|
if have_target i386-softmmu x86_64-softmmu && \
|
||||||
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
||||||
test "$targetos" != "haiku" && \
|
test "$targetos" != "haiku" && \
|
||||||
probe_target_compiler i386-softmmu; then
|
probe_target_compiler i386-softmmu; then
|
||||||
roms="pc-bios/optionrom"
|
subdirs="$subdirs pc-bios/optionrom"
|
||||||
config_mak=pc-bios/optionrom/config.mak
|
config_mak=pc-bios/optionrom/config.mak
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||||
echo "TOPSRC_DIR=$source_path" >> $config_mak
|
echo "TOPSRC_DIR=$source_path" >> $config_mak
|
||||||
|
@ -1671,7 +1636,7 @@ fi
|
||||||
|
|
||||||
if have_target ppc-softmmu ppc64-softmmu && \
|
if have_target ppc-softmmu ppc64-softmmu && \
|
||||||
probe_target_compiler ppc-softmmu; then
|
probe_target_compiler ppc-softmmu; then
|
||||||
roms="$roms pc-bios/vof"
|
subdirs="$subdirs pc-bios/vof"
|
||||||
config_mak=pc-bios/vof/config.mak
|
config_mak=pc-bios/vof/config.mak
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||||
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
|
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
|
||||||
|
@ -1690,7 +1655,7 @@ if have_target s390x-softmmu && probe_target_compiler s390x-softmmu && \
|
||||||
echo "WARNING: Your compiler does not support the z900!"
|
echo "WARNING: Your compiler does not support the z900!"
|
||||||
echo " The s390-ccw bios will only work with guest CPUs >= z10."
|
echo " The s390-ccw bios will only work with guest CPUs >= z10."
|
||||||
fi
|
fi
|
||||||
roms="$roms pc-bios/s390-ccw"
|
subdirs="$subdirs pc-bios/s390-ccw"
|
||||||
config_mak=pc-bios/s390-ccw/config-host.mak
|
config_mak=pc-bios/s390-ccw/config-host.mak
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||||
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
|
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
|
||||||
|
@ -1709,41 +1674,15 @@ echo >> $config_host_mak
|
||||||
|
|
||||||
echo all: >> $config_host_mak
|
echo all: >> $config_host_mak
|
||||||
|
|
||||||
if test "$debug_tcg" = "yes" ; then
|
if test "$targetos" = "windows"; then
|
||||||
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
if test "$mingw32" = "yes" ; then
|
|
||||||
echo "CONFIG_WIN32=y" >> $config_host_mak
|
|
||||||
echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER-QEMU}" >> $config_host_mak
|
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_DISTRO=${QEMU_GA_DISTRO-Linux}" >> $config_host_mak
|
||||||
echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak
|
echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak
|
||||||
else
|
|
||||||
echo "CONFIG_POSIX=y" >> $config_host_mak
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$linux" = "yes" ; then
|
|
||||||
echo "CONFIG_LINUX=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$darwin" = "yes" ; then
|
|
||||||
echo "CONFIG_DARWIN=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$solaris" = "yes" ; then
|
|
||||||
echo "CONFIG_SOLARIS=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
echo "SRC_PATH=$source_path" >> $config_host_mak
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
||||||
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
||||||
|
|
||||||
# XXX: suppress that
|
|
||||||
if [ "$bsd" = "yes" ] ; then
|
|
||||||
echo "CONFIG_BSD=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$plugins" = "yes" ; then
|
|
||||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$gdb_bin"; then
|
if test -n "$gdb_bin"; then
|
||||||
gdb_version=$($gdb_bin --version | head -n 1)
|
gdb_version=$($gdb_bin --version | head -n 1)
|
||||||
if version_ge ${gdb_version##* } 9.1; then
|
if version_ge ${gdb_version##* } 9.1; then
|
||||||
|
@ -1758,17 +1697,15 @@ if test "$container" != no; then
|
||||||
echo "ENGINE=$container" >> $config_host_mak
|
echo "ENGINE=$container" >> $config_host_mak
|
||||||
echo "RUNC=$runc" >> $config_host_mak
|
echo "RUNC=$runc" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
echo "ROMS=$roms" >> $config_host_mak
|
echo "SUBDIRS=$subdirs" >> $config_host_mak
|
||||||
echo "PYTHON=$python" >> $config_host_mak
|
echo "PYTHON=$python" >> $config_host_mak
|
||||||
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
|
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
|
||||||
echo "MESON=$meson" >> $config_host_mak
|
echo "MESON=$meson" >> $config_host_mak
|
||||||
echo "NINJA=$ninja" >> $config_host_mak
|
echo "NINJA=$ninja" >> $config_host_mak
|
||||||
echo "PKG_CONFIG=${pkg_config}" >> $config_host_mak
|
|
||||||
echo "CC=$cc" >> $config_host_mak
|
|
||||||
echo "EXESUF=$EXESUF" >> $config_host_mak
|
echo "EXESUF=$EXESUF" >> $config_host_mak
|
||||||
|
|
||||||
# use included Linux headers for KVM architectures
|
# use included Linux headers for KVM architectures
|
||||||
if test "$linux" = "yes" && test -n "$linux_arch"; then
|
if test "$targetos" = "linux" && test -n "$linux_arch"; then
|
||||||
symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
|
symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1789,12 +1726,21 @@ if test "$ccache_cpp2" = "yes"; then
|
||||||
echo "export CCACHE_CPP2=y" >> $config_host_mak
|
echo "export CCACHE_CPP2=y" >> $config_host_mak
|
||||||
fi
|
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
|
||||||
|
echo "PKG_CONFIG=${pkg_config}" >> contrib/plugins/$config_host_mak
|
||||||
|
echo "CC=$cc $CPU_CFLAGS" >> contrib/plugins/$config_host_mak
|
||||||
|
echo "CFLAGS=${CFLAGS-$default_cflags} $EXTRA_CFLAGS" >> contrib/plugins/$config_host_mak
|
||||||
|
if test "$targetos" = darwin; then
|
||||||
|
echo "CONFIG_DARWIN=y" >> contrib/plugins/$config_host_mak
|
||||||
|
fi
|
||||||
|
|
||||||
# tests/tcg configuration
|
# tests/tcg configuration
|
||||||
(config_host_mak=tests/tcg/config-host.mak
|
(config_host_mak=tests/tcg/config-host.mak
|
||||||
mkdir -p tests/tcg
|
mkdir -p tests/tcg
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
||||||
echo "SRC_PATH=$source_path" >> $config_host_mak
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
||||||
echo "HOST_CC=$host_cc" >> $config_host_mak
|
|
||||||
|
|
||||||
# versioned checked in the main config_host.mak above
|
# versioned checked in the main config_host.mak above
|
||||||
if test -n "$gdb_bin"; then
|
if test -n "$gdb_bin"; then
|
||||||
|
@ -1887,7 +1833,6 @@ if test "$skip_meson" = no; then
|
||||||
echo "windres = [$(meson_quote $windres)]" >> $cross
|
echo "windres = [$(meson_quote $windres)]" >> $cross
|
||||||
echo "windmc = [$(meson_quote $windmc)]" >> $cross
|
echo "windmc = [$(meson_quote $windmc)]" >> $cross
|
||||||
if test "$cross_compile" = "yes"; then
|
if test "$cross_compile" = "yes"; then
|
||||||
cross_arg="--cross-file config-meson.cross"
|
|
||||||
echo "[host_machine]" >> $cross
|
echo "[host_machine]" >> $cross
|
||||||
echo "system = '$targetos'" >> $cross
|
echo "system = '$targetos'" >> $cross
|
||||||
case "$cpu" in
|
case "$cpu" in
|
||||||
|
@ -1904,6 +1849,14 @@ if test "$skip_meson" = no; then
|
||||||
else
|
else
|
||||||
echo "endian = 'little'" >> $cross
|
echo "endian = 'little'" >> $cross
|
||||||
fi
|
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
|
else
|
||||||
cross_arg="--native-file config-meson.cross"
|
cross_arg="--native-file config-meson.cross"
|
||||||
fi
|
fi
|
||||||
|
@ -1923,6 +1876,7 @@ if test "$skip_meson" = no; then
|
||||||
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
|
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
|
||||||
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
|
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
|
||||||
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
|
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 "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
|
||||||
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
|
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
|
||||||
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
|
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
# programs that the main configure has already done for us.
|
# programs that the main configure has already done for us.
|
||||||
#
|
#
|
||||||
|
|
||||||
BUILD_DIR := $(CURDIR)/../..
|
include config-host.mak
|
||||||
|
|
||||||
include $(BUILD_DIR)/config-host.mak
|
TOP_SRC_PATH = $(SRC_PATH)/../..
|
||||||
|
|
||||||
VPATH += $(SRC_PATH)/contrib/plugins
|
VPATH += $(SRC_PATH)
|
||||||
|
|
||||||
NAMES :=
|
NAMES :=
|
||||||
NAMES += execlog
|
NAMES += execlog
|
||||||
|
@ -26,21 +26,25 @@ SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
|
||||||
|
|
||||||
# The main QEMU uses Glib extensively so it's perfectly fine to use it
|
# The main QEMU uses Glib extensively so it's perfectly fine to use it
|
||||||
# in plugins (which many example do).
|
# in plugins (which many example do).
|
||||||
CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
|
PLUGIN_CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
|
||||||
CFLAGS += -fPIC -Wall
|
PLUGIN_CFLAGS += -fPIC -Wall
|
||||||
CFLAGS += $(if $(CONFIG_DEBUG_TCG), -ggdb -O0)
|
PLUGIN_CFLAGS += -I$(TOP_SRC_PATH)/include/qemu
|
||||||
CFLAGS += -I$(SRC_PATH)/include/qemu
|
|
||||||
|
|
||||||
all: $(SONAMES)
|
all: $(SONAMES)
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $(CFLAGS) -c -o $@ $<
|
$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
lib%.so: %.o
|
lib%.so: %.o
|
||||||
$(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDLIBS)
|
ifeq ($(CONFIG_DARWIN),y)
|
||||||
|
$(CC) -bundle -Wl,-undefined,dynamic_lookup -o $@ $^ $(LDLIBS)
|
||||||
|
else
|
||||||
|
$(CC) -shared -o $@ $^ $(LDLIBS)
|
||||||
|
endif
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o *.so *.d
|
rm -f *.o *.so *.d
|
||||||
rm -Rf .libs
|
rm -Rf .libs
|
||||||
|
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
|
.SECONDARY:
|
||||||
|
|
|
@ -545,8 +545,8 @@ static void append_stats_line(GString *line, uint64_t l1_daccess,
|
||||||
l1_dmiss_rate = ((double) l1_dmisses) / (l1_daccess) * 100.0;
|
l1_dmiss_rate = ((double) l1_dmisses) / (l1_daccess) * 100.0;
|
||||||
l1_imiss_rate = ((double) l1_imisses) / (l1_iaccess) * 100.0;
|
l1_imiss_rate = ((double) l1_imisses) / (l1_iaccess) * 100.0;
|
||||||
|
|
||||||
g_string_append_printf(line, "%-14lu %-12lu %9.4lf%% %-14lu %-12lu"
|
g_string_append_printf(line, "%-14" PRIu64 " %-12" PRIu64 " %9.4lf%%"
|
||||||
" %9.4lf%%",
|
" %-14" PRIu64 " %-12" PRIu64 " %9.4lf%%",
|
||||||
l1_daccess,
|
l1_daccess,
|
||||||
l1_dmisses,
|
l1_dmisses,
|
||||||
l1_daccess ? l1_dmiss_rate : 0.0,
|
l1_daccess ? l1_dmiss_rate : 0.0,
|
||||||
|
@ -556,7 +556,8 @@ static void append_stats_line(GString *line, uint64_t l1_daccess,
|
||||||
|
|
||||||
if (use_l2) {
|
if (use_l2) {
|
||||||
l2_miss_rate = ((double) l2_misses) / (l2_access) * 100.0;
|
l2_miss_rate = ((double) l2_misses) / (l2_access) * 100.0;
|
||||||
g_string_append_printf(line, " %-12lu %-11lu %10.4lf%%",
|
g_string_append_printf(line,
|
||||||
|
" %-12" PRIu64 " %-11" PRIu64 " %10.4lf%%",
|
||||||
l2_access,
|
l2_access,
|
||||||
l2_misses,
|
l2_misses,
|
||||||
l2_access ? l2_miss_rate : 0.0);
|
l2_access ? l2_miss_rate : 0.0);
|
||||||
|
@ -662,8 +663,8 @@ static void log_top_insns(void)
|
||||||
if (insn->symbol) {
|
if (insn->symbol) {
|
||||||
g_string_append_printf(rep, " (%s)", insn->symbol);
|
g_string_append_printf(rep, " (%s)", insn->symbol);
|
||||||
}
|
}
|
||||||
g_string_append_printf(rep, ", %ld, %s\n", insn->l1_dmisses,
|
g_string_append_printf(rep, ", %" PRId64 ", %s\n",
|
||||||
insn->disas_str);
|
insn->l1_dmisses, insn->disas_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
miss_insns = g_list_sort(miss_insns, icmp);
|
miss_insns = g_list_sort(miss_insns, icmp);
|
||||||
|
@ -675,8 +676,8 @@ static void log_top_insns(void)
|
||||||
if (insn->symbol) {
|
if (insn->symbol) {
|
||||||
g_string_append_printf(rep, " (%s)", insn->symbol);
|
g_string_append_printf(rep, " (%s)", insn->symbol);
|
||||||
}
|
}
|
||||||
g_string_append_printf(rep, ", %ld, %s\n", insn->l1_imisses,
|
g_string_append_printf(rep, ", %" PRId64 ", %s\n",
|
||||||
insn->disas_str);
|
insn->l1_imisses, insn->disas_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!use_l2) {
|
if (!use_l2) {
|
||||||
|
@ -692,8 +693,8 @@ static void log_top_insns(void)
|
||||||
if (insn->symbol) {
|
if (insn->symbol) {
|
||||||
g_string_append_printf(rep, " (%s)", insn->symbol);
|
g_string_append_printf(rep, " (%s)", insn->symbol);
|
||||||
}
|
}
|
||||||
g_string_append_printf(rep, ", %ld, %s\n", insn->l2_misses,
|
g_string_append_printf(rep, ", %" PRId64 ", %s\n",
|
||||||
insn->disas_str);
|
insn->l2_misses, insn->disas_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
|
|
|
@ -48,7 +48,7 @@ static void printf_header(unsigned long count)
|
||||||
uint64_t start_code = qemu_plugin_start_code();
|
uint64_t start_code = qemu_plugin_start_code();
|
||||||
uint64_t end_code = qemu_plugin_end_code();
|
uint64_t end_code = qemu_plugin_end_code();
|
||||||
uint64_t entry = qemu_plugin_entry_code();
|
uint64_t entry = qemu_plugin_entry_code();
|
||||||
fprintf(fp, "0, 0x%lx, 0x%lx, 0x%lx, %s\n",
|
fprintf(fp, "0, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64 ", %s\n",
|
||||||
start_code, end_code, entry, path);
|
start_code, end_code, entry, path);
|
||||||
fprintf(fp, "BB Table: %ld bbs\n", count);
|
fprintf(fp, "BB Table: %ld bbs\n", count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,7 +181,8 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||||
switch (class->what) {
|
switch (class->what) {
|
||||||
case COUNT_CLASS:
|
case COUNT_CLASS:
|
||||||
if (class->count || verbose) {
|
if (class->count || verbose) {
|
||||||
g_string_append_printf(report, "Class: %-24s\t(%ld hits)\n",
|
g_string_append_printf(report,
|
||||||
|
"Class: %-24s\t(%" PRId64 " hits)\n",
|
||||||
class->class,
|
class->class,
|
||||||
class->count);
|
class->count);
|
||||||
}
|
}
|
||||||
|
@ -208,7 +209,8 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||||
i++, counts = g_list_next(counts)) {
|
i++, counts = g_list_next(counts)) {
|
||||||
InsnExecCount *rec = (InsnExecCount *) counts->data;
|
InsnExecCount *rec = (InsnExecCount *) counts->data;
|
||||||
g_string_append_printf(report,
|
g_string_append_printf(report,
|
||||||
"Instr: %-24s\t(%ld hits)\t(op=0x%08x/%s)\n",
|
"Instr: %-24s\t(%" PRId64 " hits)"
|
||||||
|
"\t(op=0x%08x/%s)\n",
|
||||||
rec->insn,
|
rec->insn,
|
||||||
rec->count,
|
rec->count,
|
||||||
rec->opcode,
|
rec->opcode,
|
||||||
|
|
|
@ -134,7 +134,9 @@ static void report_divergance(ExecState *us, ExecState *them)
|
||||||
|
|
||||||
/* Output short log entry of going out of sync... */
|
/* Output short log entry of going out of sync... */
|
||||||
if (verbose || divrec.distance == 1 || diverged) {
|
if (verbose || divrec.distance == 1 || diverged) {
|
||||||
g_string_printf(out, "@ 0x%016lx vs 0x%016lx (%d/%d since last)\n",
|
g_string_printf(out,
|
||||||
|
"@ 0x%016" PRIx64 " vs 0x%016" PRIx64
|
||||||
|
" (%d/%d since last)\n",
|
||||||
us->pc, them->pc, g_slist_length(divergence_log),
|
us->pc, them->pc, g_slist_length(divergence_log),
|
||||||
divrec.distance);
|
divrec.distance);
|
||||||
qemu_plugin_outs(out->str);
|
qemu_plugin_outs(out->str);
|
||||||
|
@ -144,7 +146,9 @@ static void report_divergance(ExecState *us, ExecState *them)
|
||||||
int i;
|
int i;
|
||||||
GSList *entry;
|
GSList *entry;
|
||||||
|
|
||||||
g_string_printf(out, "Δ insn_count @ 0x%016lx (%ld) vs 0x%016lx (%ld)\n",
|
g_string_printf(out,
|
||||||
|
"Δ insn_count @ 0x%016" PRIx64
|
||||||
|
" (%ld) vs 0x%016" PRIx64 " (%ld)\n",
|
||||||
us->pc, us->insn_count, them->pc, them->insn_count);
|
us->pc, us->insn_count, them->pc, them->insn_count);
|
||||||
|
|
||||||
for (entry = log, i = 0;
|
for (entry = log, i = 0;
|
||||||
|
@ -152,7 +156,8 @@ static void report_divergance(ExecState *us, ExecState *them)
|
||||||
entry = g_slist_next(entry), i++) {
|
entry = g_slist_next(entry), i++) {
|
||||||
ExecInfo *prev = (ExecInfo *) entry->data;
|
ExecInfo *prev = (ExecInfo *) entry->data;
|
||||||
g_string_append_printf(out,
|
g_string_append_printf(out,
|
||||||
" previously @ 0x%016lx/%ld (%ld insns)\n",
|
" previously @ 0x%016" PRIx64 "/%" PRId64
|
||||||
|
" (%ld insns)\n",
|
||||||
prev->block->pc, prev->block->insns,
|
prev->block->pc, prev->block->insns,
|
||||||
prev->insn_count);
|
prev->insn_count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,17 +460,13 @@ Built by configure:
|
||||||
|
|
||||||
``config-host.mak``
|
``config-host.mak``
|
||||||
When configure has determined the characteristics of the build host it
|
When configure has determined the characteristics of the build host it
|
||||||
will write them to this file for use in ``Makefile`` and to a smaller
|
will write the paths to various tools to this file, for use in ``Makefile``
|
||||||
extent ``meson.build``. These include the paths to various tools and a
|
and to a smaller extent ``meson.build``.
|
||||||
variety of ``CONFIG_*`` variables related to optionally enabled features.
|
|
||||||
|
|
||||||
``config-host.mak`` is also used as a dependency checking mechanism. If make
|
``config-host.mak`` is also used as a dependency checking mechanism. If make
|
||||||
sees that the modification timestamp on configure is newer than that on
|
sees that the modification timestamp on configure is newer than that on
|
||||||
``config-host.mak``, then configure will be re-run.
|
``config-host.mak``, then configure will be re-run.
|
||||||
|
|
||||||
The variables defined here apply to all QEMU
|
|
||||||
build outputs.
|
|
||||||
|
|
||||||
``config-meson.cross``
|
``config-meson.cross``
|
||||||
|
|
||||||
A Meson "cross file" (or native file) used to communicate the paths to
|
A Meson "cross file" (or native file) used to communicate the paths to
|
||||||
|
|
|
@ -316,6 +316,6 @@ variable::
|
||||||
|
|
||||||
host_kconfig = \
|
host_kconfig = \
|
||||||
(have_tpm ? ['CONFIG_TPM=y'] : []) + \
|
(have_tpm ? ['CONFIG_TPM=y'] : []) + \
|
||||||
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
|
(targetos == 'linux' ? ['CONFIG_LINUX=y'] : []) + \
|
||||||
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
|
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
|
||||||
...
|
...
|
||||||
|
|
|
@ -181,7 +181,7 @@ Audio data is recorded and replay automatically. The command line for recording
|
||||||
and replaying must contain identical specifications of audio hardware, e.g.:
|
and replaying must contain identical specifications of audio hardware, e.g.:
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
-soundhw ac97
|
-audio pa,model=ac97
|
||||||
|
|
||||||
Serial ports
|
Serial ports
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -14,8 +14,8 @@ gdb_system_ss = ss.source_set()
|
||||||
gdb_user_ss.add(files('gdbstub.c', 'user.c'))
|
gdb_user_ss.add(files('gdbstub.c', 'user.c'))
|
||||||
gdb_system_ss.add(files('gdbstub.c', 'softmmu.c'))
|
gdb_system_ss.add(files('gdbstub.c', 'softmmu.c'))
|
||||||
|
|
||||||
gdb_user_ss = gdb_user_ss.apply(config_host, strict: false)
|
gdb_user_ss = gdb_user_ss.apply(config_targetos, strict: false)
|
||||||
gdb_system_ss = gdb_system_ss.apply(config_host, strict: false)
|
gdb_system_ss = gdb_system_ss.apply(config_targetos, strict: false)
|
||||||
|
|
||||||
libgdb_user = static_library('gdb_user',
|
libgdb_user = static_library('gdb_user',
|
||||||
gdb_user_ss.sources() + genh,
|
gdb_user_ss.sources() + genh,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "kvm/kvm_i386.h"
|
#include "kvm/kvm_i386.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include CONFIG_DEVICES
|
#include CONFIG_DEVICES
|
||||||
|
#include "target/i386/cpu.h"
|
||||||
|
|
||||||
struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
|
struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
|
||||||
|
|
||||||
|
|
|
@ -4053,7 +4053,7 @@ static bool vtd_decide_config(IntelIOMMUState *s, Error **errp)
|
||||||
error_setg(errp, "eim=on requires accel=kvm,kernel-irqchip=split");
|
error_setg(errp, "eim=on requires accel=kvm,kernel-irqchip=split");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!kvm_enable_x2apic()) {
|
if (kvm_enabled() && !kvm_enable_x2apic()) {
|
||||||
error_setg(errp, "eim=on requires support on the KVM side"
|
error_setg(errp, "eim=on requires support on the KVM side"
|
||||||
"(X2APIC_API, first shipped in v4.7)");
|
"(X2APIC_API, first shipped in v4.7)");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "hw/timer/i8254_internal.h"
|
#include "hw/timer/i8254_internal.h"
|
||||||
#include "hw/qdev-properties-system.h"
|
#include "hw/qdev-properties-system.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
|
#include "target/i386/kvm/kvm_i386.h"
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
|
|
||||||
#define KVM_PIT_REINJECT_BIT 0
|
#define KVM_PIT_REINJECT_BIT 0
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "hw/intc/ioapic_internal.h"
|
#include "hw/intc/ioapic_internal.h"
|
||||||
#include "hw/intc/kvm_irqcount.h"
|
#include "hw/intc/kvm_irqcount.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
|
#include "kvm/kvm_i386.h"
|
||||||
|
|
||||||
/* PC Utility function */
|
/* PC Utility function */
|
||||||
void kvm_pc_setup_irq_routing(bool pci_enabled)
|
void kvm_pc_setup_irq_routing(bool pci_enabled)
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
#include "hw/mem/nvdimm.h"
|
#include "hw/mem/nvdimm.h"
|
||||||
#include "hw/i386/acpi-build.h"
|
#include "hw/i386/acpi-build.h"
|
||||||
#include "kvm/kvm-cpu.h"
|
#include "kvm/kvm-cpu.h"
|
||||||
|
#include "target/i386/cpu.h"
|
||||||
|
|
||||||
#define MAX_IDE_BUS 2
|
#define MAX_IDE_BUS 2
|
||||||
#define XEN_IOAPIC_NUM_PIRQS 128ULL
|
#define XEN_IOAPIC_NUM_PIRQS 128ULL
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/i2c/smbus_eeprom.h"
|
#include "hw/i2c/smbus_eeprom.h"
|
||||||
#include "hw/rtc/mc146818rtc.h"
|
#include "hw/rtc/mc146818rtc.h"
|
||||||
|
#include "sysemu/tcg.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
#include "hw/i386/kvm/clock.h"
|
#include "hw/i386/kvm/clock.h"
|
||||||
#include "hw/pci-host/q35.h"
|
#include "hw/pci-host/q35.h"
|
||||||
|
@ -57,6 +58,7 @@
|
||||||
#include "hw/hyperv/vmbus-bridge.h"
|
#include "hw/hyperv/vmbus-bridge.h"
|
||||||
#include "hw/mem/nvdimm.h"
|
#include "hw/mem/nvdimm.h"
|
||||||
#include "hw/i386/acpi-build.h"
|
#include "hw/i386/acpi-build.h"
|
||||||
|
#include "target/i386/cpu.h"
|
||||||
|
|
||||||
/* ICH9 AHCI has 6 ports */
|
/* ICH9 AHCI has 6 ports */
|
||||||
#define MAX_SATA_PORTS 6
|
#define MAX_SATA_PORTS 6
|
||||||
|
|
|
@ -129,13 +129,10 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version)
|
||||||
ms->smp.max_cpus - 1) + 1;
|
ms->smp.max_cpus - 1) + 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Can we support APIC ID 255 or higher?
|
* Can we support APIC ID 255 or higher? With KVM, that requires
|
||||||
*
|
* both in-kernel lapic and X2APIC userspace API.
|
||||||
* Under Xen: yes.
|
|
||||||
* With userspace emulated lapic: no
|
|
||||||
* With KVM's in-kernel lapic: only if X2APIC API is enabled.
|
|
||||||
*/
|
*/
|
||||||
if (x86ms->apic_id_limit > 255 && !xen_enabled() &&
|
if (x86ms->apic_id_limit > 255 && kvm_enabled() &&
|
||||||
(!kvm_irqchip_in_kernel() || !kvm_enable_x2apic())) {
|
(!kvm_irqchip_in_kernel() || !kvm_enable_x2apic())) {
|
||||||
error_report("current -smp configuration requires kernel "
|
error_report("current -smp configuration requires kernel "
|
||||||
"irqchip and X2APIC API support.");
|
"irqchip and X2APIC API support.");
|
||||||
|
@ -424,7 +421,7 @@ void x86_cpu_pre_plug(HotplugHandler *hotplug_dev,
|
||||||
cpu->thread_id = topo_ids.smt_id;
|
cpu->thread_id = topo_ids.smt_id;
|
||||||
|
|
||||||
if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) &&
|
if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) &&
|
||||||
!kvm_hv_vpindex_settable()) {
|
kvm_enabled() && !kvm_hv_vpindex_settable()) {
|
||||||
error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX");
|
error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
/*
|
|
||||||
* qemu-options.h
|
|
||||||
*
|
|
||||||
* Defines needed for command line argument processing.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
|
||||||
* Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QEMU_OPTIONS_H
|
|
||||||
#define QEMU_OPTIONS_H
|
|
||||||
|
|
||||||
enum {
|
|
||||||
|
|
||||||
#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \
|
|
||||||
opt_enum,
|
|
||||||
#define DEFHEADING(text)
|
|
||||||
#define ARCHHEADING(text, arch_mask)
|
|
||||||
|
|
||||||
#include "qemu-options.def"
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -188,7 +188,6 @@ extern bool kvm_msi_use_devid;
|
||||||
#endif /* CONFIG_KVM_IS_POSSIBLE */
|
#endif /* CONFIG_KVM_IS_POSSIBLE */
|
||||||
|
|
||||||
struct kvm_run;
|
struct kvm_run;
|
||||||
struct kvm_lapic_state;
|
|
||||||
struct kvm_irq_routing_entry;
|
struct kvm_irq_routing_entry;
|
||||||
|
|
||||||
typedef struct KVMCapabilityInfo {
|
typedef struct KVMCapabilityInfo {
|
||||||
|
@ -222,7 +221,6 @@ int kvm_has_vcpu_events(void);
|
||||||
int kvm_has_robust_singlestep(void);
|
int kvm_has_robust_singlestep(void);
|
||||||
int kvm_has_debugregs(void);
|
int kvm_has_debugregs(void);
|
||||||
int kvm_max_nested_state_length(void);
|
int kvm_max_nested_state_length(void);
|
||||||
int kvm_has_pit_state2(void);
|
|
||||||
int kvm_has_many_ioeventfds(void);
|
int kvm_has_many_ioeventfds(void);
|
||||||
int kvm_has_gsi_routing(void);
|
int kvm_has_gsi_routing(void);
|
||||||
int kvm_has_intx_set_mask(void);
|
int kvm_has_intx_set_mask(void);
|
||||||
|
@ -407,8 +405,6 @@ void kvm_irqchip_add_change_notifier(Notifier *n);
|
||||||
void kvm_irqchip_remove_change_notifier(Notifier *n);
|
void kvm_irqchip_remove_change_notifier(Notifier *n);
|
||||||
void kvm_irqchip_change_notify(void);
|
void kvm_irqchip_change_notify(void);
|
||||||
|
|
||||||
void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
|
||||||
|
|
||||||
struct kvm_guest_debug;
|
struct kvm_guest_debug;
|
||||||
struct kvm_debug_exit_arch;
|
struct kvm_debug_exit_arch;
|
||||||
|
|
||||||
|
@ -464,11 +460,6 @@ int kvm_vm_check_extension(KVMState *s, unsigned int extension);
|
||||||
kvm_vcpu_ioctl(cpu, KVM_ENABLE_CAP, &cap); \
|
kvm_vcpu_ioctl(cpu, KVM_ENABLE_CAP, &cap); \
|
||||||
})
|
})
|
||||||
|
|
||||||
uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
|
|
||||||
uint32_t index, int reg);
|
|
||||||
uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index);
|
|
||||||
|
|
||||||
|
|
||||||
void kvm_set_sigmask_len(KVMState *s, unsigned int sigmask_len);
|
void kvm_set_sigmask_len(KVMState *s, unsigned int sigmask_len);
|
||||||
|
|
||||||
int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
|
int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
|
||||||
|
@ -523,7 +514,6 @@ int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n,
|
||||||
int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
|
int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
|
||||||
qemu_irq irq);
|
qemu_irq irq);
|
||||||
void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
|
void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
|
||||||
void kvm_pc_setup_irq_routing(bool pci_enabled);
|
|
||||||
void kvm_init_irq_routing(KVMState *s);
|
void kvm_init_irq_routing(KVMState *s);
|
||||||
|
|
||||||
bool kvm_kernel_irqchip_allowed(void);
|
bool kvm_kernel_irqchip_allowed(void);
|
||||||
|
|
|
@ -42,17 +42,17 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int os_parse_cmd_args(int index, const char *optarg);
|
|
||||||
void os_set_line_buffering(void);
|
void os_set_line_buffering(void);
|
||||||
void os_setup_early_signal_handling(void);
|
void os_setup_early_signal_handling(void);
|
||||||
void os_set_proc_name(const char *s);
|
void os_set_proc_name(const char *s);
|
||||||
void os_setup_signal_handling(void);
|
void os_setup_signal_handling(void);
|
||||||
void os_daemonize(void);
|
|
||||||
void os_setup_post(void);
|
|
||||||
int os_mlock(void);
|
|
||||||
|
|
||||||
int os_set_daemonize(bool d);
|
int os_set_daemonize(bool d);
|
||||||
bool is_daemonized(void);
|
bool is_daemonized(void);
|
||||||
|
void os_daemonize(void);
|
||||||
|
bool os_set_runas(const char *optarg);
|
||||||
|
void os_set_chroot(const char *optarg);
|
||||||
|
void os_setup_post(void);
|
||||||
|
int os_mlock(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qemu_alloc_stack:
|
* qemu_alloc_stack:
|
||||||
|
|
|
@ -101,7 +101,6 @@ static inline void os_setup_signal_handling(void) {}
|
||||||
static inline void os_daemonize(void) {}
|
static inline void os_daemonize(void) {}
|
||||||
static inline void os_setup_post(void) {}
|
static inline void os_setup_post(void) {}
|
||||||
static inline void os_set_proc_name(const char *dummy) {}
|
static inline void os_set_proc_name(const char *dummy) {}
|
||||||
static inline int os_parse_cmd_args(int index, const char *optarg) { return -1; }
|
|
||||||
void os_set_line_buffering(void);
|
void os_set_line_buffering(void);
|
||||||
void os_setup_early_signal_handling(void);
|
void os_setup_early_signal_handling(void);
|
||||||
|
|
||||||
|
|
109
meson.build
109
meson.build
|
@ -674,9 +674,7 @@ endif
|
||||||
tcg_arch = host_arch
|
tcg_arch = host_arch
|
||||||
if get_option('tcg').allowed()
|
if get_option('tcg').allowed()
|
||||||
if host_arch == 'unknown'
|
if host_arch == 'unknown'
|
||||||
if get_option('tcg_interpreter')
|
if not get_option('tcg_interpreter')
|
||||||
warning('Unsupported CPU @0@, will use TCG with TCI (slow)'.format(cpu))
|
|
||||||
else
|
|
||||||
error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu))
|
error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu))
|
||||||
endif
|
endif
|
||||||
elif get_option('tcg_interpreter')
|
elif get_option('tcg_interpreter')
|
||||||
|
@ -689,7 +687,6 @@ if get_option('tcg').allowed()
|
||||||
endif
|
endif
|
||||||
if get_option('tcg_interpreter')
|
if get_option('tcg_interpreter')
|
||||||
tcg_arch = 'tci'
|
tcg_arch = 'tci'
|
||||||
config_host += { 'CONFIG_TCG_INTERPRETER': 'y' }
|
|
||||||
elif host_arch == 'x86_64'
|
elif host_arch == 'x86_64'
|
||||||
tcg_arch = 'i386'
|
tcg_arch = 'i386'
|
||||||
elif host_arch == 'ppc64'
|
elif host_arch == 'ppc64'
|
||||||
|
@ -699,7 +696,6 @@ if get_option('tcg').allowed()
|
||||||
language: all_languages)
|
language: all_languages)
|
||||||
|
|
||||||
accelerators += 'CONFIG_TCG'
|
accelerators += 'CONFIG_TCG'
|
||||||
config_host += { 'CONFIG_TCG': 'y' }
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled()
|
if 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled()
|
||||||
|
@ -728,7 +724,7 @@ glib_cflags = []
|
||||||
if enable_modules
|
if enable_modules
|
||||||
gmodule = dependency('gmodule-export-2.0', version: glib_req_ver, required: true,
|
gmodule = dependency('gmodule-export-2.0', version: glib_req_ver, required: true,
|
||||||
method: 'pkg-config')
|
method: 'pkg-config')
|
||||||
elif config_host.has_key('CONFIG_PLUGIN')
|
elif get_option('plugins')
|
||||||
gmodule = dependency('gmodule-no-export-2.0', version: glib_req_ver, required: true,
|
gmodule = dependency('gmodule-no-export-2.0', version: glib_req_ver, required: true,
|
||||||
method: 'pkg-config')
|
method: 'pkg-config')
|
||||||
else
|
else
|
||||||
|
@ -2067,10 +2063,15 @@ config_host_data.set('CONFIG_MODULE_UPGRADES', get_option('module_upgrades'))
|
||||||
config_host_data.set('CONFIG_ATTR', libattr.found())
|
config_host_data.set('CONFIG_ATTR', libattr.found())
|
||||||
config_host_data.set('CONFIG_BDRV_WHITELIST_TOOLS', get_option('block_drv_whitelist_in_tools'))
|
config_host_data.set('CONFIG_BDRV_WHITELIST_TOOLS', get_option('block_drv_whitelist_in_tools'))
|
||||||
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
|
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
|
||||||
|
config_host_data.set('CONFIG_BSD', targetos in bsd_oses)
|
||||||
config_host_data.set('CONFIG_COCOA', cocoa.found())
|
config_host_data.set('CONFIG_COCOA', cocoa.found())
|
||||||
|
config_host_data.set('CONFIG_DARWIN', targetos == 'darwin')
|
||||||
config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
|
config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
|
||||||
config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
|
config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
|
||||||
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
|
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
|
||||||
|
config_host_data.set('CONFIG_LINUX', targetos == 'linux')
|
||||||
|
config_host_data.set('CONFIG_POSIX', targetos != 'windows')
|
||||||
|
config_host_data.set('CONFIG_WIN32', targetos == 'windows')
|
||||||
config_host_data.set('CONFIG_LZO', lzo.found())
|
config_host_data.set('CONFIG_LZO', lzo.found())
|
||||||
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
|
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
|
||||||
config_host_data.set('CONFIG_BLKIO', blkio.found())
|
config_host_data.set('CONFIG_BLKIO', blkio.found())
|
||||||
|
@ -2113,6 +2114,7 @@ if numa.found()
|
||||||
dependencies: numa))
|
dependencies: numa))
|
||||||
endif
|
endif
|
||||||
config_host_data.set('CONFIG_OPENGL', opengl.found())
|
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_RBD', rbd.found())
|
||||||
config_host_data.set('CONFIG_RDMA', rdma.found())
|
config_host_data.set('CONFIG_RDMA', rdma.found())
|
||||||
config_host_data.set('CONFIG_SAFESTACK', get_option('safe_stack'))
|
config_host_data.set('CONFIG_SAFESTACK', get_option('safe_stack'))
|
||||||
|
@ -2123,6 +2125,11 @@ if seccomp.found()
|
||||||
config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc)
|
config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc)
|
||||||
endif
|
endif
|
||||||
config_host_data.set('CONFIG_SNAPPY', snappy.found())
|
config_host_data.set('CONFIG_SNAPPY', snappy.found())
|
||||||
|
config_host_data.set('CONFIG_SOLARIS', targetos == 'sunos')
|
||||||
|
if get_option('tcg').allowed()
|
||||||
|
config_host_data.set('CONFIG_TCG', 1)
|
||||||
|
config_host_data.set('CONFIG_TCG_INTERPRETER', tcg_arch == 'tci')
|
||||||
|
endif
|
||||||
config_host_data.set('CONFIG_TPM', have_tpm)
|
config_host_data.set('CONFIG_TPM', have_tpm)
|
||||||
config_host_data.set('CONFIG_TSAN', get_option('tsan'))
|
config_host_data.set('CONFIG_TSAN', get_option('tsan'))
|
||||||
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
|
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
|
||||||
|
@ -2197,6 +2204,7 @@ config_host_data.set10('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_GRAPH_LOCK', get_option('debug_graph_lock'))
|
||||||
config_host_data.set('CONFIG_DEBUG_MUTEX', get_option('debug_mutex'))
|
config_host_data.set('CONFIG_DEBUG_MUTEX', get_option('debug_mutex'))
|
||||||
config_host_data.set('CONFIG_DEBUG_STACK_USAGE', get_option('debug_stack_usage'))
|
config_host_data.set('CONFIG_DEBUG_STACK_USAGE', get_option('debug_stack_usage'))
|
||||||
|
config_host_data.set('CONFIG_DEBUG_TCG', get_option('debug_tcg'))
|
||||||
config_host_data.set('CONFIG_GPROF', get_option('gprof'))
|
config_host_data.set('CONFIG_GPROF', get_option('gprof'))
|
||||||
config_host_data.set('CONFIG_LIVE_BLOCK_MIGRATION', get_option('live_block_migration').allowed())
|
config_host_data.set('CONFIG_LIVE_BLOCK_MIGRATION', get_option('live_block_migration').allowed())
|
||||||
config_host_data.set('CONFIG_QOM_CAST_DEBUG', get_option('qom_cast_debug'))
|
config_host_data.set('CONFIG_QOM_CAST_DEBUG', get_option('qom_cast_debug'))
|
||||||
|
@ -2750,12 +2758,6 @@ if targetos == 'windows' and 'cpp' in all_languages
|
||||||
endif
|
endif
|
||||||
config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
|
config_host_data.set('HAVE_VSS_SDK', have_vss_sdk)
|
||||||
|
|
||||||
foreach k, v: config_host
|
|
||||||
if k.startswith('CONFIG_')
|
|
||||||
config_host_data.set(k, v == 'y' ? 1 : v)
|
|
||||||
endif
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
# Older versions of MinGW do not import _lock_file and _unlock_file properly.
|
# Older versions of MinGW do not import _lock_file and _unlock_file properly.
|
||||||
# This was fixed for v6.0.0 with commit b48e3ac8969d.
|
# This was fixed for v6.0.0 with commit b48e3ac8969d.
|
||||||
if targetos == 'windows'
|
if targetos == 'windows'
|
||||||
|
@ -2794,6 +2796,18 @@ endif
|
||||||
########################
|
########################
|
||||||
|
|
||||||
minikconf = find_program('scripts/minikconf.py')
|
minikconf = find_program('scripts/minikconf.py')
|
||||||
|
config_targetos = {
|
||||||
|
(targetos == 'windows' ? 'CONFIG_WIN32' : 'CONFIG_POSIX'): 'y'
|
||||||
|
}
|
||||||
|
if targetos == 'darwin'
|
||||||
|
config_targetos += {'CONFIG_DARWIN': 'y'}
|
||||||
|
elif targetos == 'linux'
|
||||||
|
config_targetos += {'CONFIG_LINUX': 'y'}
|
||||||
|
endif
|
||||||
|
if targetos in bsd_oses
|
||||||
|
config_targetos += {'CONFIG_BSD': 'y'}
|
||||||
|
endif
|
||||||
|
|
||||||
config_all = {}
|
config_all = {}
|
||||||
config_all_devices = {}
|
config_all_devices = {}
|
||||||
config_all_disas = {}
|
config_all_disas = {}
|
||||||
|
@ -2837,7 +2851,7 @@ host_kconfig = \
|
||||||
(have_vhost_vdpa ? ['CONFIG_VHOST_VDPA=y'] : []) + \
|
(have_vhost_vdpa ? ['CONFIG_VHOST_VDPA=y'] : []) + \
|
||||||
(have_vhost_kernel ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
|
(have_vhost_kernel ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
|
||||||
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
|
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
|
||||||
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
|
(targetos == 'linux' ? ['CONFIG_LINUX=y'] : []) + \
|
||||||
(have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
|
(have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
|
||||||
(multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) + \
|
(multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) + \
|
||||||
(vfio_user_server_allowed ? ['CONFIG_VFIO_USER_SERVER_ALLOWED=y'] : [])
|
(vfio_user_server_allowed ? ['CONFIG_VFIO_USER_SERVER_ALLOWED=y'] : [])
|
||||||
|
@ -2858,7 +2872,7 @@ foreach target : target_dirs
|
||||||
endif
|
endif
|
||||||
config_target += { 'CONFIG_LINUX_USER': 'y' }
|
config_target += { 'CONFIG_LINUX_USER': 'y' }
|
||||||
elif target.endswith('bsd-user')
|
elif target.endswith('bsd-user')
|
||||||
if 'CONFIG_BSD' not in config_host
|
if targetos not in bsd_oses
|
||||||
if default_targets
|
if default_targets
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
|
@ -2989,7 +3003,7 @@ target_dirs = actual_target_dirs
|
||||||
# pseudo symbol replaces it.
|
# pseudo symbol replaces it.
|
||||||
|
|
||||||
config_all += config_all_devices
|
config_all += config_all_devices
|
||||||
config_all += config_host
|
config_all += config_targetos
|
||||||
config_all += config_all_disas
|
config_all += config_all_disas
|
||||||
config_all += {
|
config_all += {
|
||||||
'CONFIG_XEN': xen.found(),
|
'CONFIG_XEN': xen.found(),
|
||||||
|
@ -3336,7 +3350,7 @@ if enable_modules
|
||||||
modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
|
modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
qom_ss = qom_ss.apply(config_host, strict: false)
|
qom_ss = qom_ss.apply(config_targetos, strict: false)
|
||||||
libqom = static_library('qom', qom_ss.sources() + genh,
|
libqom = static_library('qom', qom_ss.sources() + genh,
|
||||||
dependencies: [qom_ss.dependencies()],
|
dependencies: [qom_ss.dependencies()],
|
||||||
name_suffix: 'fa')
|
name_suffix: 'fa')
|
||||||
|
@ -3510,7 +3524,7 @@ foreach d, list : target_modules
|
||||||
foreach target : target_dirs
|
foreach target : target_dirs
|
||||||
if target.endswith('-softmmu')
|
if target.endswith('-softmmu')
|
||||||
config_target = config_target_mak[target]
|
config_target = config_target_mak[target]
|
||||||
config_target += config_host
|
config_target += config_targetos
|
||||||
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
|
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
|
||||||
c_args = ['-DNEED_CPU_H',
|
c_args = ['-DNEED_CPU_H',
|
||||||
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
|
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
|
||||||
|
@ -3571,7 +3585,7 @@ qemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
|
||||||
capture: true,
|
capture: true,
|
||||||
command: [undefsym, nm, '@INPUT@'])
|
command: [undefsym, nm, '@INPUT@'])
|
||||||
|
|
||||||
authz_ss = authz_ss.apply(config_host, strict: false)
|
authz_ss = authz_ss.apply(config_targetos, strict: false)
|
||||||
libauthz = static_library('authz', authz_ss.sources() + genh,
|
libauthz = static_library('authz', authz_ss.sources() + genh,
|
||||||
dependencies: [authz_ss.dependencies()],
|
dependencies: [authz_ss.dependencies()],
|
||||||
name_suffix: 'fa',
|
name_suffix: 'fa',
|
||||||
|
@ -3580,7 +3594,7 @@ libauthz = static_library('authz', authz_ss.sources() + genh,
|
||||||
authz = declare_dependency(link_whole: libauthz,
|
authz = declare_dependency(link_whole: libauthz,
|
||||||
dependencies: qom)
|
dependencies: qom)
|
||||||
|
|
||||||
crypto_ss = crypto_ss.apply(config_host, strict: false)
|
crypto_ss = crypto_ss.apply(config_targetos, strict: false)
|
||||||
libcrypto = static_library('crypto', crypto_ss.sources() + genh,
|
libcrypto = static_library('crypto', crypto_ss.sources() + genh,
|
||||||
dependencies: [crypto_ss.dependencies()],
|
dependencies: [crypto_ss.dependencies()],
|
||||||
name_suffix: 'fa',
|
name_suffix: 'fa',
|
||||||
|
@ -3589,7 +3603,7 @@ libcrypto = static_library('crypto', crypto_ss.sources() + genh,
|
||||||
crypto = declare_dependency(link_whole: libcrypto,
|
crypto = declare_dependency(link_whole: libcrypto,
|
||||||
dependencies: [authz, qom])
|
dependencies: [authz, qom])
|
||||||
|
|
||||||
io_ss = io_ss.apply(config_host, strict: false)
|
io_ss = io_ss.apply(config_targetos, strict: false)
|
||||||
libio = static_library('io', io_ss.sources() + genh,
|
libio = static_library('io', io_ss.sources() + genh,
|
||||||
dependencies: [io_ss.dependencies()],
|
dependencies: [io_ss.dependencies()],
|
||||||
link_with: libqemuutil,
|
link_with: libqemuutil,
|
||||||
|
@ -3605,7 +3619,7 @@ migration = declare_dependency(link_with: libmigration,
|
||||||
dependencies: [zlib, qom, io])
|
dependencies: [zlib, qom, io])
|
||||||
system_ss.add(migration)
|
system_ss.add(migration)
|
||||||
|
|
||||||
block_ss = block_ss.apply(config_host, strict: false)
|
block_ss = block_ss.apply(config_targetos, strict: false)
|
||||||
libblock = static_library('block', block_ss.sources() + genh,
|
libblock = static_library('block', block_ss.sources() + genh,
|
||||||
dependencies: block_ss.dependencies(),
|
dependencies: block_ss.dependencies(),
|
||||||
link_depends: block_syms,
|
link_depends: block_syms,
|
||||||
|
@ -3616,7 +3630,7 @@ block = declare_dependency(link_whole: [libblock],
|
||||||
link_args: '@block.syms',
|
link_args: '@block.syms',
|
||||||
dependencies: [crypto, io])
|
dependencies: [crypto, io])
|
||||||
|
|
||||||
blockdev_ss = blockdev_ss.apply(config_host, strict: false)
|
blockdev_ss = blockdev_ss.apply(config_targetos, strict: false)
|
||||||
libblockdev = static_library('blockdev', blockdev_ss.sources() + genh,
|
libblockdev = static_library('blockdev', blockdev_ss.sources() + genh,
|
||||||
dependencies: blockdev_ss.dependencies(),
|
dependencies: blockdev_ss.dependencies(),
|
||||||
name_suffix: 'fa',
|
name_suffix: 'fa',
|
||||||
|
@ -3625,7 +3639,7 @@ libblockdev = static_library('blockdev', blockdev_ss.sources() + genh,
|
||||||
blockdev = declare_dependency(link_whole: [libblockdev],
|
blockdev = declare_dependency(link_whole: [libblockdev],
|
||||||
dependencies: [block, event_loop_base])
|
dependencies: [block, event_loop_base])
|
||||||
|
|
||||||
qmp_ss = qmp_ss.apply(config_host, strict: false)
|
qmp_ss = qmp_ss.apply(config_targetos, strict: false)
|
||||||
libqmp = static_library('qmp', qmp_ss.sources() + genh,
|
libqmp = static_library('qmp', qmp_ss.sources() + genh,
|
||||||
dependencies: qmp_ss.dependencies(),
|
dependencies: qmp_ss.dependencies(),
|
||||||
name_suffix: 'fa',
|
name_suffix: 'fa',
|
||||||
|
@ -3640,7 +3654,7 @@ libchardev = static_library('chardev', chardev_ss.sources() + genh,
|
||||||
|
|
||||||
chardev = declare_dependency(link_whole: libchardev)
|
chardev = declare_dependency(link_whole: libchardev)
|
||||||
|
|
||||||
hwcore_ss = hwcore_ss.apply(config_host, strict: false)
|
hwcore_ss = hwcore_ss.apply(config_targetos, strict: false)
|
||||||
libhwcore = static_library('hwcore', sources: hwcore_ss.sources() + genh,
|
libhwcore = static_library('hwcore', sources: hwcore_ss.sources() + genh,
|
||||||
name_suffix: 'fa',
|
name_suffix: 'fa',
|
||||||
build_by_default: false)
|
build_by_default: false)
|
||||||
|
@ -3697,7 +3711,7 @@ foreach target : target_dirs
|
||||||
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
|
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
|
||||||
link_args = emulator_link_args
|
link_args = emulator_link_args
|
||||||
|
|
||||||
config_target += config_host
|
config_target += config_targetos
|
||||||
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
|
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
|
||||||
if targetos == 'linux'
|
if targetos == 'linux'
|
||||||
target_inc += include_directories('linux-headers', is_system: true)
|
target_inc += include_directories('linux-headers', is_system: true)
|
||||||
|
@ -3880,7 +3894,7 @@ endforeach
|
||||||
|
|
||||||
# Other build targets
|
# Other build targets
|
||||||
|
|
||||||
if 'CONFIG_PLUGIN' in config_host
|
if get_option('plugins')
|
||||||
install_headers('include/qemu/qemu-plugin.h')
|
install_headers('include/qemu/qemu-plugin.h')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -4152,8 +4166,8 @@ if config_all.has_key('CONFIG_TCG')
|
||||||
else
|
else
|
||||||
summary_info += {'TCG backend': 'native (@0@)'.format(cpu)}
|
summary_info += {'TCG backend': 'native (@0@)'.format(cpu)}
|
||||||
endif
|
endif
|
||||||
summary_info += {'TCG plugins': config_host.has_key('CONFIG_PLUGIN')}
|
summary_info += {'TCG plugins': get_option('plugins')}
|
||||||
summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
|
summary_info += {'TCG debug enabled': get_option('debug_tcg')}
|
||||||
endif
|
endif
|
||||||
summary_info += {'target list': ' '.join(target_dirs)}
|
summary_info += {'target list': ' '.join(target_dirs)}
|
||||||
if have_system
|
if have_system
|
||||||
|
@ -4312,28 +4326,37 @@ summary_info += {'selinux': selinux}
|
||||||
summary_info += {'libdw': libdw}
|
summary_info += {'libdw': libdw}
|
||||||
summary(summary_info, bool_yn: true, section: 'Dependencies')
|
summary(summary_info, bool_yn: true, section: 'Dependencies')
|
||||||
|
|
||||||
if not supported_cpus.contains(cpu)
|
if host_arch == 'unknown'
|
||||||
message()
|
message()
|
||||||
warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
|
warning('UNSUPPORTED HOST CPU')
|
||||||
|
message()
|
||||||
|
message('Support for CPU host architecture ' + cpu + ' is not currently')
|
||||||
|
message('maintained. The QEMU project does not guarantee that QEMU will')
|
||||||
|
message('compile or work on this host CPU. You can help by volunteering')
|
||||||
|
message('to maintain it and providing a build host for our continuous')
|
||||||
|
message('integration setup.')
|
||||||
|
if get_option('tcg').allowed() and target_dirs.length() > 0
|
||||||
message()
|
message()
|
||||||
message('CPU host architecture ' + cpu + ' support is not currently maintained.')
|
|
||||||
message('The QEMU project intends to remove support for this host CPU in')
|
|
||||||
message('a future release if nobody volunteers to maintain it and to')
|
|
||||||
message('provide a build host for our continuous integration setup.')
|
|
||||||
message('configure has succeeded and you can continue to build, but')
|
message('configure has succeeded and you can continue to build, but')
|
||||||
message('if you care about QEMU on this platform you should contact')
|
message('QEMU will use a slow interpreter to emulate the target CPU.')
|
||||||
message('us upstream at qemu-devel@nongnu.org.')
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if not supported_oses.contains(targetos)
|
if not supported_oses.contains(targetos)
|
||||||
message()
|
message()
|
||||||
warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
|
warning('UNSUPPORTED HOST OS')
|
||||||
message()
|
message()
|
||||||
message('Host OS ' + targetos + 'support is not currently maintained.')
|
message('Support for host OS ' + targetos + 'is not currently maintained.')
|
||||||
message('The QEMU project intends to remove support for this host OS in')
|
|
||||||
message('a future release if nobody volunteers to maintain it and to')
|
|
||||||
message('provide a build host for our continuous integration setup.')
|
|
||||||
message('configure has succeeded and you can continue to build, but')
|
message('configure has succeeded and you can continue to build, but')
|
||||||
message('if you care about QEMU on this platform you should contact')
|
message('the QEMU project does not guarantee that QEMU will compile or')
|
||||||
message('us upstream at qemu-devel@nongnu.org.')
|
message('work on this operating system. You can help by volunteering')
|
||||||
|
message('to maintain it and providing a build host for our continuous')
|
||||||
|
message('integration setup. This will ensure that future versions of QEMU')
|
||||||
|
message('will keep working on ' + targetos + '.')
|
||||||
|
endif
|
||||||
|
|
||||||
|
if host_arch == 'unknown' or not supported_oses.contains(targetos)
|
||||||
|
message()
|
||||||
|
message('If you want to help supporting QEMU on this platform, please')
|
||||||
|
message('contact the developers at qemu-devel@nongnu.org.')
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -81,6 +81,10 @@ option('xen_pci_passthrough', type: 'feature', value: 'auto',
|
||||||
description: 'Xen PCI passthrough support')
|
description: 'Xen PCI passthrough support')
|
||||||
option('tcg', type: 'feature', value: 'enabled',
|
option('tcg', type: 'feature', value: 'enabled',
|
||||||
description: 'TCG support')
|
description: 'TCG support')
|
||||||
|
option('plugins', type: 'boolean', value: false,
|
||||||
|
description: 'TCG plugins via shared library loading')
|
||||||
|
option('debug_tcg', type: 'boolean', value: false,
|
||||||
|
description: 'TCG debugging')
|
||||||
option('tcg_interpreter', type: 'boolean', value: false,
|
option('tcg_interpreter', type: 'boolean', value: false,
|
||||||
description: 'TCG with bytecode interpreter (slow)')
|
description: 'TCG with bytecode interpreter (slow)')
|
||||||
option('safe_stack', type: 'boolean', value: false,
|
option('safe_stack', type: 'boolean', value: false,
|
||||||
|
|
|
@ -41,15 +41,17 @@ if have_vhost_net_user
|
||||||
system_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
|
system_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-user-stub.c'))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
system_ss.add(when: 'CONFIG_LINUX', if_true: files('tap-linux.c'))
|
if targetos == 'windows'
|
||||||
system_ss.add(when: 'CONFIG_BSD', if_true: files('tap-bsd.c'))
|
system_ss.add(files('tap-win32.c'))
|
||||||
system_ss.add(when: 'CONFIG_SOLARIS', if_true: files('tap-solaris.c'))
|
elif targetos == 'linux'
|
||||||
tap_posix = ['tap.c']
|
system_ss.add(files('tap.c', 'tap-linux.c'))
|
||||||
if not config_host.has_key('CONFIG_LINUX') and not config_host.has_key('CONFIG_BSD') and not config_host.has_key('CONFIG_SOLARIS')
|
elif targetos in bsd_oses
|
||||||
tap_posix += 'tap-stub.c'
|
system_ss.add(files('tap.c', 'tap-bsd.c'))
|
||||||
|
elif targetos == 'solaris'
|
||||||
|
system_ss.add(files('tap.c', 'tap-solaris.c'))
|
||||||
|
else
|
||||||
|
system_ss.add(files('tap.c', 'tap-stub.c'))
|
||||||
endif
|
endif
|
||||||
system_ss.add(when: 'CONFIG_POSIX', if_true: files(tap_posix))
|
|
||||||
system_ss.add(when: 'CONFIG_WIN32', if_true: files('tap-win32.c'))
|
|
||||||
if have_vhost_net_vdpa
|
if have_vhost_net_vdpa
|
||||||
system_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-vdpa.c'), if_false: files('vhost-vdpa-stub.c'))
|
system_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-vdpa.c'), if_false: files('vhost-vdpa-stub.c'))
|
||||||
system_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-vdpa-stub.c'))
|
system_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-vdpa-stub.c'))
|
||||||
|
|
157
os-posix.c
157
os-posix.c
|
@ -29,33 +29,15 @@
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
/* Needed early for CONFIG_BSD etc. */
|
|
||||||
#include "net/slirp.h"
|
|
||||||
#include "qemu/qemu-options.h"
|
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
#include "sysemu/runstate.h"
|
#include "sysemu/runstate.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qemu/config-file.h"
|
|
||||||
#include "qemu/option.h"
|
|
||||||
#include "qemu/module.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_LINUX
|
#ifdef CONFIG_LINUX
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
#include "qemu/async-teardown.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Must set all three of these at once.
|
|
||||||
* Legal combinations are unset by name by uid
|
|
||||||
*/
|
|
||||||
static struct passwd *user_pwd; /* NULL non-NULL NULL */
|
|
||||||
static uid_t user_uid = (uid_t)-1; /* -1 -1 >=0 */
|
|
||||||
static gid_t user_gid = (gid_t)-1; /* -1 -1 >=0 */
|
|
||||||
|
|
||||||
static const char *chroot_dir;
|
|
||||||
static int daemonize;
|
|
||||||
static int daemon_pipe;
|
|
||||||
|
|
||||||
void os_setup_early_signal_handling(void)
|
void os_setup_early_signal_handling(void)
|
||||||
{
|
{
|
||||||
|
@ -103,7 +85,22 @@ void os_set_proc_name(const char *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool os_parse_runas_uid_gid(const char *optarg)
|
/*
|
||||||
|
* Must set all three of these at once.
|
||||||
|
* Legal combinations are unset by name by uid
|
||||||
|
*/
|
||||||
|
static struct passwd *user_pwd; /* NULL non-NULL NULL */
|
||||||
|
static uid_t user_uid = (uid_t)-1; /* -1 -1 >=0 */
|
||||||
|
static gid_t user_gid = (gid_t)-1; /* -1 -1 >=0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare to change user ID. optarg can be one of 3 forms:
|
||||||
|
* - a username, in which case user ID will be changed to its uid,
|
||||||
|
* with primary and supplementary groups set up too;
|
||||||
|
* - a numeric uid, in which case only the uid will be set;
|
||||||
|
* - a pair of numeric uid:gid.
|
||||||
|
*/
|
||||||
|
bool os_set_runas(const char *optarg)
|
||||||
{
|
{
|
||||||
unsigned long lv;
|
unsigned long lv;
|
||||||
const char *ep;
|
const char *ep;
|
||||||
|
@ -111,6 +108,13 @@ static bool os_parse_runas_uid_gid(const char *optarg)
|
||||||
gid_t got_gid;
|
gid_t got_gid;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
user_pwd = getpwnam(optarg);
|
||||||
|
if (user_pwd) {
|
||||||
|
user_uid = -1;
|
||||||
|
user_gid = -1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
rc = qemu_strtoul(optarg, &ep, 0, &lv);
|
rc = qemu_strtoul(optarg, &ep, 0, &lv);
|
||||||
got_uid = lv; /* overflow here is ID in C99 */
|
got_uid = lv; /* overflow here is ID in C99 */
|
||||||
if (rc || *ep != ':' || got_uid != lv || got_uid == (uid_t)-1) {
|
if (rc || *ep != ':' || got_uid != lv || got_uid == (uid_t)-1) {
|
||||||
|
@ -129,63 +133,6 @@ static bool os_parse_runas_uid_gid(const char *optarg)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Parse OS specific command line options.
|
|
||||||
* return 0 if option handled, -1 otherwise
|
|
||||||
*/
|
|
||||||
int os_parse_cmd_args(int index, const char *optarg)
|
|
||||||
{
|
|
||||||
switch (index) {
|
|
||||||
case QEMU_OPTION_runas:
|
|
||||||
user_pwd = getpwnam(optarg);
|
|
||||||
if (user_pwd) {
|
|
||||||
user_uid = -1;
|
|
||||||
user_gid = -1;
|
|
||||||
} else if (!os_parse_runas_uid_gid(optarg)) {
|
|
||||||
error_report("User \"%s\" doesn't exist"
|
|
||||||
" (and is not <uid>:<gid>)",
|
|
||||||
optarg);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case QEMU_OPTION_chroot:
|
|
||||||
warn_report("option is deprecated, use '-run-with chroot=...' instead");
|
|
||||||
chroot_dir = optarg;
|
|
||||||
break;
|
|
||||||
case QEMU_OPTION_daemonize:
|
|
||||||
daemonize = 1;
|
|
||||||
break;
|
|
||||||
#if defined(CONFIG_LINUX)
|
|
||||||
/* deprecated */
|
|
||||||
case QEMU_OPTION_asyncteardown:
|
|
||||||
init_async_teardown();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case QEMU_OPTION_run_with: {
|
|
||||||
const char *str;
|
|
||||||
QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
|
|
||||||
optarg, false);
|
|
||||||
if (!opts) {
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
#if defined(CONFIG_LINUX)
|
|
||||||
if (qemu_opt_get_bool(opts, "async-teardown", false)) {
|
|
||||||
init_async_teardown();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
str = qemu_opt_get(opts, "chroot");
|
|
||||||
if (str) {
|
|
||||||
chroot_dir = str;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void change_process_uid(void)
|
static void change_process_uid(void)
|
||||||
{
|
{
|
||||||
assert((user_uid == (uid_t)-1) || user_pwd == NULL);
|
assert((user_uid == (uid_t)-1) || user_pwd == NULL);
|
||||||
|
@ -223,6 +170,14 @@ static void change_process_uid(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *chroot_dir;
|
||||||
|
|
||||||
|
void os_set_chroot(const char *optarg)
|
||||||
|
{
|
||||||
|
chroot_dir = optarg;
|
||||||
|
}
|
||||||
|
|
||||||
static void change_root(void)
|
static void change_root(void)
|
||||||
{
|
{
|
||||||
if (chroot_dir) {
|
if (chroot_dir) {
|
||||||
|
@ -238,6 +193,21 @@ static void change_root(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int daemonize;
|
||||||
|
static int daemon_pipe;
|
||||||
|
|
||||||
|
bool is_daemonized(void)
|
||||||
|
{
|
||||||
|
return daemonize;
|
||||||
|
}
|
||||||
|
|
||||||
|
int os_set_daemonize(bool d)
|
||||||
|
{
|
||||||
|
daemonize = d;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void os_daemonize(void)
|
void os_daemonize(void)
|
||||||
{
|
{
|
||||||
if (daemonize) {
|
if (daemonize) {
|
||||||
|
@ -331,17 +301,6 @@ void os_set_line_buffering(void)
|
||||||
setvbuf(stdout, NULL, _IOLBF, 0);
|
setvbuf(stdout, NULL, _IOLBF, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_daemonized(void)
|
|
||||||
{
|
|
||||||
return daemonize;
|
|
||||||
}
|
|
||||||
|
|
||||||
int os_set_daemonize(bool d)
|
|
||||||
{
|
|
||||||
daemonize = d;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int os_mlock(void)
|
int os_mlock(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_MLOCKALL
|
#ifdef HAVE_MLOCKALL
|
||||||
|
@ -357,27 +316,3 @@ int os_mlock(void)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static QemuOptsList qemu_run_with_opts = {
|
|
||||||
.name = "run-with",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
|
|
||||||
.desc = {
|
|
||||||
#if defined(CONFIG_LINUX)
|
|
||||||
{
|
|
||||||
.name = "async-teardown",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
.name = "chroot",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static void register_runwith(void)
|
|
||||||
{
|
|
||||||
qemu_add_opts(&qemu_run_with_opts);
|
|
||||||
}
|
|
||||||
opts_init(register_runwith);
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
#
|
|
||||||
# NOTE: only compilable with x86 cross compile tools
|
|
||||||
#
|
|
||||||
include ../config-host.mak
|
|
||||||
|
|
||||||
DEFINES=
|
|
||||||
|
|
||||||
TARGETS=
|
|
||||||
|
|
||||||
all: $(TARGETS)
|
|
||||||
|
|
||||||
%.o: %.S
|
|
||||||
$(CC) $(DEFINES) -c -o $@ $<
|
|
||||||
|
|
||||||
%.dtb: %.dts
|
|
||||||
dtc -I dts -O dtb -o $@ $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(TARGETS) *.o *~
|
|
|
@ -57,10 +57,6 @@ blobs = [
|
||||||
'efi-e1000e.rom',
|
'efi-e1000e.rom',
|
||||||
'efi-vmxnet3.rom',
|
'efi-vmxnet3.rom',
|
||||||
'qemu-nsis.bmp',
|
'qemu-nsis.bmp',
|
||||||
'bamboo.dtb',
|
|
||||||
'canyonlands.dtb',
|
|
||||||
'petalogix-s3adsp1800.dtb',
|
|
||||||
'petalogix-ml605.dtb',
|
|
||||||
'multiboot.bin',
|
'multiboot.bin',
|
||||||
'multiboot_dma.bin',
|
'multiboot_dma.bin',
|
||||||
'linuxboot.bin',
|
'linuxboot.bin',
|
||||||
|
@ -84,6 +80,27 @@ blobs = [
|
||||||
'vof-nvram.bin',
|
'vof-nvram.bin',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
dtc = find_program('dtc', required: false)
|
||||||
|
foreach f : [
|
||||||
|
'bamboo.dts',
|
||||||
|
'canyonlands.dts',
|
||||||
|
'petalogix-s3adsp1800.dts',
|
||||||
|
'petalogix-ml605.dts',
|
||||||
|
]
|
||||||
|
out = fs.replace_suffix(f, '.dtb')
|
||||||
|
if dtc.found()
|
||||||
|
custom_target(f,
|
||||||
|
build_by_default: have_system,
|
||||||
|
input: files(f),
|
||||||
|
output: out,
|
||||||
|
install: get_option('install_blobs'),
|
||||||
|
install_dir: qemu_datadir,
|
||||||
|
command: [ dtc, '-I', 'dts', '-O', 'dtb', '-o', '@OUTPUT@', '@INPUT0@' ])
|
||||||
|
else
|
||||||
|
blobs += out
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
if get_option('install_blobs')
|
if get_option('install_blobs')
|
||||||
install_data(blobs, install_dir: qemu_datadir)
|
install_data(blobs, install_dir: qemu_datadir)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -13,8 +13,10 @@ if not enable_modules
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
specific_ss.add(when: 'CONFIG_PLUGIN', if_true: [files(
|
if get_option('plugins')
|
||||||
|
specific_ss.add(files(
|
||||||
'loader.c',
|
'loader.c',
|
||||||
'core.c',
|
'core.c',
|
||||||
'api.c',
|
'api.c',
|
||||||
), declare_dependency(link_args: plugin_ldflags)])
|
), declare_dependency(link_args: plugin_ldflags))
|
||||||
|
endif
|
||||||
|
|
|
@ -9,13 +9,13 @@ help:
|
||||||
@echo "make check-minreqs:"
|
@echo "make check-minreqs:"
|
||||||
@echo " Run tests in the minreqs virtual environment."
|
@echo " Run tests in the minreqs virtual environment."
|
||||||
@echo " These tests use the oldest dependencies."
|
@echo " These tests use the oldest dependencies."
|
||||||
@echo " Requires: Python 3.7"
|
@echo " Requires: Python 3.8"
|
||||||
@echo " Hint (Fedora): 'sudo dnf install python3.7'"
|
@echo " Hint (Fedora): 'sudo dnf install python3.8'"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "make check-tox:"
|
@echo "make check-tox:"
|
||||||
@echo " Run tests against multiple python versions."
|
@echo " Run tests against multiple python versions."
|
||||||
@echo " These tests use the newest dependencies."
|
@echo " These tests use the newest dependencies."
|
||||||
@echo " Requires: Python 3.7 - 3.11, and tox."
|
@echo " Requires: Python 3.8 - 3.11, and tox."
|
||||||
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.11'"
|
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.11'"
|
||||||
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
|
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
|
||||||
@echo " arguments to tox".
|
@echo " arguments to tox".
|
||||||
|
@ -59,7 +59,7 @@ PIP_INSTALL = pip install --disable-pip-version-check
|
||||||
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
|
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
|
||||||
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.txt
|
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.txt
|
||||||
@echo "VENV $(QEMU_MINVENV_DIR)"
|
@echo "VENV $(QEMU_MINVENV_DIR)"
|
||||||
@python3.7 -m venv $(QEMU_MINVENV_DIR)
|
@python3.8 -m venv $(QEMU_MINVENV_DIR)
|
||||||
@( \
|
@( \
|
||||||
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
|
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
|
||||||
. $(QEMU_MINVENV_DIR)/bin/activate; \
|
. $(QEMU_MINVENV_DIR)/bin/activate; \
|
||||||
|
|
|
@ -61,9 +61,6 @@ options:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# The duplication between importlib and pkg_resources does not help
|
|
||||||
# pylint: disable=too-many-lines
|
|
||||||
|
|
||||||
# Copyright (C) 2022-2023 Red Hat, Inc.
|
# Copyright (C) 2022-2023 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
# Authors:
|
# Authors:
|
||||||
|
@ -74,6 +71,13 @@ options:
|
||||||
# later. See the COPYING file in the top-level directory.
|
# later. See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
from importlib.metadata import (
|
||||||
|
Distribution,
|
||||||
|
EntryPoint,
|
||||||
|
PackageNotFoundError,
|
||||||
|
distribution,
|
||||||
|
version,
|
||||||
|
)
|
||||||
from importlib.util import find_spec
|
from importlib.util import find_spec
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
@ -189,7 +193,7 @@ class QemuEnvBuilder(venv.EnvBuilder):
|
||||||
):
|
):
|
||||||
kwargs["with_pip"] = False
|
kwargs["with_pip"] = False
|
||||||
else:
|
else:
|
||||||
check_ensurepip(suggest_remedy=True)
|
check_ensurepip()
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -294,7 +298,7 @@ def need_ensurepip() -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def check_ensurepip(prefix: str = "", suggest_remedy: bool = False) -> None:
|
def check_ensurepip() -> None:
|
||||||
"""
|
"""
|
||||||
Check that we have ensurepip.
|
Check that we have ensurepip.
|
||||||
|
|
||||||
|
@ -305,15 +309,12 @@ def check_ensurepip(prefix: str = "", suggest_remedy: bool = False) -> None:
|
||||||
"Python's ensurepip module is not found.\n"
|
"Python's ensurepip module is not found.\n"
|
||||||
"It's normally part of the Python standard library, "
|
"It's normally part of the Python standard library, "
|
||||||
"maybe your distribution packages it separately?\n"
|
"maybe your distribution packages it separately?\n"
|
||||||
"(Debian puts ensurepip in its python3-venv package.)\n"
|
"Either install ensurepip, or alleviate the need for it in the "
|
||||||
)
|
"first place by installing pip and setuptools for "
|
||||||
if suggest_remedy:
|
|
||||||
msg += (
|
|
||||||
"Either install ensurepip, or alleviate the need for it in the"
|
|
||||||
" first place by installing pip and setuptools for "
|
|
||||||
f"'{sys.executable}'.\n"
|
f"'{sys.executable}'.\n"
|
||||||
|
"(Hint: Debian puts ensurepip in its python3-venv package.)"
|
||||||
)
|
)
|
||||||
raise Ouch(prefix + msg)
|
raise Ouch(msg)
|
||||||
|
|
||||||
# ensurepip uses pyexpat, which can also go missing on us:
|
# ensurepip uses pyexpat, which can also go missing on us:
|
||||||
if not find_spec("pyexpat"):
|
if not find_spec("pyexpat"):
|
||||||
|
@ -321,15 +322,12 @@ def check_ensurepip(prefix: str = "", suggest_remedy: bool = False) -> None:
|
||||||
"Python's pyexpat module is not found.\n"
|
"Python's pyexpat module is not found.\n"
|
||||||
"It's normally part of the Python standard library, "
|
"It's normally part of the Python standard library, "
|
||||||
"maybe your distribution packages it separately?\n"
|
"maybe your distribution packages it separately?\n"
|
||||||
"(NetBSD's pkgsrc debundles this to e.g. 'py310-expat'.)\n"
|
|
||||||
)
|
|
||||||
if suggest_remedy:
|
|
||||||
msg += (
|
|
||||||
"Either install pyexpat, or alleviate the need for it in the "
|
"Either install pyexpat, or alleviate the need for it in the "
|
||||||
"first place by installing pip and setuptools for "
|
"first place by installing pip and setuptools for "
|
||||||
f"'{sys.executable}'.\n"
|
f"'{sys.executable}'.\n\n"
|
||||||
|
"(Hint: NetBSD's pkgsrc debundles this to e.g. 'py310-expat'.)"
|
||||||
)
|
)
|
||||||
raise Ouch(prefix + msg)
|
raise Ouch(msg)
|
||||||
|
|
||||||
|
|
||||||
def make_venv( # pylint: disable=too-many-arguments
|
def make_venv( # pylint: disable=too-many-arguments
|
||||||
|
@ -428,28 +426,13 @@ def make_venv( # pylint: disable=too-many-arguments
|
||||||
print(builder.get_value("env_exe"))
|
print(builder.get_value("env_exe"))
|
||||||
|
|
||||||
|
|
||||||
def _gen_importlib(packages: Sequence[str]) -> Iterator[str]:
|
def _get_entry_points(packages: Sequence[str]) -> Iterator[str]:
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
# pylint: disable=import-error
|
|
||||||
try:
|
|
||||||
# First preference: Python 3.8+ stdlib
|
|
||||||
from importlib.metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
# Second preference: Commonly available PyPI backport
|
|
||||||
from importlib_metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _generator() -> Iterator[str]:
|
def _generator() -> Iterator[str]:
|
||||||
for package in packages:
|
for package in packages:
|
||||||
try:
|
try:
|
||||||
entry_points = distribution(package).entry_points
|
entry_points: Iterator[EntryPoint] = \
|
||||||
|
iter(distribution(package).entry_points)
|
||||||
except PackageNotFoundError:
|
except PackageNotFoundError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -465,24 +448,6 @@ def _gen_importlib(packages: Sequence[str]) -> Iterator[str]:
|
||||||
return _generator()
|
return _generator()
|
||||||
|
|
||||||
|
|
||||||
def _gen_pkg_resources(packages: Sequence[str]) -> Iterator[str]:
|
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# Bundled with setuptools; has a good chance of being available.
|
|
||||||
import pkg_resources
|
|
||||||
|
|
||||||
def _generator() -> Iterator[str]:
|
|
||||||
for package in packages:
|
|
||||||
try:
|
|
||||||
eps = pkg_resources.get_entry_map(package, "console_scripts")
|
|
||||||
except pkg_resources.DistributionNotFound:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for entry_point in eps.values():
|
|
||||||
yield str(entry_point)
|
|
||||||
|
|
||||||
return _generator()
|
|
||||||
|
|
||||||
|
|
||||||
def generate_console_scripts(
|
def generate_console_scripts(
|
||||||
packages: Sequence[str],
|
packages: Sequence[str],
|
||||||
python_path: Optional[str] = None,
|
python_path: Optional[str] = None,
|
||||||
|
@ -507,66 +472,15 @@ def generate_console_scripts(
|
||||||
if not packages:
|
if not packages:
|
||||||
return
|
return
|
||||||
|
|
||||||
def _get_entry_points() -> Iterator[str]:
|
|
||||||
"""Python 3.7 compatibility shim for iterating entry points."""
|
|
||||||
# Python 3.8+, or Python 3.7 with importlib_metadata installed.
|
|
||||||
try:
|
|
||||||
return _gen_importlib(packages)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
|
|
||||||
# Python 3.7 with setuptools installed.
|
|
||||||
try:
|
|
||||||
return _gen_pkg_resources(packages)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
raise Ouch(
|
|
||||||
"Neither importlib.metadata nor pkg_resources found, "
|
|
||||||
"can't generate console script shims.\n"
|
|
||||||
"Use Python 3.8+, or install importlib-metadata or setuptools."
|
|
||||||
) from exc
|
|
||||||
|
|
||||||
maker = distlib.scripts.ScriptMaker(None, bin_path)
|
maker = distlib.scripts.ScriptMaker(None, bin_path)
|
||||||
maker.variants = {""}
|
maker.variants = {""}
|
||||||
maker.clobber = False
|
maker.clobber = False
|
||||||
|
|
||||||
for entry_point in _get_entry_points():
|
for entry_point in _get_entry_points(packages):
|
||||||
for filename in maker.make(entry_point):
|
for filename in maker.make(entry_point):
|
||||||
logger.debug("wrote console_script '%s'", filename)
|
logger.debug("wrote console_script '%s'", filename)
|
||||||
|
|
||||||
|
|
||||||
def checkpip() -> bool:
|
|
||||||
"""
|
|
||||||
Debian10 has a pip that's broken when used inside of a virtual environment.
|
|
||||||
|
|
||||||
We try to detect and correct that case here.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
# pylint: disable=import-outside-toplevel,unused-import,import-error
|
|
||||||
# pylint: disable=redefined-outer-name
|
|
||||||
import pip._internal # type: ignore # noqa: F401
|
|
||||||
|
|
||||||
logger.debug("pip appears to be working correctly.")
|
|
||||||
return False
|
|
||||||
except ModuleNotFoundError as exc:
|
|
||||||
if exc.name == "pip._internal":
|
|
||||||
# Uh, fair enough. They did say "internal".
|
|
||||||
# Let's just assume it's fine.
|
|
||||||
return False
|
|
||||||
logger.warning("pip appears to be malfunctioning: %s", str(exc))
|
|
||||||
|
|
||||||
check_ensurepip("pip appears to be non-functional, and ")
|
|
||||||
|
|
||||||
logger.debug("Attempting to repair pip ...")
|
|
||||||
subprocess.run(
|
|
||||||
(sys.executable, "-m", "ensurepip"),
|
|
||||||
stdout=subprocess.DEVNULL,
|
|
||||||
check=True,
|
|
||||||
)
|
|
||||||
logger.debug("Pip is now (hopefully) repaired!")
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def pkgname_from_depspec(dep_spec: str) -> str:
|
def pkgname_from_depspec(dep_spec: str) -> str:
|
||||||
"""
|
"""
|
||||||
Parse package name out of a PEP-508 depspec.
|
Parse package name out of a PEP-508 depspec.
|
||||||
|
@ -584,57 +498,6 @@ def pkgname_from_depspec(dep_spec: str) -> str:
|
||||||
return match.group(0)
|
return match.group(0)
|
||||||
|
|
||||||
|
|
||||||
def _get_path_importlib(package: str) -> Optional[str]:
|
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
# pylint: disable=import-error
|
|
||||||
try:
|
|
||||||
# First preference: Python 3.8+ stdlib
|
|
||||||
from importlib.metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
# Second preference: Commonly available PyPI backport
|
|
||||||
from importlib_metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return str(distribution(package).locate_file("."))
|
|
||||||
except PackageNotFoundError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_path_pkg_resources(package: str) -> Optional[str]:
|
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# Bundled with setuptools; has a good chance of being available.
|
|
||||||
import pkg_resources
|
|
||||||
|
|
||||||
try:
|
|
||||||
return str(pkg_resources.get_distribution(package).location)
|
|
||||||
except pkg_resources.DistributionNotFound:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_path(package: str) -> Optional[str]:
|
|
||||||
try:
|
|
||||||
return _get_path_importlib(package)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
|
|
||||||
try:
|
|
||||||
return _get_path_pkg_resources(package)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
raise Ouch(
|
|
||||||
"Neither importlib.metadata nor pkg_resources found. "
|
|
||||||
"Use Python 3.8+, or install importlib-metadata or setuptools."
|
|
||||||
) from exc
|
|
||||||
|
|
||||||
|
|
||||||
def _path_is_prefix(prefix: Optional[str], path: str) -> bool:
|
def _path_is_prefix(prefix: Optional[str], path: str) -> bool:
|
||||||
try:
|
try:
|
||||||
return (
|
return (
|
||||||
|
@ -644,65 +507,14 @@ def _path_is_prefix(prefix: Optional[str], path: str) -> bool:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _is_system_package(package: str) -> bool:
|
def _is_system_package(dist: Distribution) -> bool:
|
||||||
path = _get_path(package)
|
path = str(dist.locate_file("."))
|
||||||
return path is not None and not (
|
return not (
|
||||||
_path_is_prefix(sysconfig.get_path("purelib"), path)
|
_path_is_prefix(sysconfig.get_path("purelib"), path)
|
||||||
or _path_is_prefix(sysconfig.get_path("platlib"), path)
|
or _path_is_prefix(sysconfig.get_path("platlib"), path)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _get_version_importlib(package: str) -> Optional[str]:
|
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
# pylint: disable=import-error
|
|
||||||
try:
|
|
||||||
# First preference: Python 3.8+ stdlib
|
|
||||||
from importlib.metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
# Second preference: Commonly available PyPI backport
|
|
||||||
from importlib_metadata import ( # type: ignore
|
|
||||||
PackageNotFoundError,
|
|
||||||
distribution,
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return str(distribution(package).version)
|
|
||||||
except PackageNotFoundError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_version_pkg_resources(package: str) -> Optional[str]:
|
|
||||||
# pylint: disable=import-outside-toplevel
|
|
||||||
# Bundled with setuptools; has a good chance of being available.
|
|
||||||
import pkg_resources
|
|
||||||
|
|
||||||
try:
|
|
||||||
return str(pkg_resources.get_distribution(package).version)
|
|
||||||
except pkg_resources.DistributionNotFound:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_version(package: str) -> Optional[str]:
|
|
||||||
try:
|
|
||||||
return _get_version_importlib(package)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
|
|
||||||
try:
|
|
||||||
return _get_version_pkg_resources(package)
|
|
||||||
except ImportError as exc:
|
|
||||||
logger.debug("%s", str(exc))
|
|
||||||
raise Ouch(
|
|
||||||
"Neither importlib.metadata nor pkg_resources found. "
|
|
||||||
"Use Python 3.8+, or install importlib-metadata or setuptools."
|
|
||||||
) from exc
|
|
||||||
|
|
||||||
|
|
||||||
def diagnose(
|
def diagnose(
|
||||||
dep_spec: str,
|
dep_spec: str,
|
||||||
online: bool,
|
online: bool,
|
||||||
|
@ -728,7 +540,11 @@ def diagnose(
|
||||||
bad = False
|
bad = False
|
||||||
|
|
||||||
pkg_name = pkgname_from_depspec(dep_spec)
|
pkg_name = pkgname_from_depspec(dep_spec)
|
||||||
pkg_version = _get_version(pkg_name)
|
pkg_version: Optional[str] = None
|
||||||
|
try:
|
||||||
|
pkg_version = version(pkg_name)
|
||||||
|
except PackageNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
lines = []
|
lines = []
|
||||||
|
|
||||||
|
@ -865,19 +681,25 @@ def _do_ensure(
|
||||||
constraint = _make_version_constraint(info, False)
|
constraint = _make_version_constraint(info, False)
|
||||||
matcher = distlib.version.LegacyMatcher(name + constraint)
|
matcher = distlib.version.LegacyMatcher(name + constraint)
|
||||||
print(f"mkvenv: checking for {matcher}", file=sys.stderr)
|
print(f"mkvenv: checking for {matcher}", file=sys.stderr)
|
||||||
ver = _get_version(name)
|
|
||||||
|
dist: Optional[Distribution] = None
|
||||||
|
try:
|
||||||
|
dist = distribution(matcher.name)
|
||||||
|
except PackageNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
if (
|
if (
|
||||||
ver is None
|
dist is None
|
||||||
# Always pass installed package to pip, so that they can be
|
# Always pass installed package to pip, so that they can be
|
||||||
# updated if the requested version changes
|
# updated if the requested version changes
|
||||||
or not _is_system_package(name)
|
or not _is_system_package(dist)
|
||||||
or not matcher.match(distlib.version.LegacyVersion(ver))
|
or not matcher.match(distlib.version.LegacyVersion(dist.version))
|
||||||
):
|
):
|
||||||
absent.append(name + _make_version_constraint(info, True))
|
absent.append(name + _make_version_constraint(info, True))
|
||||||
if len(absent) == 1:
|
if len(absent) == 1:
|
||||||
canary = info.get("canary", None)
|
canary = info.get("canary", None)
|
||||||
else:
|
else:
|
||||||
logger.info("found %s %s", name, ver)
|
logger.info("found %s %s", name, dist.version)
|
||||||
present.append(name)
|
present.append(name)
|
||||||
|
|
||||||
if present:
|
if present:
|
||||||
|
@ -1015,9 +837,7 @@ def post_venv_setup() -> None:
|
||||||
This is intended to be run *inside the venv* after it is created.
|
This is intended to be run *inside the venv* after it is created.
|
||||||
"""
|
"""
|
||||||
logger.debug("post_venv_setup()")
|
logger.debug("post_venv_setup()")
|
||||||
# Test for a broken pip (Debian 10 or derivative?) and fix it if needed
|
# Generate a 'pip' script so the venv is usable in a normal
|
||||||
if not checkpip():
|
|
||||||
# Finally, generate a 'pip' script so the venv is usable in a normal
|
|
||||||
# way from the CLI. This only happens when we inherited pip from a
|
# way from the CLI. This only happens when we inherited pip from a
|
||||||
# parent/system-site and haven't run ensurepip in some way.
|
# parent/system-site and haven't run ensurepip in some way.
|
||||||
generate_console_scripts(["pip"])
|
generate_console_scripts(["pip"])
|
||||||
|
|
|
@ -14,7 +14,6 @@ classifiers =
|
||||||
Natural Language :: English
|
Natural Language :: English
|
||||||
Operating System :: OS Independent
|
Operating System :: OS Independent
|
||||||
Programming Language :: Python :: 3 :: Only
|
Programming Language :: Python :: 3 :: Only
|
||||||
Programming Language :: Python :: 3.7
|
|
||||||
Programming Language :: Python :: 3.8
|
Programming Language :: Python :: 3.8
|
||||||
Programming Language :: Python :: 3.9
|
Programming Language :: Python :: 3.9
|
||||||
Programming Language :: Python :: 3.10
|
Programming Language :: Python :: 3.10
|
||||||
|
@ -22,7 +21,7 @@ classifiers =
|
||||||
Typing :: Typed
|
Typing :: Typed
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
python_requires = >= 3.7
|
python_requires = >= 3.8
|
||||||
packages =
|
packages =
|
||||||
qemu.qmp
|
qemu.qmp
|
||||||
qemu.machine
|
qemu.machine
|
||||||
|
@ -76,7 +75,7 @@ exclude = __pycache__,
|
||||||
|
|
||||||
[mypy]
|
[mypy]
|
||||||
strict = True
|
strict = True
|
||||||
python_version = 3.7
|
python_version = 3.8
|
||||||
warn_unused_configs = True
|
warn_unused_configs = True
|
||||||
namespace_packages = True
|
namespace_packages = True
|
||||||
warn_unused_ignores = False
|
warn_unused_ignores = False
|
||||||
|
@ -109,15 +108,6 @@ ignore_missing_imports = True
|
||||||
[mypy-pygments]
|
[mypy-pygments]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-importlib.metadata]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-importlib_metadata]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-pkg_resources]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-distlib]
|
[mypy-distlib]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
@ -192,7 +182,7 @@ multi_line_output=3
|
||||||
# of python available on your system to run this test.
|
# of python available on your system to run this test.
|
||||||
|
|
||||||
[tox:tox]
|
[tox:tox]
|
||||||
envlist = py37, py38, py39, py310, py311
|
envlist = py38, py39, py310, py311
|
||||||
skip_missing_interpreters = true
|
skip_missing_interpreters = true
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# This file lists the ***oldest possible dependencies*** needed to run
|
# This file lists the ***oldest possible dependencies*** needed to run
|
||||||
# "make check" successfully under ***Python 3.7***. It is used primarily
|
# "make check" successfully under ***Python 3.8***. It is used primarily
|
||||||
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
|
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
|
||||||
# are truthful and regularly validated.
|
# are truthful and regularly validated.
|
||||||
#
|
#
|
||||||
|
|
|
@ -85,7 +85,7 @@ qga_ss.add(when: 'CONFIG_WIN32', if_true: files(
|
||||||
'vss-win32.c'
|
'vss-win32.c'
|
||||||
))
|
))
|
||||||
|
|
||||||
qga_ss = qga_ss.apply(config_host, strict: false)
|
qga_ss = qga_ss.apply(config_targetos, strict: false)
|
||||||
|
|
||||||
gen_tlb = []
|
gen_tlb = []
|
||||||
qga_libs = []
|
qga_libs = []
|
||||||
|
@ -180,7 +180,7 @@ test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
|
||||||
# the leak detector in build-oss-fuzz Gitlab CI test. we should re-enable
|
# the leak detector in build-oss-fuzz Gitlab CI test. we should re-enable
|
||||||
# this when an alternative is implemented or when the underlying glib
|
# this when an alternative is implemented or when the underlying glib
|
||||||
# issue is identified/fix
|
# issue is identified/fix
|
||||||
#if 'CONFIG_POSIX' in config_host
|
#if targetos != 'windows'
|
||||||
if false
|
if false
|
||||||
srcs = [files('commands-posix-ssh.c')]
|
srcs = [files('commands-posix-ssh.c')]
|
||||||
i = 0
|
i = 0
|
||||||
|
|
|
@ -29,6 +29,7 @@ meson_options_help() {
|
||||||
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
|
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
|
||||||
printf "%s\n" ' --enable-debug-stack-usage'
|
printf "%s\n" ' --enable-debug-stack-usage'
|
||||||
printf "%s\n" ' measure coroutine stack usage'
|
printf "%s\n" ' measure coroutine stack usage'
|
||||||
|
printf "%s\n" ' --enable-debug-tcg TCG debugging'
|
||||||
printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
|
printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
|
||||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||||
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
|
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
|
||||||
|
@ -39,6 +40,7 @@ meson_options_help() {
|
||||||
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
||||||
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
|
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
|
||||||
printf "%s\n" ' upgrades'
|
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" ' --enable-rng-none dummy RNG, avoid using /dev/(u)random and'
|
||||||
printf "%s\n" ' getrandom()'
|
printf "%s\n" ' getrandom()'
|
||||||
printf "%s\n" ' --enable-safe-stack SafeStack Stack Smash Protection (requires'
|
printf "%s\n" ' --enable-safe-stack SafeStack Stack Smash Protection (requires'
|
||||||
|
@ -275,6 +277,8 @@ _meson_option_parse() {
|
||||||
--disable-debug-mutex) printf "%s" -Ddebug_mutex=false ;;
|
--disable-debug-mutex) printf "%s" -Ddebug_mutex=false ;;
|
||||||
--enable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=true ;;
|
--enable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=true ;;
|
||||||
--disable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=false ;;
|
--disable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=false ;;
|
||||||
|
--enable-debug-tcg) printf "%s" -Ddebug_tcg=true ;;
|
||||||
|
--disable-debug-tcg) printf "%s" -Ddebug_tcg=false ;;
|
||||||
--enable-dmg) printf "%s" -Ddmg=enabled ;;
|
--enable-dmg) printf "%s" -Ddmg=enabled ;;
|
||||||
--disable-dmg) printf "%s" -Ddmg=disabled ;;
|
--disable-dmg) printf "%s" -Ddmg=disabled ;;
|
||||||
--docdir=*) quote_sh "-Ddocdir=$2" ;;
|
--docdir=*) quote_sh "-Ddocdir=$2" ;;
|
||||||
|
@ -395,6 +399,8 @@ _meson_option_parse() {
|
||||||
--enable-pipewire) printf "%s" -Dpipewire=enabled ;;
|
--enable-pipewire) printf "%s" -Dpipewire=enabled ;;
|
||||||
--disable-pipewire) printf "%s" -Dpipewire=disabled ;;
|
--disable-pipewire) printf "%s" -Dpipewire=disabled ;;
|
||||||
--with-pkgversion=*) quote_sh "-Dpkgversion=$2" ;;
|
--with-pkgversion=*) quote_sh "-Dpkgversion=$2" ;;
|
||||||
|
--enable-plugins) printf "%s" -Dplugins=true ;;
|
||||||
|
--disable-plugins) printf "%s" -Dplugins=false ;;
|
||||||
--enable-png) printf "%s" -Dpng=enabled ;;
|
--enable-png) printf "%s" -Dpng=enabled ;;
|
||||||
--disable-png) printf "%s" -Dpng=disabled ;;
|
--disable-png) printf "%s" -Dpng=disabled ;;
|
||||||
--enable-pvrdma) printf "%s" -Dpvrdma=enabled ;;
|
--enable-pvrdma) printf "%s" -Dpvrdma=enabled ;;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[mypy]
|
[mypy]
|
||||||
strict = True
|
strict = True
|
||||||
disallow_untyped_calls = False
|
disallow_untyped_calls = False
|
||||||
python_version = 3.7
|
python_version = 3.8
|
||||||
|
|
||||||
[mypy-qapi.schema]
|
[mypy-qapi.schema]
|
||||||
disallow_untyped_defs = False
|
disallow_untyped_defs = False
|
||||||
|
|
|
@ -37,3 +37,4 @@ endif
|
||||||
|
|
||||||
system_ss.add(when: seccomp, if_true: files('qemu-seccomp.c'))
|
system_ss.add(when: seccomp, if_true: files('qemu-seccomp.c'))
|
||||||
system_ss.add(when: fdt, if_true: files('device_tree.c'))
|
system_ss.add(when: fdt, if_true: files('device_tree.c'))
|
||||||
|
system_ss.add(when: 'CONFIG_LINUX', if_true: files('async-teardown.c'))
|
||||||
|
|
87
softmmu/vl.c
87
softmmu/vl.c
|
@ -49,6 +49,7 @@
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/sockets.h"
|
#include "qemu/sockets.h"
|
||||||
#include "qemu/accel.h"
|
#include "qemu/accel.h"
|
||||||
|
#include "qemu/async-teardown.h"
|
||||||
#include "hw/usb.h"
|
#include "hw/usb.h"
|
||||||
#include "hw/isa/isa.h"
|
#include "hw/isa/isa.h"
|
||||||
#include "hw/scsi/scsi.h"
|
#include "hw/scsi/scsi.h"
|
||||||
|
@ -89,7 +90,6 @@
|
||||||
#include "qapi/qobject-input-visitor.h"
|
#include "qapi/qobject-input-visitor.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
#include "qemu/qemu-options.h"
|
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
#ifdef CONFIG_VIRTFS
|
#ifdef CONFIG_VIRTFS
|
||||||
#include "fsdev/qemu-fsdev.h"
|
#include "fsdev/qemu-fsdev.h"
|
||||||
|
@ -747,6 +747,33 @@ static QemuOptsList qemu_smp_opts = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(CONFIG_POSIX)
|
||||||
|
static QemuOptsList qemu_run_with_opts = {
|
||||||
|
.name = "run-with",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
|
||||||
|
.desc = {
|
||||||
|
#if defined(CONFIG_LINUX)
|
||||||
|
{
|
||||||
|
.name = "async-teardown",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
.name = "chroot",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define qemu_add_run_with_opts() qemu_add_opts(&qemu_run_with_opts)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define qemu_add_run_with_opts()
|
||||||
|
|
||||||
|
#endif /* CONFIG_POSIX */
|
||||||
|
|
||||||
static void realtime_init(void)
|
static void realtime_init(void)
|
||||||
{
|
{
|
||||||
if (enable_mlock) {
|
if (enable_mlock) {
|
||||||
|
@ -865,6 +892,16 @@ static void help(int exitcode)
|
||||||
exit(exitcode);
|
exit(exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
|
||||||
|
#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \
|
||||||
|
opt_enum,
|
||||||
|
#define DEFHEADING(text)
|
||||||
|
#define ARCHHEADING(text, arch_mask)
|
||||||
|
|
||||||
|
#include "qemu-options.def"
|
||||||
|
};
|
||||||
|
|
||||||
#define HAS_ARG 0x0001
|
#define HAS_ARG 0x0001
|
||||||
|
|
||||||
typedef struct QEMUOption {
|
typedef struct QEMUOption {
|
||||||
|
@ -2698,6 +2735,7 @@ void qemu_init(int argc, char **argv)
|
||||||
qemu_add_opts(&qemu_semihosting_config_opts);
|
qemu_add_opts(&qemu_semihosting_config_opts);
|
||||||
qemu_add_opts(&qemu_fw_cfg_opts);
|
qemu_add_opts(&qemu_fw_cfg_opts);
|
||||||
qemu_add_opts(&qemu_action_opts);
|
qemu_add_opts(&qemu_action_opts);
|
||||||
|
qemu_add_run_with_opts();
|
||||||
module_call_init(MODULE_INIT_OPTS);
|
module_call_init(MODULE_INIT_OPTS);
|
||||||
|
|
||||||
error_init(argv[0]);
|
error_init(argv[0]);
|
||||||
|
@ -3516,11 +3554,52 @@ void qemu_init(int argc, char **argv)
|
||||||
case QEMU_OPTION_nouserconfig:
|
case QEMU_OPTION_nouserconfig:
|
||||||
/* Nothing to be parsed here. Especially, do not error out below. */
|
/* Nothing to be parsed here. Especially, do not error out below. */
|
||||||
break;
|
break;
|
||||||
default:
|
#if defined(CONFIG_POSIX)
|
||||||
if (os_parse_cmd_args(popt->index, optarg)) {
|
case QEMU_OPTION_runas:
|
||||||
error_report("Option not supported in this build");
|
if (!os_set_runas(optarg)) {
|
||||||
|
error_report("User \"%s\" doesn't exist"
|
||||||
|
" (and is not <uid>:<gid>)",
|
||||||
|
optarg);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case QEMU_OPTION_chroot:
|
||||||
|
warn_report("option is deprecated,"
|
||||||
|
" use '-run-with chroot=...' instead");
|
||||||
|
os_set_chroot(optarg);
|
||||||
|
break;
|
||||||
|
case QEMU_OPTION_daemonize:
|
||||||
|
os_set_daemonize(true);
|
||||||
|
break;
|
||||||
|
#if defined(CONFIG_LINUX)
|
||||||
|
/* deprecated */
|
||||||
|
case QEMU_OPTION_asyncteardown:
|
||||||
|
init_async_teardown();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case QEMU_OPTION_run_with: {
|
||||||
|
const char *str;
|
||||||
|
opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
|
||||||
|
optarg, false);
|
||||||
|
if (!opts) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
#if defined(CONFIG_LINUX)
|
||||||
|
if (qemu_opt_get_bool(opts, "async-teardown", false)) {
|
||||||
|
init_async_teardown();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
str = qemu_opt_get(opts, "chroot");
|
||||||
|
if (str) {
|
||||||
|
os_set_chroot(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_POSIX */
|
||||||
|
|
||||||
|
default:
|
||||||
|
error_report("Option not supported in this build");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ qsd_ss.add(blockdev, chardev, qmp, qom, qemuutil, gnutls)
|
||||||
subdir('qapi')
|
subdir('qapi')
|
||||||
|
|
||||||
if have_tools
|
if have_tools
|
||||||
qsd_ss = qsd_ss.apply(config_host, strict: false)
|
qsd_ss = qsd_ss.apply(config_targetos, strict: false)
|
||||||
qsd = executable('qemu-storage-daemon',
|
qsd = executable('qemu-storage-daemon',
|
||||||
qsd_ss.sources(),
|
qsd_ss.sources(),
|
||||||
dependencies: qsd_ss.dependencies(),
|
dependencies: qsd_ss.dependencies(),
|
||||||
|
|
6
subprojects/libblkio.wrap
Normal file
6
subprojects/libblkio.wrap
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[wrap-git]
|
||||||
|
url = https://gitlab.com/libblkio/libblkio
|
||||||
|
revision = f84cc963a444e4cb34813b2dcfc5bf8526947dc0
|
||||||
|
|
||||||
|
[provide]
|
||||||
|
blkio = libblkio_dep
|
|
@ -19,9 +19,9 @@
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
#include "sysemu/kvm.h"
|
||||||
#include "sysemu/xen.h"
|
#include "sysemu/xen.h"
|
||||||
#include "sysemu/whpx.h"
|
#include "sysemu/whpx.h"
|
||||||
#include "kvm/kvm_i386.h"
|
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qapi-visit-run-state.h"
|
#include "qapi/qapi-visit-run-state.h"
|
||||||
#include "qapi/qmp/qdict.h"
|
#include "qapi/qmp/qdict.h"
|
||||||
|
@ -253,7 +253,7 @@ APICCommonClass *apic_get_class(Error **errp)
|
||||||
|
|
||||||
/* TODO: in-kernel irqchip for hvf */
|
/* TODO: in-kernel irqchip for hvf */
|
||||||
if (kvm_enabled()) {
|
if (kvm_enabled()) {
|
||||||
if (!kvm_apic_in_kernel()) {
|
if (!kvm_irqchip_in_kernel()) {
|
||||||
error_setg(errp, "KVM does not support userspace APIC");
|
error_setg(errp, "KVM does not support userspace APIC");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -980,7 +980,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||||||
.feat_names = {
|
.feat_names = {
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
"avx-vnni-int8", "avx-ne-convert", NULL, NULL,
|
"avx-vnni-int8", "avx-ne-convert", NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
"amx-complex", NULL, NULL, NULL,
|
||||||
NULL, NULL, "prefetchiti", NULL,
|
NULL, NULL, "prefetchiti", NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
|
|
@ -930,6 +930,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||||
#define CPUID_7_1_EDX_AVX_VNNI_INT8 (1U << 4)
|
#define CPUID_7_1_EDX_AVX_VNNI_INT8 (1U << 4)
|
||||||
/* AVX NE CONVERT Instructions */
|
/* AVX NE CONVERT Instructions */
|
||||||
#define CPUID_7_1_EDX_AVX_NE_CONVERT (1U << 5)
|
#define CPUID_7_1_EDX_AVX_NE_CONVERT (1U << 5)
|
||||||
|
/* AMX COMPLEX Instructions */
|
||||||
|
#define CPUID_7_1_EDX_AMX_COMPLEX (1U << 8)
|
||||||
/* PREFETCHIT0/1 Instructions */
|
/* PREFETCHIT0/1 Instructions */
|
||||||
#define CPUID_7_1_EDX_PREFETCHITI (1U << 14)
|
#define CPUID_7_1_EDX_PREFETCHITI (1U << 14)
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
#include "sysemu/runstate.h"
|
#include "sysemu/runstate.h"
|
||||||
#include "kvm/kvm_i386.h"
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
#include "sysemu/hw_accel.h"
|
#include "sysemu/hw_accel.h"
|
||||||
#include "monitor/monitor.h"
|
#include "monitor/monitor.h"
|
||||||
|
#include "kvm/kvm_i386.h"
|
||||||
#endif
|
#endif
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
#ifdef CONFIG_TCG
|
#ifdef CONFIG_TCG
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
* QEMU KVM x86 specific function stubs
|
|
||||||
*
|
|
||||||
* Copyright Linaro Limited 2012
|
|
||||||
*
|
|
||||||
* Author: Peter Maydell <peter.maydell@linaro.org>
|
|
||||||
*
|
|
||||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
||||||
* See the COPYING file in the top-level directory.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#include "qemu/osdep.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
#include "kvm_i386.h"
|
|
||||||
|
|
||||||
#ifndef __OPTIMIZE__
|
|
||||||
bool kvm_has_smm(void)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool kvm_enable_x2apic(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This function is only called inside conditionals which we
|
|
||||||
* rely on the compiler to optimize out when CONFIG_KVM is not
|
|
||||||
* defined.
|
|
||||||
*/
|
|
||||||
uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
|
|
||||||
uint32_t index, int reg)
|
|
||||||
{
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool kvm_hv_vpindex_settable(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool kvm_hyperv_expand_features(X86CPU *cpu, Error **errp)
|
|
||||||
{
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvm_set_max_apic_id(uint32_t max_apic_id)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
|
@ -154,9 +154,9 @@ static KVMMSRHandlers msr_handlers[KVM_MSR_FILTER_MAX_RANGES];
|
||||||
static RateLimit bus_lock_ratelimit_ctrl;
|
static RateLimit bus_lock_ratelimit_ctrl;
|
||||||
static int kvm_get_one_msr(X86CPU *cpu, int index, uint64_t *value);
|
static int kvm_get_one_msr(X86CPU *cpu, int index, uint64_t *value);
|
||||||
|
|
||||||
int kvm_has_pit_state2(void)
|
bool kvm_has_pit_state2(void)
|
||||||
{
|
{
|
||||||
return has_pit_state2;
|
return !!has_pit_state2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool kvm_has_smm(void)
|
bool kvm_has_smm(void)
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
|
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
|
|
||||||
#define kvm_apic_in_kernel() (kvm_irqchip_in_kernel())
|
|
||||||
|
|
||||||
#ifdef CONFIG_KVM
|
#ifdef CONFIG_KVM
|
||||||
|
|
||||||
#define kvm_pit_in_kernel() \
|
#define kvm_pit_in_kernel() \
|
||||||
|
@ -33,30 +31,40 @@
|
||||||
#endif /* CONFIG_KVM */
|
#endif /* CONFIG_KVM */
|
||||||
|
|
||||||
bool kvm_has_smm(void);
|
bool kvm_has_smm(void);
|
||||||
|
bool kvm_enable_x2apic(void);
|
||||||
|
bool kvm_hv_vpindex_settable(void);
|
||||||
|
bool kvm_has_pit_state2(void);
|
||||||
|
|
||||||
|
bool kvm_enable_sgx_provisioning(KVMState *s);
|
||||||
|
bool kvm_hyperv_expand_features(X86CPU *cpu, Error **errp);
|
||||||
|
|
||||||
|
void kvm_arch_reset_vcpu(X86CPU *cs);
|
||||||
|
void kvm_arch_after_reset_vcpu(X86CPU *cpu);
|
||||||
|
void kvm_arch_do_init_vcpu(X86CPU *cs);
|
||||||
|
uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
|
||||||
|
uint32_t index, int reg);
|
||||||
|
uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index);
|
||||||
|
|
||||||
|
void kvm_set_max_apic_id(uint32_t max_apic_id);
|
||||||
|
void kvm_request_xsave_components(X86CPU *cpu, uint64_t mask);
|
||||||
|
|
||||||
|
#ifdef CONFIG_KVM
|
||||||
|
|
||||||
bool kvm_has_adjust_clock(void);
|
bool kvm_has_adjust_clock(void);
|
||||||
bool kvm_has_adjust_clock_stable(void);
|
bool kvm_has_adjust_clock_stable(void);
|
||||||
bool kvm_has_exception_payload(void);
|
bool kvm_has_exception_payload(void);
|
||||||
void kvm_synchronize_all_tsc(void);
|
void kvm_synchronize_all_tsc(void);
|
||||||
void kvm_arch_reset_vcpu(X86CPU *cs);
|
|
||||||
void kvm_arch_after_reset_vcpu(X86CPU *cpu);
|
|
||||||
void kvm_arch_do_init_vcpu(X86CPU *cs);
|
|
||||||
|
|
||||||
|
void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
||||||
void kvm_put_apicbase(X86CPU *cpu, uint64_t value);
|
void kvm_put_apicbase(X86CPU *cpu, uint64_t value);
|
||||||
|
|
||||||
bool kvm_enable_x2apic(void);
|
|
||||||
bool kvm_has_x2apic_api(void);
|
bool kvm_has_x2apic_api(void);
|
||||||
bool kvm_has_waitpkg(void);
|
bool kvm_has_waitpkg(void);
|
||||||
|
|
||||||
bool kvm_hv_vpindex_settable(void);
|
|
||||||
bool kvm_hyperv_expand_features(X86CPU *cpu, Error **errp);
|
|
||||||
|
|
||||||
uint64_t kvm_swizzle_msi_ext_dest_id(uint64_t address);
|
uint64_t kvm_swizzle_msi_ext_dest_id(uint64_t address);
|
||||||
void kvm_update_msi_routes_all(void *private, bool global,
|
void kvm_update_msi_routes_all(void *private, bool global,
|
||||||
uint32_t index, uint32_t mask);
|
uint32_t index, uint32_t mask);
|
||||||
|
|
||||||
bool kvm_enable_sgx_provisioning(KVMState *s);
|
|
||||||
void kvm_request_xsave_components(X86CPU *cpu, uint64_t mask);
|
|
||||||
|
|
||||||
typedef bool QEMURDMSRHandler(X86CPU *cpu, uint32_t msr, uint64_t *val);
|
typedef bool QEMURDMSRHandler(X86CPU *cpu, uint32_t msr, uint64_t *val);
|
||||||
typedef bool QEMUWRMSRHandler(X86CPU *cpu, uint32_t msr, uint64_t val);
|
typedef bool QEMUWRMSRHandler(X86CPU *cpu, uint32_t msr, uint64_t val);
|
||||||
typedef struct kvm_msr_handlers {
|
typedef struct kvm_msr_handlers {
|
||||||
|
@ -68,6 +76,8 @@ typedef struct kvm_msr_handlers {
|
||||||
bool kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
|
bool kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
|
||||||
QEMUWRMSRHandler *wrmsr);
|
QEMUWRMSRHandler *wrmsr);
|
||||||
|
|
||||||
void kvm_set_max_apic_id(uint32_t max_apic_id);
|
#endif /* CONFIG_KVM */
|
||||||
|
|
||||||
|
void kvm_pc_setup_irq_routing(bool pci_enabled);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
i386_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c'))
|
|
||||||
|
|
||||||
i386_softmmu_kvm_ss = ss.source_set()
|
i386_softmmu_kvm_ss = ss.source_set()
|
||||||
|
|
||||||
i386_softmmu_kvm_ss.add(files(
|
i386_softmmu_kvm_ss.add(files(
|
||||||
|
|
|
@ -337,7 +337,7 @@ static const X86OpEntry opcodes_0F38_00toEF[240] = {
|
||||||
[0x07] = X86_OP_ENTRY3(PHSUBSW, V,x, H,x, W,x, vex4 cpuid(SSSE3) mmx avx2_256 p_00_66),
|
[0x07] = X86_OP_ENTRY3(PHSUBSW, V,x, H,x, W,x, vex4 cpuid(SSSE3) mmx avx2_256 p_00_66),
|
||||||
|
|
||||||
[0x10] = X86_OP_ENTRY2(PBLENDVB, V,x, W,x, vex4 cpuid(SSE41) avx2_256 p_66),
|
[0x10] = X86_OP_ENTRY2(PBLENDVB, V,x, W,x, vex4 cpuid(SSE41) avx2_256 p_66),
|
||||||
[0x13] = X86_OP_ENTRY2(VCVTPH2PS, V,x, W,ph, vex11 cpuid(F16C) p_66),
|
[0x13] = X86_OP_ENTRY2(VCVTPH2PS, V,x, W,xh, vex11 cpuid(F16C) p_66),
|
||||||
[0x14] = X86_OP_ENTRY2(BLENDVPS, V,x, W,x, vex4 cpuid(SSE41) p_66),
|
[0x14] = X86_OP_ENTRY2(BLENDVPS, V,x, W,x, vex4 cpuid(SSE41) p_66),
|
||||||
[0x15] = X86_OP_ENTRY2(BLENDVPD, V,x, W,x, vex4 cpuid(SSE41) p_66),
|
[0x15] = X86_OP_ENTRY2(BLENDVPD, V,x, W,x, vex4 cpuid(SSE41) p_66),
|
||||||
/* Listed incorrectly as type 4 */
|
/* Listed incorrectly as type 4 */
|
||||||
|
@ -565,7 +565,7 @@ static const X86OpEntry opcodes_0F3A[256] = {
|
||||||
[0x15] = X86_OP_ENTRY3(PEXTRW, E,w, V,dq, I,b, vex5 cpuid(SSE41) zext0 p_66),
|
[0x15] = X86_OP_ENTRY3(PEXTRW, E,w, V,dq, I,b, vex5 cpuid(SSE41) zext0 p_66),
|
||||||
[0x16] = X86_OP_ENTRY3(PEXTR, E,y, V,dq, I,b, vex5 cpuid(SSE41) p_66),
|
[0x16] = X86_OP_ENTRY3(PEXTR, E,y, V,dq, I,b, vex5 cpuid(SSE41) p_66),
|
||||||
[0x17] = X86_OP_ENTRY3(VEXTRACTPS, E,d, V,dq, I,b, vex5 cpuid(SSE41) p_66),
|
[0x17] = X86_OP_ENTRY3(VEXTRACTPS, E,d, V,dq, I,b, vex5 cpuid(SSE41) p_66),
|
||||||
[0x1d] = X86_OP_ENTRY3(VCVTPS2PH, W,ph, V,x, I,b, vex11 cpuid(F16C) p_66),
|
[0x1d] = X86_OP_ENTRY3(VCVTPS2PH, W,xh, V,x, I,b, vex11 cpuid(F16C) p_66),
|
||||||
|
|
||||||
[0x20] = X86_OP_ENTRY4(PINSRB, V,dq, H,dq, E,b, vex5 cpuid(SSE41) zext2 p_66),
|
[0x20] = X86_OP_ENTRY4(PINSRB, V,dq, H,dq, E,b, vex5 cpuid(SSE41) zext2 p_66),
|
||||||
[0x21] = X86_OP_GROUP0(VINSERTPS),
|
[0x21] = X86_OP_GROUP0(VINSERTPS),
|
||||||
|
@ -805,10 +805,20 @@ static void decode_sse_unary(DisasContext *s, CPUX86State *env, X86OpEntry *entr
|
||||||
case 0x51: entry->gen = gen_VSQRT; break;
|
case 0x51: entry->gen = gen_VSQRT; break;
|
||||||
case 0x52: entry->gen = gen_VRSQRT; break;
|
case 0x52: entry->gen = gen_VRSQRT; break;
|
||||||
case 0x53: entry->gen = gen_VRCP; break;
|
case 0x53: entry->gen = gen_VRCP; break;
|
||||||
case 0x5A: entry->gen = gen_VCVTfp2fp; break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void decode_0F5A(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b)
|
||||||
|
{
|
||||||
|
static const X86OpEntry opcodes_0F5A[4] = {
|
||||||
|
X86_OP_ENTRY2(VCVTPS2PD, V,x, W,xh, vex2), /* VCVTPS2PD */
|
||||||
|
X86_OP_ENTRY2(VCVTPD2PS, V,x, W,x, vex2), /* VCVTPD2PS */
|
||||||
|
X86_OP_ENTRY3(VCVTSS2SD, V,x, H,x, W,x, vex2_rep3), /* VCVTSS2SD */
|
||||||
|
X86_OP_ENTRY3(VCVTSD2SS, V,x, H,x, W,x, vex2_rep3), /* VCVTSD2SS */
|
||||||
|
};
|
||||||
|
*entry = *decode_by_prefix(s, opcodes_0F5A);
|
||||||
|
}
|
||||||
|
|
||||||
static void decode_0F5B(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b)
|
static void decode_0F5B(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b)
|
||||||
{
|
{
|
||||||
static const X86OpEntry opcodes_0F5B[4] = {
|
static const X86OpEntry opcodes_0F5B[4] = {
|
||||||
|
@ -891,7 +901,7 @@ static const X86OpEntry opcodes_0F[256] = {
|
||||||
|
|
||||||
[0x58] = X86_OP_ENTRY3(VADD, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
[0x58] = X86_OP_ENTRY3(VADD, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
||||||
[0x59] = X86_OP_ENTRY3(VMUL, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
[0x59] = X86_OP_ENTRY3(VMUL, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
||||||
[0x5a] = X86_OP_GROUP3(sse_unary, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2), /* CVTPS2PD */
|
[0x5a] = X86_OP_GROUP0(0F5A),
|
||||||
[0x5b] = X86_OP_GROUP0(0F5B),
|
[0x5b] = X86_OP_GROUP0(0F5B),
|
||||||
[0x5c] = X86_OP_ENTRY3(VSUB, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
[0x5c] = X86_OP_ENTRY3(VSUB, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
||||||
[0x5d] = X86_OP_ENTRY3(VMIN, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
[0x5d] = X86_OP_ENTRY3(VMIN, V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2),
|
||||||
|
@ -1104,7 +1114,7 @@ static bool decode_op_size(DisasContext *s, X86OpEntry *e, X86OpSize size, MemOp
|
||||||
*ot = s->vex_l ? MO_256 : MO_128;
|
*ot = s->vex_l ? MO_256 : MO_128;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case X86_SIZE_ph: /* SSE/AVX packed half precision */
|
case X86_SIZE_xh: /* SSE/AVX packed half register */
|
||||||
*ot = s->vex_l ? MO_128 : MO_64;
|
*ot = s->vex_l ? MO_128 : MO_64;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ typedef enum X86OpSize {
|
||||||
/* Custom */
|
/* Custom */
|
||||||
X86_SIZE_d64,
|
X86_SIZE_d64,
|
||||||
X86_SIZE_f64,
|
X86_SIZE_f64,
|
||||||
X86_SIZE_ph, /* SSE/AVX packed half precision */
|
X86_SIZE_xh, /* SSE/AVX packed half register */
|
||||||
} X86OpSize;
|
} X86OpSize;
|
||||||
|
|
||||||
typedef enum X86CPUIDFeature {
|
typedef enum X86CPUIDFeature {
|
||||||
|
|
|
@ -1914,12 +1914,22 @@ static void gen_VCOMI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
set_cc_op(s, CC_OP_EFLAGS);
|
set_cc_op(s, CC_OP_EFLAGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gen_VCVTfp2fp(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
static void gen_VCVTPD2PS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
{
|
{
|
||||||
gen_unary_fp_sse(s, env, decode,
|
if (s->vex_l) {
|
||||||
gen_helper_cvtpd2ps_xmm, gen_helper_cvtps2pd_xmm,
|
gen_helper_cvtpd2ps_ymm(cpu_env, OP_PTR0, OP_PTR2);
|
||||||
gen_helper_cvtpd2ps_ymm, gen_helper_cvtps2pd_ymm,
|
} else {
|
||||||
gen_helper_cvtsd2ss, gen_helper_cvtss2sd);
|
gen_helper_cvtpd2ps_xmm(cpu_env, OP_PTR0, OP_PTR2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gen_VCVTPS2PD(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
|
{
|
||||||
|
if (s->vex_l) {
|
||||||
|
gen_helper_cvtps2pd_ymm(cpu_env, OP_PTR0, OP_PTR2);
|
||||||
|
} else {
|
||||||
|
gen_helper_cvtps2pd_xmm(cpu_env, OP_PTR0, OP_PTR2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gen_VCVTPS2PH(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
static void gen_VCVTPS2PH(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
|
@ -1936,6 +1946,16 @@ static void gen_VCVTPS2PH(DisasContext *s, CPUX86State *env, X86DecodedInsn *dec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void gen_VCVTSD2SS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
|
{
|
||||||
|
gen_helper_cvtsd2ss(cpu_env, OP_PTR0, OP_PTR1, OP_PTR2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gen_VCVTSS2SD(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
|
{
|
||||||
|
gen_helper_cvtss2sd(cpu_env, OP_PTR0, OP_PTR1, OP_PTR2);
|
||||||
|
}
|
||||||
|
|
||||||
static void gen_VCVTSI2Sx(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
static void gen_VCVTSI2Sx(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||||
{
|
{
|
||||||
int vec_len = vector_len(s, decode);
|
int vec_len = vector_len(s, decode);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
#include "qemu/main-loop.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "hw/irq.h"
|
#include "hw/irq.h"
|
||||||
|
|
||||||
|
@ -31,7 +32,9 @@ void x86_register_ferr_irq(qemu_irq irq)
|
||||||
void fpu_check_raise_ferr_irq(CPUX86State *env)
|
void fpu_check_raise_ferr_irq(CPUX86State *env)
|
||||||
{
|
{
|
||||||
if (ferr_irq && !(env->hflags2 & HF2_IGNNE_MASK)) {
|
if (ferr_irq && !(env->hflags2 & HF2_IGNNE_MASK)) {
|
||||||
|
qemu_mutex_lock_iothread();
|
||||||
qemu_irq_raise(ferr_irq);
|
qemu_irq_raise(ferr_irq);
|
||||||
|
qemu_mutex_unlock_iothread();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,6 +48,9 @@ void cpu_clear_ignne(void)
|
||||||
void cpu_set_ignne(void)
|
void cpu_set_ignne(void)
|
||||||
{
|
{
|
||||||
CPUX86State *env = &X86_CPU(first_cpu)->env;
|
CPUX86State *env = &X86_CPU(first_cpu)->env;
|
||||||
|
|
||||||
|
assert(qemu_mutex_iothread_locked());
|
||||||
|
|
||||||
env->hflags2 |= HF2_IGNNE_MASK;
|
env->hflags2 |= HF2_IGNNE_MASK;
|
||||||
/*
|
/*
|
||||||
* We get here in response to a write to port F0h. The chipset should
|
* We get here in response to a write to port F0h. The chipset should
|
||||||
|
|
|
@ -4619,7 +4619,11 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||||||
case 0x0a: /* grp d9/2 */
|
case 0x0a: /* grp d9/2 */
|
||||||
switch (rm) {
|
switch (rm) {
|
||||||
case 0: /* fnop */
|
case 0: /* fnop */
|
||||||
/* check exceptions (FreeBSD FPU probe) */
|
/*
|
||||||
|
* check exceptions (FreeBSD FPU probe)
|
||||||
|
* needs to be treated as I/O because of ferr_irq
|
||||||
|
*/
|
||||||
|
translator_io_start(&s->base);
|
||||||
gen_helper_fwait(cpu_env);
|
gen_helper_fwait(cpu_env);
|
||||||
update_fip = false;
|
update_fip = false;
|
||||||
break;
|
break;
|
||||||
|
@ -5548,6 +5552,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||||||
(HF_MP_MASK | HF_TS_MASK)) {
|
(HF_MP_MASK | HF_TS_MASK)) {
|
||||||
gen_exception(s, EXCP07_PREX);
|
gen_exception(s, EXCP07_PREX);
|
||||||
} else {
|
} else {
|
||||||
|
/* needs to be treated as I/O because of ferr_irq */
|
||||||
|
translator_io_start(&s->base);
|
||||||
gen_helper_fwait(cpu_env);
|
gen_helper_fwait(cpu_env);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -22,7 +22,7 @@ if get_option('tcg_interpreter')
|
||||||
tcg_ss.add(files('tci.c'))
|
tcg_ss.add(files('tci.c'))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
tcg_ss = tcg_ss.apply(config_host, strict: false)
|
tcg_ss = tcg_ss.apply(config_targetos, strict: false)
|
||||||
|
|
||||||
libtcg_user = static_library('tcg_user',
|
libtcg_user = static_library('tcg_user',
|
||||||
tcg_ss.sources() + genh,
|
tcg_ss.sources() + genh,
|
||||||
|
|
|
@ -73,7 +73,7 @@ $(TCG_TESTS_TARGETS:%=distclean-tcg-tests-%): distclean-tcg-tests-%:
|
||||||
build-tcg: $(BUILD_TCG_TARGET_RULES)
|
build-tcg: $(BUILD_TCG_TARGET_RULES)
|
||||||
|
|
||||||
.PHONY: check-tcg
|
.PHONY: check-tcg
|
||||||
.ninja-goals.check-tcg = all $(if $(CONFIG_PLUGIN),test-plugins)
|
.ninja-goals.check-tcg = all
|
||||||
check-tcg: $(RUN_TCG_TARGET_RULES)
|
check-tcg: $(RUN_TCG_TARGET_RULES)
|
||||||
|
|
||||||
.PHONY: clean-tcg
|
.PHONY: clean-tcg
|
||||||
|
|
|
@ -68,7 +68,7 @@ test_deps = {
|
||||||
'test-qht-par': qht_bench,
|
'test-qht-par': qht_bench,
|
||||||
}
|
}
|
||||||
|
|
||||||
if have_tools and have_vhost_user and 'CONFIG_LINUX' in config_host
|
if have_tools and have_vhost_user and targetos == 'linux'
|
||||||
executable('vhost-user-bridge',
|
executable('vhost-user-bridge',
|
||||||
sources: files('vhost-user-bridge.c'),
|
sources: files('vhost-user-bridge.c'),
|
||||||
dependencies: [qemuutil, vhost_user])
|
dependencies: [qemuutil, vhost_user])
|
||||||
|
@ -80,10 +80,8 @@ if 'CONFIG_TCG' in config_all
|
||||||
subdir('fp')
|
subdir('fp')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('tcg').allowed()
|
if get_option('plugins')
|
||||||
if 'CONFIG_PLUGIN' in config_host
|
|
||||||
subdir('plugin')
|
subdir('plugin')
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
subdir('unit')
|
subdir('unit')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
sysprof = dependency('sysprof-capture-4', required: false)
|
sysprof = dependency('sysprof-capture-4', method: 'pkg-config', required: false)
|
||||||
glib_static = dependency('glib-2.0', version: glib_req_ver, required: false,
|
glib_static = dependency('glib-2.0', version: glib_req_ver, required: false,
|
||||||
method: 'pkg-config', static: true)
|
method: 'pkg-config', static: true)
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,8 @@ qtests_cxl = \
|
||||||
# for the availability of the default NICs in the tests
|
# for the availability of the default NICs in the tests
|
||||||
qtests_filter = \
|
qtests_filter = \
|
||||||
(get_option('default_devices') and slirp.found() ? ['test-netfilter'] : []) + \
|
(get_option('default_devices') and slirp.found() ? ['test-netfilter'] : []) + \
|
||||||
(get_option('default_devices') and config_host.has_key('CONFIG_POSIX') ? ['test-filter-mirror'] : []) + \
|
(get_option('default_devices') and targetos != 'windows' ? ['test-filter-mirror'] : []) + \
|
||||||
(get_option('default_devices') and config_host.has_key('CONFIG_POSIX') ? ['test-filter-redirector'] : [])
|
(get_option('default_devices') and targetos != 'windows' ? ['test-filter-redirector'] : [])
|
||||||
|
|
||||||
qtests_i386 = \
|
qtests_i386 = \
|
||||||
(slirp.found() ? ['pxe-test'] : []) + \
|
(slirp.found() ? ['pxe-test'] : []) + \
|
||||||
|
@ -48,7 +48,7 @@ qtests_i386 = \
|
||||||
(config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_SGA') ? ['boot-serial-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_SGA') ? ['boot-serial-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_ISA_IPMI_KCS') ? ['ipmi-kcs-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_ISA_IPMI_KCS') ? ['ipmi-kcs-test'] : []) + \
|
||||||
(config_host.has_key('CONFIG_LINUX') and \
|
(targetos == 'linux' and \
|
||||||
config_all_devices.has_key('CONFIG_ISA_IPMI_BT') and
|
config_all_devices.has_key('CONFIG_ISA_IPMI_BT') and
|
||||||
config_all_devices.has_key('CONFIG_IPMI_EXTERN') ? ['ipmi-bt-test'] : []) + \
|
config_all_devices.has_key('CONFIG_IPMI_EXTERN') ? ['ipmi-bt-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_WDT_IB700') ? ['wdt_ib700-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_WDT_IB700') ? ['wdt_ib700-test'] : []) + \
|
||||||
|
@ -74,7 +74,7 @@ qtests_i386 = \
|
||||||
(config_all_devices.has_key('CONFIG_SB16') ? ['fuzz-sb16-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_SB16') ? ['fuzz-sb16-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_SDHCI_PCI') ? ['fuzz-sdcard-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_SDHCI_PCI') ? ['fuzz-sdcard-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_ESP_PCI') ? ['am53c974-test'] : []) + \
|
(config_all_devices.has_key('CONFIG_ESP_PCI') ? ['am53c974-test'] : []) + \
|
||||||
(config_host.has_key('CONFIG_POSIX') and \
|
(targetos != 'windows' and \
|
||||||
config_all_devices.has_key('CONFIG_ACPI_ERST') ? ['erst-test'] : []) + \
|
config_all_devices.has_key('CONFIG_ACPI_ERST') ? ['erst-test'] : []) + \
|
||||||
(config_all_devices.has_key('CONFIG_PCIE_PORT') and \
|
(config_all_devices.has_key('CONFIG_PCIE_PORT') and \
|
||||||
config_all_devices.has_key('CONFIG_VIRTIO_NET') and \
|
config_all_devices.has_key('CONFIG_VIRTIO_NET') and \
|
||||||
|
@ -275,7 +275,7 @@ if config_all_devices.has_key('CONFIG_VIRTIO_SERIAL')
|
||||||
qos_test_ss.add(files('virtio-serial-test.c'))
|
qos_test_ss.add(files('virtio-serial-test.c'))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if config_host.has_key('CONFIG_POSIX')
|
if targetos != 'windows'
|
||||||
qos_test_ss.add(files('e1000e-test.c'))
|
qos_test_ss.add(files('e1000e-test.c'))
|
||||||
endif
|
endif
|
||||||
if have_virtfs
|
if have_virtfs
|
||||||
|
@ -308,7 +308,7 @@ qtests = {
|
||||||
'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'],
|
'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'],
|
||||||
'migration-test': migration_files,
|
'migration-test': migration_files,
|
||||||
'pxe-test': files('boot-sector.c'),
|
'pxe-test': files('boot-sector.c'),
|
||||||
'qos-test': [chardev, io, qos_test_ss.apply(config_host, strict: false).sources()],
|
'qos-test': [chardev, io, qos_test_ss.apply(config_targetos, strict: false).sources()],
|
||||||
'tpm-crb-swtpm-test': [io, tpmemu_files],
|
'tpm-crb-swtpm-test': [io, tpmemu_files],
|
||||||
'tpm-crb-test': [io, tpmemu_files],
|
'tpm-crb-test': [io, tpmemu_files],
|
||||||
'tpm-tis-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],
|
'tpm-tis-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],
|
||||||
|
@ -321,7 +321,7 @@ qtests = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if vnc.found()
|
if vnc.found()
|
||||||
gvnc = dependency('gvnc-1.0', required: false)
|
gvnc = dependency('gvnc-1.0', method: 'pkg-config', required: false)
|
||||||
if gvnc.found()
|
if gvnc.found()
|
||||||
qtests += {'vnc-display-test': [gvnc]}
|
qtests += {'vnc-display-test': [gvnc]}
|
||||||
qtests_generic += [ 'vnc-display-test' ]
|
qtests_generic += [ 'vnc-display-test' ]
|
||||||
|
|
|
@ -28,7 +28,7 @@ TESTS += test_context_save_areas.c.tst
|
||||||
QEMU_OPTS += -M tricore_testboard -cpu tc27x -nographic -kernel
|
QEMU_OPTS += -M tricore_testboard -cpu tc27x -nographic -kernel
|
||||||
|
|
||||||
%.pS: $(ASM_TESTS_PATH)/%.S
|
%.pS: $(ASM_TESTS_PATH)/%.S
|
||||||
$(HOST_CC) -E -o $@ $<
|
$(CC) -E -o $@ $<
|
||||||
|
|
||||||
%.o: %.pS
|
%.o: %.pS
|
||||||
$(AS) $(ASFLAGS) -o $@ $<
|
$(AS) $(ASFLAGS) -o $@ $<
|
||||||
|
|
|
@ -98,7 +98,7 @@ if have_block
|
||||||
}
|
}
|
||||||
if gnutls.found() and \
|
if gnutls.found() and \
|
||||||
tasn1.found() and \
|
tasn1.found() and \
|
||||||
'CONFIG_POSIX' in config_host
|
targetos != 'windows'
|
||||||
tests += {
|
tests += {
|
||||||
'test-crypto-tlscredsx509': ['crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c',
|
'test-crypto-tlscredsx509': ['crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c',
|
||||||
tasn1, crypto, gnutls],
|
tasn1, crypto, gnutls],
|
||||||
|
@ -113,7 +113,7 @@ if have_block
|
||||||
if xts == 'private'
|
if xts == 'private'
|
||||||
tests += {'test-crypto-xts': [crypto, io]}
|
tests += {'test-crypto-xts': [crypto, io]}
|
||||||
endif
|
endif
|
||||||
if 'CONFIG_POSIX' in config_host
|
if targetos != 'windows'
|
||||||
tests += {
|
tests += {
|
||||||
'test-image-locking': [testblock],
|
'test-image-locking': [testblock],
|
||||||
'test-nested-aio-poll': [testblock],
|
'test-nested-aio-poll': [testblock],
|
||||||
|
@ -148,7 +148,7 @@ if have_system
|
||||||
# are not runnable under TSan due to a known issue.
|
# are not runnable under TSan due to a known issue.
|
||||||
# https://github.com/google/sanitizers/issues/1116
|
# https://github.com/google/sanitizers/issues/1116
|
||||||
if not get_option('tsan')
|
if not get_option('tsan')
|
||||||
if 'CONFIG_POSIX' in config_host
|
if targetos != 'windows'
|
||||||
tests += {
|
tests += {
|
||||||
'test-char': ['socket-helpers.c', qom, io, chardev]
|
'test-char': ['socket-helpers.c', qom, io, chardev]
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ util_ss.add(files('thread-context.c'), numa)
|
||||||
if not config_host_data.get('CONFIG_ATOMIC64')
|
if not config_host_data.get('CONFIG_ATOMIC64')
|
||||||
util_ss.add(files('atomic64.c'))
|
util_ss.add(files('atomic64.c'))
|
||||||
endif
|
endif
|
||||||
util_ss.add(when: 'CONFIG_LINUX', if_true: files('async-teardown.c'))
|
|
||||||
util_ss.add(when: 'CONFIG_POSIX', if_true: files('aio-posix.c'))
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('aio-posix.c'))
|
||||||
util_ss.add(when: 'CONFIG_POSIX', if_true: files('fdmon-poll.c'))
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('fdmon-poll.c'))
|
||||||
if config_host_data.get('CONFIG_EPOLL_CREATE1')
|
if config_host_data.get('CONFIG_EPOLL_CREATE1')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue