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
95 while test -n "$2"; do
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
112 if test -n "$BASH_VERSION"; then eval '
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log
2>&1 ||
return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
126 # Don't bother rerunning the compile if we were already using -Werror
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log
2>&1 && return $?
134 error_exit
"configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
141 do_compiler
"$cc" "$@"
145 do_compiler
"$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
150 eval $1=\
${$1:+\"\$$1 \"}\
$2
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS
="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CONFIGURE_CXXFLAGS
=$
(echo "$CONFIGURE_CFLAGS" |
sed s
/-std=gnu99
/-std=gnu
++11/)
159 for arg
in $QEMU_CFLAGS; do
161 -Wstrict-prototypes|
-Wmissing-prototypes|
-Wnested-externs|\
162 -Wold-style-declaration|
-Wold-style-definition|
-Wredundant-decls)
165 QEMU_CXXFLAGS
=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
173 do_cc
$CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
179 do_cc
$CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
180 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
183 # symbolically link $1 to $2. Portable version of "ln -sf".
186 mkdir
-p "$(dirname "$2")"
190 # check whether a command is available to this shell (may be either an
191 # executable or a builtin)
193 type "$1" >/dev
/null
2>&1
197 local_ver1
=`echo $1 | tr . ' '`
198 local_ver2
=`echo $2 | tr . ' '`
202 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
206 # the second argument finished, the first must be greater or equal
207 test $# = 1 && return 0
208 test $local_first -lt $2 && return 1
209 test $local_first -gt $2 && return 0
216 echo "$trace_backends" |
grep "$1" >/dev
/null
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 block_drv_rw_whitelist
=""
240 block_drv_ro_whitelist
=""
249 gdb_bin
=$
(command -v "gdb-multiarch" ||
command -v "gdb")
251 if test -e "$source_path/.git"
254 git_submodules
="ui/keycodemapdb"
255 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
256 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
261 if ! test -f "$source_path/ui/keycodemapdb/README"
264 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
266 echo "This is not a GIT checkout but module content appears to"
267 echo "be missing. Do not use 'git archive' or GitHub download links"
268 echo "to acquire QEMU source archives. Non-GIT builds are only"
269 echo "supported with source archives linked from:"
271 echo " https://www.qemu.org/download/#source"
273 echo "Developers working with GIT can use scripts/archive-source.sh"
274 echo "if they need to create valid source archives."
281 # Don't accept a target_list environment variable.
283 unset target_list_exclude
285 # Default value for a variable defining feature "foo".
286 # * foo="no" feature will only be used if --enable-foo arg is given
287 # * foo="" feature will be searched for, and if found, will be used
288 # unless --disable-foo is given
289 # * foo="yes" this value will only be set by --enable-foo flag.
290 # feature will searched for,
291 # if not found, configure exits with error
293 # Always add --enable-foo and --disable-foo command line args.
294 # Distributions want to ensure that several features are compiled in, and it
295 # is impossible without a --enable-foo that exits if a feature is not found.
298 # parse CC options second
300 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
302 --without-default-features)
323 vde
="$default_feature"
328 xen
="$default_feature"
329 xen_ctrl_version
="$default_feature"
330 xen_pci_passthrough
="auto"
331 linux_aio
="$default_feature"
332 linux_io_uring
="$default_feature"
335 xfs
="$default_feature"
337 membarrier
="$default_feature"
338 vhost_net
="$default_feature"
339 vhost_crypto
="$default_feature"
340 vhost_scsi
="$default_feature"
341 vhost_vsock
="$default_feature"
343 vhost_user_blk_server
="auto"
344 vhost_user_fs
="$default_feature"
349 rdma
="$default_feature"
350 pvrdma
="$default_feature"
356 fortify_source
="$default_feature"
362 EXESUF
="$default_feature"
384 spice
="$default_feature"
386 smartcard
="$default_feature"
388 libusb
="$default_feature"
389 usb_redir
="$default_feature"
390 opengl
="$default_feature"
393 avx2_opt
="$default_feature"
400 guest_agent
="$default_feature"
401 guest_agent_with_vss
="no"
402 guest_agent_ntddscsi
="no"
403 guest_agent_msi
="$default_feature"
404 vss_win32_sdk
="$default_feature"
406 want_tools
="$default_feature"
410 coroutine_pool
="$default_feature"
411 debug_stack_usage
="no"
417 gtk
="$default_feature"
419 tls_priority
="NORMAL"
420 gnutls
="$default_feature"
421 nettle
="$default_feature"
423 gcrypt
="$default_feature"
426 qemu_private_xts
="yes"
427 auth_pam
="$default_feature"
428 vte
="$default_feature"
429 virglrenderer
="$default_feature"
430 tpm
="$default_feature"
431 libssh
="$default_feature"
432 live_block_migration
=${default_feature:-yes}
433 numa
="$default_feature"
436 replication
=${default_feature:-yes}
437 bochs
=${default_feature:-yes}
438 cloop
=${default_feature:-yes}
439 dmg
=${default_feature:-yes}
440 qcow1
=${default_feature:-yes}
441 vdi
=${default_feature:-yes}
442 vvfat
=${default_feature:-yes}
443 qed
=${default_feature:-yes}
444 parallels
=${default_feature:-yes}
446 libxml2
="$default_feature"
448 libpmem
="$default_feature"
449 default_devices
="true"
453 secret_keyring
="$default_feature"
454 libdaxctl
="$default_feature"
464 # parse CC options second
466 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
468 --cross-prefix=*) cross_prefix
="$optarg"
472 --cxx=*) CXX
="$optarg"
474 --cpu=*) cpu
="$optarg"
476 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
477 QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
479 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
481 --extra-ldflags=*) QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
482 EXTRA_LDFLAGS
="$optarg"
484 --enable-debug-info) debug_info
="yes"
486 --disable-debug-info) debug_info
="no"
488 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
490 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
491 eval "cross_cc_cflags_${cc_arch}=\$optarg"
492 cross_cc_vars
="$cross_cc_vars cross_cc_cflags_${cc_arch}"
494 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
495 cc_archs
="$cc_archs $cc_arch"
496 eval "cross_cc_${cc_arch}=\$optarg"
497 cross_cc_vars
="$cross_cc_vars cross_cc_${cc_arch}"
502 # Using uname is really, really broken. Once we have the right set of checks
503 # we can eliminate its usage altogether.
505 # Preferred compiler:
507 # ${cross_prefix}gcc (if cross-prefix specified)
509 if test -z "${CC}${cross_prefix}"; then
512 cc
="${CC-${cross_prefix}gcc}"
515 if test -z "${CXX}${cross_prefix}"; then
518 cxx
="${CXX-${cross_prefix}g++}"
521 ar="${AR-${cross_prefix}ar}"
522 as
="${AS-${cross_prefix}as}"
525 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
526 ld
="${LD-${cross_prefix}ld}"
527 ranlib
="${RANLIB-${cross_prefix}ranlib}"
528 nm
="${NM-${cross_prefix}nm}"
529 strip
="${STRIP-${cross_prefix}strip}"
530 windres
="${WINDRES-${cross_prefix}windres}"
531 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
533 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
535 pkg_config
=query_pkg_config
536 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
538 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
539 ARFLAGS
="${ARFLAGS-rv}"
541 # default flags for all hosts
542 # We use -fwrapv to tell the compiler that we require a C dialect where
543 # left shift of signed integers is well defined and has the expected
544 # 2s-complement style results. (Both clang and gcc agree that it
545 # provides these semantics.)
546 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
547 QEMU_CFLAGS
="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
548 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
549 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
551 # Flags that are needed during configure but later taken care of by Meson
552 CONFIGURE_CFLAGS
="-std=gnu99 -Wall"
559 #error $1 not defined
561 int main(void) { return 0; }
569 int main(void) { return 0; }
576 int main(void) { return 0; }
580 write_c_fuzzer_skeleton
() {
583 #include <sys/types.h>
584 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
585 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
589 if check_define __linux__
; then
591 elif check_define _WIN32
; then
593 elif check_define __OpenBSD__
; then
595 elif check_define __sun__
; then
597 elif check_define __HAIKU__
; then
599 elif check_define __FreeBSD__
; then
601 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
602 targetos
='GNU/kFreeBSD'
603 elif check_define __DragonFly__
; then
605 elif check_define __NetBSD__
; then
607 elif check_define __APPLE__
; then
610 # This is a fatal error, but don't report it yet, because we
611 # might be going to just print the --help text, or it might
612 # be the result of a missing compiler.
616 # Some host OSes need non-standard checks for which CPU to use.
617 # Note that these checks are broken for cross-compilation: if you're
618 # cross-compiling to one of these OSes then you'll need to specify
619 # the correct CPU with the --cpu option.
622 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
623 # run 64-bit userspace code.
624 # If the user didn't specify a CPU explicitly and the kernel says this is
625 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
626 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
632 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
633 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
638 if test ! -z "$cpu" ; then
639 # command line argument
641 elif check_define __i386__
; then
643 elif check_define __x86_64__
; then
644 if check_define __ILP32__
; then
649 elif check_define __sparc__
; then
650 if check_define __arch64__
; then
655 elif check_define _ARCH_PPC
; then
656 if check_define _ARCH_PPC64
; then
657 if check_define _LITTLE_ENDIAN
; then
665 elif check_define __mips__
; then
667 elif check_define __s390__
; then
668 if check_define __s390x__
; then
673 elif check_define __riscv
; then
674 if check_define _LP64
; then
679 elif check_define __arm__
; then
681 elif check_define __aarch64__
; then
688 # Normalise host CPU name and set ARCH.
689 # Note that this case should only have supported host CPUs, not guests.
691 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64
)
696 i386|i486|i586|i686|i86pc|BePC
)
715 # This will result in either an error or falling back to TCI later
719 if test -z "$ARCH"; then
728 audio_possible_drivers
="dsound sdl"
729 if check_include dsound.h
; then
730 audio_drv_list
="dsound"
739 audio_drv_list
="oss try-sdl"
740 audio_possible_drivers
="oss sdl pa"
745 audio_drv_list
="oss try-sdl"
746 audio_possible_drivers
="oss sdl pa"
747 # needed for kinfo_getvmmap(3) in libutil.h
748 netmap
="" # enable netmap autodetect
753 audio_drv_list
="oss try-sdl"
754 audio_possible_drivers
="oss sdl pa"
759 audio_drv_list
="oss try-sdl"
760 audio_possible_drivers
="oss sdl"
766 audio_drv_list
="try-sdl"
767 audio_possible_drivers
="sdl"
772 if [ "$cpu" = "x86_64" ] ; then
773 QEMU_CFLAGS
="-arch x86_64 $QEMU_CFLAGS"
774 QEMU_LDFLAGS
="-arch x86_64 $QEMU_LDFLAGS"
777 audio_drv_list
="coreaudio try-sdl"
778 audio_possible_drivers
="coreaudio sdl"
779 QEMU_LDFLAGS
="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
780 # Disable attempts to use ObjectiveC features in os/object.h since they
781 # won't work when we're compiling with gcc as a C compiler.
782 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
787 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
788 if test -f /usr
/include
/sys
/soundcard.h
; then
789 audio_drv_list
="oss try-sdl"
791 audio_possible_drivers
="oss sdl"
792 # needed for CMSG_ macros in sys/socket.h
793 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
794 # needed for TIOCWIN* defines in termios.h
795 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
799 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
802 audio_drv_list
="try-pa oss"
803 audio_possible_drivers
="oss alsa sdl pa"
806 vhost_user
=${default_feature:-yes}
810 if [ "$bsd" = "yes" ] ; then
811 if [ "$darwin" != "yes" ] ; then
816 : ${make=${MAKE-make}}
818 # We prefer python 3.x. A bare 'python' is traditionally
819 # python 2.x, but some distros have it as python 3.x, so
823 for binary
in "${PYTHON-python3}" python
827 python
=$
(command -v "$binary")
833 # Check for ancillary tools used in testing
835 for binary
in genisoimage mkisofs
839 genisoimage
=$
(command -v "$binary")
844 : ${smbd=${SMBD-/usr/sbin/smbd}}
846 # Default objcc to clang if available, otherwise use CC
853 if test "$mingw32" = "yes" ; then
856 # MinGW needs -mthreads for TLS and macro _MT.
857 CONFIGURE_CFLAGS
="-mthreads $CONFIGURE_CFLAGS"
861 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
867 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
869 --help|
-h) show_help
=yes
871 --version|
-V) exec cat $source_path/VERSION
873 --prefix=*) prefix
="$optarg"
875 --interp-prefix=*) interp_prefix
="$optarg"
881 --host-cc=*) host_cc
="$optarg"
885 --iasl=*) iasl
="$optarg"
887 --objcc=*) objcc
="$optarg"
889 --make=*) make="$optarg"
893 --python=*) python
="$optarg" ; explicit_python
=yes
895 --sphinx-build=*) sphinx_build
="$optarg"
897 --skip-meson) skip_meson
=yes
899 --meson=*) meson
="$optarg"
901 --ninja=*) ninja
="$optarg"
903 --smbd=*) smbd
="$optarg"
913 --disable-debug-info)
923 --disable-module-upgrades) module_upgrades
="no"
925 --enable-module-upgrades) module_upgrades
="yes"
929 --target-list=*) target_list
="$optarg"
930 if test "$target_list_exclude"; then
931 error_exit
"Can't mix --target-list with --target-list-exclude"
934 --target-list-exclude=*) target_list_exclude
="$optarg"
935 if test "$target_list"; then
936 error_exit
"Can't mix --target-list-exclude with --target-list"
939 --enable-trace-backends=*) trace_backends
="$optarg"
941 # XXX: backwards compatibility
942 --enable-trace-backend=*) trace_backends
="$optarg"
944 --with-trace-file=*) trace_file
="$optarg"
946 --with-default-devices) default_devices
="true"
948 --without-default-devices) default_devices
="false"
950 --without-default-features) # processed above
952 --enable-gprof) gprof
="yes"
954 --enable-gcov) gcov
="yes"
958 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
960 --mandir=*) mandir
="$optarg"
962 --bindir=*) bindir
="$optarg"
964 --libdir=*) libdir
="$optarg"
966 --libexecdir=*) libexecdir
="$optarg"
968 --includedir=*) includedir
="$optarg"
970 --datadir=*) datadir
="$optarg"
972 --with-suffix=*) qemu_suffix
="$optarg"
974 --docdir=*) docdir
="$optarg"
976 --localedir=*) localedir
="$optarg"
978 --sysconfdir=*) sysconfdir
="$optarg"
980 --localstatedir=*) local_statedir
="$optarg"
982 --firmwarepath=*) firmwarepath
="$optarg"
985 --disable-dependency-tracking|\
986 --sbindir=*|
--sharedstatedir=*|\
987 --oldincludedir=*|
--datarootdir=*|
--infodir=*|\
988 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
989 # These switches are silently ignored, for compatibility with
990 # autoconf-generated configure scripts. This allows QEMU's
991 # configure to be used by RPM and similar macros that set
992 # lots of directory switches by default.
994 --disable-sdl) sdl
="disabled"
996 --enable-sdl) sdl
="enabled"
998 --disable-sdl-image) sdl_image
="disabled"
1000 --enable-sdl-image) sdl_image
="enabled"
1002 --disable-qom-cast-debug) qom_cast_debug
="no"
1004 --enable-qom-cast-debug) qom_cast_debug
="yes"
1006 --disable-virtfs) virtfs
="disabled"
1008 --enable-virtfs) virtfs
="enabled"
1010 --disable-libudev) libudev
="disabled"
1012 --enable-libudev) libudev
="enabled"
1014 --disable-virtiofsd) virtiofsd
="disabled"
1016 --enable-virtiofsd) virtiofsd
="enabled"
1018 --disable-mpath) mpath
="disabled"
1020 --enable-mpath) mpath
="enabled"
1022 --disable-vnc) vnc
="disabled"
1024 --enable-vnc) vnc
="enabled"
1026 --disable-gettext) gettext="disabled"
1028 --enable-gettext) gettext="enabled"
1030 --oss-lib=*) oss_lib
="$optarg"
1032 --audio-drv-list=*) audio_drv_list
="$optarg"
1034 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1036 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1038 --enable-debug-tcg) debug_tcg
="yes"
1040 --disable-debug-tcg) debug_tcg
="no"
1043 # Enable debugging options that aren't excessively noisy
1050 --enable-sanitizers) sanitizers
="yes"
1052 --disable-sanitizers) sanitizers
="no"
1054 --enable-tsan) tsan
="yes"
1056 --disable-tsan) tsan
="no"
1058 --enable-sparse) sparse
="enabled"
1060 --disable-sparse) sparse
="disabled"
1062 --disable-strip) strip_opt
="no"
1064 --disable-vnc-sasl) vnc_sasl
="disabled"
1066 --enable-vnc-sasl) vnc_sasl
="enabled"
1068 --disable-vnc-jpeg) vnc_jpeg
="disabled"
1070 --enable-vnc-jpeg) vnc_jpeg
="enabled"
1072 --disable-vnc-png) vnc_png
="disabled"
1074 --enable-vnc-png) vnc_png
="enabled"
1076 --disable-slirp) slirp
="disabled"
1078 --enable-slirp) slirp
="enabled"
1080 --enable-slirp=git
) slirp
="internal"
1082 --enable-slirp=system
) slirp
="system"
1084 --disable-vde) vde
="no"
1086 --enable-vde) vde
="yes"
1088 --disable-netmap) netmap
="no"
1090 --enable-netmap) netmap
="yes"
1092 --disable-xen) xen
="disabled"
1094 --enable-xen) xen
="enabled"
1096 --disable-xen-pci-passthrough) xen_pci_passthrough
="disabled"
1098 --enable-xen-pci-passthrough) xen_pci_passthrough
="enabled"
1100 --disable-brlapi) brlapi
="disabled"
1102 --enable-brlapi) brlapi
="enabled"
1104 --disable-kvm) kvm
="disabled"
1106 --enable-kvm) kvm
="enabled"
1108 --disable-hax) hax
="disabled"
1110 --enable-hax) hax
="enabled"
1112 --disable-hvf) hvf
="disabled"
1114 --enable-hvf) hvf
="enabled"
1116 --disable-whpx) whpx
="disabled"
1118 --enable-whpx) whpx
="enabled"
1120 --disable-tcg-interpreter) tcg_interpreter
="no"
1122 --enable-tcg-interpreter) tcg_interpreter
="yes"
1124 --disable-cap-ng) cap_ng
="disabled"
1126 --enable-cap-ng) cap_ng
="enabled"
1128 --disable-tcg) tcg
="disabled"
1130 --enable-tcg) tcg
="enabled"
1132 --disable-malloc-trim) malloc_trim
="disabled"
1134 --enable-malloc-trim) malloc_trim
="enabled"
1136 --disable-spice) spice
="no"
1138 --enable-spice) spice
="yes"
1140 --disable-libiscsi) libiscsi
="disabled"
1142 --enable-libiscsi) libiscsi
="enabled"
1144 --disable-libnfs) libnfs
="disabled"
1146 --enable-libnfs) libnfs
="enabled"
1148 --enable-profiler) profiler
="yes"
1150 --disable-cocoa) cocoa
="disabled"
1152 --enable-cocoa) cocoa
="enabled"
1154 --disable-system) softmmu
="no"
1156 --enable-system) softmmu
="yes"
1163 --disable-linux-user) linux_user
="no"
1165 --enable-linux-user) linux_user
="yes"
1167 --disable-bsd-user) bsd_user
="no"
1169 --enable-bsd-user) bsd_user
="yes"
1171 --enable-pie) pie
="yes"
1173 --disable-pie) pie
="no"
1175 --enable-werror) werror
="yes"
1177 --disable-werror) werror
="no"
1179 --enable-lto) lto
="true"
1181 --disable-lto) lto
="false"
1183 --enable-stack-protector) stack_protector
="yes"
1185 --disable-stack-protector) stack_protector
="no"
1187 --enable-safe-stack) safe_stack
="yes"
1189 --disable-safe-stack) safe_stack
="no"
1195 --disable-cfi) cfi
="false"
1197 --enable-cfi-debug) cfi_debug
="true"
1199 --disable-cfi-debug) cfi_debug
="false"
1201 --disable-curses) curses
="disabled"
1203 --enable-curses) curses
="enabled"
1205 --disable-iconv) iconv="disabled"
1207 --enable-iconv) iconv="enabled"
1209 --disable-curl) curl
="disabled"
1211 --enable-curl) curl
="enabled"
1213 --disable-fdt) fdt
="disabled"
1215 --enable-fdt) fdt
="enabled"
1217 --enable-fdt=git
) fdt
="internal"
1219 --enable-fdt=system
) fdt
="system"
1221 --disable-linux-aio) linux_aio
="no"
1223 --enable-linux-aio) linux_aio
="yes"
1225 --disable-linux-io-uring) linux_io_uring
="no"
1227 --enable-linux-io-uring) linux_io_uring
="yes"
1229 --disable-attr) attr
="disabled"
1231 --enable-attr) attr
="enabled"
1233 --disable-membarrier) membarrier
="no"
1235 --enable-membarrier) membarrier
="yes"
1237 --disable-blobs) blobs
="false"
1239 --with-pkgversion=*) pkgversion
="$optarg"
1241 --with-coroutine=*) coroutine
="$optarg"
1243 --disable-coroutine-pool) coroutine_pool
="no"
1245 --enable-coroutine-pool) coroutine_pool
="yes"
1247 --enable-debug-stack-usage) debug_stack_usage
="yes"
1249 --enable-crypto-afalg) crypto_afalg
="yes"
1251 --disable-crypto-afalg) crypto_afalg
="no"
1253 --disable-docs) docs
="disabled"
1255 --enable-docs) docs
="enabled"
1257 --disable-vhost-net) vhost_net
="no"
1259 --enable-vhost-net) vhost_net
="yes"
1261 --disable-vhost-crypto) vhost_crypto
="no"
1263 --enable-vhost-crypto) vhost_crypto
="yes"
1265 --disable-vhost-scsi) vhost_scsi
="no"
1267 --enable-vhost-scsi) vhost_scsi
="yes"
1269 --disable-vhost-vsock) vhost_vsock
="no"
1271 --enable-vhost-vsock) vhost_vsock
="yes"
1273 --disable-vhost-user-blk-server) vhost_user_blk_server
="disabled"
1275 --enable-vhost-user-blk-server) vhost_user_blk_server
="enabled"
1277 --disable-vhost-user-fs) vhost_user_fs
="no"
1279 --enable-vhost-user-fs) vhost_user_fs
="yes"
1281 --disable-opengl) opengl
="no"
1283 --enable-opengl) opengl
="yes"
1285 --disable-rbd) rbd
="disabled"
1287 --enable-rbd) rbd
="enabled"
1289 --disable-xfsctl) xfs
="no"
1291 --enable-xfsctl) xfs
="yes"
1293 --disable-smartcard) smartcard
="no"
1295 --enable-smartcard) smartcard
="yes"
1297 --disable-u2f) u2f
="disabled"
1299 --enable-u2f) u2f
="enabled"
1301 --disable-libusb) libusb
="no"
1303 --enable-libusb) libusb
="yes"
1305 --disable-usb-redir) usb_redir
="no"
1307 --enable-usb-redir) usb_redir
="yes"
1309 --disable-zlib-test)
1311 --disable-lzo) lzo
="disabled"
1313 --enable-lzo) lzo
="enabled"
1315 --disable-snappy) snappy
="disabled"
1317 --enable-snappy) snappy
="enabled"
1319 --disable-bzip2) bzip2="disabled"
1321 --enable-bzip2) bzip2="enabled"
1323 --enable-lzfse) lzfse
="enabled"
1325 --disable-lzfse) lzfse
="disabled"
1327 --disable-zstd) zstd
="disabled"
1329 --enable-zstd) zstd
="enabled"
1331 --enable-guest-agent) guest_agent
="yes"
1333 --disable-guest-agent) guest_agent
="no"
1335 --enable-guest-agent-msi) guest_agent_msi
="yes"
1337 --disable-guest-agent-msi) guest_agent_msi
="no"
1339 --with-vss-sdk) vss_win32_sdk
=""
1341 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1343 --without-vss-sdk) vss_win32_sdk
="no"
1345 --with-win-sdk) win_sdk
=""
1347 --with-win-sdk=*) win_sdk
="$optarg"
1349 --without-win-sdk) win_sdk
="no"
1351 --enable-tools) want_tools
="yes"
1353 --disable-tools) want_tools
="no"
1355 --enable-seccomp) seccomp
="enabled"
1357 --disable-seccomp) seccomp
="disabled"
1359 --disable-glusterfs) glusterfs
="disabled"
1361 --disable-avx2) avx2_opt
="no"
1363 --enable-avx2) avx2_opt
="yes"
1365 --disable-avx512f) avx512f_opt
="no"
1367 --enable-avx512f) avx512f_opt
="yes"
1370 --enable-glusterfs) glusterfs
="enabled"
1372 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1373 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1375 --enable-vhdx|
--disable-vhdx)
1376 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1378 --enable-uuid|
--disable-uuid)
1379 echo "$0: $opt is obsolete, UUID support is always built" >&2
1381 --disable-gtk) gtk
="no"
1383 --enable-gtk) gtk
="yes"
1385 --tls-priority=*) tls_priority
="$optarg"
1387 --disable-gnutls) gnutls
="no"
1389 --enable-gnutls) gnutls
="yes"
1391 --disable-nettle) nettle
="no"
1393 --enable-nettle) nettle
="yes"
1395 --disable-gcrypt) gcrypt
="no"
1397 --enable-gcrypt) gcrypt
="yes"
1399 --disable-auth-pam) auth_pam
="no"
1401 --enable-auth-pam) auth_pam
="yes"
1403 --enable-rdma) rdma
="yes"
1405 --disable-rdma) rdma
="no"
1407 --enable-pvrdma) pvrdma
="yes"
1409 --disable-pvrdma) pvrdma
="no"
1411 --disable-vte) vte
="no"
1413 --enable-vte) vte
="yes"
1415 --disable-virglrenderer) virglrenderer
="no"
1417 --enable-virglrenderer) virglrenderer
="yes"
1419 --disable-tpm) tpm
="no"
1421 --enable-tpm) tpm
="yes"
1423 --disable-libssh) libssh
="no"
1425 --enable-libssh) libssh
="yes"
1427 --disable-live-block-migration) live_block_migration
="no"
1429 --enable-live-block-migration) live_block_migration
="yes"
1431 --disable-numa) numa
="no"
1433 --enable-numa) numa
="yes"
1435 --disable-libxml2) libxml2
="no"
1437 --enable-libxml2) libxml2
="yes"
1439 --disable-tcmalloc) tcmalloc
="no"
1441 --enable-tcmalloc) tcmalloc
="yes"
1443 --disable-jemalloc) jemalloc
="no"
1445 --enable-jemalloc) jemalloc
="yes"
1447 --disable-replication) replication
="no"
1449 --enable-replication) replication
="yes"
1451 --disable-bochs) bochs
="no"
1453 --enable-bochs) bochs
="yes"
1455 --disable-cloop) cloop
="no"
1457 --enable-cloop) cloop
="yes"
1459 --disable-dmg) dmg
="no"
1461 --enable-dmg) dmg
="yes"
1463 --disable-qcow1) qcow1
="no"
1465 --enable-qcow1) qcow1
="yes"
1467 --disable-vdi) vdi
="no"
1469 --enable-vdi) vdi
="yes"
1471 --disable-vvfat) vvfat
="no"
1473 --enable-vvfat) vvfat
="yes"
1475 --disable-qed) qed
="no"
1477 --enable-qed) qed
="yes"
1479 --disable-parallels) parallels
="no"
1481 --enable-parallels) parallels
="yes"
1483 --disable-sheepdog) sheepdog
="no"
1485 --enable-sheepdog) sheepdog
="yes"
1487 --disable-vhost-user) vhost_user
="no"
1489 --enable-vhost-user) vhost_user
="yes"
1491 --disable-vhost-vdpa) vhost_vdpa
="no"
1493 --enable-vhost-vdpa) vhost_vdpa
="yes"
1495 --disable-vhost-kernel) vhost_kernel
="no"
1497 --enable-vhost-kernel) vhost_kernel
="yes"
1499 --disable-capstone) capstone
="disabled"
1501 --enable-capstone) capstone
="enabled"
1503 --enable-capstone=git
) capstone
="internal"
1505 --enable-capstone=system
) capstone
="system"
1507 --with-git=*) git
="$optarg"
1509 --enable-git-update) git_update
=yes
1511 --disable-git-update) git_update
=no
1513 --enable-debug-mutex) debug_mutex
=yes
1515 --disable-debug-mutex) debug_mutex
=no
1517 --enable-libpmem) libpmem
=yes
1519 --disable-libpmem) libpmem
=no
1521 --enable-xkbcommon) xkbcommon
="enabled"
1523 --disable-xkbcommon) xkbcommon
="disabled"
1525 --enable-plugins) plugins
="yes"
1527 --disable-plugins) plugins
="no"
1529 --enable-containers) use_containers
="yes"
1531 --disable-containers) use_containers
="no"
1533 --enable-fuzzing) fuzzing
=yes
1535 --disable-fuzzing) fuzzing
=no
1537 --gdb=*) gdb_bin
="$optarg"
1539 --enable-rng-none) rng_none
=yes
1541 --disable-rng-none) rng_none
=no
1543 --enable-keyring) secret_keyring
="yes"
1545 --disable-keyring) secret_keyring
="no"
1547 --enable-libdaxctl) libdaxctl
=yes
1549 --disable-libdaxctl) libdaxctl
=no
1551 --enable-fuse) fuse
="enabled"
1553 --disable-fuse) fuse
="disabled"
1555 --enable-fuse-lseek) fuse_lseek
="enabled"
1557 --disable-fuse-lseek) fuse_lseek
="disabled"
1560 echo "ERROR: unknown option $opt"
1561 echo "Try '$0 --help' for more information"
1567 libdir
="${libdir:-$prefix/lib}"
1568 libexecdir
="${libexecdir:-$prefix/libexec}"
1569 includedir
="${includedir:-$prefix/include}"
1571 if test "$mingw32" = "yes" ; then
1576 sysconfdir
="$prefix"
1577 local_statedir
="$prefix"
1579 mandir
="${mandir:-$prefix/share/man}"
1580 datadir
="${datadir:-$prefix/share}"
1581 docdir
="${docdir:-$prefix/share/doc}"
1582 bindir
="${bindir:-$prefix/bin}"
1583 sysconfdir
="${sysconfdir:-$prefix/etc}"
1584 local_statedir
="${local_statedir:-$prefix/var}"
1586 firmwarepath
="${firmwarepath:-$datadir/qemu-firmware}"
1587 localedir
="${localedir:-$datadir/locale}"
1592 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1596 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1599 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1600 QEMU_LDFLAGS
="-m32 -mv8plus $QEMU_LDFLAGS"
1603 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1604 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1608 QEMU_LDFLAGS
="-m31 $QEMU_LDFLAGS"
1612 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1616 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1619 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1620 # If we truly care, we should simply detect this case at
1621 # runtime and generate the fallback to serial emulation.
1622 CPU_CFLAGS
="-m64 -mcx16"
1623 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1627 QEMU_LDFLAGS
="-mx32 $QEMU_LDFLAGS"
1629 # No special flags required for other host CPUs
1632 eval "cross_cc_${cpu}=\$host_cc"
1633 cross_cc_vars
="$cross_cc_vars cross_cc_${cpu}"
1634 QEMU_CFLAGS
="$CPU_CFLAGS $QEMU_CFLAGS"
1636 # For user-mode emulation the host arch has to be one we explicitly
1637 # support, even if we're using TCI.
1638 if [ "$ARCH" = "unknown" ]; then
1643 default_target_list
=""
1644 deprecated_targets_list
=ppc64abi32-linux-user
,tilegx-linux-user
,lm32-softmmu
,unicore32-softmmu
1645 deprecated_features
=""
1648 if [ "$softmmu" = "yes" ]; then
1649 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1651 if [ "$linux_user" = "yes" ]; then
1652 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1654 if [ "$bsd_user" = "yes" ]; then
1655 mak_wilds
="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1658 # If the user doesn't explicitly specify a deprecated target we will
1660 if test -z "$target_list"; then
1661 if test -z "$target_list_exclude"; then
1662 target_list_exclude
="$deprecated_targets_list"
1664 target_list_exclude
="$target_list_exclude,$deprecated_targets_list"
1668 for config
in $mak_wilds; do
1669 target
="$(basename "$config" .mak)"
1670 if echo "$target_list_exclude" |
grep -vq "$target"; then
1671 default_target_list
="${default_target_list} $target"
1675 # Enumerate public trace backends for --help output
1676 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1678 if test x
"$show_help" = x
"yes" ; then
1681 Usage: configure [options]
1682 Options: [defaults in brackets after descriptions]
1685 --help print this message
1686 --prefix=PREFIX install in PREFIX [$prefix]
1687 --interp-prefix=PREFIX where to find shared libraries, etc.
1688 use %M for cpu name [$interp_prefix]
1689 --target-list=LIST set target list (default: build all non-deprecated)
1690 $(echo Available targets: $default_target_list | \
1691 fold -s -w 53 | sed -e 's/^/ /')
1692 $(echo Deprecated targets: $deprecated_targets_list | \
1693 fold -s -w 53 | sed -e 's/^/ /')
1694 --target-list-exclude=LIST exclude a set of targets from the default target-list
1696 Advanced options (experts only):
1697 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1698 --cc=CC use C compiler CC [$cc]
1699 --iasl=IASL use ACPI compiler IASL [$iasl]
1700 --host-cc=CC use C compiler CC [$host_cc] for code run at
1702 --cxx=CXX use C++ compiler CXX [$cxx]
1703 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1704 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1705 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1706 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1707 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1708 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1709 --make=MAKE use specified make [$make]
1710 --python=PYTHON use specified python [$python]
1711 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1712 --meson=MESON use specified meson [$meson]
1713 --ninja=NINJA use specified ninja [$ninja]
1714 --smbd=SMBD use specified smbd [$smbd]
1715 --with-git=GIT use specified git [$git]
1716 --static enable static build [$static]
1717 --mandir=PATH install man pages in PATH
1718 --datadir=PATH install firmware in PATH/$qemu_suffix
1719 --localedir=PATH install translation in PATH/$qemu_suffix
1720 --docdir=PATH install documentation in PATH/$qemu_suffix
1721 --bindir=PATH install binaries in PATH
1722 --libdir=PATH install libraries in PATH
1723 --libexecdir=PATH install helper binaries in PATH
1724 --sysconfdir=PATH install config in PATH/$qemu_suffix
1725 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1726 --firmwarepath=PATH search PATH for firmware files
1727 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1728 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1729 --with-pkgversion=VERS use specified string as sub-version of the package
1730 --without-default-features default all --enable-* options to "disabled"
1731 --without-default-devices do not include any device that is not needed to
1732 start the emulator (only use if you are including
1733 desired devices in default-configs/devices/)
1734 --enable-debug enable common debug build options
1735 --enable-sanitizers enable default sanitizers
1736 --enable-tsan enable thread sanitizer
1737 --disable-strip disable stripping binaries
1738 --disable-werror disable compilation abort on warning
1739 --disable-stack-protector disable compiler-provided stack protection
1740 --audio-drv-list=LIST set audio drivers list:
1741 Available drivers: $audio_possible_drivers
1742 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1743 --block-drv-rw-whitelist=L
1744 set block driver read-write whitelist
1745 (affects only QEMU, not qemu-img)
1746 --block-drv-ro-whitelist=L
1747 set block driver read-only whitelist
1748 (affects only QEMU, not qemu-img)
1749 --enable-trace-backends=B Set trace backend
1750 Available backends: $trace_backend_list
1751 --with-trace-file=NAME Full PATH,NAME of file to store traces
1753 --disable-slirp disable SLIRP userspace network connectivity
1754 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1755 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1756 --oss-lib path to OSS library
1757 --cpu=CPU Build for host CPU [$cpu]
1758 --with-coroutine=BACKEND coroutine backend. Supported options:
1759 ucontext, sigaltstack, windows
1760 --enable-gcov enable test coverage analysis with gcov
1761 --disable-blobs disable installing provided firmware blobs
1762 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1763 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1764 --tls-priority default TLS protocol/cipher priority string
1765 --enable-gprof QEMU profiling with gprof
1766 --enable-profiler profiler support
1767 --enable-debug-stack-usage
1768 track the maximum stack usage of stacks created by qemu_alloc_stack
1770 enable plugins via shared library loading
1771 --disable-containers don't use containers for cross-building
1772 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1774 Optional features, enabled with --enable-FEATURE and
1775 disabled with --disable-FEATURE, default is enabled if available
1776 (unless built with --without-default-features):
1778 system all system emulation targets
1779 user supported user emulation targets
1780 linux-user all linux usermode emulation targets
1781 bsd-user all BSD usermode emulation targets
1782 docs build documentation
1783 guest-agent build the QEMU Guest Agent
1784 guest-agent-msi build guest agent Windows MSI installation package
1785 pie Position Independent Executables
1786 modules modules support (non-Windows)
1787 module-upgrades try to load modules from alternate paths for upgrades
1788 debug-tcg TCG debugging (default is disabled)
1789 debug-info debugging information
1790 lto Enable Link-Time Optimization.
1791 sparse sparse checker
1792 safe-stack SafeStack Stack Smash Protection. Depends on
1793 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1794 cfi Enable Control-Flow Integrity for indirect function calls.
1795 In case of a cfi violation, QEMU is terminated with SIGILL
1796 Depends on lto and is incompatible with modules
1797 Automatically enables Link-Time Optimization (lto)
1798 cfi-debug In case of a cfi violation, a message containing the line that
1799 triggered the error is written to stderr. After the error,
1800 QEMU is still terminated with SIGILL
1801 gnutls GNUTLS cryptography support
1802 nettle nettle cryptography support
1803 gcrypt libgcrypt cryptography support
1804 auth-pam PAM access control
1806 sdl-image SDL Image support for icons
1808 vte vte support for the gtk UI
1810 iconv font glyph conversion support
1812 vnc-sasl SASL encryption for VNC server
1813 vnc-jpeg JPEG lossy compression for VNC server
1814 vnc-png PNG compression for VNC server
1815 cocoa Cocoa UI (Mac OS X only)
1817 virtiofsd build virtiofs daemon (virtiofsd)
1818 libudev Use libudev to enumerate host devices
1819 mpath Multipath persistent reservation passthrough
1820 xen xen backend driver support
1821 xen-pci-passthrough PCI passthrough support for Xen
1822 brlapi BrlAPI (Braile)
1823 curl curl connectivity
1824 membarrier membarrier system call (for Linux 4.14+ or Windows)
1826 kvm KVM acceleration support
1827 hax HAX acceleration support
1828 hvf Hypervisor.framework acceleration support
1829 whpx Windows Hypervisor Platform acceleration support
1830 rdma Enable RDMA-based migration
1831 pvrdma Enable PVRDMA support
1832 vde support for vde network
1833 netmap support for netmap network
1834 linux-aio Linux AIO support
1835 linux-io-uring Linux io_uring support
1836 cap-ng libcap-ng support
1837 attr attr and xattr support
1838 vhost-net vhost-net kernel acceleration support
1839 vhost-vsock virtio sockets device support
1840 vhost-scsi vhost-scsi kernel target support
1841 vhost-crypto vhost-user-crypto backend support
1842 vhost-kernel vhost kernel backend support
1843 vhost-user vhost-user backend support
1844 vhost-user-blk-server vhost-user-blk server support
1845 vhost-vdpa vhost-vdpa kernel backend support
1847 rbd rados block device (rbd)
1848 libiscsi iscsi support
1850 smartcard smartcard support (libcacard)
1851 u2f U2F support (u2f-emu)
1852 libusb libusb (for usb passthrough)
1853 live-block-migration Block migration in the main migration stream
1854 usb-redir usb network redirection support
1855 lzo support of lzo compression library
1856 snappy support of snappy compression library
1857 bzip2 support of bzip2 compression library
1858 (for reading bzip2-compressed dmg images)
1859 lzfse support of lzfse compression library
1860 (for reading lzfse-compressed dmg images)
1861 zstd support for zstd compression library
1862 (for migration compression and qcow2 cluster compression)
1863 seccomp seccomp support
1864 coroutine-pool coroutine freelist (better performance)
1865 glusterfs GlusterFS backend
1867 libssh ssh block device support
1868 numa libnuma support
1869 libxml2 for Parallels image format
1870 tcmalloc tcmalloc support
1871 jemalloc jemalloc support
1872 avx2 AVX2 optimization support
1873 avx512f AVX512F optimization support
1874 replication replication support
1875 opengl opengl support
1876 virglrenderer virgl rendering support
1877 xfsctl xfsctl support
1878 qom-cast-debug cast debugging support
1879 tools build qemu-io, qemu-nbd and qemu-img tools
1880 bochs bochs image format support
1881 cloop cloop image format support
1882 dmg dmg image format support
1883 qcow1 qcow v1 image format support
1884 vdi vdi image format support
1885 vvfat vvfat image format support
1886 qed qed image format support
1887 parallels parallels image format support
1888 sheepdog sheepdog block driver support (deprecated)
1889 crypto-afalg Linux AF_ALG crypto backend driver
1890 capstone capstone disassembler support
1891 debug-mutex mutex debugging support
1892 libpmem libpmem support
1893 xkbcommon xkbcommon support
1894 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1895 libdaxctl libdaxctl support
1896 fuse FUSE block device export
1897 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1899 NOTE: The object files are built at the place where configure is launched
1904 # Remove old dependency files to make sure that they get properly regenerated
1905 rm -f */config-devices.mak.d
1907 if test -z "$python"
1909 error_exit
"Python not found. Use --python=/path/to/python"
1913 error_exit
"GNU make ($make) not found"
1916 # Note that if the Python conditional here evaluates True we will exit
1917 # with status 1 which is a shell 'false' value.
1918 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1919 error_exit
"Cannot use '$python', Python >= 3.6 is required." \
1920 "Use --python=/path/to/python to specify a supported Python."
1923 # Preserve python version since some functionality is dependent on it
1924 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
)
1926 # Suppress writing compiled files
1929 if test -z "$meson"; then
1930 if test "$explicit_python" = no
&& has meson
&& version_ge
"$(meson --version)" 0.55.3; then
1932 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1934 elif test -e "${source_path}/meson/meson.py" ; then
1937 if test "$explicit_python" = yes; then
1938 error_exit
"--python requires using QEMU's embedded Meson distribution, but it was not found."
1940 error_exit
"Meson not found. Use --meson=/path/to/meson"
1944 # Meson uses its own Python interpreter to invoke other Python scripts,
1945 # but the user wants to use the one they specified with --python.
1947 # We do not want to override the distro Python interpreter (and sometimes
1948 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1949 # just require --meson=git|internal together with --python.
1950 if test "$explicit_python" = yes; then
1953 *) error_exit
"--python requires using QEMU's embedded Meson distribution." ;;
1958 if test "$meson" = git
; then
1959 git_submodules
="${git_submodules} meson"
1964 meson
="$python ${source_path}/meson/meson.py"
1966 *) meson
=$
(command -v "$meson") ;;
1971 if test -z "$ninja"; then
1972 for c
in ninja ninja-build samu
; do
1974 ninja
=$
(command -v "$c")
1978 if test -z "$ninja"; then
1979 error_exit
"Cannot find Ninja"
1983 # Check that the C compiler works. Doing this here before testing
1984 # the host CPU ensures that we had a valid CC to autodetect the
1985 # $cpu var (and we should bail right here if that's not the case).
1986 # It also allows the help message to be printed without a CC.
1988 if compile_object
; then
1989 : C compiler works ok
1991 error_exit
"\"$cc\" either does not exist or does not work"
1993 if ! compile_prog
; then
1994 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
1997 # Consult white-list to determine whether to enable werror
1998 # by default. Only enable by default for git builds
1999 if test -z "$werror" ; then
2000 if test -e "$source_path/.git" && \
2001 { test "$linux" = "yes" ||
test "$mingw32" = "yes"; }; then
2008 if test "$targetos" = "bogus"; then
2009 # Now that we know that we're not printing the help and that
2010 # the compiler works (so the results of the check_defines we used
2011 # to identify the OS are reliable), if we didn't recognize the
2012 # host OS we should stop now.
2013 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
2016 # Check whether the compiler matches our minimum requirements:
2018 #if defined(__clang_major__) && defined(__clang_minor__)
2019 # ifdef __apple_build_version__
2020 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2021 # error You need at least XCode Clang v5.1 to compile QEMU
2024 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2025 # error You need at least Clang v3.4 to compile QEMU
2028 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2029 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2030 # error You need at least GCC v4.8 to compile QEMU
2033 # error You either need GCC or Clang to compiler QEMU
2035 int main (void) { return 0; }
2037 if ! compile_prog
"" "" ; then
2038 error_exit
"You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2041 # Accumulate -Wfoo and -Wno-bar separately.
2042 # We will list all of the enable flags first, and the disable flags second.
2043 # Note that we do not add -Werror, because that would enable it for all
2044 # configure tests. If a configure test failed due to -Werror this would
2045 # just silently disable some features, so it's too error prone.
2048 add_to warn_flags
-Wold-style-declaration
2049 add_to warn_flags
-Wold-style-definition
2050 add_to warn_flags
-Wtype-limits
2051 add_to warn_flags
-Wformat-security
2052 add_to warn_flags
-Wformat-y2k
2053 add_to warn_flags
-Winit-self
2054 add_to warn_flags
-Wignored-qualifiers
2055 add_to warn_flags
-Wempty-body
2056 add_to warn_flags
-Wnested-externs
2057 add_to warn_flags
-Wendif-labels
2058 add_to warn_flags
-Wexpansion-to-defined
2059 add_to warn_flags
-Wimplicit-fallthrough=2
2062 add_to nowarn_flags
-Wno-initializer-overrides
2063 add_to nowarn_flags
-Wno-missing-include-dirs
2064 add_to nowarn_flags
-Wno-shift-negative-value
2065 add_to nowarn_flags
-Wno-string-plus-int
2066 add_to nowarn_flags
-Wno-typedef-redefinition
2067 add_to nowarn_flags
-Wno-tautological-type-limit-compare
2068 add_to nowarn_flags
-Wno-psabi
2070 gcc_flags
="$warn_flags $nowarn_flags"
2072 cc_has_warning_flag
() {
2075 # Use the positive sense of the flag when testing for -Wno-wombat
2076 # support (gcc will happily accept the -Wno- form of unknown
2078 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2079 compile_prog
"-Werror $optflag" ""
2082 for flag
in $gcc_flags; do
2083 if cc_has_warning_flag
$flag ; then
2084 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2088 if test "$stack_protector" != "no"; then
2090 int main(int argc, char *argv[])
2092 char arr[64], *p = arr, *c = argv[0];
2099 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
2101 for flag
in $gcc_flags; do
2102 # We need to check both a compile and a link, since some compiler
2103 # setups fail only on a .c->.o compile and some only at link time
2104 if compile_object
"-Werror $flag" &&
2105 compile_prog
"-Werror $flag" ""; then
2106 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2107 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
2112 if test "$stack_protector" = yes; then
2113 if test $sp_on = 0; then
2114 error_exit
"Stack protector not supported"
2119 # Disable -Wmissing-braces on older compilers that warn even for
2120 # the "universal" C zero initializer {0}.
2126 if compile_object
"-Werror" "" ; then
2129 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
2132 # Our module code doesn't support Windows
2133 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2134 error_exit
"Modules are not available for Windows"
2137 # module_upgrades is only reasonable if modules are enabled
2138 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2139 error_exit
"Can't enable module-upgrades as Modules are not enabled"
2142 # Static linking is not possible with modules or PIE
2143 if test "$static" = "yes" ; then
2144 if test "$modules" = "yes" ; then
2145 error_exit
"static and modules are mutually incompatible"
2149 # Unconditional check for compiler __thread support
2151 static __thread int tls_var;
2152 int main(void) { return tls_var; }
2155 if ! compile_prog
"-Werror" "" ; then
2156 error_exit
"Your compiler does not support the __thread specifier for " \
2157 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2163 # define THREAD __thread
2167 static THREAD int tls_var;
2168 int main(void) { return tls_var; }
2171 # Check we support --no-pie first; we will need this for building ROMs.
2172 if compile_prog
"-Werror -fno-pie" "-no-pie"; then
2173 CFLAGS_NOPIE
="-fno-pie"
2176 if test "$static" = "yes"; then
2177 if test "$pie" != "no" && compile_prog
"-Werror -fPIE -DPIE" "-static-pie"; then
2178 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2179 QEMU_LDFLAGS
="-static-pie $QEMU_LDFLAGS"
2181 elif test "$pie" = "yes"; then
2182 error_exit
"-static-pie not available due to missing toolchain support"
2184 QEMU_LDFLAGS
="-static $QEMU_LDFLAGS"
2187 elif test "$pie" = "no"; then
2188 CONFIGURE_CFLAGS
="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2189 elif compile_prog
"-Werror -fPIE -DPIE" "-pie"; then
2190 CONFIGURE_CFLAGS
="-fPIE -DPIE $CONFIGURE_CFLAGS"
2191 CONFIGURE_LDFLAGS
="-pie $CONFIGURE_LDFLAGS"
2193 elif test "$pie" = "yes"; then
2194 error_exit
"PIE not available due to missing toolchain support"
2196 echo "Disabling PIE due to missing toolchain support"
2200 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2201 # The combination is known as "full relro", because .got.plt is read-only too.
2202 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
2203 QEMU_LDFLAGS
="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2206 ##########################################
2207 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2208 # use i686 as default anyway, but for those that don't, an explicit
2209 # specification is necessary
2211 if test "$cpu" = "i386"; then
2213 static int sfaa(int *ptr)
2215 return __sync_fetch_and_and(ptr, 0);
2221 val = __sync_val_compare_and_swap(&val, 0, 1);
2226 if ! compile_prog
"" "" ; then
2227 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
2231 #########################################
2232 # Solaris specific configure tool chain decisions
2234 if test "$solaris" = "yes" ; then
2238 if test -f /usr
/ccs
/bin
/ar ; then
2239 error_exit
"No path includes ar" \
2240 "Add /usr/ccs/bin to your path and rerun configure"
2242 error_exit
"No path includes ar"
2246 if test -z "${target_list+xxx}" ; then
2248 for target
in $default_target_list; do
2249 target_list
="$target_list $target"
2251 target_list
="${target_list# }"
2254 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2255 for target
in $target_list; do
2256 # Check that we recognised the target name; this allows a more
2257 # friendly error message than if we let it fall through.
2258 case " $default_target_list " in
2262 error_exit
"Unknown target name '$target'"
2268 for target
in $target_list; do
2269 # if a deprecated target is enabled we note it here
2270 if echo "$deprecated_targets_list" |
grep -q "$target"; then
2271 add_to deprecated_features
$target
2275 # see if system emulation was really requested
2276 case " $target_list " in
2277 *"-softmmu "*) softmmu
=yes
2283 feature_not_found
() {
2287 error_exit
"User requested feature $feature" \
2288 "configure was not able to find it." \
2293 # big/little endian test
2295 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2296 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2297 extern int foo(short *, short *);
2298 int main(int argc, char *argv[]) {
2299 return foo(big_endian, little_endian);
2303 if compile_object
; then
2304 if strings -a $TMPO |
grep -q BiGeNdIaN
; then
2306 elif strings -a $TMPO |
grep -q LiTtLeEnDiAn
; then
2309 echo big
/little
test failed
2312 echo big
/little
test failed
2315 ##########################################
2317 if test -z "$want_tools"; then
2318 if test "$softmmu" = "no"; then
2325 ##########################################
2326 # cocoa implies not SDL or GTK
2327 # (the cocoa UI code currently assumes it is always the active UI
2328 # and doesn't interact well with other UI frontend code)
2329 if test "$cocoa" = "enabled"; then
2330 if test "$sdl" = "enabled"; then
2331 error_exit
"Cocoa and SDL UIs cannot both be enabled at once"
2333 if test "$gtk" = "yes"; then
2334 error_exit
"Cocoa and GTK UIs cannot both be enabled at once"
2340 # Some versions of Mac OS X incorrectly define SIZE_MAX
2344 int main(int argc, char *argv[]) {
2345 return printf("%zu", SIZE_MAX);
2348 have_broken_size_max
=no
2349 if ! compile_object
-Werror ; then
2350 have_broken_size_max
=yes
2353 ##########################################
2357 #include <sys/socket.h>
2358 #include <linux/ip.h>
2359 int main(void) { return sizeof(struct mmsghdr); }
2361 if compile_prog
"" "" ; then
2368 #include <sys/mman.h>
2369 int main(int argc, char *argv[]) {
2370 return mlockall(MCL_FUTURE);
2373 if compile_prog
"" "" ; then
2379 #########################################
2380 # vhost interdependencies and host support
2383 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2384 error_exit
"vhost-user is only available on Linux"
2386 test "$vhost_vdpa" = "" && vhost_vdpa
=$linux
2387 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2388 error_exit
"vhost-vdpa is only available on Linux"
2390 test "$vhost_kernel" = "" && vhost_kernel
=$linux
2391 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2392 error_exit
"vhost-kernel is only available on Linux"
2395 # vhost-kernel devices
2396 test "$vhost_scsi" = "" && vhost_scsi
=$vhost_kernel
2397 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2398 error_exit
"--enable-vhost-scsi requires --enable-vhost-kernel"
2400 test "$vhost_vsock" = "" && vhost_vsock
=$vhost_kernel
2401 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2402 error_exit
"--enable-vhost-vsock requires --enable-vhost-kernel"
2405 # vhost-user backends
2406 test "$vhost_net_user" = "" && vhost_net_user
=$vhost_user
2407 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2408 error_exit
"--enable-vhost-net-user requires --enable-vhost-user"
2410 test "$vhost_crypto" = "" && vhost_crypto
=$vhost_user
2411 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2412 error_exit
"--enable-vhost-crypto requires --enable-vhost-user"
2414 test "$vhost_user_fs" = "" && vhost_user_fs
=$vhost_user
2415 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2416 error_exit
"--enable-vhost-user-fs requires --enable-vhost-user"
2418 #vhost-vdpa backends
2419 test "$vhost_net_vdpa" = "" && vhost_net_vdpa
=$vhost_vdpa
2420 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2421 error_exit
"--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2424 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2425 if test "$vhost_net" = ""; then
2426 test "$vhost_net_user" = "yes" && vhost_net
=yes
2427 test "$vhost_net_vdpa" = "yes" && vhost_net
=yes
2428 test "$vhost_kernel" = "yes" && vhost_net
=yes
2431 ##########################################
2434 if ! has
"$pkg_config_exe"; then
2435 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2438 ##########################################
2441 if test "$linux_user" = "yes"; then
2444 #include <linux/futex.h>
2446 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2452 if ! compile_object
; then
2453 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2457 ##########################################
2460 if test "$xen" != "disabled" ; then
2461 # Check whether Xen library path is specified via --extra-ldflags to avoid
2462 # overriding this setting with pkg-config output. If not, try pkg-config
2463 # to obtain all needed flags.
2465 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2466 $pkg_config --exists xencontrol
; then
2467 xen_ctrl_version
="$(printf '%d%02d%02d' \
2468 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2470 xen_pc
="xencontrol xenstore xenforeignmemory xengnttab"
2471 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2472 if $pkg_config --exists xentoolcore
; then
2473 xen_pc
="$xen_pc xentoolcore"
2475 xen_cflags
="$($pkg_config --cflags $xen_pc)"
2476 xen_libs
="$($pkg_config --libs $xen_pc)"
2479 xen_libs
="-lxenstore -lxenctrl"
2480 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2482 # First we test whether Xen headers and libraries are available.
2483 # If no, we are done and there is no Xen support.
2484 # If yes, more tests are run to detect the Xen version.
2488 #include <xenctrl.h>
2493 if ! compile_prog
"" "$xen_libs" ; then
2495 if test "$xen" = "enabled" ; then
2496 feature_not_found
"xen" "Install xen devel"
2502 cat > $TMPC <<EOF &&
2503 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2504 #define __XEN_TOOLS__
2505 #include <xendevicemodel.h>
2506 #include <xenforeignmemory.h>
2508 xendevicemodel_handle *xd;
2509 xenforeignmemory_handle *xfmem;
2511 xd = xendevicemodel_open(0, 0);
2512 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2514 xfmem = xenforeignmemory_open(0, 0);
2515 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2520 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2522 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2523 xen_ctrl_version
=41100
2526 cat > $TMPC <<EOF &&
2527 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2528 #include <xenforeignmemory.h>
2529 #include <xentoolcore.h>
2531 xenforeignmemory_handle *xfmem;
2533 xfmem = xenforeignmemory_open(0, 0);
2534 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2535 xentoolcore_restrict_all(0);
2540 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2542 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2543 xen_ctrl_version
=41000
2546 cat > $TMPC <<EOF &&
2547 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2548 #define __XEN_TOOLS__
2549 #include <xendevicemodel.h>
2551 xendevicemodel_handle *xd;
2553 xd = xendevicemodel_open(0, 0);
2554 xendevicemodel_close(xd);
2559 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2561 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2562 xen_ctrl_version
=40900
2565 cat > $TMPC <<EOF &&
2567 * If we have stable libs the we don't want the libxc compat
2568 * layers, regardless of what CFLAGS we may have been given.
2570 * Also, check if xengnttab_grant_copy_segment_t is defined and
2571 * grant copy operation is implemented.
2573 #undef XC_WANT_COMPAT_EVTCHN_API
2574 #undef XC_WANT_COMPAT_GNTTAB_API
2575 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2576 #include <xenctrl.h>
2577 #include <xenstore.h>
2578 #include <xenevtchn.h>
2579 #include <xengnttab.h>
2580 #include <xenforeignmemory.h>
2582 #include <xen/hvm/hvm_info_table.h>
2583 #if !defined(HVM_MAX_VCPUS)
2584 # error HVM_MAX_VCPUS not defined
2587 xc_interface *xc = NULL;
2588 xenforeignmemory_handle *xfmem;
2589 xenevtchn_handle *xe;
2590 xengnttab_handle *xg;
2591 xengnttab_grant_copy_segment_t* seg = NULL;
2595 xc = xc_interface_open(0, 0, 0);
2596 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2597 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2598 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2599 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2601 xfmem = xenforeignmemory_open(0, 0);
2602 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2604 xe = xenevtchn_open(0, 0);
2607 xg = xengnttab_open(0, 0);
2608 xengnttab_grant_copy(xg, 0, seg);
2613 compile_prog
"" "$xen_libs $xen_stable_libs"
2615 xen_ctrl_version
=40800
2618 cat > $TMPC <<EOF &&
2620 * If we have stable libs the we don't want the libxc compat
2621 * layers, regardless of what CFLAGS we may have been given.
2623 #undef XC_WANT_COMPAT_EVTCHN_API
2624 #undef XC_WANT_COMPAT_GNTTAB_API
2625 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2626 #include <xenctrl.h>
2627 #include <xenstore.h>
2628 #include <xenevtchn.h>
2629 #include <xengnttab.h>
2630 #include <xenforeignmemory.h>
2632 #include <xen/hvm/hvm_info_table.h>
2633 #if !defined(HVM_MAX_VCPUS)
2634 # error HVM_MAX_VCPUS not defined
2637 xc_interface *xc = NULL;
2638 xenforeignmemory_handle *xfmem;
2639 xenevtchn_handle *xe;
2640 xengnttab_handle *xg;
2644 xc = xc_interface_open(0, 0, 0);
2645 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2646 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2647 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2648 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2650 xfmem = xenforeignmemory_open(0, 0);
2651 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2653 xe = xenevtchn_open(0, 0);
2656 xg = xengnttab_open(0, 0);
2657 xengnttab_map_grant_ref(xg, 0, 0, 0);
2662 compile_prog
"" "$xen_libs $xen_stable_libs"
2664 xen_ctrl_version
=40701
2669 cat > $TMPC <<EOF &&
2670 #include <xenctrl.h>
2671 #include <xenstore.h>
2673 #include <xen/hvm/hvm_info_table.h>
2674 #if !defined(HVM_MAX_VCPUS)
2675 # error HVM_MAX_VCPUS not defined
2680 xc = xc_interface_open(0, 0, 0);
2681 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2682 xc_gnttab_open(NULL, 0);
2683 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2684 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2685 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2686 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2690 compile_prog
"" "$xen_libs"
2692 xen_ctrl_version
=40600
2697 cat > $TMPC <<EOF &&
2698 #include <xenctrl.h>
2699 #include <xenstore.h>
2701 #include <xen/hvm/hvm_info_table.h>
2702 #if !defined(HVM_MAX_VCPUS)
2703 # error HVM_MAX_VCPUS not defined
2708 xc = xc_interface_open(0, 0, 0);
2709 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2710 xc_gnttab_open(NULL, 0);
2711 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2712 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2713 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2717 compile_prog
"" "$xen_libs"
2719 xen_ctrl_version
=40500
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);
2742 compile_prog
"" "$xen_libs"
2744 xen_ctrl_version
=40200
2748 if test "$xen" = "enabled" ; then
2749 feature_not_found
"xen (unsupported version)" \
2750 "Install a supported xen (xen 4.2 or newer)"
2755 if test "$xen" = enabled
; then
2756 if test $xen_ctrl_version -ge 40701 ; then
2757 xen_libs
="$xen_libs $xen_stable_libs "
2763 ##########################################
2765 if $pkg_config --exists "x11"; then
2767 x11_cflags
=$
($pkg_config --cflags x11
)
2768 x11_libs
=$
($pkg_config --libs x11
)
2771 ##########################################
2774 if test "$gtk" != "no"; then
2775 gtkpackage
="gtk+-3.0"
2776 gtkx11package
="gtk+-x11-3.0"
2778 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2779 gtk_cflags
=$
($pkg_config --cflags $gtkpackage)
2780 gtk_libs
=$
($pkg_config --libs $gtkpackage)
2781 gtk_version
=$
($pkg_config --modversion $gtkpackage)
2782 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2784 gtk_cflags
="$gtk_cflags $x11_cflags"
2785 gtk_libs
="$gtk_libs $x11_libs"
2788 elif test "$gtk" = "yes"; then
2789 feature_not_found
"gtk" "Install gtk3-devel"
2796 ##########################################
2799 if test "$gnutls" != "no"; then
2801 if $pkg_config --exists "gnutls >= 3.1.18"; then
2802 gnutls_cflags
=$
($pkg_config --cflags gnutls
)
2803 gnutls_libs
=$
($pkg_config --libs gnutls
)
2804 # Packaging for the static libraries is not always correct.
2805 # At least ubuntu 18.04 ships only shared libraries.
2807 if compile_prog
"" "$gnutls_libs" ; then
2811 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2812 feature_not_found
"gnutls" "Install gnutls devel >= 3.1.18"
2819 # If user didn't give a --disable/enable-gcrypt flag,
2820 # then mark as disabled if user requested nettle
2822 if test -z "$gcrypt"
2824 if test "$nettle" = "yes"
2830 # If user didn't give a --disable/enable-nettle flag,
2831 # then mark as disabled if user requested gcrypt
2833 if test -z "$nettle"
2835 if test "$gcrypt" = "yes"
2842 if ! has
"libgcrypt-config"
2847 if test -n "$cross_prefix"
2849 host=$
(libgcrypt-config
--host)
2850 if test "$host-" != $cross_prefix
2856 maj
=`libgcrypt-config --version | awk -F . '{print $1}'`
2857 min
=`libgcrypt-config --version | awk -F . '{print $2}'`
2859 if test $maj != 1 ||
test $min -lt 5
2868 if test "$nettle" != "no"; then
2870 if $pkg_config --exists "nettle >= 2.7.1"; then
2871 nettle_cflags
=$
($pkg_config --cflags nettle
)
2872 nettle_libs
=$
($pkg_config --libs nettle
)
2873 nettle_version
=$
($pkg_config --modversion nettle
)
2874 # Link test to make sure the given libraries work (e.g for static).
2876 if compile_prog
"" "$nettle_libs" ; then
2877 if test -z "$gcrypt"; then
2883 if test "$pass" = "yes"
2886 #include <nettle/xts.h>
2891 if compile_prog
"$nettle_cflags" "$nettle_libs" ; then
2896 if test "$pass" = "no" && test "$nettle" = "yes"; then
2897 feature_not_found
"nettle" "Install nettle devel >= 2.7.1"
2903 if test "$gcrypt" != "no"; then
2905 if has_libgcrypt
; then
2906 gcrypt_cflags
=$
(libgcrypt-config
--cflags)
2907 gcrypt_libs
=$
(libgcrypt-config
--libs)
2908 # Debian has removed -lgpg-error from libgcrypt-config
2909 # as it "spreads unnecessary dependencies" which in
2910 # turn breaks static builds...
2911 if test "$static" = "yes"
2913 gcrypt_libs
="$gcrypt_libs -lgpg-error"
2916 # Link test to make sure the given libraries work (e.g for static).
2918 if compile_prog
"" "$gcrypt_libs" ; then
2922 if test "$pass" = "yes"; then
2927 gcry_mac_hd_t handle;
2928 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2929 GCRY_MAC_FLAG_SECURE, NULL);
2933 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
2939 gcry_cipher_hd_t handle;
2940 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2944 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
2948 elif test "$gcrypt" = "yes"; then
2949 feature_not_found
"gcrypt" "Install gcrypt devel >= 1.5.0"
2956 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2958 error_exit
"Only one of gcrypt & nettle can be enabled"
2961 ##########################################
2962 # libtasn1 - only for the TLS creds/session test suite
2967 if $pkg_config --exists "libtasn1"; then
2968 tasn1_cflags
=$
($pkg_config --cflags libtasn1
)
2969 tasn1_libs
=$
($pkg_config --libs libtasn1
)
2975 ##########################################
2978 if test "$auth_pam" != "no"; then
2980 #include <security/pam_appl.h>
2983 const char *service_name = "qemu";
2984 const char *user = "frank";
2985 const struct pam_conv pam_conv = { 0 };
2986 pam_handle_t *pamh = NULL;
2987 pam_start(service_name, user, &pam_conv, &pamh);
2991 if compile_prog
"" "-lpam" ; then
2994 if test "$auth_pam" = "yes"; then
2995 feature_not_found
"PAM" "Install PAM development package"
3002 ##########################################
3005 if test "$vte" != "no"; then
3006 vteminversion
="0.32.0"
3007 if $pkg_config --exists "vte-2.91"; then
3008 vtepackage
="vte-2.91"
3010 vtepackage
="vte-2.90"
3012 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3013 vte_cflags
=$
($pkg_config --cflags $vtepackage)
3014 vte_libs
=$
($pkg_config --libs $vtepackage)
3015 vteversion
=$
($pkg_config --modversion $vtepackage)
3017 elif test "$vte" = "yes"; then
3018 feature_not_found
"vte" "Install libvte-2.90/2.91 devel"
3024 ##########################################
3025 # RDMA needs OpenFabrics libraries
3026 if test "$rdma" != "no" ; then
3028 #include <rdma/rdma_cma.h>
3029 int main(void) { return 0; }
3031 rdma_libs
="-lrdmacm -libverbs -libumad"
3032 if compile_prog
"" "$rdma_libs" ; then
3035 if test "$rdma" = "yes" ; then
3037 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3039 " (1) Fast: Install infiniband packages (devel) from your distro." \
3040 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3041 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3047 ##########################################
3050 cat > $TMPC <<EOF &&
3051 #include <sys/mman.h>
3058 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3064 if test "$rdma" = "yes" ; then
3067 if compile_prog
"" ""; then
3074 if ! compile_prog
"" ""; then
3075 error_exit
"PVRDMA is not supported since mremap is not implemented"
3084 if test "$pvrdma" = "yes" ; then
3085 error_exit
"PVRDMA requires rdma suppport"
3090 # Let's see if enhanced reg_mr is supported
3091 if test "$pvrdma" = "yes" ; then
3093 cat > $TMPC <<EOF &&
3094 #include <infiniband/verbs.h>
3100 struct ibv_pd *pd = NULL;
3106 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3113 if ! compile_prog
"" "-libverbs"; then
3114 QEMU_CFLAGS
="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3118 ##########################################
3119 # xfsctl() probe, used for file-posix.c
3120 if test "$xfs" != "no" ; then
3122 #include <stddef.h> /* NULL */
3123 #include <xfs/xfs.h>
3126 xfsctl(NULL, 0, 0, NULL);
3130 if compile_prog
"" "" ; then
3133 if test "$xfs" = "yes" ; then
3134 feature_not_found
"xfs" "Install xfsprogs/xfslibs devel"
3140 ##########################################
3141 # vde libraries probe
3142 if test "$vde" != "no" ; then
3143 vde_libs
="-lvdeplug"
3145 #include <libvdeplug.h>
3148 struct vde_open_args a = {0, 0, 0};
3154 if compile_prog
"" "$vde_libs" ; then
3157 if test "$vde" = "yes" ; then
3158 feature_not_found
"vde" "Install vde (Virtual Distributed Ethernet) devel"
3164 ##########################################
3165 # netmap support probe
3166 # Apart from looking for netmap headers, we make sure that the host API version
3167 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3168 # a minor/major version number. Minor new features will be marked with values up
3169 # to 15, and if something happens that requires a change to the backend we will
3170 # move above 15, submit the backend fixes and modify this two bounds.
3171 if test "$netmap" != "no" ; then
3173 #include <inttypes.h>
3175 #include <net/netmap.h>
3176 #include <net/netmap_user.h>
3177 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3180 int main(void) { return 0; }
3182 if compile_prog
"" "" ; then
3185 if test "$netmap" = "yes" ; then
3186 feature_not_found
"netmap"
3192 ##########################################
3193 # Sound support libraries probe
3195 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/,/ /g')
3196 for drv
in $audio_drv_list; do
3199 if $pkg_config alsa
--exists; then
3200 alsa_libs
=$
($pkg_config alsa
--libs)
3201 alsa_cflags
=$
($pkg_config alsa
--cflags)
3203 if test "$drv" = "try-alsa"; then
3204 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa/alsa/')
3207 if test "$drv" = "try-alsa"; then
3208 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa//')
3210 error_exit
"$drv check failed" \
3211 "Make sure to have the $drv libs and headers installed."
3217 if $pkg_config libpulse
--exists; then
3219 pulse_libs
=$
($pkg_config libpulse
--libs)
3220 pulse_cflags
=$
($pkg_config libpulse
--cflags)
3221 if test "$drv" = "try-pa"; then
3222 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa/pa/')
3225 if test "$drv" = "try-pa"; then
3226 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa//')
3228 error_exit
"$drv check failed" \
3229 "Make sure to have the $drv libs and headers installed."
3235 if test "$sdl" = "no"; then
3236 error_exit
"sdl not found or disabled, can not use sdl audio driver"
3241 if test "$sdl" = "no"; then
3242 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl//')
3244 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl/sdl/')
3249 coreaudio_libs
="-framework CoreAudio"
3253 dsound_libs
="-lole32 -ldxguid"
3262 if $pkg_config jack
--exists; then
3264 jack_libs
=$
($pkg_config jack
--libs)
3265 if test "$drv" = "try-jack"; then
3266 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack/jack/')
3269 if test "$drv" = "try-jack"; then
3270 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack//')
3272 error_exit
"$drv check failed" \
3273 "Make sure to have the $drv libs and headers installed."
3279 echo "$audio_possible_drivers" |
grep -q "\<$drv\>" ||
{
3280 error_exit
"Unknown driver '$drv' selected" \
3281 "Possible drivers are: $audio_possible_drivers"
3287 ##########################################
3288 # glib support probe
3291 glib_modules
=gthread-2.0
3292 if test "$modules" = yes; then
3293 glib_modules
="$glib_modules gmodule-export-2.0"
3295 if test "$plugins" = yes; then
3296 glib_modules
="$glib_modules gmodule-2.0"
3299 for i
in $glib_modules; do
3300 if $pkg_config --atleast-version=$glib_req_ver $i; then
3301 glib_cflags
=$
($pkg_config --cflags $i)
3302 glib_libs
=$
($pkg_config --libs $i)
3304 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
3308 # This workaround is required due to a bug in pkg-config file for glib as it
3309 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3311 if test "$static" = yes && test "$mingw32" = yes; then
3312 glib_cflags
="-DGLIB_STATIC_COMPILATION $glib_cflags"
3315 if $pkg_config --atleast-version=$glib_req_ver gio-2.0
; then
3316 gio_cflags
=$
($pkg_config --cflags gio-2.0
)
3317 gio_libs
=$
($pkg_config --libs gio-2.0
)
3318 gdbus_codegen
=$
($pkg_config --variable=gdbus_codegen gio-2.0
)
3319 if [ ! -x "$gdbus_codegen" ]; then
3322 # Check that the libraries actually work -- Ubuntu 18.04 ships
3323 # with pkg-config --static --libs data for gio-2.0 that is missing
3324 # -lblkid and will give a link error.
3326 #include <gio/gio.h>
3329 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3333 if compile_prog
"$gio_cflags" "$gio_libs" ; then
3342 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0
; then
3343 gio_cflags
="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3344 gio_libs
="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3347 # Sanity check that the current size_t matches the
3348 # size that glib thinks it should be. This catches
3349 # problems on multi-arch where people try to build
3350 # 32-bit QEMU while pointing at 64-bit glib headers
3355 #define QEMU_BUILD_BUG_ON(x) \
3356 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3359 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3364 if ! compile_prog
"$glib_cflags" "$glib_libs" ; then
3365 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3366 "You probably need to set PKG_CONFIG_LIBDIR"\
3367 "to point to the right pkg-config files for your"\
3371 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3374 int main(void) { return 0; }
3376 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3377 if cc_has_warning_flag
"-Wno-unknown-attributes"; then
3378 glib_cflags
="-Wno-unknown-attributes $glib_cflags"
3379 CONFIGURE_CFLAGS
="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3383 # Silence clang warnings triggered by glib < 2.57.2
3386 typedef struct Foo {
3389 static void foo_free(Foo *f)
3393 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3394 int main(void) { return 0; }
3396 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3397 if cc_has_warning_flag
"-Wno-unused-function"; then
3398 glib_cflags
="$glib_cflags -Wno-unused-function"
3399 CONFIGURE_CFLAGS
="$CONFIGURE_CFLAGS -Wno-unused-function"
3403 ##########################################
3404 # SHA command probe for modules
3405 if test "$modules" = yes; then
3406 shacmd_probe
="sha1sum sha1 shasum"
3407 for c
in $shacmd_probe; do
3413 if test "$shacmd" = ""; then
3414 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
3418 ##########################################
3420 PTHREADLIBS_LIST
="-pthread -lpthread -lpthreadGC2"
3424 #include <pthread.h>
3425 static void *f(void *p) { return NULL; }
3428 pthread_create(&thread, 0, f, 0);
3432 if compile_prog
"" "" ; then
3435 for pthread_lib
in $PTHREADLIBS_LIST; do
3436 if compile_prog
"" "$pthread_lib" ; then
3439 for lib_entry
in $LIBS; do
3440 if test "$lib_entry" = "$pthread_lib"; then
3445 if test "$found" = "no"; then
3446 LIBS
="$pthread_lib $LIBS"
3453 if test "$mingw32" != yes && test "$pthread" = no
; then
3454 error_exit
"pthread check failed" \
3455 "Make sure to have the pthread libs and headers installed."
3458 # check for pthread_setname_np with thread id
3459 pthread_setname_np_w_tid
=no
3461 #include <pthread.h>
3463 static void *f(void *p) { return NULL; }
3467 pthread_create(&thread, 0, f, 0);
3468 pthread_setname_np(thread, "QEMU");
3472 if compile_prog
"" "$pthread_lib" ; then
3473 pthread_setname_np_w_tid
=yes
3476 # check for pthread_setname_np without thread id
3477 pthread_setname_np_wo_tid
=no
3479 #include <pthread.h>
3481 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3485 pthread_create(&thread, 0, f, 0);
3489 if compile_prog
"" "$pthread_lib" ; then
3490 pthread_setname_np_wo_tid
=yes
3493 ##########################################
3495 if test "$libssh" != "no" ; then
3496 if $pkg_config --exists libssh
; then
3497 libssh_cflags
=$
($pkg_config libssh
--cflags)
3498 libssh_libs
=$
($pkg_config libssh
--libs)
3501 if test "$libssh" = "yes" ; then
3502 error_exit
"libssh required for --enable-libssh"
3508 ##########################################
3509 # Check for libssh 0.8
3510 # This is done like this instead of using the LIBSSH_VERSION_* and
3511 # SSH_VERSION_* macros because some distributions in the past shipped
3512 # snapshots of the future 0.8 from Git, and those snapshots did not
3513 # have updated version numbers (still referring to 0.7.0).
3515 if test "$libssh" = "yes"; then
3517 #include <libssh/libssh.h>
3518 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3520 if compile_prog
"$libssh_cflags" "$libssh_libs"; then
3521 libssh_cflags
="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3525 ##########################################
3528 if test "$linux_aio" != "no" ; then
3531 #include <sys/eventfd.h>
3533 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3535 if compile_prog
"" "-laio" ; then
3538 if test "$linux_aio" = "yes" ; then
3539 feature_not_found
"linux AIO" "Install libaio devel"
3544 ##########################################
3545 # linux-io-uring probe
3547 if test "$linux_io_uring" != "no" ; then
3548 if $pkg_config liburing
; then
3549 linux_io_uring_cflags
=$
($pkg_config --cflags liburing
)
3550 linux_io_uring_libs
=$
($pkg_config --libs liburing
)
3553 if test "$linux_io_uring" = "yes" ; then
3554 feature_not_found
"linux io_uring" "Install liburing devel"
3560 ##########################################
3561 # TPM emulation is only on POSIX
3563 if test "$tpm" = ""; then
3564 if test "$mingw32" = "yes"; then
3569 elif test "$tpm" = "yes"; then
3570 if test "$mingw32" = "yes" ; then
3571 error_exit
"TPM emulation only available on POSIX systems"
3575 ##########################################
3578 #include <sys/types.h>
3579 #include <sys/uio.h>
3581 int main(void) { return sizeof(struct iovec); }
3584 if compile_prog
"" "" ; then
3588 ##########################################
3591 #include <sys/types.h>
3592 #include <sys/uio.h>
3594 int main(void) { return preadv(0, 0, 0, 0); }
3597 if compile_prog
"" "" ; then
3601 ##########################################
3605 auto | enabled | internal
)
3606 # Simpler to always update submodule, even if not needed.
3607 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3608 git_submodules
="${git_submodules} dtc"
3613 ##########################################
3614 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3617 if $pkg_config gbm
; then
3618 gbm_cflags
="$($pkg_config --cflags gbm)"
3619 gbm_libs
="$($pkg_config --libs gbm)"
3623 if test "$opengl" != "no" ; then
3624 opengl_pkgs
="epoxy gbm"
3625 if $pkg_config $opengl_pkgs; then
3626 opengl_cflags
="$($pkg_config --cflags $opengl_pkgs)"
3627 opengl_libs
="$($pkg_config --libs $opengl_pkgs)"
3629 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3633 if test "$opengl" = "yes" ; then
3634 feature_not_found
"opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3642 if test "$opengl" = "yes"; then
3644 #include <epoxy/egl.h>
3645 #ifndef EGL_MESA_image_dma_buf_export
3646 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3648 int main(void) { return 0; }
3650 if compile_prog
"" "" ; then
3655 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3656 for target
in $target_list; do
3658 lm32-softmmu
) # milkymist-tmu2 requires X11 and OpenGL
3665 ##########################################
3667 if test "$libxml2" != "no" ; then
3668 if $pkg_config --exists libxml-2.0
; then
3670 libxml2_cflags
=$
($pkg_config --cflags libxml-2.0
)
3671 libxml2_libs
=$
($pkg_config --libs libxml-2.0
)
3673 if test "$libxml2" = "yes"; then
3674 feature_not_found
"libxml2" "Install libxml2 devel"
3680 # Check for inotify functions when we are building linux-user
3681 # emulator. This is done because older glibc versions don't
3682 # have syscall stubs for these implemented. In that case we
3683 # don't provide them even if kernel supports them.
3687 #include <sys/inotify.h>
3692 /* try to start inotify */
3693 return inotify_init();
3696 if compile_prog
"" "" ; then
3702 #include <sys/inotify.h>
3707 /* try to start inotify */
3708 return inotify_init1(0);
3711 if compile_prog
"" "" ; then
3715 # check if pipe2 is there
3724 return pipe2(pipefd, O_CLOEXEC);
3727 if compile_prog
"" "" ; then
3731 # check if accept4 is there
3734 #include <sys/socket.h>
3739 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3743 if compile_prog
"" "" ; then
3747 # check if tee/splice is there. vmsplice was added same time.
3757 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3758 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3762 if compile_prog
"" "" ; then
3766 ##########################################
3769 if test "$numa" != "no" ; then
3772 int main(void) { return numa_available(); }
3775 if compile_prog
"" "-lnuma" ; then
3779 if test "$numa" = "yes" ; then
3780 feature_not_found
"numa" "install numactl devel"
3787 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3788 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3790 elif test "$tcmalloc" = "yes" ; then
3792 elif test "$jemalloc" = "yes" ; then
3796 ##########################################
3801 #include <sys/syscall.h>
3803 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3806 if compile_prog
"" "" ; then
3810 # check if optreset global is declared by <getopt.h>
3814 int main(void) { return optreset; }
3817 if compile_prog
"" "" ; then
3821 # check if eventfd is supported
3824 #include <sys/eventfd.h>
3828 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3831 if compile_prog
"" "" ; then
3835 # check if memfd is supported
3838 #include <sys/mman.h>
3842 return memfd_create("foo", MFD_ALLOW_SEALING);
3845 if compile_prog
"" "" ; then
3851 if test "$linux_user" = "yes"; then
3853 #include <linux/usbdevice_fs.h>
3855 #ifndef USBDEVFS_GET_CAPABILITIES
3856 #error "USBDEVFS_GET_CAPABILITIES undefined"
3859 #ifndef USBDEVFS_DISCONNECT_CLAIM
3860 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3868 if compile_prog
"" ""; then
3873 # check for fallocate
3880 fallocate(0, 0, 0, 0);
3884 if compile_prog
"" "" ; then
3888 # check for fallocate hole punching
3889 fallocate_punch_hole
=no
3892 #include <linux/falloc.h>
3896 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3900 if compile_prog
"" "" ; then
3901 fallocate_punch_hole
=yes
3904 # check that fallocate supports range zeroing inside the file
3905 fallocate_zero_range
=no
3908 #include <linux/falloc.h>
3912 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3916 if compile_prog
"" "" ; then
3917 fallocate_zero_range
=yes
3920 # check for posix_fallocate
3927 posix_fallocate(0, 0, 0);
3931 if compile_prog
"" "" ; then
3935 # check for sync_file_range
3942 sync_file_range(0, 0, 0, 0);
3946 if compile_prog
"" "" ; then
3950 # check for linux/fiemap.h and FS_IOC_FIEMAP
3953 #include <sys/ioctl.h>
3954 #include <linux/fs.h>
3955 #include <linux/fiemap.h>
3959 ioctl(0, FS_IOC_FIEMAP, 0);
3963 if compile_prog
"" "" ; then
3978 if compile_prog
"" "" ; then
3982 # check for ppoll support
3989 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3990 ppoll(&pfd, 1, 0, 0);
3994 if compile_prog
"" "" ; then
3998 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3999 prctl_pr_set_timerslack
=no
4001 #include <sys/prctl.h>
4005 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4009 if compile_prog
"" "" ; then
4010 prctl_pr_set_timerslack
=yes
4013 # check for epoll support
4016 #include <sys/epoll.h>
4024 if compile_prog
"" "" ; then
4028 # epoll_create1 is a later addition
4029 # so we must check separately for its presence
4032 #include <sys/epoll.h>
4036 /* Note that we use epoll_create1 as a value, not as
4037 * a function being called. This is necessary so that on
4038 * old SPARC glibc versions where the function was present in
4039 * the library but not declared in the header file we will
4040 * fail the configure check. (Otherwise we will get a compiler
4041 * warning but not an error, and will proceed to fail the
4042 * qemu compile where we compile with -Werror.)
4044 return (int)(uintptr_t)&epoll_create1;
4047 if compile_prog
"" "" ; then
4051 # check for sendfile support
4054 #include <sys/sendfile.h>
4058 return sendfile(0, 0, 0, 0);
4061 if compile_prog
"" "" ; then
4065 # check for timerfd support (glibc 2.8 and newer)
4068 #include <sys/timerfd.h>
4072 return(timerfd_create(CLOCK_REALTIME, 0));
4075 if compile_prog
"" "" ; then
4079 # check for setns and unshare support
4092 if compile_prog
"" "" ; then
4096 # clock_adjtime probe
4103 return clock_adjtime(0, 0);
4107 if compile_prog
"" "" ; then
4122 if compile_prog
"" "" ; then
4126 # Search for bswap_32 function
4129 #include <byteswap.h>
4130 int main(void) { return bswap_32(0); }
4132 if compile_prog
"" "" ; then
4136 # Search for bswap32 function
4139 #include <sys/endian.h>
4140 #include <sys/types.h>
4141 #include <machine/bswap.h>
4142 int main(void) { return bswap32(0); }
4144 if compile_prog
"" "" ; then
4148 ##########################################
4150 # uClibc provides 2 versions of clock_gettime(), one with realtime
4151 # support and one without. This means that the clock_gettime() don't
4152 # need -lrt. We still need it for timer_create() so we check for this
4153 # function in addition.
4158 timer_create(CLOCK_REALTIME, NULL, NULL);
4159 return clock_gettime(CLOCK_REALTIME, NULL);
4163 if compile_prog
"" "" ; then
4165 # we need pthread for static linking. use previous pthread test result
4166 elif compile_prog
"" "$pthread_lib -lrt" ; then
4170 # Check whether we have openpty() in either libc or libutil
4172 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4173 int main(void) { return openpty(0, 0, 0, 0, 0); }
4177 if compile_prog
"" "" ; then
4180 if compile_prog
"" "-lutil" ; then
4185 ##########################################
4187 if test "$spice" != "no" ; then
4190 int main(void) { spice_server_new(); return 0; }
4192 spice_cflags
=$
($pkg_config --cflags spice-protocol spice-server
2>/dev
/null
)
4193 spice_libs
=$
($pkg_config --libs spice-protocol spice-server
2>/dev
/null
)
4194 if $pkg_config --atleast-version=0.12.5 spice-server
&& \
4195 $pkg_config --atleast-version=0.12.3 spice-protocol
&& \
4196 compile_prog
"$spice_cflags" "$spice_libs" ; then
4199 if test "$spice" = "yes" ; then
4200 feature_not_found
"spice" \
4201 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4207 # check for smartcard support
4208 if test "$smartcard" != "no"; then
4209 if $pkg_config --atleast-version=2.5.1 libcacard
; then
4210 libcacard_cflags
=$
($pkg_config --cflags libcacard
)
4211 libcacard_libs
=$
($pkg_config --libs libcacard
)
4214 if test "$smartcard" = "yes"; then
4215 feature_not_found
"smartcard" "Install libcacard devel"
4222 if test "$libusb" != "no" ; then
4223 if $pkg_config --atleast-version=1.0.13 libusb-1.0
; then
4225 libusb_cflags
=$
($pkg_config --cflags libusb-1.0
)
4226 libusb_libs
=$
($pkg_config --libs libusb-1.0
)
4228 if test "$libusb" = "yes"; then
4229 feature_not_found
"libusb" "Install libusb devel >= 1.0.13"
4235 # check for usbredirparser for usb network redirection support
4236 if test "$usb_redir" != "no" ; then
4237 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5
; then
4239 usb_redir_cflags
=$
($pkg_config --cflags libusbredirparser-0.5
)
4240 usb_redir_libs
=$
($pkg_config --libs libusbredirparser-0.5
)
4242 if test "$usb_redir" = "yes"; then
4243 feature_not_found
"usb-redir" "Install usbredir devel"
4249 ##########################################
4250 # check if we have VSS SDK headers for win
4252 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4253 test "$vss_win32_sdk" != "no" ; then
4254 case "$vss_win32_sdk" in
4255 "") vss_win32_include
="-isystem $source_path" ;;
4256 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
4257 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4258 vss_win32_include
="-isystem $source_path/.sdk/vss"
4259 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4261 *) vss_win32_include
="-isystem $vss_win32_sdk"
4264 #define __MIDL_user_allocate_free_DEFINED__
4265 #include <inc/win2003/vss.h>
4266 int main(void) { return VSS_CTX_BACKUP; }
4268 if compile_prog
"$vss_win32_include" "" ; then
4269 guest_agent_with_vss
="yes"
4270 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
4271 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4272 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4274 if test "$vss_win32_sdk" != "" ; then
4275 echo "ERROR: Please download and install Microsoft VSS SDK:"
4276 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4277 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4278 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4279 echo "ERROR: The headers are extracted in the directory \`inc'."
4280 feature_not_found
"VSS support"
4282 guest_agent_with_vss
="no"
4286 ##########################################
4287 # lookup Windows platform SDK (if not specified)
4288 # The SDK is needed only to build .tlb (type library) file of guest agent
4289 # VSS provider from the source. It is usually unnecessary because the
4290 # pre-compiled .tlb file is included.
4292 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4293 test "$guest_agent_with_vss" = "yes" ; then
4294 if test -z "$win_sdk"; then
4295 programfiles
="$PROGRAMFILES"
4296 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
4297 if test -n "$programfiles"; then
4298 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
4300 feature_not_found
"Windows SDK"
4302 elif test "$win_sdk" = "no"; then
4307 ##########################################
4308 # check if mingw environment provides a recent ntddscsi.h
4309 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4311 #include <windows.h>
4312 #include <ntddscsi.h>
4314 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4315 #error Missing required ioctl definitions
4317 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4321 if compile_prog
"" "" ; then
4322 guest_agent_ntddscsi
=yes
4323 libs_qga
="-lsetupapi -lcfgmgr32 $libs_qga"
4327 ##########################################
4328 # virgl renderer probe
4330 if test "$virglrenderer" != "no" ; then
4332 #include <virglrenderer.h>
4333 int main(void) { virgl_renderer_poll(); return 0; }
4335 virgl_cflags
=$
($pkg_config --cflags virglrenderer
2>/dev
/null
)
4336 virgl_libs
=$
($pkg_config --libs virglrenderer
2>/dev
/null
)
4337 virgl_version
=$
($pkg_config --modversion virglrenderer
2>/dev
/null
)
4338 if $pkg_config virglrenderer
>/dev
/null
2>&1 && \
4339 compile_prog
"$virgl_cflags" "$virgl_libs" ; then
4342 if test "$virglrenderer" = "yes" ; then
4343 feature_not_found
"virglrenderer"
4349 ##########################################
4353 auto | enabled | internal
)
4354 # Simpler to always update submodule, even if not needed.
4355 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4356 git_submodules
="${git_submodules} capstone"
4361 ##########################################
4362 # check if we have fdatasync
4368 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4369 return fdatasync(0);
4371 #error Not supported
4375 if compile_prog
"" "" ; then
4379 ##########################################
4380 # check if we have madvise
4384 #include <sys/types.h>
4385 #include <sys/mman.h>
4387 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4389 if compile_prog
"" "" ; then
4393 ##########################################
4394 # check if we have posix_madvise
4398 #include <sys/mman.h>
4400 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4402 if compile_prog
"" "" ; then
4406 ##########################################
4407 # check if we have posix_memalign()
4414 return posix_memalign(&p, 8, 8);
4417 if compile_prog
"" "" ; then
4421 ##########################################
4422 # check if we have posix_syslog
4427 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4429 if compile_prog
"" "" ; then
4433 ##########################################
4434 # check if we have sem_timedwait
4438 #include <semaphore.h>
4439 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4441 if compile_prog
"" "" ; then
4445 ##########################################
4446 # check if we have strchrnul
4452 // Use a haystack that the compiler shouldn't be able to constant fold
4453 char *haystack = (char*)&main;
4454 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4456 if compile_prog
"" "" ; then
4460 #########################################
4461 # check if we have st_atim
4465 #include <sys/stat.h>
4467 int main(void) { return offsetof(struct stat, st_atim); }
4469 if compile_prog
"" "" ; then
4473 ##########################################
4474 # check if trace backend exists
4476 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev
/null
2> /dev
/null
4477 if test "$?" -ne 0 ; then
4478 error_exit
"invalid trace backends" \
4479 "Please choose supported trace backends."
4482 ##########################################
4483 # For 'ust' backend, test if ust headers are present
4484 if have_backend
"ust"; then
4486 #include <lttng/tracepoint.h>
4487 int main(void) { return 0; }
4489 if compile_prog
"" "-Wl,--no-as-needed -ldl" ; then
4490 if $pkg_config lttng-ust
--exists; then
4491 lttng_ust_libs
=$
($pkg_config --libs lttng-ust
)
4493 lttng_ust_libs
="-llttng-ust -ldl"
4495 if $pkg_config liburcu-bp
--exists; then
4496 urcu_bp_libs
=$
($pkg_config --libs liburcu-bp
)
4498 urcu_bp_libs
="-lurcu-bp"
4501 error_exit
"Trace backend 'ust' missing lttng-ust header files"
4505 ##########################################
4506 # For 'dtrace' backend, test if 'dtrace' command is present
4507 if have_backend
"dtrace"; then
4508 if ! has
'dtrace' ; then
4509 error_exit
"dtrace command is not found in PATH $PATH"
4511 trace_backend_stap
="no"
4512 if has
'stap' ; then
4513 trace_backend_stap
="yes"
4515 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4516 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4517 # instead. QEMU --enable-modules depends on this because the SystemTap
4518 # semaphores are linked into the main binary and not the module's shared
4520 QEMU_CFLAGS
="$QEMU_CFLAGS -DSTAP_SDT_V2"
4524 ##########################################
4525 # check and set a backend for coroutine
4527 # We prefer ucontext, but it's not always possible. The fallback
4528 # is sigcontext. On Windows the only valid backend is the Windows
4532 if test "$darwin" != "yes"; then
4534 #include <ucontext.h>
4535 #ifdef __stub_makecontext
4536 #error Ignoring glibc stub makecontext which will always fail
4538 int main(void) { makecontext(0, 0, 0); return 0; }
4540 if compile_prog
"" "" ; then
4545 if test "$coroutine" = ""; then
4546 if test "$mingw32" = "yes"; then
4548 elif test "$ucontext_works" = "yes"; then
4551 coroutine
=sigaltstack
4556 if test "$mingw32" != "yes"; then
4557 error_exit
"'windows' coroutine backend only valid for Windows"
4559 # Unfortunately the user visible backend name doesn't match the
4560 # coroutine-*.c filename for this case, so we have to adjust it here.
4564 if test "$ucontext_works" != "yes"; then
4565 feature_not_found
"ucontext"
4569 if test "$mingw32" = "yes"; then
4570 error_exit
"only the 'windows' coroutine backend is valid for Windows"
4574 error_exit
"unknown coroutine backend $coroutine"
4579 if test "$coroutine_pool" = ""; then
4583 if test "$debug_stack_usage" = "yes"; then
4584 if test "$coroutine_pool" = "yes"; then
4585 echo "WARN: disabling coroutine pool for stack usage debugging"
4590 ##################################################
4594 if test "$safe_stack" = "yes"; then
4596 int main(int argc, char *argv[])
4598 #if ! __has_feature(safe_stack)
4599 #error SafeStack Disabled
4604 flag
="-fsanitize=safe-stack"
4605 # Check that safe-stack is supported and enabled.
4606 if compile_prog
"-Werror $flag" "$flag"; then
4607 # Flag needed both at compilation and at linking
4608 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
4609 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
4611 error_exit
"SafeStack not supported by your compiler"
4613 if test "$coroutine" != "ucontext"; then
4614 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
4618 int main(int argc, char *argv[])
4620 #if defined(__has_feature)
4621 #if __has_feature(safe_stack)
4622 #error SafeStack Enabled
4628 if test "$safe_stack" = "no"; then
4629 # Make sure that safe-stack is disabled
4630 if ! compile_prog
"-Werror" ""; then
4631 # SafeStack was already enabled, try to explicitly remove the feature
4632 flag
="-fno-sanitize=safe-stack"
4633 if ! compile_prog
"-Werror $flag" "$flag"; then
4634 error_exit
"Configure cannot disable SafeStack"
4636 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
4637 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
4639 else # "$safe_stack" = ""
4640 # Set safe_stack to yes or no based on pre-existing flags
4641 if compile_prog
"-Werror" ""; then
4645 if test "$coroutine" != "ucontext"; then
4646 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
4652 ##########################################
4653 # check if we have open_by_handle_at
4655 open_by_handle_at
=no
4658 #if !defined(AT_EMPTY_PATH)
4659 # error missing definition
4661 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4664 if compile_prog
"" "" ; then
4665 open_by_handle_at
=yes
4668 ########################################
4669 # check if we have linux/magic.h
4673 #include <linux/magic.h>
4678 if compile_prog
"" "" ; then
4682 ########################################
4683 # check if we have valgrind/valgrind.h
4687 #include <valgrind/valgrind.h>
4692 if compile_prog
"" "" ; then
4696 ########################################
4697 # check if environ is declared
4707 if compile_prog
"" "" ; then
4711 ########################################
4712 # check if cpuid.h is usable.
4717 unsigned a, b, c, d;
4718 int max = __get_cpuid_max(0, 0);
4721 __cpuid(1, a, b, c, d);
4725 __cpuid_count(7, 0, a, b, c, d);
4731 if compile_prog
"" "" ; then
4735 ##########################################
4736 # avx2 optimization requirement check
4738 # There is no point enabling this if cpuid.h is not usable,
4739 # since we won't be able to select the new routines.
4741 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
4743 #pragma GCC push_options
4744 #pragma GCC target("avx2")
4746 #include <immintrin.h>
4747 static int bar(void *a) {
4748 __m256i x = *(__m256i *)a;
4749 return _mm256_testz_si256(x, x);
4751 int main(int argc, char *argv[]) { return bar(argv[0]); }
4753 if compile_object
"" ; then
4760 ##########################################
4761 # avx512f optimization requirement check
4763 # There is no point enabling this if cpuid.h is not usable,
4764 # since we won't be able to select the new routines.
4765 # by default, it is turned off.
4766 # if user explicitly want to enable it, check environment
4768 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
4770 #pragma GCC push_options
4771 #pragma GCC target("avx512f")
4773 #include <immintrin.h>
4774 static int bar(void *a) {
4775 __m512i x = *(__m512i *)a;
4776 return _mm512_test_epi64_mask(x, x);
4778 int main(int argc, char *argv[])
4780 return bar(argv[0]);
4783 if ! compile_object
"" ; then
4790 ########################################
4791 # check if __[u]int128_t is usable.
4804 if compile_prog
"" "" ; then
4808 #########################################
4809 # See if 128-bit atomic operations are supported.
4812 if test "$int128" = "yes"; then
4816 unsigned __int128 x = 0, y = 0;
4817 y = __atomic_load_16(&x, 0);
4818 __atomic_store_16(&x, y, 0);
4819 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4823 if compile_prog
"" "" ; then
4829 if test "$int128" = yes && test "$atomic128" = no
; then
4833 unsigned __int128 x = 0, y = 0;
4834 __sync_val_compare_and_swap_16(&x, y, x);
4838 if compile_prog
"" "" ; then
4843 #########################################
4844 # See if 64-bit atomic operations are supported.
4845 # Note that without __atomic builtins, we can only
4846 # assume atomic loads/stores max at pointer size.
4852 uint64_t x = 0, y = 0;
4853 #ifdef __ATOMIC_RELAXED
4854 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
4855 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
4856 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
4857 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
4858 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4860 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4861 __sync_lock_test_and_set(&x, y);
4862 __sync_val_compare_and_swap(&x, y, 0);
4863 __sync_fetch_and_add(&x, y);
4868 if compile_prog
"" "" ; then
4872 #########################################
4873 # See if --dynamic-list is supported by the linker
4874 ld_dynamic_list
="no"
4875 if test "$static" = "no" ; then
4898 if compile_prog
"" "-Wl,--dynamic-list=$TMPTXT" ; then
4899 ld_dynamic_list
="yes"
4903 #########################################
4904 # See if -exported_symbols_list is supported by the linker
4906 ld_exported_symbols_list
="no"
4907 if test "$static" = "no" ; then
4912 if compile_prog
"" "-Wl,-exported_symbols_list,$TMPTXT" ; then
4913 ld_exported_symbols_list
="yes"
4917 if test "$plugins" = "yes" &&
4918 test "$ld_dynamic_list" = "no" &&
4919 test "$ld_exported_symbols_list" = "no" ; then
4921 "Plugin support requires dynamic linking and specifying a set of symbols " \
4922 "that are exported to plugins. Unfortunately your linker doesn't " \
4923 "support the flag (--dynamic-list or -exported_symbols_list) used " \
4924 "for this purpose. You can't build with --static."
4927 ########################################
4928 # See if __attribute__((alias)) is supported.
4929 # This false for Xcode 9, but has been remedied for Xcode 10.
4930 # Unfortunately, travis uses Xcode 9 by default.
4935 extern const int y __attribute__((alias("x")));
4936 int main(void) { return 0; }
4938 if compile_prog
"" "" ; then
4942 ########################################
4943 # check if getauxval is available.
4947 #include <sys/auxv.h>
4949 return getauxval(AT_HWCAP) == 0;
4952 if compile_prog
"" "" ; then
4956 ########################################
4957 # check if ccache is interfering with
4958 # semantic analysis of macros
4963 static const int Z = 1;
4964 #define fn() ({ Z; })
4965 #define TAUT(X) ((X) == Z)
4966 #define PAREN(X, Y) (X == Y)
4968 int main(int argc, char *argv[])
4974 if (PAREN(x, y)) return 0;
4975 if (TAUT(Z)) return 0;
4980 if ! compile_object
"-Werror"; then
4984 #################################################
4985 # clang does not support glibc + FORTIFY_SOURCE.
4987 if test "$fortify_source" != "no"; then
4988 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
4989 fortify_source
="no";
4990 elif test -n "$cxx" && has
$cxx &&
4991 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
4992 fortify_source
="no";
4994 fortify_source
="yes"
4998 ###############################################
4999 # Check if copy_file_range is provided by glibc
5000 have_copy_file_range
=no
5004 copy_file_range(0, NULL, 0, NULL, 0, 0);
5008 if compile_prog
"" "" ; then
5009 have_copy_file_range
=yes
5012 ##########################################
5013 # check if struct fsxattr is available via linux/fs.h
5017 #include <linux/fs.h>
5023 if compile_prog
"" "" ; then
5027 ##########################################
5028 # check for usable membarrier system call
5029 if test "$membarrier" = "yes"; then
5031 if test "$mingw32" = "yes" ; then
5033 elif test "$linux" = "yes" ; then
5035 #include <linux/membarrier.h>
5036 #include <sys/syscall.h>
5040 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5041 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5045 if compile_prog
"" "" ; then
5049 if test "$have_membarrier" = "no"; then
5050 feature_not_found
"membarrier" "membarrier system call not available"
5053 # Do not enable it by default even for Mingw32, because it doesn't
5058 ##########################################
5059 # check if rtnetlink.h exists and is useful
5062 #include <linux/rtnetlink.h>
5064 return IFLA_PROTO_DOWN;
5067 if compile_prog
"" "" ; then
5071 ##########################################
5072 # check for usable AF_VSOCK environment
5076 #include <sys/types.h>
5077 #include <sys/socket.h>
5078 #if !defined(AF_VSOCK)
5079 # error missing AF_VSOCK flag
5081 #include <linux/vm_sockets.h>
5084 struct sockaddr_vm svm;
5085 socklen_t len = sizeof(svm);
5086 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5087 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5088 if ((ret == -1) && (errno == ENOTCONN)) {
5094 if compile_prog
"" "" ; then
5098 ##########################################
5099 # check for usable AF_ALG environment
5103 #include <sys/types.h>
5104 #include <sys/socket.h>
5105 #include <linux/if_alg.h>
5108 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5112 if compile_prog
"" "" ; then
5115 if test "$crypto_afalg" = "yes"
5117 if test "$have_afalg" != "yes"
5119 error_exit
"AF_ALG requested but could not be detected"
5124 #################################################
5125 # check for sysmacros.h
5129 #include <sys/sysmacros.h>
5131 return makedev(0, 0);
5134 if compile_prog
"" "" ; then
5138 ##########################################
5139 # check for _Static_assert()
5141 have_static_assert
=no
5143 _Static_assert(1, "success");
5148 if compile_prog
"" "" ; then
5149 have_static_assert
=yes
5152 ##########################################
5153 # check for utmpx.h, it is missing e.g. on OpenBSD
5158 struct utmpx user_info;
5163 if compile_prog
"" "" ; then
5167 ##########################################
5168 # check for getrandom()
5172 #include <sys/random.h>
5174 return getrandom(0, 0, GRND_NONBLOCK);
5177 if compile_prog
"" "" ; then
5181 ##########################################
5182 # checks for sanitizers
5186 have_asan_iface_h
=no
5187 have_asan_iface_fiber
=no
5189 if test "$sanitizers" = "yes" ; then
5191 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5195 # we could use a simple skeleton for flags checks, but this also
5196 # detect the static linking issue of ubsan, see also:
5197 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5201 void *tmp = malloc(10);
5203 return *(int *)(tmp + 2);
5208 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5212 if check_include
"sanitizer/asan_interface.h" ; then
5213 have_asan_iface_h
=yes
5217 #include <sanitizer/asan_interface.h>
5219 __sanitizer_start_switch_fiber(0, 0, 0);
5223 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5224 have_asan_iface_fiber
=yes
5228 ##########################################
5230 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5231 write_c_fuzzer_skeleton
5232 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5235 error_exit
"Your compiler doesn't support -fsanitize=fuzzer"
5240 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5241 # keep it separate until that is not the case.
5242 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5243 error_exit
"TSAN is not supported with other sanitiziers."
5246 have_tsan_iface_fiber
=no
5247 if test "$tsan" = "yes" ; then
5249 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5253 #include <sanitizer/tsan_interface.h>
5255 __tsan_create_fiber(0);
5259 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5260 have_tsan_iface_fiber
=yes
5264 ##########################################
5267 if test "$libpmem" != "no"; then
5268 if $pkg_config --exists "libpmem"; then
5270 libpmem_libs
=$
($pkg_config --libs libpmem
)
5271 libpmem_cflags
=$
($pkg_config --cflags libpmem
)
5273 if test "$libpmem" = "yes" ; then
5274 feature_not_found
"libpmem" "Install nvml or pmdk"
5280 ##########################################
5281 # check for libdaxctl
5283 if test "$libdaxctl" != "no"; then
5284 if $pkg_config --atleast-version=57 "libdaxctl"; then
5286 libdaxctl_libs
=$
($pkg_config --libs libdaxctl
)
5287 libdaxctl_cflags
=$
($pkg_config --cflags libdaxctl
)
5289 if test "$libdaxctl" = "yes" ; then
5290 feature_not_found
"libdaxctl" "Install libdaxctl"
5296 ##########################################
5300 auto | enabled | internal
)
5301 # Simpler to always update submodule, even if not needed.
5302 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5303 git_submodules
="${git_submodules} slirp"
5308 ##########################################
5309 # check for usable __NR_keyctl syscall
5311 if test "$linux" = "yes" ; then
5316 #include <asm/unistd.h>
5317 #include <linux/keyctl.h>
5320 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5323 if compile_prog
"" "" ; then
5327 if test "$secret_keyring" != "no"
5329 if test "$have_keyring" = "yes"
5333 if test "$secret_keyring" = "yes"
5335 error_exit
"syscall __NR_keyctl requested, \
5336 but not implemented on your system"
5343 ##########################################
5345 # After here, no more $cc or $ld runs
5349 if test "$gcov" = "yes" ; then
5351 elif test "$fortify_source" = "yes" ; then
5352 QEMU_CFLAGS
="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5358 # Ensure there's only a single GP
5359 QEMU_CFLAGS
="-msmall-data $QEMU_CFLAGS"
5363 if test "$gprof" = "yes" ; then
5364 QEMU_CFLAGS
="-p $QEMU_CFLAGS"
5365 QEMU_LDFLAGS
="-p $QEMU_LDFLAGS"
5368 if test "$have_asan" = "yes"; then
5369 QEMU_CFLAGS
="-fsanitize=address $QEMU_CFLAGS"
5370 QEMU_LDFLAGS
="-fsanitize=address $QEMU_LDFLAGS"
5371 if test "$have_asan_iface_h" = "no" ; then
5372 echo "ASAN build enabled, but ASAN header missing." \
5373 "Without code annotation, the report may be inferior."
5374 elif test "$have_asan_iface_fiber" = "no" ; then
5375 echo "ASAN build enabled, but ASAN header is too old." \
5376 "Without code annotation, the report may be inferior."
5379 if test "$have_tsan" = "yes" ; then
5380 if test "$have_tsan_iface_fiber" = "yes" ; then
5381 QEMU_CFLAGS
="-fsanitize=thread $QEMU_CFLAGS"
5382 QEMU_LDFLAGS
="-fsanitize=thread $QEMU_LDFLAGS"
5384 error_exit
"Cannot enable TSAN due to missing fiber annotation interface."
5386 elif test "$tsan" = "yes" ; then
5387 error_exit
"Cannot enable TSAN due to missing sanitize thread interface."
5389 if test "$have_ubsan" = "yes"; then
5390 QEMU_CFLAGS
="-fsanitize=undefined $QEMU_CFLAGS"
5391 QEMU_LDFLAGS
="-fsanitize=undefined $QEMU_LDFLAGS"
5394 ##########################################
5396 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5397 if test "$solaris" = "no" && test "$tsan" = "no"; then
5398 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
5399 QEMU_LDFLAGS
="-Wl,--warn-common $QEMU_LDFLAGS"
5403 # Use ASLR, no-SEH and DEP if available
5404 if test "$mingw32" = "yes" ; then
5405 flags
="--no-seh --nxcompat"
5407 # Disable ASLR for debug builds to allow debugging with gdb
5408 if test "$debug" = "no" ; then
5409 flags
="--dynamicbase $flags"
5412 for flag
in $flags; do
5413 if ld_has
$flag ; then
5414 QEMU_LDFLAGS
="-Wl,$flag $QEMU_LDFLAGS"
5419 # We can only support ivshmem if we have eventfd
5420 if [ "$eventfd" = "yes" ]; then
5424 # Probe for guest agent support/options
5426 if [ "$guest_agent" != "no" ]; then
5427 if [ "$softmmu" = no
-a "$want_tools" = no
] ; then
5429 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5431 elif [ "$guest_agent" != yes ]; then
5434 error_exit
"Guest agent is not supported on this platform"
5438 # Guest agent Window MSI package
5440 if test "$guest_agent" != yes; then
5441 if test "$guest_agent_msi" = yes; then
5442 error_exit
"MSI guest agent package requires guest agent enabled"
5445 elif test "$mingw32" != "yes"; then
5446 if test "$guest_agent_msi" = "yes"; then
5447 error_exit
"MSI guest agent package is available only for MinGW Windows cross-compilation"
5450 elif ! has wixl
; then
5451 if test "$guest_agent_msi" = "yes"; then
5452 error_exit
"MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5456 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5457 # disabled explicitly
5458 if test "$guest_agent_msi" != "no"; then
5463 if test "$guest_agent_msi" = "yes"; then
5464 if test "$guest_agent_with_vss" = "yes"; then
5465 QEMU_GA_MSI_WITH_VSS
="-D InstallVss"
5468 if test "$QEMU_GA_MANUFACTURER" = ""; then
5469 QEMU_GA_MANUFACTURER
=QEMU
5472 if test "$QEMU_GA_DISTRO" = ""; then
5473 QEMU_GA_DISTRO
=Linux
5476 if test "$QEMU_GA_VERSION" = ""; then
5477 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
5480 QEMU_GA_MSI_MINGW_DLL_PATH
="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5484 QEMU_GA_MSI_ARCH
="-a x64 -D Arch=64"
5487 QEMU_GA_MSI_ARCH
="-D Arch=32"
5490 error_exit
"CPU $cpu not supported for building installation package"
5495 # Mac OS X ships with a broken assembler
5497 if { test "$cpu" = "i386" ||
test "$cpu" = "x86_64"; } && \
5498 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5499 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5500 # Different host OS linkers have different ideas about the name of the ELF
5501 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5502 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5503 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
5504 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5505 ld_i386_emulation
="$emu"
5512 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5513 if test "$cpu" = "s390x" ; then
5515 if compile_prog
"-march=z900" ""; then
5516 roms
="$roms s390-ccw"
5517 # SLOF is required for building the s390-ccw firmware on s390x,
5518 # since it is using the libnet code from SLOF for network booting.
5519 if test -e "${source_path}/.git" ; then
5520 git_submodules
="${git_submodules} roms/SLOF"
5525 # Check that the C++ compiler exists and works with the C compiler.
5526 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5529 int c_function(void);
5530 int main(void) { return c_function(); }
5537 int c_function(void);
5539 int c_function(void) { return 42; }
5544 if do_cxx
$CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5545 # C++ compiler $cxx works ok with C compiler $cc
5548 echo "C++ compiler $cxx does not work with C compiler $cc"
5549 echo "Disabling C++ specific optional code"
5553 echo "No C++ compiler available; disabling C++ specific optional code"
5557 if test $git_update = 'yes' ; then
5558 (cd "${source_path}" && GIT
="$git" "./scripts/git-submodule.sh" update
"$git_submodules")
5561 config_host_mak
="config-host.mak"
5563 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5564 echo >> $config_host_mak
5566 echo all
: >> $config_host_mak
5567 echo "GIT=$git" >> $config_host_mak
5568 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5569 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5571 echo "ARCH=$ARCH" >> $config_host_mak
5573 if test "$debug_tcg" = "yes" ; then
5574 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5576 if test "$strip_opt" = "yes" ; then
5577 echo "STRIP=${strip}" >> $config_host_mak
5579 if test "$bigendian" = "yes" ; then
5580 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5582 if test "$mingw32" = "yes" ; then
5583 echo "CONFIG_WIN32=y" >> $config_host_mak
5584 if test "$guest_agent_with_vss" = "yes" ; then
5585 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5586 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5587 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5589 if test "$guest_agent_ntddscsi" = "yes" ; then
5590 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5592 if test "$guest_agent_msi" = "yes"; then
5593 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5594 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5595 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5596 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5597 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5598 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5599 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5602 echo "CONFIG_POSIX=y" >> $config_host_mak
5605 if test "$linux" = "yes" ; then
5606 echo "CONFIG_LINUX=y" >> $config_host_mak
5609 if test "$darwin" = "yes" ; then
5610 echo "CONFIG_DARWIN=y" >> $config_host_mak
5613 if test "$solaris" = "yes" ; then
5614 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5616 if test "$haiku" = "yes" ; then
5617 echo "CONFIG_HAIKU=y" >> $config_host_mak
5619 if test "$static" = "yes" ; then
5620 echo "CONFIG_STATIC=y" >> $config_host_mak
5622 if test "$profiler" = "yes" ; then
5623 echo "CONFIG_PROFILER=y" >> $config_host_mak
5625 if test "$want_tools" = "yes" ; then
5626 echo "CONFIG_TOOLS=y" >> $config_host_mak
5628 if test "$guest_agent" = "yes" ; then
5629 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5631 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5632 if test "$vde" = "yes" ; then
5633 echo "CONFIG_VDE=y" >> $config_host_mak
5634 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5636 if test "$netmap" = "yes" ; then
5637 echo "CONFIG_NETMAP=y" >> $config_host_mak
5639 if test "$l2tpv3" = "yes" ; then
5640 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5642 if test "$gprof" = "yes" ; then
5643 echo "CONFIG_GPROF=y" >> $config_host_mak
5645 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5646 for drv
in $audio_drv_list; do
5647 def
=CONFIG_AUDIO_$
(echo $drv | LC_ALL
=C
tr '[a-z]' '[A-Z]')
5648 echo "$def=y" >> $config_host_mak
5650 if test "$alsa" = "yes" ; then
5651 echo "CONFIG_ALSA=y" >> $config_host_mak
5653 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5654 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5655 if test "$libpulse" = "yes" ; then
5656 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5658 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5659 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5660 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5661 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5662 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5663 if test "$libjack" = "yes" ; then
5664 echo "CONFIG_LIBJACK=y" >> $config_host_mak
5666 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
5667 if test "$audio_win_int" = "yes" ; then
5668 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5670 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5671 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5672 if test "$xfs" = "yes" ; then
5673 echo "CONFIG_XFS=y" >> $config_host_mak
5675 qemu_version
=$
(head $source_path/VERSION
)
5676 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5677 echo "SRC_PATH=$source_path" >> $config_host_mak
5678 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5679 if test "$modules" = "yes"; then
5680 # $shacmd can generate a hash started with digit, which the compiler doesn't
5681 # like as an symbol. So prefix it with an underscore
5682 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5683 echo "CONFIG_MODULES=y" >> $config_host_mak
5685 if test "$module_upgrades" = "yes"; then
5686 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5688 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
5689 echo "CONFIG_X11=y" >> $config_host_mak
5690 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
5691 echo "X11_LIBS=$x11_libs" >> $config_host_mak
5693 if test "$pipe2" = "yes" ; then
5694 echo "CONFIG_PIPE2=y" >> $config_host_mak
5696 if test "$accept4" = "yes" ; then
5697 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5699 if test "$splice" = "yes" ; then
5700 echo "CONFIG_SPLICE=y" >> $config_host_mak
5702 if test "$eventfd" = "yes" ; then
5703 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5705 if test "$memfd" = "yes" ; then
5706 echo "CONFIG_MEMFD=y" >> $config_host_mak
5708 if test "$have_usbfs" = "yes" ; then
5709 echo "CONFIG_USBFS=y" >> $config_host_mak
5711 if test "$fallocate" = "yes" ; then
5712 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5714 if test "$fallocate_punch_hole" = "yes" ; then
5715 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5717 if test "$fallocate_zero_range" = "yes" ; then
5718 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5720 if test "$posix_fallocate" = "yes" ; then
5721 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5723 if test "$sync_file_range" = "yes" ; then
5724 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5726 if test "$fiemap" = "yes" ; then
5727 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5729 if test "$dup3" = "yes" ; then
5730 echo "CONFIG_DUP3=y" >> $config_host_mak
5732 if test "$ppoll" = "yes" ; then
5733 echo "CONFIG_PPOLL=y" >> $config_host_mak
5735 if test "$prctl_pr_set_timerslack" = "yes" ; then
5736 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5738 if test "$epoll" = "yes" ; then
5739 echo "CONFIG_EPOLL=y" >> $config_host_mak
5741 if test "$epoll_create1" = "yes" ; then
5742 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5744 if test "$sendfile" = "yes" ; then
5745 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5747 if test "$timerfd" = "yes" ; then
5748 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5750 if test "$setns" = "yes" ; then
5751 echo "CONFIG_SETNS=y" >> $config_host_mak
5753 if test "$clock_adjtime" = "yes" ; then
5754 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5756 if test "$syncfs" = "yes" ; then
5757 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5759 if test "$inotify" = "yes" ; then
5760 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5762 if test "$inotify1" = "yes" ; then
5763 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5765 if test "$sem_timedwait" = "yes" ; then
5766 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5768 if test "$strchrnul" = "yes" ; then
5769 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
5771 if test "$st_atim" = "yes" ; then
5772 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
5774 if test "$byteswap_h" = "yes" ; then
5775 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5777 if test "$bswap_h" = "yes" ; then
5778 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5780 if test "$gtk" = "yes" ; then
5781 echo "CONFIG_GTK=y" >> $config_host_mak
5782 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5783 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5784 if test "$gtk_gl" = "yes" ; then
5785 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5788 if test "$gio" = "yes" ; then
5789 echo "CONFIG_GIO=y" >> $config_host_mak
5790 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5791 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5792 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5794 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5795 if test "$gnutls" = "yes" ; then
5796 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5797 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5798 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5800 if test "$gcrypt" = "yes" ; then
5801 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5802 if test "$gcrypt_hmac" = "yes" ; then
5803 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5805 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
5806 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
5808 if test "$nettle" = "yes" ; then
5809 echo "CONFIG_NETTLE=y" >> $config_host_mak
5810 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5811 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5812 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5814 if test "$qemu_private_xts" = "yes" ; then
5815 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5817 if test "$tasn1" = "yes" ; then
5818 echo "CONFIG_TASN1=y" >> $config_host_mak
5820 if test "$auth_pam" = "yes" ; then
5821 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
5823 if test "$have_broken_size_max" = "yes" ; then
5824 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5826 if test "$have_openpty" = "yes" ; then
5827 echo "HAVE_OPENPTY=y" >> $config_host_mak
5830 # Work around a system header bug with some kernel/XFS header
5831 # versions where they both try to define 'struct fsxattr':
5832 # xfs headers will not try to redefine structs from linux headers
5833 # if this macro is set.
5834 if test "$have_fsxattr" = "yes" ; then
5835 echo "HAVE_FSXATTR=y" >> $config_host_mak
5837 if test "$have_copy_file_range" = "yes" ; then
5838 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
5840 if test "$vte" = "yes" ; then
5841 echo "CONFIG_VTE=y" >> $config_host_mak
5842 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5843 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5845 if test "$virglrenderer" = "yes" ; then
5846 echo "CONFIG_VIRGL=y" >> $config_host_mak
5847 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5848 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5850 if test "$xen" = "enabled" ; then
5851 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5852 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5853 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5854 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5856 if test "$linux_aio" = "yes" ; then
5857 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5859 if test "$linux_io_uring" = "yes" ; then
5860 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5861 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5862 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5864 if test "$vhost_scsi" = "yes" ; then
5865 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5867 if test "$vhost_net" = "yes" ; then
5868 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5870 if test "$vhost_net_user" = "yes" ; then
5871 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
5873 if test "$vhost_net_vdpa" = "yes" ; then
5874 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5876 if test "$vhost_crypto" = "yes" ; then
5877 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5879 if test "$vhost_vsock" = "yes" ; then
5880 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5881 if test "$vhost_user" = "yes" ; then
5882 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
5885 if test "$vhost_kernel" = "yes" ; then
5886 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5888 if test "$vhost_user" = "yes" ; then
5889 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5891 if test "$vhost_vdpa" = "yes" ; then
5892 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5894 if test "$vhost_user_fs" = "yes" ; then
5895 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
5897 if test "$iovec" = "yes" ; then
5898 echo "CONFIG_IOVEC=y" >> $config_host_mak
5900 if test "$preadv" = "yes" ; then
5901 echo "CONFIG_PREADV=y" >> $config_host_mak
5903 if test "$membarrier" = "yes" ; then
5904 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5906 if test "$signalfd" = "yes" ; then
5907 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5909 if test "$optreset" = "yes" ; then
5910 echo "HAVE_OPTRESET=y" >> $config_host_mak
5912 if test "$tcg" = "enabled"; then
5913 if test "$tcg_interpreter" = "yes" ; then
5914 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5917 if test "$fdatasync" = "yes" ; then
5918 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5920 if test "$madvise" = "yes" ; then
5921 echo "CONFIG_MADVISE=y" >> $config_host_mak
5923 if test "$posix_madvise" = "yes" ; then
5924 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5926 if test "$posix_memalign" = "yes" ; then
5927 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
5929 if test "$spice" = "yes" ; then
5930 echo "CONFIG_SPICE=y" >> $config_host_mak
5931 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
5932 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5935 if test "$smartcard" = "yes" ; then
5936 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5937 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5938 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5941 if test "$libusb" = "yes" ; then
5942 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5943 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5944 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5947 if test "$usb_redir" = "yes" ; then
5948 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5949 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5950 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5953 if test "$opengl" = "yes" ; then
5954 echo "CONFIG_OPENGL=y" >> $config_host_mak
5955 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5956 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5957 if test "$opengl_dmabuf" = "yes" ; then
5958 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5962 if test "$gbm" = "yes" ; then
5963 echo "CONFIG_GBM=y" >> $config_host_mak
5964 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5965 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5969 if test "$avx2_opt" = "yes" ; then
5970 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5973 if test "$avx512f_opt" = "yes" ; then
5974 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
5977 # XXX: suppress that
5978 if [ "$bsd" = "yes" ] ; then
5979 echo "CONFIG_BSD=y" >> $config_host_mak
5982 if test "$qom_cast_debug" = "yes" ; then
5983 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5986 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5987 if test "$coroutine_pool" = "yes" ; then
5988 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5990 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5993 if test "$debug_stack_usage" = "yes" ; then
5994 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5997 if test "$crypto_afalg" = "yes" ; then
5998 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6001 if test "$open_by_handle_at" = "yes" ; then
6002 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6005 if test "$linux_magic_h" = "yes" ; then
6006 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6009 if test "$valgrind_h" = "yes" ; then
6010 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6013 if test "$have_asan_iface_fiber" = "yes" ; then
6014 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6017 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6018 echo "CONFIG_TSAN=y" >> $config_host_mak
6021 if test "$has_environ" = "yes" ; then
6022 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6025 if test "$cpuid_h" = "yes" ; then
6026 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6029 if test "$int128" = "yes" ; then
6030 echo "CONFIG_INT128=y" >> $config_host_mak
6033 if test "$atomic128" = "yes" ; then
6034 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6037 if test "$cmpxchg128" = "yes" ; then
6038 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6041 if test "$atomic64" = "yes" ; then
6042 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6045 if test "$attralias" = "yes" ; then
6046 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6049 if test "$getauxval" = "yes" ; then
6050 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6053 if test "$libssh" = "yes" ; then
6054 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6055 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6056 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6059 if test "$live_block_migration" = "yes" ; then
6060 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6063 if test "$tpm" = "yes"; then
6064 echo 'CONFIG_TPM=y' >> $config_host_mak
6067 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6068 if have_backend
"nop"; then
6069 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6071 if have_backend
"simple"; then
6072 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6073 # Set the appropriate trace file.
6074 trace_file
="\"$trace_file-\" FMT_pid"
6076 if have_backend
"log"; then
6077 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6079 if have_backend
"ust"; then
6080 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6081 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6082 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6084 if have_backend
"dtrace"; then
6085 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6086 if test "$trace_backend_stap" = "yes" ; then
6087 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6090 if have_backend
"ftrace"; then
6091 if test "$linux" = "yes" ; then
6092 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6094 feature_not_found
"ftrace(trace backend)" "ftrace requires Linux"
6097 if have_backend
"syslog"; then
6098 if test "$posix_syslog" = "yes" ; then
6099 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6101 feature_not_found
"syslog(trace backend)" "syslog not available"
6104 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6106 if test "$rdma" = "yes" ; then
6107 echo "CONFIG_RDMA=y" >> $config_host_mak
6108 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6111 if test "$pvrdma" = "yes" ; then
6112 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6115 if test "$have_rtnetlink" = "yes" ; then
6116 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6119 if test "$libxml2" = "yes" ; then
6120 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6121 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6122 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6125 if test "$replication" = "yes" ; then
6126 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6129 if test "$have_af_vsock" = "yes" ; then
6130 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6133 if test "$have_sysmacros" = "yes" ; then
6134 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6137 if test "$have_static_assert" = "yes" ; then
6138 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6141 if test "$have_utmpx" = "yes" ; then
6142 echo "HAVE_UTMPX=y" >> $config_host_mak
6144 if test "$have_getrandom" = "yes" ; then
6145 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6147 if test "$ivshmem" = "yes" ; then
6148 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6150 if test "$debug_mutex" = "yes" ; then
6151 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6154 # Hold two types of flag:
6155 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6156 # a thread we have a handle to
6157 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6159 if test "$pthread_setname_np_w_tid" = "yes" ; then
6160 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6161 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6162 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6163 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6164 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6167 if test "$libpmem" = "yes" ; then
6168 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6169 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6170 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6173 if test "$libdaxctl" = "yes" ; then
6174 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6175 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6178 if test "$bochs" = "yes" ; then
6179 echo "CONFIG_BOCHS=y" >> $config_host_mak
6181 if test "$cloop" = "yes" ; then
6182 echo "CONFIG_CLOOP=y" >> $config_host_mak
6184 if test "$dmg" = "yes" ; then
6185 echo "CONFIG_DMG=y" >> $config_host_mak
6187 if test "$qcow1" = "yes" ; then
6188 echo "CONFIG_QCOW1=y" >> $config_host_mak
6190 if test "$vdi" = "yes" ; then
6191 echo "CONFIG_VDI=y" >> $config_host_mak
6193 if test "$vvfat" = "yes" ; then
6194 echo "CONFIG_VVFAT=y" >> $config_host_mak
6196 if test "$qed" = "yes" ; then
6197 echo "CONFIG_QED=y" >> $config_host_mak
6199 if test "$parallels" = "yes" ; then
6200 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6202 if test "$sheepdog" = "yes" ; then
6203 add_to deprecated_features
"sheepdog"
6204 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6206 if test "$have_mlockall" = "yes" ; then
6207 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6209 if test "$fuzzing" = "yes" ; then
6210 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6211 # needed CFLAGS have already been provided
6212 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6213 QEMU_CFLAGS
="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6214 FUZZ_EXE_LDFLAGS
="-fsanitize=fuzzer"
6216 FUZZ_EXE_LDFLAGS
="$LIB_FUZZING_ENGINE"
6220 if test "$plugins" = "yes" ; then
6221 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6222 # Copy the export object list to the build dir
6223 if test "$ld_dynamic_list" = "yes" ; then
6224 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6225 ld_symbols
=qemu-plugins-ld.symbols
6226 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6227 elif test "$ld_exported_symbols_list" = "yes" ; then
6228 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6229 ld64_symbols
=qemu-plugins-ld64.symbols
6230 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6231 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" |
sed 's/;//g' | \
6232 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6235 "If \$plugins=yes, either \$ld_dynamic_list or " \
6236 "\$ld_exported_symbols_list should have been set to 'yes'."
6240 if test -n "$gdb_bin" ; then
6241 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6244 if test "$secret_keyring" = "yes" ; then
6245 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6248 echo "ROMS=$roms" >> $config_host_mak
6249 echo "MAKE=$make" >> $config_host_mak
6250 echo "PYTHON=$python" >> $config_host_mak
6251 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6252 echo "MESON=$meson" >> $config_host_mak
6253 echo "NINJA=$ninja" >> $config_host_mak
6254 echo "CC=$cc" >> $config_host_mak
6255 if $iasl -h > /dev
/null
2>&1; then
6256 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6258 echo "CXX=$cxx" >> $config_host_mak
6259 echo "OBJCC=$objcc" >> $config_host_mak
6260 echo "AR=$ar" >> $config_host_mak
6261 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6262 echo "AS=$as" >> $config_host_mak
6263 echo "CCAS=$ccas" >> $config_host_mak
6264 echo "CPP=$cpp" >> $config_host_mak
6265 echo "OBJCOPY=$objcopy" >> $config_host_mak
6266 echo "LD=$ld" >> $config_host_mak
6267 echo "RANLIB=$ranlib" >> $config_host_mak
6268 echo "NM=$nm" >> $config_host_mak
6269 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6270 echo "WINDRES=$windres" >> $config_host_mak
6271 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6272 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6273 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6274 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6275 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6276 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6277 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6278 echo "EXESUF=$EXESUF" >> $config_host_mak
6279 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6280 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6281 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6282 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6283 if test "$gcov" = "yes" ; then
6284 echo "CONFIG_GCOV=y" >> $config_host_mak
6287 if test "$fuzzing" != "no"; then
6288 echo "CONFIG_FUZZ=y" >> $config_host_mak
6290 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6292 if test "$rng_none" = "yes"; then
6293 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6296 # use included Linux headers
6297 if test "$linux" = "yes" ; then
6298 mkdir
-p linux-headers
6316 # For most CPUs the kernel architecture name and QEMU CPU name match.
6320 # For non-KVM architectures we will not have asm headers
6321 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6322 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
6326 for target
in $target_list; do
6327 target_dir
="$target"
6328 target_name
=$
(echo $target | cut
-d '-' -f 1)
6329 mkdir
-p $target_dir
6331 *-user) symlink
"../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6332 *) symlink
"../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6336 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" |
sed 's/%M/@0@/' >> $config_host_mak
6337 if test "$default_targets" = "yes"; then
6338 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6341 if test "$numa" = "yes"; then
6342 echo "CONFIG_NUMA=y" >> $config_host_mak
6343 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6346 if test "$ccache_cpp2" = "yes"; then
6347 echo "export CCACHE_CPP2=y" >> $config_host_mak
6350 if test "$safe_stack" = "yes"; then
6351 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6354 # If we're using a separate build tree, set it up now.
6355 # DIRS are directories which we simply mkdir in the build tree;
6356 # LINKS are things to symlink back into the source tree
6357 # (these can be both files and directories).
6358 # Caution: do not add files or directories here using wildcards. This
6359 # will result in problems later if a new file matching the wildcard is
6360 # added to the source tree -- nothing will cause configure to be rerun
6361 # so the build tree will be missing the link back to the new file, and
6362 # tests might fail. Prefer to keep the relevant files in their own
6363 # directory and symlink the directory instead.
6364 # UNLINK is used to remove symlinks from older development versions
6365 # that might get into the way when doing "git update" without doing
6366 # a "make distclean" in between.
6367 DIRS
="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6368 DIRS
="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6369 DIRS
="$DIRS docs docs/interop fsdev scsi"
6370 DIRS
="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6371 DIRS
="$DIRS roms/seabios"
6372 DIRS
="$DIRS contrib/plugins/"
6374 LINKS
="$LINKS tests/tcg/lm32/Makefile"
6375 LINKS
="$LINKS tests/tcg/Makefile.target"
6376 LINKS
="$LINKS pc-bios/optionrom/Makefile"
6377 LINKS
="$LINKS pc-bios/s390-ccw/Makefile"
6378 LINKS
="$LINKS roms/seabios/Makefile"
6379 LINKS
="$LINKS pc-bios/qemu-icon.bmp"
6380 LINKS
="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6381 LINKS
="$LINKS tests/acceptance tests/data"
6382 LINKS
="$LINKS tests/qemu-iotests/check"
6383 LINKS
="$LINKS python"
6384 LINKS
="$LINKS contrib/plugins/Makefile "
6385 UNLINK
="pc-bios/keymaps"
6387 $source_path/pc-bios
/*.bin \
6388 $source_path/pc-bios
/*.elf \
6389 $source_path/pc-bios
/*.lid \
6390 $source_path/pc-bios
/*.rom \
6391 $source_path/pc-bios
/*.dtb \
6392 $source_path/pc-bios
/*.img \
6393 $source_path/pc-bios
/openbios-
* \
6394 $source_path/pc-bios
/u-boot.
* \
6395 $source_path/pc-bios
/edk2-
*.fd.bz2 \
6396 $source_path/pc-bios
/palcode-
*
6398 LINKS
="$LINKS pc-bios/$(basename $bios_file)"
6401 for f
in $LINKS ; do
6402 if [ -e "$source_path/$f" ]; then
6403 symlink
"$source_path/$f" "$f"
6406 for f
in $UNLINK ; do
6407 if [ -L "$f" ]; then
6412 (for i
in $cross_cc_vars; do
6415 export target_list source_path use_containers
6416 $source_path/tests
/tcg
/configure.sh
)
6418 # temporary config to build submodules
6419 for rom
in seabios
; do
6420 config_mak
=roms
/$rom/config.mak
6421 echo "# Automatically generated by configure - do not modify" > $config_mak
6422 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6423 echo "AS=$as" >> $config_mak
6424 echo "CCAS=$ccas" >> $config_mak
6425 echo "CC=$cc" >> $config_mak
6426 echo "BCC=bcc" >> $config_mak
6427 echo "CPP=$cpp" >> $config_mak
6428 echo "OBJCOPY=objcopy" >> $config_mak
6429 echo "IASL=$iasl" >> $config_mak
6430 echo "LD=$ld" >> $config_mak
6431 echo "RANLIB=$ranlib" >> $config_mak
6434 if test "$skip_meson" = no
; then
6435 cross
="config-meson.cross.new"
6437 echo "'$(echo $* | sed "s
/ /','/g
")'"
6440 echo "# Automatically generated by configure - do not modify" > $cross
6441 echo "[properties]" >> $cross
6442 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6443 echo "[built-in options]" >> $cross
6444 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6445 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6446 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6447 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6448 echo "[binaries]" >> $cross
6449 echo "c = [$(meson_quote $cc)]" >> $cross
6450 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6451 echo "ar = [$(meson_quote $ar)]" >> $cross
6452 echo "nm = [$(meson_quote $nm)]" >> $cross
6453 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6454 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6455 if has
$sdl2_config; then
6456 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6458 echo "strip = [$(meson_quote $strip)]" >> $cross
6459 echo "windres = [$(meson_quote $windres)]" >> $cross
6460 if test -n "$cross_prefix"; then
6461 cross_arg
="--cross-file config-meson.cross"
6462 echo "[host_machine]" >> $cross
6463 if test "$mingw32" = "yes" ; then
6464 echo "system = 'windows'" >> $cross
6466 if test "$linux" = "yes" ; then
6467 echo "system = 'linux'" >> $cross
6471 echo "cpu_family = 'x86'" >> $cross
6474 echo "cpu_family = 'ppc64'" >> $cross
6477 echo "cpu_family = '$ARCH'" >> $cross
6480 echo "cpu = '$cpu'" >> $cross
6481 if test "$bigendian" = "yes" ; then
6482 echo "endian = 'big'" >> $cross
6484 echo "endian = 'little'" >> $cross
6487 cross_arg
="--native-file config-meson.cross"
6489 mv $cross config-meson.cross
6491 rm -rf meson-private meson-info meson-logs
6493 if ! version_ge
"$($meson --version)" 0.56.0; then
6494 staticpic
=$
(if test "$pie" = yes; then echo true
; else echo false
; fi)
6496 NINJA
=$ninja $meson setup \
6497 --prefix "$prefix" \
6498 --libdir "$libdir" \
6499 --libexecdir "$libexecdir" \
6500 --bindir "$bindir" \
6501 --includedir "$includedir" \
6502 --datadir "$datadir" \
6503 --mandir "$mandir" \
6504 --sysconfdir "$sysconfdir" \
6505 --localedir "$localedir" \
6506 --localstatedir "$local_statedir" \
6507 -Ddocdir="$docdir" \
6508 -Dqemu_firmwarepath="$firmwarepath" \
6509 -Dqemu_suffix="$qemu_suffix" \
6510 -Doptimization=$
(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6511 -Ddebug=$
(if test "$debug_info" = yes; then echo true
; else echo false
; fi) \
6512 -Dwerror=$
(if test "$werror" = yes; then echo true
; else echo false
; fi) \
6513 -Dstrip=$
(if test "$strip_opt" = yes; then echo true
; else echo false
; fi) \
6514 -Db_pie=$
(if test "$pie" = yes; then echo true
; else echo false
; fi) \
6515 ${staticpic:+-Db_staticpic=$staticpic} \
6516 -Db_coverage=$
(if test "$gcov" = yes; then echo true
; else echo false
; fi) \
6517 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6518 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6519 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
6520 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6521 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6522 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6523 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6524 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
6525 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
6526 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6527 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6528 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
6529 -Dattr=$attr -Ddefault_devices=$default_devices \
6530 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6531 -Dvhost_user_blk_server=$vhost_user_blk_server \
6532 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \
6533 $
(if test "$default_features" = no
; then echo "-Dauto_features=disabled"; fi) \
6535 "$PWD" "$source_path"
6537 if test "$?" -ne 0 ; then
6538 error_exit
"meson setup failed"
6542 if test -n "${deprecated_features}"; then
6543 echo "Warning, deprecated features enabled."
6544 echo "Please see docs/system/deprecated.rst"
6545 echo " features: ${deprecated_features}"
6548 # Save the configure command line for later reuse.
6549 cat <<EOD >config.status
6551 # Generated by configure.
6552 # Run this file to recreate the current configuration.
6553 # Compiler output produced by configure, useful for debugging
6554 # configure, is in config.log if it exists.
6560 eval envval
=\$
$envname
6562 if test -n "$envval"
6564 echo "$envname='$envval'" >> config.status
6565 echo "export $envname" >> config.status
6567 echo "unset $envname" >> config.status
6571 # Preserve various env variables that influence what
6572 # features/build target configure will detect
6578 preserve_env INSTALL
6580 preserve_env LD_LIBRARY_PATH
6581 preserve_env LIBTOOL
6584 preserve_env OBJCOPY
6586 preserve_env PKG_CONFIG
6587 preserve_env PKG_CONFIG_LIBDIR
6588 preserve_env PKG_CONFIG_PATH
6590 preserve_env SDL2_CONFIG
6593 preserve_env WINDRES
6595 printf "exec" >>config.status
6596 for i
in "$0" "$@"; do
6597 test "$i" = --skip-meson ||
printf " '%s'" "$i" >>config.status
6599 echo ' "$@"' >>config.status
6600 chmod +x config.status