3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE
= GREP_OPTIONS
=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE
=yes
14 # make source path absolute
15 source_path
=$
(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
19 echo "Using './build' as the directory for build output"
21 MARKER
=build
/auto-created-by-configure
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
37 cat > GNUmakefile
<<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
52 rm -rf build GNUmakefile ; \
60 exec $source_path/configure
"$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
72 echo "ERROR: failed to create temporary directory"
77 TMPC
="${TMPDIR1}/${TMPB}.c"
78 TMPO
="${TMPDIR1}/${TMPB}.o"
79 TMPCXX
="${TMPDIR1}/${TMPB}.cxx"
80 TMPE
="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT
="${TMPDIR1}/${TMPB}.txt"
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
90 echo "#" >> config.log
93 printf "%s" "$1" |
sed "s,','\\\\'',g; s,.*,'&',"
99 while test -n "$2"; do
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
116 if test -n "$BASH_VERSION"; then eval '
118 funcs: ${FUNCNAME[*]}
119 lines: ${BASH_LINENO[*]}"
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log
2>&1 ||
return $?
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
130 # Don't bother rerunning the compile if we were already using -Werror
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log
2>&1 && return $?
138 error_exit
"configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
145 do_compiler
"$cc" "$@"
149 do_compiler
"$cxx" "$@"
152 # Append $2 to the variable named $1, with space separation
154 eval $1=\
${$1:+\"\$$1 \"}\
$2
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
161 QEMU_CXXFLAGS
="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
162 CONFIGURE_CXXFLAGS
=$
(echo "$CONFIGURE_CFLAGS" |
sed s
/-std=gnu99
/-std=gnu
++11/)
163 for arg
in $QEMU_CFLAGS; do
165 -Wstrict-prototypes|
-Wmissing-prototypes|
-Wnested-externs|\
166 -Wold-style-declaration|
-Wold-style-definition|
-Wredundant-decls)
169 QEMU_CXXFLAGS
=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
177 do_cc
$CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
183 do_cc
$CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
187 # symbolically link $1 to $2. Portable version of "ln -sf".
190 mkdir
-p "$(dirname "$2")"
194 # check whether a command is available to this shell (may be either an
195 # executable or a builtin)
197 type "$1" >/dev
/null
2>&1
201 local_ver1
=$
(expr "$1" : '\([0-9.]*\)' |
tr .
' ')
202 local_ver2
=$
(echo "$2" |
tr .
' ')
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
220 echo "$trace_backends" |
grep "$1" >/dev
/null
224 eval test -z '"${1#'"$2"'}"'
228 $ld --help 2>/dev
/null |
grep ".$1" >/dev
/null
2>&1
231 if printf %s
\\n
"$source_path" "$PWD" |
grep -q "[[:space:]:]";
233 error_exit
"main directory cannot contain spaces nor colons"
239 interp_prefix
="/usr/gnemul/qemu-%M"
244 block_drv_rw_whitelist
=""
245 block_drv_ro_whitelist
=""
254 gdb_bin
=$
(command -v "gdb-multiarch" ||
command -v "gdb")
256 if test -e "$source_path/.git"
258 git_submodules_action
="update"
259 git_submodules
="ui/keycodemapdb"
260 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
261 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
263 git_submodules_action
="ignore"
266 if ! test -f "$source_path/ui/keycodemapdb/README"
269 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
271 echo "This is not a GIT checkout but module content appears to"
272 echo "be missing. Do not use 'git archive' or GitHub download links"
273 echo "to acquire QEMU source archives. Non-GIT builds are only"
274 echo "supported with source archives linked from:"
276 echo " https://www.qemu.org/download/#source"
278 echo "Developers working with GIT can use scripts/archive-source.sh"
279 echo "if they need to create valid source archives."
286 # Don't accept a target_list environment variable.
288 unset target_list_exclude
290 # Default value for a variable defining feature "foo".
291 # * foo="no" feature will only be used if --enable-foo arg is given
292 # * foo="" feature will be searched for, and if found, will be used
293 # unless --disable-foo is given
294 # * foo="yes" this value will only be set by --enable-foo flag.
295 # feature will searched for,
296 # if not found, configure exits with error
298 # Always add --enable-foo and --disable-foo command line args.
299 # Distributions want to ensure that several features are compiled in, and it
300 # is impossible without a --enable-foo that exits if a feature is not found.
303 # parse CC options second
305 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
307 --without-default-features)
329 vde
="$default_feature"
334 xen
="$default_feature"
335 xen_ctrl_version
="$default_feature"
336 xen_pci_passthrough
="auto"
337 linux_aio
="$default_feature"
338 linux_io_uring
="$default_feature"
341 xfs
="$default_feature"
343 membarrier
="$default_feature"
344 vhost_net
="$default_feature"
345 vhost_crypto
="$default_feature"
346 vhost_scsi
="$default_feature"
347 vhost_vsock
="$default_feature"
349 vhost_user_blk_server
="auto"
350 vhost_user_fs
="$default_feature"
356 rdma
="$default_feature"
357 pvrdma
="$default_feature"
363 fortify_source
="$default_feature"
365 tcg_interpreter
="false"
391 spice
="$default_feature"
393 smartcard
="$default_feature"
395 libusb
="$default_feature"
396 usb_redir
="$default_feature"
397 opengl
="$default_feature"
399 avx2_opt
="$default_feature"
406 guest_agent
="$default_feature"
407 guest_agent_with_vss
="no"
408 guest_agent_ntddscsi
="no"
409 guest_agent_msi
="auto"
410 vss_win32_sdk
="$default_feature"
412 want_tools
="$default_feature"
416 coroutine_pool
="$default_feature"
417 debug_stack_usage
="no"
424 tls_priority
="NORMAL"
425 gnutls
="$default_feature"
426 nettle
="$default_feature"
428 gcrypt
="$default_feature"
431 qemu_private_xts
="yes"
432 auth_pam
="$default_feature"
433 vte
="$default_feature"
434 virglrenderer
="$default_feature"
435 tpm
="$default_feature"
436 libssh
="$default_feature"
437 live_block_migration
=${default_feature:-yes}
438 numa
="$default_feature"
441 replication
=${default_feature:-yes}
442 bochs
=${default_feature:-yes}
443 cloop
=${default_feature:-yes}
444 dmg
=${default_feature:-yes}
445 qcow1
=${default_feature:-yes}
446 vdi
=${default_feature:-yes}
447 vvfat
=${default_feature:-yes}
448 qed
=${default_feature:-yes}
449 parallels
=${default_feature:-yes}
451 libxml2
="$default_feature"
453 libpmem
="$default_feature"
454 default_devices
="true"
458 secret_keyring
="$default_feature"
459 libdaxctl
="$default_feature"
469 gio
="$default_feature"
471 # parse CC options second
473 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
475 --cross-prefix=*) cross_prefix
="$optarg"
480 --cxx=*) CXX
="$optarg"
482 --cpu=*) cpu
="$optarg"
484 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
485 QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
487 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
489 --extra-ldflags=*) QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
490 EXTRA_LDFLAGS
="$optarg"
492 --enable-debug-info) debug_info
="yes"
494 --disable-debug-info) debug_info
="no"
496 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
498 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
499 eval "cross_cc_cflags_${cc_arch}=\$optarg"
500 cross_cc_vars
="$cross_cc_vars cross_cc_cflags_${cc_arch}"
502 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
503 cc_archs
="$cc_archs $cc_arch"
504 eval "cross_cc_${cc_arch}=\$optarg"
505 cross_cc_vars
="$cross_cc_vars cross_cc_${cc_arch}"
510 # Using uname is really, really broken. Once we have the right set of checks
511 # we can eliminate its usage altogether.
513 # Preferred compiler:
515 # ${cross_prefix}gcc (if cross-prefix specified)
517 if test -z "${CC}${cross_prefix}"; then
520 cc
="${CC-${cross_prefix}gcc}"
523 if test -z "${CXX}${cross_prefix}"; then
526 cxx
="${CXX-${cross_prefix}g++}"
529 ar="${AR-${cross_prefix}ar}"
530 as
="${AS-${cross_prefix}as}"
533 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
534 ld
="${LD-${cross_prefix}ld}"
535 ranlib
="${RANLIB-${cross_prefix}ranlib}"
536 nm
="${NM-${cross_prefix}nm}"
537 strip
="${STRIP-${cross_prefix}strip}"
538 windres
="${WINDRES-${cross_prefix}windres}"
539 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
541 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
543 pkg_config
=query_pkg_config
544 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
546 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
547 ARFLAGS
="${ARFLAGS-rv}"
549 # default flags for all hosts
550 # We use -fwrapv to tell the compiler that we require a C dialect where
551 # left shift of signed integers is well defined and has the expected
552 # 2s-complement style results. (Both clang and gcc agree that it
553 # provides these semantics.)
554 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
555 QEMU_CFLAGS
="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
556 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
557 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
559 # Flags that are needed during configure but later taken care of by Meson
560 CONFIGURE_CFLAGS
="-std=gnu99 -Wall"
567 #error $1 not defined
569 int main(void) { return 0; }
577 int main(void) { return 0; }
584 int main(void) { return 0; }
588 write_c_fuzzer_skeleton
() {
591 #include <sys/types.h>
592 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
593 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
597 if check_define __linux__
; then
599 elif check_define _WIN32
; then
601 elif check_define __OpenBSD__
; then
603 elif check_define __sun__
; then
605 elif check_define __HAIKU__
; then
607 elif check_define __FreeBSD__
; then
609 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
610 targetos
='GNU/kFreeBSD'
611 elif check_define __DragonFly__
; then
613 elif check_define __NetBSD__
; then
615 elif check_define __APPLE__
; then
618 # This is a fatal error, but don't report it yet, because we
619 # might be going to just print the --help text, or it might
620 # be the result of a missing compiler.
624 # Some host OSes need non-standard checks for which CPU to use.
625 # Note that these checks are broken for cross-compilation: if you're
626 # cross-compiling to one of these OSes then you'll need to specify
627 # the correct CPU with the --cpu option.
633 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
634 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
639 if test ! -z "$cpu" ; then
640 # command line argument
642 elif check_define __i386__
; then
644 elif check_define __x86_64__
; then
645 if check_define __ILP32__
; then
650 elif check_define __sparc__
; then
651 if check_define __arch64__
; then
656 elif check_define _ARCH_PPC
; then
657 if check_define _ARCH_PPC64
; then
658 if check_define _LITTLE_ENDIAN
; then
666 elif check_define __mips__
; then
668 elif check_define __s390__
; then
669 if check_define __s390x__
; then
674 elif check_define __riscv
; then
675 if check_define _LP64
; then
680 elif check_define __arm__
; then
682 elif check_define __aarch64__
; then
689 # Normalise host CPU name and set ARCH.
690 # Note that this case should only have supported host CPUs, not guests.
692 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64
)
697 i386|i486|i586|i686|i86pc|BePC
)
716 # This will result in either an error or falling back to TCI later
720 if test -z "$ARCH"; then
729 audio_possible_drivers
="dsound sdl"
730 if check_include dsound.h
; then
731 audio_drv_list
="dsound"
740 audio_drv_list
="oss try-sdl"
741 audio_possible_drivers
="oss sdl pa"
746 audio_drv_list
="oss try-sdl"
747 audio_possible_drivers
="oss sdl pa"
748 # needed for kinfo_getvmmap(3) in libutil.h
749 netmap
="" # enable netmap autodetect
754 audio_drv_list
="oss try-sdl"
755 audio_possible_drivers
="oss sdl pa"
760 audio_drv_list
="oss try-sdl"
761 audio_possible_drivers
="oss sdl"
767 audio_drv_list
="try-sdl"
768 audio_possible_drivers
="sdl"
773 audio_drv_list
="try-coreaudio try-sdl"
774 audio_possible_drivers
="coreaudio sdl"
775 # Disable attempts to use ObjectiveC features in os/object.h since they
776 # won't work when we're compiling with gcc as a C compiler.
777 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
782 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
783 if test -f /usr
/include
/sys
/soundcard.h
; then
784 audio_drv_list
="oss try-sdl"
786 audio_possible_drivers
="oss sdl"
787 # needed for CMSG_ macros in sys/socket.h
788 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
789 # needed for TIOCWIN* defines in termios.h
790 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
794 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
797 audio_drv_list
="try-pa oss"
798 audio_possible_drivers
="oss alsa sdl pa"
801 vhost_user
=${default_feature:-yes}
805 if [ "$bsd" = "yes" ] ; then
806 if [ "$darwin" != "yes" ] ; then
811 : ${make=${MAKE-make}}
813 # We prefer python 3.x. A bare 'python' is traditionally
814 # python 2.x, but some distros have it as python 3.x, so
818 for binary
in "${PYTHON-python3}" python
822 python
=$
(command -v "$binary")
828 # Check for ancillary tools used in testing
830 for binary
in genisoimage mkisofs
834 genisoimage
=$
(command -v "$binary")
839 : ${smbd=${SMBD-/usr/sbin/smbd}}
841 # Default objcc to clang if available, otherwise use CC
848 if test "$mingw32" = "yes" ; then
851 # MinGW needs -mthreads for TLS and macro _MT.
852 CONFIGURE_CFLAGS
="-mthreads $CONFIGURE_CFLAGS"
856 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
862 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
864 --help|
-h) show_help
=yes
866 --version|
-V) exec cat $source_path/VERSION
868 --prefix=*) prefix
="$optarg"
870 --interp-prefix=*) interp_prefix
="$optarg"
876 --host-cc=*) host_cc
="$optarg"
880 --iasl=*) iasl
="$optarg"
882 --objcc=*) objcc
="$optarg"
884 --make=*) make="$optarg"
888 --python=*) python
="$optarg" ; explicit_python
=yes
890 --sphinx-build=*) sphinx_build
="$optarg"
892 --skip-meson) skip_meson
=yes
894 --meson=*) meson
="$optarg"
896 --ninja=*) ninja
="$optarg"
898 --smbd=*) smbd
="$optarg"
908 --disable-debug-info)
918 --disable-module-upgrades) module_upgrades
="no"
920 --enable-module-upgrades) module_upgrades
="yes"
924 --target-list=*) target_list
="$optarg"
925 if test "$target_list_exclude"; then
926 error_exit
"Can't mix --target-list with --target-list-exclude"
929 --target-list-exclude=*) target_list_exclude
="$optarg"
930 if test "$target_list"; then
931 error_exit
"Can't mix --target-list-exclude with --target-list"
934 --enable-trace-backends=*) trace_backends
="$optarg"
936 # XXX: backwards compatibility
937 --enable-trace-backend=*) trace_backends
="$optarg"
939 --with-trace-file=*) trace_file
="$optarg"
941 --with-default-devices) default_devices
="true"
943 --without-default-devices) default_devices
="false"
945 --without-default-features) # processed above
947 --enable-gprof) gprof
="yes"
949 --enable-gcov) gcov
="yes"
953 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
955 --mandir=*) mandir
="$optarg"
957 --bindir=*) bindir
="$optarg"
959 --libdir=*) libdir
="$optarg"
961 --libexecdir=*) libexecdir
="$optarg"
963 --includedir=*) includedir
="$optarg"
965 --datadir=*) datadir
="$optarg"
967 --with-suffix=*) qemu_suffix
="$optarg"
969 --docdir=*) docdir
="$optarg"
971 --localedir=*) localedir
="$optarg"
973 --sysconfdir=*) sysconfdir
="$optarg"
975 --localstatedir=*) local_statedir
="$optarg"
977 --firmwarepath=*) firmwarepath
="$optarg"
980 --disable-dependency-tracking|\
981 --sbindir=*|
--sharedstatedir=*|\
982 --oldincludedir=*|
--datarootdir=*|
--infodir=*|\
983 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
984 # These switches are silently ignored, for compatibility with
985 # autoconf-generated configure scripts. This allows QEMU's
986 # configure to be used by RPM and similar macros that set
987 # lots of directory switches by default.
989 --disable-sdl) sdl
="disabled"
991 --enable-sdl) sdl
="enabled"
993 --disable-sdl-image) sdl_image
="disabled"
995 --enable-sdl-image) sdl_image
="enabled"
997 --disable-qom-cast-debug) qom_cast_debug
="no"
999 --enable-qom-cast-debug) qom_cast_debug
="yes"
1001 --disable-virtfs) virtfs
="disabled"
1003 --enable-virtfs) virtfs
="enabled"
1005 --disable-libudev) libudev
="disabled"
1007 --enable-libudev) libudev
="enabled"
1009 --disable-virtiofsd) virtiofsd
="disabled"
1011 --enable-virtiofsd) virtiofsd
="enabled"
1013 --disable-mpath) mpath
="disabled"
1015 --enable-mpath) mpath
="enabled"
1017 --disable-vnc) vnc
="disabled"
1019 --enable-vnc) vnc
="enabled"
1021 --disable-gettext) gettext="disabled"
1023 --enable-gettext) gettext="enabled"
1025 --oss-lib=*) oss_lib
="$optarg"
1027 --audio-drv-list=*) audio_drv_list
="$optarg"
1029 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1031 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1033 --enable-debug-tcg) debug_tcg
="yes"
1035 --disable-debug-tcg) debug_tcg
="no"
1038 # Enable debugging options that aren't excessively noisy
1045 --enable-sanitizers) sanitizers
="yes"
1047 --disable-sanitizers) sanitizers
="no"
1049 --enable-tsan) tsan
="yes"
1051 --disable-tsan) tsan
="no"
1053 --enable-sparse) sparse
="enabled"
1055 --disable-sparse) sparse
="disabled"
1057 --disable-strip) strip_opt
="no"
1059 --disable-vnc-sasl) vnc_sasl
="disabled"
1061 --enable-vnc-sasl) vnc_sasl
="enabled"
1063 --disable-vnc-jpeg) vnc_jpeg
="disabled"
1065 --enable-vnc-jpeg) vnc_jpeg
="enabled"
1067 --disable-vnc-png) vnc_png
="disabled"
1069 --enable-vnc-png) vnc_png
="enabled"
1071 --disable-slirp) slirp
="disabled"
1073 --enable-slirp) slirp
="enabled"
1075 --enable-slirp=git
) slirp
="internal"
1077 --enable-slirp=system
) slirp
="system"
1079 --disable-vde) vde
="no"
1081 --enable-vde) vde
="yes"
1083 --disable-netmap) netmap
="no"
1085 --enable-netmap) netmap
="yes"
1087 --disable-xen) xen
="disabled"
1089 --enable-xen) xen
="enabled"
1091 --disable-xen-pci-passthrough) xen_pci_passthrough
="disabled"
1093 --enable-xen-pci-passthrough) xen_pci_passthrough
="enabled"
1095 --disable-brlapi) brlapi
="disabled"
1097 --enable-brlapi) brlapi
="enabled"
1099 --disable-kvm) kvm
="disabled"
1101 --enable-kvm) kvm
="enabled"
1103 --disable-hax) hax
="disabled"
1105 --enable-hax) hax
="enabled"
1107 --disable-hvf) hvf
="disabled"
1109 --enable-hvf) hvf
="enabled"
1111 --disable-nvmm) nvmm
="disabled"
1113 --enable-nvmm) nvmm
="enabled"
1115 --disable-whpx) whpx
="disabled"
1117 --enable-whpx) whpx
="enabled"
1119 --disable-tcg-interpreter) tcg_interpreter
="false"
1121 --enable-tcg-interpreter) tcg_interpreter
="true"
1123 --disable-cap-ng) cap_ng
="disabled"
1125 --enable-cap-ng) cap_ng
="enabled"
1127 --disable-tcg) tcg
="disabled"
1129 --enable-tcg) tcg
="enabled"
1131 --disable-malloc-trim) malloc_trim
="disabled"
1133 --enable-malloc-trim) malloc_trim
="enabled"
1135 --disable-spice) spice
="no"
1137 --enable-spice) spice
="yes"
1139 --disable-libiscsi) libiscsi
="disabled"
1141 --enable-libiscsi) libiscsi
="enabled"
1143 --disable-libnfs) libnfs
="disabled"
1145 --enable-libnfs) libnfs
="enabled"
1147 --enable-profiler) profiler
="yes"
1149 --disable-cocoa) cocoa
="disabled"
1151 --enable-cocoa) cocoa
="enabled"
1153 --disable-system) softmmu
="no"
1155 --enable-system) softmmu
="yes"
1162 --disable-linux-user) linux_user
="no"
1164 --enable-linux-user) linux_user
="yes"
1166 --disable-bsd-user) bsd_user
="no"
1168 --enable-bsd-user) bsd_user
="yes"
1170 --enable-pie) pie
="yes"
1172 --disable-pie) pie
="no"
1174 --enable-werror) werror
="yes"
1176 --disable-werror) werror
="no"
1178 --enable-lto) lto
="true"
1180 --disable-lto) lto
="false"
1182 --enable-stack-protector) stack_protector
="yes"
1184 --disable-stack-protector) stack_protector
="no"
1186 --enable-safe-stack) safe_stack
="yes"
1188 --disable-safe-stack) safe_stack
="no"
1194 --disable-cfi) cfi
="false"
1196 --enable-cfi-debug) cfi_debug
="true"
1198 --disable-cfi-debug) cfi_debug
="false"
1200 --disable-curses) curses
="disabled"
1202 --enable-curses) curses
="enabled"
1204 --disable-iconv) iconv="disabled"
1206 --enable-iconv) iconv="enabled"
1208 --disable-curl) curl
="disabled"
1210 --enable-curl) curl
="enabled"
1212 --disable-fdt) fdt
="disabled"
1214 --enable-fdt) fdt
="enabled"
1216 --enable-fdt=git
) fdt
="internal"
1218 --enable-fdt=system
) fdt
="system"
1220 --disable-linux-aio) linux_aio
="no"
1222 --enable-linux-aio) linux_aio
="yes"
1224 --disable-linux-io-uring) linux_io_uring
="no"
1226 --enable-linux-io-uring) linux_io_uring
="yes"
1228 --disable-attr) attr
="disabled"
1230 --enable-attr) attr
="enabled"
1232 --disable-membarrier) membarrier
="no"
1234 --enable-membarrier) membarrier
="yes"
1236 --disable-blobs) blobs
="false"
1238 --with-pkgversion=*) pkgversion
="$optarg"
1240 --with-coroutine=*) coroutine
="$optarg"
1242 --disable-coroutine-pool) coroutine_pool
="no"
1244 --enable-coroutine-pool) coroutine_pool
="yes"
1246 --enable-debug-stack-usage) debug_stack_usage
="yes"
1248 --enable-crypto-afalg) crypto_afalg
="yes"
1250 --disable-crypto-afalg) crypto_afalg
="no"
1252 --disable-docs) docs
="disabled"
1254 --enable-docs) docs
="enabled"
1256 --disable-vhost-net) vhost_net
="no"
1258 --enable-vhost-net) vhost_net
="yes"
1260 --disable-vhost-crypto) vhost_crypto
="no"
1262 --enable-vhost-crypto) vhost_crypto
="yes"
1264 --disable-vhost-scsi) vhost_scsi
="no"
1266 --enable-vhost-scsi) vhost_scsi
="yes"
1268 --disable-vhost-vsock) vhost_vsock
="no"
1270 --enable-vhost-vsock) vhost_vsock
="yes"
1272 --disable-vhost-user-blk-server) vhost_user_blk_server
="disabled"
1274 --enable-vhost-user-blk-server) vhost_user_blk_server
="enabled"
1276 --disable-vhost-user-fs) vhost_user_fs
="no"
1278 --enable-vhost-user-fs) vhost_user_fs
="yes"
1280 --disable-opengl) opengl
="no"
1282 --enable-opengl) opengl
="yes"
1284 --disable-rbd) rbd
="disabled"
1286 --enable-rbd) rbd
="enabled"
1288 --disable-xfsctl) xfs
="no"
1290 --enable-xfsctl) xfs
="yes"
1292 --disable-smartcard) smartcard
="no"
1294 --enable-smartcard) smartcard
="yes"
1296 --disable-u2f) u2f
="disabled"
1298 --enable-u2f) u2f
="enabled"
1300 --disable-libusb) libusb
="no"
1302 --enable-libusb) libusb
="yes"
1304 --disable-usb-redir) usb_redir
="no"
1306 --enable-usb-redir) usb_redir
="yes"
1308 --disable-zlib-test)
1310 --disable-lzo) lzo
="disabled"
1312 --enable-lzo) lzo
="enabled"
1314 --disable-snappy) snappy
="disabled"
1316 --enable-snappy) snappy
="enabled"
1318 --disable-bzip2) bzip2="disabled"
1320 --enable-bzip2) bzip2="enabled"
1322 --enable-lzfse) lzfse
="enabled"
1324 --disable-lzfse) lzfse
="disabled"
1326 --disable-zstd) zstd
="disabled"
1328 --enable-zstd) zstd
="enabled"
1330 --enable-guest-agent) guest_agent
="yes"
1332 --disable-guest-agent) guest_agent
="no"
1334 --enable-guest-agent-msi) guest_agent_msi
="enabled"
1336 --disable-guest-agent-msi) guest_agent_msi
="disabled"
1338 --with-vss-sdk) vss_win32_sdk
=""
1340 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1342 --without-vss-sdk) vss_win32_sdk
="no"
1344 --with-win-sdk) win_sdk
=""
1346 --with-win-sdk=*) win_sdk
="$optarg"
1348 --without-win-sdk) win_sdk
="no"
1350 --enable-tools) want_tools
="yes"
1352 --disable-tools) want_tools
="no"
1354 --enable-seccomp) seccomp
="enabled"
1356 --disable-seccomp) seccomp
="disabled"
1358 --disable-glusterfs) glusterfs
="disabled"
1360 --disable-avx2) avx2_opt
="no"
1362 --enable-avx2) avx2_opt
="yes"
1364 --disable-avx512f) avx512f_opt
="no"
1366 --enable-avx512f) avx512f_opt
="yes"
1369 --enable-glusterfs) glusterfs
="enabled"
1371 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1372 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1374 --enable-vhdx|
--disable-vhdx)
1375 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1377 --enable-uuid|
--disable-uuid)
1378 echo "$0: $opt is obsolete, UUID support is always built" >&2
1380 --disable-gtk) gtk
="disabled"
1382 --enable-gtk) gtk
="enabled"
1384 --tls-priority=*) tls_priority
="$optarg"
1386 --disable-gnutls) gnutls
="no"
1388 --enable-gnutls) gnutls
="yes"
1390 --disable-nettle) nettle
="no"
1392 --enable-nettle) nettle
="yes"
1394 --disable-gcrypt) gcrypt
="no"
1396 --enable-gcrypt) gcrypt
="yes"
1398 --disable-auth-pam) auth_pam
="no"
1400 --enable-auth-pam) auth_pam
="yes"
1402 --enable-rdma) rdma
="yes"
1404 --disable-rdma) rdma
="no"
1406 --enable-pvrdma) pvrdma
="yes"
1408 --disable-pvrdma) pvrdma
="no"
1410 --disable-vte) vte
="no"
1412 --enable-vte) vte
="yes"
1414 --disable-virglrenderer) virglrenderer
="no"
1416 --enable-virglrenderer) virglrenderer
="yes"
1418 --disable-tpm) tpm
="no"
1420 --enable-tpm) tpm
="yes"
1422 --disable-libssh) libssh
="no"
1424 --enable-libssh) libssh
="yes"
1426 --disable-live-block-migration) live_block_migration
="no"
1428 --enable-live-block-migration) live_block_migration
="yes"
1430 --disable-numa) numa
="no"
1432 --enable-numa) numa
="yes"
1434 --disable-libxml2) libxml2
="no"
1436 --enable-libxml2) libxml2
="yes"
1438 --disable-tcmalloc) tcmalloc
="no"
1440 --enable-tcmalloc) tcmalloc
="yes"
1442 --disable-jemalloc) jemalloc
="no"
1444 --enable-jemalloc) jemalloc
="yes"
1446 --disable-replication) replication
="no"
1448 --enable-replication) replication
="yes"
1450 --disable-bochs) bochs
="no"
1452 --enable-bochs) bochs
="yes"
1454 --disable-cloop) cloop
="no"
1456 --enable-cloop) cloop
="yes"
1458 --disable-dmg) dmg
="no"
1460 --enable-dmg) dmg
="yes"
1462 --disable-qcow1) qcow1
="no"
1464 --enable-qcow1) qcow1
="yes"
1466 --disable-vdi) vdi
="no"
1468 --enable-vdi) vdi
="yes"
1470 --disable-vvfat) vvfat
="no"
1472 --enable-vvfat) vvfat
="yes"
1474 --disable-qed) qed
="no"
1476 --enable-qed) qed
="yes"
1478 --disable-parallels) parallels
="no"
1480 --enable-parallels) parallels
="yes"
1482 --disable-sheepdog) sheepdog
="no"
1484 --enable-sheepdog) sheepdog
="yes"
1486 --disable-vhost-user) vhost_user
="no"
1488 --enable-vhost-user) vhost_user
="yes"
1490 --disable-vhost-vdpa) vhost_vdpa
="no"
1492 --enable-vhost-vdpa) vhost_vdpa
="yes"
1494 --disable-vhost-kernel) vhost_kernel
="no"
1496 --enable-vhost-kernel) vhost_kernel
="yes"
1498 --disable-capstone) capstone
="disabled"
1500 --enable-capstone) capstone
="enabled"
1502 --enable-capstone=git
) capstone
="internal"
1504 --enable-capstone=system
) capstone
="system"
1506 --with-git=*) git
="$optarg"
1508 --enable-git-update)
1509 git_submodules_action
="update"
1510 echo "--enable-git-update deprecated, use --with-git-submodules=update"
1512 --disable-git-update)
1513 git_submodules_action
="validate"
1514 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1516 --with-git-submodules=*)
1517 git_submodules_action
="$optarg"
1519 --enable-debug-mutex) debug_mutex
=yes
1521 --disable-debug-mutex) debug_mutex
=no
1523 --enable-libpmem) libpmem
=yes
1525 --disable-libpmem) libpmem
=no
1527 --enable-xkbcommon) xkbcommon
="enabled"
1529 --disable-xkbcommon) xkbcommon
="disabled"
1531 --enable-plugins) plugins
="yes"
1533 --disable-plugins) plugins
="no"
1535 --enable-containers) use_containers
="yes"
1537 --disable-containers) use_containers
="no"
1539 --enable-fuzzing) fuzzing
=yes
1541 --disable-fuzzing) fuzzing
=no
1543 --gdb=*) gdb_bin
="$optarg"
1545 --enable-rng-none) rng_none
=yes
1547 --disable-rng-none) rng_none
=no
1549 --enable-keyring) secret_keyring
="yes"
1551 --disable-keyring) secret_keyring
="no"
1553 --enable-libdaxctl) libdaxctl
=yes
1555 --disable-libdaxctl) libdaxctl
=no
1557 --enable-fuse) fuse
="enabled"
1559 --disable-fuse) fuse
="disabled"
1561 --enable-fuse-lseek) fuse_lseek
="enabled"
1563 --disable-fuse-lseek) fuse_lseek
="disabled"
1565 --enable-multiprocess) multiprocess
="enabled"
1567 --disable-multiprocess) multiprocess
="disabled"
1569 --enable-gio) gio
=yes
1571 --disable-gio) gio
=no
1574 echo "ERROR: unknown option $opt"
1575 echo "Try '$0 --help' for more information"
1581 case $git_submodules_action in
1583 if test ! -e "$source_path/.git"; then
1584 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1591 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1596 libdir
="${libdir:-$prefix/lib}"
1597 libexecdir
="${libexecdir:-$prefix/libexec}"
1598 includedir
="${includedir:-$prefix/include}"
1600 if test "$mingw32" = "yes" ; then
1601 bindir
="${bindir:-$prefix}"
1603 bindir
="${bindir:-$prefix/bin}"
1605 mandir
="${mandir:-$prefix/share/man}"
1606 datadir
="${datadir:-$prefix/share}"
1607 docdir
="${docdir:-$prefix/share/doc}"
1608 sysconfdir
="${sysconfdir:-$prefix/etc}"
1609 local_statedir
="${local_statedir:-$prefix/var}"
1610 firmwarepath
="${firmwarepath:-$datadir/qemu-firmware}"
1611 localedir
="${localedir:-$datadir/locale}"
1616 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1620 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1623 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1624 QEMU_LDFLAGS
="-m32 -mv8plus $QEMU_LDFLAGS"
1627 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1628 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1632 QEMU_LDFLAGS
="-m31 $QEMU_LDFLAGS"
1636 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1640 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1643 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1644 # If we truly care, we should simply detect this case at
1645 # runtime and generate the fallback to serial emulation.
1646 CPU_CFLAGS
="-m64 -mcx16"
1647 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1651 QEMU_LDFLAGS
="-mx32 $QEMU_LDFLAGS"
1653 # No special flags required for other host CPUs
1656 eval "cross_cc_${cpu}=\$host_cc"
1657 cross_cc_vars
="$cross_cc_vars cross_cc_${cpu}"
1658 QEMU_CFLAGS
="$CPU_CFLAGS $QEMU_CFLAGS"
1660 # For user-mode emulation the host arch has to be one we explicitly
1661 # support, even if we're using TCI.
1662 if [ "$ARCH" = "unknown" ]; then
1667 default_target_list
=""
1668 deprecated_targets_list
=ppc64abi32-linux-user
,lm32-softmmu
,unicore32-softmmu
1669 deprecated_features
=""
1672 if [ "$softmmu" = "yes" ]; then
1673 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1675 if [ "$linux_user" = "yes" ]; then
1676 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1678 if [ "$bsd_user" = "yes" ]; then
1679 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1682 # If the user doesn't explicitly specify a deprecated target we will
1684 if test -z "$target_list"; then
1685 if test -z "$target_list_exclude"; then
1686 target_list_exclude
="$deprecated_targets_list"
1688 target_list_exclude
="$target_list_exclude,$deprecated_targets_list"
1692 for config
in $mak_wilds; do
1693 target
="$(basename "$config" .mak)"
1694 if echo "$target_list_exclude" |
grep -vq "$target"; then
1695 default_target_list
="${default_target_list} $target"
1699 # Enumerate public trace backends for --help output
1700 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1702 if test x
"$show_help" = x
"yes" ; then
1705 Usage: configure [options]
1706 Options: [defaults in brackets after descriptions]
1709 --help print this message
1710 --prefix=PREFIX install in PREFIX [$prefix]
1711 --interp-prefix=PREFIX where to find shared libraries, etc.
1712 use %M for cpu name [$interp_prefix]
1713 --target-list=LIST set target list (default: build all non-deprecated)
1714 $(echo Available targets: $default_target_list | \
1715 fold -s -w 53 | sed -e 's/^/ /')
1716 $(echo Deprecated targets: $deprecated_targets_list | \
1717 fold -s -w 53 | sed -e 's/^/ /')
1718 --target-list-exclude=LIST exclude a set of targets from the default target-list
1720 Advanced options (experts only):
1721 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1722 --cc=CC use C compiler CC [$cc]
1723 --iasl=IASL use ACPI compiler IASL [$iasl]
1724 --host-cc=CC use C compiler CC [$host_cc] for code run at
1726 --cxx=CXX use C++ compiler CXX [$cxx]
1727 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1728 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1729 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1730 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1731 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1732 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1733 --make=MAKE use specified make [$make]
1734 --python=PYTHON use specified python [$python]
1735 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1736 --meson=MESON use specified meson [$meson]
1737 --ninja=NINJA use specified ninja [$ninja]
1738 --smbd=SMBD use specified smbd [$smbd]
1739 --with-git=GIT use specified git [$git]
1740 --with-git-submodules=update update git submodules (default if .git dir exists)
1741 --with-git-submodules=validate fail if git submodules are not up to date
1742 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
1743 --static enable static build [$static]
1744 --mandir=PATH install man pages in PATH
1745 --datadir=PATH install firmware in PATH/$qemu_suffix
1746 --localedir=PATH install translation in PATH/$qemu_suffix
1747 --docdir=PATH install documentation in PATH/$qemu_suffix
1748 --bindir=PATH install binaries in PATH
1749 --libdir=PATH install libraries in PATH
1750 --libexecdir=PATH install helper binaries in PATH
1751 --sysconfdir=PATH install config in PATH/$qemu_suffix
1752 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1753 --firmwarepath=PATH search PATH for firmware files
1754 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1755 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1756 --with-pkgversion=VERS use specified string as sub-version of the package
1757 --without-default-features default all --enable-* options to "disabled"
1758 --without-default-devices do not include any device that is not needed to
1759 start the emulator (only use if you are including
1760 desired devices in default-configs/devices/)
1761 --enable-debug enable common debug build options
1762 --enable-sanitizers enable default sanitizers
1763 --enable-tsan enable thread sanitizer
1764 --disable-strip disable stripping binaries
1765 --disable-werror disable compilation abort on warning
1766 --disable-stack-protector disable compiler-provided stack protection
1767 --audio-drv-list=LIST set audio drivers list:
1768 Available drivers: $audio_possible_drivers
1769 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1770 --block-drv-rw-whitelist=L
1771 set block driver read-write whitelist
1772 (affects only QEMU, not qemu-img)
1773 --block-drv-ro-whitelist=L
1774 set block driver read-only whitelist
1775 (affects only QEMU, not qemu-img)
1776 --enable-trace-backends=B Set trace backend
1777 Available backends: $trace_backend_list
1778 --with-trace-file=NAME Full PATH,NAME of file to store traces
1780 --disable-slirp disable SLIRP userspace network connectivity
1781 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1782 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1783 --oss-lib path to OSS library
1784 --cpu=CPU Build for host CPU [$cpu]
1785 --with-coroutine=BACKEND coroutine backend. Supported options:
1786 ucontext, sigaltstack, windows
1787 --enable-gcov enable test coverage analysis with gcov
1788 --disable-blobs disable installing provided firmware blobs
1789 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1790 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1791 --tls-priority default TLS protocol/cipher priority string
1792 --enable-gprof QEMU profiling with gprof
1793 --enable-profiler profiler support
1794 --enable-debug-stack-usage
1795 track the maximum stack usage of stacks created by qemu_alloc_stack
1797 enable plugins via shared library loading
1798 --disable-containers don't use containers for cross-building
1799 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1801 Optional features, enabled with --enable-FEATURE and
1802 disabled with --disable-FEATURE, default is enabled if available
1803 (unless built with --without-default-features):
1805 system all system emulation targets
1806 user supported user emulation targets
1807 linux-user all linux usermode emulation targets
1808 bsd-user all BSD usermode emulation targets
1809 docs build documentation
1810 guest-agent build the QEMU Guest Agent
1811 guest-agent-msi build guest agent Windows MSI installation package
1812 pie Position Independent Executables
1813 modules modules support (non-Windows)
1814 module-upgrades try to load modules from alternate paths for upgrades
1815 debug-tcg TCG debugging (default is disabled)
1816 debug-info debugging information
1817 lto Enable Link-Time Optimization.
1818 sparse sparse checker
1819 safe-stack SafeStack Stack Smash Protection. Depends on
1820 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1821 cfi Enable Control-Flow Integrity for indirect function calls.
1822 In case of a cfi violation, QEMU is terminated with SIGILL
1823 Depends on lto and is incompatible with modules
1824 Automatically enables Link-Time Optimization (lto)
1825 cfi-debug In case of a cfi violation, a message containing the line that
1826 triggered the error is written to stderr. After the error,
1827 QEMU is still terminated with SIGILL
1828 gnutls GNUTLS cryptography support
1829 nettle nettle cryptography support
1830 gcrypt libgcrypt cryptography support
1831 auth-pam PAM access control
1833 sdl-image SDL Image support for icons
1835 vte vte support for the gtk UI
1837 iconv font glyph conversion support
1839 vnc-sasl SASL encryption for VNC server
1840 vnc-jpeg JPEG lossy compression for VNC server
1841 vnc-png PNG compression for VNC server
1842 cocoa Cocoa UI (Mac OS X only)
1844 virtiofsd build virtiofs daemon (virtiofsd)
1845 libudev Use libudev to enumerate host devices
1846 mpath Multipath persistent reservation passthrough
1847 xen xen backend driver support
1848 xen-pci-passthrough PCI passthrough support for Xen
1849 brlapi BrlAPI (Braile)
1850 curl curl connectivity
1851 membarrier membarrier system call (for Linux 4.14+ or Windows)
1853 kvm KVM acceleration support
1854 hax HAX acceleration support
1855 hvf Hypervisor.framework acceleration support
1856 nvmm NVMM acceleration support
1857 whpx Windows Hypervisor Platform acceleration support
1858 rdma Enable RDMA-based migration
1859 pvrdma Enable PVRDMA support
1860 vde support for vde network
1861 netmap support for netmap network
1862 linux-aio Linux AIO support
1863 linux-io-uring Linux io_uring support
1864 cap-ng libcap-ng support
1865 attr attr and xattr support
1866 vhost-net vhost-net kernel acceleration support
1867 vhost-vsock virtio sockets device support
1868 vhost-scsi vhost-scsi kernel target support
1869 vhost-crypto vhost-user-crypto backend support
1870 vhost-kernel vhost kernel backend support
1871 vhost-user vhost-user backend support
1872 vhost-user-blk-server vhost-user-blk server support
1873 vhost-vdpa vhost-vdpa kernel backend support
1875 rbd rados block device (rbd)
1876 libiscsi iscsi support
1878 smartcard smartcard support (libcacard)
1879 u2f U2F support (u2f-emu)
1880 libusb libusb (for usb passthrough)
1881 live-block-migration Block migration in the main migration stream
1882 usb-redir usb network redirection support
1883 lzo support of lzo compression library
1884 snappy support of snappy compression library
1885 bzip2 support of bzip2 compression library
1886 (for reading bzip2-compressed dmg images)
1887 lzfse support of lzfse compression library
1888 (for reading lzfse-compressed dmg images)
1889 zstd support for zstd compression library
1890 (for migration compression and qcow2 cluster compression)
1891 seccomp seccomp support
1892 coroutine-pool coroutine freelist (better performance)
1893 glusterfs GlusterFS backend
1895 libssh ssh block device support
1896 numa libnuma support
1897 libxml2 for Parallels image format
1898 tcmalloc tcmalloc support
1899 jemalloc jemalloc support
1900 avx2 AVX2 optimization support
1901 avx512f AVX512F optimization support
1902 replication replication support
1903 opengl opengl support
1904 virglrenderer virgl rendering support
1905 xfsctl xfsctl support
1906 qom-cast-debug cast debugging support
1907 tools build qemu-io, qemu-nbd and qemu-img tools
1908 bochs bochs image format support
1909 cloop cloop image format support
1910 dmg dmg image format support
1911 qcow1 qcow v1 image format support
1912 vdi vdi image format support
1913 vvfat vvfat image format support
1914 qed qed image format support
1915 parallels parallels image format support
1916 sheepdog sheepdog block driver support (deprecated)
1917 crypto-afalg Linux AF_ALG crypto backend driver
1918 capstone capstone disassembler support
1919 debug-mutex mutex debugging support
1920 libpmem libpmem support
1921 xkbcommon xkbcommon support
1922 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1923 libdaxctl libdaxctl support
1924 fuse FUSE block device export
1925 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1926 multiprocess Out of process device emulation support
1929 NOTE: The object files are built at the place where configure is launched
1934 # Remove old dependency files to make sure that they get properly regenerated
1935 rm -f */config-devices.mak.d
1937 if test -z "$python"
1939 error_exit
"Python not found. Use --python=/path/to/python"
1943 error_exit
"GNU make ($make) not found"
1946 # Note that if the Python conditional here evaluates True we will exit
1947 # with status 1 which is a shell 'false' value.
1948 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1949 error_exit
"Cannot use '$python', Python >= 3.6 is required." \
1950 "Use --python=/path/to/python to specify a supported Python."
1953 # Preserve python version since some functionality is dependent on it
1954 python_version
=$
($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev
/null
)
1956 # Suppress writing compiled files
1959 if test -z "$meson"; then
1960 if test "$explicit_python" = no
&& has meson
&& version_ge
"$(meson --version)" 0.55.3; then
1962 elif test $git_submodules_action != 'ignore' ; then
1964 elif test -e "${source_path}/meson/meson.py" ; then
1967 if test "$explicit_python" = yes; then
1968 error_exit
"--python requires using QEMU's embedded Meson distribution, but it was not found."
1970 error_exit
"Meson not found. Use --meson=/path/to/meson"
1974 # Meson uses its own Python interpreter to invoke other Python scripts,
1975 # but the user wants to use the one they specified with --python.
1977 # We do not want to override the distro Python interpreter (and sometimes
1978 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1979 # just require --meson=git|internal together with --python.
1980 if test "$explicit_python" = yes; then
1983 *) error_exit
"--python requires using QEMU's embedded Meson distribution." ;;
1988 if test "$meson" = git
; then
1989 git_submodules
="${git_submodules} meson"
1994 meson
="$python ${source_path}/meson/meson.py"
1996 *) meson
=$
(command -v "$meson") ;;
2001 if test -z "$ninja"; then
2002 for c
in ninja ninja-build samu
; do
2004 ninja
=$
(command -v "$c")
2008 if test -z "$ninja"; then
2009 error_exit
"Cannot find Ninja"
2013 # Check that the C compiler works. Doing this here before testing
2014 # the host CPU ensures that we had a valid CC to autodetect the
2015 # $cpu var (and we should bail right here if that's not the case).
2016 # It also allows the help message to be printed without a CC.
2018 if compile_object
; then
2019 : C compiler works ok
2021 error_exit
"\"$cc\" either does not exist or does not work"
2023 if ! compile_prog
; then
2024 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
2027 # Consult white-list to determine whether to enable werror
2028 # by default. Only enable by default for git builds
2029 if test -z "$werror" ; then
2030 if test "$git_submodules_action" != "ignore" && \
2031 { test "$linux" = "yes" ||
test "$mingw32" = "yes"; }; then
2038 if test "$targetos" = "bogus"; then
2039 # Now that we know that we're not printing the help and that
2040 # the compiler works (so the results of the check_defines we used
2041 # to identify the OS are reliable), if we didn't recognize the
2042 # host OS we should stop now.
2043 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
2046 # Check whether the compiler matches our minimum requirements:
2048 #if defined(__clang_major__) && defined(__clang_minor__)
2049 # ifdef __apple_build_version__
2050 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2051 # error You need at least XCode Clang v5.1 to compile QEMU
2054 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2055 # error You need at least Clang v3.4 to compile QEMU
2058 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2059 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2060 # error You need at least GCC v4.8 to compile QEMU
2063 # error You either need GCC or Clang to compiler QEMU
2065 int main (void) { return 0; }
2067 if ! compile_prog
"" "" ; then
2068 error_exit
"You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2071 # Accumulate -Wfoo and -Wno-bar separately.
2072 # We will list all of the enable flags first, and the disable flags second.
2073 # Note that we do not add -Werror, because that would enable it for all
2074 # configure tests. If a configure test failed due to -Werror this would
2075 # just silently disable some features, so it's too error prone.
2078 add_to warn_flags
-Wold-style-declaration
2079 add_to warn_flags
-Wold-style-definition
2080 add_to warn_flags
-Wtype-limits
2081 add_to warn_flags
-Wformat-security
2082 add_to warn_flags
-Wformat-y2k
2083 add_to warn_flags
-Winit-self
2084 add_to warn_flags
-Wignored-qualifiers
2085 add_to warn_flags
-Wempty-body
2086 add_to warn_flags
-Wnested-externs
2087 add_to warn_flags
-Wendif-labels
2088 add_to warn_flags
-Wexpansion-to-defined
2089 add_to warn_flags
-Wimplicit-fallthrough=2
2092 add_to nowarn_flags
-Wno-initializer-overrides
2093 add_to nowarn_flags
-Wno-missing-include-dirs
2094 add_to nowarn_flags
-Wno-shift-negative-value
2095 add_to nowarn_flags
-Wno-string-plus-int
2096 add_to nowarn_flags
-Wno-typedef-redefinition
2097 add_to nowarn_flags
-Wno-tautological-type-limit-compare
2098 add_to nowarn_flags
-Wno-psabi
2100 gcc_flags
="$warn_flags $nowarn_flags"
2102 cc_has_warning_flag
() {
2105 # Use the positive sense of the flag when testing for -Wno-wombat
2106 # support (gcc will happily accept the -Wno- form of unknown
2108 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2109 compile_prog
"-Werror $optflag" ""
2112 for flag
in $gcc_flags; do
2113 if cc_has_warning_flag
$flag ; then
2114 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2118 if test "$stack_protector" != "no"; then
2120 int main(int argc, char *argv[])
2122 char arr[64], *p = arr, *c = argv[0];
2129 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
2131 for flag
in $gcc_flags; do
2132 # We need to check both a compile and a link, since some compiler
2133 # setups fail only on a .c->.o compile and some only at link time
2134 if compile_object
"-Werror $flag" &&
2135 compile_prog
"-Werror $flag" ""; then
2136 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2137 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
2142 if test "$stack_protector" = yes; then
2143 if test $sp_on = 0; then
2144 error_exit
"Stack protector not supported"
2149 # Disable -Wmissing-braces on older compilers that warn even for
2150 # the "universal" C zero initializer {0}.
2156 if compile_object
"-Werror" "" ; then
2159 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
2162 # Our module code doesn't support Windows
2163 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2164 error_exit
"Modules are not available for Windows"
2167 # module_upgrades is only reasonable if modules are enabled
2168 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2169 error_exit
"Can't enable module-upgrades as Modules are not enabled"
2172 # Static linking is not possible with modules or PIE
2173 if test "$static" = "yes" ; then
2174 if test "$modules" = "yes" ; then
2175 error_exit
"static and modules are mutually incompatible"
2179 # Unconditional check for compiler __thread support
2181 static __thread int tls_var;
2182 int main(void) { return tls_var; }
2185 if ! compile_prog
"-Werror" "" ; then
2186 error_exit
"Your compiler does not support the __thread specifier for " \
2187 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2193 # define THREAD __thread
2197 static THREAD int tls_var;
2198 int main(void) { return tls_var; }
2201 # Check we support --no-pie first; we will need this for building ROMs.
2202 if compile_prog
"-Werror -fno-pie" "-no-pie"; then
2203 CFLAGS_NOPIE
="-fno-pie"
2206 if test "$static" = "yes"; then
2207 if test "$pie" != "no" && compile_prog
"-Werror -fPIE -DPIE" "-static-pie"; then
2208 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2209 QEMU_LDFLAGS
="-static-pie $QEMU_LDFLAGS"
2211 elif test "$pie" = "yes"; then
2212 error_exit
"-static-pie not available due to missing toolchain support"
2214 QEMU_LDFLAGS
="-static $QEMU_LDFLAGS"
2217 elif test "$pie" = "no"; then
2218 CONFIGURE_CFLAGS
="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2219 elif compile_prog
"-Werror -fPIE -DPIE" "-pie"; then
2220 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2221 CONFIGURE_LDFLAGS
="-pie $CONFIGURE_LDFLAGS"
2223 elif test "$pie" = "yes"; then
2224 error_exit
"PIE not available due to missing toolchain support"
2226 echo "Disabling PIE due to missing toolchain support"
2230 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2231 # The combination is known as "full relro", because .got.plt is read-only too.
2232 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
2233 QEMU_LDFLAGS
="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2236 ##########################################
2237 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2238 # use i686 as default anyway, but for those that don't, an explicit
2239 # specification is necessary
2241 if test "$cpu" = "i386"; then
2243 static int sfaa(int *ptr)
2245 return __sync_fetch_and_and(ptr, 0);
2251 val = __sync_val_compare_and_swap(&val, 0, 1);
2256 if ! compile_prog
"" "" ; then
2257 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
2261 #########################################
2262 # Solaris specific configure tool chain decisions
2264 if test "$solaris" = "yes" ; then
2268 if test -f /usr
/ccs
/bin
/ar ; then
2269 error_exit
"No path includes ar" \
2270 "Add /usr/ccs/bin to your path and rerun configure"
2272 error_exit
"No path includes ar"
2276 if test -z "${target_list+xxx}" ; then
2278 for target
in $default_target_list; do
2279 target_list
="$target_list $target"
2281 target_list
="${target_list# }"
2284 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2285 for target
in $target_list; do
2286 # Check that we recognised the target name; this allows a more
2287 # friendly error message than if we let it fall through.
2288 case " $default_target_list " in
2292 error_exit
"Unknown target name '$target'"
2298 for target
in $target_list; do
2299 # if a deprecated target is enabled we note it here
2300 if echo "$deprecated_targets_list" |
grep -q "$target"; then
2301 add_to deprecated_features
$target
2305 # see if system emulation was really requested
2306 case " $target_list " in
2307 *"-softmmu "*) softmmu
=yes
2313 feature_not_found
() {
2317 error_exit
"User requested feature $feature" \
2318 "configure was not able to find it." \
2323 # big/little endian test
2325 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2326 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2327 extern int foo(short *, short *);
2328 int main(int argc, char *argv[]) {
2329 return foo(big_endian, little_endian);
2333 if compile_object
; then
2334 if strings -a $TMPO |
grep -q BiGeNdIaN
; then
2336 elif strings -a $TMPO |
grep -q LiTtLeEnDiAn
; then
2339 echo big
/little
test failed
2342 echo big
/little
test failed
2345 ##########################################
2347 if test -z "$want_tools"; then
2348 if test "$softmmu" = "no"; then
2355 ##########################################
2356 # Disable features only meaningful for system-mode emulation
2357 if test "$softmmu" = "no"; then
2361 ##########################################
2362 # Some versions of Mac OS X incorrectly define SIZE_MAX
2366 int main(int argc, char *argv[]) {
2367 return printf("%zu", SIZE_MAX);
2370 have_broken_size_max
=no
2371 if ! compile_object
-Werror ; then
2372 have_broken_size_max
=yes
2375 ##########################################
2379 #include <sys/socket.h>
2380 #include <linux/ip.h>
2381 int main(void) { return sizeof(struct mmsghdr); }
2383 if compile_prog
"" "" ; then
2390 #include <sys/mman.h>
2391 int main(int argc, char *argv[]) {
2392 return mlockall(MCL_FUTURE);
2395 if compile_prog
"" "" ; then
2401 #########################################
2402 # vhost interdependencies and host support
2405 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2406 error_exit
"vhost-user is only available on Linux"
2408 test "$vhost_vdpa" = "" && vhost_vdpa
=$linux
2409 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2410 error_exit
"vhost-vdpa is only available on Linux"
2412 test "$vhost_kernel" = "" && vhost_kernel
=$linux
2413 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2414 error_exit
"vhost-kernel is only available on Linux"
2417 # vhost-kernel devices
2418 test "$vhost_scsi" = "" && vhost_scsi
=$vhost_kernel
2419 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2420 error_exit
"--enable-vhost-scsi requires --enable-vhost-kernel"
2422 test "$vhost_vsock" = "" && vhost_vsock
=$vhost_kernel
2423 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2424 error_exit
"--enable-vhost-vsock requires --enable-vhost-kernel"
2427 # vhost-user backends
2428 test "$vhost_net_user" = "" && vhost_net_user
=$vhost_user
2429 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2430 error_exit
"--enable-vhost-net-user requires --enable-vhost-user"
2432 test "$vhost_crypto" = "" && vhost_crypto
=$vhost_user
2433 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2434 error_exit
"--enable-vhost-crypto requires --enable-vhost-user"
2436 test "$vhost_user_fs" = "" && vhost_user_fs
=$vhost_user
2437 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2438 error_exit
"--enable-vhost-user-fs requires --enable-vhost-user"
2440 #vhost-vdpa backends
2441 test "$vhost_net_vdpa" = "" && vhost_net_vdpa
=$vhost_vdpa
2442 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2443 error_exit
"--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2446 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2447 if test "$vhost_net" = ""; then
2448 test "$vhost_net_user" = "yes" && vhost_net
=yes
2449 test "$vhost_net_vdpa" = "yes" && vhost_net
=yes
2450 test "$vhost_kernel" = "yes" && vhost_net
=yes
2453 ##########################################
2456 if ! has
"$pkg_config_exe"; then
2457 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2460 ##########################################
2463 if test "$linux_user" = "yes"; then
2466 #include <linux/futex.h>
2468 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2474 if ! compile_object
; then
2475 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2479 ##########################################
2482 if test "$xen" != "disabled" ; then
2483 # Check whether Xen library path is specified via --extra-ldflags to avoid
2484 # overriding this setting with pkg-config output. If not, try pkg-config
2485 # to obtain all needed flags.
2487 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2488 $pkg_config --exists xencontrol
; then
2489 xen_ctrl_version
="$(printf '%d%02d%02d' \
2490 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2492 xen_pc
="xencontrol xenstore xenforeignmemory xengnttab"
2493 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2494 if $pkg_config --exists xentoolcore
; then
2495 xen_pc
="$xen_pc xentoolcore"
2497 xen_cflags
="$($pkg_config --cflags $xen_pc)"
2498 xen_libs
="$($pkg_config --libs $xen_pc)"
2501 xen_libs
="-lxenstore -lxenctrl"
2502 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2504 # First we test whether Xen headers and libraries are available.
2505 # If no, we are done and there is no Xen support.
2506 # If yes, more tests are run to detect the Xen version.
2510 #include <xenctrl.h>
2515 if ! compile_prog
"" "$xen_libs" ; then
2517 if test "$xen" = "enabled" ; then
2518 feature_not_found
"xen" "Install xen devel"
2524 cat > $TMPC <<EOF &&
2525 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2526 #define __XEN_TOOLS__
2527 #include <xendevicemodel.h>
2528 #include <xenforeignmemory.h>
2530 xendevicemodel_handle *xd;
2531 xenforeignmemory_handle *xfmem;
2533 xd = xendevicemodel_open(0, 0);
2534 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2536 xfmem = xenforeignmemory_open(0, 0);
2537 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2542 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2544 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2545 xen_ctrl_version
=41100
2548 cat > $TMPC <<EOF &&
2549 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2550 #include <xenforeignmemory.h>
2551 #include <xentoolcore.h>
2553 xenforeignmemory_handle *xfmem;
2555 xfmem = xenforeignmemory_open(0, 0);
2556 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2557 xentoolcore_restrict_all(0);
2562 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2564 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2565 xen_ctrl_version
=41000
2568 cat > $TMPC <<EOF &&
2569 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2570 #define __XEN_TOOLS__
2571 #include <xendevicemodel.h>
2573 xendevicemodel_handle *xd;
2575 xd = xendevicemodel_open(0, 0);
2576 xendevicemodel_close(xd);
2581 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2583 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2584 xen_ctrl_version
=40900
2587 cat > $TMPC <<EOF &&
2589 * If we have stable libs the we don't want the libxc compat
2590 * layers, regardless of what CFLAGS we may have been given.
2592 * Also, check if xengnttab_grant_copy_segment_t is defined and
2593 * grant copy operation is implemented.
2595 #undef XC_WANT_COMPAT_EVTCHN_API
2596 #undef XC_WANT_COMPAT_GNTTAB_API
2597 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2598 #include <xenctrl.h>
2599 #include <xenstore.h>
2600 #include <xenevtchn.h>
2601 #include <xengnttab.h>
2602 #include <xenforeignmemory.h>
2604 #include <xen/hvm/hvm_info_table.h>
2605 #if !defined(HVM_MAX_VCPUS)
2606 # error HVM_MAX_VCPUS not defined
2609 xc_interface *xc = NULL;
2610 xenforeignmemory_handle *xfmem;
2611 xenevtchn_handle *xe;
2612 xengnttab_handle *xg;
2613 xengnttab_grant_copy_segment_t* seg = NULL;
2617 xc = xc_interface_open(0, 0, 0);
2618 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2619 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2620 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2621 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2623 xfmem = xenforeignmemory_open(0, 0);
2624 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2626 xe = xenevtchn_open(0, 0);
2629 xg = xengnttab_open(0, 0);
2630 xengnttab_grant_copy(xg, 0, seg);
2635 compile_prog
"" "$xen_libs $xen_stable_libs"
2637 xen_ctrl_version
=40800
2640 cat > $TMPC <<EOF &&
2642 * If we have stable libs the we don't want the libxc compat
2643 * layers, regardless of what CFLAGS we may have been given.
2645 #undef XC_WANT_COMPAT_EVTCHN_API
2646 #undef XC_WANT_COMPAT_GNTTAB_API
2647 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2648 #include <xenctrl.h>
2649 #include <xenstore.h>
2650 #include <xenevtchn.h>
2651 #include <xengnttab.h>
2652 #include <xenforeignmemory.h>
2654 #include <xen/hvm/hvm_info_table.h>
2655 #if !defined(HVM_MAX_VCPUS)
2656 # error HVM_MAX_VCPUS not defined
2659 xc_interface *xc = NULL;
2660 xenforeignmemory_handle *xfmem;
2661 xenevtchn_handle *xe;
2662 xengnttab_handle *xg;
2666 xc = xc_interface_open(0, 0, 0);
2667 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2668 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2669 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2670 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2672 xfmem = xenforeignmemory_open(0, 0);
2673 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2675 xe = xenevtchn_open(0, 0);
2678 xg = xengnttab_open(0, 0);
2679 xengnttab_map_grant_ref(xg, 0, 0, 0);
2684 compile_prog
"" "$xen_libs $xen_stable_libs"
2686 xen_ctrl_version
=40701
2691 cat > $TMPC <<EOF &&
2692 #include <xenctrl.h>
2693 #include <xenstore.h>
2695 #include <xen/hvm/hvm_info_table.h>
2696 #if !defined(HVM_MAX_VCPUS)
2697 # error HVM_MAX_VCPUS not defined
2702 xc = xc_interface_open(0, 0, 0);
2703 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2704 xc_gnttab_open(NULL, 0);
2705 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2706 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2707 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2708 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2712 compile_prog
"" "$xen_libs"
2714 xen_ctrl_version
=40600
2719 cat > $TMPC <<EOF &&
2720 #include <xenctrl.h>
2721 #include <xenstore.h>
2723 #include <xen/hvm/hvm_info_table.h>
2724 #if !defined(HVM_MAX_VCPUS)
2725 # error HVM_MAX_VCPUS not defined
2730 xc = xc_interface_open(0, 0, 0);
2731 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2732 xc_gnttab_open(NULL, 0);
2733 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2734 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2735 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2739 compile_prog
"" "$xen_libs"
2741 xen_ctrl_version
=40500
2745 cat > $TMPC <<EOF &&
2746 #include <xenctrl.h>
2747 #include <xenstore.h>
2749 #include <xen/hvm/hvm_info_table.h>
2750 #if !defined(HVM_MAX_VCPUS)
2751 # error HVM_MAX_VCPUS not defined
2756 xc = xc_interface_open(0, 0, 0);
2757 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2758 xc_gnttab_open(NULL, 0);
2759 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2760 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2764 compile_prog
"" "$xen_libs"
2766 xen_ctrl_version
=40200
2770 if test "$xen" = "enabled" ; then
2771 feature_not_found
"xen (unsupported version)" \
2772 "Install a supported xen (xen 4.2 or newer)"
2777 if test "$xen" = enabled
; then
2778 if test $xen_ctrl_version -ge 40701 ; then
2779 xen_libs
="$xen_libs $xen_stable_libs "
2785 ##########################################
2788 if test "$gnutls" != "no"; then
2790 if $pkg_config --exists "gnutls >= 3.1.18"; then
2791 gnutls_cflags
=$
($pkg_config --cflags gnutls
)
2792 gnutls_libs
=$
($pkg_config --libs gnutls
)
2793 # Packaging for the static libraries is not always correct.
2794 # At least ubuntu 18.04 ships only shared libraries.
2796 if compile_prog
"" "$gnutls_libs" ; then
2800 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2801 feature_not_found
"gnutls" "Install gnutls devel >= 3.1.18"
2808 # If user didn't give a --disable/enable-gcrypt flag,
2809 # then mark as disabled if user requested nettle
2811 if test -z "$gcrypt"
2813 if test "$nettle" = "yes"
2819 # If user didn't give a --disable/enable-nettle flag,
2820 # then mark as disabled if user requested gcrypt
2822 if test -z "$nettle"
2824 if test "$gcrypt" = "yes"
2831 if ! has
"libgcrypt-config"
2836 if test -n "$cross_prefix"
2838 host=$
(libgcrypt-config
--host)
2839 if test "$host-" != $cross_prefix
2845 maj
=`libgcrypt-config --version | awk -F . '{print $1}'`
2846 min
=`libgcrypt-config --version | awk -F . '{print $2}'`
2848 if test $maj != 1 ||
test $min -lt 5
2857 if test "$nettle" != "no"; then
2859 if $pkg_config --exists "nettle >= 2.7.1"; then
2860 nettle_cflags
=$
($pkg_config --cflags nettle
)
2861 nettle_libs
=$
($pkg_config --libs nettle
)
2862 nettle_version
=$
($pkg_config --modversion nettle
)
2863 # Link test to make sure the given libraries work (e.g for static).
2865 if compile_prog
"" "$nettle_libs" ; then
2866 if test -z "$gcrypt"; then
2872 if test "$pass" = "yes"
2875 #include <nettle/xts.h>
2880 if compile_prog
"$nettle_cflags" "$nettle_libs" ; then
2885 if test "$pass" = "no" && test "$nettle" = "yes"; then
2886 feature_not_found
"nettle" "Install nettle devel >= 2.7.1"
2892 if test "$gcrypt" != "no"; then
2894 if has_libgcrypt
; then
2895 gcrypt_cflags
=$
(libgcrypt-config
--cflags)
2896 gcrypt_libs
=$
(libgcrypt-config
--libs)
2897 # Debian has removed -lgpg-error from libgcrypt-config
2898 # as it "spreads unnecessary dependencies" which in
2899 # turn breaks static builds...
2900 if test "$static" = "yes"
2902 gcrypt_libs
="$gcrypt_libs -lgpg-error"
2905 # Link test to make sure the given libraries work (e.g for static).
2907 if compile_prog
"" "$gcrypt_libs" ; then
2911 if test "$pass" = "yes"; then
2916 gcry_mac_hd_t handle;
2917 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2918 GCRY_MAC_FLAG_SECURE, NULL);
2922 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
2928 gcry_cipher_hd_t handle;
2929 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2933 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
2937 elif test "$gcrypt" = "yes"; then
2938 feature_not_found
"gcrypt" "Install gcrypt devel >= 1.5.0"
2945 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2947 error_exit
"Only one of gcrypt & nettle can be enabled"
2950 ##########################################
2951 # libtasn1 - only for the TLS creds/session test suite
2956 if $pkg_config --exists "libtasn1"; then
2957 tasn1_cflags
=$
($pkg_config --cflags libtasn1
)
2958 tasn1_libs
=$
($pkg_config --libs libtasn1
)
2964 ##########################################
2967 if test "$auth_pam" != "no"; then
2969 #include <security/pam_appl.h>
2972 const char *service_name = "qemu";
2973 const char *user = "frank";
2974 const struct pam_conv pam_conv = { 0 };
2975 pam_handle_t *pamh = NULL;
2976 pam_start(service_name, user, &pam_conv, &pamh);
2980 if compile_prog
"" "-lpam" ; then
2983 if test "$auth_pam" = "yes"; then
2984 feature_not_found
"PAM" "Install PAM development package"
2991 ##########################################
2994 if test "$vte" != "no"; then
2995 vteminversion
="0.32.0"
2996 if $pkg_config --exists "vte-2.91"; then
2997 vtepackage
="vte-2.91"
2999 vtepackage
="vte-2.90"
3001 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3002 vte_cflags
=$
($pkg_config --cflags $vtepackage)
3003 vte_libs
=$
($pkg_config --libs $vtepackage)
3004 vteversion
=$
($pkg_config --modversion $vtepackage)
3006 elif test "$vte" = "yes"; then
3007 feature_not_found
"vte" "Install libvte-2.90/2.91 devel"
3013 ##########################################
3014 # RDMA needs OpenFabrics libraries
3015 if test "$rdma" != "no" ; then
3017 #include <rdma/rdma_cma.h>
3018 int main(void) { return 0; }
3020 rdma_libs
="-lrdmacm -libverbs -libumad"
3021 if compile_prog
"" "$rdma_libs" ; then
3024 if test "$rdma" = "yes" ; then
3026 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3028 " (1) Fast: Install infiniband packages (devel) from your distro." \
3029 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3030 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3036 ##########################################
3039 cat > $TMPC <<EOF &&
3040 #include <sys/mman.h>
3047 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3053 if test "$rdma" = "yes" ; then
3056 if compile_prog
"" ""; then
3063 if ! compile_prog
"" ""; then
3064 error_exit
"PVRDMA is not supported since mremap is not implemented"
3073 if test "$pvrdma" = "yes" ; then
3074 error_exit
"PVRDMA requires rdma suppport"
3079 # Let's see if enhanced reg_mr is supported
3080 if test "$pvrdma" = "yes" ; then
3082 cat > $TMPC <<EOF &&
3083 #include <infiniband/verbs.h>
3089 struct ibv_pd *pd = NULL;
3095 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3102 if ! compile_prog
"" "-libverbs"; then
3103 QEMU_CFLAGS
="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3107 ##########################################
3108 # xfsctl() probe, used for file-posix.c
3109 if test "$xfs" != "no" ; then
3111 #include <stddef.h> /* NULL */
3112 #include <xfs/xfs.h>
3115 xfsctl(NULL, 0, 0, NULL);
3119 if compile_prog
"" "" ; then
3122 if test "$xfs" = "yes" ; then
3123 feature_not_found
"xfs" "Install xfsprogs/xfslibs devel"
3129 ##########################################
3130 # vde libraries probe
3131 if test "$vde" != "no" ; then
3132 vde_libs
="-lvdeplug"
3134 #include <libvdeplug.h>
3137 struct vde_open_args a = {0, 0, 0};
3143 if compile_prog
"" "$vde_libs" ; then
3146 if test "$vde" = "yes" ; then
3147 feature_not_found
"vde" "Install vde (Virtual Distributed Ethernet) devel"
3153 ##########################################
3154 # netmap support probe
3155 # Apart from looking for netmap headers, we make sure that the host API version
3156 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3157 # a minor/major version number. Minor new features will be marked with values up
3158 # to 15, and if something happens that requires a change to the backend we will
3159 # move above 15, submit the backend fixes and modify this two bounds.
3160 if test "$netmap" != "no" ; then
3162 #include <inttypes.h>
3164 #include <net/netmap.h>
3165 #include <net/netmap_user.h>
3166 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3169 int main(void) { return 0; }
3171 if compile_prog
"" "" ; then
3174 if test "$netmap" = "yes" ; then
3175 feature_not_found
"netmap"
3181 ##########################################
3183 if test "$coreaudio" != "no" ; then
3184 coreaudio_libs
="-framework CoreAudio"
3186 #include <CoreAudio/CoreAudio.h>
3189 return (int)AudioGetCurrentHostTime();
3192 if compile_prog
"" "$coreaudio_libs" ; then
3199 ##########################################
3200 # Sound support libraries probe
3202 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/,/ /g')
3203 for drv
in $audio_drv_list; do
3206 if $pkg_config alsa
--exists; then
3207 alsa_libs
=$
($pkg_config alsa
--libs)
3208 alsa_cflags
=$
($pkg_config alsa
--cflags)
3210 if test "$drv" = "try-alsa"; then
3211 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa/alsa/')
3214 if test "$drv" = "try-alsa"; then
3215 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa//')
3217 error_exit
"$drv check failed" \
3218 "Make sure to have the $drv libs and headers installed."
3224 if $pkg_config libpulse
--exists; then
3226 pulse_libs
=$
($pkg_config libpulse
--libs)
3227 pulse_cflags
=$
($pkg_config libpulse
--cflags)
3228 if test "$drv" = "try-pa"; then
3229 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa/pa/')
3232 if test "$drv" = "try-pa"; then
3233 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa//')
3235 error_exit
"$drv check failed" \
3236 "Make sure to have the $drv libs and headers installed."
3242 if test "$sdl" = "no"; then
3243 error_exit
"sdl not found or disabled, can not use sdl audio driver"
3248 if test "$sdl" = "no"; then
3249 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl//')
3251 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl/sdl/')
3255 coreaudio | try-coreaudio
)
3256 if test "$coreaudio" = "no"; then
3257 if test "$drv" = "try-coreaudio"; then
3258 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-coreaudio//')
3260 error_exit
"$drv check failed" \
3261 "Make sure to have the $drv is available."
3264 coreaudio_libs
="-framework CoreAudio"
3265 if test "$drv" = "try-coreaudio"; then
3266 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-coreaudio/coreaudio/')
3272 dsound_libs
="-lole32 -ldxguid"
3281 if $pkg_config jack
--exists; then
3283 jack_libs
=$
($pkg_config jack
--libs)
3284 if test "$drv" = "try-jack"; then
3285 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack/jack/')
3288 if test "$drv" = "try-jack"; then
3289 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack//')
3291 error_exit
"$drv check failed" \
3292 "Make sure to have the $drv libs and headers installed."
3298 echo "$audio_possible_drivers" |
grep -q "\<$drv\>" ||
{
3299 error_exit
"Unknown driver '$drv' selected" \
3300 "Possible drivers are: $audio_possible_drivers"
3306 ##########################################
3307 # glib support probe
3310 glib_modules
=gthread-2.0
3311 if test "$modules" = yes; then
3312 glib_modules
="$glib_modules gmodule-export-2.0"
3314 if test "$plugins" = yes; then
3315 glib_modules
="$glib_modules gmodule-2.0"
3318 for i
in $glib_modules; do
3319 if $pkg_config --atleast-version=$glib_req_ver $i; then
3320 glib_cflags
=$
($pkg_config --cflags $i)
3321 glib_libs
=$
($pkg_config --libs $i)
3323 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
3327 # This workaround is required due to a bug in pkg-config file for glib as it
3328 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3330 if test "$static" = yes && test "$mingw32" = yes; then
3331 glib_cflags
="-DGLIB_STATIC_COMPILATION $glib_cflags"
3334 if ! test "$gio" = "no"; then
3336 if $pkg_config --atleast-version=$glib_req_ver gio-2.0
; then
3337 gio_cflags
=$
($pkg_config --cflags gio-2.0
)
3338 gio_libs
=$
($pkg_config --libs gio-2.0
)
3339 gdbus_codegen
=$
($pkg_config --variable=gdbus_codegen gio-2.0
)
3340 if [ ! -x "$gdbus_codegen" ]; then
3343 # Check that the libraries actually work -- Ubuntu 18.04 ships
3344 # with pkg-config --static --libs data for gio-2.0 that is missing
3345 # -lblkid and will give a link error.
3347 #include <gio/gio.h>
3350 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3354 if compile_prog
"$gio_cflags" "$gio_libs" ; then
3360 if test "$pass" = "yes" &&
3361 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0
; then
3362 gio_cflags
="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3363 gio_libs
="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3367 if test "$pass" = "no"; then
3368 if test "$gio" = "yes"; then
3369 feature_not_found
"gio" "Install libgio >= 2.0"
3378 # Sanity check that the current size_t matches the
3379 # size that glib thinks it should be. This catches
3380 # problems on multi-arch where people try to build
3381 # 32-bit QEMU while pointing at 64-bit glib headers
3386 #define QEMU_BUILD_BUG_ON(x) \
3387 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3390 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3395 if ! compile_prog
"$glib_cflags" "$glib_libs" ; then
3396 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3397 "You probably need to set PKG_CONFIG_LIBDIR"\
3398 "to point to the right pkg-config files for your"\
3402 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3405 int main(void) { return 0; }
3407 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3408 if cc_has_warning_flag
"-Wno-unknown-attributes"; then
3409 glib_cflags
="-Wno-unknown-attributes $glib_cflags"
3410 CONFIGURE_CFLAGS
="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3414 # Silence clang warnings triggered by glib < 2.57.2
3417 typedef struct Foo {
3420 static void foo_free(Foo *f)
3424 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3425 int main(void) { return 0; }
3427 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3428 if cc_has_warning_flag
"-Wno-unused-function"; then
3429 glib_cflags
="$glib_cflags -Wno-unused-function"
3430 CONFIGURE_CFLAGS
="$CONFIGURE_CFLAGS -Wno-unused-function"
3434 ##########################################
3435 # SHA command probe for modules
3436 if test "$modules" = yes; then
3437 shacmd_probe
="sha1sum sha1 shasum"
3438 for c
in $shacmd_probe; do
3444 if test "$shacmd" = ""; then
3445 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
3449 ##########################################
3451 PTHREADLIBS_LIST
="-pthread -lpthread -lpthreadGC2"
3455 #include <pthread.h>
3456 static void *f(void *p) { return NULL; }
3459 pthread_create(&thread, 0, f, 0);
3463 if compile_prog
"" "" ; then
3466 for pthread_lib
in $PTHREADLIBS_LIST; do
3467 if compile_prog
"" "$pthread_lib" ; then
3474 if test "$mingw32" != yes && test "$pthread" = no
; then
3475 error_exit
"pthread check failed" \
3476 "Make sure to have the pthread libs and headers installed."
3479 # check for pthread_setname_np with thread id
3480 pthread_setname_np_w_tid
=no
3482 #include <pthread.h>
3484 static void *f(void *p) { return NULL; }
3488 pthread_create(&thread, 0, f, 0);
3489 pthread_setname_np(thread, "QEMU");
3493 if compile_prog
"" "$pthread_lib" ; then
3494 pthread_setname_np_w_tid
=yes
3497 # check for pthread_setname_np without thread id
3498 pthread_setname_np_wo_tid
=no
3500 #include <pthread.h>
3502 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3506 pthread_create(&thread, 0, f, 0);
3510 if compile_prog
"" "$pthread_lib" ; then
3511 pthread_setname_np_wo_tid
=yes
3514 ##########################################
3516 if test "$libssh" != "no" ; then
3517 if $pkg_config --exists libssh
; then
3518 libssh_cflags
=$
($pkg_config libssh
--cflags)
3519 libssh_libs
=$
($pkg_config libssh
--libs)
3522 if test "$libssh" = "yes" ; then
3523 error_exit
"libssh required for --enable-libssh"
3529 ##########################################
3530 # Check for libssh 0.8
3531 # This is done like this instead of using the LIBSSH_VERSION_* and
3532 # SSH_VERSION_* macros because some distributions in the past shipped
3533 # snapshots of the future 0.8 from Git, and those snapshots did not
3534 # have updated version numbers (still referring to 0.7.0).
3536 if test "$libssh" = "yes"; then
3538 #include <libssh/libssh.h>
3539 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3541 if compile_prog
"$libssh_cflags" "$libssh_libs"; then
3542 libssh_cflags
="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3546 ##########################################
3549 if test "$linux_aio" != "no" ; then
3552 #include <sys/eventfd.h>
3554 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3556 if compile_prog
"" "-laio" ; then
3559 if test "$linux_aio" = "yes" ; then
3560 feature_not_found
"linux AIO" "Install libaio devel"
3565 ##########################################
3566 # linux-io-uring probe
3568 if test "$linux_io_uring" != "no" ; then
3569 if $pkg_config liburing
; then
3570 linux_io_uring_cflags
=$
($pkg_config --cflags liburing
)
3571 linux_io_uring_libs
=$
($pkg_config --libs liburing
)
3574 if test "$linux_io_uring" = "yes" ; then
3575 feature_not_found
"linux io_uring" "Install liburing devel"
3581 ##########################################
3582 # TPM emulation is only on POSIX
3584 if test "$tpm" = ""; then
3585 if test "$mingw32" = "yes"; then
3590 elif test "$tpm" = "yes"; then
3591 if test "$mingw32" = "yes" ; then
3592 error_exit
"TPM emulation only available on POSIX systems"
3596 ##########################################
3599 #include <sys/types.h>
3600 #include <sys/uio.h>
3602 int main(void) { return sizeof(struct iovec); }
3605 if compile_prog
"" "" ; then
3609 ##########################################
3613 auto | enabled | internal
)
3614 # Simpler to always update submodule, even if not needed.
3615 if test "$git_submodules_action" != "ignore"; then
3616 git_submodules
="${git_submodules} dtc"
3621 ##########################################
3622 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3625 if $pkg_config gbm
; then
3626 gbm_cflags
="$($pkg_config --cflags gbm)"
3627 gbm_libs
="$($pkg_config --libs gbm)"
3631 if test "$opengl" != "no" ; then
3633 if $pkg_config epoxy
; then
3635 #include <epoxy/egl.h>
3636 int main(void) { return 0; }
3638 if compile_prog
"" "" ; then
3643 if test "$epoxy" = "yes" ; then
3644 opengl_cflags
="$($pkg_config --cflags epoxy)"
3645 opengl_libs
="$($pkg_config --libs epoxy)"
3648 if test "$opengl" = "yes" ; then
3649 feature_not_found
"opengl" "Please install epoxy with EGL"
3657 ##########################################
3659 if test "$libxml2" != "no" ; then
3660 if $pkg_config --exists libxml-2.0
; then
3662 libxml2_cflags
=$
($pkg_config --cflags libxml-2.0
)
3663 libxml2_libs
=$
($pkg_config --libs libxml-2.0
)
3665 if test "$libxml2" = "yes"; then
3666 feature_not_found
"libxml2" "Install libxml2 devel"
3672 # Check for inotify functions when we are building linux-user
3673 # emulator. This is done because older glibc versions don't
3674 # have syscall stubs for these implemented. In that case we
3675 # don't provide them even if kernel supports them.
3679 #include <sys/inotify.h>
3684 /* try to start inotify */
3685 return inotify_init();
3688 if compile_prog
"" "" ; then
3694 #include <sys/inotify.h>
3699 /* try to start inotify */
3700 return inotify_init1(0);
3703 if compile_prog
"" "" ; then
3707 # check if pipe2 is there
3716 return pipe2(pipefd, O_CLOEXEC);
3719 if compile_prog
"" "" ; then
3723 # check if accept4 is there
3726 #include <sys/socket.h>
3731 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3735 if compile_prog
"" "" ; then
3739 # check if tee/splice is there. vmsplice was added same time.
3749 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3750 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3754 if compile_prog
"" "" ; then
3758 ##########################################
3761 if test "$numa" != "no" ; then
3764 int main(void) { return numa_available(); }
3767 if compile_prog
"" "-lnuma" ; then
3771 if test "$numa" = "yes" ; then
3772 feature_not_found
"numa" "install numactl devel"
3779 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3780 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3782 elif test "$tcmalloc" = "yes" ; then
3784 elif test "$jemalloc" = "yes" ; then
3788 ##########################################
3793 #include <sys/syscall.h>
3795 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3798 if compile_prog
"" "" ; then
3802 # check if optreset global is declared by <getopt.h>
3806 int main(void) { return optreset; }
3809 if compile_prog
"" "" ; then
3813 # check if eventfd is supported
3816 #include <sys/eventfd.h>
3820 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3823 if compile_prog
"" "" ; then
3827 # check if memfd is supported
3830 #include <sys/mman.h>
3834 return memfd_create("foo", MFD_ALLOW_SEALING);
3837 if compile_prog
"" "" ; then
3843 if test "$linux_user" = "yes"; then
3845 #include <linux/usbdevice_fs.h>
3847 #ifndef USBDEVFS_GET_CAPABILITIES
3848 #error "USBDEVFS_GET_CAPABILITIES undefined"
3851 #ifndef USBDEVFS_DISCONNECT_CLAIM
3852 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3860 if compile_prog
"" ""; then
3865 # check for fallocate
3872 fallocate(0, 0, 0, 0);
3876 if compile_prog
"" "" ; then
3880 # check for fallocate hole punching
3881 fallocate_punch_hole
=no
3884 #include <linux/falloc.h>
3888 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3892 if compile_prog
"" "" ; then
3893 fallocate_punch_hole
=yes
3896 # check that fallocate supports range zeroing inside the file
3897 fallocate_zero_range
=no
3900 #include <linux/falloc.h>
3904 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3908 if compile_prog
"" "" ; then
3909 fallocate_zero_range
=yes
3912 # check for posix_fallocate
3919 posix_fallocate(0, 0, 0);
3923 if compile_prog
"" "" ; then
3927 # check for sync_file_range
3934 sync_file_range(0, 0, 0, 0);
3938 if compile_prog
"" "" ; then
3942 # check for linux/fiemap.h and FS_IOC_FIEMAP
3945 #include <sys/ioctl.h>
3946 #include <linux/fs.h>
3947 #include <linux/fiemap.h>
3951 ioctl(0, FS_IOC_FIEMAP, 0);
3955 if compile_prog
"" "" ; then
3970 if compile_prog
"" "" ; then
3974 # check for ppoll support
3981 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3982 ppoll(&pfd, 1, 0, 0);
3986 if compile_prog
"" "" ; then
3990 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3991 prctl_pr_set_timerslack
=no
3993 #include <sys/prctl.h>
3997 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4001 if compile_prog
"" "" ; then
4002 prctl_pr_set_timerslack
=yes
4005 # check for epoll support
4008 #include <sys/epoll.h>
4016 if compile_prog
"" "" ; then
4020 # epoll_create1 is a later addition
4021 # so we must check separately for its presence
4024 #include <sys/epoll.h>
4028 /* Note that we use epoll_create1 as a value, not as
4029 * a function being called. This is necessary so that on
4030 * old SPARC glibc versions where the function was present in
4031 * the library but not declared in the header file we will
4032 * fail the configure check. (Otherwise we will get a compiler
4033 * warning but not an error, and will proceed to fail the
4034 * qemu compile where we compile with -Werror.)
4036 return (int)(uintptr_t)&epoll_create1;
4039 if compile_prog
"" "" ; then
4043 # check for sendfile support
4046 #include <sys/sendfile.h>
4050 return sendfile(0, 0, 0, 0);
4053 if compile_prog
"" "" ; then
4057 # check for timerfd support (glibc 2.8 and newer)
4060 #include <sys/timerfd.h>
4064 return(timerfd_create(CLOCK_REALTIME, 0));
4067 if compile_prog
"" "" ; then
4071 # check for setns and unshare support
4084 if compile_prog
"" "" ; then
4088 # clock_adjtime probe
4092 #include <sys/timex.h>
4096 return clock_adjtime(0, 0);
4100 if compile_prog
"" "" ; then
4115 if compile_prog
"" "" ; then
4119 # Search for bswap_32 function
4122 #include <byteswap.h>
4123 int main(void) { return bswap_32(0); }
4125 if compile_prog
"" "" ; then
4129 # Search for bswap32 function
4132 #include <sys/endian.h>
4133 #include <sys/types.h>
4134 #include <machine/bswap.h>
4135 int main(void) { return bswap32(0); }
4137 if compile_prog
"" "" ; then
4141 # Check whether we have openpty() in either libc or libutil
4143 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4144 int main(void) { return openpty(0, 0, 0, 0, 0); }
4148 if compile_prog
"" "" ; then
4151 if compile_prog
"" "-lutil" ; then
4156 ##########################################
4158 if test "$spice" != "no" ; then
4161 int main(void) { spice_server_new(); return 0; }
4163 spice_cflags
=$
($pkg_config --cflags spice-protocol spice-server
2>/dev
/null
)
4164 spice_libs
=$
($pkg_config --libs spice-protocol spice-server
2>/dev
/null
)
4165 if $pkg_config --atleast-version=0.12.5 spice-server
&& \
4166 $pkg_config --atleast-version=0.12.3 spice-protocol
&& \
4167 compile_prog
"$spice_cflags" "$spice_libs" ; then
4170 if test "$spice" = "yes" ; then
4171 feature_not_found
"spice" \
4172 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4178 # check for smartcard support
4179 if test "$smartcard" != "no"; then
4180 if $pkg_config --atleast-version=2.5.1 libcacard
; then
4181 libcacard_cflags
=$
($pkg_config --cflags libcacard
)
4182 libcacard_libs
=$
($pkg_config --libs libcacard
)
4185 if test "$smartcard" = "yes"; then
4186 feature_not_found
"smartcard" "Install libcacard devel"
4193 if test "$libusb" != "no" ; then
4194 if $pkg_config --atleast-version=1.0.13 libusb-1.0
; then
4196 libusb_cflags
=$
($pkg_config --cflags libusb-1.0
)
4197 libusb_libs
=$
($pkg_config --libs libusb-1.0
)
4199 if test "$libusb" = "yes"; then
4200 feature_not_found
"libusb" "Install libusb devel >= 1.0.13"
4206 # check for usbredirparser for usb network redirection support
4207 if test "$usb_redir" != "no" ; then
4208 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5
; then
4210 usb_redir_cflags
=$
($pkg_config --cflags libusbredirparser-0.5
)
4211 usb_redir_libs
=$
($pkg_config --libs libusbredirparser-0.5
)
4213 if test "$usb_redir" = "yes"; then
4214 feature_not_found
"usb-redir" "Install usbredir devel"
4220 ##########################################
4221 # check if we have VSS SDK headers for win
4223 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4224 test "$vss_win32_sdk" != "no" ; then
4225 case "$vss_win32_sdk" in
4226 "") vss_win32_include
="-isystem $source_path" ;;
4227 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
4228 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4229 vss_win32_include
="-isystem $source_path/.sdk/vss"
4230 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4232 *) vss_win32_include
="-isystem $vss_win32_sdk"
4235 #define __MIDL_user_allocate_free_DEFINED__
4236 #include <inc/win2003/vss.h>
4237 int main(void) { return VSS_CTX_BACKUP; }
4239 if compile_prog
"$vss_win32_include" "" ; then
4240 guest_agent_with_vss
="yes"
4241 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
4242 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4243 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4245 if test "$vss_win32_sdk" != "" ; then
4246 echo "ERROR: Please download and install Microsoft VSS SDK:"
4247 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4248 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4249 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4250 echo "ERROR: The headers are extracted in the directory \`inc'."
4251 feature_not_found
"VSS support"
4253 guest_agent_with_vss
="no"
4257 ##########################################
4258 # lookup Windows platform SDK (if not specified)
4259 # The SDK is needed only to build .tlb (type library) file of guest agent
4260 # VSS provider from the source. It is usually unnecessary because the
4261 # pre-compiled .tlb file is included.
4263 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4264 test "$guest_agent_with_vss" = "yes" ; then
4265 if test -z "$win_sdk"; then
4266 programfiles
="$PROGRAMFILES"
4267 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
4268 if test -n "$programfiles"; then
4269 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
4271 feature_not_found
"Windows SDK"
4273 elif test "$win_sdk" = "no"; then
4278 ##########################################
4279 # check if mingw environment provides a recent ntddscsi.h
4280 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4282 #include <windows.h>
4283 #include <ntddscsi.h>
4285 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4286 #error Missing required ioctl definitions
4288 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4292 if compile_prog
"" "" ; then
4293 guest_agent_ntddscsi
=yes
4294 libs_qga
="-lsetupapi -lcfgmgr32 $libs_qga"
4298 ##########################################
4299 # virgl renderer probe
4301 if test "$virglrenderer" != "no" ; then
4303 #include <virglrenderer.h>
4304 int main(void) { virgl_renderer_poll(); return 0; }
4306 virgl_cflags
=$
($pkg_config --cflags virglrenderer
2>/dev
/null
)
4307 virgl_libs
=$
($pkg_config --libs virglrenderer
2>/dev
/null
)
4308 virgl_version
=$
($pkg_config --modversion virglrenderer
2>/dev
/null
)
4309 if $pkg_config virglrenderer
>/dev
/null
2>&1 && \
4310 compile_prog
"$virgl_cflags" "$virgl_libs" ; then
4313 if test "$virglrenderer" = "yes" ; then
4314 feature_not_found
"virglrenderer"
4320 ##########################################
4324 auto | enabled | internal
)
4325 # Simpler to always update submodule, even if not needed.
4326 if test "$git_submodules_action" != "ignore"; then
4327 git_submodules
="${git_submodules} capstone"
4332 ##########################################
4333 # check if we have fdatasync
4339 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4340 return fdatasync(0);
4342 #error Not supported
4346 if compile_prog
"" "" ; then
4350 ##########################################
4351 # check if we have madvise
4355 #include <sys/types.h>
4356 #include <sys/mman.h>
4358 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4360 if compile_prog
"" "" ; then
4364 ##########################################
4365 # check if we have posix_madvise
4369 #include <sys/mman.h>
4371 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4373 if compile_prog
"" "" ; then
4377 ##########################################
4378 # check if we have posix_memalign()
4385 return posix_memalign(&p, 8, 8);
4388 if compile_prog
"" "" ; then
4392 ##########################################
4393 # check if we have posix_syslog
4398 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4400 if compile_prog
"" "" ; then
4404 ##########################################
4405 # check if we have sem_timedwait
4409 #include <semaphore.h>
4410 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4412 if compile_prog
"" "" ; then
4416 ##########################################
4417 # check if we have strchrnul
4423 // Use a haystack that the compiler shouldn't be able to constant fold
4424 char *haystack = (char*)&main;
4425 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4427 if compile_prog
"" "" ; then
4431 #########################################
4432 # check if we have st_atim
4436 #include <sys/stat.h>
4438 int main(void) { return offsetof(struct stat, st_atim); }
4440 if compile_prog
"" "" ; then
4444 ##########################################
4445 # check if trace backend exists
4447 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev
/null
2> /dev
/null
4448 if test "$?" -ne 0 ; then
4449 error_exit
"invalid trace backends" \
4450 "Please choose supported trace backends."
4453 ##########################################
4454 # For 'ust' backend, test if ust headers are present
4455 if have_backend
"ust"; then
4457 #include <lttng/tracepoint.h>
4458 int main(void) { return 0; }
4460 if compile_prog
"" "-Wl,--no-as-needed -ldl" ; then
4461 if $pkg_config lttng-ust
--exists; then
4462 lttng_ust_libs
=$
($pkg_config --libs lttng-ust
)
4464 lttng_ust_libs
="-llttng-ust -ldl"
4466 if $pkg_config liburcu-bp
--exists; then
4467 urcu_bp_libs
=$
($pkg_config --libs liburcu-bp
)
4469 urcu_bp_libs
="-lurcu-bp"
4472 error_exit
"Trace backend 'ust' missing lttng-ust header files"
4476 ##########################################
4477 # For 'dtrace' backend, test if 'dtrace' command is present
4478 if have_backend
"dtrace"; then
4479 if ! has
'dtrace' ; then
4480 error_exit
"dtrace command is not found in PATH $PATH"
4482 trace_backend_stap
="no"
4483 if has
'stap' ; then
4484 trace_backend_stap
="yes"
4486 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4487 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4488 # instead. QEMU --enable-modules depends on this because the SystemTap
4489 # semaphores are linked into the main binary and not the module's shared
4491 QEMU_CFLAGS
="$QEMU_CFLAGS -DSTAP_SDT_V2"
4495 ##########################################
4496 # check and set a backend for coroutine
4498 # We prefer ucontext, but it's not always possible. The fallback
4499 # is sigcontext. On Windows the only valid backend is the Windows
4503 if test "$darwin" != "yes"; then
4505 #include <ucontext.h>
4506 #ifdef __stub_makecontext
4507 #error Ignoring glibc stub makecontext which will always fail
4509 int main(void) { makecontext(0, 0, 0); return 0; }
4511 if compile_prog
"" "" ; then
4516 if test "$coroutine" = ""; then
4517 if test "$mingw32" = "yes"; then
4519 elif test "$ucontext_works" = "yes"; then
4522 coroutine
=sigaltstack
4527 if test "$mingw32" != "yes"; then
4528 error_exit
"'windows' coroutine backend only valid for Windows"
4530 # Unfortunately the user visible backend name doesn't match the
4531 # coroutine-*.c filename for this case, so we have to adjust it here.
4535 if test "$ucontext_works" != "yes"; then
4536 feature_not_found
"ucontext"
4540 if test "$mingw32" = "yes"; then
4541 error_exit
"only the 'windows' coroutine backend is valid for Windows"
4545 error_exit
"unknown coroutine backend $coroutine"
4550 if test "$coroutine_pool" = ""; then
4554 if test "$debug_stack_usage" = "yes"; then
4555 if test "$coroutine_pool" = "yes"; then
4556 echo "WARN: disabling coroutine pool for stack usage debugging"
4561 ##################################################
4565 if test "$safe_stack" = "yes"; then
4567 int main(int argc, char *argv[])
4569 #if ! __has_feature(safe_stack)
4570 #error SafeStack Disabled
4575 flag
="-fsanitize=safe-stack"
4576 # Check that safe-stack is supported and enabled.
4577 if compile_prog
"-Werror $flag" "$flag"; then
4578 # Flag needed both at compilation and at linking
4579 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
4580 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
4582 error_exit
"SafeStack not supported by your compiler"
4584 if test "$coroutine" != "ucontext"; then
4585 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
4589 int main(int argc, char *argv[])
4591 #if defined(__has_feature)
4592 #if __has_feature(safe_stack)
4593 #error SafeStack Enabled
4599 if test "$safe_stack" = "no"; then
4600 # Make sure that safe-stack is disabled
4601 if ! compile_prog
"-Werror" ""; then
4602 # SafeStack was already enabled, try to explicitly remove the feature
4603 flag
="-fno-sanitize=safe-stack"
4604 if ! compile_prog
"-Werror $flag" "$flag"; then
4605 error_exit
"Configure cannot disable SafeStack"
4607 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
4608 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
4610 else # "$safe_stack" = ""
4611 # Set safe_stack to yes or no based on pre-existing flags
4612 if compile_prog
"-Werror" ""; then
4616 if test "$coroutine" != "ucontext"; then
4617 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
4623 ##########################################
4624 # check if we have open_by_handle_at
4626 open_by_handle_at
=no
4629 #if !defined(AT_EMPTY_PATH)
4630 # error missing definition
4632 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4635 if compile_prog
"" "" ; then
4636 open_by_handle_at
=yes
4639 ########################################
4640 # check if we have linux/magic.h
4644 #include <linux/magic.h>
4649 if compile_prog
"" "" ; then
4653 ########################################
4654 # check if we have valgrind/valgrind.h
4658 #include <valgrind/valgrind.h>
4663 if compile_prog
"" "" ; then
4667 ########################################
4668 # check if environ is declared
4678 if compile_prog
"" "" ; then
4682 ########################################
4683 # check if cpuid.h is usable.
4688 unsigned a, b, c, d;
4689 int max = __get_cpuid_max(0, 0);
4692 __cpuid(1, a, b, c, d);
4696 __cpuid_count(7, 0, a, b, c, d);
4702 if compile_prog
"" "" ; then
4706 ##########################################
4707 # avx2 optimization requirement check
4709 # There is no point enabling this if cpuid.h is not usable,
4710 # since we won't be able to select the new routines.
4712 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
4714 #pragma GCC push_options
4715 #pragma GCC target("avx2")
4717 #include <immintrin.h>
4718 static int bar(void *a) {
4719 __m256i x = *(__m256i *)a;
4720 return _mm256_testz_si256(x, x);
4722 int main(int argc, char *argv[]) { return bar(argv[0]); }
4724 if compile_object
"" ; then
4731 ##########################################
4732 # avx512f optimization requirement check
4734 # There is no point enabling this if cpuid.h is not usable,
4735 # since we won't be able to select the new routines.
4736 # by default, it is turned off.
4737 # if user explicitly want to enable it, check environment
4739 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
4741 #pragma GCC push_options
4742 #pragma GCC target("avx512f")
4744 #include <immintrin.h>
4745 static int bar(void *a) {
4746 __m512i x = *(__m512i *)a;
4747 return _mm512_test_epi64_mask(x, x);
4749 int main(int argc, char *argv[])
4751 return bar(argv[0]);
4754 if ! compile_object
"" ; then
4761 ########################################
4762 # check if __[u]int128_t is usable.
4775 if compile_prog
"" "" ; then
4779 #########################################
4780 # See if 128-bit atomic operations are supported.
4783 if test "$int128" = "yes"; then
4787 unsigned __int128 x = 0, y = 0;
4788 y = __atomic_load(&x, 0);
4789 __atomic_store(&x, y, 0);
4790 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
4794 if compile_prog
"" "" ; then
4800 if test "$int128" = yes && test "$atomic128" = no
; then
4804 unsigned __int128 x = 0, y = 0;
4805 __sync_val_compare_and_swap_16(&x, y, x);
4809 if compile_prog
"" "" ; then
4814 #########################################
4815 # See if 64-bit atomic operations are supported.
4816 # Note that without __atomic builtins, we can only
4817 # assume atomic loads/stores max at pointer size.
4823 uint64_t x = 0, y = 0;
4824 #ifdef __ATOMIC_RELAXED
4825 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
4826 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
4827 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
4828 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
4829 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4831 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4832 __sync_lock_test_and_set(&x, y);
4833 __sync_val_compare_and_swap(&x, y, 0);
4834 __sync_fetch_and_add(&x, y);
4839 if compile_prog
"" "" ; then
4843 #########################################
4844 # See if --dynamic-list is supported by the linker
4845 ld_dynamic_list
="no"
4846 if test "$static" = "no" ; then
4869 if compile_prog
"" "-Wl,--dynamic-list=$TMPTXT" ; then
4870 ld_dynamic_list
="yes"
4874 #########################################
4875 # See if -exported_symbols_list is supported by the linker
4877 ld_exported_symbols_list
="no"
4878 if test "$static" = "no" ; then
4883 if compile_prog
"" "-Wl,-exported_symbols_list,$TMPTXT" ; then
4884 ld_exported_symbols_list
="yes"
4888 if test "$plugins" = "yes" &&
4889 test "$ld_dynamic_list" = "no" &&
4890 test "$ld_exported_symbols_list" = "no" ; then
4892 "Plugin support requires dynamic linking and specifying a set of symbols " \
4893 "that are exported to plugins. Unfortunately your linker doesn't " \
4894 "support the flag (--dynamic-list or -exported_symbols_list) used " \
4895 "for this purpose. You can't build with --static."
4898 ########################################
4899 # check if getauxval is available.
4903 #include <sys/auxv.h>
4905 return getauxval(AT_HWCAP) == 0;
4908 if compile_prog
"" "" ; then
4912 ########################################
4913 # check if ccache is interfering with
4914 # semantic analysis of macros
4919 static const int Z = 1;
4920 #define fn() ({ Z; })
4921 #define TAUT(X) ((X) == Z)
4922 #define PAREN(X, Y) (X == Y)
4924 int main(int argc, char *argv[])
4930 if (PAREN(x, y)) return 0;
4931 if (TAUT(Z)) return 0;
4936 if ! compile_object
"-Werror"; then
4940 #################################################
4941 # clang does not support glibc + FORTIFY_SOURCE.
4943 if test "$fortify_source" != "no"; then
4944 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
4945 fortify_source
="no";
4946 elif test -n "$cxx" && has
$cxx &&
4947 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
4948 fortify_source
="no";
4950 fortify_source
="yes"
4954 ###############################################
4955 # Check if copy_file_range is provided by glibc
4956 have_copy_file_range
=no
4960 copy_file_range(0, NULL, 0, NULL, 0, 0);
4964 if compile_prog
"" "" ; then
4965 have_copy_file_range
=yes
4968 ##########################################
4969 # check if struct fsxattr is available via linux/fs.h
4973 #include <linux/fs.h>
4979 if compile_prog
"" "" ; then
4983 ##########################################
4984 # check for usable membarrier system call
4985 if test "$membarrier" = "yes"; then
4987 if test "$mingw32" = "yes" ; then
4989 elif test "$linux" = "yes" ; then
4991 #include <linux/membarrier.h>
4992 #include <sys/syscall.h>
4996 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4997 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5001 if compile_prog
"" "" ; then
5005 if test "$have_membarrier" = "no"; then
5006 feature_not_found
"membarrier" "membarrier system call not available"
5009 # Do not enable it by default even for Mingw32, because it doesn't
5014 ##########################################
5015 # check if rtnetlink.h exists and is useful
5018 #include <linux/rtnetlink.h>
5020 return IFLA_PROTO_DOWN;
5023 if compile_prog
"" "" ; then
5027 ##########################################
5028 # check for usable AF_VSOCK environment
5032 #include <sys/types.h>
5033 #include <sys/socket.h>
5034 #if !defined(AF_VSOCK)
5035 # error missing AF_VSOCK flag
5037 #include <linux/vm_sockets.h>
5040 struct sockaddr_vm svm;
5041 socklen_t len = sizeof(svm);
5042 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5043 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5044 if ((ret == -1) && (errno == ENOTCONN)) {
5050 if compile_prog
"" "" ; then
5054 ##########################################
5055 # check for usable AF_ALG environment
5059 #include <sys/types.h>
5060 #include <sys/socket.h>
5061 #include <linux/if_alg.h>
5064 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5068 if compile_prog
"" "" ; then
5071 if test "$crypto_afalg" = "yes"
5073 if test "$have_afalg" != "yes"
5075 error_exit
"AF_ALG requested but could not be detected"
5080 #################################################
5081 # check for sysmacros.h
5085 #include <sys/sysmacros.h>
5087 return makedev(0, 0);
5090 if compile_prog
"" "" ; then
5094 ##########################################
5095 # check for _Static_assert()
5097 have_static_assert
=no
5099 _Static_assert(1, "success");
5104 if compile_prog
"" "" ; then
5105 have_static_assert
=yes
5108 ##########################################
5109 # check for utmpx.h, it is missing e.g. on OpenBSD
5114 struct utmpx user_info;
5119 if compile_prog
"" "" ; then
5123 ##########################################
5124 # check for getrandom()
5128 #include <sys/random.h>
5130 return getrandom(0, 0, GRND_NONBLOCK);
5133 if compile_prog
"" "" ; then
5137 ##########################################
5138 # checks for sanitizers
5142 have_asan_iface_h
=no
5143 have_asan_iface_fiber
=no
5145 if test "$sanitizers" = "yes" ; then
5147 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5151 # we could use a simple skeleton for flags checks, but this also
5152 # detect the static linking issue of ubsan, see also:
5153 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5157 void *tmp = malloc(10);
5159 return *(int *)(tmp + 2);
5164 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5168 if check_include
"sanitizer/asan_interface.h" ; then
5169 have_asan_iface_h
=yes
5173 #include <sanitizer/asan_interface.h>
5175 __sanitizer_start_switch_fiber(0, 0, 0);
5179 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5180 have_asan_iface_fiber
=yes
5184 ##########################################
5186 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5187 write_c_fuzzer_skeleton
5188 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5191 error_exit
"Your compiler doesn't support -fsanitize=fuzzer"
5196 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5197 # keep it separate until that is not the case.
5198 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5199 error_exit
"TSAN is not supported with other sanitiziers."
5202 have_tsan_iface_fiber
=no
5203 if test "$tsan" = "yes" ; then
5205 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5209 #include <sanitizer/tsan_interface.h>
5211 __tsan_create_fiber(0);
5215 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5216 have_tsan_iface_fiber
=yes
5220 ##########################################
5223 if test "$libpmem" != "no"; then
5224 if $pkg_config --exists "libpmem"; then
5226 libpmem_libs
=$
($pkg_config --libs libpmem
)
5227 libpmem_cflags
=$
($pkg_config --cflags libpmem
)
5229 if test "$libpmem" = "yes" ; then
5230 feature_not_found
"libpmem" "Install nvml or pmdk"
5236 ##########################################
5237 # check for libdaxctl
5239 if test "$libdaxctl" != "no"; then
5240 if $pkg_config --atleast-version=57 "libdaxctl"; then
5242 libdaxctl_libs
=$
($pkg_config --libs libdaxctl
)
5243 libdaxctl_cflags
=$
($pkg_config --cflags libdaxctl
)
5245 if test "$libdaxctl" = "yes" ; then
5246 feature_not_found
"libdaxctl" "Install libdaxctl"
5252 ##########################################
5256 auto | enabled | internal
)
5257 # Simpler to always update submodule, even if not needed.
5258 if test "$git_submodules_action" != "ignore"; then
5259 git_submodules
="${git_submodules} slirp"
5264 ##########################################
5265 # check for usable __NR_keyctl syscall
5267 if test "$linux" = "yes" ; then
5272 #include <asm/unistd.h>
5273 #include <linux/keyctl.h>
5276 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5279 if compile_prog
"" "" ; then
5283 if test "$secret_keyring" != "no"
5285 if test "$have_keyring" = "yes"
5289 if test "$secret_keyring" = "yes"
5291 error_exit
"syscall __NR_keyctl requested, \
5292 but not implemented on your system"
5299 ##########################################
5301 # After here, no more $cc or $ld runs
5305 if test "$gcov" = "yes" ; then
5307 elif test "$fortify_source" = "yes" ; then
5308 QEMU_CFLAGS
="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5314 # Ensure there's only a single GP
5315 QEMU_CFLAGS
="-msmall-data $QEMU_CFLAGS"
5319 if test "$gprof" = "yes" ; then
5320 QEMU_CFLAGS
="-p $QEMU_CFLAGS"
5321 QEMU_LDFLAGS
="-p $QEMU_LDFLAGS"
5324 if test "$have_asan" = "yes"; then
5325 QEMU_CFLAGS
="-fsanitize=address $QEMU_CFLAGS"
5326 QEMU_LDFLAGS
="-fsanitize=address $QEMU_LDFLAGS"
5327 if test "$have_asan_iface_h" = "no" ; then
5328 echo "ASAN build enabled, but ASAN header missing." \
5329 "Without code annotation, the report may be inferior."
5330 elif test "$have_asan_iface_fiber" = "no" ; then
5331 echo "ASAN build enabled, but ASAN header is too old." \
5332 "Without code annotation, the report may be inferior."
5335 if test "$have_tsan" = "yes" ; then
5336 if test "$have_tsan_iface_fiber" = "yes" ; then
5337 QEMU_CFLAGS
="-fsanitize=thread $QEMU_CFLAGS"
5338 QEMU_LDFLAGS
="-fsanitize=thread $QEMU_LDFLAGS"
5340 error_exit
"Cannot enable TSAN due to missing fiber annotation interface."
5342 elif test "$tsan" = "yes" ; then
5343 error_exit
"Cannot enable TSAN due to missing sanitize thread interface."
5345 if test "$have_ubsan" = "yes"; then
5346 QEMU_CFLAGS
="-fsanitize=undefined $QEMU_CFLAGS"
5347 QEMU_LDFLAGS
="-fsanitize=undefined $QEMU_LDFLAGS"
5350 ##########################################
5352 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5353 if test "$solaris" = "no" && test "$tsan" = "no"; then
5354 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
5355 QEMU_LDFLAGS
="-Wl,--warn-common $QEMU_LDFLAGS"
5359 # Use ASLR, no-SEH and DEP if available
5360 if test "$mingw32" = "yes" ; then
5361 flags
="--no-seh --nxcompat"
5363 # Disable ASLR for debug builds to allow debugging with gdb
5364 if test "$debug" = "no" ; then
5365 flags
="--dynamicbase $flags"
5368 for flag
in $flags; do
5369 if ld_has
$flag ; then
5370 QEMU_LDFLAGS
="-Wl,$flag $QEMU_LDFLAGS"
5375 # We can only support ivshmem if we have eventfd
5376 if [ "$eventfd" = "yes" ]; then
5380 # Probe for guest agent support/options
5382 if [ "$guest_agent" != "no" ]; then
5383 if [ "$softmmu" = no
-a "$want_tools" = no
] ; then
5385 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5387 elif [ "$guest_agent" != yes ]; then
5390 error_exit
"Guest agent is not supported on this platform"
5394 # Guest agent Windows MSI package
5396 if test "$QEMU_GA_MANUFACTURER" = ""; then
5397 QEMU_GA_MANUFACTURER
=QEMU
5399 if test "$QEMU_GA_DISTRO" = ""; then
5400 QEMU_GA_DISTRO
=Linux
5402 if test "$QEMU_GA_VERSION" = ""; then
5403 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
5406 QEMU_GA_MSI_MINGW_DLL_PATH
="$($pkg_config --variable=prefix glib-2.0)/bin"
5408 # Mac OS X ships with a broken assembler
5410 if { test "$cpu" = "i386" ||
test "$cpu" = "x86_64"; } && \
5411 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5412 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5413 # Different host OS linkers have different ideas about the name of the ELF
5414 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5415 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5416 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
5417 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5418 ld_i386_emulation
="$emu"
5425 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5426 if test "$cpu" = "s390x" ; then
5428 if compile_prog
"-march=z900" ""; then
5429 roms
="$roms s390-ccw"
5430 # SLOF is required for building the s390-ccw firmware on s390x,
5431 # since it is using the libnet code from SLOF for network booting.
5432 if test "$git_submodules_action" != "ignore"; then
5433 git_submodules
="${git_submodules} roms/SLOF"
5438 # Check that the C++ compiler exists and works with the C compiler.
5439 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5442 int c_function(void);
5443 int main(void) { return c_function(); }
5450 int c_function(void);
5452 int c_function(void) { return 42; }
5457 if do_cxx
$CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5458 # C++ compiler $cxx works ok with C compiler $cc
5461 echo "C++ compiler $cxx does not work with C compiler $cc"
5462 echo "Disabling C++ specific optional code"
5466 echo "No C++ compiler available; disabling C++ specific optional code"
5470 if !(GIT
="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
5474 config_host_mak
="config-host.mak"
5476 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5477 echo >> $config_host_mak
5479 echo all
: >> $config_host_mak
5480 echo "GIT=$git" >> $config_host_mak
5481 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5482 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
5484 echo "ARCH=$ARCH" >> $config_host_mak
5486 if test "$debug_tcg" = "yes" ; then
5487 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5489 if test "$strip_opt" = "yes" ; then
5490 echo "STRIP=${strip}" >> $config_host_mak
5492 if test "$bigendian" = "yes" ; then
5493 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5495 if test "$mingw32" = "yes" ; then
5496 echo "CONFIG_WIN32=y" >> $config_host_mak
5497 if test "$guest_agent_with_vss" = "yes" ; then
5498 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5499 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5500 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5502 if test "$guest_agent_ntddscsi" = "yes" ; then
5503 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5505 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5506 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5507 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5508 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5510 echo "CONFIG_POSIX=y" >> $config_host_mak
5513 if test "$linux" = "yes" ; then
5514 echo "CONFIG_LINUX=y" >> $config_host_mak
5517 if test "$darwin" = "yes" ; then
5518 echo "CONFIG_DARWIN=y" >> $config_host_mak
5521 if test "$solaris" = "yes" ; then
5522 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5524 if test "$haiku" = "yes" ; then
5525 echo "CONFIG_HAIKU=y" >> $config_host_mak
5527 if test "$static" = "yes" ; then
5528 echo "CONFIG_STATIC=y" >> $config_host_mak
5530 if test "$profiler" = "yes" ; then
5531 echo "CONFIG_PROFILER=y" >> $config_host_mak
5533 if test "$want_tools" = "yes" ; then
5534 echo "CONFIG_TOOLS=y" >> $config_host_mak
5536 if test "$guest_agent" = "yes" ; then
5537 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5539 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5540 if test "$vde" = "yes" ; then
5541 echo "CONFIG_VDE=y" >> $config_host_mak
5542 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5544 if test "$netmap" = "yes" ; then
5545 echo "CONFIG_NETMAP=y" >> $config_host_mak
5547 if test "$l2tpv3" = "yes" ; then
5548 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5550 if test "$gprof" = "yes" ; then
5551 echo "CONFIG_GPROF=y" >> $config_host_mak
5553 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5554 for drv
in $audio_drv_list; do
5555 def
=CONFIG_AUDIO_$
(echo $drv | LC_ALL
=C
tr '[a-z]' '[A-Z]')
5556 echo "$def=y" >> $config_host_mak
5558 if test "$alsa" = "yes" ; then
5559 echo "CONFIG_ALSA=y" >> $config_host_mak
5561 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5562 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5563 if test "$libpulse" = "yes" ; then
5564 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5566 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5567 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5568 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5569 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5570 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5571 if test "$libjack" = "yes" ; then
5572 echo "CONFIG_LIBJACK=y" >> $config_host_mak
5574 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
5575 if test "$audio_win_int" = "yes" ; then
5576 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5578 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5579 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5580 if test "$xfs" = "yes" ; then
5581 echo "CONFIG_XFS=y" >> $config_host_mak
5583 qemu_version
=$
(head $source_path/VERSION
)
5584 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5585 echo "SRC_PATH=$source_path" >> $config_host_mak
5586 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5587 if test "$modules" = "yes"; then
5588 # $shacmd can generate a hash started with digit, which the compiler doesn't
5589 # like as an symbol. So prefix it with an underscore
5590 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5591 echo "CONFIG_MODULES=y" >> $config_host_mak
5593 if test "$module_upgrades" = "yes"; then
5594 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5596 if test "$pipe2" = "yes" ; then
5597 echo "CONFIG_PIPE2=y" >> $config_host_mak
5599 if test "$accept4" = "yes" ; then
5600 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5602 if test "$splice" = "yes" ; then
5603 echo "CONFIG_SPLICE=y" >> $config_host_mak
5605 if test "$eventfd" = "yes" ; then
5606 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5608 if test "$memfd" = "yes" ; then
5609 echo "CONFIG_MEMFD=y" >> $config_host_mak
5611 if test "$have_usbfs" = "yes" ; then
5612 echo "CONFIG_USBFS=y" >> $config_host_mak
5614 if test "$fallocate" = "yes" ; then
5615 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5617 if test "$fallocate_punch_hole" = "yes" ; then
5618 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5620 if test "$fallocate_zero_range" = "yes" ; then
5621 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5623 if test "$posix_fallocate" = "yes" ; then
5624 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5626 if test "$sync_file_range" = "yes" ; then
5627 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5629 if test "$fiemap" = "yes" ; then
5630 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5632 if test "$dup3" = "yes" ; then
5633 echo "CONFIG_DUP3=y" >> $config_host_mak
5635 if test "$ppoll" = "yes" ; then
5636 echo "CONFIG_PPOLL=y" >> $config_host_mak
5638 if test "$prctl_pr_set_timerslack" = "yes" ; then
5639 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5641 if test "$epoll" = "yes" ; then
5642 echo "CONFIG_EPOLL=y" >> $config_host_mak
5644 if test "$epoll_create1" = "yes" ; then
5645 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5647 if test "$sendfile" = "yes" ; then
5648 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5650 if test "$timerfd" = "yes" ; then
5651 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5653 if test "$setns" = "yes" ; then
5654 echo "CONFIG_SETNS=y" >> $config_host_mak
5656 if test "$clock_adjtime" = "yes" ; then
5657 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5659 if test "$syncfs" = "yes" ; then
5660 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5662 if test "$inotify" = "yes" ; then
5663 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5665 if test "$inotify1" = "yes" ; then
5666 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5668 if test "$sem_timedwait" = "yes" ; then
5669 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5671 if test "$strchrnul" = "yes" ; then
5672 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
5674 if test "$st_atim" = "yes" ; then
5675 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
5677 if test "$byteswap_h" = "yes" ; then
5678 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5680 if test "$bswap_h" = "yes" ; then
5681 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5683 if test "$gio" = "yes" ; then
5684 echo "CONFIG_GIO=y" >> $config_host_mak
5685 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5686 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5687 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5689 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5690 if test "$gnutls" = "yes" ; then
5691 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5692 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5693 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5695 if test "$gcrypt" = "yes" ; then
5696 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5697 if test "$gcrypt_hmac" = "yes" ; then
5698 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5700 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
5701 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
5703 if test "$nettle" = "yes" ; then
5704 echo "CONFIG_NETTLE=y" >> $config_host_mak
5705 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5706 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5707 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5709 if test "$qemu_private_xts" = "yes" ; then
5710 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5712 if test "$tasn1" = "yes" ; then
5713 echo "CONFIG_TASN1=y" >> $config_host_mak
5715 if test "$auth_pam" = "yes" ; then
5716 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
5718 if test "$have_broken_size_max" = "yes" ; then
5719 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5721 if test "$have_openpty" = "yes" ; then
5722 echo "HAVE_OPENPTY=y" >> $config_host_mak
5725 # Work around a system header bug with some kernel/XFS header
5726 # versions where they both try to define 'struct fsxattr':
5727 # xfs headers will not try to redefine structs from linux headers
5728 # if this macro is set.
5729 if test "$have_fsxattr" = "yes" ; then
5730 echo "HAVE_FSXATTR=y" >> $config_host_mak
5732 if test "$have_copy_file_range" = "yes" ; then
5733 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
5735 if test "$vte" = "yes" ; then
5736 echo "CONFIG_VTE=y" >> $config_host_mak
5737 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5738 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5740 if test "$virglrenderer" = "yes" ; then
5741 echo "CONFIG_VIRGL=y" >> $config_host_mak
5742 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5743 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5745 if test "$xen" = "enabled" ; then
5746 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5747 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5748 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5749 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5751 if test "$linux_aio" = "yes" ; then
5752 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5754 if test "$linux_io_uring" = "yes" ; then
5755 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5756 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5757 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5759 if test "$vhost_scsi" = "yes" ; then
5760 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5762 if test "$vhost_net" = "yes" ; then
5763 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5765 if test "$vhost_net_user" = "yes" ; then
5766 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
5768 if test "$vhost_net_vdpa" = "yes" ; then
5769 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5771 if test "$vhost_crypto" = "yes" ; then
5772 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5774 if test "$vhost_vsock" = "yes" ; then
5775 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5776 if test "$vhost_user" = "yes" ; then
5777 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
5780 if test "$vhost_kernel" = "yes" ; then
5781 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5783 if test "$vhost_user" = "yes" ; then
5784 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5786 if test "$vhost_vdpa" = "yes" ; then
5787 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5789 if test "$vhost_user_fs" = "yes" ; then
5790 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
5792 if test "$iovec" = "yes" ; then
5793 echo "CONFIG_IOVEC=y" >> $config_host_mak
5795 if test "$membarrier" = "yes" ; then
5796 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5798 if test "$signalfd" = "yes" ; then
5799 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5801 if test "$optreset" = "yes" ; then
5802 echo "HAVE_OPTRESET=y" >> $config_host_mak
5804 if test "$fdatasync" = "yes" ; then
5805 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5807 if test "$madvise" = "yes" ; then
5808 echo "CONFIG_MADVISE=y" >> $config_host_mak
5810 if test "$posix_madvise" = "yes" ; then
5811 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5813 if test "$posix_memalign" = "yes" ; then
5814 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
5816 if test "$spice" = "yes" ; then
5817 echo "CONFIG_SPICE=y" >> $config_host_mak
5818 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
5819 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5822 if test "$smartcard" = "yes" ; then
5823 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5824 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5825 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5828 if test "$libusb" = "yes" ; then
5829 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5830 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5831 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5834 if test "$usb_redir" = "yes" ; then
5835 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5836 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5837 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5840 if test "$opengl" = "yes" ; then
5841 echo "CONFIG_OPENGL=y" >> $config_host_mak
5842 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5843 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5846 if test "$gbm" = "yes" ; then
5847 echo "CONFIG_GBM=y" >> $config_host_mak
5848 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5849 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5853 if test "$avx2_opt" = "yes" ; then
5854 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5857 if test "$avx512f_opt" = "yes" ; then
5858 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
5861 # XXX: suppress that
5862 if [ "$bsd" = "yes" ] ; then
5863 echo "CONFIG_BSD=y" >> $config_host_mak
5866 if test "$qom_cast_debug" = "yes" ; then
5867 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5870 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5871 if test "$coroutine_pool" = "yes" ; then
5872 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5874 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5877 if test "$debug_stack_usage" = "yes" ; then
5878 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5881 if test "$crypto_afalg" = "yes" ; then
5882 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5885 if test "$open_by_handle_at" = "yes" ; then
5886 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5889 if test "$linux_magic_h" = "yes" ; then
5890 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5893 if test "$valgrind_h" = "yes" ; then
5894 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5897 if test "$have_asan_iface_fiber" = "yes" ; then
5898 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
5901 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
5902 echo "CONFIG_TSAN=y" >> $config_host_mak
5905 if test "$has_environ" = "yes" ; then
5906 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5909 if test "$cpuid_h" = "yes" ; then
5910 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5913 if test "$int128" = "yes" ; then
5914 echo "CONFIG_INT128=y" >> $config_host_mak
5917 if test "$atomic128" = "yes" ; then
5918 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5921 if test "$cmpxchg128" = "yes" ; then
5922 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
5925 if test "$atomic64" = "yes" ; then
5926 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5929 if test "$getauxval" = "yes" ; then
5930 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5933 if test "$libssh" = "yes" ; then
5934 echo "CONFIG_LIBSSH=y" >> $config_host_mak
5935 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
5936 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
5939 if test "$live_block_migration" = "yes" ; then
5940 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5943 if test "$tpm" = "yes"; then
5944 echo 'CONFIG_TPM=y' >> $config_host_mak
5947 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5948 if have_backend
"nop"; then
5949 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5951 if have_backend
"simple"; then
5952 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5953 # Set the appropriate trace file.
5954 trace_file
="\"$trace_file-\" FMT_pid"
5956 if have_backend
"log"; then
5957 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5959 if have_backend
"ust"; then
5960 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5961 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
5962 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
5964 if have_backend
"dtrace"; then
5965 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5966 if test "$trace_backend_stap" = "yes" ; then
5967 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5970 if have_backend
"ftrace"; then
5971 if test "$linux" = "yes" ; then
5972 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5974 feature_not_found
"ftrace(trace backend)" "ftrace requires Linux"
5977 if have_backend
"syslog"; then
5978 if test "$posix_syslog" = "yes" ; then
5979 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5981 feature_not_found
"syslog(trace backend)" "syslog not available"
5984 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5986 if test "$rdma" = "yes" ; then
5987 echo "CONFIG_RDMA=y" >> $config_host_mak
5988 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
5991 if test "$pvrdma" = "yes" ; then
5992 echo "CONFIG_PVRDMA=y" >> $config_host_mak
5995 if test "$have_rtnetlink" = "yes" ; then
5996 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5999 if test "$libxml2" = "yes" ; then
6000 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6001 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6002 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6005 if test "$replication" = "yes" ; then
6006 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6009 if test "$have_af_vsock" = "yes" ; then
6010 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6013 if test "$have_sysmacros" = "yes" ; then
6014 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6017 if test "$have_static_assert" = "yes" ; then
6018 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6021 if test "$have_utmpx" = "yes" ; then
6022 echo "HAVE_UTMPX=y" >> $config_host_mak
6024 if test "$have_getrandom" = "yes" ; then
6025 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6027 if test "$ivshmem" = "yes" ; then
6028 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6030 if test "$debug_mutex" = "yes" ; then
6031 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6034 # Hold two types of flag:
6035 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6036 # a thread we have a handle to
6037 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6039 if test "$pthread_setname_np_w_tid" = "yes" ; then
6040 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6041 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6042 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6043 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6044 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6047 if test "$libpmem" = "yes" ; then
6048 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6049 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6050 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6053 if test "$libdaxctl" = "yes" ; then
6054 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6055 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6058 if test "$bochs" = "yes" ; then
6059 echo "CONFIG_BOCHS=y" >> $config_host_mak
6061 if test "$cloop" = "yes" ; then
6062 echo "CONFIG_CLOOP=y" >> $config_host_mak
6064 if test "$dmg" = "yes" ; then
6065 echo "CONFIG_DMG=y" >> $config_host_mak
6067 if test "$qcow1" = "yes" ; then
6068 echo "CONFIG_QCOW1=y" >> $config_host_mak
6070 if test "$vdi" = "yes" ; then
6071 echo "CONFIG_VDI=y" >> $config_host_mak
6073 if test "$vvfat" = "yes" ; then
6074 echo "CONFIG_VVFAT=y" >> $config_host_mak
6076 if test "$qed" = "yes" ; then
6077 echo "CONFIG_QED=y" >> $config_host_mak
6079 if test "$parallels" = "yes" ; then
6080 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6082 if test "$sheepdog" = "yes" ; then
6083 add_to deprecated_features
"sheepdog"
6084 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6086 if test "$have_mlockall" = "yes" ; then
6087 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6089 if test "$fuzzing" = "yes" ; then
6090 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6091 # needed CFLAGS have already been provided
6092 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6093 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
6095 QEMU_CFLAGS
="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6096 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
6097 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
6098 # the fuzzer-related callbacks added by instrumentation.
6099 QEMU_LDFLAGS
="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
6100 # For the actual fuzzer binaries, we need to link against the libfuzzer
6101 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
6102 # rule for the fuzzer adds these to the link_args. They need to be
6103 # configurable, to support OSS-Fuzz
6104 FUZZ_EXE_LDFLAGS
="-fsanitize=fuzzer"
6106 FUZZ_EXE_LDFLAGS
="$LIB_FUZZING_ENGINE"
6110 if test "$plugins" = "yes" ; then
6111 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6112 # Copy the export object list to the build dir
6113 if test "$ld_dynamic_list" = "yes" ; then
6114 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6115 ld_symbols
=qemu-plugins-ld.symbols
6116 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6117 elif test "$ld_exported_symbols_list" = "yes" ; then
6118 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6119 ld64_symbols
=qemu-plugins-ld64.symbols
6120 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6121 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" |
sed 's/;//g' | \
6122 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6125 "If \$plugins=yes, either \$ld_dynamic_list or " \
6126 "\$ld_exported_symbols_list should have been set to 'yes'."
6130 if test -n "$gdb_bin"; then
6131 gdb_version
=$
($gdb_bin --version |
head -n 1)
6132 if version_ge
${gdb_version##* } 9.1; then
6133 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6137 if test "$secret_keyring" = "yes" ; then
6138 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6141 echo "ROMS=$roms" >> $config_host_mak
6142 echo "MAKE=$make" >> $config_host_mak
6143 echo "PYTHON=$python" >> $config_host_mak
6144 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6145 echo "MESON=$meson" >> $config_host_mak
6146 echo "NINJA=$ninja" >> $config_host_mak
6147 echo "CC=$cc" >> $config_host_mak
6148 if $iasl -h > /dev
/null
2>&1; then
6149 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6151 echo "CXX=$cxx" >> $config_host_mak
6152 echo "OBJCC=$objcc" >> $config_host_mak
6153 echo "AR=$ar" >> $config_host_mak
6154 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6155 echo "AS=$as" >> $config_host_mak
6156 echo "CCAS=$ccas" >> $config_host_mak
6157 echo "CPP=$cpp" >> $config_host_mak
6158 echo "OBJCOPY=$objcopy" >> $config_host_mak
6159 echo "LD=$ld" >> $config_host_mak
6160 echo "RANLIB=$ranlib" >> $config_host_mak
6161 echo "NM=$nm" >> $config_host_mak
6162 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6163 echo "WINDRES=$windres" >> $config_host_mak
6164 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6165 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6166 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6167 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6168 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6169 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6170 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6171 echo "EXESUF=$EXESUF" >> $config_host_mak
6172 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6173 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6174 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6175 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6176 if test "$gcov" = "yes" ; then
6177 echo "CONFIG_GCOV=y" >> $config_host_mak
6180 if test "$fuzzing" != "no"; then
6181 echo "CONFIG_FUZZ=y" >> $config_host_mak
6183 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6185 if test "$rng_none" = "yes"; then
6186 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6189 # use included Linux headers
6190 if test "$linux" = "yes" ; then
6191 mkdir
-p linux-headers
6209 # For most CPUs the kernel architecture name and QEMU CPU name match.
6213 # For non-KVM architectures we will not have asm headers
6214 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6215 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
6219 for target
in $target_list; do
6220 target_dir
="$target"
6221 target_name
=$
(echo $target | cut
-d '-' -f 1)
6222 mkdir
-p $target_dir
6224 *-user) symlink
"../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6225 *) symlink
"../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6229 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" |
sed 's/%M/@0@/' >> $config_host_mak
6230 if test "$default_targets" = "yes"; then
6231 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6234 if test "$numa" = "yes"; then
6235 echo "CONFIG_NUMA=y" >> $config_host_mak
6236 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6239 if test "$ccache_cpp2" = "yes"; then
6240 echo "export CCACHE_CPP2=y" >> $config_host_mak
6243 if test "$safe_stack" = "yes"; then
6244 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6247 # If we're using a separate build tree, set it up now.
6248 # DIRS are directories which we simply mkdir in the build tree;
6249 # LINKS are things to symlink back into the source tree
6250 # (these can be both files and directories).
6251 # Caution: do not add files or directories here using wildcards. This
6252 # will result in problems later if a new file matching the wildcard is
6253 # added to the source tree -- nothing will cause configure to be rerun
6254 # so the build tree will be missing the link back to the new file, and
6255 # tests might fail. Prefer to keep the relevant files in their own
6256 # directory and symlink the directory instead.
6257 # UNLINK is used to remove symlinks from older development versions
6258 # that might get into the way when doing "git update" without doing
6259 # a "make distclean" in between.
6260 DIRS
="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6261 DIRS
="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6262 DIRS
="$DIRS docs docs/interop fsdev scsi"
6263 DIRS
="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6264 DIRS
="$DIRS roms/seabios"
6265 DIRS
="$DIRS contrib/plugins/"
6267 LINKS
="$LINKS tests/tcg/lm32/Makefile"
6268 LINKS
="$LINKS tests/tcg/Makefile.target"
6269 LINKS
="$LINKS pc-bios/optionrom/Makefile"
6270 LINKS
="$LINKS pc-bios/s390-ccw/Makefile"
6271 LINKS
="$LINKS roms/seabios/Makefile"
6272 LINKS
="$LINKS pc-bios/qemu-icon.bmp"
6273 LINKS
="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6274 LINKS
="$LINKS tests/acceptance tests/data"
6275 LINKS
="$LINKS tests/qemu-iotests/check"
6276 LINKS
="$LINKS python"
6277 LINKS
="$LINKS contrib/plugins/Makefile "
6278 UNLINK
="pc-bios/keymaps"
6280 $source_path/pc-bios
/*.bin \
6281 $source_path/pc-bios
/*.elf \
6282 $source_path/pc-bios
/*.lid \
6283 $source_path/pc-bios
/*.rom \
6284 $source_path/pc-bios
/*.dtb \
6285 $source_path/pc-bios
/*.img \
6286 $source_path/pc-bios
/openbios-
* \
6287 $source_path/pc-bios
/u-boot.
* \
6288 $source_path/pc-bios
/edk2-
*.fd.bz2 \
6289 $source_path/pc-bios
/palcode-
*
6291 LINKS
="$LINKS pc-bios/$(basename $bios_file)"
6294 for f
in $LINKS ; do
6295 if [ -e "$source_path/$f" ]; then
6296 symlink
"$source_path/$f" "$f"
6299 for f
in $UNLINK ; do
6300 if [ -L "$f" ]; then
6305 (for i
in $cross_cc_vars; do
6308 export target_list source_path use_containers ARCH
6309 $source_path/tests
/tcg
/configure.sh
)
6311 # temporary config to build submodules
6312 for rom
in seabios
; do
6313 config_mak
=roms
/$rom/config.mak
6314 echo "# Automatically generated by configure - do not modify" > $config_mak
6315 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6316 echo "AS=$as" >> $config_mak
6317 echo "CCAS=$ccas" >> $config_mak
6318 echo "CC=$cc" >> $config_mak
6319 echo "BCC=bcc" >> $config_mak
6320 echo "CPP=$cpp" >> $config_mak
6321 echo "OBJCOPY=objcopy" >> $config_mak
6322 echo "IASL=$iasl" >> $config_mak
6323 echo "LD=$ld" >> $config_mak
6324 echo "RANLIB=$ranlib" >> $config_mak
6327 if test "$skip_meson" = no
; then
6328 cross
="config-meson.cross.new"
6330 echo "'$(echo $* | sed "s
/ /','/g
")'"
6333 echo "# Automatically generated by configure - do not modify" > $cross
6334 echo "[properties]" >> $cross
6335 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6336 echo "[built-in options]" >> $cross
6337 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6338 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6339 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6340 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6341 echo "[binaries]" >> $cross
6342 echo "c = [$(meson_quote $cc)]" >> $cross
6343 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6344 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
6345 echo "ar = [$(meson_quote $ar)]" >> $cross
6346 echo "nm = [$(meson_quote $nm)]" >> $cross
6347 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6348 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6349 if has
$sdl2_config; then
6350 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6352 echo "strip = [$(meson_quote $strip)]" >> $cross
6353 echo "windres = [$(meson_quote $windres)]" >> $cross
6354 if test "$cross_compile" = "yes"; then
6355 cross_arg
="--cross-file config-meson.cross"
6356 echo "[host_machine]" >> $cross
6357 if test "$mingw32" = "yes" ; then
6358 echo "system = 'windows'" >> $cross
6360 if test "$linux" = "yes" ; then
6361 echo "system = 'linux'" >> $cross
6363 if test "$darwin" = "yes" ; then
6364 echo "system = 'darwin'" >> $cross
6368 echo "cpu_family = 'x86'" >> $cross
6371 echo "cpu_family = 'x86_64'" >> $cross
6374 echo "cpu_family = 'ppc64'" >> $cross
6377 echo "cpu_family = '$ARCH'" >> $cross
6380 echo "cpu = '$cpu'" >> $cross
6381 if test "$bigendian" = "yes" ; then
6382 echo "endian = 'big'" >> $cross
6384 echo "endian = 'little'" >> $cross
6387 cross_arg
="--native-file config-meson.cross"
6389 mv $cross config-meson.cross
6391 rm -rf meson-private meson-info meson-logs
6393 if ! version_ge
"$($meson --version)" 0.56.0; then
6394 staticpic
=$
(if test "$pie" = yes; then echo true
; else echo false
; fi)
6396 NINJA
=$ninja $meson setup \
6397 --prefix "$prefix" \
6398 --libdir "$libdir" \
6399 --libexecdir "$libexecdir" \
6400 --bindir "$bindir" \
6401 --includedir "$includedir" \
6402 --datadir "$datadir" \
6403 --mandir "$mandir" \
6404 --sysconfdir "$sysconfdir" \
6405 --localedir "$localedir" \
6406 --localstatedir "$local_statedir" \
6407 -Ddocdir="$docdir" \
6408 -Dqemu_firmwarepath="$firmwarepath" \
6409 -Dqemu_suffix="$qemu_suffix" \
6410 -Doptimization=$
(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6411 -Ddebug=$
(if test "$debug_info" = yes; then echo true
; else echo false
; fi) \
6412 -Dwerror=$
(if test "$werror" = yes; then echo true
; else echo false
; fi) \
6413 -Dstrip=$
(if test "$strip_opt" = yes; then echo true
; else echo false
; fi) \
6414 -Db_pie=$
(if test "$pie" = yes; then echo true
; else echo false
; fi) \
6415 ${staticpic:+-Db_staticpic=$staticpic} \
6416 -Db_coverage=$
(if test "$gcov" = yes; then echo true
; else echo false
; fi) \
6417 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6418 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6419 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
6420 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6421 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6422 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6423 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6424 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
6425 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
6426 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6427 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6428 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
6429 -Dattr=$attr -Ddefault_devices=$default_devices \
6430 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6431 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
6432 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi \
6433 $
(if test "$default_features" = no
; then echo "-Dauto_features=disabled"; fi) \
6434 -Dtcg_interpreter=$tcg_interpreter \
6436 "$PWD" "$source_path"
6438 if test "$?" -ne 0 ; then
6439 error_exit
"meson setup failed"
6443 if test -n "${deprecated_features}"; then
6444 echo "Warning, deprecated features enabled."
6445 echo "Please see docs/system/deprecated.rst"
6446 echo " features: ${deprecated_features}"
6449 # Save the configure command line for later reuse.
6450 cat <<EOD >config.status
6452 # Generated by configure.
6453 # Run this file to recreate the current configuration.
6454 # Compiler output produced by configure, useful for debugging
6455 # configure, is in config.log if it exists.
6461 eval envval
=\$
$envname
6463 if test -n "$envval"
6465 echo "$envname='$envval'" >> config.status
6466 echo "export $envname" >> config.status
6468 echo "unset $envname" >> config.status
6472 # Preserve various env variables that influence what
6473 # features/build target configure will detect
6479 preserve_env INSTALL
6481 preserve_env LD_LIBRARY_PATH
6482 preserve_env LIBTOOL
6485 preserve_env OBJCOPY
6487 preserve_env PKG_CONFIG
6488 preserve_env PKG_CONFIG_LIBDIR
6489 preserve_env PKG_CONFIG_PATH
6491 preserve_env SDL2_CONFIG
6494 preserve_env WINDRES
6496 printf "exec" >>config.status
6497 for i
in "$0" "$@"; do
6498 test "$i" = --skip-meson ||
printf " %s" "$(quote_sh "$i")" >>config.status
6500 echo ' "$@"' >>config.status
6501 chmod +x config.status