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" "$@"
100 # Append $2 to the variable named $1, with space separation
102 eval $1=\${$1:+\"\$$1 \"}\$2
106 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
107 # options which some versions of GCC's C++ compiler complain about
108 # because they only make sense for C programs.
109 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
111 for arg in $QEMU_CFLAGS; do
113 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
114 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
117 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
120 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
128 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
134 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
137 # symbolically link $1 to $2. Portable version of "ln -sf".
140 mkdir -p "$(dirname "$2")"
144 # check whether a command is available to this shell (may be either an
145 # executable or a builtin)
147 type "$1" >/dev/null 2>&1
150 # search for an executable in PATH
156 # pathname has a dir component?
157 if [ "${local_command#*/}" != "$local_command" ]; then
158 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
159 echo "$local_command"
163 if [ -z "$local_command" ]; then
168 for local_dir in $PATH; do
169 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
170 echo "$local_dir/$local_command"
171 IFS="${local_ifs:-$(printf ' \t\n')}"
176 IFS="${local_ifs:-$(printf ' \t\n')}"
181 echo "$trace_backends" | grep "$1" >/dev/null
185 eval test -z '"${1#'"$2"'}"'
188 supported_hax_target() {
189 test "$hax" = "yes" || return 1
190 glob "$1" "*-softmmu" || return 1
191 case "${1%-softmmu}" in
199 supported_kvm_target() {
200 test "$kvm" = "yes" || return 1
201 glob "$1" "*-softmmu" || return 1
202 case "${1%-softmmu}:$cpu" in
203 arm:arm | aarch64:aarch64 | \
204 i386:i386 | i386:x86_64 | i386:x32 | \
205 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
206 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
207 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
215 supported_xen_target() {
216 test "$xen" = "yes" || return 1
217 glob "$1" "*-softmmu" || return 1
218 # Only i386 and x86_64 provide the xenpv machine.
219 case "${1%-softmmu}" in
227 supported_hvf_target() {
228 test "$hvf" = "yes" || return 1
229 glob "$1" "*-softmmu" || return 1
230 case "${1%-softmmu}" in
238 supported_whpx_target() {
239 test "$whpx" = "yes" || return 1
240 glob "$1" "*-softmmu" || return 1
241 case "${1%-softmmu}" in
254 if test "$linux" != "yes"; then
255 print_error "Target '$target' is only available on a Linux host"
260 if test "$bsd" != "yes"; then
261 print_error "Target '$target' is only available on a BSD host"
266 print_error "Invalid target name '$target'"
270 test "$tcg" = "yes" && return 0
271 supported_kvm_target "$1" && return 0
272 supported_xen_target "$1" && return 0
273 supported_hax_target "$1" && return 0
274 supported_hvf_target "$1" && return 0
275 supported_whpx_target "$1" && return 0
276 print_error "TCG disabled, but hardware accelerator not available for '$target'"
282 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
285 # make source path absolute
286 source_path=$(cd "$(dirname -- "$0")"; pwd)
288 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
290 error_exit "main directory cannot contain spaces nor colons"
296 interp_prefix="/usr/gnemul/qemu-%M"
300 block_drv_rw_whitelist=""
301 block_drv_ro_whitelist=""
312 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
314 if test -e "$source_path/.git"
317 git_submodules="ui/keycodemapdb"
318 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
319 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
324 if ! test -f "$source_path/ui/keycodemapdb/README"
327 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
329 echo "This is not a GIT checkout but module content appears to"
330 echo "be missing. Do not use 'git archive' or GitHub download links"
331 echo "to acquire QEMU source archives. Non-GIT builds are only"
332 echo "supported with source archives linked from:"
334 echo " https://www.qemu.org/download/#source"
336 echo "Developers working with GIT can use scripts/archive-source.sh"
337 echo "if they need to create valid source archives."
344 # Don't accept a target_list environment variable.
346 unset target_list_exclude
348 # Default value for a variable defining feature "foo".
349 # * foo="no" feature will only be used if --enable-foo arg is given
350 # * foo="" feature will be searched for, and if found, will be used
351 # unless --disable-foo is given
352 # * foo="yes" this value will only be set by --enable-foo flag.
353 # feature will searched for,
354 # if not found, configure exits with error
356 # Always add --enable-foo and --disable-foo command line args.
357 # Distributions want to ensure that several features are compiled in, and it
358 # is impossible without a --enable-foo that exits if a feature is not found.
379 xen_pci_passthrough=""
414 LDFLAGS_SHARED="-shared"
418 mandir="\${prefix}/share/man"
419 datadir="\${prefix}/share"
420 firmwarepath="\${prefix}/share/qemu-firmware"
421 qemu_docdir="\${prefix}/share/doc/qemu"
422 bindir="\${prefix}/bin"
423 libdir="\${prefix}/lib"
424 libexecdir="\${prefix}/libexec"
425 includedir="\${prefix}/include"
426 sysconfdir="\${prefix}/etc"
427 local_statedir="\${prefix}/var"
463 guest_agent_with_vss="no"
464 guest_agent_ntddscsi="no"
473 debug_stack_usage="no"
477 glusterfs_xlator_opt="no"
478 glusterfs_discard="no"
479 glusterfs_fallocate="no"
480 glusterfs_zerofill="no"
481 glusterfs_ftruncate_has_stat="no"
482 glusterfs_iocb_has_stat="no"
485 tls_priority="NORMAL"
492 qemu_private_xts="yes"
498 live_block_migration="yes"
516 default_devices="yes"
528 # parse CC options first
530 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
532 --cross-prefix=*) cross_prefix="$optarg"
536 --cxx=*) CXX="$optarg"
538 --cpu=*) cpu="$optarg"
540 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
541 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
543 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
545 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
546 EXTRA_LDFLAGS="$optarg"
548 --enable-debug-info) debug_info="yes"
550 --disable-debug-info) debug_info="no"
552 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
554 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
555 eval "cross_cc_cflags_${cc_arch}=\$optarg"
556 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
558 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
559 cc_archs="$cc_archs $cc_arch"
560 eval "cross_cc_${cc_arch}=\$optarg"
561 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
566 # Using uname is really, really broken. Once we have the right set of checks
567 # we can eliminate its usage altogether.
569 # Preferred compiler:
571 # ${cross_prefix}gcc (if cross-prefix specified)
573 if test -z "${CC}${cross_prefix}"; then
576 cc="${CC-${cross_prefix}gcc}"
579 if test -z "${CXX}${cross_prefix}"; then
582 cxx="${CXX-${cross_prefix}g++}"
585 ar="${AR-${cross_prefix}ar}"
586 as="${AS-${cross_prefix}as}"
589 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
590 ld="${LD-${cross_prefix}ld}"
591 ranlib="${RANLIB-${cross_prefix}ranlib}"
592 nm="${NM-${cross_prefix}nm}"
593 strip="${STRIP-${cross_prefix}strip}"
594 windres="${WINDRES-${cross_prefix}windres}"
595 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
597 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
599 pkg_config=query_pkg_config
600 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
602 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
603 ARFLAGS="${ARFLAGS-rv}"
605 # default flags for all hosts
606 # We use -fwrapv to tell the compiler that we require a C dialect where
607 # left shift of signed integers is well defined and has the expected
608 # 2s-complement style results. (Both clang and gcc agree that it
609 # provides these semantics.)
610 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
611 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
612 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
613 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
614 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
615 QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
616 if test "$debug_info" = "yes"; then
620 # running configure in the source tree?
621 # we know that's the case if configure is there.
622 if test -f "./configure"; then
623 pwd_is_source_path="y"
625 pwd_is_source_path="n"
631 #error $1 not defined
633 int main(void) { return 0; }
641 int main(void) { return 0; }
648 int main(void) { return 0; }
652 write_c_fuzzer_skeleton() {
655 #include <sys/types.h>
656 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
657 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
661 if check_define __linux__ ; then
663 elif check_define _WIN32 ; then
665 elif check_define __OpenBSD__ ; then
667 elif check_define __sun__ ; then
669 elif check_define __HAIKU__ ; then
671 elif check_define __FreeBSD__ ; then
673 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
674 targetos='GNU/kFreeBSD'
675 elif check_define __DragonFly__ ; then
677 elif check_define __NetBSD__; then
679 elif check_define __APPLE__; then
682 # This is a fatal error, but don't report it yet, because we
683 # might be going to just print the --help text, or it might
684 # be the result of a missing compiler.
689 # Some host OSes need non-standard checks for which CPU to use.
690 # Note that these checks are broken for cross-compilation: if you're
691 # cross-compiling to one of these OSes then you'll need to specify
692 # the correct CPU with the --cpu option.
695 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
696 # run 64-bit userspace code.
697 # If the user didn't specify a CPU explicitly and the kernel says this is
698 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
699 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
704 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
705 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
710 if test ! -z "$cpu" ; then
711 # command line argument
713 elif check_define __i386__ ; then
715 elif check_define __x86_64__ ; then
716 if check_define __ILP32__ ; then
721 elif check_define __sparc__ ; then
722 if check_define __arch64__ ; then
727 elif check_define _ARCH_PPC ; then
728 if check_define _ARCH_PPC64 ; then
729 if check_define _LITTLE_ENDIAN ; then
737 elif check_define __mips__ ; then
739 elif check_define __s390__ ; then
740 if check_define __s390x__ ; then
745 elif check_define __riscv ; then
746 if check_define _LP64 ; then
751 elif check_define __arm__ ; then
753 elif check_define __aarch64__ ; then
760 # Normalise host CPU name and set ARCH.
761 # Note that this case should only have supported host CPUs, not guests.
763 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
770 i386|i486|i586|i686|i86pc|BePC)
795 # This will result in either an error or falling back to TCI later
799 if test -z "$ARCH"; then
805 # host *BSD for user mode
813 audio_possible_drivers="dsound sdl"
814 if check_include dsound.h; then
815 audio_drv_list="dsound"
824 audio_drv_list="oss try-sdl"
825 audio_possible_drivers="oss sdl pa"
830 audio_drv_list="oss try-sdl"
831 audio_possible_drivers="oss sdl pa"
832 # needed for kinfo_getvmmap(3) in libutil.h
834 # needed for kinfo_getproc
835 libs_qga="-lutil $libs_qga"
836 netmap="" # enable netmap autodetect
837 HOST_VARIANT_DIR="freebsd"
843 audio_drv_list="oss try-sdl"
844 audio_possible_drivers="oss sdl pa"
845 HOST_VARIANT_DIR="dragonfly"
851 audio_drv_list="oss try-sdl"
852 audio_possible_drivers="oss sdl"
854 HOST_VARIANT_DIR="netbsd"
860 audio_drv_list="try-sdl"
861 audio_possible_drivers="sdl"
862 HOST_VARIANT_DIR="openbsd"
870 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
871 if [ "$cpu" = "x86_64" ] ; then
872 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
873 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
876 audio_drv_list="coreaudio try-sdl"
877 audio_possible_drivers="coreaudio sdl"
878 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
879 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
880 # Disable attempts to use ObjectiveC features in os/object.h since they
881 # won't work when we're compiling with gcc as a C compiler.
882 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
883 HOST_VARIANT_DIR="darwin"
889 install="${INSTALL-ginstall}"
890 smbd="${SMBD-/usr/sfw/sbin/smbd}"
891 if test -f /usr/include/sys/soundcard.h ; then
892 audio_drv_list="oss try-sdl"
894 audio_possible_drivers="oss sdl"
895 # needed for CMSG_ macros in sys/socket.h
896 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
897 # needed for TIOCWIN* defines in termios.h
898 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
899 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
900 solarisnetlibs="-lsocket -lnsl -lresolv"
901 LIBS="$solarisnetlibs $LIBS"
902 libs_qga="$solarisnetlibs $libs_qga"
906 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
907 LIBS="-lposix_error_mapper -lnetwork $LIBS"
910 audio_drv_list="try-pa oss"
911 audio_possible_drivers="oss alsa sdl pa"
915 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
921 if [ "$bsd" = "yes" ] ; then
922 if [ "$darwin" != "yes" ] ; then
927 : ${make=${MAKE-make}}
928 : ${install=${INSTALL-install}}
929 # We prefer python 3.x. A bare 'python' is traditionally
930 # python 2.x, but some distros have it as python 3.x, so
933 for binary in "${PYTHON-python3}" python
937 python=$(command -v "$binary")
943 for binary in sphinx-build-3 sphinx-build
947 sphinx_build=$(command -v "$binary")
952 # Check for ancillary tools used in testing
954 for binary in genisoimage mkisofs
958 genisoimage=$(command -v "$binary")
963 : ${smbd=${SMBD-/usr/sbin/smbd}}
965 # Default objcc to clang if available, otherwise use CC
972 if test "$mingw32" = "yes" ; then
975 # MinGW needs -mthreads for TLS and macro _MT.
976 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
977 LIBS="-lwinmm -lws2_32 $LIBS"
979 if compile_prog "" "-liberty" ; then
980 LIBS="-liberty $LIBS"
982 prefix="c:/Program Files/QEMU"
985 qemu_docdir="\${prefix}"
987 sysconfdir="\${prefix}"
990 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
996 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
998 --help|-h) show_help=yes
1000 --version|-V) exec cat $source_path/VERSION
1002 --prefix=*) prefix="$optarg"
1004 --interp-prefix=*) interp_prefix="$optarg"
1010 --host-cc=*) host_cc="$optarg"
1014 --iasl=*) iasl="$optarg"
1016 --objcc=*) objcc="$optarg"
1018 --make=*) make="$optarg"
1020 --install=*) install="$optarg"
1022 --python=*) python="$optarg"
1024 --sphinx-build=*) sphinx_build="$optarg"
1026 --gcov=*) gcov_tool="$optarg"
1028 --smbd=*) smbd="$optarg"
1036 --enable-debug-info)
1038 --disable-debug-info)
1048 --disable-module-upgrades) module_upgrades="no"
1050 --enable-module-upgrades) module_upgrades="yes"
1054 --target-list=*) target_list="$optarg"
1055 if test "$target_list_exclude"; then
1056 error_exit "Can't mix --target-list with --target-list-exclude"
1059 --target-list-exclude=*) target_list_exclude="$optarg"
1060 if test "$target_list"; then
1061 error_exit "Can't mix --target-list-exclude with --target-list"
1064 --enable-trace-backends=*) trace_backends="$optarg"
1066 # XXX: backwards compatibility
1067 --enable-trace-backend=*) trace_backends="$optarg"
1069 --with-trace-file=*) trace_file="$optarg"
1071 --with-default-devices) default_devices="yes"
1073 --without-default-devices) default_devices="no"
1075 --enable-gprof) gprof="yes"
1077 --enable-gcov) gcov="yes"
1081 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1083 --mandir=*) mandir="$optarg"
1085 --bindir=*) bindir="$optarg"
1087 --libdir=*) libdir="$optarg"
1089 --libexecdir=*) libexecdir="$optarg"
1091 --includedir=*) includedir="$optarg"
1093 --datadir=*) datadir="$optarg"
1095 --with-confsuffix=*) confsuffix="$optarg"
1097 --docdir=*) qemu_docdir="$optarg"
1099 --sysconfdir=*) sysconfdir="$optarg"
1101 --localstatedir=*) local_statedir="$optarg"
1103 --firmwarepath=*) firmwarepath="$optarg"
1105 --host=*|--build=*|\
1106 --disable-dependency-tracking|\
1107 --sbindir=*|--sharedstatedir=*|\
1108 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1109 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1110 # These switches are silently ignored, for compatibility with
1111 # autoconf-generated configure scripts. This allows QEMU's
1112 # configure to be used by RPM and similar macros that set
1113 # lots of directory switches by default.
1115 --disable-sdl) sdl="no"
1117 --enable-sdl) sdl="yes"
1119 --disable-sdl-image) sdl_image="no"
1121 --enable-sdl-image) sdl_image="yes"
1123 --disable-qom-cast-debug) qom_cast_debug="no"
1125 --enable-qom-cast-debug) qom_cast_debug="yes"
1127 --disable-virtfs) virtfs="no"
1129 --enable-virtfs) virtfs="yes"
1131 --disable-mpath) mpath="no"
1133 --enable-mpath) mpath="yes"
1135 --disable-vnc) vnc="no"
1137 --enable-vnc) vnc="yes"
1139 --oss-lib=*) oss_lib="$optarg"
1141 --audio-drv-list=*) audio_drv_list="$optarg"
1143 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1145 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1147 --enable-debug-tcg) debug_tcg="yes"
1149 --disable-debug-tcg) debug_tcg="no"
1152 # Enable debugging options that aren't excessively noisy
1159 --enable-sanitizers) sanitizers="yes"
1161 --disable-sanitizers) sanitizers="no"
1163 --enable-tsan) tsan="yes"
1165 --disable-tsan) tsan="no"
1167 --enable-sparse) sparse="yes"
1169 --disable-sparse) sparse="no"
1171 --disable-strip) strip_opt="no"
1173 --disable-vnc-sasl) vnc_sasl="no"
1175 --enable-vnc-sasl) vnc_sasl="yes"
1177 --disable-vnc-jpeg) vnc_jpeg="no"
1179 --enable-vnc-jpeg) vnc_jpeg="yes"
1181 --disable-vnc-png) vnc_png="no"
1183 --enable-vnc-png) vnc_png="yes"
1185 --disable-slirp) slirp="no"
1187 --enable-slirp=git) slirp="git"
1189 --enable-slirp=system) slirp="system"
1191 --disable-vde) vde="no"
1193 --enable-vde) vde="yes"
1195 --disable-netmap) netmap="no"
1197 --enable-netmap) netmap="yes"
1199 --disable-xen) xen="no"
1201 --enable-xen) xen="yes"
1203 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1205 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1207 --disable-brlapi) brlapi="no"
1209 --enable-brlapi) brlapi="yes"
1211 --disable-kvm) kvm="no"
1213 --enable-kvm) kvm="yes"
1215 --disable-hax) hax="no"
1217 --enable-hax) hax="yes"
1219 --disable-hvf) hvf="no"
1221 --enable-hvf) hvf="yes"
1223 --disable-whpx) whpx="no"
1225 --enable-whpx) whpx="yes"
1227 --disable-tcg-interpreter) tcg_interpreter="no"
1229 --enable-tcg-interpreter) tcg_interpreter="yes"
1231 --disable-cap-ng) cap_ng="no"
1233 --enable-cap-ng) cap_ng="yes"
1235 --disable-tcg) tcg="no"
1237 --enable-tcg) tcg="yes"
1239 --disable-malloc-trim) malloc_trim="no"
1241 --enable-malloc-trim) malloc_trim="yes"
1243 --disable-spice) spice="no"
1245 --enable-spice) spice="yes"
1247 --disable-libiscsi) libiscsi="no"
1249 --enable-libiscsi) libiscsi="yes"
1251 --disable-libnfs) libnfs="no"
1253 --enable-libnfs) libnfs="yes"
1255 --enable-profiler) profiler="yes"
1257 --disable-cocoa) cocoa="no"
1261 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1263 --disable-system) softmmu="no"
1265 --enable-system) softmmu="yes"
1272 --disable-linux-user) linux_user="no"
1274 --enable-linux-user) linux_user="yes"
1276 --disable-bsd-user) bsd_user="no"
1278 --enable-bsd-user) bsd_user="yes"
1280 --enable-pie) pie="yes"
1282 --disable-pie) pie="no"
1284 --enable-werror) werror="yes"
1286 --disable-werror) werror="no"
1288 --enable-stack-protector) stack_protector="yes"
1290 --disable-stack-protector) stack_protector="no"
1292 --enable-safe-stack) safe_stack="yes"
1294 --disable-safe-stack) safe_stack="no"
1296 --disable-curses) curses="no"
1298 --enable-curses) curses="yes"
1300 --disable-iconv) iconv="no"
1302 --enable-iconv) iconv="yes"
1304 --disable-curl) curl="no"
1306 --enable-curl) curl="yes"
1308 --disable-fdt) fdt="no"
1310 --enable-fdt) fdt="yes"
1312 --disable-linux-aio) linux_aio="no"
1314 --enable-linux-aio) linux_aio="yes"
1316 --disable-linux-io-uring) linux_io_uring="no"
1318 --enable-linux-io-uring) linux_io_uring="yes"
1320 --disable-attr) attr="no"
1322 --enable-attr) attr="yes"
1324 --disable-membarrier) membarrier="no"
1326 --enable-membarrier) membarrier="yes"
1328 --disable-blobs) blobs="no"
1330 --with-pkgversion=*) pkgversion="$optarg"
1332 --with-coroutine=*) coroutine="$optarg"
1334 --disable-coroutine-pool) coroutine_pool="no"
1336 --enable-coroutine-pool) coroutine_pool="yes"
1338 --enable-debug-stack-usage) debug_stack_usage="yes"
1340 --enable-crypto-afalg) crypto_afalg="yes"
1342 --disable-crypto-afalg) crypto_afalg="no"
1344 --disable-docs) docs="no"
1346 --enable-docs) docs="yes"
1348 --disable-vhost-net) vhost_net="no"
1350 --enable-vhost-net) vhost_net="yes"
1352 --disable-vhost-crypto) vhost_crypto="no"
1354 --enable-vhost-crypto) vhost_crypto="yes"
1356 --disable-vhost-scsi) vhost_scsi="no"
1358 --enable-vhost-scsi) vhost_scsi="yes"
1360 --disable-vhost-vsock) vhost_vsock="no"
1362 --enable-vhost-vsock) vhost_vsock="yes"
1364 --disable-vhost-user-fs) vhost_user_fs="no"
1366 --enable-vhost-user-fs) vhost_user_fs="yes"
1368 --disable-opengl) opengl="no"
1370 --enable-opengl) opengl="yes"
1372 --disable-rbd) rbd="no"
1374 --enable-rbd) rbd="yes"
1376 --disable-xfsctl) xfs="no"
1378 --enable-xfsctl) xfs="yes"
1380 --disable-smartcard) smartcard="no"
1382 --enable-smartcard) smartcard="yes"
1384 --disable-libusb) libusb="no"
1386 --enable-libusb) libusb="yes"
1388 --disable-usb-redir) usb_redir="no"
1390 --enable-usb-redir) usb_redir="yes"
1392 --disable-zlib-test) zlib="no"
1394 --disable-lzo) lzo="no"
1396 --enable-lzo) lzo="yes"
1398 --disable-snappy) snappy="no"
1400 --enable-snappy) snappy="yes"
1402 --disable-bzip2) bzip2="no"
1404 --enable-bzip2) bzip2="yes"
1406 --enable-lzfse) lzfse="yes"
1408 --disable-lzfse) lzfse="no"
1410 --disable-zstd) zstd="no"
1412 --enable-zstd) zstd="yes"
1414 --enable-guest-agent) guest_agent="yes"
1416 --disable-guest-agent) guest_agent="no"
1418 --enable-guest-agent-msi) guest_agent_msi="yes"
1420 --disable-guest-agent-msi) guest_agent_msi="no"
1422 --with-vss-sdk) vss_win32_sdk=""
1424 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1426 --without-vss-sdk) vss_win32_sdk="no"
1428 --with-win-sdk) win_sdk=""
1430 --with-win-sdk=*) win_sdk="$optarg"
1432 --without-win-sdk) win_sdk="no"
1434 --enable-tools) want_tools="yes"
1436 --disable-tools) want_tools="no"
1438 --enable-seccomp) seccomp="yes"
1440 --disable-seccomp) seccomp="no"
1442 --disable-glusterfs) glusterfs="no"
1444 --disable-avx2) avx2_opt="no"
1446 --enable-avx2) avx2_opt="yes"
1448 --disable-avx512f) avx512f_opt="no"
1450 --enable-avx512f) avx512f_opt="yes"
1453 --enable-glusterfs) glusterfs="yes"
1455 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1456 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1458 --enable-vhdx|--disable-vhdx)
1459 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1461 --enable-uuid|--disable-uuid)
1462 echo "$0: $opt is obsolete, UUID support is always built" >&2
1464 --disable-gtk) gtk="no"
1466 --enable-gtk) gtk="yes"
1468 --tls-priority=*) tls_priority="$optarg"
1470 --disable-gnutls) gnutls="no"
1472 --enable-gnutls) gnutls="yes"
1474 --disable-nettle) nettle="no"
1476 --enable-nettle) nettle="yes"
1478 --disable-gcrypt) gcrypt="no"
1480 --enable-gcrypt) gcrypt="yes"
1482 --disable-auth-pam) auth_pam="no"
1484 --enable-auth-pam) auth_pam="yes"
1486 --enable-rdma) rdma="yes"
1488 --disable-rdma) rdma="no"
1490 --enable-pvrdma) pvrdma="yes"
1492 --disable-pvrdma) pvrdma="no"
1494 --disable-vte) vte="no"
1496 --enable-vte) vte="yes"
1498 --disable-virglrenderer) virglrenderer="no"
1500 --enable-virglrenderer) virglrenderer="yes"
1502 --disable-tpm) tpm="no"
1504 --enable-tpm) tpm="yes"
1506 --disable-libssh) libssh="no"
1508 --enable-libssh) libssh="yes"
1510 --disable-live-block-migration) live_block_migration="no"
1512 --enable-live-block-migration) live_block_migration="yes"
1514 --disable-numa) numa="no"
1516 --enable-numa) numa="yes"
1518 --disable-libxml2) libxml2="no"
1520 --enable-libxml2) libxml2="yes"
1522 --disable-tcmalloc) tcmalloc="no"
1524 --enable-tcmalloc) tcmalloc="yes"
1526 --disable-jemalloc) jemalloc="no"
1528 --enable-jemalloc) jemalloc="yes"
1530 --disable-replication) replication="no"
1532 --enable-replication) replication="yes"
1534 --disable-vxhs) vxhs="no"
1536 --enable-vxhs) vxhs="yes"
1538 --disable-bochs) bochs="no"
1540 --enable-bochs) bochs="yes"
1542 --disable-cloop) cloop="no"
1544 --enable-cloop) cloop="yes"
1546 --disable-dmg) dmg="no"
1548 --enable-dmg) dmg="yes"
1550 --disable-qcow1) qcow1="no"
1552 --enable-qcow1) qcow1="yes"
1554 --disable-vdi) vdi="no"
1556 --enable-vdi) vdi="yes"
1558 --disable-vvfat) vvfat="no"
1560 --enable-vvfat) vvfat="yes"
1562 --disable-qed) qed="no"
1564 --enable-qed) qed="yes"
1566 --disable-parallels) parallels="no"
1568 --enable-parallels) parallels="yes"
1570 --disable-sheepdog) sheepdog="no"
1572 --enable-sheepdog) sheepdog="yes"
1574 --disable-vhost-user) vhost_user="no"
1576 --enable-vhost-user) vhost_user="yes"
1578 --disable-vhost-vdpa) vhost_vdpa="no"
1580 --enable-vhost-vdpa) vhost_vdpa="yes"
1582 --disable-vhost-kernel) vhost_kernel="no"
1584 --enable-vhost-kernel) vhost_kernel="yes"
1586 --disable-capstone) capstone="no"
1588 --enable-capstone) capstone="yes"
1590 --enable-capstone=git) capstone="git"
1592 --enable-capstone=system) capstone="system"
1594 --with-git=*) git="$optarg"
1596 --enable-git-update) git_update=yes
1598 --disable-git-update) git_update=no
1600 --enable-debug-mutex) debug_mutex=yes
1602 --disable-debug-mutex) debug_mutex=no
1604 --enable-libpmem) libpmem=yes
1606 --disable-libpmem) libpmem=no
1608 --enable-xkbcommon) xkbcommon=yes
1610 --disable-xkbcommon) xkbcommon=no
1612 --enable-plugins) plugins="yes"
1614 --disable-plugins) plugins="no"
1616 --enable-containers) use_containers="yes"
1618 --disable-containers) use_containers="no"
1620 --enable-fuzzing) fuzzing=yes
1622 --disable-fuzzing) fuzzing=no
1624 --gdb=*) gdb_bin="$optarg"
1626 --enable-rng-none) rng_none=yes
1628 --disable-rng-none) rng_none=no
1630 --enable-keyring) secret_keyring="yes"
1632 --disable-keyring) secret_keyring="no"
1634 --enable-libdaxctl) libdaxctl=yes
1636 --disable-libdaxctl) libdaxctl=no
1639 echo "ERROR: unknown option $opt"
1640 echo "Try '$0 --help' for more information"
1649 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1653 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1656 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1657 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1660 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1661 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1665 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1669 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1673 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1676 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1677 # If we truly care, we should simply detect this case at
1678 # runtime and generate the fallback to serial emulation.
1679 CPU_CFLAGS="-m64 -mcx16"
1680 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1684 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1686 # No special flags required for other host CPUs
1689 eval "cross_cc_${cpu}=\$host_cc"
1690 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1691 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1693 # For user-mode emulation the host arch has to be one we explicitly
1694 # support, even if we're using TCI.
1695 if [ "$ARCH" = "unknown" ]; then
1700 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1704 default_target_list=""
1708 if [ "$softmmu" = "yes" ]; then
1709 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1711 if [ "$linux_user" = "yes" ]; then
1712 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1714 if [ "$bsd_user" = "yes" ]; then
1715 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1718 if test -z "$target_list_exclude"; then
1719 for config in $mak_wilds; do
1720 default_target_list="${default_target_list} $(basename "$config" .mak)"
1723 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1724 for config in $mak_wilds; do
1725 target="$(basename "$config" .mak)"
1727 for excl in $exclude_list; do
1728 if test "$excl" = "$target"; then
1733 if test "$exclude" = "no"; then
1734 default_target_list="${default_target_list} $target"
1739 # Enumerate public trace backends for --help output
1740 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1742 if test x"$show_help" = x"yes" ; then
1745 Usage: configure [options]
1746 Options: [defaults in brackets after descriptions]
1749 --help print this message
1750 --prefix=PREFIX install in PREFIX [$prefix]
1751 --interp-prefix=PREFIX where to find shared libraries, etc.
1752 use %M for cpu name [$interp_prefix]
1753 --target-list=LIST set target list (default: build everything)
1754 $(echo Available targets: $default_target_list | \
1755 fold -s -w 53 | sed -e 's/^/ /')
1756 --target-list-exclude=LIST exclude a set of targets from the default target-list
1758 Advanced options (experts only):
1759 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1760 --cc=CC use C compiler CC [$cc]
1761 --iasl=IASL use ACPI compiler IASL [$iasl]
1762 --host-cc=CC use C compiler CC [$host_cc] for code run at
1764 --cxx=CXX use C++ compiler CXX [$cxx]
1765 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1766 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1767 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1768 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1769 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1770 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1771 --make=MAKE use specified make [$make]
1772 --install=INSTALL use specified install [$install]
1773 --python=PYTHON use specified python [$python]
1774 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1775 --smbd=SMBD use specified smbd [$smbd]
1776 --with-git=GIT use specified git [$git]
1777 --static enable static build [$static]
1778 --mandir=PATH install man pages in PATH
1779 --datadir=PATH install firmware in PATH$confsuffix
1780 --docdir=PATH install documentation in PATH$confsuffix
1781 --bindir=PATH install binaries in PATH
1782 --libdir=PATH install libraries in PATH
1783 --libexecdir=PATH install helper binaries in PATH
1784 --sysconfdir=PATH install config in PATH$confsuffix
1785 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1786 --firmwarepath=PATH search PATH for firmware files
1787 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1788 --with-pkgversion=VERS use specified string as sub-version of the package
1789 --enable-debug enable common debug build options
1790 --enable-sanitizers enable default sanitizers
1791 --enable-tsan enable thread sanitizer
1792 --disable-strip disable stripping binaries
1793 --disable-werror disable compilation abort on warning
1794 --disable-stack-protector disable compiler-provided stack protection
1795 --audio-drv-list=LIST set audio drivers list:
1796 Available drivers: $audio_possible_drivers
1797 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1798 --block-drv-rw-whitelist=L
1799 set block driver read-write whitelist
1800 (affects only QEMU, not qemu-img)
1801 --block-drv-ro-whitelist=L
1802 set block driver read-only whitelist
1803 (affects only QEMU, not qemu-img)
1804 --enable-trace-backends=B Set trace backend
1805 Available backends: $trace_backend_list
1806 --with-trace-file=NAME Full PATH,NAME of file to store traces
1808 --disable-slirp disable SLIRP userspace network connectivity
1809 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1810 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1811 --oss-lib path to OSS library
1812 --cpu=CPU Build for host CPU [$cpu]
1813 --with-coroutine=BACKEND coroutine backend. Supported options:
1814 ucontext, sigaltstack, windows
1815 --enable-gcov enable test coverage analysis with gcov
1816 --gcov=GCOV use specified gcov [$gcov_tool]
1817 --disable-blobs disable installing provided firmware blobs
1818 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1819 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1820 --tls-priority default TLS protocol/cipher priority string
1821 --enable-gprof QEMU profiling with gprof
1822 --enable-profiler profiler support
1823 --enable-debug-stack-usage
1824 track the maximum stack usage of stacks created by qemu_alloc_stack
1826 enable plugins via shared library loading
1827 --disable-containers don't use containers for cross-building
1828 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1830 Optional features, enabled with --enable-FEATURE and
1831 disabled with --disable-FEATURE, default is enabled if available:
1833 system all system emulation targets
1834 user supported user emulation targets
1835 linux-user all linux usermode emulation targets
1836 bsd-user all BSD usermode emulation targets
1837 docs build documentation
1838 guest-agent build the QEMU Guest Agent
1839 guest-agent-msi build guest agent Windows MSI installation package
1840 pie Position Independent Executables
1841 modules modules support (non-Windows)
1842 module-upgrades try to load modules from alternate paths for upgrades
1843 debug-tcg TCG debugging (default is disabled)
1844 debug-info debugging information
1845 sparse sparse checker
1846 safe-stack SafeStack Stack Smash Protection. Depends on
1847 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1849 gnutls GNUTLS cryptography support
1850 nettle nettle cryptography support
1851 gcrypt libgcrypt cryptography support
1852 auth-pam PAM access control
1854 sdl-image SDL Image support for icons
1856 vte vte support for the gtk UI
1858 iconv font glyph conversion support
1860 vnc-sasl SASL encryption for VNC server
1861 vnc-jpeg JPEG lossy compression for VNC server
1862 vnc-png PNG compression for VNC server
1863 cocoa Cocoa UI (Mac OS X only)
1865 mpath Multipath persistent reservation passthrough
1866 xen xen backend driver support
1867 xen-pci-passthrough PCI passthrough support for Xen
1868 brlapi BrlAPI (Braile)
1869 curl curl connectivity
1870 membarrier membarrier system call (for Linux 4.14+ or Windows)
1872 kvm KVM acceleration support
1873 hax HAX acceleration support
1874 hvf Hypervisor.framework acceleration support
1875 whpx Windows Hypervisor Platform acceleration support
1876 rdma Enable RDMA-based migration
1877 pvrdma Enable PVRDMA support
1878 vde support for vde network
1879 netmap support for netmap network
1880 linux-aio Linux AIO support
1881 linux-io-uring Linux io_uring support
1882 cap-ng libcap-ng support
1883 attr attr and xattr support
1884 vhost-net vhost-net kernel acceleration support
1885 vhost-vsock virtio sockets device support
1886 vhost-scsi vhost-scsi kernel target support
1887 vhost-crypto vhost-user-crypto backend support
1888 vhost-kernel vhost kernel backend support
1889 vhost-user vhost-user backend support
1890 vhost-vdpa vhost-vdpa kernel backend support
1892 rbd rados block device (rbd)
1893 libiscsi iscsi support
1895 smartcard smartcard support (libcacard)
1896 libusb libusb (for usb passthrough)
1897 live-block-migration Block migration in the main migration stream
1898 usb-redir usb network redirection support
1899 lzo support of lzo compression library
1900 snappy support of snappy compression library
1901 bzip2 support of bzip2 compression library
1902 (for reading bzip2-compressed dmg images)
1903 lzfse support of lzfse compression library
1904 (for reading lzfse-compressed dmg images)
1905 zstd support for zstd compression library
1906 (for migration compression and qcow2 cluster compression)
1907 seccomp seccomp support
1908 coroutine-pool coroutine freelist (better performance)
1909 glusterfs GlusterFS backend
1911 libssh ssh block device support
1912 numa libnuma support
1913 libxml2 for Parallels image format
1914 tcmalloc tcmalloc support
1915 jemalloc jemalloc support
1916 avx2 AVX2 optimization support
1917 avx512f AVX512F optimization support
1918 replication replication support
1919 opengl opengl support
1920 virglrenderer virgl rendering support
1921 xfsctl xfsctl support
1922 qom-cast-debug cast debugging support
1923 tools build qemu-io, qemu-nbd and qemu-img tools
1924 vxhs Veritas HyperScale vDisk backend support
1925 bochs bochs image format support
1926 cloop cloop image format support
1927 dmg dmg image format support
1928 qcow1 qcow v1 image format support
1929 vdi vdi image format support
1930 vvfat vvfat image format support
1931 qed qed image format support
1932 parallels parallels image format support
1933 sheepdog sheepdog block driver support
1934 crypto-afalg Linux AF_ALG crypto backend driver
1935 capstone capstone disassembler support
1936 debug-mutex mutex debugging support
1937 libpmem libpmem support
1938 xkbcommon xkbcommon support
1939 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1940 libdaxctl libdaxctl support
1942 NOTE: The object files are built at the place where configure is launched
1947 # Remove old dependency files to make sure that they get properly regenerated
1948 rm -f */config-devices.mak.d
1950 # Remove syscall_nr.h to be sure they will be regenerated in the build
1951 # directory, not in the source directory
1952 for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1953 i386 x86_64 mips mips64 ; do
1954 # remove the file if it has been generated in the source directory
1955 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1956 # remove the dependency files
1957 for target in ${arch}*-linux-user ; do
1958 test -d "${target}" && find "${target}" -type f -name "*.d" \
1959 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1960 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1964 if test -z "$python"
1966 error_exit "Python not found. Use --python=/path/to/python"
1969 # Note that if the Python conditional here evaluates True we will exit
1970 # with status 1 which is a shell 'false' value.
1971 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1972 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1973 "Use --python=/path/to/python to specify a supported Python."
1976 # Preserve python version since some functionality is dependent on it
1977 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1979 # Suppress writing compiled files
1982 # Check that the C compiler works. Doing this here before testing
1983 # the host CPU ensures that we had a valid CC to autodetect the
1984 # $cpu var (and we should bail right here if that's not the case).
1985 # It also allows the help message to be printed without a CC.
1987 if compile_object ; then
1988 : C compiler works ok
1990 error_exit "\"$cc\" either does not exist or does not work"
1992 if ! compile_prog ; then
1993 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1996 # Now we have handled --enable-tcg-interpreter and know we're not just
1997 # printing the help message, bail out if the host CPU isn't supported.
1998 if test "$ARCH" = "unknown"; then
1999 if test "$tcg_interpreter" = "yes" ; then
2000 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2002 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2006 # Consult white-list to determine whether to enable werror
2007 # by default. Only enable by default for git builds
2008 if test -z "$werror" ; then
2009 if test -e "$source_path/.git" && \
2010 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2017 if test "$bogus_os" = "yes"; then
2018 # Now that we know that we're not printing the help and that
2019 # the compiler works (so the results of the check_defines we used
2020 # to identify the OS are reliable), if we didn't recognize the
2021 # host OS we should stop now.
2022 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2025 # Check whether the compiler matches our minimum requirements:
2027 #if defined(__clang_major__) && defined(__clang_minor__)
2028 # ifdef __apple_build_version__
2029 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2030 # error You need at least XCode Clang v5.1 to compile QEMU
2033 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2034 # error You need at least Clang v3.4 to compile QEMU
2037 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2038 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2039 # error You need at least GCC v4.8 to compile QEMU
2042 # error You either need GCC or Clang to compiler QEMU
2044 int main (void) { return 0; }
2046 if ! compile_prog "" "" ; then
2047 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2050 # Accumulate -Wfoo and -Wno-bar separately.
2051 # We will list all of the enable flags first, and the disable flags second.
2052 # Note that we do not add -Werror, because that would enable it for all
2053 # configure tests. If a configure test failed due to -Werror this would
2054 # just silently disable some features, so it's too error prone.
2057 add_to warn_flags -Wold-style-declaration
2058 add_to warn_flags -Wold-style-definition
2059 add_to warn_flags -Wtype-limits
2060 add_to warn_flags -Wformat-security
2061 add_to warn_flags -Wformat-y2k
2062 add_to warn_flags -Winit-self
2063 add_to warn_flags -Wignored-qualifiers
2064 add_to warn_flags -Wempty-body
2065 add_to warn_flags -Wnested-externs
2066 add_to warn_flags -Wendif-labels
2067 add_to warn_flags -Wexpansion-to-defined
2070 add_to nowarn_flags -Wno-initializer-overrides
2071 add_to nowarn_flags -Wno-missing-include-dirs
2072 add_to nowarn_flags -Wno-shift-negative-value
2073 add_to nowarn_flags -Wno-string-plus-int
2074 add_to nowarn_flags -Wno-typedef-redefinition
2075 add_to nowarn_flags -Wno-tautological-type-limit-compare
2076 add_to nowarn_flags -Wno-psabi
2078 gcc_flags="$warn_flags $nowarn_flags"
2080 cc_has_warning_flag() {
2083 # Use the positive sense of the flag when testing for -Wno-wombat
2084 # support (gcc will happily accept the -Wno- form of unknown
2086 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2087 compile_prog "-Werror $optflag" ""
2090 for flag in $gcc_flags; do
2091 if cc_has_warning_flag $flag ; then
2092 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2096 if test "$stack_protector" != "no"; then
2098 int main(int argc, char *argv[])
2100 char arr[64], *p = arr, *c = argv[0];
2107 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2109 for flag in $gcc_flags; do
2110 # We need to check both a compile and a link, since some compiler
2111 # setups fail only on a .c->.o compile and some only at link time
2112 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2113 compile_prog "-Werror $flag" ""; then
2114 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2115 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2120 if test "$stack_protector" = yes; then
2121 if test $sp_on = 0; then
2122 error_exit "Stack protector not supported"
2127 # Disable -Wmissing-braces on older compilers that warn even for
2128 # the "universal" C zero initializer {0}.
2134 if compile_object "-Werror" "" ; then
2137 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2140 # Our module code doesn't support Windows
2141 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2142 error_exit "Modules are not available for Windows"
2145 # module_upgrades is only reasonable if modules are enabled
2146 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2147 error_exit "Can't enable module-upgrades as Modules are not enabled"
2150 # Static linking is not possible with modules or PIE
2151 if test "$static" = "yes" ; then
2152 if test "$modules" = "yes" ; then
2153 error_exit "static and modules are mutually incompatible"
2157 # Unconditional check for compiler __thread support
2159 static __thread int tls_var;
2160 int main(void) { return tls_var; }
2163 if ! compile_prog "-Werror" "" ; then
2164 error_exit "Your compiler does not support the __thread specifier for " \
2165 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2171 # define THREAD __thread
2175 static THREAD int tls_var;
2176 int main(void) { return tls_var; }
2179 # Check we support --no-pie first; we will need this for building ROMs.
2180 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2181 CFLAGS_NOPIE="-fno-pie"
2182 LDFLAGS_NOPIE="-no-pie"
2185 if test "$static" = "yes"; then
2186 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2187 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2188 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2190 elif test "$pie" = "yes"; then
2191 error_exit "-static-pie not available due to missing toolchain support"
2193 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2196 elif test "$pie" = "no"; then
2197 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2198 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
2199 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2200 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2201 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2203 elif test "$pie" = "yes"; then
2204 error_exit "PIE not available due to missing toolchain support"
2206 echo "Disabling PIE due to missing toolchain support"
2210 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2211 # The combination is known as "full relro", because .got.plt is read-only too.
2212 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2213 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2216 ##########################################
2217 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2218 # use i686 as default anyway, but for those that don't, an explicit
2219 # specification is necessary
2221 if test "$cpu" = "i386"; then
2223 static int sfaa(int *ptr)
2225 return __sync_fetch_and_and(ptr, 0);
2231 val = __sync_val_compare_and_swap(&val, 0, 1);
2236 if ! compile_prog "" "" ; then
2237 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2241 #########################################
2242 # Solaris specific configure tool chain decisions
2244 if test "$solaris" = "yes" ; then
2245 if has $install; then
2248 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2249 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2250 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2252 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2253 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2254 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2255 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2260 if test -f /usr/ccs/bin/ar ; then
2261 error_exit "No path includes ar" \
2262 "Add /usr/ccs/bin to your path and rerun configure"
2264 error_exit "No path includes ar"
2268 if test -z "${target_list+xxx}" ; then
2269 for target in $default_target_list; do
2270 supported_target $target 2>/dev/null && \
2271 target_list="$target_list $target"
2273 target_list="${target_list# }"
2275 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2276 for target in $target_list; do
2277 # Check that we recognised the target name; this allows a more
2278 # friendly error message than if we let it fall through.
2279 case " $default_target_list " in
2283 error_exit "Unknown target name '$target'"
2286 supported_target $target || exit 1
2290 # see if system emulation was really requested
2291 case " $target_list " in
2292 *"-softmmu "*) softmmu=yes
2298 for target in $target_list; do
2300 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2305 # The EDK2 binaries are compressed with bzip2
2306 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2307 error_exit "The bzip2 program is required for building QEMU"
2310 feature_not_found() {
2314 error_exit "User requested feature $feature" \
2315 "configure was not able to find it." \
2320 # big/little endian test
2322 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2323 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2324 extern int foo(short *, short *);
2325 int main(int argc, char *argv[]) {
2326 return foo(big_endian, little_endian);
2330 if compile_object ; then
2331 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2333 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2336 echo big/little test failed
2339 echo big/little test failed
2342 ##########################################
2344 if test -z "$want_tools"; then
2345 if test "$softmmu" = "no"; then
2352 ##########################################
2353 # cocoa implies not SDL or GTK
2354 # (the cocoa UI code currently assumes it is always the active UI
2355 # and doesn't interact well with other UI frontend code)
2356 if test "$cocoa" = "yes"; then
2357 if test "$sdl" = "yes"; then
2358 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2360 if test "$gtk" = "yes"; then
2361 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2367 # Some versions of Mac OS X incorrectly define SIZE_MAX
2371 int main(int argc, char *argv[]) {
2372 return printf("%zu", SIZE_MAX);
2375 have_broken_size_max=no
2376 if ! compile_object -Werror ; then
2377 have_broken_size_max=yes
2380 ##########################################
2384 #include <sys/socket.h>
2385 #include <linux/ip.h>
2386 int main(void) { return sizeof(struct mmsghdr); }
2388 if compile_prog "" "" ; then
2394 #########################################
2395 # vhost interdependencies and host support
2398 test "$vhost_user" = "" && vhost_user=yes
2399 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2400 error_exit "vhost-user isn't available on win32"
2402 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2403 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2404 error_exit "vhost-vdpa is only available on Linux"
2406 test "$vhost_kernel" = "" && vhost_kernel=$linux
2407 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2408 error_exit "vhost-kernel is only available on Linux"
2411 # vhost-kernel devices
2412 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2413 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2414 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2416 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2417 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2418 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2421 # vhost-user backends
2422 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2423 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2424 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2426 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2427 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2428 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2430 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2431 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2432 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2434 #vhost-vdpa backends
2435 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2436 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2437 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2440 # OR the vhost-kernel and vhost-user values for simplicity
2441 if test "$vhost_net" = ""; then
2442 test "$vhost_net_user" = "yes" && vhost_net=yes
2443 test "$vhost_kernel" = "yes" && vhost_net=yes
2446 ##########################################
2447 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2449 if test "$mingw32" = "yes"; then
2450 # Some versions of MinGW / Mingw-w64 lack localtime_r
2451 # and gmtime_r entirely.
2453 # Some versions of Mingw-w64 define a macro for
2454 # localtime_r/gmtime_r.
2456 # Some versions of Mingw-w64 will define functions
2457 # for localtime_r/gmtime_r, but only if you have
2458 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2459 # though, unistd.h and pthread.h both define
2462 # So this #undef localtime_r and #include <unistd.h>
2463 # are not in fact redundant.
2468 int main(void) { localtime_r(NULL, NULL); return 0; }
2470 if compile_prog "" "" ; then
2477 ##########################################
2480 if ! has "$pkg_config_exe"; then
2481 error_exit "pkg-config binary '$pkg_config_exe' not found"
2484 ##########################################
2487 if test "$linux_user" = "yes"; then
2490 #include <linux/futex.h>
2492 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2498 if ! compile_object ; then
2499 feature_not_found "nptl" "Install glibc and linux kernel headers."
2503 ##########################################
2506 if test "$lzo" != "no" ; then
2508 #include <lzo/lzo1x.h>
2509 int main(void) { lzo_version(); return 0; }
2511 if compile_prog "" "-llzo2" ; then
2512 libs_softmmu="$libs_softmmu -llzo2"
2515 if test "$lzo" = "yes"; then
2516 feature_not_found "liblzo2" "Install liblzo2 devel"
2522 ##########################################
2525 if test "$snappy" != "no" ; then
2527 #include <snappy-c.h>
2528 int main(void) { snappy_max_compressed_length(4096); return 0; }
2530 if compile_prog "" "-lsnappy" ; then
2531 libs_softmmu="$libs_softmmu -lsnappy"
2534 if test "$snappy" = "yes"; then
2535 feature_not_found "libsnappy" "Install libsnappy devel"
2541 ##########################################
2544 if test "$bzip2" != "no" ; then
2547 int main(void) { BZ2_bzlibVersion(); return 0; }
2549 if compile_prog "" "-lbz2" ; then
2552 if test "$bzip2" = "yes"; then
2553 feature_not_found "libbzip2" "Install libbzip2 devel"
2559 ##########################################
2562 if test "$lzfse" != "no" ; then
2565 int main(void) { lzfse_decode_scratch_size(); return 0; }
2567 if compile_prog "" "-llzfse" ; then
2570 if test "$lzfse" = "yes"; then
2571 feature_not_found "lzfse" "Install lzfse devel"
2577 ##########################################
2580 if test "$zstd" != "no" ; then
2581 libzstd_minver="1.4.0"
2582 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2583 zstd_cflags="$($pkg_config --cflags libzstd)"
2584 zstd_libs="$($pkg_config --libs libzstd)"
2585 LIBS="$zstd_libs $LIBS"
2586 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2589 if test "$zstd" = "yes" ; then
2590 feature_not_found "libzstd" "Install libzstd devel"
2596 ##########################################
2599 if test "$seccomp" != "no" ; then
2600 libseccomp_minver="2.3.0"
2601 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2602 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2603 seccomp_libs="$($pkg_config --libs libseccomp)"
2606 if test "$seccomp" = "yes" ; then
2607 feature_not_found "libseccomp" \
2608 "Install libseccomp devel >= $libseccomp_minver"
2613 ##########################################
2616 if test "$xen" != "no" ; then
2617 # Check whether Xen library path is specified via --extra-ldflags to avoid
2618 # overriding this setting with pkg-config output. If not, try pkg-config
2619 # to obtain all needed flags.
2621 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2622 $pkg_config --exists xencontrol ; then
2623 xen_ctrl_version="$(printf '%d%02d%02d' \
2624 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2626 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2627 xen_pc="$xen_pc xenevtchn xendevicemodel"
2628 if $pkg_config --exists xentoolcore; then
2629 xen_pc="$xen_pc xentoolcore"
2631 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2632 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2635 xen_libs="-lxenstore -lxenctrl -lxenguest"
2636 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2638 # First we test whether Xen headers and libraries are available.
2639 # If no, we are done and there is no Xen support.
2640 # If yes, more tests are run to detect the Xen version.
2644 #include <xenctrl.h>
2649 if ! compile_prog "" "$xen_libs" ; then
2651 if test "$xen" = "yes" ; then
2652 feature_not_found "xen" "Install xen devel"
2658 cat > $TMPC <<EOF &&
2659 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2660 #define __XEN_TOOLS__
2661 #include <xendevicemodel.h>
2662 #include <xenforeignmemory.h>
2664 xendevicemodel_handle *xd;
2665 xenforeignmemory_handle *xfmem;
2667 xd = xendevicemodel_open(0, 0);
2668 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2670 xfmem = xenforeignmemory_open(0, 0);
2671 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2676 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2678 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2679 xen_ctrl_version=41100
2682 cat > $TMPC <<EOF &&
2683 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2684 #include <xenforeignmemory.h>
2685 #include <xentoolcore.h>
2687 xenforeignmemory_handle *xfmem;
2689 xfmem = xenforeignmemory_open(0, 0);
2690 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2691 xentoolcore_restrict_all(0);
2696 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2698 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2699 xen_ctrl_version=41000
2702 cat > $TMPC <<EOF &&
2703 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2704 #define __XEN_TOOLS__
2705 #include <xendevicemodel.h>
2707 xendevicemodel_handle *xd;
2709 xd = xendevicemodel_open(0, 0);
2710 xendevicemodel_close(xd);
2715 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2717 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2718 xen_ctrl_version=40900
2721 cat > $TMPC <<EOF &&
2723 * If we have stable libs the we don't want the libxc compat
2724 * layers, regardless of what CFLAGS we may have been given.
2726 * Also, check if xengnttab_grant_copy_segment_t is defined and
2727 * grant copy operation is implemented.
2729 #undef XC_WANT_COMPAT_EVTCHN_API
2730 #undef XC_WANT_COMPAT_GNTTAB_API
2731 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2732 #include <xenctrl.h>
2733 #include <xenstore.h>
2734 #include <xenevtchn.h>
2735 #include <xengnttab.h>
2736 #include <xenforeignmemory.h>
2738 #include <xen/hvm/hvm_info_table.h>
2739 #if !defined(HVM_MAX_VCPUS)
2740 # error HVM_MAX_VCPUS not defined
2743 xc_interface *xc = NULL;
2744 xenforeignmemory_handle *xfmem;
2745 xenevtchn_handle *xe;
2746 xengnttab_handle *xg;
2747 xengnttab_grant_copy_segment_t* seg = NULL;
2751 xc = xc_interface_open(0, 0, 0);
2752 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2753 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2754 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2755 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2757 xfmem = xenforeignmemory_open(0, 0);
2758 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2760 xe = xenevtchn_open(0, 0);
2763 xg = xengnttab_open(0, 0);
2764 xengnttab_grant_copy(xg, 0, seg);
2769 compile_prog "" "$xen_libs $xen_stable_libs"
2771 xen_ctrl_version=40800
2774 cat > $TMPC <<EOF &&
2776 * If we have stable libs the we don't want the libxc compat
2777 * layers, regardless of what CFLAGS we may have been given.
2779 #undef XC_WANT_COMPAT_EVTCHN_API
2780 #undef XC_WANT_COMPAT_GNTTAB_API
2781 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2782 #include <xenctrl.h>
2783 #include <xenstore.h>
2784 #include <xenevtchn.h>
2785 #include <xengnttab.h>
2786 #include <xenforeignmemory.h>
2788 #include <xen/hvm/hvm_info_table.h>
2789 #if !defined(HVM_MAX_VCPUS)
2790 # error HVM_MAX_VCPUS not defined
2793 xc_interface *xc = NULL;
2794 xenforeignmemory_handle *xfmem;
2795 xenevtchn_handle *xe;
2796 xengnttab_handle *xg;
2800 xc = xc_interface_open(0, 0, 0);
2801 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2802 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2803 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2804 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2806 xfmem = xenforeignmemory_open(0, 0);
2807 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2809 xe = xenevtchn_open(0, 0);
2812 xg = xengnttab_open(0, 0);
2813 xengnttab_map_grant_ref(xg, 0, 0, 0);
2818 compile_prog "" "$xen_libs $xen_stable_libs"
2820 xen_ctrl_version=40701
2825 cat > $TMPC <<EOF &&
2826 #include <xenctrl.h>
2827 #include <xenstore.h>
2829 #include <xen/hvm/hvm_info_table.h>
2830 #if !defined(HVM_MAX_VCPUS)
2831 # error HVM_MAX_VCPUS not defined
2836 xc = xc_interface_open(0, 0, 0);
2837 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2838 xc_gnttab_open(NULL, 0);
2839 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2840 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2841 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2842 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2846 compile_prog "" "$xen_libs"
2848 xen_ctrl_version=40600
2853 cat > $TMPC <<EOF &&
2854 #include <xenctrl.h>
2855 #include <xenstore.h>
2857 #include <xen/hvm/hvm_info_table.h>
2858 #if !defined(HVM_MAX_VCPUS)
2859 # error HVM_MAX_VCPUS not defined
2864 xc = xc_interface_open(0, 0, 0);
2865 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2866 xc_gnttab_open(NULL, 0);
2867 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2868 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2869 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2873 compile_prog "" "$xen_libs"
2875 xen_ctrl_version=40500
2879 cat > $TMPC <<EOF &&
2880 #include <xenctrl.h>
2881 #include <xenstore.h>
2883 #include <xen/hvm/hvm_info_table.h>
2884 #if !defined(HVM_MAX_VCPUS)
2885 # error HVM_MAX_VCPUS not defined
2890 xc = xc_interface_open(0, 0, 0);
2891 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2892 xc_gnttab_open(NULL, 0);
2893 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2894 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2898 compile_prog "" "$xen_libs"
2900 xen_ctrl_version=40200
2904 if test "$xen" = "yes" ; then
2905 feature_not_found "xen (unsupported version)" \
2906 "Install a supported xen (xen 4.2 or newer)"
2911 if test "$xen" = yes; then
2912 if test $xen_ctrl_version -ge 40701 ; then
2913 libs_softmmu="$xen_stable_libs $libs_softmmu"
2915 libs_softmmu="$xen_libs $libs_softmmu"
2920 if test "$xen_pci_passthrough" != "no"; then
2921 if test "$xen" = "yes" && test "$linux" = "yes"; then
2922 xen_pci_passthrough=yes
2924 if test "$xen_pci_passthrough" = "yes"; then
2925 error_exit "User requested feature Xen PCI Passthrough" \
2926 " but this feature requires /sys from Linux"
2928 xen_pci_passthrough=no
2932 ##########################################
2933 # Windows Hypervisor Platform accelerator (WHPX) check
2934 if test "$whpx" != "no" ; then
2935 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2938 if test "$whpx" = "yes"; then
2939 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2945 ##########################################
2947 if test "$sparse" != "no" ; then
2951 if test "$sparse" = "yes" ; then
2952 feature_not_found "sparse" "Install sparse binary"
2958 ##########################################
2960 if $pkg_config --exists "x11"; then
2962 x11_cflags=$($pkg_config --cflags x11)
2963 x11_libs=$($pkg_config --libs x11)
2966 ##########################################
2969 if test "$gtk" != "no"; then
2970 gtkpackage="gtk+-3.0"
2971 gtkx11package="gtk+-x11-3.0"
2973 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2974 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2975 gtk_libs=$($pkg_config --libs $gtkpackage)
2976 gtk_version=$($pkg_config --modversion $gtkpackage)
2977 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2979 gtk_cflags="$gtk_cflags $x11_cflags"
2980 gtk_libs="$gtk_libs $x11_libs"
2983 elif test "$gtk" = "yes"; then
2984 feature_not_found "gtk" "Install gtk3-devel"
2991 ##########################################
2994 if test "$gnutls" != "no"; then
2996 if $pkg_config --exists "gnutls >= 3.1.18"; then
2997 gnutls_cflags=$($pkg_config --cflags gnutls)
2998 gnutls_libs=$($pkg_config --libs gnutls)
2999 # Packaging for the static libraries is not always correct.
3000 # At least ubuntu 18.04 ships only shared libraries.
3002 if compile_prog "" "$gnutls_libs" ; then
3003 LIBS="$gnutls_libs $LIBS"
3004 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3008 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3009 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3016 # If user didn't give a --disable/enable-gcrypt flag,
3017 # then mark as disabled if user requested nettle
3019 if test -z "$gcrypt"
3021 if test "$nettle" = "yes"
3027 # If user didn't give a --disable/enable-nettle flag,
3028 # then mark as disabled if user requested gcrypt
3030 if test -z "$nettle"
3032 if test "$gcrypt" = "yes"
3039 if ! has "libgcrypt-config"
3044 if test -n "$cross_prefix"
3046 host=$(libgcrypt-config --host)
3047 if test "$host-" != $cross_prefix
3053 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3054 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3056 if test $maj != 1 || test $min -lt 5
3065 if test "$nettle" != "no"; then
3067 if $pkg_config --exists "nettle >= 2.7.1"; then
3068 nettle_cflags=$($pkg_config --cflags nettle)
3069 nettle_libs=$($pkg_config --libs nettle)
3070 nettle_version=$($pkg_config --modversion nettle)
3071 # Link test to make sure the given libraries work (e.g for static).
3073 if compile_prog "" "$nettle_libs" ; then
3074 LIBS="$nettle_libs $LIBS"
3075 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3076 if test -z "$gcrypt"; then
3082 if test "$pass" = "yes"
3085 #include <nettle/xts.h>
3090 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3095 if test "$pass" = "no" && test "$nettle" = "yes"; then
3096 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3102 if test "$gcrypt" != "no"; then
3104 if has_libgcrypt; then
3105 gcrypt_cflags=$(libgcrypt-config --cflags)
3106 gcrypt_libs=$(libgcrypt-config --libs)
3107 # Debian has removed -lgpg-error from libgcrypt-config
3108 # as it "spreads unnecessary dependencies" which in
3109 # turn breaks static builds...
3110 if test "$static" = "yes"
3112 gcrypt_libs="$gcrypt_libs -lgpg-error"
3115 # Link test to make sure the given libraries work (e.g for static).
3117 if compile_prog "" "$gcrypt_libs" ; then
3118 LIBS="$gcrypt_libs $LIBS"
3119 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3123 if test "$pass" = "yes"; then
3128 gcry_mac_hd_t handle;
3129 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3130 GCRY_MAC_FLAG_SECURE, NULL);
3134 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3140 gcry_cipher_hd_t handle;
3141 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3145 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3149 elif test "$gcrypt" = "yes"; then
3150 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3157 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3159 error_exit "Only one of gcrypt & nettle can be enabled"
3162 ##########################################
3163 # libtasn1 - only for the TLS creds/session test suite
3168 if $pkg_config --exists "libtasn1"; then
3169 tasn1_cflags=$($pkg_config --cflags libtasn1)
3170 tasn1_libs=$($pkg_config --libs libtasn1)
3176 ##########################################
3179 if test "$auth_pam" != "no"; then
3181 #include <security/pam_appl.h>
3184 const char *service_name = "qemu";
3185 const char *user = "frank";
3186 const struct pam_conv pam_conv = { 0 };
3187 pam_handle_t *pamh = NULL;
3188 pam_start(service_name, user, &pam_conv, &pamh);
3192 if compile_prog "" "-lpam" ; then
3195 if test "$auth_pam" = "yes"; then
3196 feature_not_found "PAM" "Install PAM development package"
3203 ##########################################
3204 # getifaddrs (for tests/test-io-channel-socket )
3207 if ! check_include "ifaddrs.h" ; then
3211 #########################################
3214 if check_include "libdrm/drm.h" ; then
3218 ##########################################
3221 if test "$vte" != "no"; then
3222 vteminversion="0.32.0"
3223 if $pkg_config --exists "vte-2.91"; then
3224 vtepackage="vte-2.91"
3226 vtepackage="vte-2.90"
3228 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3229 vte_cflags=$($pkg_config --cflags $vtepackage)
3230 vte_libs=$($pkg_config --libs $vtepackage)
3231 vteversion=$($pkg_config --modversion $vtepackage)
3233 elif test "$vte" = "yes"; then
3234 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3240 ##########################################
3243 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3244 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3248 if $pkg_config sdl2 --exists; then
3249 sdlconfig="$pkg_config sdl2"
3250 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3251 elif has "$sdl2_config"; then
3252 sdlconfig="$sdl2_config"
3253 sdlversion=$($sdlconfig --version)
3255 if test "$sdl" = "yes" ; then
3256 feature_not_found "sdl" "Install SDL2-devel"
3259 # no need to do the rest
3262 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3263 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3268 #undef main /* We don't want SDL to override our main() */
3269 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3271 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3272 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3273 if test "$static" = "yes" ; then
3274 if $pkg_config sdl2 --exists; then
3275 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3277 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3280 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3282 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3285 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3286 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3287 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3288 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3289 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3291 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3297 else # sdl not found
3298 if test "$sdl" = "yes" ; then
3299 feature_not_found "sdl" "Install SDL2 devel"
3302 fi # sdl compile test
3307 if test "$sdl_image" != "no" ; then
3308 if $pkg_config SDL2_image --exists; then
3309 if test "$static" = "yes"; then
3310 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3312 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3314 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3317 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3318 sdl_libs="$sdl_libs $sdl_image_libs"
3320 if test "$sdl_image" = "yes" ; then
3321 feature_not_found "sdl_image" "Install SDL Image devel"
3329 if test "$sdl" != "no" ; then
3333 if test "$sdl" = "yes" ; then
3336 if test "$sdl_image" = "yes"; then
3337 echo "warning: SDL Image requested, but SDL is not available, disabling"
3342 if test "$sdl" = "yes" ; then
3345 #if defined(SDL_VIDEO_DRIVER_X11)
3346 #include <X11/XKBlib.h>
3348 #error No x11 support
3350 int main(void) { return 0; }
3352 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3354 sdl_cflags="$sdl_cflags $x11_cflags"
3355 sdl_libs="$sdl_libs $x11_libs"
3359 ##########################################
3360 # RDMA needs OpenFabrics libraries
3361 if test "$rdma" != "no" ; then
3363 #include <rdma/rdma_cma.h>
3364 int main(void) { return 0; }
3366 rdma_libs="-lrdmacm -libverbs -libumad"
3367 if compile_prog "" "$rdma_libs" ; then
3369 libs_softmmu="$libs_softmmu $rdma_libs"
3371 if test "$rdma" = "yes" ; then
3373 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3375 " (1) Fast: Install infiniband packages (devel) from your distro." \
3376 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3377 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3383 ##########################################
3386 cat > $TMPC <<EOF &&
3387 #include <sys/mman.h>
3394 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3400 if test "$rdma" = "yes" ; then
3403 if compile_prog "" ""; then
3410 if ! compile_prog "" ""; then
3411 error_exit "PVRDMA is not supported since mremap is not implemented"
3420 if test "$pvrdma" = "yes" ; then
3421 error_exit "PVRDMA requires rdma suppport"
3426 # Let's see if enhanced reg_mr is supported
3427 if test "$pvrdma" = "yes" ; then
3429 cat > $TMPC <<EOF &&
3430 #include <infiniband/verbs.h>
3436 struct ibv_pd *pd = NULL;
3442 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3449 if ! compile_prog "" "-libverbs"; then
3450 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3454 ##########################################
3455 # VNC SASL detection
3456 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3458 #include <sasl/sasl.h>
3460 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3462 # Assuming Cyrus-SASL installed in /usr prefix
3463 # QEMU defines struct iovec in "qemu/osdep.h",
3464 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3465 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3466 vnc_sasl_libs="-lsasl2"
3467 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3469 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3470 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3472 if test "$vnc_sasl" = "yes" ; then
3473 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3479 ##########################################
3480 # VNC JPEG detection
3481 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3484 #include <jpeglib.h>
3485 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3488 vnc_jpeg_libs="-ljpeg"
3489 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3491 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3492 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3494 if test "$vnc_jpeg" = "yes" ; then
3495 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3501 ##########################################
3503 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3505 //#include <stdio.h>
3509 png_structp png_ptr;
3510 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3511 return png_ptr != 0;
3514 if $pkg_config libpng --exists; then
3515 vnc_png_cflags=$($pkg_config libpng --cflags)
3516 vnc_png_libs=$($pkg_config libpng --libs)
3519 vnc_png_libs="-lpng"
3521 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3523 libs_softmmu="$vnc_png_libs $libs_softmmu"
3524 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3526 if test "$vnc_png" = "yes" ; then
3527 feature_not_found "vnc-png" "Install libpng devel"
3533 ##########################################
3535 if test "$xkbcommon" != "no" ; then
3536 if $pkg_config xkbcommon --exists; then
3537 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3538 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3541 if test "$xkbcommon" = "yes" ; then
3542 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3549 ##########################################
3550 # xfsctl() probe, used for file-posix.c
3551 if test "$xfs" != "no" ; then
3553 #include <stddef.h> /* NULL */
3554 #include <xfs/xfs.h>
3557 xfsctl(NULL, 0, 0, NULL);
3561 if compile_prog "" "" ; then
3564 if test "$xfs" = "yes" ; then
3565 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3571 ##########################################
3572 # vde libraries probe
3573 if test "$vde" != "no" ; then
3574 vde_libs="-lvdeplug"
3576 #include <libvdeplug.h>
3579 struct vde_open_args a = {0, 0, 0};
3585 if compile_prog "" "$vde_libs" ; then
3588 if test "$vde" = "yes" ; then
3589 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3595 ##########################################
3596 # netmap support probe
3597 # Apart from looking for netmap headers, we make sure that the host API version
3598 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3599 # a minor/major version number. Minor new features will be marked with values up
3600 # to 15, and if something happens that requires a change to the backend we will
3601 # move above 15, submit the backend fixes and modify this two bounds.
3602 if test "$netmap" != "no" ; then
3604 #include <inttypes.h>
3606 #include <net/netmap.h>
3607 #include <net/netmap_user.h>
3608 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3611 int main(void) { return 0; }
3613 if compile_prog "" "" ; then
3616 if test "$netmap" = "yes" ; then
3617 feature_not_found "netmap"
3623 ##########################################
3624 # libcap-ng library probe
3625 if test "$cap_ng" != "no" ; then
3631 capng_capability_to_name(CAPNG_EFFECTIVE);
3635 if compile_prog "" "$cap_libs" ; then
3637 libs_tools="$cap_libs $libs_tools"
3639 if test "$cap_ng" = "yes" ; then
3640 feature_not_found "cap_ng" "Install libcap-ng devel"
3646 ##########################################
3647 # Sound support libraries probe
3649 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3650 for drv in $audio_drv_list; do
3653 if $pkg_config alsa --exists; then
3654 alsa_libs=$($pkg_config alsa --libs)
3655 if test "$drv" = "try-alsa"; then
3656 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3659 if test "$drv" = "try-alsa"; then
3660 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3662 error_exit "$drv check failed" \
3663 "Make sure to have the $drv libs and headers installed."
3669 if $pkg_config libpulse --exists; then
3670 pulse_libs=$($pkg_config libpulse --libs)
3671 if test "$drv" = "try-pa"; then
3672 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3675 if test "$drv" = "try-pa"; then
3676 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3678 error_exit "$drv check failed" \
3679 "Make sure to have the $drv libs and headers installed."
3685 if test "$sdl" = "no"; then
3686 error_exit "sdl not found or disabled, can not use sdl audio driver"
3691 if test "$sdl" = "no"; then
3692 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3694 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3699 coreaudio_libs="-framework CoreAudio"
3703 dsound_libs="-lole32 -ldxguid"
3712 if $pkg_config jack --exists; then
3713 jack_libs=$($pkg_config jack --libs)
3714 if test "$drv" = "try-jack"; then
3715 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3718 if test "$drv" = "try-jack"; then
3719 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3721 error_exit "$drv check failed" \
3722 "Make sure to have the $drv libs and headers installed."
3728 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3729 error_exit "Unknown driver '$drv' selected" \
3730 "Possible drivers are: $audio_possible_drivers"
3736 ##########################################
3739 if test "$brlapi" != "no" ; then
3740 brlapi_libs="-lbrlapi"
3744 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3746 if compile_prog "" "$brlapi_libs" ; then
3749 if test "$brlapi" = "yes" ; then
3750 feature_not_found "brlapi" "Install brlapi devel"
3756 ##########################################
3758 if test "$iconv" != "no" ; then
3762 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3763 return conv != (iconv_t) -1;
3766 iconv_prefix_list="/usr/local:/usr"
3767 iconv_lib_list=":-liconv"
3769 for iconv_prefix in $iconv_prefix_list; do
3771 iconv_cflags="-I$iconv_prefix/include"
3772 iconv_ldflags="-L$iconv_prefix/lib"
3773 for iconv_link in $iconv_lib_list; do
3775 iconv_lib="$iconv_ldflags $iconv_link"
3776 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3777 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3782 if test "$iconv_found" = yes ; then
3786 if test "$iconv_found" = "yes" ; then
3789 if test "$iconv" = "yes" ; then
3790 feature_not_found "iconv" "Install iconv devel"
3796 ##########################################
3798 if test "$iconv" = "no" ; then
3799 # curses will need iconv
3802 if test "$curses" != "no" ; then
3803 if test "$mingw32" = "yes" ; then
3804 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3805 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3807 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3808 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3815 #include <langinfo.h>
3817 const char *codeset;
3819 setlocale(LC_ALL, "");
3821 addwstr(L"wide chars\n");
3823 add_wch(WACS_DEGREE);
3824 codeset = nl_langinfo(CODESET);
3825 return codeset != 0;
3829 for curses_inc in $curses_inc_list; do
3830 # Make sure we get the wide character prototypes
3831 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3833 for curses_lib in $curses_lib_list; do
3835 if compile_prog "$curses_inc" "$curses_lib" ; then
3840 if test "$curses_found" = yes ; then
3845 if test "$curses_found" = "yes" ; then
3848 if test "$curses" = "yes" ; then
3849 feature_not_found "curses" "Install ncurses devel"
3855 ##########################################
3857 if test "$curl" != "no" ; then
3858 if $pkg_config libcurl --exists; then
3859 curlconfig="$pkg_config libcurl"
3861 curlconfig=curl-config
3864 #include <curl/curl.h>
3865 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3867 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3868 curl_libs=$($curlconfig --libs 2>/dev/null)
3869 if compile_prog "$curl_cflags" "$curl_libs" ; then
3872 if test "$curl" = "yes" ; then
3873 feature_not_found "curl" "Install libcurl devel"
3879 ##########################################
3880 # glib support probe
3883 glib_modules=gthread-2.0
3884 if test "$modules" = yes; then
3885 glib_modules="$glib_modules gmodule-export-2.0"
3887 if test "$plugins" = yes; then
3888 glib_modules="$glib_modules gmodule-2.0"
3891 # This workaround is required due to a bug in pkg-config file for glib as it
3892 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3894 if test "$static" = yes && test "$mingw32" = yes; then
3895 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3898 for i in $glib_modules; do
3899 if $pkg_config --atleast-version=$glib_req_ver $i; then
3900 glib_cflags=$($pkg_config --cflags $i)
3901 glib_libs=$($pkg_config --libs $i)
3902 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3903 LIBS="$glib_libs $LIBS"
3904 libs_qga="$glib_libs $libs_qga"
3906 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3910 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3912 gio_cflags=$($pkg_config --cflags gio-2.0)
3913 gio_libs=$($pkg_config --libs gio-2.0)
3914 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3915 if [ ! -x "$gdbus_codegen" ]; then
3922 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3923 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3924 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3927 # Sanity check that the current size_t matches the
3928 # size that glib thinks it should be. This catches
3929 # problems on multi-arch where people try to build
3930 # 32-bit QEMU while pointing at 64-bit glib headers
3935 #define QEMU_BUILD_BUG_ON(x) \
3936 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3939 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3944 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3945 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3946 "You probably need to set PKG_CONFIG_LIBDIR"\
3947 "to point to the right pkg-config files for your"\
3951 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3954 int main(void) { return 0; }
3956 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3957 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3958 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3959 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3963 # Silence clang warnings triggered by glib < 2.57.2
3966 typedef struct Foo {
3969 static void foo_free(Foo *f)
3973 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3974 int main(void) { return 0; }
3976 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3977 if cc_has_warning_flag "-Wno-unused-function"; then
3978 glib_cflags="$glib_cflags -Wno-unused-function"
3979 CFLAGS="$CFLAGS -Wno-unused-function"
3983 #########################################
3986 if test "$zlib" != "no" ; then
3987 if $pkg_config --exists zlib; then
3988 zlib_cflags=$($pkg_config --cflags zlib)
3989 zlib_libs=$($pkg_config --libs zlib)
3990 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3991 LIBS="$zlib_libs $LIBS"
3995 int main(void) { zlibVersion(); return 0; }
3997 if compile_prog "" "-lz" ; then
4000 error_exit "zlib check failed" \
4001 "Make sure to have the zlib libs and headers installed."
4006 ##########################################
4007 # SHA command probe for modules
4008 if test "$modules" = yes; then
4009 shacmd_probe="sha1sum sha1 shasum"
4010 for c in $shacmd_probe; do
4016 if test "$shacmd" = ""; then
4017 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4021 ##########################################
4022 # pixman support probe
4024 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
4027 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4028 pixman_cflags=$($pkg_config --cflags pixman-1)
4029 pixman_libs=$($pkg_config --libs pixman-1)
4031 error_exit "pixman >= 0.21.8 not present." \
4032 "Please install the pixman devel package."
4035 ##########################################
4036 # libmpathpersist probe
4038 if test "$mpath" != "no" ; then
4039 # probe for the new API
4041 #include <libudev.h>
4042 #include <mpath_persist.h>
4043 unsigned mpath_mx_alloc_len = 1024;
4045 static struct config *multipath_conf;
4046 extern struct udev *udev;
4047 extern struct config *get_multipath_config(void);
4048 extern void put_multipath_config(struct config *conf);
4050 struct config *get_multipath_config(void) { return multipath_conf; }
4051 void put_multipath_config(struct config *conf) { }
4055 multipath_conf = mpath_lib_init();
4059 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4061 mpathpersist_new_api=yes
4063 # probe for the old API
4065 #include <libudev.h>
4066 #include <mpath_persist.h>
4067 unsigned mpath_mx_alloc_len = 1024;
4070 struct udev *udev = udev_new();
4071 mpath_lib_init(udev);
4075 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4077 mpathpersist_new_api=no
4086 ##########################################
4088 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4092 #include <pthread.h>
4093 static void *f(void *p) { return NULL; }
4096 pthread_create(&thread, 0, f, 0);
4100 if compile_prog "" "" ; then
4103 for pthread_lib in $PTHREADLIBS_LIST; do
4104 if compile_prog "" "$pthread_lib" ; then
4107 for lib_entry in $LIBS; do
4108 if test "$lib_entry" = "$pthread_lib"; then
4113 if test "$found" = "no"; then
4114 LIBS="$pthread_lib $LIBS"
4115 libs_qga="$pthread_lib $libs_qga"
4117 PTHREAD_LIB="$pthread_lib"
4123 if test "$mingw32" != yes && test "$pthread" = no; then
4124 error_exit "pthread check failed" \
4125 "Make sure to have the pthread libs and headers installed."
4128 # check for pthread_setname_np with thread id
4129 pthread_setname_np_w_tid=no
4131 #include <pthread.h>
4133 static void *f(void *p) { return NULL; }
4137 pthread_create(&thread, 0, f, 0);
4138 pthread_setname_np(thread, "QEMU");
4142 if compile_prog "" "$pthread_lib" ; then
4143 pthread_setname_np_w_tid=yes
4146 # check for pthread_setname_np without thread id
4147 pthread_setname_np_wo_tid=no
4149 #include <pthread.h>
4151 static void *f(void *p) { pthread_setname_np("QEMU"); }
4155 pthread_create(&thread, 0, f, 0);
4159 if compile_prog "" "$pthread_lib" ; then
4160 pthread_setname_np_wo_tid=yes
4163 ##########################################
4165 if test "$rbd" != "no" ; then
4168 #include <rbd/librbd.h>
4171 rados_create(&cluster, NULL);
4175 rbd_libs="-lrbd -lrados"
4176 if compile_prog "" "$rbd_libs" ; then
4179 if test "$rbd" = "yes" ; then
4180 feature_not_found "rados block device" "Install librbd/ceph devel"
4186 ##########################################
4188 if test "$libssh" != "no" ; then
4189 if $pkg_config --exists libssh; then
4190 libssh_cflags=$($pkg_config libssh --cflags)
4191 libssh_libs=$($pkg_config libssh --libs)
4194 if test "$libssh" = "yes" ; then
4195 error_exit "libssh required for --enable-libssh"
4201 ##########################################
4202 # Check for libssh 0.8
4203 # This is done like this instead of using the LIBSSH_VERSION_* and
4204 # SSH_VERSION_* macros because some distributions in the past shipped
4205 # snapshots of the future 0.8 from Git, and those snapshots did not
4206 # have updated version numbers (still referring to 0.7.0).
4208 if test "$libssh" = "yes"; then
4210 #include <libssh/libssh.h>
4211 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4213 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4214 libssh_cflags="-DHAVE_LIBSSH_0_8