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" $CPU_CFLAGS "$@"
149 do_compiler
"$cxx" $CPU_CFLAGS "$@"
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=gnu11
/-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 eval test -z '"${1#'"$2"'}"'
224 $ld --help 2>/dev
/null |
grep ".$1" >/dev
/null
2>&1
227 if printf %s
\\n
"$source_path" "$PWD" |
grep -q "[[:space:]:]";
229 error_exit
"main directory cannot contain spaces nor colons"
235 interp_prefix
="/usr/gnemul/qemu-%M"
239 audio_drv_list
="default"
240 block_drv_rw_whitelist
=""
241 block_drv_ro_whitelist
=""
242 block_drv_whitelist_tools
="no"
250 gdb_bin
=$
(command -v "gdb-multiarch" ||
command -v "gdb")
252 if test -e "$source_path/.git"
254 git_submodules_action
="update"
256 git_submodules_action
="ignore"
259 git_submodules
="ui/keycodemapdb"
262 # Don't accept a target_list environment variable.
264 unset target_list_exclude
266 # Default value for a variable defining feature "foo".
267 # * foo="no" feature will only be used if --enable-foo arg is given
268 # * foo="" feature will be searched for, and if found, will be used
269 # unless --disable-foo is given
270 # * foo="yes" this value will only be set by --enable-foo flag.
271 # feature will searched for,
272 # if not found, configure exits with error
274 # Always add --enable-foo and --disable-foo command line args.
275 # Distributions want to ensure that several features are compiled in, and it
276 # is impossible without a --enable-foo that exits if a feature is not found.
279 # parse CC options second
281 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
283 --without-default-features)
315 xen
=${default_feature:+disabled}
316 xen_ctrl_version
="$default_feature"
317 xen_pci_passthrough
="auto"
319 linux_io_uring
="auto"
322 xfs
="$default_feature"
324 membarrier
="$default_feature"
325 vhost_kernel
="$default_feature"
326 vhost_net
="$default_feature"
327 vhost_crypto
="$default_feature"
328 vhost_scsi
="$default_feature"
329 vhost_vsock
="$default_feature"
331 vhost_user_blk_server
="auto"
332 vhost_user_fs
="$default_feature"
333 vhost_vdpa
="$default_feature"
340 rdma
="$default_feature"
341 pvrdma
="$default_feature"
347 fortify_source
="$default_feature"
349 tcg_interpreter
="false"
373 spice_protocol
="auto"
379 opengl
="$default_feature"
381 avx2_opt
="$default_feature"
388 guest_agent
="$default_feature"
389 guest_agent_with_vss
="no"
390 guest_agent_ntddscsi
="no"
391 guest_agent_msi
="auto"
392 vss_win32_sdk
="$default_feature"
394 want_tools
="$default_feature"
398 coroutine_pool
="$default_feature"
399 debug_stack_usage
="no"
406 tls_priority
="NORMAL"
413 tpm
="$default_feature"
414 libssh
="$default_feature"
415 live_block_migration
=${default_feature:-yes}
416 numa
="$default_feature"
419 replication
=${default_feature:-yes}
420 bochs
=${default_feature:-yes}
421 cloop
=${default_feature:-yes}
422 dmg
=${default_feature:-yes}
423 qcow1
=${default_feature:-yes}
424 vdi
=${default_feature:-yes}
425 vvfat
=${default_feature:-yes}
426 qed
=${default_feature:-yes}
427 parallels
=${default_feature:-yes}
431 default_devices
="true"
432 plugins
="$default_feature"
435 secret_keyring
="$default_feature"
444 slirp_smbd
="$default_feature"
447 gio
="$default_feature"
449 # parse CC options second
451 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
453 --cross-prefix=*) cross_prefix
="$optarg"
458 --cxx=*) CXX
="$optarg"
460 --cpu=*) cpu
="$optarg"
462 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
463 QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
465 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
467 --extra-ldflags=*) QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
468 EXTRA_LDFLAGS
="$optarg"
470 --enable-debug-info) debug_info
="yes"
472 --disable-debug-info) debug_info
="no"
474 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
476 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
477 eval "cross_cc_cflags_${cc_arch}=\$optarg"
478 cross_cc_vars
="$cross_cc_vars cross_cc_cflags_${cc_arch}"
480 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
481 cc_archs
="$cc_archs $cc_arch"
482 eval "cross_cc_${cc_arch}=\$optarg"
483 cross_cc_vars
="$cross_cc_vars cross_cc_${cc_arch}"
488 # Using uname is really, really broken. Once we have the right set of checks
489 # we can eliminate its usage altogether.
491 # Preferred compiler:
493 # ${cross_prefix}gcc (if cross-prefix specified)
495 if test -z "${CC}${cross_prefix}"; then
498 cc
="${CC-${cross_prefix}gcc}"
501 if test -z "${CXX}${cross_prefix}"; then
504 cxx
="${CXX-${cross_prefix}g++}"
507 ar="${AR-${cross_prefix}ar}"
508 as
="${AS-${cross_prefix}as}"
511 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
512 ld
="${LD-${cross_prefix}ld}"
513 ranlib
="${RANLIB-${cross_prefix}ranlib}"
514 nm
="${NM-${cross_prefix}nm}"
515 strip
="${STRIP-${cross_prefix}strip}"
516 windres
="${WINDRES-${cross_prefix}windres}"
517 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
519 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
521 pkg_config
=query_pkg_config
522 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
524 # default flags for all hosts
525 # We use -fwrapv to tell the compiler that we require a C dialect where
526 # left shift of signed integers is well defined and has the expected
527 # 2s-complement style results. (Both clang and gcc agree that it
528 # provides these semantics.)
529 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
530 QEMU_CFLAGS
="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
531 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
532 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
534 # Flags that are needed during configure but later taken care of by Meson
535 CONFIGURE_CFLAGS
="-std=gnu11 -Wall"
542 #error $1 not defined
544 int main(void) { return 0; }
552 int main(void) { return 0; }
559 int main(void) { return 0; }
563 if check_define __linux__
; then
565 elif check_define _WIN32
; then
567 elif check_define __OpenBSD__
; then
569 elif check_define __sun__
; then
571 elif check_define __HAIKU__
; then
573 elif check_define __FreeBSD__
; then
575 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
576 targetos
='GNU/kFreeBSD'
577 elif check_define __DragonFly__
; then
579 elif check_define __NetBSD__
; then
581 elif check_define __APPLE__
; then
584 # This is a fatal error, but don't report it yet, because we
585 # might be going to just print the --help text, or it might
586 # be the result of a missing compiler.
590 # Some host OSes need non-standard checks for which CPU to use.
591 # Note that these checks are broken for cross-compilation: if you're
592 # cross-compiling to one of these OSes then you'll need to specify
593 # the correct CPU with the --cpu option.
596 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
597 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
602 if test ! -z "$cpu" ; then
603 # command line argument
605 elif check_define __i386__
; then
607 elif check_define __x86_64__
; then
608 if check_define __ILP32__
; then
613 elif check_define __sparc__
; then
614 if check_define __arch64__
; then
619 elif check_define _ARCH_PPC
; then
620 if check_define _ARCH_PPC64
; then
621 if check_define _LITTLE_ENDIAN
; then
629 elif check_define __mips__
; then
631 elif check_define __s390__
; then
632 if check_define __s390x__
; then
637 elif check_define __riscv
; then
638 if check_define _LP64
; then
643 elif check_define __arm__
; then
645 elif check_define __aarch64__
; then
652 # Normalise host CPU name and set ARCH.
653 # Note that this case should only have supported host CPUs, not guests.
655 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64
)
660 i386|i486|i586|i686|i86pc|BePC
)
679 # This will result in either an error or falling back to TCI later
683 if test -z "$ARCH"; then
703 # needed for kinfo_getvmmap(3) in libutil.h
720 # Disable attempts to use ObjectiveC features in os/object.h since they
721 # won't work when we're compiling with gcc as a C compiler.
722 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
727 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
728 # needed for CMSG_ macros in sys/socket.h
729 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
730 # needed for TIOCWIN* defines in termios.h
731 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
736 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
741 vhost_user
=${default_feature:-yes}
745 : ${make=${MAKE-make}}
747 # We prefer python 3.x. A bare 'python' is traditionally
748 # python 2.x, but some distros have it as python 3.x, so
752 for binary
in "${PYTHON-python3}" python
756 python
=$
(command -v "$binary")
762 # Check for ancillary tools used in testing
764 for binary
in genisoimage mkisofs
768 genisoimage
=$
(command -v "$binary")
773 # Default objcc to clang if available, otherwise use CC
780 if test "$mingw32" = "yes" ; then
782 # MinGW needs -mthreads for TLS and macro _MT.
783 CONFIGURE_CFLAGS
="-mthreads $CONFIGURE_CFLAGS"
787 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
793 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
795 --help|
-h) show_help
=yes
797 --version|
-V) exec cat $source_path/VERSION
799 --prefix=*) prefix
="$optarg"
801 --interp-prefix=*) interp_prefix
="$optarg"
807 --host-cc=*) host_cc
="$optarg"
811 --iasl=*) iasl
="$optarg"
813 --objcc=*) objcc
="$optarg"
815 --make=*) make="$optarg"
819 --python=*) python
="$optarg" ; explicit_python
=yes
821 --sphinx-build=*) sphinx_build
="$optarg"
823 --skip-meson) skip_meson
=yes
825 --meson=*) meson
="$optarg"
827 --ninja=*) ninja
="$optarg"
829 --smbd=*) smbd
="$optarg"
839 --disable-debug-info)
849 --disable-module-upgrades) module_upgrades
="no"
851 --enable-module-upgrades) module_upgrades
="yes"
855 --target-list=*) target_list
="$optarg"
856 if test "$target_list_exclude"; then
857 error_exit
"Can't mix --target-list with --target-list-exclude"
860 --target-list-exclude=*) target_list_exclude
="$optarg"
861 if test "$target_list"; then
862 error_exit
"Can't mix --target-list-exclude with --target-list"
865 --enable-trace-backends=*) trace_backends
="$optarg"
867 # XXX: backwards compatibility
868 --enable-trace-backend=*) trace_backends
="$optarg"
870 --with-trace-file=*) trace_file
="$optarg"
872 --with-default-devices) default_devices
="true"
874 --without-default-devices) default_devices
="false"
876 --with-devices-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --with-devices-FOO option"
878 --with-devices-*) device_arch
=${opt#--with-devices-};
879 device_arch
=${device_arch%%=*}
880 cf
=$source_path/configs
/devices
/$device_arch-softmmu/$optarg.mak
881 if test -f "$cf"; then
882 device_archs
="$device_archs $device_arch"
883 eval "devices_${device_arch}=\$optarg"
885 error_exit
"File $cf does not exist"
888 --without-default-features) # processed above
890 --enable-gprof) gprof
="yes"
892 --enable-gcov) gcov
="yes"
896 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
898 --mandir=*) mandir
="$optarg"
900 --bindir=*) bindir
="$optarg"
902 --libdir=*) libdir
="$optarg"
904 --libexecdir=*) libexecdir
="$optarg"
906 --includedir=*) includedir
="$optarg"
908 --datadir=*) datadir
="$optarg"
910 --with-suffix=*) qemu_suffix
="$optarg"
912 --docdir=*) docdir
="$optarg"
914 --localedir=*) localedir
="$optarg"
916 --sysconfdir=*) sysconfdir
="$optarg"
918 --localstatedir=*) local_statedir
="$optarg"
920 --firmwarepath=*) firmwarepath
="$optarg"
923 --disable-dependency-tracking|\
924 --sbindir=*|
--sharedstatedir=*|\
925 --oldincludedir=*|
--datarootdir=*|
--infodir=*|\
926 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
927 # These switches are silently ignored, for compatibility with
928 # autoconf-generated configure scripts. This allows QEMU's
929 # configure to be used by RPM and similar macros that set
930 # lots of directory switches by default.
932 --disable-sdl) sdl
="disabled"
934 --enable-sdl) sdl
="enabled"
936 --disable-sdl-image) sdl_image
="disabled"
938 --enable-sdl-image) sdl_image
="enabled"
940 --disable-qom-cast-debug) qom_cast_debug
="no"
942 --enable-qom-cast-debug) qom_cast_debug
="yes"
944 --disable-virtfs) virtfs
="disabled"
946 --enable-virtfs) virtfs
="enabled"
948 --disable-libudev) libudev
="disabled"
950 --enable-libudev) libudev
="enabled"
952 --disable-virtiofsd) virtiofsd
="disabled"
954 --enable-virtiofsd) virtiofsd
="enabled"
956 --disable-mpath) mpath
="disabled"
958 --enable-mpath) mpath
="enabled"
960 --disable-vnc) vnc
="disabled"
962 --enable-vnc) vnc
="enabled"
964 --disable-gettext) gettext="disabled"
966 --enable-gettext) gettext="enabled"
968 --audio-drv-list=*) audio_drv_list
="$optarg"
970 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
972 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
974 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools
="yes"
976 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools
="no"
978 --enable-debug-tcg) debug_tcg
="yes"
980 --disable-debug-tcg) debug_tcg
="no"
983 # Enable debugging options that aren't excessively noisy
990 --enable-sanitizers) sanitizers
="yes"
992 --disable-sanitizers) sanitizers
="no"
994 --enable-tsan) tsan
="yes"
996 --disable-tsan) tsan
="no"
998 --enable-sparse) sparse
="enabled"
1000 --disable-sparse) sparse
="disabled"
1002 --disable-strip) strip_opt
="no"
1004 --disable-vnc-sasl) vnc_sasl
="disabled"
1006 --enable-vnc-sasl) vnc_sasl
="enabled"
1008 --disable-vnc-jpeg) vnc_jpeg
="disabled"
1010 --enable-vnc-jpeg) vnc_jpeg
="enabled"
1012 --disable-vnc-png) vnc_png
="disabled"
1014 --enable-vnc-png) vnc_png
="enabled"
1016 --disable-slirp) slirp
="disabled"
1018 --enable-slirp) slirp
="enabled"
1020 --enable-slirp=git
) slirp
="internal"
1022 --enable-slirp=system
) slirp
="system"
1024 --disable-vde) vde
="disabled"
1026 --enable-vde) vde
="enabled"
1028 --disable-netmap) netmap
="disabled"
1030 --enable-netmap) netmap
="enabled"
1032 --disable-xen) xen
="disabled"
1034 --enable-xen) xen
="enabled"
1036 --disable-xen-pci-passthrough) xen_pci_passthrough
="disabled"
1038 --enable-xen-pci-passthrough) xen_pci_passthrough
="enabled"
1040 --disable-alsa) alsa
="disabled"
1042 --enable-alsa) alsa
="enabled"
1044 --disable-coreaudio) coreaudio
="disabled"
1046 --enable-coreaudio) coreaudio
="enabled"
1048 --disable-dsound) dsound
="disabled"
1050 --enable-dsound) dsound
="enabled"
1052 --disable-jack) jack
="disabled"
1054 --enable-jack) jack
="enabled"
1056 --disable-oss) oss
="disabled"
1058 --enable-oss) oss
="enabled"
1060 --disable-pa) pa
="disabled"
1062 --enable-pa) pa
="enabled"
1064 --disable-brlapi) brlapi
="disabled"
1066 --enable-brlapi) brlapi
="enabled"
1068 --disable-kvm) kvm
="disabled"
1070 --enable-kvm) kvm
="enabled"
1072 --disable-hax) hax
="disabled"
1074 --enable-hax) hax
="enabled"
1076 --disable-hvf) hvf
="disabled"
1078 --enable-hvf) hvf
="enabled"
1080 --disable-nvmm) nvmm
="disabled"
1082 --enable-nvmm) nvmm
="enabled"
1084 --disable-whpx) whpx
="disabled"
1086 --enable-whpx) whpx
="enabled"
1088 --disable-tcg-interpreter) tcg_interpreter
="false"
1090 --enable-tcg-interpreter) tcg_interpreter
="true"
1092 --disable-cap-ng) cap_ng
="disabled"
1094 --enable-cap-ng) cap_ng
="enabled"
1096 --disable-tcg) tcg
="disabled"
1099 --enable-tcg) tcg
="enabled"
1101 --disable-malloc-trim) malloc_trim
="disabled"
1103 --enable-malloc-trim) malloc_trim
="enabled"
1105 --disable-spice) spice
="no"
1108 spice_protocol
="yes"
1111 --disable-spice-protocol)
1115 --enable-spice-protocol) spice_protocol
="yes"
1117 --disable-libiscsi) libiscsi
="disabled"
1119 --enable-libiscsi) libiscsi
="enabled"
1121 --disable-libnfs) libnfs
="disabled"
1123 --enable-libnfs) libnfs
="enabled"
1125 --enable-profiler) profiler
="yes"
1127 --disable-cocoa) cocoa
="disabled"
1129 --enable-cocoa) cocoa
="enabled"
1131 --disable-system) softmmu
="no"
1133 --enable-system) softmmu
="yes"
1140 --disable-linux-user) linux_user
="no"
1142 --enable-linux-user) linux_user
="yes"
1144 --disable-bsd-user) bsd_user
="no"
1146 --enable-bsd-user) bsd_user
="yes"
1148 --enable-pie) pie
="yes"
1150 --disable-pie) pie
="no"
1152 --enable-werror) werror
="yes"
1154 --disable-werror) werror
="no"
1156 --enable-lto) lto
="true"
1158 --disable-lto) lto
="false"
1160 --enable-stack-protector) stack_protector
="yes"
1162 --disable-stack-protector) stack_protector
="no"
1164 --enable-safe-stack) safe_stack
="yes"
1166 --disable-safe-stack) safe_stack
="no"
1172 --disable-cfi) cfi
="false"
1174 --enable-cfi-debug) cfi_debug
="true"
1176 --disable-cfi-debug) cfi_debug
="false"
1178 --disable-curses) curses
="disabled"
1180 --enable-curses) curses
="enabled"
1182 --disable-iconv) iconv="disabled"
1184 --enable-iconv) iconv="enabled"
1186 --disable-curl) curl
="disabled"
1188 --enable-curl) curl
="enabled"
1190 --disable-fdt) fdt
="disabled"
1192 --enable-fdt) fdt
="enabled"
1194 --enable-fdt=git
) fdt
="internal"
1196 --enable-fdt=system
) fdt
="system"
1198 --disable-linux-aio) linux_aio
="disabled"
1200 --enable-linux-aio) linux_aio
="enabled"
1202 --disable-linux-io-uring) linux_io_uring
="disabled"
1204 --enable-linux-io-uring) linux_io_uring
="enabled"
1206 --disable-attr) attr
="disabled"
1208 --enable-attr) attr
="enabled"
1210 --disable-membarrier) membarrier
="no"
1212 --enable-membarrier) membarrier
="yes"
1214 --disable-bpf) bpf
="disabled"
1216 --enable-bpf) bpf
="enabled"
1218 --disable-blobs) blobs
="false"
1220 --with-pkgversion=*) pkgversion
="$optarg"
1222 --with-coroutine=*) coroutine
="$optarg"
1224 --disable-coroutine-pool) coroutine_pool
="no"
1226 --enable-coroutine-pool) coroutine_pool
="yes"
1228 --enable-debug-stack-usage) debug_stack_usage
="yes"
1230 --enable-crypto-afalg) crypto_afalg
="yes"
1232 --disable-crypto-afalg) crypto_afalg
="no"
1234 --disable-docs) docs
="disabled"
1236 --enable-docs) docs
="enabled"
1238 --disable-vhost-net) vhost_net
="no"
1240 --enable-vhost-net) vhost_net
="yes"
1242 --disable-vhost-crypto) vhost_crypto
="no"
1244 --enable-vhost-crypto) vhost_crypto
="yes"
1246 --disable-vhost-scsi) vhost_scsi
="no"
1248 --enable-vhost-scsi) vhost_scsi
="yes"
1250 --disable-vhost-vsock) vhost_vsock
="no"
1252 --enable-vhost-vsock) vhost_vsock
="yes"
1254 --disable-vhost-user-blk-server) vhost_user_blk_server
="disabled"
1256 --enable-vhost-user-blk-server) vhost_user_blk_server
="enabled"
1258 --disable-vhost-user-fs) vhost_user_fs
="no"
1260 --enable-vhost-user-fs) vhost_user_fs
="yes"
1262 --disable-opengl) opengl
="no"
1264 --enable-opengl) opengl
="yes"
1266 --disable-rbd) rbd
="disabled"
1268 --enable-rbd) rbd
="enabled"
1270 --disable-xfsctl) xfs
="no"
1272 --enable-xfsctl) xfs
="yes"
1274 --disable-smartcard) smartcard
="disabled"
1276 --enable-smartcard) smartcard
="enabled"
1278 --disable-u2f) u2f
="disabled"
1280 --enable-u2f) u2f
="enabled"
1282 --disable-libusb) libusb
="disabled"
1284 --enable-libusb) libusb
="enabled"
1286 --disable-usb-redir) usb_redir
="disabled"
1288 --enable-usb-redir) usb_redir
="enabled"
1290 --disable-zlib-test)
1292 --disable-lzo) lzo
="disabled"
1294 --enable-lzo) lzo
="enabled"
1296 --disable-snappy) snappy
="disabled"
1298 --enable-snappy) snappy
="enabled"
1300 --disable-bzip2) bzip2="disabled"
1302 --enable-bzip2) bzip2="enabled"
1304 --enable-lzfse) lzfse
="enabled"
1306 --disable-lzfse) lzfse
="disabled"
1308 --disable-zstd) zstd
="disabled"
1310 --enable-zstd) zstd
="enabled"
1312 --enable-guest-agent) guest_agent
="yes"
1314 --disable-guest-agent) guest_agent
="no"
1316 --enable-guest-agent-msi) guest_agent_msi
="enabled"
1318 --disable-guest-agent-msi) guest_agent_msi
="disabled"
1320 --with-vss-sdk) vss_win32_sdk
=""
1322 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1324 --without-vss-sdk) vss_win32_sdk
="no"
1326 --with-win-sdk) win_sdk
=""
1328 --with-win-sdk=*) win_sdk
="$optarg"
1330 --without-win-sdk) win_sdk
="no"
1332 --enable-tools) want_tools
="yes"
1334 --disable-tools) want_tools
="no"
1336 --enable-seccomp) seccomp
="enabled"
1338 --disable-seccomp) seccomp
="disabled"
1340 --disable-glusterfs) glusterfs
="disabled"
1342 --disable-avx2) avx2_opt
="no"
1344 --enable-avx2) avx2_opt
="yes"
1346 --disable-avx512f) avx512f_opt
="no"
1348 --enable-avx512f) avx512f_opt
="yes"
1351 --enable-glusterfs) glusterfs
="enabled"
1353 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1354 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1356 --enable-vhdx|
--disable-vhdx)
1357 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1359 --enable-uuid|
--disable-uuid)
1360 echo "$0: $opt is obsolete, UUID support is always built" >&2
1362 --disable-gtk) gtk
="disabled"
1364 --enable-gtk) gtk
="enabled"
1366 --tls-priority=*) tls_priority
="$optarg"
1368 --disable-gnutls) gnutls
="disabled"
1370 --enable-gnutls) gnutls
="enabled"
1372 --disable-nettle) nettle
="disabled"
1374 --enable-nettle) nettle
="enabled"
1376 --disable-gcrypt) gcrypt
="disabled"
1378 --enable-gcrypt) gcrypt
="enabled"
1380 --disable-auth-pam) auth_pam
="disabled"
1382 --enable-auth-pam) auth_pam
="enabled"
1384 --enable-rdma) rdma
="yes"
1386 --disable-rdma) rdma
="no"
1388 --enable-pvrdma) pvrdma
="yes"
1390 --disable-pvrdma) pvrdma
="no"
1392 --disable-vte) vte
="disabled"
1394 --enable-vte) vte
="enabled"
1396 --disable-virglrenderer) virglrenderer
="disabled"
1398 --enable-virglrenderer) virglrenderer
="enabled"
1400 --disable-tpm) tpm
="no"
1402 --enable-tpm) tpm
="yes"
1404 --disable-libssh) libssh
="no"
1406 --enable-libssh) libssh
="yes"
1408 --disable-live-block-migration) live_block_migration
="no"
1410 --enable-live-block-migration) live_block_migration
="yes"
1412 --disable-numa) numa
="no"
1414 --enable-numa) numa
="yes"
1416 --disable-libxml2) libxml2
="disabled"
1418 --enable-libxml2) libxml2
="enabled"
1420 --disable-tcmalloc) tcmalloc
="no"
1422 --enable-tcmalloc) tcmalloc
="yes"
1424 --disable-jemalloc) jemalloc
="no"
1426 --enable-jemalloc) jemalloc
="yes"
1428 --disable-replication) replication
="no"
1430 --enable-replication) replication
="yes"
1432 --disable-bochs) bochs
="no"
1434 --enable-bochs) bochs
="yes"
1436 --disable-cloop) cloop
="no"
1438 --enable-cloop) cloop
="yes"
1440 --disable-dmg) dmg
="no"
1442 --enable-dmg) dmg
="yes"
1444 --disable-qcow1) qcow1
="no"
1446 --enable-qcow1) qcow1
="yes"
1448 --disable-vdi) vdi
="no"
1450 --enable-vdi) vdi
="yes"
1452 --disable-vvfat) vvfat
="no"
1454 --enable-vvfat) vvfat
="yes"
1456 --disable-qed) qed
="no"
1458 --enable-qed) qed
="yes"
1460 --disable-parallels) parallels
="no"
1462 --enable-parallels) parallels
="yes"
1464 --disable-vhost-user) vhost_user
="no"
1466 --enable-vhost-user) vhost_user
="yes"
1468 --disable-vhost-vdpa) vhost_vdpa
="no"
1470 --enable-vhost-vdpa) vhost_vdpa
="yes"
1472 --disable-vhost-kernel) vhost_kernel
="no"
1474 --enable-vhost-kernel) vhost_kernel
="yes"
1476 --disable-capstone) capstone
="disabled"
1478 --enable-capstone) capstone
="enabled"
1480 --enable-capstone=git
) capstone
="internal"
1482 --enable-capstone=system
) capstone
="system"
1484 --with-git=*) git
="$optarg"
1486 --enable-git-update)
1487 git_submodules_action
="update"
1488 echo "--enable-git-update deprecated, use --with-git-submodules=update"
1490 --disable-git-update)
1491 git_submodules_action
="validate"
1492 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1494 --with-git-submodules=*)
1495 git_submodules_action
="$optarg"
1497 --enable-debug-mutex) debug_mutex
=yes
1499 --disable-debug-mutex) debug_mutex
=no
1501 --enable-libpmem) libpmem
="enabled"
1503 --disable-libpmem) libpmem
="disabled"
1505 --enable-xkbcommon) xkbcommon
="enabled"
1507 --disable-xkbcommon) xkbcommon
="disabled"
1509 --enable-plugins) if test "$mingw32" = "yes"; then
1510 error_exit
"TCG plugins not currently supported on Windows platforms"
1515 --disable-plugins) plugins
="no"
1517 --enable-containers) use_containers
="yes"
1519 --disable-containers) use_containers
="no"
1521 --enable-fuzzing) fuzzing
=true
1523 --disable-fuzzing) fuzzing
=false
1525 --gdb=*) gdb_bin
="$optarg"
1527 --enable-rng-none) rng_none
=yes
1529 --disable-rng-none) rng_none
=no
1531 --enable-keyring) secret_keyring
="yes"
1533 --disable-keyring) secret_keyring
="no"
1535 --enable-libdaxctl) libdaxctl
="enabled"
1537 --disable-libdaxctl) libdaxctl
="disabled"
1539 --enable-fuse) fuse
="enabled"
1541 --disable-fuse) fuse
="disabled"
1543 --enable-fuse-lseek) fuse_lseek
="enabled"
1545 --disable-fuse-lseek) fuse_lseek
="disabled"
1547 --enable-multiprocess) multiprocess
="enabled"
1549 --disable-multiprocess) multiprocess
="disabled"
1551 --enable-gio) gio
=yes
1553 --disable-gio) gio
=no
1555 --enable-slirp-smbd) slirp_smbd
=yes
1557 --disable-slirp-smbd) slirp_smbd
=no
1560 echo "ERROR: unknown option $opt"
1561 echo "Try '$0 --help' for more information"
1567 # test for any invalid configuration combinations
1568 if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1569 error_exit
"Can't enable plugins on non-TCG builds"
1572 case $git_submodules_action in
1574 if test ! -e "$source_path/.git"; then
1575 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1580 if ! test -f "$source_path/ui/keycodemapdb/README"
1583 echo "ERROR: missing GIT submodules"
1585 if test -e "$source_path/.git"; then
1586 echo "--with-git-submodules=ignore specified but submodules were not"
1587 echo "checked out. Please initialize and update submodules."
1589 echo "This is not a GIT checkout but module content appears to"
1590 echo "be missing. Do not use 'git archive' or GitHub download links"
1591 echo "to acquire QEMU source archives. Non-GIT builds are only"
1592 echo "supported with source archives linked from:"
1594 echo " https://www.qemu.org/download/#source"
1596 echo "Developers working with GIT can use scripts/archive-source.sh"
1597 echo "if they need to create valid source archives."
1604 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1609 libdir
="${libdir:-$prefix/lib}"
1610 libexecdir
="${libexecdir:-$prefix/libexec}"
1611 includedir
="${includedir:-$prefix/include}"
1613 if test "$mingw32" = "yes" ; then
1614 bindir
="${bindir:-$prefix}"
1616 bindir
="${bindir:-$prefix/bin}"
1618 mandir
="${mandir:-$prefix/share/man}"
1619 datadir
="${datadir:-$prefix/share}"
1620 docdir
="${docdir:-$prefix/share/doc}"
1621 sysconfdir
="${sysconfdir:-$prefix/etc}"
1622 local_statedir
="${local_statedir:-$prefix/var}"
1623 firmwarepath
="${firmwarepath:-$datadir/qemu-firmware}"
1624 localedir
="${localedir:-$datadir/locale}"
1629 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1633 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1636 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1637 QEMU_LDFLAGS
="-m32 -mv8plus $QEMU_LDFLAGS"
1640 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1641 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1645 QEMU_LDFLAGS
="-m31 $QEMU_LDFLAGS"
1649 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1653 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1656 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1657 # If we truly care, we should simply detect this case at
1658 # runtime and generate the fallback to serial emulation.
1659 CPU_CFLAGS
="-m64 -mcx16"
1660 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1664 QEMU_LDFLAGS
="-mx32 $QEMU_LDFLAGS"
1666 # No special flags required for other host CPUs
1669 if eval test -z "\${cross_cc_$cpu}"; then
1670 eval "cross_cc_${cpu}=\$cc"
1671 cross_cc_vars
="$cross_cc_vars cross_cc_${cpu}"
1674 # For user-mode emulation the host arch has to be one we explicitly
1675 # support, even if we're using TCI.
1676 if [ "$ARCH" = "unknown" ]; then
1681 default_target_list
=""
1682 deprecated_targets_list
=ppc64abi32-linux-user
1683 deprecated_features
=""
1686 if [ "$softmmu" = "yes" ]; then
1687 mak_wilds
="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
1689 if [ "$linux_user" = "yes" ]; then
1690 mak_wilds
="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
1692 if [ "$bsd_user" = "yes" ]; then
1693 mak_wilds
="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
1696 # If the user doesn't explicitly specify a deprecated target we will
1698 if test -z "$target_list"; then
1699 if test -z "$target_list_exclude"; then
1700 target_list_exclude
="$deprecated_targets_list"
1702 target_list_exclude
="$target_list_exclude,$deprecated_targets_list"
1706 for config
in $mak_wilds; do
1707 target
="$(basename "$config" .mak)"
1708 if echo "$target_list_exclude" |
grep -vq "$target"; then
1709 default_target_list
="${default_target_list} $target"
1713 # Enumerate public trace backends for --help output
1714 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1716 if test x
"$show_help" = x
"yes" ; then
1719 Usage: configure [options]
1720 Options: [defaults in brackets after descriptions]
1723 --help print this message
1724 --prefix=PREFIX install in PREFIX [$prefix]
1725 --interp-prefix=PREFIX where to find shared libraries, etc.
1726 use %M for cpu name [$interp_prefix]
1727 --target-list=LIST set target list (default: build all non-deprecated)
1728 $(echo Available targets: $default_target_list | \
1729 fold -s -w 53 | sed -e 's/^/ /')
1730 $(echo Deprecated targets: $deprecated_targets_list | \
1731 fold -s -w 53 | sed -e 's/^/ /')
1732 --target-list-exclude=LIST exclude a set of targets from the default target-list
1734 Advanced options (experts only):
1735 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1736 --cc=CC use C compiler CC [$cc]
1737 --iasl=IASL use ACPI compiler IASL [$iasl]
1738 --host-cc=CC use C compiler CC [$host_cc] for code run at
1740 --cxx=CXX use C++ compiler CXX [$cxx]
1741 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1742 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1743 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1744 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1745 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1746 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1747 --make=MAKE use specified make [$make]
1748 --python=PYTHON use specified python [$python]
1749 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1750 --meson=MESON use specified meson [$meson]
1751 --ninja=NINJA use specified ninja [$ninja]
1752 --smbd=SMBD use specified smbd [$smbd]
1753 --with-git=GIT use specified git [$git]
1754 --with-git-submodules=update update git submodules (default if .git dir exists)
1755 --with-git-submodules=validate fail if git submodules are not up to date
1756 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
1757 --static enable static build [$static]
1758 --mandir=PATH install man pages in PATH
1759 --datadir=PATH install firmware in PATH/$qemu_suffix
1760 --localedir=PATH install translation in PATH/$qemu_suffix
1761 --docdir=PATH install documentation in PATH/$qemu_suffix
1762 --bindir=PATH install binaries in PATH
1763 --libdir=PATH install libraries in PATH
1764 --libexecdir=PATH install helper binaries in PATH
1765 --sysconfdir=PATH install config in PATH/$qemu_suffix
1766 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1767 --firmwarepath=PATH search PATH for firmware files
1768 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1769 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1770 --with-pkgversion=VERS use specified string as sub-version of the package
1771 --without-default-features default all --enable-* options to "disabled"
1772 --without-default-devices do not include any device that is not needed to
1773 start the emulator (only use if you are including
1774 desired devices in configs/devices/)
1775 --with-devices-ARCH=NAME override default configs/devices
1776 --enable-debug enable common debug build options
1777 --enable-sanitizers enable default sanitizers
1778 --enable-tsan enable thread sanitizer
1779 --disable-strip disable stripping binaries
1780 --disable-werror disable compilation abort on warning
1781 --disable-stack-protector disable compiler-provided stack protection
1782 --audio-drv-list=LIST set audio drivers list
1783 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1784 --block-drv-rw-whitelist=L
1785 set block driver read-write whitelist
1786 (by default affects only QEMU, not tools like qemu-img)
1787 --block-drv-ro-whitelist=L
1788 set block driver read-only whitelist
1789 (by default affects only QEMU, not tools like qemu-img)
1790 --enable-block-drv-whitelist-in-tools
1791 use block whitelist also in tools instead of only QEMU
1792 --enable-trace-backends=B Set trace backend
1793 Available backends: $trace_backend_list
1794 --with-trace-file=NAME Full PATH,NAME of file to store traces
1796 --disable-slirp disable SLIRP userspace network connectivity
1797 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1798 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1799 --cpu=CPU Build for host CPU [$cpu]
1800 --with-coroutine=BACKEND coroutine backend. Supported options:
1801 ucontext, sigaltstack, windows
1802 --enable-gcov enable test coverage analysis with gcov
1803 --disable-blobs disable installing provided firmware blobs
1804 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1805 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1806 --tls-priority default TLS protocol/cipher priority string
1807 --enable-gprof QEMU profiling with gprof
1808 --enable-profiler profiler support
1809 --enable-debug-stack-usage
1810 track the maximum stack usage of stacks created by qemu_alloc_stack
1812 enable plugins via shared library loading
1813 --disable-containers don't use containers for cross-building
1814 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1816 Optional features, enabled with --enable-FEATURE and
1817 disabled with --disable-FEATURE, default is enabled if available
1818 (unless built with --without-default-features):
1820 system all system emulation targets
1821 user supported user emulation targets
1822 linux-user all linux usermode emulation targets
1823 bsd-user all BSD usermode emulation targets
1824 docs build documentation
1825 guest-agent build the QEMU Guest Agent
1826 guest-agent-msi build guest agent Windows MSI installation package
1827 pie Position Independent Executables
1828 modules modules support (non-Windows)
1829 module-upgrades try to load modules from alternate paths for upgrades
1830 debug-tcg TCG debugging (default is disabled)
1831 debug-info debugging information
1832 lto Enable Link-Time Optimization.
1833 sparse sparse checker
1834 safe-stack SafeStack Stack Smash Protection. Depends on
1835 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1836 cfi Enable Control-Flow Integrity for indirect function calls.
1837 In case of a cfi violation, QEMU is terminated with SIGILL
1838 Depends on lto and is incompatible with modules
1839 Automatically enables Link-Time Optimization (lto)
1840 cfi-debug In case of a cfi violation, a message containing the line that
1841 triggered the error is written to stderr. After the error,
1842 QEMU is still terminated with SIGILL
1843 gnutls GNUTLS cryptography support
1844 nettle nettle cryptography support
1845 gcrypt libgcrypt cryptography support
1846 auth-pam PAM access control
1848 sdl-image SDL Image support for icons
1850 vte vte support for the gtk UI
1852 iconv font glyph conversion support
1854 vnc-sasl SASL encryption for VNC server
1855 vnc-jpeg JPEG lossy compression for VNC server
1856 vnc-png PNG compression for VNC server
1857 cocoa Cocoa UI (Mac OS X only)
1859 virtiofsd build virtiofs daemon (virtiofsd)
1860 libudev Use libudev to enumerate host devices
1861 mpath Multipath persistent reservation passthrough
1862 xen xen backend driver support
1863 xen-pci-passthrough PCI passthrough support for Xen
1864 alsa ALSA sound support
1865 coreaudio CoreAudio sound support
1866 dsound DirectSound sound support
1867 jack JACK sound support
1868 oss OSS sound support
1869 pa PulseAudio sound support
1870 brlapi BrlAPI (Braile)
1871 curl curl connectivity
1872 membarrier membarrier system call (for Linux 4.14+ or Windows)
1874 kvm KVM acceleration support
1875 hax HAX acceleration support
1876 hvf Hypervisor.framework acceleration support
1877 nvmm NVMM acceleration support
1878 whpx Windows Hypervisor Platform acceleration support
1879 rdma Enable RDMA-based migration
1880 pvrdma Enable PVRDMA support
1881 vde support for vde network
1882 netmap support for netmap network
1883 linux-aio Linux AIO support
1884 linux-io-uring Linux io_uring support
1885 cap-ng libcap-ng support
1886 attr attr and xattr support
1887 vhost-net vhost-net kernel acceleration support
1888 vhost-vsock virtio sockets device support
1889 vhost-scsi vhost-scsi kernel target support
1890 vhost-crypto vhost-user-crypto backend support
1891 vhost-kernel vhost kernel backend support
1892 vhost-user vhost-user backend support
1893 vhost-user-blk-server vhost-user-blk server support
1894 vhost-vdpa vhost-vdpa kernel backend support
1895 bpf BPF kernel support
1897 spice-protocol spice-protocol
1898 rbd rados block device (rbd)
1899 libiscsi iscsi support
1901 smartcard smartcard support (libcacard)
1902 u2f U2F support (u2f-emu)
1903 libusb libusb (for usb passthrough)
1904 live-block-migration Block migration in the main migration stream
1905 usb-redir usb network redirection support
1906 lzo support of lzo compression library
1907 snappy support of snappy compression library
1908 bzip2 support of bzip2 compression library
1909 (for reading bzip2-compressed dmg images)
1910 lzfse support of lzfse compression library
1911 (for reading lzfse-compressed dmg images)
1912 zstd support for zstd compression library
1913 (for migration compression and qcow2 cluster compression)
1914 seccomp seccomp support
1915 coroutine-pool coroutine freelist (better performance)
1916 glusterfs GlusterFS backend
1918 libssh ssh block device support
1919 numa libnuma support
1920 libxml2 for Parallels image format
1921 tcmalloc tcmalloc support
1922 jemalloc jemalloc support
1923 avx2 AVX2 optimization support
1924 avx512f AVX512F optimization support
1925 replication replication support
1926 opengl opengl support
1927 virglrenderer virgl rendering support
1928 xfsctl xfsctl support
1929 qom-cast-debug cast debugging support
1930 tools build qemu-io, qemu-nbd and qemu-img tools
1931 bochs bochs image format support
1932 cloop cloop image format support
1933 dmg dmg image format support
1934 qcow1 qcow v1 image format support
1935 vdi vdi image format support
1936 vvfat vvfat image format support
1937 qed qed image format support
1938 parallels parallels image format support
1939 crypto-afalg Linux AF_ALG crypto backend driver
1940 capstone capstone disassembler support
1941 debug-mutex mutex debugging support
1942 libpmem libpmem support
1943 xkbcommon xkbcommon support
1944 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1945 libdaxctl libdaxctl support
1946 fuse FUSE block device export
1947 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1948 multiprocess Out of process device emulation support
1950 slirp-smbd use smbd (at path --smbd=*) in slirp networking
1952 NOTE: The object files are built at the place where configure is launched
1957 # Remove old dependency files to make sure that they get properly regenerated
1958 rm -f */config-devices.mak.d
1960 if test -z "$python"
1962 error_exit
"Python not found. Use --python=/path/to/python"
1966 error_exit
"GNU make ($make) not found"
1969 # Note that if the Python conditional here evaluates True we will exit
1970 # with status 1 which is a shell 'false' value.
1971 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1972 error_exit
"Cannot use '$python', Python >= 3.6 is required." \
1973 "Use --python=/path/to/python to specify a supported Python."
1976 # Preserve python version since some functionality is dependent on it
1977 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
)
1979 # Suppress writing compiled files
1982 if test -z "$meson"; then
1983 if test "$explicit_python" = no
&& has meson
&& version_ge
"$(meson --version)" 0.59.2; then
1985 elif test $git_submodules_action != 'ignore' ; then
1987 elif test -e "${source_path}/meson/meson.py" ; then
1990 if test "$explicit_python" = yes; then
1991 error_exit
"--python requires using QEMU's embedded Meson distribution, but it was not found."
1993 error_exit
"Meson not found. Use --meson=/path/to/meson"
1997 # Meson uses its own Python interpreter to invoke other Python scripts,
1998 # but the user wants to use the one they specified with --python.
2000 # We do not want to override the distro Python interpreter (and sometimes
2001 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2002 # just require --meson=git|internal together with --python.
2003 if test "$explicit_python" = yes; then
2006 *) error_exit
"--python requires using QEMU's embedded Meson distribution." ;;
2011 if test "$meson" = git
; then
2012 git_submodules
="${git_submodules} meson"
2017 meson
="$python ${source_path}/meson/meson.py"
2019 *) meson
=$
(command -v "$meson") ;;
2024 if test -z "$ninja"; then
2025 for c
in ninja ninja-build samu
; do
2027 ninja
=$
(command -v "$c")
2031 if test -z "$ninja"; then
2032 error_exit
"Cannot find Ninja"
2036 # Check that the C compiler works. Doing this here before testing
2037 # the host CPU ensures that we had a valid CC to autodetect the
2038 # $cpu var (and we should bail right here if that's not the case).
2039 # It also allows the help message to be printed without a CC.
2041 if compile_object
; then
2042 : C compiler works ok
2044 error_exit
"\"$cc\" either does not exist or does not work"
2046 if ! compile_prog
; then
2047 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
2050 # Consult white-list to determine whether to enable werror
2051 # by default. Only enable by default for git builds
2052 if test -z "$werror" ; then
2053 if test "$git_submodules_action" != "ignore" && \
2054 { test "$linux" = "yes" ||
test "$mingw32" = "yes"; }; then
2061 if test "$targetos" = "bogus"; then
2062 # Now that we know that we're not printing the help and that
2063 # the compiler works (so the results of the check_defines we used
2064 # to identify the OS are reliable), if we didn't recognize the
2065 # host OS we should stop now.
2066 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
2069 # Check whether the compiler matches our minimum requirements:
2071 #if defined(__clang_major__) && defined(__clang_minor__)
2072 # ifdef __apple_build_version__
2073 # if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2074 # error You need at least XCode Clang v10.0 to compile QEMU
2077 # if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2078 # error You need at least Clang v6.0 to compile QEMU
2081 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2082 # if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
2083 # error You need at least GCC v7.4.0 to compile QEMU
2086 # error You either need GCC or Clang to compiler QEMU
2088 int main (void) { return 0; }
2090 if ! compile_prog
"" "" ; then
2091 error_exit
"You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
2094 # Accumulate -Wfoo and -Wno-bar separately.
2095 # We will list all of the enable flags first, and the disable flags second.
2096 # Note that we do not add -Werror, because that would enable it for all
2097 # configure tests. If a configure test failed due to -Werror this would
2098 # just silently disable some features, so it's too error prone.
2101 add_to warn_flags
-Wold-style-declaration
2102 add_to warn_flags
-Wold-style-definition
2103 add_to warn_flags
-Wtype-limits
2104 add_to warn_flags
-Wformat-security
2105 add_to warn_flags
-Wformat-y2k
2106 add_to warn_flags
-Winit-self
2107 add_to warn_flags
-Wignored-qualifiers
2108 add_to warn_flags
-Wempty-body
2109 add_to warn_flags
-Wnested-externs
2110 add_to warn_flags
-Wendif-labels
2111 add_to warn_flags
-Wexpansion-to-defined
2112 add_to warn_flags
-Wimplicit-fallthrough=2
2115 add_to nowarn_flags
-Wno-initializer-overrides
2116 add_to nowarn_flags
-Wno-missing-include-dirs
2117 add_to nowarn_flags
-Wno-shift-negative-value
2118 add_to nowarn_flags
-Wno-string-plus-int
2119 add_to nowarn_flags
-Wno-typedef-redefinition
2120 add_to nowarn_flags
-Wno-tautological-type-limit-compare
2121 add_to nowarn_flags
-Wno-psabi
2123 gcc_flags
="$warn_flags $nowarn_flags"
2125 cc_has_warning_flag
() {
2128 # Use the positive sense of the flag when testing for -Wno-wombat
2129 # support (gcc will happily accept the -Wno- form of unknown
2131 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2132 compile_prog
"-Werror $optflag" ""
2135 for flag
in $gcc_flags; do
2136 if cc_has_warning_flag
$flag ; then
2137 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2141 if test "$stack_protector" != "no"; then
2143 int main(int argc, char *argv[])
2145 char arr[64], *p = arr, *c = argv[0];
2152 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
2154 for flag
in $gcc_flags; do
2155 # We need to check both a compile and a link, since some compiler
2156 # setups fail only on a .c->.o compile and some only at link time
2157 if compile_object
"-Werror $flag" &&
2158 compile_prog
"-Werror $flag" ""; then
2159 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2160 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
2165 if test "$stack_protector" = yes; then
2166 if test $sp_on = 0; then
2167 error_exit
"Stack protector not supported"
2172 # Disable -Wmissing-braces on older compilers that warn even for
2173 # the "universal" C zero initializer {0}.
2179 if compile_object
"-Werror" "" ; then
2182 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
2185 # Our module code doesn't support Windows
2186 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2187 error_exit
"Modules are not available for Windows"
2190 # module_upgrades is only reasonable if modules are enabled
2191 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2192 error_exit
"Can't enable module-upgrades as Modules are not enabled"
2195 # Static linking is not possible with plugins, modules or PIE
2196 if test "$static" = "yes" ; then
2197 if test "$modules" = "yes" ; then
2198 error_exit
"static and modules are mutually incompatible"
2200 if test "$plugins" = "yes"; then
2201 error_exit
"static and plugins are mutually incompatible"
2207 # Unconditional check for compiler __thread support
2209 static __thread int tls_var;
2210 int main(void) { return tls_var; }
2213 if ! compile_prog
"-Werror" "" ; then
2214 error_exit
"Your compiler does not support the __thread specifier for " \
2215 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2221 # define THREAD __thread
2225 static THREAD int tls_var;
2226 int main(void) { return tls_var; }
2229 # Check we support --no-pie first; we will need this for building ROMs.
2230 if compile_prog
"-Werror -fno-pie" "-no-pie"; then
2231 CFLAGS_NOPIE
="-fno-pie"
2234 if test "$static" = "yes"; then
2235 if test "$pie" != "no" && compile_prog
"-Werror -fPIE -DPIE" "-static-pie"; then
2236 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2237 QEMU_LDFLAGS
="-static-pie $QEMU_LDFLAGS"
2239 elif test "$pie" = "yes"; then
2240 error_exit
"-static-pie not available due to missing toolchain support"
2242 QEMU_LDFLAGS
="-static $QEMU_LDFLAGS"
2245 elif test "$pie" = "no"; then
2246 CONFIGURE_CFLAGS
="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2247 elif compile_prog
"-Werror -fPIE -DPIE" "-pie"; then
2248 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2249 CONFIGURE_LDFLAGS
="-pie $CONFIGURE_LDFLAGS"
2251 elif test "$pie" = "yes"; then
2252 error_exit
"PIE not available due to missing toolchain support"
2254 echo "Disabling PIE due to missing toolchain support"
2258 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2259 # The combination is known as "full relro", because .got.plt is read-only too.
2260 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
2261 QEMU_LDFLAGS
="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2264 ##########################################
2265 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2266 # use i686 as default anyway, but for those that don't, an explicit
2267 # specification is necessary
2269 if test "$cpu" = "i386"; then
2271 static int sfaa(int *ptr)
2273 return __sync_fetch_and_and(ptr, 0);
2279 val = __sync_val_compare_and_swap(&val, 0, 1);
2284 if ! compile_prog
"" "" ; then
2285 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
2289 #########################################
2290 # Solaris specific configure tool chain decisions
2292 if test "$solaris" = "yes" ; then
2296 if test -f /usr
/ccs
/bin
/ar ; then
2297 error_exit
"No path includes ar" \
2298 "Add /usr/ccs/bin to your path and rerun configure"
2300 error_exit
"No path includes ar"
2304 if test "$tcg" = "enabled"; then
2305 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
2306 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
2309 if test -z "${target_list+xxx}" ; then
2311 for target
in $default_target_list; do
2312 target_list
="$target_list $target"
2314 target_list
="${target_list# }"
2317 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2318 for target
in $target_list; do
2319 # Check that we recognised the target name; this allows a more
2320 # friendly error message than if we let it fall through.
2321 case " $default_target_list " in
2325 error_exit
"Unknown target name '$target'"
2331 for target
in $target_list; do
2332 # if a deprecated target is enabled we note it here
2333 if echo "$deprecated_targets_list" |
grep -q "$target"; then
2334 add_to deprecated_features
$target
2338 # see if system emulation was really requested
2339 case " $target_list " in
2340 *"-softmmu "*) softmmu
=yes
2346 feature_not_found
() {
2350 error_exit
"User requested feature $feature" \
2351 "configure was not able to find it." \
2356 # big/little endian test
2359 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2360 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2361 int main(int argc, char *argv[])
2363 return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
2367 if compile_prog
; then
2368 if strings -a $TMPE |
grep -q BiGeNdIaN
; then
2370 elif strings -a $TMPE |
grep -q LiTtLeEnDiAn
; then
2373 echo big
/little
test failed
2377 echo big
/little
test failed
2381 ##########################################
2383 if test -z "$want_tools"; then
2384 if test "$softmmu" = "no"; then
2391 ##########################################
2395 #include <sys/socket.h>
2396 #include <linux/ip.h>
2397 int main(void) { return sizeof(struct mmsghdr); }
2399 if compile_prog
"" "" ; then
2405 #########################################
2406 # vhost interdependencies and host support
2409 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2410 error_exit
"vhost-user is only available on Linux"
2412 test "$vhost_vdpa" = "" && vhost_vdpa
=$linux
2413 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2414 error_exit
"vhost-vdpa is only available on Linux"
2416 test "$vhost_kernel" = "" && vhost_kernel
=$linux
2417 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2418 error_exit
"vhost-kernel is only available on Linux"
2421 # vhost-kernel devices
2422 test "$vhost_scsi" = "" && vhost_scsi
=$vhost_kernel
2423 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2424 error_exit
"--enable-vhost-scsi requires --enable-vhost-kernel"
2426 test "$vhost_vsock" = "" && vhost_vsock
=$vhost_kernel
2427 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2428 error_exit
"--enable-vhost-vsock requires --enable-vhost-kernel"
2431 # vhost-user backends
2432 test "$vhost_net_user" = "" && vhost_net_user
=$vhost_user
2433 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2434 error_exit
"--enable-vhost-net-user requires --enable-vhost-user"
2436 test "$vhost_crypto" = "" && vhost_crypto
=$vhost_user
2437 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2438 error_exit
"--enable-vhost-crypto requires --enable-vhost-user"
2440 test "$vhost_user_fs" = "" && vhost_user_fs
=$vhost_user
2441 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2442 error_exit
"--enable-vhost-user-fs requires --enable-vhost-user"
2444 #vhost-vdpa backends
2445 test "$vhost_net_vdpa" = "" && vhost_net_vdpa
=$vhost_vdpa
2446 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2447 error_exit
"--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2450 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2451 if test "$vhost_net" = ""; then
2452 test "$vhost_net_user" = "yes" && vhost_net
=yes
2453 test "$vhost_net_vdpa" = "yes" && vhost_net
=yes
2454 test "$vhost_kernel" = "yes" && vhost_net
=yes
2457 ##########################################
2460 if ! has
"$pkg_config_exe"; then
2461 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2464 ##########################################
2467 if test "$linux_user" = "yes"; then
2470 #include <linux/futex.h>
2472 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2478 if ! compile_object
; then
2479 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2483 ##########################################
2486 if test "$xen" != "disabled" ; then
2487 # Check whether Xen library path is specified via --extra-ldflags to avoid
2488 # overriding this setting with pkg-config output. If not, try pkg-config
2489 # to obtain all needed flags.
2491 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2492 $pkg_config --exists xencontrol
; then
2493 xen_ctrl_version
="$(printf '%d%02d%02d' \
2494 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2496 xen_pc
="xencontrol xenstore xenforeignmemory xengnttab"
2497 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2498 if $pkg_config --exists xentoolcore
; then
2499 xen_pc
="$xen_pc xentoolcore"
2501 xen_cflags
="$($pkg_config --cflags $xen_pc)"
2502 xen_libs
="$($pkg_config --libs $xen_pc)"
2505 xen_libs
="-lxenstore -lxenctrl"
2506 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2508 # First we test whether Xen headers and libraries are available.
2509 # If no, we are done and there is no Xen support.
2510 # If yes, more tests are run to detect the Xen version.
2514 #include <xenctrl.h>
2519 if ! compile_prog
"" "$xen_libs" ; then
2521 if test "$xen" = "enabled" ; then
2522 feature_not_found
"xen" "Install xen devel"
2528 cat > $TMPC <<EOF &&
2529 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2530 #define __XEN_TOOLS__
2531 #include <xendevicemodel.h>
2532 #include <xenforeignmemory.h>
2534 xendevicemodel_handle *xd;
2535 xenforeignmemory_handle *xfmem;
2537 xd = xendevicemodel_open(0, 0);
2538 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2540 xfmem = xenforeignmemory_open(0, 0);
2541 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2546 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2548 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2549 xen_ctrl_version
=41100
2552 cat > $TMPC <<EOF &&
2553 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2554 #include <xenforeignmemory.h>
2555 #include <xentoolcore.h>
2557 xenforeignmemory_handle *xfmem;
2559 xfmem = xenforeignmemory_open(0, 0);
2560 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2561 xentoolcore_restrict_all(0);
2566 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2568 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2569 xen_ctrl_version
=41000
2572 cat > $TMPC <<EOF &&
2573 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2574 #define __XEN_TOOLS__
2575 #include <xendevicemodel.h>
2577 xendevicemodel_handle *xd;
2579 xd = xendevicemodel_open(0, 0);
2580 xendevicemodel_close(xd);
2585 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2587 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2588 xen_ctrl_version
=40900
2591 cat > $TMPC <<EOF &&
2593 * If we have stable libs the we don't want the libxc compat
2594 * layers, regardless of what CFLAGS we may have been given.
2596 * Also, check if xengnttab_grant_copy_segment_t is defined and
2597 * grant copy operation is implemented.
2599 #undef XC_WANT_COMPAT_EVTCHN_API
2600 #undef XC_WANT_COMPAT_GNTTAB_API
2601 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2602 #include <xenctrl.h>
2603 #include <xenstore.h>
2604 #include <xenevtchn.h>
2605 #include <xengnttab.h>
2606 #include <xenforeignmemory.h>
2608 #include <xen/hvm/hvm_info_table.h>
2609 #if !defined(HVM_MAX_VCPUS)
2610 # error HVM_MAX_VCPUS not defined
2613 xc_interface *xc = NULL;
2614 xenforeignmemory_handle *xfmem;
2615 xenevtchn_handle *xe;
2616 xengnttab_handle *xg;
2617 xengnttab_grant_copy_segment_t* seg = NULL;
2621 xc = xc_interface_open(0, 0, 0);
2622 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2623 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2624 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2625 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2627 xfmem = xenforeignmemory_open(0, 0);
2628 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2630 xe = xenevtchn_open(0, 0);
2633 xg = xengnttab_open(0, 0);
2634 xengnttab_grant_copy(xg, 0, seg);
2639 compile_prog
"" "$xen_libs $xen_stable_libs"
2641 xen_ctrl_version
=40800
2644 cat > $TMPC <<EOF &&
2646 * If we have stable libs the we don't want the libxc compat
2647 * layers, regardless of what CFLAGS we may have been given.
2649 #undef XC_WANT_COMPAT_EVTCHN_API
2650 #undef XC_WANT_COMPAT_GNTTAB_API
2651 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2652 #include <xenctrl.h>
2653 #include <xenstore.h>
2654 #include <xenevtchn.h>
2655 #include <xengnttab.h>
2656 #include <xenforeignmemory.h>
2658 #include <xen/hvm/hvm_info_table.h>
2659 #if !defined(HVM_MAX_VCPUS)
2660 # error HVM_MAX_VCPUS not defined
2663 xc_interface *xc = NULL;
2664 xenforeignmemory_handle *xfmem;
2665 xenevtchn_handle *xe;
2666 xengnttab_handle *xg;
2670 xc = xc_interface_open(0, 0, 0);
2671 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2672 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2673 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2674 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2676 xfmem = xenforeignmemory_open(0, 0);
2677 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2679 xe = xenevtchn_open(0, 0);
2682 xg = xengnttab_open(0, 0);
2683 xengnttab_map_grant_ref(xg, 0, 0, 0);
2688 compile_prog
"" "$xen_libs $xen_stable_libs"
2690 xen_ctrl_version
=40701
2695 cat > $TMPC <<EOF &&
2696 #include <xenctrl.h>
2697 #include <xenstore.h>
2699 #include <xen/hvm/hvm_info_table.h>
2700 #if !defined(HVM_MAX_VCPUS)
2701 # error HVM_MAX_VCPUS not defined
2706 xc = xc_interface_open(0, 0, 0);
2707 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2708 xc_gnttab_open(NULL, 0);
2709 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2710 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2711 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2712 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2716 compile_prog
"" "$xen_libs"
2718 xen_ctrl_version
=40600
2723 cat > $TMPC <<EOF &&
2724 #include <xenctrl.h>
2725 #include <xenstore.h>
2727 #include <xen/hvm/hvm_info_table.h>
2728 #if !defined(HVM_MAX_VCPUS)
2729 # error HVM_MAX_VCPUS not defined
2734 xc = xc_interface_open(0, 0, 0);
2735 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2736 xc_gnttab_open(NULL, 0);
2737 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2738 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2739 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2743 compile_prog
"" "$xen_libs"
2745 xen_ctrl_version
=40500
2749 cat > $TMPC <<EOF &&
2750 #include <xenctrl.h>
2751 #include <xenstore.h>
2753 #include <xen/hvm/hvm_info_table.h>
2754 #if !defined(HVM_MAX_VCPUS)
2755 # error HVM_MAX_VCPUS not defined
2760 xc = xc_interface_open(0, 0, 0);
2761 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2762 xc_gnttab_open(NULL, 0);
2763 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2764 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2768 compile_prog
"" "$xen_libs"
2770 xen_ctrl_version
=40200
2774 if test "$xen" = "enabled" ; then
2775 feature_not_found
"xen (unsupported version)" \
2776 "Install a supported xen (xen 4.2 or newer)"
2781 if test "$xen" = enabled
; then
2782 if test $xen_ctrl_version -ge 40701 ; then
2783 xen_libs
="$xen_libs $xen_stable_libs "
2789 ##########################################
2790 # RDMA needs OpenFabrics libraries
2791 if test "$rdma" != "no" ; then
2793 #include <rdma/rdma_cma.h>
2794 int main(void) { return 0; }
2796 rdma_libs
="-lrdmacm -libverbs -libumad"
2797 if compile_prog
"" "$rdma_libs" ; then
2800 if test "$rdma" = "yes" ; then
2802 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2804 " (1) Fast: Install infiniband packages (devel) from your distro." \
2805 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2806 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2812 ##########################################
2815 cat > $TMPC <<EOF &&
2816 #include <sys/mman.h>
2823 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2829 if test "$rdma" = "yes" ; then
2832 if compile_prog
"" ""; then
2839 if ! compile_prog
"" ""; then
2840 error_exit
"PVRDMA is not supported since mremap is not implemented"
2849 if test "$pvrdma" = "yes" ; then
2850 error_exit
"PVRDMA requires rdma suppport"
2855 # Let's see if enhanced reg_mr is supported
2856 if test "$pvrdma" = "yes" ; then
2858 cat > $TMPC <<EOF &&
2859 #include <infiniband/verbs.h>
2865 struct ibv_pd *pd = NULL;
2871 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2878 if ! compile_prog
"" "-libverbs"; then
2879 QEMU_CFLAGS
="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2883 ##########################################
2884 # xfsctl() probe, used for file-posix.c
2885 if test "$xfs" != "no" ; then
2887 #include <stddef.h> /* NULL */
2888 #include <xfs/xfs.h>
2891 xfsctl(NULL, 0, 0, NULL);
2895 if compile_prog
"" "" ; then
2898 if test "$xfs" = "yes" ; then
2899 feature_not_found
"xfs" "Install xfsprogs/xfslibs devel"
2905 ##########################################
2906 # plugin linker support probe
2908 if test "$plugins" != "no"; then
2910 #########################################
2911 # See if --dynamic-list is supported by the linker
2913 ld_dynamic_list
="no"
2936 if compile_prog
"" "-Wl,--dynamic-list=$TMPTXT" ; then
2937 ld_dynamic_list
="yes"
2940 #########################################
2941 # See if -exported_symbols_list is supported by the linker
2943 ld_exported_symbols_list
="no"
2948 if compile_prog
"" "-Wl,-exported_symbols_list,$TMPTXT" ; then
2949 ld_exported_symbols_list
="yes"
2952 if test "$ld_dynamic_list" = "no" &&
2953 test "$ld_exported_symbols_list" = "no" ; then
2954 if test "$plugins" = "yes"; then
2956 "Plugin support requires dynamic linking and specifying a set of symbols " \
2957 "that are exported to plugins. Unfortunately your linker doesn't " \
2958 "support the flag (--dynamic-list or -exported_symbols_list) used " \
2968 ##########################################
2969 # glib support probe
2972 glib_modules
=gthread-2.0
2973 if test "$modules" = yes; then
2974 glib_modules
="$glib_modules gmodule-export-2.0"
2975 elif test "$plugins" = "yes"; then
2976 glib_modules
="$glib_modules gmodule-no-export-2.0"
2979 for i
in $glib_modules; do
2980 if $pkg_config --atleast-version=$glib_req_ver $i; then
2981 glib_cflags
=$
($pkg_config --cflags $i)
2982 glib_libs
=$
($pkg_config --libs $i)
2984 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
2988 # This workaround is required due to a bug in pkg-config file for glib as it
2989 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2991 if test "$static" = yes && test "$mingw32" = yes; then
2992 glib_cflags
="-DGLIB_STATIC_COMPILATION $glib_cflags"
2995 if ! test "$gio" = "no"; then
2997 if $pkg_config --atleast-version=$glib_req_ver gio-2.0
; then
2998 gio_cflags
=$
($pkg_config --cflags gio-2.0
)
2999 gio_libs
=$
($pkg_config --libs gio-2.0
)
3000 gdbus_codegen
=$
($pkg_config --variable=gdbus_codegen gio-2.0
)
3001 if ! has
"$gdbus_codegen"; then
3004 # Check that the libraries actually work -- Ubuntu 18.04 ships
3005 # with pkg-config --static --libs data for gio-2.0 that is missing
3006 # -lblkid and will give a link error.
3008 #include <gio/gio.h>
3011 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3015 if compile_prog
"$gio_cflags" "$gio_libs" ; then
3021 if test "$pass" = "yes" &&
3022 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0
; then
3023 gio_cflags
="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3024 gio_libs
="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3028 if test "$pass" = "no"; then
3029 if test "$gio" = "yes"; then
3030 feature_not_found
"gio" "Install libgio >= 2.0"
3039 # Sanity check that the current size_t matches the
3040 # size that glib thinks it should be. This catches
3041 # problems on multi-arch where people try to build
3042 # 32-bit QEMU while pointing at 64-bit glib headers
3047 #define QEMU_BUILD_BUG_ON(x) \
3048 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3051 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3056 if ! compile_prog
"$glib_cflags" "$glib_libs" ; then
3057 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3058 "You probably need to set PKG_CONFIG_LIBDIR"\
3059 "to point to the right pkg-config files for your"\
3063 # Silence clang warnings triggered by glib < 2.57.2
3066 typedef struct Foo {
3069 static void foo_free(Foo *f)
3073 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3074 int main(void) { return 0; }
3076 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3077 if cc_has_warning_flag
"-Wno-unused-function"; then
3078 glib_cflags
="$glib_cflags -Wno-unused-function"
3079 CONFIGURE_CFLAGS
="$CONFIGURE_CFLAGS -Wno-unused-function"
3083 ##########################################
3084 # SHA command probe for modules
3085 if test "$modules" = yes; then
3086 shacmd_probe
="sha1sum sha1 shasum"
3087 for c
in $shacmd_probe; do
3093 if test "$shacmd" = ""; then
3094 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
3098 ##########################################
3100 if test "$libssh" != "no" ; then
3101 if $pkg_config --exists "libssh >= 0.8.7"; then
3102 libssh_cflags
=$
($pkg_config libssh
--cflags)
3103 libssh_libs
=$
($pkg_config libssh
--libs)
3106 if test "$libssh" = "yes" ; then
3107 error_exit
"libssh required for --enable-libssh"
3113 ##########################################
3114 # TPM emulation is only on POSIX
3116 if test "$tpm" = ""; then
3117 if test "$mingw32" = "yes"; then
3122 elif test "$tpm" = "yes"; then
3123 if test "$mingw32" = "yes" ; then
3124 error_exit
"TPM emulation only available on POSIX systems"
3128 ##########################################
3131 #include <sys/types.h>
3132 #include <sys/uio.h>
3134 int main(void) { return sizeof(struct iovec); }
3137 if compile_prog
"" "" ; then
3141 ##########################################
3145 auto | enabled | internal
)
3146 # Simpler to always update submodule, even if not needed.
3147 git_submodules
="${git_submodules} dtc"
3151 ##########################################
3152 # opengl probe (for sdl2, gtk)
3154 if test "$opengl" != "no" ; then
3156 if $pkg_config epoxy
; then
3158 #include <epoxy/egl.h>
3159 int main(void) { return 0; }
3161 if compile_prog
"" "" ; then
3166 if test "$epoxy" = "yes" ; then
3167 opengl_cflags
="$($pkg_config --cflags epoxy)"
3168 opengl_libs
="$($pkg_config --libs epoxy)"
3171 if test "$opengl" = "yes" ; then
3172 feature_not_found
"opengl" "Please install epoxy with EGL"
3180 ##########################################
3183 if test "$numa" != "no" ; then
3186 int main(void) { return numa_available(); }
3189 if compile_prog
"" "-lnuma" ; then
3193 if test "$numa" = "yes" ; then
3194 feature_not_found
"numa" "install numactl devel"
3201 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3202 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3204 elif test "$tcmalloc" = "yes" ; then
3206 elif test "$jemalloc" = "yes" ; then
3212 if test "$linux_user" = "yes"; then
3214 #include <linux/usbdevice_fs.h>
3216 #ifndef USBDEVFS_GET_CAPABILITIES
3217 #error "USBDEVFS_GET_CAPABILITIES undefined"
3220 #ifndef USBDEVFS_DISCONNECT_CLAIM
3221 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3229 if compile_prog
"" ""; then
3234 ##########################################
3235 # check if we have VSS SDK headers for win
3237 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3238 test "$vss_win32_sdk" != "no" ; then
3239 case "$vss_win32_sdk" in
3240 "") vss_win32_include
="-isystem $source_path" ;;
3241 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
3242 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3243 vss_win32_include
="-isystem $source_path/.sdk/vss"
3244 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3246 *) vss_win32_include
="-isystem $vss_win32_sdk"
3249 #define __MIDL_user_allocate_free_DEFINED__
3250 #include <inc/win2003/vss.h>
3251 int main(void) { return VSS_CTX_BACKUP; }
3253 if compile_prog
"$vss_win32_include" "" ; then
3254 guest_agent_with_vss
="yes"
3255 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
3256 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3257 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
3259 if test "$vss_win32_sdk" != "" ; then
3260 echo "ERROR: Please download and install Microsoft VSS SDK:"
3261 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3262 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3263 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3264 echo "ERROR: The headers are extracted in the directory \`inc'."
3265 feature_not_found
"VSS support"
3267 guest_agent_with_vss
="no"
3271 ##########################################
3272 # lookup Windows platform SDK (if not specified)
3273 # The SDK is needed only to build .tlb (type library) file of guest agent
3274 # VSS provider from the source. It is usually unnecessary because the
3275 # pre-compiled .tlb file is included.
3277 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3278 test "$guest_agent_with_vss" = "yes" ; then
3279 if test -z "$win_sdk"; then
3280 programfiles
="$PROGRAMFILES"
3281 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
3282 if test -n "$programfiles"; then
3283 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
3285 feature_not_found
"Windows SDK"
3287 elif test "$win_sdk" = "no"; then
3292 ##########################################
3293 # check if mingw environment provides a recent ntddscsi.h
3294 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
3296 #include <windows.h>
3297 #include <ntddscsi.h>
3299 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3300 #error Missing required ioctl definitions
3302 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3306 if compile_prog
"" "" ; then
3307 guest_agent_ntddscsi
=yes
3308 libs_qga
="-lsetupapi -lcfgmgr32 $libs_qga"
3312 ##########################################
3316 auto | enabled | internal
)
3317 # Simpler to always update submodule, even if not needed.
3318 git_submodules
="${git_submodules} capstone"
3322 ##########################################
3323 # check and set a backend for coroutine
3325 # We prefer ucontext, but it's not always possible. The fallback
3326 # is sigcontext. On Windows the only valid backend is the Windows
3330 if test "$darwin" != "yes"; then
3332 #include <ucontext.h>
3333 #ifdef __stub_makecontext
3334 #error Ignoring glibc stub makecontext which will always fail
3336 int main(void) { makecontext(0, 0, 0); return 0; }
3338 if compile_prog
"" "" ; then
3343 if test "$coroutine" = ""; then
3344 if test "$mingw32" = "yes"; then
3346 elif test "$ucontext_works" = "yes"; then
3349 coroutine
=sigaltstack
3354 if test "$mingw32" != "yes"; then
3355 error_exit
"'windows' coroutine backend only valid for Windows"
3357 # Unfortunately the user visible backend name doesn't match the
3358 # coroutine-*.c filename for this case, so we have to adjust it here.
3362 if test "$ucontext_works" != "yes"; then
3363 feature_not_found
"ucontext"
3367 if test "$mingw32" = "yes"; then
3368 error_exit
"only the 'windows' coroutine backend is valid for Windows"
3372 error_exit
"unknown coroutine backend $coroutine"
3377 if test "$coroutine_pool" = ""; then
3381 if test "$debug_stack_usage" = "yes"; then
3382 if test "$coroutine_pool" = "yes"; then
3383 echo "WARN: disabling coroutine pool for stack usage debugging"
3388 ##################################################
3392 if test "$safe_stack" = "yes"; then
3394 int main(int argc, char *argv[])
3396 #if ! __has_feature(safe_stack)
3397 #error SafeStack Disabled
3402 flag
="-fsanitize=safe-stack"
3403 # Check that safe-stack is supported and enabled.
3404 if compile_prog
"-Werror $flag" "$flag"; then
3405 # Flag needed both at compilation and at linking
3406 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
3407 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
3409 error_exit
"SafeStack not supported by your compiler"
3411 if test "$coroutine" != "ucontext"; then
3412 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
3416 int main(int argc, char *argv[])
3418 #if defined(__has_feature)
3419 #if __has_feature(safe_stack)
3420 #error SafeStack Enabled
3426 if test "$safe_stack" = "no"; then
3427 # Make sure that safe-stack is disabled
3428 if ! compile_prog
"-Werror" ""; then
3429 # SafeStack was already enabled, try to explicitly remove the feature
3430 flag
="-fno-sanitize=safe-stack"
3431 if ! compile_prog
"-Werror $flag" "$flag"; then
3432 error_exit
"Configure cannot disable SafeStack"
3434 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
3435 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
3437 else # "$safe_stack" = ""
3438 # Set safe_stack to yes or no based on pre-existing flags
3439 if compile_prog
"-Werror" ""; then
3443 if test "$coroutine" != "ucontext"; then
3444 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
3450 ########################################
3451 # check if cpuid.h is usable.
3456 unsigned a, b, c, d;
3457 int max = __get_cpuid_max(0, 0);
3460 __cpuid(1, a, b, c, d);
3464 __cpuid_count(7, 0, a, b, c, d);
3470 if compile_prog
"" "" ; then
3474 ##########################################
3475 # avx2 optimization requirement check
3477 # There is no point enabling this if cpuid.h is not usable,
3478 # since we won't be able to select the new routines.
3480 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
3482 #pragma GCC push_options
3483 #pragma GCC target("avx2")
3485 #include <immintrin.h>
3486 static int bar(void *a) {
3487 __m256i x = *(__m256i *)a;
3488 return _mm256_testz_si256(x, x);
3490 int main(int argc, char *argv[]) { return bar(argv[0]); }
3492 if compile_object
"-Werror" ; then
3499 ##########################################
3500 # avx512f optimization requirement check
3502 # There is no point enabling this if cpuid.h is not usable,
3503 # since we won't be able to select the new routines.
3504 # by default, it is turned off.
3505 # if user explicitly want to enable it, check environment
3507 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3509 #pragma GCC push_options
3510 #pragma GCC target("avx512f")
3512 #include <immintrin.h>
3513 static int bar(void *a) {
3514 __m512i x = *(__m512i *)a;
3515 return _mm512_test_epi64_mask(x, x);
3517 int main(int argc, char *argv[])
3519 return bar(argv[0]);
3522 if ! compile_object
"-Werror" ; then
3529 ########################################
3530 # check if __[u]int128_t is usable.
3543 if compile_prog
"" "" ; then
3547 #########################################
3548 # See if 128-bit atomic operations are supported.
3551 if test "$int128" = "yes"; then
3555 unsigned __int128 x = 0, y = 0;
3556 y = __atomic_load(&x, 0);
3557 __atomic_store(&x, y, 0);
3558 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
3562 if compile_prog
"" "" ; then
3568 if test "$int128" = yes && test "$atomic128" = no
; then
3572 unsigned __int128 x = 0, y = 0;
3573 __sync_val_compare_and_swap_16(&x, y, x);
3577 if compile_prog
"" "" ; then
3582 #########################################
3583 # See if 64-bit atomic operations are supported.
3584 # Note that without __atomic builtins, we can only
3585 # assume atomic loads/stores max at pointer size.
3591 uint64_t x = 0, y = 0;
3592 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3593 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3594 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3595 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3596 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
3600 if compile_prog
"" "" ; then
3604 ########################################
3605 # check if getauxval is available.
3609 #include <sys/auxv.h>
3611 return getauxval(AT_HWCAP) == 0;
3614 if compile_prog
"" "" ; then
3618 ########################################
3619 # check if ccache is interfering with
3620 # semantic analysis of macros
3625 static const int Z = 1;
3626 #define fn() ({ Z; })
3627 #define TAUT(X) ((X) == Z)
3628 #define PAREN(X, Y) (X == Y)
3630 int main(int argc, char *argv[])
3636 if (PAREN(x, y)) return 0;
3637 if (TAUT(Z)) return 0;
3642 if ! compile_object
"-Werror"; then
3646 #################################################
3647 # clang does not support glibc + FORTIFY_SOURCE.
3649 if test "$fortify_source" != "no"; then
3650 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
3651 fortify_source
="no";
3652 elif test -n "$cxx" && has
$cxx &&
3653 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
3654 fortify_source
="no";
3656 fortify_source
="yes"
3660 ##########################################
3661 # check for usable membarrier system call
3662 if test "$membarrier" = "yes"; then
3664 if test "$mingw32" = "yes" ; then
3666 elif test "$linux" = "yes" ; then
3668 #include <linux/membarrier.h>
3669 #include <sys/syscall.h>
3673 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3674 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3678 if compile_prog
"" "" ; then
3682 if test "$have_membarrier" = "no"; then
3683 feature_not_found
"membarrier" "membarrier system call not available"
3686 # Do not enable it by default even for Mingw32, because it doesn't
3691 ##########################################
3692 # check for usable AF_VSOCK environment
3696 #include <sys/types.h>
3697 #include <sys/socket.h>
3698 #if !defined(AF_VSOCK)
3699 # error missing AF_VSOCK flag
3701 #include <linux/vm_sockets.h>
3704 struct sockaddr_vm svm;
3705 socklen_t len = sizeof(svm);
3706 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
3707 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
3708 if ((ret == -1) && (errno == ENOTCONN)) {
3714 if compile_prog
"" "" ; then
3718 ##########################################
3719 # check for usable AF_ALG environment
3723 #include <sys/types.h>
3724 #include <sys/socket.h>
3725 #include <linux/if_alg.h>
3728 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3732 if compile_prog
"" "" ; then
3735 if test "$crypto_afalg" = "yes"
3737 if test "$have_afalg" != "yes"
3739 error_exit
"AF_ALG requested but could not be detected"
3744 ##########################################
3745 # checks for sanitizers
3749 have_asan_iface_h
=no
3750 have_asan_iface_fiber
=no
3752 if test "$sanitizers" = "yes" ; then
3754 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
3758 # we could use a simple skeleton for flags checks, but this also
3759 # detect the static linking issue of ubsan, see also:
3760 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
3764 void *tmp = malloc(10);
3766 return *(int *)(tmp + 2);
3771 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3775 if check_include
"sanitizer/asan_interface.h" ; then
3776 have_asan_iface_h
=yes
3780 #include <sanitizer/asan_interface.h>
3782 __sanitizer_start_switch_fiber(0, 0, 0);
3786 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3787 have_asan_iface_fiber
=yes
3791 # Thread sanitizer is, for now, much noisier than the other sanitizers;
3792 # keep it separate until that is not the case.
3793 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
3794 error_exit
"TSAN is not supported with other sanitiziers."
3797 have_tsan_iface_fiber
=no
3798 if test "$tsan" = "yes" ; then
3800 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
3804 #include <sanitizer/tsan_interface.h>
3806 __tsan_create_fiber(0);
3810 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
3811 have_tsan_iface_fiber
=yes
3815 ##########################################
3819 auto | enabled | internal
)
3820 # Simpler to always update submodule, even if not needed.
3821 git_submodules
="${git_submodules} slirp"
3825 # Check for slirp smbd dupport
3826 : ${smbd=${SMBD-/usr/sbin/smbd}}
3827 if test "$slirp_smbd" != "no" ; then
3828 if test "$mingw32" = "yes" ; then
3829 if test "$slirp_smbd" = "yes" ; then
3830 error_exit
"Host smbd not supported on this platform."
3838 ##########################################
3839 # check for usable __NR_keyctl syscall
3841 if test "$linux" = "yes" ; then
3846 #include <asm/unistd.h>
3847 #include <linux/keyctl.h>
3850 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
3853 if compile_prog
"" "" ; then
3857 if test "$secret_keyring" != "no"
3859 if test "$have_keyring" = "yes"
3863 if test "$secret_keyring" = "yes"
3865 error_exit
"syscall __NR_keyctl requested, \
3866 but not implemented on your system"
3873 ##########################################
3875 # After here, no more $cc or $ld runs
3879 if test "$gcov" = "yes" ; then
3881 elif test "$fortify_source" = "yes" ; then
3882 QEMU_CFLAGS
="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3888 # Ensure there's only a single GP
3889 QEMU_CFLAGS
="-msmall-data $QEMU_CFLAGS"
3893 if test "$gprof" = "yes" ; then
3894 QEMU_CFLAGS
="-p $QEMU_CFLAGS"
3895 QEMU_LDFLAGS
="-p $QEMU_LDFLAGS"
3898 if test "$have_asan" = "yes"; then
3899 QEMU_CFLAGS
="-fsanitize=address $QEMU_CFLAGS"
3900 QEMU_LDFLAGS
="-fsanitize=address $QEMU_LDFLAGS"
3901 if test "$have_asan_iface_h" = "no" ; then
3902 echo "ASAN build enabled, but ASAN header missing." \
3903 "Without code annotation, the report may be inferior."
3904 elif test "$have_asan_iface_fiber" = "no" ; then
3905 echo "ASAN build enabled, but ASAN header is too old." \
3906 "Without code annotation, the report may be inferior."
3909 if test "$have_tsan" = "yes" ; then
3910 if test "$have_tsan_iface_fiber" = "yes" ; then
3911 QEMU_CFLAGS
="-fsanitize=thread $QEMU_CFLAGS"
3912 QEMU_LDFLAGS
="-fsanitize=thread $QEMU_LDFLAGS"
3914 error_exit
"Cannot enable TSAN due to missing fiber annotation interface."
3916 elif test "$tsan" = "yes" ; then
3917 error_exit
"Cannot enable TSAN due to missing sanitize thread interface."
3919 if test "$have_ubsan" = "yes"; then
3920 QEMU_CFLAGS
="-fsanitize=undefined $QEMU_CFLAGS"
3921 QEMU_LDFLAGS
="-fsanitize=undefined $QEMU_LDFLAGS"
3924 ##########################################
3926 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
3927 if test "$solaris" = "no" && test "$tsan" = "no"; then
3928 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
3929 QEMU_LDFLAGS
="-Wl,--warn-common $QEMU_LDFLAGS"
3933 # Use ASLR, no-SEH and DEP if available
3934 if test "$mingw32" = "yes" ; then
3935 flags
="--no-seh --nxcompat"
3937 # Disable ASLR for debug builds to allow debugging with gdb
3938 if test "$debug" = "no" ; then
3939 flags
="--dynamicbase $flags"
3942 for flag
in $flags; do
3943 if ld_has
$flag ; then
3944 QEMU_LDFLAGS
="-Wl,$flag $QEMU_LDFLAGS"
3949 # Probe for guest agent support/options
3951 if [ "$guest_agent" != "no" ]; then
3952 if [ "$softmmu" = no
-a "$want_tools" = no
] ; then
3954 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
3956 elif [ "$guest_agent" != yes ]; then
3959 error_exit
"Guest agent is not supported on this platform"
3963 # Guest agent Windows MSI package
3965 if test "$QEMU_GA_MANUFACTURER" = ""; then
3966 QEMU_GA_MANUFACTURER
=QEMU
3968 if test "$QEMU_GA_DISTRO" = ""; then
3969 QEMU_GA_DISTRO
=Linux
3971 if test "$QEMU_GA_VERSION" = ""; then
3972 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
3975 QEMU_GA_MSI_MINGW_DLL_PATH
="$($pkg_config --variable=prefix glib-2.0)/bin"
3977 # Mac OS X ships with a broken assembler
3979 if { test "$cpu" = "i386" ||
test "$cpu" = "x86_64"; } && \
3980 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
3981 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
3982 # Different host OS linkers have different ideas about the name of the ELF
3983 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3984 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3985 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
3986 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3987 ld_i386_emulation
="$emu"
3994 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
3995 # or -march=z10 (which is the lowest architecture level that Clang supports)
3996 if test "$cpu" = "s390x" ; then
3998 compile_prog
"-march=z900" ""
4000 if [ $has_z900 = 0 ] || compile_object
"-march=z10 -msoft-float -Werror"; then
4001 if [ $has_z900 != 0 ]; then
4002 echo "WARNING: Your compiler does not support the z900!"
4003 echo " The s390-ccw bios will only work with guest CPUs >= z10."
4005 roms
="$roms s390-ccw"
4006 # SLOF is required for building the s390-ccw firmware on s390x,
4007 # since it is using the libnet code from SLOF for network booting.
4008 git_submodules
="${git_submodules} roms/SLOF"
4012 # Check that the C++ compiler exists and works with the C compiler.
4013 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4016 int c_function(void);
4017 int main(void) { return c_function(); }
4024 int c_function(void);
4026 int c_function(void) { return 42; }
4031 if do_cxx
$CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
4032 # C++ compiler $cxx works ok with C compiler $cc
4035 echo "C++ compiler $cxx does not work with C compiler $cc"
4036 echo "Disabling C++ specific optional code"
4040 echo "No C++ compiler available; disabling C++ specific optional code"
4044 if !(GIT
="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4048 config_host_mak
="config-host.mak"
4050 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4051 echo >> $config_host_mak
4053 echo all
: >> $config_host_mak
4054 echo "GIT=$git" >> $config_host_mak
4055 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
4056 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
4058 echo "ARCH=$ARCH" >> $config_host_mak
4060 if test "$debug_tcg" = "yes" ; then
4061 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4063 if test "$strip_opt" = "yes" ; then
4064 echo "STRIP=${strip}" >> $config_host_mak
4066 if test "$mingw32" = "yes" ; then
4067 echo "CONFIG_WIN32=y" >> $config_host_mak
4068 if test "$guest_agent_with_vss" = "yes" ; then
4069 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4070 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4071 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4073 if test "$guest_agent_ntddscsi" = "yes" ; then
4074 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
4076 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4077 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4078 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4079 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4081 echo "CONFIG_POSIX=y" >> $config_host_mak
4084 if test "$linux" = "yes" ; then
4085 echo "CONFIG_LINUX=y" >> $config_host_mak
4088 if test "$darwin" = "yes" ; then
4089 echo "CONFIG_DARWIN=y" >> $config_host_mak
4092 if test "$solaris" = "yes" ; then
4093 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4095 if test "$haiku" = "yes" ; then
4096 echo "CONFIG_HAIKU=y" >> $config_host_mak
4098 if test "$static" = "yes" ; then
4099 echo "CONFIG_STATIC=y" >> $config_host_mak
4101 if test "$profiler" = "yes" ; then
4102 echo "CONFIG_PROFILER=y" >> $config_host_mak
4104 if test "$want_tools" = "yes" ; then
4105 echo "CONFIG_TOOLS=y" >> $config_host_mak
4107 if test "$guest_agent" = "yes" ; then
4108 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4110 if test "$slirp_smbd" = "yes" ; then
4111 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4112 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4114 if test "$l2tpv3" = "yes" ; then
4115 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4117 if test "$gprof" = "yes" ; then
4118 echo "CONFIG_GPROF=y" >> $config_host_mak
4120 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4121 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4122 if test "$block_drv_whitelist_tools" = "yes" ; then
4123 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
4125 if test "$xfs" = "yes" ; then
4126 echo "CONFIG_XFS=y" >> $config_host_mak
4128 qemu_version
=$
(head $source_path/VERSION
)
4129 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4130 echo "SRC_PATH=$source_path" >> $config_host_mak
4131 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4132 if test "$modules" = "yes"; then
4133 # $shacmd can generate a hash started with digit, which the compiler doesn't
4134 # like as an symbol. So prefix it with an underscore
4135 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
4136 echo "CONFIG_MODULES=y" >> $config_host_mak
4138 if test "$module_upgrades" = "yes"; then
4139 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4141 if test "$have_usbfs" = "yes" ; then
4142 echo "CONFIG_USBFS=y" >> $config_host_mak
4144 if test "$gio" = "yes" ; then
4145 echo "CONFIG_GIO=y" >> $config_host_mak
4146 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4147 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
4149 if test "$gdbus_codegen" != "" ; then
4150 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
4152 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
4154 if test "$xen" = "enabled" ; then
4155 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4156 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4157 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4158 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
4160 if test "$vhost_scsi" = "yes" ; then
4161 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4163 if test "$vhost_net" = "yes" ; then
4164 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4166 if test "$vhost_net_user" = "yes" ; then
4167 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
4169 if test "$vhost_net_vdpa" = "yes" ; then
4170 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4172 if test "$vhost_crypto" = "yes" ; then
4173 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4175 if test "$vhost_vsock" = "yes" ; then
4176 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
4177 if test "$vhost_user" = "yes" ; then
4178 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4181 if test "$vhost_kernel" = "yes" ; then
4182 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4184 if test "$vhost_user" = "yes" ; then
4185 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4187 if test "$vhost_vdpa" = "yes" ; then
4188 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4190 if test "$vhost_user_fs" = "yes" ; then
4191 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4193 if test "$iovec" = "yes" ; then
4194 echo "CONFIG_IOVEC=y" >> $config_host_mak
4196 if test "$membarrier" = "yes" ; then
4197 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4199 if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4200 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4203 if test "$opengl" = "yes" ; then
4204 echo "CONFIG_OPENGL=y" >> $config_host_mak
4205 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4206 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4209 if test "$avx2_opt" = "yes" ; then
4210 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4213 if test "$avx512f_opt" = "yes" ; then
4214 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4217 # XXX: suppress that
4218 if [ "$bsd" = "yes" ] ; then
4219 echo "CONFIG_BSD=y" >> $config_host_mak
4222 if test "$qom_cast_debug" = "yes" ; then
4223 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4226 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4227 if test "$coroutine_pool" = "yes" ; then
4228 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4230 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4233 if test "$debug_stack_usage" = "yes" ; then
4234 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4237 if test "$crypto_afalg" = "yes" ; then
4238 echo "CONFIG_AF_ALG=y" >> $config_host_mak
4241 if test "$have_asan_iface_fiber" = "yes" ; then
4242 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4245 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4246 echo "CONFIG_TSAN=y" >> $config_host_mak
4249 if test "$cpuid_h" = "yes" ; then
4250 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4253 if test "$int128" = "yes" ; then
4254 echo "CONFIG_INT128=y" >> $config_host_mak
4257 if test "$atomic128" = "yes" ; then
4258 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4261 if test "$cmpxchg128" = "yes" ; then
4262 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4265 if test "$atomic64" = "yes" ; then
4266 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4269 if test "$getauxval" = "yes" ; then
4270 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4273 if test "$libssh" = "yes" ; then
4274 echo "CONFIG_LIBSSH=y" >> $config_host_mak
4275 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4276 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
4279 if test "$live_block_migration" = "yes" ; then
4280 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4283 if test "$tpm" = "yes"; then
4284 echo 'CONFIG_TPM=y' >> $config_host_mak
4287 if test "$rdma" = "yes" ; then
4288 echo "CONFIG_RDMA=y" >> $config_host_mak
4289 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
4292 if test "$pvrdma" = "yes" ; then
4293 echo "CONFIG_PVRDMA=y" >> $config_host_mak
4296 if test "$replication" = "yes" ; then
4297 echo "CONFIG_REPLICATION=y" >> $config_host_mak
4300 if test "$have_af_vsock" = "yes" ; then
4301 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4304 if test "$debug_mutex" = "yes" ; then
4305 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4308 if test "$bochs" = "yes" ; then
4309 echo "CONFIG_BOCHS=y" >> $config_host_mak
4311 if test "$cloop" = "yes" ; then
4312 echo "CONFIG_CLOOP=y" >> $config_host_mak
4314 if test "$dmg" = "yes" ; then
4315 echo "CONFIG_DMG=y" >> $config_host_mak
4317 if test "$qcow1" = "yes" ; then
4318 echo "CONFIG_QCOW1=y" >> $config_host_mak
4320 if test "$vdi" = "yes" ; then
4321 echo "CONFIG_VDI=y" >> $config_host_mak
4323 if test "$vvfat" = "yes" ; then
4324 echo "CONFIG_VVFAT=y" >> $config_host_mak
4326 if test "$qed" = "yes" ; then
4327 echo "CONFIG_QED=y" >> $config_host_mak
4329 if test "$parallels" = "yes" ; then
4330 echo "CONFIG_PARALLELS=y" >> $config_host_mak
4333 if test "$plugins" = "yes" ; then
4334 echo "CONFIG_PLUGIN=y" >> $config_host_mak
4335 # Copy the export object list to the build dir
4336 if test "$ld_dynamic_list" = "yes" ; then
4337 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4338 ld_symbols
=qemu-plugins-ld.symbols
4339 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4340 elif test "$ld_exported_symbols_list" = "yes" ; then
4341 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4342 ld64_symbols
=qemu-plugins-ld64.symbols
4343 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4344 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" |
sed 's/;//g' | \
4345 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4348 "If \$plugins=yes, either \$ld_dynamic_list or " \
4349 "\$ld_exported_symbols_list should have been set to 'yes'."
4353 if test -n "$gdb_bin"; then
4354 gdb_version
=$
($gdb_bin --version |
head -n 1)
4355 if version_ge
${gdb_version##* } 9.1; then
4356 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4360 if test "$secret_keyring" = "yes" ; then
4361 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4364 echo "ROMS=$roms" >> $config_host_mak
4365 echo "MAKE=$make" >> $config_host_mak
4366 echo "PYTHON=$python" >> $config_host_mak
4367 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
4368 echo "MESON=$meson" >> $config_host_mak
4369 echo "NINJA=$ninja" >> $config_host_mak
4370 echo "CC=$cc" >> $config_host_mak
4371 echo "HOST_CC=$host_cc" >> $config_host_mak
4372 if $iasl -h > /dev
/null
2>&1; then
4373 echo "CONFIG_IASL=$iasl" >> $config_host_mak
4375 echo "AR=$ar" >> $config_host_mak
4376 echo "AS=$as" >> $config_host_mak
4377 echo "CCAS=$ccas" >> $config_host_mak
4378 echo "CPP=$cpp" >> $config_host_mak
4379 echo "OBJCOPY=$objcopy" >> $config_host_mak
4380 echo "LD=$ld" >> $config_host_mak
4381 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
4382 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
4383 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
4384 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4385 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
4386 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
4387 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
4388 echo "EXESUF=$EXESUF" >> $config_host_mak
4389 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
4391 if test "$rng_none" = "yes"; then
4392 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4395 # use included Linux headers
4396 if test "$linux" = "yes" ; then
4397 mkdir
-p linux-headers
4415 # For most CPUs the kernel architecture name and QEMU CPU name match.
4419 # For non-KVM architectures we will not have asm headers
4420 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4421 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
4425 for target
in $target_list; do
4426 target_dir
="$target"
4427 target_name
=$
(echo $target | cut
-d '-' -f 1)
4428 mkdir
-p $target_dir
4430 *-user) symlink
"../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4431 *) symlink
"../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4435 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" |
sed 's/%M/@0@/' >> $config_host_mak
4436 if test "$default_targets" = "yes"; then
4437 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
4440 if test "$numa" = "yes"; then
4441 echo "CONFIG_NUMA=y" >> $config_host_mak
4442 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
4445 if test "$ccache_cpp2" = "yes"; then
4446 echo "export CCACHE_CPP2=y" >> $config_host_mak
4449 if test "$safe_stack" = "yes"; then
4450 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
4453 # If we're using a separate build tree, set it up now.
4454 # DIRS are directories which we simply mkdir in the build tree;
4455 # LINKS are things to symlink back into the source tree
4456 # (these can be both files and directories).
4457 # Caution: do not add files or directories here using wildcards. This
4458 # will result in problems later if a new file matching the wildcard is
4459 # added to the source tree -- nothing will cause configure to be rerun
4460 # so the build tree will be missing the link back to the new file, and
4461 # tests might fail. Prefer to keep the relevant files in their own
4462 # directory and symlink the directory instead.
4463 # UNLINK is used to remove symlinks from older development versions
4464 # that might get into the way when doing "git update" without doing
4465 # a "make distclean" in between.
4466 DIRS
="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
4467 DIRS
="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
4468 DIRS
="$DIRS docs docs/interop fsdev scsi"
4469 DIRS
="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
4470 DIRS
="$DIRS roms/seabios"
4471 DIRS
="$DIRS contrib/plugins/"
4473 LINKS
="$LINKS tests/tcg/Makefile.target"
4474 LINKS
="$LINKS pc-bios/optionrom/Makefile"
4475 LINKS
="$LINKS pc-bios/s390-ccw/Makefile"
4476 LINKS
="$LINKS roms/seabios/Makefile"
4477 LINKS
="$LINKS pc-bios/qemu-icon.bmp"
4478 LINKS
="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
4479 LINKS
="$LINKS tests/acceptance tests/data"
4480 LINKS
="$LINKS tests/qemu-iotests/check"
4481 LINKS
="$LINKS python"
4482 LINKS
="$LINKS contrib/plugins/Makefile "
4483 UNLINK
="pc-bios/keymaps"
4485 $source_path/pc-bios
/*.bin \
4486 $source_path/pc-bios
/*.elf \
4487 $source_path/pc-bios
/*.lid \
4488 $source_path/pc-bios
/*.rom \
4489 $source_path/pc-bios
/*.dtb \
4490 $source_path/pc-bios
/*.img \
4491 $source_path/pc-bios
/openbios-
* \
4492 $source_path/pc-bios
/u-boot.
* \
4493 $source_path/pc-bios
/edk2-
*.fd.bz2 \
4494 $source_path/pc-bios
/palcode-
* \
4495 $source_path/pc-bios
/qemu_vga.ndrv
4498 LINKS
="$LINKS pc-bios/$(basename $bios_file)"
4501 for f
in $LINKS ; do
4502 if [ -e "$source_path/$f" ]; then
4503 symlink
"$source_path/$f" "$f"
4506 for f
in $UNLINK ; do
4507 if [ -L "$f" ]; then
4512 (for i
in $cross_cc_vars; do
4515 export target_list source_path use_containers ARCH
4516 $source_path/tests
/tcg
/configure.sh
)
4518 # temporary config to build submodules
4519 for rom
in seabios
; do
4520 config_mak
=roms
/$rom/config.mak
4521 echo "# Automatically generated by configure - do not modify" > $config_mak
4522 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
4523 echo "AS=$as" >> $config_mak
4524 echo "CCAS=$ccas" >> $config_mak
4525 echo "CC=$cc" >> $config_mak
4526 echo "BCC=bcc" >> $config_mak
4527 echo "CPP=$cpp" >> $config_mak
4528 echo "OBJCOPY=objcopy" >> $config_mak
4529 echo "IASL=$iasl" >> $config_mak
4530 echo "LD=$ld" >> $config_mak
4531 echo "RANLIB=$ranlib" >> $config_mak
4534 if test "$skip_meson" = no
; then
4535 cross
="config-meson.cross.new"
4537 echo "'$(echo $* | sed "s
/ /','/g
")'"
4540 echo "# Automatically generated by configure - do not modify" > $cross
4541 echo "[properties]" >> $cross
4543 # unroll any custom device configs
4544 for a
in $device_archs; do
4545 eval "c=\$devices_${a}"
4546 echo "${a}-softmmu = '$c'" >> $cross
4549 test -z "$cxx" && echo "link_language = 'c'" >> $cross
4550 echo "[built-in options]" >> $cross
4551 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
4552 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
4553 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
4554 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
4555 echo "[binaries]" >> $cross
4556 echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
4557 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
4558 test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
4559 echo "ar = [$(meson_quote $ar)]" >> $cross
4560 echo "nm = [$(meson_quote $nm)]" >> $cross
4561 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
4562 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
4563 if has
$sdl2_config; then
4564 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
4566 echo "strip = [$(meson_quote $strip)]" >> $cross
4567 echo "windres = [$(meson_quote $windres)]" >> $cross
4568 if test "$cross_compile" = "yes"; then
4569 cross_arg
="--cross-file config-meson.cross"
4570 echo "[host_machine]" >> $cross
4571 if test "$mingw32" = "yes" ; then
4572 echo "system = 'windows'" >> $cross
4574 if test "$linux" = "yes" ; then
4575 echo "system = 'linux'" >> $cross
4577 if test "$darwin" = "yes" ; then
4578 echo "system = 'darwin'" >> $cross
4582 echo "cpu_family = 'x86'" >> $cross
4585 echo "cpu_family = 'x86_64'" >> $cross
4588 echo "cpu_family = 'ppc64'" >> $cross
4591 echo "cpu_family = '$ARCH'" >> $cross
4594 echo "cpu = '$cpu'" >> $cross
4595 if test "$bigendian" = "yes" ; then
4596 echo "endian = 'big'" >> $cross
4598 echo "endian = 'little'" >> $cross
4601 cross_arg
="--native-file config-meson.cross"
4603 mv $cross config-meson.cross
4605 rm -rf meson-private meson-info meson-logs
4606 NINJA
=$ninja $meson setup \
4607 --prefix "$prefix" \
4608 --libdir "$libdir" \
4609 --libexecdir "$libexecdir" \
4610 --bindir "$bindir" \
4611 --includedir "$includedir" \
4612 --datadir "$datadir" \
4613 --mandir "$mandir" \
4614 --sysconfdir "$sysconfdir" \
4615 --localedir "$localedir" \
4616 --localstatedir "$local_statedir" \
4617 -Ddocdir="$docdir" \
4618 -Dqemu_firmwarepath="$firmwarepath" \
4619 -Dqemu_suffix="$qemu_suffix" \
4620 -Doptimization=$
(if test "$debug" = yes; then echo 0; else echo 2; fi) \
4621 -Ddebug=$
(if test "$debug_info" = yes; then echo true
; else echo false
; fi) \
4622 -Dwerror=$
(if test "$werror" = yes; then echo true
; else echo false
; fi) \
4623 -Dstrip=$
(if test "$strip_opt" = yes; then echo true
; else echo false
; fi) \
4624 -Db_pie=$
(if test "$pie" = yes; then echo true
; else echo false
; fi) \
4625 -Db_coverage=$
(if test "$gcov" = yes; then echo true
; else echo false
; fi) \
4626 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing \
4627 $
(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
4628 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
4629 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
4630 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
4631 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
4632 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
4633 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
4634 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
4635 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
4636 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
4637 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
4638 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
4639 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
4640 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
4641 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
4642 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
4643 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
4644 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
4645 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
4646 $
(if test "$default_feature" = no
; then echo "-Dauto_features=disabled"; fi) \
4647 -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
4648 -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
4649 -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file -Dlinux_aio=$linux_aio \
4650 -Dnetmap=$netmap -Dvde=$vde \
4652 "$PWD" "$source_path"
4654 if test "$?" -ne 0 ; then
4655 error_exit
"meson setup failed"
4658 if test -f meson-private
/cmd_line.txt
; then
4659 # Adjust old command line options whose type was changed
4660 # Avoids having to use "setup --wipe" when Meson is upgraded
4662 s/^gettext = true$/gettext = auto/;
4663 s/^gettext = false$/gettext = disabled/;
4664 /^b_staticpic/ && next;
4665 print;' meson-private
/cmd_line.txt
4669 if test -n "${deprecated_features}"; then
4670 echo "Warning, deprecated features enabled."
4671 echo "Please see docs/about/deprecated.rst"
4672 echo " features: ${deprecated_features}"
4675 # Create list of config switches that should be poisoned in common code...
4676 # but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
4677 target_configs_h
=$
(ls *-config-devices.h
*-config-target.h
2>/dev
/null
)
4678 if test -n "$target_configs_h" ; then
4679 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
4680 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
4681 $target_configs_h |
sort -u > config-poison.h
4686 # Save the configure command line for later reuse.
4687 cat <<EOD >config.status
4689 # Generated by configure.
4690 # Run this file to recreate the current configuration.
4691 # Compiler output produced by configure, useful for debugging
4692 # configure, is in config.log if it exists.
4698 eval envval
=\$
$envname
4700 if test -n "$envval"
4702 echo "$envname='$envval'" >> config.status
4703 echo "export $envname" >> config.status
4705 echo "unset $envname" >> config.status
4709 # Preserve various env variables that influence what
4710 # features/build target configure will detect
4716 preserve_env INSTALL
4718 preserve_env LD_LIBRARY_PATH
4719 preserve_env LIBTOOL
4722 preserve_env OBJCOPY
4724 preserve_env PKG_CONFIG
4725 preserve_env PKG_CONFIG_LIBDIR
4726 preserve_env PKG_CONFIG_PATH
4728 preserve_env SDL2_CONFIG
4731 preserve_env WINDRES
4733 printf "exec" >>config.status
4734 for i
in "$0" "$@"; do
4735 test "$i" = --skip-meson ||
printf " %s" "$(quote_sh "$i")" >>config.status
4737 echo ' "$@"' >>config.status
4738 chmod +x config.status