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 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
23 echo "ERROR: failed to create temporary directory"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
33 TMPTXT="${TMPDIR1}/${TMPB}.txt"
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
42 echo "#" >> config.log
47 while test -n "$2"; do
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
64 if test -n "$BASH_VERSION"; then eval '
67 lines: ${BASH_LINENO[*]}"
69 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
71 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
78 # Don't bother rerunning the compile if we were already using -Werror
84 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
86 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
93 do_compiler "$cc" "$@"
97 do_compiler "$cxx" "$@"
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
106 for arg in $QEMU_CFLAGS; do
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
132 # symbolically link $1 to $2. Portable version of "ln -sf".
135 mkdir -p "$(dirname "$2")"
139 # check whether a command is available to this shell (may be either an
140 # executable or a builtin)
142 type "$1" >/dev/null 2>&1
145 # search for an executable in PATH
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
158 if [ -z "$local_command" ]; then
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
171 IFS="${local_ifs:-$(printf ' \t\n')}"
176 echo "$trace_backends" | grep "$1" >/dev/null
180 eval test -z '"${1#'"$2"'}"'
183 supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
194 supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
210 supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
222 supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
233 supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
261 print_error "Invalid target name '$target'"
265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
269 supported_hvf_target "$1" && return 0
270 supported_whpx_target "$1" && return 0
271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
280 # make source path absolute
281 source_path=$(cd "$(dirname -- "$0")"; pwd)
283 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
285 error_exit "main directory cannot contain spaces nor colons"
291 interp_prefix="/usr/gnemul/qemu-%M"
295 block_drv_rw_whitelist=""
296 block_drv_ro_whitelist=""
307 if test -e "$source_path/.git"
310 git_submodules="ui/keycodemapdb"
311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
317 if ! test -f "$source_path/ui/keycodemapdb/README"
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
327 echo " https://www.qemu.org/download/#source"
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
337 # Don't accept a target_list environment variable.
339 unset target_list_exclude
341 # Default value for a variable defining feature "foo".
342 # * foo="no" feature will only be used if --enable-foo arg is given
343 # * foo="" feature will be searched for, and if found, will be used
344 # unless --disable-foo is given
345 # * foo="yes" this value will only be set by --enable-foo flag.
346 # feature will searched for,
347 # if not found, configure exits with error
349 # Always add --enable-foo and --disable-foo command line args.
350 # Distributions want to ensure that several features are compiled in, and it
351 # is impossible without a --enable-foo that exits if a feature is not found.
372 xen_pci_passthrough=""
406 LDFLAGS_SHARED="-shared"
409 mandir="\${prefix}/share/man"
410 datadir="\${prefix}/share"
411 firmwarepath="\${prefix}/share/qemu-firmware"
412 qemu_docdir="\${prefix}/share/doc/qemu"
413 bindir="\${prefix}/bin"
414 libdir="\${prefix}/lib"
415 libexecdir="\${prefix}/libexec"
416 includedir="\${prefix}/include"
417 sysconfdir="\${prefix}/etc"
418 local_statedir="\${prefix}/var"
454 guest_agent_with_vss="no"
455 guest_agent_ntddscsi="no"
464 debug_stack_usage="no"
468 glusterfs_xlator_opt="no"
469 glusterfs_discard="no"
470 glusterfs_fallocate="no"
471 glusterfs_zerofill="no"
472 glusterfs_ftruncate_has_stat="no"
473 glusterfs_iocb_has_stat="no"
476 tls_priority="NORMAL"
483 qemu_private_xts="yes"
489 live_block_migration="yes"
507 default_devices="yes"
516 # parse CC options first
518 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
520 --cross-prefix=*) cross_prefix="$optarg"
524 --cxx=*) CXX="$optarg"
526 --cpu=*) cpu="$optarg"
528 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
529 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
531 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
533 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
534 EXTRA_LDFLAGS="$optarg"
536 --enable-debug-info) debug_info="yes"
538 --disable-debug-info) debug_info="no"
540 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
542 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
543 eval "cross_cc_cflags_${cc_arch}=\$optarg"
544 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
546 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
547 cc_archs="$cc_archs $cc_arch"
548 eval "cross_cc_${cc_arch}=\$optarg"
549 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
554 # Using uname is really, really broken. Once we have the right set of checks
555 # we can eliminate its usage altogether.
557 # Preferred compiler:
559 # ${cross_prefix}gcc (if cross-prefix specified)
561 if test -z "${CC}${cross_prefix}"; then
564 cc="${CC-${cross_prefix}gcc}"
567 if test -z "${CXX}${cross_prefix}"; then
570 cxx="${CXX-${cross_prefix}g++}"
573 ar="${AR-${cross_prefix}ar}"
574 as="${AS-${cross_prefix}as}"
577 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
578 ld="${LD-${cross_prefix}ld}"
579 ranlib="${RANLIB-${cross_prefix}ranlib}"
580 nm="${NM-${cross_prefix}nm}"
581 strip="${STRIP-${cross_prefix}strip}"
582 windres="${WINDRES-${cross_prefix}windres}"
583 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
585 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
587 pkg_config=query_pkg_config
588 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
590 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
591 ARFLAGS="${ARFLAGS-rv}"
593 # default flags for all hosts
594 # We use -fwrapv to tell the compiler that we require a C dialect where
595 # left shift of signed integers is well defined and has the expected
596 # 2s-complement style results. (Both clang and gcc agree that it
597 # provides these semantics.)
598 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
599 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
600 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
601 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
602 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
603 QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
604 if test "$debug_info" = "yes"; then
608 # running configure in the source tree?
609 # we know that's the case if configure is there.
610 if test -f "./configure"; then
611 pwd_is_source_path="y"
613 pwd_is_source_path="n"
619 #error $1 not defined
621 int main(void) { return 0; }
629 int main(void) { return 0; }
636 int main(void) { return 0; }
640 write_c_fuzzer_skeleton() {
643 #include <sys/types.h>
644 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
645 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
649 if check_define __linux__ ; then
651 elif check_define _WIN32 ; then
653 elif check_define __OpenBSD__ ; then
655 elif check_define __sun__ ; then
657 elif check_define __HAIKU__ ; then
659 elif check_define __FreeBSD__ ; then
661 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
662 targetos='GNU/kFreeBSD'
663 elif check_define __DragonFly__ ; then
665 elif check_define __NetBSD__; then
667 elif check_define __APPLE__; then
670 # This is a fatal error, but don't report it yet, because we
671 # might be going to just print the --help text, or it might
672 # be the result of a missing compiler.
677 # Some host OSes need non-standard checks for which CPU to use.
678 # Note that these checks are broken for cross-compilation: if you're
679 # cross-compiling to one of these OSes then you'll need to specify
680 # the correct CPU with the --cpu option.
683 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
684 # run 64-bit userspace code.
685 # If the user didn't specify a CPU explicitly and the kernel says this is
686 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
687 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
692 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
693 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
698 if test ! -z "$cpu" ; then
699 # command line argument
701 elif check_define __i386__ ; then
703 elif check_define __x86_64__ ; then
704 if check_define __ILP32__ ; then
709 elif check_define __sparc__ ; then
710 if check_define __arch64__ ; then
715 elif check_define _ARCH_PPC ; then
716 if check_define _ARCH_PPC64 ; then
717 if check_define _LITTLE_ENDIAN ; then
725 elif check_define __mips__ ; then
727 elif check_define __s390__ ; then
728 if check_define __s390x__ ; then
733 elif check_define __riscv ; then
734 if check_define _LP64 ; then
739 elif check_define __arm__ ; then
741 elif check_define __aarch64__ ; then
748 # Normalise host CPU name and set ARCH.
749 # Note that this case should only have supported host CPUs, not guests.
751 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
758 i386|i486|i586|i686|i86pc|BePC)
783 # This will result in either an error or falling back to TCI later
787 if test -z "$ARCH"; then
793 # host *BSD for user mode
801 audio_possible_drivers="dsound sdl"
802 if check_include dsound.h; then
803 audio_drv_list="dsound"
811 audio_drv_list="oss try-sdl"
812 audio_possible_drivers="oss sdl pa"
817 audio_drv_list="oss try-sdl"
818 audio_possible_drivers="oss sdl pa"
819 # needed for kinfo_getvmmap(3) in libutil.h
821 # needed for kinfo_getproc
822 libs_qga="-lutil $libs_qga"
823 netmap="" # enable netmap autodetect
824 HOST_VARIANT_DIR="freebsd"
830 audio_drv_list="oss try-sdl"
831 audio_possible_drivers="oss sdl pa"
832 HOST_VARIANT_DIR="dragonfly"
838 audio_drv_list="oss try-sdl"
839 audio_possible_drivers="oss sdl"
841 HOST_VARIANT_DIR="netbsd"
847 audio_drv_list="try-sdl"
848 audio_possible_drivers="sdl"
849 HOST_VARIANT_DIR="openbsd"
857 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
858 if [ "$cpu" = "x86_64" ] ; then
859 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
860 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
863 audio_drv_list="coreaudio try-sdl"
864 audio_possible_drivers="coreaudio sdl"
865 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
866 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
867 # Disable attempts to use ObjectiveC features in os/object.h since they
868 # won't work when we're compiling with gcc as a C compiler.
869 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
870 HOST_VARIANT_DIR="darwin"
876 install="${INSTALL-ginstall}"
877 smbd="${SMBD-/usr/sfw/sbin/smbd}"
878 if test -f /usr/include/sys/soundcard.h ; then
879 audio_drv_list="oss try-sdl"
881 audio_possible_drivers="oss sdl"
882 # needed for CMSG_ macros in sys/socket.h
883 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
884 # needed for TIOCWIN* defines in termios.h
885 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
886 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
887 solarisnetlibs="-lsocket -lnsl -lresolv"
888 LIBS="$solarisnetlibs $LIBS"
889 libs_qga="$solarisnetlibs $libs_qga"
893 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
894 LIBS="-lposix_error_mapper -lnetwork $LIBS"
897 audio_drv_list="try-pa oss"
898 audio_possible_drivers="oss alsa sdl pa"
902 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
908 if [ "$bsd" = "yes" ] ; then
909 if [ "$darwin" != "yes" ] ; then
914 : ${make=${MAKE-make}}
915 : ${install=${INSTALL-install}}
916 # We prefer python 3.x. A bare 'python' is traditionally
917 # python 2.x, but some distros have it as python 3.x, so
920 for binary in "${PYTHON-python3}" python
924 python=$(command -v "$binary")
930 for binary in sphinx-build-3 sphinx-build
934 sphinx_build=$(command -v "$binary")
939 # Check for ancillary tools used in testing
941 for binary in genisoimage
945 genisoimage=$(command -v "$binary")
950 : ${smbd=${SMBD-/usr/sbin/smbd}}
952 # Default objcc to clang if available, otherwise use CC
959 if test "$mingw32" = "yes" ; then
962 # MinGW needs -mthreads for TLS and macro _MT.
963 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
964 LIBS="-lwinmm -lws2_32 $LIBS"
966 if compile_prog "" "-liberty" ; then
967 LIBS="-liberty $LIBS"
969 prefix="c:/Program Files/QEMU"
972 qemu_docdir="\${prefix}"
974 sysconfdir="\${prefix}"
977 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
983 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
985 --help|-h) show_help=yes
987 --version|-V) exec cat $source_path/VERSION
989 --prefix=*) prefix="$optarg"
991 --interp-prefix=*) interp_prefix="$optarg"
997 --host-cc=*) host_cc="$optarg"
1001 --iasl=*) iasl="$optarg"
1003 --objcc=*) objcc="$optarg"
1005 --make=*) make="$optarg"
1007 --install=*) install="$optarg"
1009 --python=*) python="$optarg"
1011 --sphinx-build=*) sphinx_build="$optarg"
1013 --gcov=*) gcov_tool="$optarg"
1015 --smbd=*) smbd="$optarg"
1023 --enable-debug-info)
1025 --disable-debug-info)
1037 --target-list=*) target_list="$optarg"
1038 if test "$target_list_exclude"; then
1039 error_exit "Can't mix --target-list with --target-list-exclude"
1042 --target-list-exclude=*) target_list_exclude="$optarg"
1043 if test "$target_list"; then
1044 error_exit "Can't mix --target-list-exclude with --target-list"
1047 --enable-trace-backends=*) trace_backends="$optarg"
1049 # XXX: backwards compatibility
1050 --enable-trace-backend=*) trace_backends="$optarg"
1052 --with-trace-file=*) trace_file="$optarg"
1054 --with-default-devices) default_devices="yes"
1056 --without-default-devices) default_devices="no"
1058 --enable-gprof) gprof="yes"
1060 --enable-gcov) gcov="yes"
1064 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
1065 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1067 --mandir=*) mandir="$optarg"
1069 --bindir=*) bindir="$optarg"
1071 --libdir=*) libdir="$optarg"
1073 --libexecdir=*) libexecdir="$optarg"
1075 --includedir=*) includedir="$optarg"
1077 --datadir=*) datadir="$optarg"
1079 --with-confsuffix=*) confsuffix="$optarg"
1081 --docdir=*) qemu_docdir="$optarg"
1083 --sysconfdir=*) sysconfdir="$optarg"
1085 --localstatedir=*) local_statedir="$optarg"
1087 --firmwarepath=*) firmwarepath="$optarg"
1089 --host=*|--build=*|\
1090 --disable-dependency-tracking|\
1091 --sbindir=*|--sharedstatedir=*|\
1092 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1093 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1094 # These switches are silently ignored, for compatibility with
1095 # autoconf-generated configure scripts. This allows QEMU's
1096 # configure to be used by RPM and similar macros that set
1097 # lots of directory switches by default.
1099 --disable-sdl) sdl="no"
1101 --enable-sdl) sdl="yes"
1103 --disable-sdl-image) sdl_image="no"
1105 --enable-sdl-image) sdl_image="yes"
1107 --disable-qom-cast-debug) qom_cast_debug="no"
1109 --enable-qom-cast-debug) qom_cast_debug="yes"
1111 --disable-virtfs) virtfs="no"
1113 --enable-virtfs) virtfs="yes"
1115 --disable-mpath) mpath="no"
1117 --enable-mpath) mpath="yes"
1119 --disable-vnc) vnc="no"
1121 --enable-vnc) vnc="yes"
1123 --oss-lib=*) oss_lib="$optarg"
1125 --audio-drv-list=*) audio_drv_list="$optarg"
1127 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1129 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1131 --enable-debug-tcg) debug_tcg="yes"
1133 --disable-debug-tcg) debug_tcg="no"
1136 # Enable debugging options that aren't excessively noisy
1143 --enable-sanitizers) sanitizers="yes"
1145 --disable-sanitizers) sanitizers="no"
1147 --enable-sparse) sparse="yes"
1149 --disable-sparse) sparse="no"
1151 --disable-strip) strip_opt="no"
1153 --disable-vnc-sasl) vnc_sasl="no"
1155 --enable-vnc-sasl) vnc_sasl="yes"
1157 --disable-vnc-jpeg) vnc_jpeg="no"
1159 --enable-vnc-jpeg) vnc_jpeg="yes"
1161 --disable-vnc-png) vnc_png="no"
1163 --enable-vnc-png) vnc_png="yes"
1165 --disable-slirp) slirp="no"
1167 --enable-slirp=git) slirp="git"
1169 --enable-slirp=system) slirp="system"
1171 --disable-vde) vde="no"
1173 --enable-vde) vde="yes"
1175 --disable-netmap) netmap="no"
1177 --enable-netmap) netmap="yes"
1179 --disable-xen) xen="no"
1181 --enable-xen) xen="yes"
1183 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1185 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1187 --disable-brlapi) brlapi="no"
1189 --enable-brlapi) brlapi="yes"
1191 --disable-kvm) kvm="no"
1193 --enable-kvm) kvm="yes"
1195 --disable-hax) hax="no"
1197 --enable-hax) hax="yes"
1199 --disable-hvf) hvf="no"
1201 --enable-hvf) hvf="yes"
1203 --disable-whpx) whpx="no"
1205 --enable-whpx) whpx="yes"
1207 --disable-tcg-interpreter) tcg_interpreter="no"
1209 --enable-tcg-interpreter) tcg_interpreter="yes"
1211 --disable-cap-ng) cap_ng="no"
1213 --enable-cap-ng) cap_ng="yes"
1215 --disable-tcg) tcg="no"
1217 --enable-tcg) tcg="yes"
1219 --disable-malloc-trim) malloc_trim="no"
1221 --enable-malloc-trim) malloc_trim="yes"
1223 --disable-spice) spice="no"
1225 --enable-spice) spice="yes"
1227 --disable-libiscsi) libiscsi="no"
1229 --enable-libiscsi) libiscsi="yes"
1231 --disable-libnfs) libnfs="no"
1233 --enable-libnfs) libnfs="yes"
1235 --enable-profiler) profiler="yes"
1237 --disable-cocoa) cocoa="no"
1241 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1243 --disable-system) softmmu="no"
1245 --enable-system) softmmu="yes"
1252 --disable-linux-user) linux_user="no"
1254 --enable-linux-user) linux_user="yes"
1256 --disable-bsd-user) bsd_user="no"
1258 --enable-bsd-user) bsd_user="yes"
1260 --enable-pie) pie="yes"
1262 --disable-pie) pie="no"
1264 --enable-werror) werror="yes"
1266 --disable-werror) werror="no"
1268 --enable-stack-protector) stack_protector="yes"
1270 --disable-stack-protector) stack_protector="no"
1272 --disable-curses) curses="no"
1274 --enable-curses) curses="yes"
1276 --disable-iconv) iconv="no"
1278 --enable-iconv) iconv="yes"
1280 --disable-curl) curl="no"
1282 --enable-curl) curl="yes"
1284 --disable-fdt) fdt="no"
1286 --enable-fdt) fdt="yes"
1288 --disable-linux-aio) linux_aio="no"
1290 --enable-linux-aio) linux_aio="yes"
1292 --disable-linux-io-uring) linux_io_uring="no"
1294 --enable-linux-io-uring) linux_io_uring="yes"
1296 --disable-attr) attr="no"
1298 --enable-attr) attr="yes"
1300 --disable-membarrier) membarrier="no"
1302 --enable-membarrier) membarrier="yes"
1304 --disable-blobs) blobs="no"
1306 --with-pkgversion=*) pkgversion="$optarg"
1308 --with-coroutine=*) coroutine="$optarg"
1310 --disable-coroutine-pool) coroutine_pool="no"
1312 --enable-coroutine-pool) coroutine_pool="yes"
1314 --enable-debug-stack-usage) debug_stack_usage="yes"
1316 --enable-crypto-afalg) crypto_afalg="yes"
1318 --disable-crypto-afalg) crypto_afalg="no"
1320 --disable-docs) docs="no"
1322 --enable-docs) docs="yes"
1324 --disable-vhost-net) vhost_net="no"
1326 --enable-vhost-net) vhost_net="yes"
1328 --disable-vhost-crypto) vhost_crypto="no"
1330 --enable-vhost-crypto) vhost_crypto="yes"
1332 --disable-vhost-scsi) vhost_scsi="no"
1334 --enable-vhost-scsi) vhost_scsi="yes"
1336 --disable-vhost-vsock) vhost_vsock="no"
1338 --enable-vhost-vsock) vhost_vsock="yes"
1340 --disable-vhost-user-fs) vhost_user_fs="no"
1342 --enable-vhost-user-fs) vhost_user_fs="yes"
1344 --disable-opengl) opengl="no"
1346 --enable-opengl) opengl="yes"
1348 --disable-rbd) rbd="no"
1350 --enable-rbd) rbd="yes"
1352 --disable-xfsctl) xfs="no"
1354 --enable-xfsctl) xfs="yes"
1356 --disable-smartcard) smartcard="no"
1358 --enable-smartcard) smartcard="yes"
1360 --disable-libusb) libusb="no"
1362 --enable-libusb) libusb="yes"
1364 --disable-usb-redir) usb_redir="no"
1366 --enable-usb-redir) usb_redir="yes"
1368 --disable-zlib-test) zlib="no"
1370 --disable-lzo) lzo="no"
1372 --enable-lzo) lzo="yes"
1374 --disable-snappy) snappy="no"
1376 --enable-snappy) snappy="yes"
1378 --disable-bzip2) bzip2="no"
1380 --enable-bzip2) bzip2="yes"
1382 --enable-lzfse) lzfse="yes"
1384 --disable-lzfse) lzfse="no"
1386 --disable-zstd) zstd="no"
1388 --enable-zstd) zstd="yes"
1390 --enable-guest-agent) guest_agent="yes"
1392 --disable-guest-agent) guest_agent="no"
1394 --enable-guest-agent-msi) guest_agent_msi="yes"
1396 --disable-guest-agent-msi) guest_agent_msi="no"
1398 --with-vss-sdk) vss_win32_sdk=""
1400 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1402 --without-vss-sdk) vss_win32_sdk="no"
1404 --with-win-sdk) win_sdk=""
1406 --with-win-sdk=*) win_sdk="$optarg"
1408 --without-win-sdk) win_sdk="no"
1410 --enable-tools) want_tools="yes"
1412 --disable-tools) want_tools="no"
1414 --enable-seccomp) seccomp="yes"
1416 --disable-seccomp) seccomp="no"
1418 --disable-glusterfs) glusterfs="no"
1420 --disable-avx2) avx2_opt="no"
1422 --enable-avx2) avx2_opt="yes"
1424 --enable-glusterfs) glusterfs="yes"
1426 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1427 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1429 --enable-vhdx|--disable-vhdx)
1430 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1432 --enable-uuid|--disable-uuid)
1433 echo "$0: $opt is obsolete, UUID support is always built" >&2
1435 --disable-gtk) gtk="no"
1437 --enable-gtk) gtk="yes"
1439 --tls-priority=*) tls_priority="$optarg"
1441 --disable-gnutls) gnutls="no"
1443 --enable-gnutls) gnutls="yes"
1445 --disable-nettle) nettle="no"
1447 --enable-nettle) nettle="yes"
1449 --disable-gcrypt) gcrypt="no"
1451 --enable-gcrypt) gcrypt="yes"
1453 --disable-auth-pam) auth_pam="no"
1455 --enable-auth-pam) auth_pam="yes"
1457 --enable-rdma) rdma="yes"
1459 --disable-rdma) rdma="no"
1461 --enable-pvrdma) pvrdma="yes"
1463 --disable-pvrdma) pvrdma="no"
1465 --disable-vte) vte="no"
1467 --enable-vte) vte="yes"
1469 --disable-virglrenderer) virglrenderer="no"
1471 --enable-virglrenderer) virglrenderer="yes"
1473 --disable-tpm) tpm="no"
1475 --enable-tpm) tpm="yes"
1477 --disable-libssh) libssh="no"
1479 --enable-libssh) libssh="yes"
1481 --disable-live-block-migration) live_block_migration="no"
1483 --enable-live-block-migration) live_block_migration="yes"
1485 --disable-numa) numa="no"
1487 --enable-numa) numa="yes"
1489 --disable-libxml2) libxml2="no"
1491 --enable-libxml2) libxml2="yes"
1493 --disable-tcmalloc) tcmalloc="no"
1495 --enable-tcmalloc) tcmalloc="yes"
1497 --disable-jemalloc) jemalloc="no"
1499 --enable-jemalloc) jemalloc="yes"
1501 --disable-replication) replication="no"
1503 --enable-replication) replication="yes"
1505 --disable-vxhs) vxhs="no"
1507 --enable-vxhs) vxhs="yes"
1509 --disable-bochs) bochs="no"
1511 --enable-bochs) bochs="yes"
1513 --disable-cloop) cloop="no"
1515 --enable-cloop) cloop="yes"
1517 --disable-dmg) dmg="no"
1519 --enable-dmg) dmg="yes"
1521 --disable-qcow1) qcow1="no"
1523 --enable-qcow1) qcow1="yes"
1525 --disable-vdi) vdi="no"
1527 --enable-vdi) vdi="yes"
1529 --disable-vvfat) vvfat="no"
1531 --enable-vvfat) vvfat="yes"
1533 --disable-qed) qed="no"
1535 --enable-qed) qed="yes"
1537 --disable-parallels) parallels="no"
1539 --enable-parallels) parallels="yes"
1541 --disable-sheepdog) sheepdog="no"
1543 --enable-sheepdog) sheepdog="yes"
1545 --disable-vhost-user) vhost_user="no"
1547 --enable-vhost-user) vhost_user="yes"
1549 --disable-vhost-kernel) vhost_kernel="no"
1551 --enable-vhost-kernel) vhost_kernel="yes"
1553 --disable-capstone) capstone="no"
1555 --enable-capstone) capstone="yes"
1557 --enable-capstone=git) capstone="git"
1559 --enable-capstone=system) capstone="system"
1561 --with-git=*) git="$optarg"
1563 --enable-git-update) git_update=yes
1565 --disable-git-update) git_update=no
1567 --enable-debug-mutex) debug_mutex=yes
1569 --disable-debug-mutex) debug_mutex=no
1571 --enable-libpmem) libpmem=yes
1573 --disable-libpmem) libpmem=no
1575 --enable-xkbcommon) xkbcommon=yes
1577 --disable-xkbcommon) xkbcommon=no
1579 --enable-plugins) plugins="yes"
1581 --disable-plugins) plugins="no"
1583 --enable-containers) use_containers="yes"
1585 --disable-containers) use_containers="no"
1587 --enable-fuzzing) fuzzing=yes
1589 --disable-fuzzing) fuzzing=no
1592 echo "ERROR: unknown option $opt"
1593 echo "Try '$0 --help' for more information"
1602 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1606 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1609 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1610 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1613 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1614 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1618 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1622 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1626 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1629 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1630 # If we truly care, we should simply detect this case at
1631 # runtime and generate the fallback to serial emulation.
1632 CPU_CFLAGS="-m64 -mcx16"
1633 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1637 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1639 # No special flags required for other host CPUs
1642 eval "cross_cc_${cpu}=\$host_cc"
1643 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1644 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1646 # For user-mode emulation the host arch has to be one we explicitly
1647 # support, even if we're using TCI.
1648 if [ "$ARCH" = "unknown" ]; then
1653 default_target_list=""
1657 if [ "$softmmu" = "yes" ]; then
1658 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1660 if [ "$linux_user" = "yes" ]; then
1661 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1663 if [ "$bsd_user" = "yes" ]; then
1664 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1667 if test -z "$target_list_exclude"; then
1668 for config in $mak_wilds; do
1669 default_target_list="${default_target_list} $(basename "$config" .mak)"
1672 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1673 for config in $mak_wilds; do
1674 target="$(basename "$config" .mak)"
1676 for excl in $exclude_list; do
1677 if test "$excl" = "$target"; then
1682 if test "$exclude" = "no"; then
1683 default_target_list="${default_target_list} $target"
1688 # Enumerate public trace backends for --help output
1689 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1691 if test x"$show_help" = x"yes" ; then
1694 Usage: configure [options]
1695 Options: [defaults in brackets after descriptions]
1698 --help print this message
1699 --prefix=PREFIX install in PREFIX [$prefix]
1700 --interp-prefix=PREFIX where to find shared libraries, etc.
1701 use %M for cpu name [$interp_prefix]
1702 --target-list=LIST set target list (default: build everything)
1703 $(echo Available targets: $default_target_list | \
1704 fold -s -w 53 | sed -e 's/^/ /')
1705 --target-list-exclude=LIST exclude a set of targets from the default target-list
1707 Advanced options (experts only):
1708 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1709 --cc=CC use C compiler CC [$cc]
1710 --iasl=IASL use ACPI compiler IASL [$iasl]
1711 --host-cc=CC use C compiler CC [$host_cc] for code run at
1713 --cxx=CXX use C++ compiler CXX [$cxx]
1714 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1715 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1716 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1717 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1718 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1719 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1720 --make=MAKE use specified make [$make]
1721 --install=INSTALL use specified install [$install]
1722 --python=PYTHON use specified python [$python]
1723 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1724 --smbd=SMBD use specified smbd [$smbd]
1725 --with-git=GIT use specified git [$git]
1726 --static enable static build [$static]
1727 --mandir=PATH install man pages in PATH
1728 --datadir=PATH install firmware in PATH$confsuffix
1729 --docdir=PATH install documentation in PATH$confsuffix
1730 --bindir=PATH install binaries in PATH
1731 --libdir=PATH install libraries in PATH
1732 --libexecdir=PATH install helper binaries in PATH
1733 --sysconfdir=PATH install config in PATH$confsuffix
1734 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1735 --firmwarepath=PATH search PATH for firmware files
1736 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1737 --with-pkgversion=VERS use specified string as sub-version of the package
1738 --enable-debug enable common debug build options
1739 --enable-sanitizers enable default sanitizers
1740 --disable-strip disable stripping binaries
1741 --disable-werror disable compilation abort on warning
1742 --disable-stack-protector disable compiler-provided stack protection
1743 --audio-drv-list=LIST set audio drivers list:
1744 Available drivers: $audio_possible_drivers
1745 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1746 --block-drv-rw-whitelist=L
1747 set block driver read-write whitelist
1748 (affects only QEMU, not qemu-img)
1749 --block-drv-ro-whitelist=L
1750 set block driver read-only whitelist
1751 (affects only QEMU, not qemu-img)
1752 --enable-trace-backends=B Set trace backend
1753 Available backends: $trace_backend_list
1754 --with-trace-file=NAME Full PATH,NAME of file to store traces
1756 --disable-slirp disable SLIRP userspace network connectivity
1757 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1758 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1759 --oss-lib path to OSS library
1760 --cpu=CPU Build for host CPU [$cpu]
1761 --with-coroutine=BACKEND coroutine backend. Supported options:
1762 ucontext, sigaltstack, windows
1763 --enable-gcov enable test coverage analysis with gcov
1764 --gcov=GCOV use specified gcov [$gcov_tool]
1765 --disable-blobs disable installing provided firmware blobs
1766 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1767 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1768 --tls-priority default TLS protocol/cipher priority string
1769 --enable-gprof QEMU profiling with gprof
1770 --enable-profiler profiler support
1771 --enable-debug-stack-usage
1772 track the maximum stack usage of stacks created by qemu_alloc_stack
1774 enable plugins via shared library loading
1775 --disable-containers don't use containers for cross-building
1777 Optional features, enabled with --enable-FEATURE and
1778 disabled with --disable-FEATURE, default is enabled if available:
1780 system all system emulation targets
1781 user supported user emulation targets
1782 linux-user all linux usermode emulation targets
1783 bsd-user all BSD usermode emulation targets
1784 docs build documentation
1785 guest-agent build the QEMU Guest Agent
1786 guest-agent-msi build guest agent Windows MSI installation package
1787 pie Position Independent Executables
1788 modules modules support (non-Windows)
1789 debug-tcg TCG debugging (default is disabled)
1790 debug-info debugging information
1791 sparse sparse checker
1793 gnutls GNUTLS cryptography support
1794 nettle nettle cryptography support
1795 gcrypt libgcrypt cryptography support
1796 auth-pam PAM access control
1798 sdl-image SDL Image support for icons
1800 vte vte support for the gtk UI
1802 iconv font glyph conversion support
1804 vnc-sasl SASL encryption for VNC server
1805 vnc-jpeg JPEG lossy compression for VNC server
1806 vnc-png PNG compression for VNC server
1807 cocoa Cocoa UI (Mac OS X only)
1809 mpath Multipath persistent reservation passthrough
1810 xen xen backend driver support
1811 xen-pci-passthrough PCI passthrough support for Xen
1812 brlapi BrlAPI (Braile)
1813 curl curl connectivity
1814 membarrier membarrier system call (for Linux 4.14+ or Windows)
1816 kvm KVM acceleration support
1817 hax HAX acceleration support
1818 hvf Hypervisor.framework acceleration support
1819 whpx Windows Hypervisor Platform acceleration support
1820 rdma Enable RDMA-based migration
1821 pvrdma Enable PVRDMA support
1822 vde support for vde network
1823 netmap support for netmap network
1824 linux-aio Linux AIO support
1825 linux-io-uring Linux io_uring support
1826 cap-ng libcap-ng support
1827 attr attr and xattr support
1828 vhost-net vhost-net kernel acceleration support
1829 vhost-vsock virtio sockets device support
1830 vhost-scsi vhost-scsi kernel target support
1831 vhost-crypto vhost-user-crypto backend support
1832 vhost-kernel vhost kernel backend support
1833 vhost-user vhost-user backend support
1835 rbd rados block device (rbd)
1836 libiscsi iscsi support
1838 smartcard smartcard support (libcacard)
1839 libusb libusb (for usb passthrough)
1840 live-block-migration Block migration in the main migration stream
1841 usb-redir usb network redirection support
1842 lzo support of lzo compression library
1843 snappy support of snappy compression library
1844 bzip2 support of bzip2 compression library
1845 (for reading bzip2-compressed dmg images)
1846 lzfse support of lzfse compression library
1847 (for reading lzfse-compressed dmg images)
1848 zstd support for zstd compression library
1849 (for migration compression)
1850 seccomp seccomp support
1851 coroutine-pool coroutine freelist (better performance)
1852 glusterfs GlusterFS backend
1854 libssh ssh block device support
1855 numa libnuma support
1856 libxml2 for Parallels image format
1857 tcmalloc tcmalloc support
1858 jemalloc jemalloc support
1859 avx2 AVX2 optimization support
1860 replication replication support
1861 opengl opengl support
1862 virglrenderer virgl rendering support
1863 xfsctl xfsctl support
1864 qom-cast-debug cast debugging support
1865 tools build qemu-io, qemu-nbd and qemu-img tools
1866 vxhs Veritas HyperScale vDisk backend support
1867 bochs bochs image format support
1868 cloop cloop image format support
1869 dmg dmg image format support
1870 qcow1 qcow v1 image format support
1871 vdi vdi image format support
1872 vvfat vvfat image format support
1873 qed qed image format support
1874 parallels parallels image format support
1875 sheepdog sheepdog block driver support
1876 crypto-afalg Linux AF_ALG crypto backend driver
1877 capstone capstone disassembler support
1878 debug-mutex mutex debugging support
1879 libpmem libpmem support
1880 xkbcommon xkbcommon support
1882 NOTE: The object files are built at the place where configure is launched
1887 # Remove old dependency files to make sure that they get properly regenerated
1888 rm -f */config-devices.mak.d
1890 # Remove syscall_nr.h to be sure they will be regenerated in the build
1891 # directory, not in the source directory
1892 for arch in alpha hppa m68k ; do
1893 # remove the file if it has been generated in the source directory
1894 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1895 # remove the dependency files
1896 find . -name "*.d" \
1897 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1901 if test -z "$python"
1903 error_exit "Python not found. Use --python=/path/to/python"
1906 # Note that if the Python conditional here evaluates True we will exit
1907 # with status 1 which is a shell 'false' value.
1908 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1909 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1910 "Use --python=/path/to/python to specify a supported Python."
1913 # Preserve python version since some functionality is dependent on it
1914 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)
1916 # Suppress writing compiled files
1919 # Check that the C compiler works. Doing this here before testing
1920 # the host CPU ensures that we had a valid CC to autodetect the
1921 # $cpu var (and we should bail right here if that's not the case).
1922 # It also allows the help message to be printed without a CC.
1924 if compile_object ; then
1925 : C compiler works ok
1927 error_exit "\"$cc\" either does not exist or does not work"
1929 if ! compile_prog ; then
1930 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1933 # Now we have handled --enable-tcg-interpreter and know we're not just
1934 # printing the help message, bail out if the host CPU isn't supported.
1935 if test "$ARCH" = "unknown"; then
1936 if test "$tcg_interpreter" = "yes" ; then
1937 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1939 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1943 # Consult white-list to determine whether to enable werror
1944 # by default. Only enable by default for git builds
1945 if test -z "$werror" ; then
1946 if test -e "$source_path/.git" && \
1947 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1954 if test "$bogus_os" = "yes"; then
1955 # Now that we know that we're not printing the help and that
1956 # the compiler works (so the results of the check_defines we used
1957 # to identify the OS are reliable), if we didn't recognize the
1958 # host OS we should stop now.
1959 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1962 # Check whether the compiler matches our minimum requirements:
1964 #if defined(__clang_major__) && defined(__clang_minor__)
1965 # ifdef __apple_build_version__
1966 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1967 # error You need at least XCode Clang v5.1 to compile QEMU
1970 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1971 # error You need at least Clang v3.4 to compile QEMU
1974 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1975 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1976 # error You need at least GCC v4.8 to compile QEMU
1979 # error You either need GCC or Clang to compiler QEMU
1981 int main (void) { return 0; }
1983 if ! compile_prog "" "" ; then
1984 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1987 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1988 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1989 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1990 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1991 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1992 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1993 # Note that we do not add -Werror to gcc_flags here, because that would
1994 # enable it for all configure tests. If a configure test failed due
1995 # to -Werror this would just silently disable some features,
1996 # so it's too error prone.
1998 cc_has_warning_flag() {
2001 # Use the positive sense of the flag when testing for -Wno-wombat
2002 # support (gcc will happily accept the -Wno- form of unknown
2004 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2005 compile_prog "-Werror $optflag" ""
2008 for flag in $gcc_flags; do
2009 if cc_has_warning_flag $flag ; then
2010 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2014 if test "$stack_protector" != "no"; then
2016 int main(int argc, char *argv[])
2018 char arr[64], *p = arr, *c = argv[0];
2025 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2027 for flag in $gcc_flags; do
2028 # We need to check both a compile and a link, since some compiler
2029 # setups fail only on a .c->.o compile and some only at link time
2030 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2031 compile_prog "-Werror $flag" ""; then
2032 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2033 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2038 if test "$stack_protector" = yes; then
2039 if test $sp_on = 0; then
2040 error_exit "Stack protector not supported"
2045 # Disable -Wmissing-braces on older compilers that warn even for
2046 # the "universal" C zero initializer {0}.
2052 if compile_object "-Werror" "" ; then
2055 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2058 # Our module code doesn't support Windows
2059 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2060 error_exit "Modules are not available for Windows"
2063 # Static linking is not possible with modules or PIE
2064 if test "$static" = "yes" ; then
2065 if test "$modules" = "yes" ; then
2066 error_exit "static and modules are mutually incompatible"
2068 if test "$pie" = "yes" ; then
2069 error_exit "static and pie are mutually incompatible"
2075 # Unconditional check for compiler __thread support
2077 static __thread int tls_var;
2078 int main(void) { return tls_var; }
2081 if ! compile_prog "-Werror" "" ; then
2082 error_exit "Your compiler does not support the __thread specifier for " \
2083 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2086 if test "$pie" = ""; then
2087 case "$cpu-$targetos" in
2088 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2096 if test "$pie" != "no" ; then
2100 # define THREAD __thread
2105 static THREAD int tls_var;
2107 int main(void) { return tls_var; }
2110 # check we support --no-pie first...
2111 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2112 CFLAGS_NOPIE="-fno-pie"
2113 LDFLAGS_NOPIE="-nopie"
2116 if compile_prog "-fPIE -DPIE" "-pie"; then
2117 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2118 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2120 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2121 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2124 if test "$pie" = "yes"; then
2125 error_exit "PIE not available due to missing toolchain support"
2127 echo "Disabling PIE due to missing toolchain support"
2133 ##########################################
2134 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2135 # use i686 as default anyway, but for those that don't, an explicit
2136 # specification is necessary
2138 if test "$cpu" = "i386"; then
2140 static int sfaa(int *ptr)
2142 return __sync_fetch_and_and(ptr, 0);
2148 val = __sync_val_compare_and_swap(&val, 0, 1);
2153 if ! compile_prog "" "" ; then
2154 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2158 #########################################
2159 # Solaris specific configure tool chain decisions
2161 if test "$solaris" = "yes" ; then
2162 if has $install; then
2165 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2166 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2167 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2169 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2170 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2171 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2172 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2177 if test -f /usr/ccs/bin/ar ; then
2178 error_exit "No path includes ar" \
2179 "Add /usr/ccs/bin to your path and rerun configure"
2181 error_exit "No path includes ar"
2185 if test -z "${target_list+xxx}" ; then
2186 for target in $default_target_list; do
2187 supported_target $target 2>/dev/null && \
2188 target_list="$target_list $target"
2190 target_list="${target_list# }"
2192 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2193 for target in $target_list; do
2194 # Check that we recognised the target name; this allows a more
2195 # friendly error message than if we let it fall through.
2196 case " $default_target_list " in
2200 error_exit "Unknown target name '$target'"
2203 supported_target $target || exit 1
2207 # see if system emulation was really requested
2208 case " $target_list " in
2209 *"-softmmu "*) softmmu=yes
2215 for target in $target_list; do
2217 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2222 # The EDK2 binaries are compressed with bzip2
2223 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2224 error_exit "The bzip2 program is required for building QEMU"
2227 feature_not_found() {
2231 error_exit "User requested feature $feature" \
2232 "configure was not able to find it." \
2237 # big/little endian test
2239 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2240 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2241 extern int foo(short *, short *);
2242 int main(int argc, char *argv[]) {
2243 return foo(big_endian, little_endian);
2247 if compile_object ; then
2248 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2250 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2253 echo big/little test failed
2256 echo big/little test failed
2259 ##########################################
2261 if test -z "$want_tools"; then
2262 if test "$softmmu" = "no"; then
2269 ##########################################
2270 # cocoa implies not SDL or GTK
2271 # (the cocoa UI code currently assumes it is always the active UI
2272 # and doesn't interact well with other UI frontend code)
2273 if test "$cocoa" = "yes"; then
2274 if test "$sdl" = "yes"; then
2275 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2277 if test "$gtk" = "yes"; then
2278 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2284 # Some versions of Mac OS X incorrectly define SIZE_MAX
2288 int main(int argc, char *argv[]) {
2289 return printf("%zu", SIZE_MAX);
2292 have_broken_size_max=no
2293 if ! compile_object -Werror ; then
2294 have_broken_size_max=yes
2297 ##########################################
2301 #include <sys/socket.h>
2302 #include <linux/ip.h>
2303 int main(void) { return sizeof(struct mmsghdr); }
2305 if compile_prog "" "" ; then
2311 #########################################
2312 # vhost interdependencies and host support
2315 test "$vhost_user" = "" && vhost_user=yes
2316 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2317 error_exit "vhost-user isn't available on win32"
2319 test "$vhost_kernel" = "" && vhost_kernel=$linux
2320 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2321 error_exit "vhost-kernel is only available on Linux"
2324 # vhost-kernel devices
2325 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2326 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2327 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2329 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2330 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2331 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2334 # vhost-user backends
2335 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2336 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2337 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2339 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2340 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2341 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2343 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2344 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2345 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2348 # OR the vhost-kernel and vhost-user values for simplicity
2349 if test "$vhost_net" = ""; then
2350 test "$vhost_net_user" = "yes" && vhost_net=yes
2351 test "$vhost_kernel" = "yes" && vhost_net=yes
2354 ##########################################
2355 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2357 if test "$mingw32" = "yes"; then
2358 # Some versions of MinGW / Mingw-w64 lack localtime_r
2359 # and gmtime_r entirely.
2361 # Some versions of Mingw-w64 define a macro for
2362 # localtime_r/gmtime_r.
2364 # Some versions of Mingw-w64 will define functions
2365 # for localtime_r/gmtime_r, but only if you have
2366 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2367 # though, unistd.h and pthread.h both define
2370 # So this #undef localtime_r and #include <unistd.h>
2371 # are not in fact redundant.
2376 int main(void) { localtime_r(NULL, NULL); return 0; }
2378 if compile_prog "" "" ; then
2385 ##########################################
2388 if ! has "$pkg_config_exe"; then
2389 error_exit "pkg-config binary '$pkg_config_exe' not found"
2392 ##########################################
2395 if test "$linux_user" = "yes"; then
2398 #include <linux/futex.h>
2400 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2406 if ! compile_object ; then
2407 feature_not_found "nptl" "Install glibc and linux kernel headers."
2411 ##########################################
2414 if test "$lzo" != "no" ; then
2416 #include <lzo/lzo1x.h>
2417 int main(void) { lzo_version(); return 0; }
2419 if compile_prog "" "-llzo2" ; then
2420 libs_softmmu="$libs_softmmu -llzo2"
2423 if test "$lzo" = "yes"; then
2424 feature_not_found "liblzo2" "Install liblzo2 devel"
2430 ##########################################
2433 if test "$snappy" != "no" ; then
2435 #include <snappy-c.h>
2436 int main(void) { snappy_max_compressed_length(4096); return 0; }
2438 if compile_prog "" "-lsnappy" ; then
2439 libs_softmmu="$libs_softmmu -lsnappy"
2442 if test "$snappy" = "yes"; then
2443 feature_not_found "libsnappy" "Install libsnappy devel"
2449 ##########################################
2452 if test "$bzip2" != "no" ; then
2455 int main(void) { BZ2_bzlibVersion(); return 0; }
2457 if compile_prog "" "-lbz2" ; then
2460 if test "$bzip2" = "yes"; then
2461 feature_not_found "libbzip2" "Install libbzip2 devel"
2467 ##########################################
2470 if test "$lzfse" != "no" ; then
2473 int main(void) { lzfse_decode_scratch_size(); return 0; }
2475 if compile_prog "" "-llzfse" ; then
2478 if test "$lzfse" = "yes"; then
2479 feature_not_found "lzfse" "Install lzfse devel"
2485 ##########################################
2488 if test "$zstd" != "no" ; then
2489 if $pkg_config --exist libzstd ; then
2490 zstd_cflags="$($pkg_config --cflags libzstd)"
2491 zstd_libs="$($pkg_config --libs libzstd)"
2492 LIBS="$zstd_libs $LIBS"
2493 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2496 if test "$zstd" = "yes" ; then
2497 feature_not_found "libzstd" "Install libzstd devel"
2503 ##########################################
2506 if test "$seccomp" != "no" ; then
2507 libseccomp_minver="2.3.0"
2508 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2509 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2510 seccomp_libs="$($pkg_config --libs libseccomp)"
2513 if test "$seccomp" = "yes" ; then
2514 feature_not_found "libseccomp" \
2515 "Install libseccomp devel >= $libseccomp_minver"
2520 ##########################################
2523 if test "$xen" != "no" ; then
2524 # Check whether Xen library path is specified via --extra-ldflags to avoid
2525 # overriding this setting with pkg-config output. If not, try pkg-config
2526 # to obtain all needed flags.
2528 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2529 $pkg_config --exists xencontrol ; then
2530 xen_ctrl_version="$(printf '%d%02d%02d' \
2531 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2533 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2534 xen_pc="$xen_pc xenevtchn xendevicemodel"
2535 if $pkg_config --exists xentoolcore; then
2536 xen_pc="$xen_pc xentoolcore"
2538 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2539 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2542 xen_libs="-lxenstore -lxenctrl -lxenguest"
2543 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2545 # First we test whether Xen headers and libraries are available.
2546 # If no, we are done and there is no Xen support.
2547 # If yes, more tests are run to detect the Xen version.
2551 #include <xenctrl.h>
2556 if ! compile_prog "" "$xen_libs" ; then
2558 if test "$xen" = "yes" ; then
2559 feature_not_found "xen" "Install xen devel"
2565 cat > $TMPC <<EOF &&
2566 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2567 #define __XEN_TOOLS__
2568 #include <xendevicemodel.h>
2569 #include <xenforeignmemory.h>
2571 xendevicemodel_handle *xd;
2572 xenforeignmemory_handle *xfmem;
2574 xd = xendevicemodel_open(0, 0);
2575 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2577 xfmem = xenforeignmemory_open(0, 0);
2578 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2583 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2585 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2586 xen_ctrl_version=41100
2589 cat > $TMPC <<EOF &&
2590 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591 #include <xenforeignmemory.h>
2592 #include <xentoolcore.h>
2594 xenforeignmemory_handle *xfmem;
2596 xfmem = xenforeignmemory_open(0, 0);
2597 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2598 xentoolcore_restrict_all(0);
2603 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2605 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2606 xen_ctrl_version=41000
2609 cat > $TMPC <<EOF &&
2610 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2611 #define __XEN_TOOLS__
2612 #include <xendevicemodel.h>
2614 xendevicemodel_handle *xd;
2616 xd = xendevicemodel_open(0, 0);
2617 xendevicemodel_close(xd);
2622 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2624 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2625 xen_ctrl_version=40900
2628 cat > $TMPC <<EOF &&
2630 * If we have stable libs the we don't want the libxc compat
2631 * layers, regardless of what CFLAGS we may have been given.
2633 * Also, check if xengnttab_grant_copy_segment_t is defined and
2634 * grant copy operation is implemented.
2636 #undef XC_WANT_COMPAT_EVTCHN_API
2637 #undef XC_WANT_COMPAT_GNTTAB_API
2638 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2639 #include <xenctrl.h>
2640 #include <xenstore.h>
2641 #include <xenevtchn.h>
2642 #include <xengnttab.h>
2643 #include <xenforeignmemory.h>
2645 #include <xen/hvm/hvm_info_table.h>
2646 #if !defined(HVM_MAX_VCPUS)
2647 # error HVM_MAX_VCPUS not defined
2650 xc_interface *xc = NULL;
2651 xenforeignmemory_handle *xfmem;
2652 xenevtchn_handle *xe;
2653 xengnttab_handle *xg;
2654 xengnttab_grant_copy_segment_t* seg = NULL;
2658 xc = xc_interface_open(0, 0, 0);
2659 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2660 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2661 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2662 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2664 xfmem = xenforeignmemory_open(0, 0);
2665 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2667 xe = xenevtchn_open(0, 0);
2670 xg = xengnttab_open(0, 0);
2671 xengnttab_grant_copy(xg, 0, seg);
2676 compile_prog "" "$xen_libs $xen_stable_libs"
2678 xen_ctrl_version=40800
2681 cat > $TMPC <<EOF &&
2683 * If we have stable libs the we don't want the libxc compat
2684 * layers, regardless of what CFLAGS we may have been given.
2686 #undef XC_WANT_COMPAT_EVTCHN_API
2687 #undef XC_WANT_COMPAT_GNTTAB_API
2688 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2689 #include <xenctrl.h>
2690 #include <xenstore.h>
2691 #include <xenevtchn.h>
2692 #include <xengnttab.h>
2693 #include <xenforeignmemory.h>
2695 #include <xen/hvm/hvm_info_table.h>
2696 #if !defined(HVM_MAX_VCPUS)
2697 # error HVM_MAX_VCPUS not defined
2700 xc_interface *xc = NULL;
2701 xenforeignmemory_handle *xfmem;
2702 xenevtchn_handle *xe;
2703 xengnttab_handle *xg;
2707 xc = xc_interface_open(0, 0, 0);
2708 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2709 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2710 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2711 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2713 xfmem = xenforeignmemory_open(0, 0);
2714 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2716 xe = xenevtchn_open(0, 0);
2719 xg = xengnttab_open(0, 0);
2720 xengnttab_map_grant_ref(xg, 0, 0, 0);
2725 compile_prog "" "$xen_libs $xen_stable_libs"
2727 xen_ctrl_version=40701
2732 cat > $TMPC <<EOF &&
2733 #include <xenctrl.h>
2734 #include <xenstore.h>
2736 #include <xen/hvm/hvm_info_table.h>
2737 #if !defined(HVM_MAX_VCPUS)
2738 # error HVM_MAX_VCPUS not defined
2743 xc = xc_interface_open(0, 0, 0);
2744 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2745 xc_gnttab_open(NULL, 0);
2746 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2747 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2748 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2749 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2753 compile_prog "" "$xen_libs"
2755 xen_ctrl_version=40600
2760 cat > $TMPC <<EOF &&
2761 #include <xenctrl.h>
2762 #include <xenstore.h>
2764 #include <xen/hvm/hvm_info_table.h>
2765 #if !defined(HVM_MAX_VCPUS)
2766 # error HVM_MAX_VCPUS not defined
2771 xc = xc_interface_open(0, 0, 0);
2772 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2773 xc_gnttab_open(NULL, 0);
2774 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2775 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2776 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2780 compile_prog "" "$xen_libs"
2782 xen_ctrl_version=40500
2786 cat > $TMPC <<EOF &&
2787 #include <xenctrl.h>
2788 #include <xenstore.h>
2790 #include <xen/hvm/hvm_info_table.h>
2791 #if !defined(HVM_MAX_VCPUS)
2792 # error HVM_MAX_VCPUS not defined
2797 xc = xc_interface_open(0, 0, 0);
2798 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2799 xc_gnttab_open(NULL, 0);
2800 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2801 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2805 compile_prog "" "$xen_libs"
2807 xen_ctrl_version=40200
2811 if test "$xen" = "yes" ; then
2812 feature_not_found "xen (unsupported version)" \
2813 "Install a supported xen (xen 4.2 or newer)"
2818 if test "$xen" = yes; then
2819 if test $xen_ctrl_version -ge 40701 ; then
2820 libs_softmmu="$xen_stable_libs $libs_softmmu"
2822 libs_softmmu="$xen_libs $libs_softmmu"
2827 if test "$xen_pci_passthrough" != "no"; then
2828 if test "$xen" = "yes" && test "$linux" = "yes"; then
2829 xen_pci_passthrough=yes
2831 if test "$xen_pci_passthrough" = "yes"; then
2832 error_exit "User requested feature Xen PCI Passthrough" \
2833 " but this feature requires /sys from Linux"
2835 xen_pci_passthrough=no
2839 ##########################################
2840 # Windows Hypervisor Platform accelerator (WHPX) check
2841 if test "$whpx" != "no" ; then
2842 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2845 if test "$whpx" = "yes"; then
2846 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2852 ##########################################
2854 if test "$sparse" != "no" ; then
2858 if test "$sparse" = "yes" ; then
2859 feature_not_found "sparse" "Install sparse binary"
2865 ##########################################
2867 if $pkg_config --exists "x11"; then
2869 x11_cflags=$($pkg_config --cflags x11)
2870 x11_libs=$($pkg_config --libs x11)
2873 ##########################################
2876 if test "$gtk" != "no"; then
2877 gtkpackage="gtk+-3.0"
2878 gtkx11package="gtk+-x11-3.0"
2880 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2881 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2882 gtk_libs=$($pkg_config --libs $gtkpackage)
2883 gtk_version=$($pkg_config --modversion $gtkpackage)
2884 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2886 gtk_cflags="$gtk_cflags $x11_cflags"
2887 gtk_libs="$gtk_libs $x11_libs"
2890 elif test "$gtk" = "yes"; then
2891 feature_not_found "gtk" "Install gtk3-devel"
2898 ##########################################
2901 if test "$gnutls" != "no"; then
2903 if $pkg_config --exists "gnutls >= 3.1.18"; then
2904 gnutls_cflags=$($pkg_config --cflags gnutls)
2905 gnutls_libs=$($pkg_config --libs gnutls)
2906 # Packaging for the static libraries is not always correct.
2907 # At least ubuntu 18.04 ships only shared libraries.
2909 if compile_prog "" "$gnutls_libs" ; then
2910 LIBS="$gnutls_libs $LIBS"
2911 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2915 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2916 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2923 # If user didn't give a --disable/enable-gcrypt flag,
2924 # then mark as disabled if user requested nettle
2926 if test -z "$gcrypt"
2928 if test "$nettle" = "yes"
2934 # If user didn't give a --disable/enable-nettle flag,
2935 # then mark as disabled if user requested gcrypt
2937 if test -z "$nettle"
2939 if test "$gcrypt" = "yes"
2946 if ! has "libgcrypt-config"
2951 if test -n "$cross_prefix"
2953 host=$(libgcrypt-config --host)
2954 if test "$host-" != $cross_prefix
2960 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2961 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2963 if test $maj != 1 || test $min -lt 5
2972 if test "$nettle" != "no"; then
2974 if $pkg_config --exists "nettle >= 2.7.1"; then
2975 nettle_cflags=$($pkg_config --cflags nettle)
2976 nettle_libs=$($pkg_config --libs nettle)
2977 nettle_version=$($pkg_config --modversion nettle)
2978 # Link test to make sure the given libraries work (e.g for static).
2980 if compile_prog "" "$nettle_libs" ; then
2981 LIBS="$nettle_libs $LIBS"
2982 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2983 if test -z "$gcrypt"; then
2989 if test "$pass" = "yes"
2992 #include <nettle/xts.h>
2997 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3002 if test "$pass" = "no" && test "$nettle" = "yes"; then
3003 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3009 if test "$gcrypt" != "no"; then
3011 if has_libgcrypt; then
3012 gcrypt_cflags=$(libgcrypt-config --cflags)
3013 gcrypt_libs=$(libgcrypt-config --libs)
3014 # Debian has removed -lgpg-error from libgcrypt-config
3015 # as it "spreads unnecessary dependencies" which in
3016 # turn breaks static builds...
3017 if test "$static" = "yes"
3019 gcrypt_libs="$gcrypt_libs -lgpg-error"
3022 # Link test to make sure the given libraries work (e.g for static).
3024 if compile_prog "" "$gcrypt_libs" ; then
3025 LIBS="$gcrypt_libs $LIBS"
3026 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3030 if test "$pass" = "yes"; then
3035 gcry_mac_hd_t handle;
3036 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3037 GCRY_MAC_FLAG_SECURE, NULL);
3041 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3047 gcry_cipher_hd_t handle;
3048 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3052 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3056 elif test "$gcrypt" = "yes"; then
3057 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3064 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3066 error_exit "Only one of gcrypt & nettle can be enabled"
3069 ##########################################
3070 # libtasn1 - only for the TLS creds/session test suite
3075 if $pkg_config --exists "libtasn1"; then
3076 tasn1_cflags=$($pkg_config --cflags libtasn1)
3077 tasn1_libs=$($pkg_config --libs libtasn1)
3083 ##########################################
3086 if test "$auth_pam" != "no"; then
3088 #include <security/pam_appl.h>
3091 const char *service_name = "qemu";
3092 const char *user = "frank";
3093 const struct pam_conv pam_conv = { 0 };
3094 pam_handle_t *pamh = NULL;
3095 pam_start(service_name, user, &pam_conv, &pamh);
3099 if compile_prog "" "-lpam" ; then
3102 if test "$auth_pam" = "yes"; then
3103 feature_not_found "PAM" "Install PAM development package"
3110 ##########################################
3111 # getifaddrs (for tests/test-io-channel-socket )
3114 if ! check_include "ifaddrs.h" ; then
3118 ##########################################
3121 if test "$vte" != "no"; then
3122 vteminversion="0.32.0"
3123 if $pkg_config --exists "vte-2.91"; then
3124 vtepackage="vte-2.91"
3126 vtepackage="vte-2.90"
3128 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3129 vte_cflags=$($pkg_config --cflags $vtepackage)
3130 vte_libs=$($pkg_config --libs $vtepackage)
3131 vteversion=$($pkg_config --modversion $vtepackage)
3133 elif test "$vte" = "yes"; then
3134 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3140 ##########################################
3143 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3144 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3148 if $pkg_config sdl2 --exists; then
3149 sdlconfig="$pkg_config sdl2"
3150 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3151 elif has "$sdl2_config"; then
3152 sdlconfig="$sdl2_config"
3153 sdlversion=$($sdlconfig --version)
3155 if test "$sdl" = "yes" ; then
3156 feature_not_found "sdl" "Install SDL2-devel"
3159 # no need to do the rest
3162 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3163 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3168 #undef main /* We don't want SDL to override our main() */
3169 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3171 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3172 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3173 if test "$static" = "yes" ; then
3174 if $pkg_config sdl2 --exists; then
3175 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3177 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3180 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3182 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3185 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3186 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3187 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3188 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3189 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3191 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3197 else # sdl not found
3198 if test "$sdl" = "yes" ; then
3199 feature_not_found "sdl" "Install SDL2 devel"
3202 fi # sdl compile test
3207 if test "$sdl_image" != "no" ; then
3208 if $pkg_config SDL2_image --exists; then
3209 if test "$static" = "yes"; then
3210 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3212 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3214 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3217 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3218 sdl_libs="$sdl_libs $sdl_image_libs"
3220 if test "$sdl_image" = "yes" ; then
3221 feature_not_found "sdl_image" "Install SDL Image devel"
3229 if test "$sdl" != "no" ; then
3233 if test "$sdl" = "yes" ; then
3236 if test "$sdl_image" = "yes"; then
3237 echo "warning: SDL Image requested, but SDL is not available, disabling"
3242 if test "$sdl" = "yes" ; then
3245 #if defined(SDL_VIDEO_DRIVER_X11)
3246 #include <X11/XKBlib.h>
3248 #error No x11 support
3250 int main(void) { return 0; }
3252 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3254 sdl_cflags="$sdl_cflags $x11_cflags"
3255 sdl_libs="$sdl_libs $x11_libs"
3259 ##########################################
3260 # RDMA needs OpenFabrics libraries
3261 if test "$rdma" != "no" ; then
3263 #include <rdma/rdma_cma.h>
3264 int main(void) { return 0; }
3266 rdma_libs="-lrdmacm -libverbs -libumad"
3267 if compile_prog "" "$rdma_libs" ; then
3269 libs_softmmu="$libs_softmmu $rdma_libs"
3271 if test "$rdma" = "yes" ; then
3273 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3275 " (1) Fast: Install infiniband packages (devel) from your distro." \
3276 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3277 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3283 ##########################################
3286 cat > $TMPC <<EOF &&
3287 #include <sys/mman.h>
3294 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3300 if test "$rdma" = "yes" ; then
3303 if compile_prog "" ""; then
3310 if ! compile_prog "" ""; then
3311 error_exit "PVRDMA is not supported since mremap is not implemented"
3320 if test "$pvrdma" = "yes" ; then
3321 error_exit "PVRDMA requires rdma suppport"
3326 # Let's see if enhanced reg_mr is supported
3327 if test "$pvrdma" = "yes" ; then
3329 cat > $TMPC <<EOF &&
3330 #include <infiniband/verbs.h>
3336 struct ibv_pd *pd = NULL;
3342 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3349 if ! compile_prog "" "-libverbs"; then
3350 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3354 ##########################################
3355 # VNC SASL detection
3356 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3358 #include <sasl/sasl.h>
3360 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3362 # Assuming Cyrus-SASL installed in /usr prefix
3364 vnc_sasl_libs="-lsasl2"
3365 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3367 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3368 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3370 if test "$vnc_sasl" = "yes" ; then
3371 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3377 ##########################################
3378 # VNC JPEG detection
3379 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3382 #include <jpeglib.h>
3383 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3386 vnc_jpeg_libs="-ljpeg"
3387 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3389 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3390 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3392 if test "$vnc_jpeg" = "yes" ; then
3393 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3399 ##########################################
3401 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3403 //#include <stdio.h>
3407 png_structp png_ptr;
3408 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3409 return png_ptr != 0;
3412 if $pkg_config libpng --exists; then
3413 vnc_png_cflags=$($pkg_config libpng --cflags)
3414 vnc_png_libs=$($pkg_config libpng --libs)
3417 vnc_png_libs="-lpng"
3419 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3421 libs_softmmu="$vnc_png_libs $libs_softmmu"
3422 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3424 if test "$vnc_png" = "yes" ; then
3425 feature_not_found "vnc-png" "Install libpng devel"
3431 ##########################################
3433 if test "$xkbcommon" != "no" ; then
3434 if $pkg_config xkbcommon --exists; then
3435 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3436 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3439 if test "$xkbcommon" = "yes" ; then
3440 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3447 ##########################################
3448 # xfsctl() probe, used for file-posix.c
3449 if test "$xfs" != "no" ; then
3451 #include <stddef.h> /* NULL */
3452 #include <xfs/xfs.h>
3455 xfsctl(NULL, 0, 0, NULL);
3459 if compile_prog "" "" ; then
3462 if test "$xfs" = "yes" ; then
3463 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3469 ##########################################
3470 # vde libraries probe
3471 if test "$vde" != "no" ; then
3472 vde_libs="-lvdeplug"
3474 #include <libvdeplug.h>
3477 struct vde_open_args a = {0, 0, 0};
3483 if compile_prog "" "$vde_libs" ; then
3486 if test "$vde" = "yes" ; then
3487 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3493 ##########################################
3494 # netmap support probe
3495 # Apart from looking for netmap headers, we make sure that the host API version
3496 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3497 # a minor/major version number. Minor new features will be marked with values up
3498 # to 15, and if something happens that requires a change to the backend we will
3499 # move above 15, submit the backend fixes and modify this two bounds.
3500 if test "$netmap" != "no" ; then
3502 #include <inttypes.h>
3504 #include <net/netmap.h>
3505 #include <net/netmap_user.h>
3506 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3509 int main(void) { return 0; }
3511 if compile_prog "" "" ; then
3514 if test "$netmap" = "yes" ; then
3515 feature_not_found "netmap"
3521 ##########################################
3522 # libcap-ng library probe
3523 if test "$cap_ng" != "no" ; then
3529 capng_capability_to_name(CAPNG_EFFECTIVE);
3533 if compile_prog "" "$cap_libs" ; then
3535 libs_tools="$cap_libs $libs_tools"
3537 if test "$cap_ng" = "yes" ; then
3538 feature_not_found "cap_ng" "Install libcap-ng devel"
3544 ##########################################
3545 # Sound support libraries probe
3547 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3548 for drv in $audio_drv_list; do
3551 if $pkg_config alsa --exists; then
3552 alsa_libs=$($pkg_config alsa --libs)
3553 if test "$drv" = "try-alsa"; then
3554 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3557 if test "$drv" = "try-alsa"; then
3558 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3560 error_exit "$drv check failed" \
3561 "Make sure to have the $drv libs and headers installed."
3567 if $pkg_config libpulse --exists; then
3568 pulse_libs=$($pkg_config libpulse --libs)
3569 if test "$drv" = "try-pa"; then
3570 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3573 if test "$drv" = "try-pa"; then
3574 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3576 error_exit "$drv check failed" \
3577 "Make sure to have the $drv libs and headers installed."
3583 if test "$sdl" = "no"; then
3584 error_exit "sdl not found or disabled, can not use sdl audio driver"
3589 if test "$sdl" = "no"; then
3590 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3592 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3597 coreaudio_libs="-framework CoreAudio"
3601 dsound_libs="-lole32 -ldxguid"
3610 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3611 error_exit "Unknown driver '$drv' selected" \
3612 "Possible drivers are: $audio_possible_drivers"
3618 ##########################################
3621 if test "$brlapi" != "no" ; then
3622 brlapi_libs="-lbrlapi"
3626 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3628 if compile_prog "" "$brlapi_libs" ; then
3631 if test "$brlapi" = "yes" ; then
3632 feature_not_found "brlapi" "Install brlapi devel"
3638 ##########################################
3640 if test "$iconv" != "no" ; then
3644 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3645 return conv != (iconv_t) -1;
3648 iconv_prefix_list="/usr/local:/usr"
3649 iconv_lib_list=":-liconv"
3651 for iconv_prefix in $iconv_prefix_list; do
3653 iconv_cflags="-I$iconv_prefix/include"
3654 iconv_ldflags="-L$iconv_prefix/lib"
3655 for iconv_link in $iconv_lib_list; do
3657 iconv_lib="$iconv_ldflags $iconv_link"
3658 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3659 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3664 if test "$iconv_found" = yes ; then
3668 if test "$iconv_found" = "yes" ; then
3671 if test "$iconv" = "yes" ; then
3672 feature_not_found "iconv" "Install iconv devel"
3678 ##########################################
3680 if test "$iconv" = "no" ; then
3681 # curses will need iconv
3684 if test "$curses" != "no" ; then
3685 if test "$mingw32" = "yes" ; then
3686 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3687 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3689 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3690 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3697 #include <langinfo.h>
3699 const char *codeset;
3701 setlocale(LC_ALL, "");
3703 addwstr(L"wide chars\n");
3705 add_wch(WACS_DEGREE);
3706 codeset = nl_langinfo(CODESET);
3707 return codeset != 0;
3711 for curses_inc in $curses_inc_list; do
3712 # Make sure we get the wide character prototypes
3713 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3715 for curses_lib in $curses_lib_list; do
3717 if compile_prog "$curses_inc" "$curses_lib" ; then
3722 if test "$curses_found" = yes ; then
3727 if test "$curses_found" = "yes" ; then
3730 if test "$curses" = "yes" ; then
3731 feature_not_found "curses" "Install ncurses devel"
3737 ##########################################
3739 if test "$curl" != "no" ; then
3740 if $pkg_config libcurl --exists; then
3741 curlconfig="$pkg_config libcurl"
3743 curlconfig=curl-config
3746 #include <curl/curl.h>
3747 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3749 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3750 curl_libs=$($curlconfig --libs 2>/dev/null)
3751 if compile_prog "$curl_cflags" "$curl_libs" ; then
3754 if test "$curl" = "yes" ; then
3755 feature_not_found "curl" "Install libcurl devel"
3761 ##########################################
3762 # glib support probe
3765 glib_modules=gthread-2.0
3766 if test "$modules" = yes; then
3767 glib_modules="$glib_modules gmodule-export-2.0"
3769 if test "$plugins" = yes; then
3770 glib_modules="$glib_modules gmodule-2.0"
3773 # This workaround is required due to a bug in pkg-config file for glib as it
3774 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3776 if test "$static" = yes && test "$mingw32" = yes; then
3777 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3780 for i in $glib_modules; do
3781 if $pkg_config --atleast-version=$glib_req_ver $i; then
3782 glib_cflags=$($pkg_config --cflags $i)
3783 glib_libs=$($pkg_config --libs $i)
3784 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3785 LIBS="$glib_libs $LIBS"
3786 libs_qga="$glib_libs $libs_qga"
3788 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3792 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3794 gio_cflags=$($pkg_config --cflags gio-2.0)
3795 gio_libs=$($pkg_config --libs gio-2.0)
3796 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3797 if [ ! -x "$gdbus_codegen" ]; then
3804 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3805 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3806 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3809 # Sanity check that the current size_t matches the
3810 # size that glib thinks it should be. This catches
3811 # problems on multi-arch where people try to build
3812 # 32-bit QEMU while pointing at 64-bit glib headers
3817 #define QEMU_BUILD_BUG_ON(x) \
3818 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3821 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3826 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3827 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3828 "You probably need to set PKG_CONFIG_LIBDIR"\
3829 "to point to the right pkg-config files for your"\
3833 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3836 int main(void) { return 0; }
3838 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3839 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3840 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3841 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3845 #########################################
3848 if test "$zlib" != "no" ; then
3849 if $pkg_config --exists zlib; then
3850 zlib_cflags=$($pkg_config --cflags zlib)
3851 zlib_libs=$($pkg_config --libs zlib)
3852 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3853 LIBS="$zlib_libs $LIBS"
3857 int main(void) { zlibVersion(); return 0; }
3859 if compile_prog "" "-lz" ; then
3862 error_exit "zlib check failed" \
3863 "Make sure to have the zlib libs and headers installed."
3868 ##########################################
3869 # SHA command probe for modules
3870 if test "$modules" = yes; then
3871 shacmd_probe="sha1sum sha1 shasum"
3872 for c in $shacmd_probe; do
3878 if test "$shacmd" = ""; then
3879 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3883 ##########################################
3884 # pixman support probe
3886 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3889 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3890 pixman_cflags=$($pkg_config --cflags pixman-1)
3891 pixman_libs=$($pkg_config --libs pixman-1)
3893 error_exit "pixman >= 0.21.8 not present." \
3894 "Please install the pixman devel package."
3897 ##########################################
3898 # libmpathpersist probe
3900 if test "$mpath" != "no" ; then
3901 # probe for the new API
3903 #include <libudev.h>
3904 #include <mpath_persist.h>
3905 unsigned mpath_mx_alloc_len = 1024;
3907 static struct config *multipath_conf;
3908 extern struct udev *udev;
3909 extern struct config *get_multipath_config(void);
3910 extern void put_multipath_config(struct config *conf);
3912 struct config *get_multipath_config(void) { return multipath_conf; }
3913 void put_multipath_config(struct config *conf) { }
3917 multipath_conf = mpath_lib_init();
3921 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3923 mpathpersist_new_api=yes
3925 # probe for the old API
3927 #include <libudev.h>
3928 #include <mpath_persist.h>
3929 unsigned mpath_mx_alloc_len = 1024;
3932 struct udev *udev = udev_new();
3933 mpath_lib_init(udev);
3937 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3939 mpathpersist_new_api=no
3948 ##########################################
3950 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3954 #include <pthread.h>
3955 static void *f(void *p) { return NULL; }
3958 pthread_create(&thread, 0, f, 0);
3962 if compile_prog "" "" ; then
3965 for pthread_lib in $PTHREADLIBS_LIST; do
3966 if compile_prog "" "$pthread_lib" ; then
3969 for lib_entry in $LIBS; do
3970 if test "$lib_entry" = "$pthread_lib"; then
3975 if test "$found" = "no"; then
3976 LIBS="$pthread_lib $LIBS"
3977 libs_qga="$pthread_lib $libs_qga"
3979 PTHREAD_LIB="$pthread_lib"
3985 if test "$mingw32" != yes && test "$pthread" = no; then
3986 error_exit "pthread check failed" \
3987 "Make sure to have the pthread libs and headers installed."
3990 # check for pthread_setname_np with thread id
3991 pthread_setname_np_w_tid=no
3993 #include <pthread.h>
3995 static void *f(void *p) { return NULL; }
3999 pthread_create(&thread, 0, f, 0);
4000 pthread_setname_np(thread, "QEMU");
4004 if compile_prog "" "$pthread_lib" ; then
4005 pthread_setname_np_w_tid=yes
4008 # check for pthread_setname_np without thread id
4009 pthread_setname_np_wo_tid=no
4011 #include <pthread.h>
4013 static void *f(void *p) { pthread_setname_np("QEMU"); }
4017 pthread_create(&thread, 0, f, 0);
4021 if compile_prog "" "$pthread_lib" ; then
4022 pthread_setname_np_wo_tid=yes
4025 ##########################################
4027 if test "$rbd" != "no" ; then
4030 #include <rbd/librbd.h>
4033 rados_create(&cluster, NULL);
4037 rbd_libs="-lrbd -lrados"
4038 if compile_prog "" "$rbd_libs" ; then
4041 if test "$rbd" = "yes" ; then
4042 feature_not_found "rados block device" "Install librbd/ceph devel"
4048 ##########################################
4050 if test "$libssh" != "no" ; then
4051 if $pkg_config --exists libssh; then
4052 libssh_cflags=$($pkg_config libssh --cflags)
4053 libssh_libs=$($pkg_config libssh --libs)
4056 if test "$libssh" = "yes" ; then
4057 error_exit "libssh required for --enable-libssh"
4063 ##########################################
4064 # Check for libssh 0.8
4065 # This is done like this instead of using the LIBSSH_VERSION_* and
4066 # SSH_VERSION_* macros because some distributions in the past shipped
4067 # snapshots of the future 0.8 from Git, and those snapshots did not
4068 # have updated version numbers (still referring to 0.7.0).
4070 if test "$libssh" = "yes"; then
4072 #include <libssh/libssh.h>
4073 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4075 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4076 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4080 ##########################################
4083 if test "$linux_aio" != "no" ; then
4086 #include <sys/eventfd.h>
4088 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4090 if compile_prog "" "-laio" ; then
4093 if test "$linux_aio" = "yes" ; then
4094 feature_not_found "linux AIO" "Install libaio devel"
4099 ##########################################
4100 # linux-io-uring probe
4102 if test "$linux_io_uring" != "no" ; then
4103 if $pkg_config liburing; then
4104 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4105 linux_io_uring_libs=$($pkg_config --libs liburing)
4108 if test "$linux_io_uring" = "yes" ; then
4109 feature_not_found "linux io_uring" "Install liburing devel"
4115 ##########################################
4116 # TPM emulation is only on POSIX
4118 if test "$tpm" = ""; then
4119 if test "$mingw32" = "yes"; then
4124 elif test "$tpm" = "yes"; then
4125 if test "$mingw32" = "yes" ; then
4126 error_exit "TPM emulation only available on POSIX systems"
4130 ##########################################
4133 if test "$attr" != "no" ; then
4136 #include <sys/types.h>
4137 #ifdef CONFIG_LIBATTR
4138 #include <attr/xattr.h>
4140 #include <sys/xattr.h>
4142 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4144 if compile_prog "" "" ; then
4146 # Older distros have <attr/xattr.h>, and need -lattr:
4147 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4152 if test "$attr" = "yes" ; then
4153 feature_not_found "ATTR" "Install libc6 or libattr devel"
4159 ##########################################
4162 #include <sys/types.h>
4163 #include <sys/uio.h>
4165 int main(void) { return sizeof(struct iovec); }
4168 if compile_prog "" "" ; then
4172 ##########################################
4175 #include <sys/types.h>
4176 #include <sys/uio.h>
4178 int main(void) { return preadv(0, 0, 0, 0); }
4181 if compile_prog "" "" ; then
4185 ##########################################
4187 # fdt support is mandatory for at least some target architectures,
4188 # so insist on it if we're building those system emulators.
4190 for target in $target_list; do
4192 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4198 if test "$fdt_required" = "yes"; then
4199 if test "$fdt" = "no"; then
4200 error_exit "fdt disabled but some requested targets require it." \
4201 "You can turn off fdt only if you also disable all the system emulation" \
4202 "targets which need it (by specifying a cut down --target-list)."
4205 elif test "$fdt" != "yes" ; then
4209 # fdt is only required when building softmmu targets
4210 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4214 if test "$fdt" != "no" ; then
4216 # explicitly check for libfdt_env.h as it is missing in some stable installs
4217 # and test for required functions to make sure we are on a version >= 1.4.2
4220 #include <libfdt_env.h>
4221 int main(void) { fdt_check_full(NULL, 0); return 0; }