3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
14 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
19 echo "Using './build' as the directory for build output"
21 MARKER=build/auto-created-by-configure
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
37 cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
52 rm -rf build GNUmakefile ; \
60 exec $source_path/configure "$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
72 echo "ERROR: failed to create temporary directory"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
90 echo "#" >> config.log
95 while test -n "$2"; do
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
112 if test -n "$BASH_VERSION"; then eval '
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log 2>&1 || return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
126 # Don't bother rerunning the compile if we were already using -Werror
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log 2>&1 && return $?
134 error_exit "configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
141 do_compiler "$cc" "$@"
145 do_compiler "$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
150 eval $1=\${$1:+\"\$$1 \"}\$2
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159 for arg in $QEMU_CFLAGS; do
161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
173 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
179 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
182 # symbolically link $1 to $2. Portable version of "ln -sf".
185 mkdir -p "$(dirname "$2")"
189 # check whether a command is available to this shell (may be either an
190 # executable or a builtin)
192 type "$1" >/dev/null 2>&1
196 local_ver1=`echo $1 | tr . ' '`
197 local_ver2=`echo $2 | tr . ' '`
201 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
205 # the second argument finished, the first must be greater or equal
206 test $# = 1 && return 0
207 test $local_first -lt $2 && return 1
208 test $local_first -gt $2 && return 0
215 echo "$trace_backends" | grep "$1" >/dev/null
219 eval test -z '"${1#'"$2"'}"'
222 supported_hax_target() {
223 test "$hax" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
233 supported_kvm_target() {
234 test "$kvm" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}:$cpu" in
238 i386:i386 | i386:x86_64 | i386:x32 | \
239 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
240 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
241 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
249 supported_xen_target() {
250 test "$xen" = "yes" || return 1
251 glob "$1" "*-softmmu" || return 1
252 # Only i386 and x86_64 provide the xenpv machine.
253 case "${1%-softmmu}" in
261 supported_hvf_target() {
262 test "$hvf" = "yes" || return 1
263 glob "$1" "*-softmmu" || return 1
264 case "${1%-softmmu}" in
272 supported_whpx_target() {
273 test "$whpx" = "yes" || return 1
274 glob "$1" "*-softmmu" || return 1
275 case "${1%-softmmu}" in
288 if test "$linux" != "yes"; then
289 print_error "Target '$target' is only available on a Linux host"
294 if test "$bsd" != "yes"; then
295 print_error "Target '$target' is only available on a BSD host"
300 print_error "Invalid target name '$target'"
304 test "$tcg" = "yes" && return 0
305 supported_kvm_target "$1" && return 0
306 supported_xen_target "$1" && return 0
307 supported_hax_target "$1" && return 0
308 supported_hvf_target "$1" && return 0
309 supported_whpx_target "$1" && return 0
310 print_error "TCG disabled, but hardware accelerator not available for '$target'"
316 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
319 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
321 error_exit "main directory cannot contain spaces nor colons"
327 interp_prefix="/usr/gnemul/qemu-%M"
331 block_drv_rw_whitelist=""
332 block_drv_ro_whitelist=""
340 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
342 if test -e "$source_path/.git"
345 git_submodules="ui/keycodemapdb"
346 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
347 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
352 if ! test -f "$source_path/ui/keycodemapdb/README"
355 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
357 echo "This is not a GIT checkout but module content appears to"
358 echo "be missing. Do not use 'git archive' or GitHub download links"
359 echo "to acquire QEMU source archives. Non-GIT builds are only"
360 echo "supported with source archives linked from:"
362 echo " https://www.qemu.org/download/#source"
364 echo "Developers working with GIT can use scripts/archive-source.sh"
365 echo "if they need to create valid source archives."
372 # Don't accept a target_list environment variable.
374 unset target_list_exclude
376 # Default value for a variable defining feature "foo".
377 # * foo="no" feature will only be used if --enable-foo arg is given
378 # * foo="" feature will be searched for, and if found, will be used
379 # unless --disable-foo is given
380 # * foo="yes" this value will only be set by --enable-foo flag.
381 # feature will searched for,
382 # if not found, configure exits with error
384 # Always add --enable-foo and --disable-foo command line args.
385 # Distributions want to ensure that several features are compiled in, and it
386 # is impossible without a --enable-foo that exits if a feature is not found.
407 xen_pci_passthrough=""
479 guest_agent_with_vss="no"
480 guest_agent_ntddscsi="no"
489 debug_stack_usage="no"
493 glusterfs_xlator_opt="no"
494 glusterfs_discard="no"
495 glusterfs_fallocate="no"
496 glusterfs_zerofill="no"
497 glusterfs_ftruncate_has_stat="no"
498 glusterfs_iocb_has_stat="no"
501 tls_priority="NORMAL"
508 qemu_private_xts="yes"
514 live_block_migration="yes"
531 default_devices="yes"
545 deprecated_features=""
547 # parse CC options first
549 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
551 --cross-prefix=*) cross_prefix="$optarg"
555 --cxx=*) CXX="$optarg"
557 --cpu=*) cpu="$optarg"
559 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
560 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
562 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
564 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
565 EXTRA_LDFLAGS="$optarg"
567 --enable-debug-info) debug_info="yes"
569 --disable-debug-info) debug_info="no"
571 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
573 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
574 eval "cross_cc_cflags_${cc_arch}=\$optarg"
575 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
577 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
578 cc_archs="$cc_archs $cc_arch"
579 eval "cross_cc_${cc_arch}=\$optarg"
580 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
585 # Using uname is really, really broken. Once we have the right set of checks
586 # we can eliminate its usage altogether.
588 # Preferred compiler:
590 # ${cross_prefix}gcc (if cross-prefix specified)
592 if test -z "${CC}${cross_prefix}"; then
595 cc="${CC-${cross_prefix}gcc}"
598 if test -z "${CXX}${cross_prefix}"; then
601 cxx="${CXX-${cross_prefix}g++}"
604 ar="${AR-${cross_prefix}ar}"
605 as="${AS-${cross_prefix}as}"
608 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
609 ld="${LD-${cross_prefix}ld}"
610 ranlib="${RANLIB-${cross_prefix}ranlib}"
611 nm="${NM-${cross_prefix}nm}"
612 strip="${STRIP-${cross_prefix}strip}"
613 windres="${WINDRES-${cross_prefix}windres}"
614 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
616 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
618 pkg_config=query_pkg_config
619 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
621 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
622 ARFLAGS="${ARFLAGS-rv}"
624 # default flags for all hosts
625 # We use -fwrapv to tell the compiler that we require a C dialect where
626 # left shift of signed integers is well defined and has the expected
627 # 2s-complement style results. (Both clang and gcc agree that it
628 # provides these semantics.)
629 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
630 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
631 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
632 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
633 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
634 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
635 CFLAGS="-std=gnu99 -Wall"
641 #error $1 not defined
643 int main(void) { return 0; }
651 int main(void) { return 0; }
658 int main(void) { return 0; }
662 write_c_fuzzer_skeleton() {
665 #include <sys/types.h>
666 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
667 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
671 if check_define __linux__ ; then
673 elif check_define _WIN32 ; then
675 elif check_define __OpenBSD__ ; then
677 elif check_define __sun__ ; then
679 elif check_define __HAIKU__ ; then
681 elif check_define __FreeBSD__ ; then
683 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
684 targetos='GNU/kFreeBSD'
685 elif check_define __DragonFly__ ; then
687 elif check_define __NetBSD__; then
689 elif check_define __APPLE__; then
692 # This is a fatal error, but don't report it yet, because we
693 # might be going to just print the --help text, or it might
694 # be the result of a missing compiler.
699 # Some host OSes need non-standard checks for which CPU to use.
700 # Note that these checks are broken for cross-compilation: if you're
701 # cross-compiling to one of these OSes then you'll need to specify
702 # the correct CPU with the --cpu option.
705 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
706 # run 64-bit userspace code.
707 # If the user didn't specify a CPU explicitly and the kernel says this is
708 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
709 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
714 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
715 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
720 if test ! -z "$cpu" ; then
721 # command line argument
723 elif check_define __i386__ ; then
725 elif check_define __x86_64__ ; then
726 if check_define __ILP32__ ; then
731 elif check_define __sparc__ ; then
732 if check_define __arch64__ ; then
737 elif check_define _ARCH_PPC ; then
738 if check_define _ARCH_PPC64 ; then
739 if check_define _LITTLE_ENDIAN ; then
747 elif check_define __mips__ ; then
749 elif check_define __s390__ ; then
750 if check_define __s390x__ ; then
755 elif check_define __riscv ; then
756 if check_define _LP64 ; then
761 elif check_define __arm__ ; then
763 elif check_define __aarch64__ ; then
770 # Normalise host CPU name and set ARCH.
771 # Note that this case should only have supported host CPUs, not guests.
773 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
778 i386|i486|i586|i686|i86pc|BePC)
797 # This will result in either an error or falling back to TCI later
801 if test -z "$ARCH"; then
807 # host *BSD for user mode
816 audio_possible_drivers="dsound sdl"
817 if check_include dsound.h; then
818 audio_drv_list="dsound"
827 audio_drv_list="oss try-sdl"
828 audio_possible_drivers="oss sdl pa"
833 audio_drv_list="oss try-sdl"
834 audio_possible_drivers="oss sdl pa"
835 # needed for kinfo_getvmmap(3) in libutil.h
836 netmap="" # enable netmap autodetect
837 HOST_VARIANT_DIR="freebsd"
842 audio_drv_list="oss try-sdl"
843 audio_possible_drivers="oss sdl pa"
844 HOST_VARIANT_DIR="dragonfly"
850 audio_drv_list="oss try-sdl"
851 audio_possible_drivers="oss sdl"
853 HOST_VARIANT_DIR="netbsd"
858 audio_drv_list="try-sdl"
859 audio_possible_drivers="sdl"
860 HOST_VARIANT_DIR="openbsd"
867 if [ "$cpu" = "x86_64" ] ; then
868 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
869 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
872 audio_drv_list="coreaudio try-sdl"
873 audio_possible_drivers="coreaudio sdl"
874 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
875 # Disable attempts to use ObjectiveC features in os/object.h since they
876 # won't work when we're compiling with gcc as a C compiler.
877 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
878 HOST_VARIANT_DIR="darwin"
883 smbd="${SMBD-/usr/sfw/sbin/smbd}"
884 if test -f /usr/include/sys/soundcard.h ; then
885 audio_drv_list="oss try-sdl"
887 audio_possible_drivers="oss sdl"
888 # needed for CMSG_ macros in sys/socket.h
889 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
890 # needed for TIOCWIN* defines in termios.h
891 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
895 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
898 audio_drv_list="try-pa oss"
899 audio_possible_drivers="oss alsa sdl pa"
903 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES"
908 if [ "$bsd" = "yes" ] ; then
909 if [ "$darwin" != "yes" ] ; then
914 : ${make=${MAKE-make}}
916 # We prefer python 3.x. A bare 'python' is traditionally
917 # python 2.x, but some distros have it as python 3.x, so
921 for binary in "${PYTHON-python3}" python
925 python=$(command -v "$binary")
931 for binary in sphinx-build-3 sphinx-build
935 sphinx_build=$(command -v "$binary")
940 # Check for ancillary tools used in testing
942 for binary in genisoimage mkisofs
946 genisoimage=$(command -v "$binary")
951 : ${smbd=${SMBD-/usr/sbin/smbd}}
953 # Default objcc to clang if available, otherwise use CC
960 if test "$mingw32" = "yes" ; then
963 # MinGW needs -mthreads for TLS and macro _MT.
964 CFLAGS="-mthreads $CFLAGS"
966 prefix="c:/Program Files/QEMU"
968 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
974 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
976 --help|-h) show_help=yes
978 --version|-V) exec cat $source_path/VERSION
980 --prefix=*) prefix="$optarg"
982 --interp-prefix=*) interp_prefix="$optarg"
988 --host-cc=*) host_cc="$optarg"
992 --iasl=*) iasl="$optarg"
994 --objcc=*) objcc="$optarg"
996 --make=*) make="$optarg"
1000 --python=*) python="$optarg" ; explicit_python=yes
1002 --sphinx-build=*) sphinx_build="$optarg"
1004 --skip-meson) skip_meson=yes
1006 --meson=*) meson="$optarg"
1008 --ninja=*) ninja="$optarg"
1010 --smbd=*) smbd="$optarg"
1018 --enable-debug-info)
1020 --disable-debug-info)
1030 --disable-module-upgrades) module_upgrades="no"
1032 --enable-module-upgrades) module_upgrades="yes"
1036 --target-list=*) target_list="$optarg"
1037 if test "$target_list_exclude"; then
1038 error_exit "Can't mix --target-list with --target-list-exclude"
1041 --target-list-exclude=*) target_list_exclude="$optarg"
1042 if test "$target_list"; then
1043 error_exit "Can't mix --target-list-exclude with --target-list"
1046 --enable-trace-backends=*) trace_backends="$optarg"
1048 # XXX: backwards compatibility
1049 --enable-trace-backend=*) trace_backends="$optarg"
1051 --with-trace-file=*) trace_file="$optarg"
1053 --with-default-devices) default_devices="yes"
1055 --without-default-devices) default_devices="no"
1057 --enable-gprof) gprof="yes"
1059 --enable-gcov) gcov="yes"
1063 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1065 --mandir=*) mandir="$optarg"
1067 --bindir=*) bindir="$optarg"
1069 --libdir=*) libdir="$optarg"
1071 --libexecdir=*) libexecdir="$optarg"
1073 --includedir=*) includedir="$optarg"
1075 --datadir=*) datadir="$optarg"
1077 --with-suffix=*) qemu_suffix="$optarg"
1079 --docdir=*) qemu_docdir="$optarg"
1081 --sysconfdir=*) sysconfdir="$optarg"
1083 --localstatedir=*) local_statedir="$optarg"
1085 --firmwarepath=*) firmwarepath="$optarg"
1087 --host=*|--build=*|\
1088 --disable-dependency-tracking|\
1089 --sbindir=*|--sharedstatedir=*|\
1090 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1091 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1092 # These switches are silently ignored, for compatibility with
1093 # autoconf-generated configure scripts. This allows QEMU's
1094 # configure to be used by RPM and similar macros that set
1095 # lots of directory switches by default.
1097 --disable-sdl) sdl="disabled"
1099 --enable-sdl) sdl="enabled"
1101 --disable-sdl-image) sdl_image="disabled"
1103 --enable-sdl-image) sdl_image="enabled"
1105 --disable-qom-cast-debug) qom_cast_debug="no"
1107 --enable-qom-cast-debug) qom_cast_debug="yes"
1109 --disable-virtfs) virtfs="no"
1111 --enable-virtfs) virtfs="yes"
1113 --disable-mpath) mpath="no"
1115 --enable-mpath) mpath="yes"
1117 --disable-vnc) vnc="disabled"
1119 --enable-vnc) vnc="enabled"
1121 --disable-gettext) gettext="false"
1123 --enable-gettext) gettext="true"
1125 --oss-lib=*) oss_lib="$optarg"
1127 --audio-drv-list=*) audio_drv_list="$optarg"
1129 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1131 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1133 --enable-debug-tcg) debug_tcg="yes"
1135 --disable-debug-tcg) debug_tcg="no"
1138 # Enable debugging options that aren't excessively noisy
1145 --enable-sanitizers) sanitizers="yes"
1147 --disable-sanitizers) sanitizers="no"
1149 --enable-tsan) tsan="yes"
1151 --disable-tsan) tsan="no"
1153 --enable-sparse) sparse="yes"
1155 --disable-sparse) sparse="no"
1157 --disable-strip) strip_opt="no"
1159 --disable-vnc-sasl) vnc_sasl="disabled"
1161 --enable-vnc-sasl) vnc_sasl="enabled"
1163 --disable-vnc-jpeg) vnc_jpeg="disabled"
1165 --enable-vnc-jpeg) vnc_jpeg="enabled"
1167 --disable-vnc-png) vnc_png="disabled"
1169 --enable-vnc-png) vnc_png="enabled"
1171 --disable-slirp) slirp="no"
1173 --enable-slirp=git) slirp="git"
1175 --enable-slirp=system) slirp="system"
1177 --disable-vde) vde="no"
1179 --enable-vde) vde="yes"
1181 --disable-netmap) netmap="no"
1183 --enable-netmap) netmap="yes"
1185 --disable-xen) xen="no"
1187 --enable-xen) xen="yes"
1189 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1191 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1193 --disable-brlapi) brlapi="no"
1195 --enable-brlapi) brlapi="yes"
1197 --disable-kvm) kvm="no"
1199 --enable-kvm) kvm="yes"
1201 --disable-hax) hax="no"
1203 --enable-hax) hax="yes"
1205 --disable-hvf) hvf="no"
1207 --enable-hvf) hvf="yes"
1209 --disable-whpx) whpx="no"
1211 --enable-whpx) whpx="yes"
1213 --disable-tcg-interpreter) tcg_interpreter="no"
1215 --enable-tcg-interpreter) tcg_interpreter="yes"
1217 --disable-cap-ng) cap_ng="no"
1219 --enable-cap-ng) cap_ng="yes"
1221 --disable-tcg) tcg="no"
1223 --enable-tcg) tcg="yes"
1225 --disable-malloc-trim) malloc_trim="no"
1227 --enable-malloc-trim) malloc_trim="yes"
1229 --disable-spice) spice="no"
1231 --enable-spice) spice="yes"
1233 --disable-libiscsi) libiscsi="no"
1235 --enable-libiscsi) libiscsi="yes"
1237 --disable-libnfs) libnfs="no"
1239 --enable-libnfs) libnfs="yes"
1241 --enable-profiler) profiler="yes"
1243 --disable-cocoa) cocoa="no"
1247 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1249 --disable-system) softmmu="no"
1251 --enable-system) softmmu="yes"
1258 --disable-linux-user) linux_user="no"
1260 --enable-linux-user) linux_user="yes"
1262 --disable-bsd-user) bsd_user="no"
1264 --enable-bsd-user) bsd_user="yes"
1266 --enable-pie) pie="yes"
1268 --disable-pie) pie="no"
1270 --enable-werror) werror="yes"
1272 --disable-werror) werror="no"
1274 --enable-stack-protector) stack_protector="yes"
1276 --disable-stack-protector) stack_protector="no"
1278 --enable-safe-stack) safe_stack="yes"
1280 --disable-safe-stack) safe_stack="no"
1282 --disable-curses) curses="no"
1284 --enable-curses) curses="yes"
1286 --disable-iconv) iconv="no"
1288 --enable-iconv) iconv="yes"
1290 --disable-curl) curl="no"
1292 --enable-curl) curl="yes"
1294 --disable-fdt) fdt="no"
1296 --enable-fdt) fdt="yes"
1298 --disable-linux-aio) linux_aio="no"
1300 --enable-linux-aio) linux_aio="yes"
1302 --disable-linux-io-uring) linux_io_uring="no"
1304 --enable-linux-io-uring) linux_io_uring="yes"
1306 --disable-attr) attr="no"
1308 --enable-attr) attr="yes"
1310 --disable-membarrier) membarrier="no"
1312 --enable-membarrier) membarrier="yes"
1314 --disable-blobs) blobs="no"
1316 --with-pkgversion=*) pkgversion="$optarg"
1318 --with-coroutine=*) coroutine="$optarg"
1320 --disable-coroutine-pool) coroutine_pool="no"
1322 --enable-coroutine-pool) coroutine_pool="yes"
1324 --enable-debug-stack-usage) debug_stack_usage="yes"
1326 --enable-crypto-afalg) crypto_afalg="yes"
1328 --disable-crypto-afalg) crypto_afalg="no"
1330 --disable-docs) docs="no"
1332 --enable-docs) docs="yes"
1334 --disable-vhost-net) vhost_net="no"
1336 --enable-vhost-net) vhost_net="yes"
1338 --disable-vhost-crypto) vhost_crypto="no"
1340 --enable-vhost-crypto) vhost_crypto="yes"
1342 --disable-vhost-scsi) vhost_scsi="no"
1344 --enable-vhost-scsi) vhost_scsi="yes"
1346 --disable-vhost-vsock) vhost_vsock="no"
1348 --enable-vhost-vsock) vhost_vsock="yes"
1350 --disable-vhost-user-fs) vhost_user_fs="no"
1352 --enable-vhost-user-fs) vhost_user_fs="yes"
1354 --disable-opengl) opengl="no"
1356 --enable-opengl) opengl="yes"
1358 --disable-rbd) rbd="no"
1360 --enable-rbd) rbd="yes"
1362 --disable-xfsctl) xfs="no"
1364 --enable-xfsctl) xfs="yes"
1366 --disable-smartcard) smartcard="no"
1368 --enable-smartcard) smartcard="yes"
1370 --disable-u2f) u2f="disabled"
1372 --enable-u2f) u2f="enabled"
1374 --disable-libusb) libusb="no"
1376 --enable-libusb) libusb="yes"
1378 --disable-usb-redir) usb_redir="no"
1380 --enable-usb-redir) usb_redir="yes"
1382 --disable-zlib-test)
1384 --disable-lzo) lzo="no"
1386 --enable-lzo) lzo="yes"
1388 --disable-snappy) snappy="no"
1390 --enable-snappy) snappy="yes"
1392 --disable-bzip2) bzip2="no"
1394 --enable-bzip2) bzip2="yes"
1396 --enable-lzfse) lzfse="yes"
1398 --disable-lzfse) lzfse="no"
1400 --disable-zstd) zstd="no"
1402 --enable-zstd) zstd="yes"
1404 --enable-guest-agent) guest_agent="yes"
1406 --disable-guest-agent) guest_agent="no"
1408 --enable-guest-agent-msi) guest_agent_msi="yes"
1410 --disable-guest-agent-msi) guest_agent_msi="no"
1412 --with-vss-sdk) vss_win32_sdk=""
1414 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1416 --without-vss-sdk) vss_win32_sdk="no"
1418 --with-win-sdk) win_sdk=""
1420 --with-win-sdk=*) win_sdk="$optarg"
1422 --without-win-sdk) win_sdk="no"
1424 --enable-tools) want_tools="yes"
1426 --disable-tools) want_tools="no"
1428 --enable-seccomp) seccomp="yes"
1430 --disable-seccomp) seccomp="no"
1432 --disable-glusterfs) glusterfs="no"
1434 --disable-avx2) avx2_opt="no"
1436 --enable-avx2) avx2_opt="yes"
1438 --disable-avx512f) avx512f_opt="no"
1440 --enable-avx512f) avx512f_opt="yes"
1443 --enable-glusterfs) glusterfs="yes"
1445 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1446 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1448 --enable-vhdx|--disable-vhdx)
1449 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1451 --enable-uuid|--disable-uuid)
1452 echo "$0: $opt is obsolete, UUID support is always built" >&2
1454 --disable-gtk) gtk="no"
1456 --enable-gtk) gtk="yes"
1458 --tls-priority=*) tls_priority="$optarg"
1460 --disable-gnutls) gnutls="no"
1462 --enable-gnutls) gnutls="yes"
1464 --disable-nettle) nettle="no"
1466 --enable-nettle) nettle="yes"
1468 --disable-gcrypt) gcrypt="no"
1470 --enable-gcrypt) gcrypt="yes"
1472 --disable-auth-pam) auth_pam="no"
1474 --enable-auth-pam) auth_pam="yes"
1476 --enable-rdma) rdma="yes"
1478 --disable-rdma) rdma="no"
1480 --enable-pvrdma) pvrdma="yes"
1482 --disable-pvrdma) pvrdma="no"
1484 --disable-vte) vte="no"
1486 --enable-vte) vte="yes"
1488 --disable-virglrenderer) virglrenderer="no"
1490 --enable-virglrenderer) virglrenderer="yes"
1492 --disable-tpm) tpm="no"
1494 --enable-tpm) tpm="yes"
1496 --disable-libssh) libssh="no"
1498 --enable-libssh) libssh="yes"
1500 --disable-live-block-migration) live_block_migration="no"
1502 --enable-live-block-migration) live_block_migration="yes"
1504 --disable-numa) numa="no"
1506 --enable-numa) numa="yes"
1508 --disable-libxml2) libxml2="no"
1510 --enable-libxml2) libxml2="yes"
1512 --disable-tcmalloc) tcmalloc="no"
1514 --enable-tcmalloc) tcmalloc="yes"
1516 --disable-jemalloc) jemalloc="no"
1518 --enable-jemalloc) jemalloc="yes"
1520 --disable-replication) replication="no"
1522 --enable-replication) replication="yes"
1524 --disable-bochs) bochs="no"
1526 --enable-bochs) bochs="yes"
1528 --disable-cloop) cloop="no"
1530 --enable-cloop) cloop="yes"
1532 --disable-dmg) dmg="no"
1534 --enable-dmg) dmg="yes"
1536 --disable-qcow1) qcow1="no"
1538 --enable-qcow1) qcow1="yes"
1540 --disable-vdi) vdi="no"
1542 --enable-vdi) vdi="yes"
1544 --disable-vvfat) vvfat="no"
1546 --enable-vvfat) vvfat="yes"
1548 --disable-qed) qed="no"
1550 --enable-qed) qed="yes"
1552 --disable-parallels) parallels="no"
1554 --enable-parallels) parallels="yes"
1556 --disable-sheepdog) sheepdog="no"
1558 --enable-sheepdog) sheepdog="yes"
1560 --disable-vhost-user) vhost_user="no"
1562 --enable-vhost-user) vhost_user="yes"
1564 --disable-vhost-vdpa) vhost_vdpa="no"
1566 --enable-vhost-vdpa) vhost_vdpa="yes"
1568 --disable-vhost-kernel) vhost_kernel="no"
1570 --enable-vhost-kernel) vhost_kernel="yes"
1572 --disable-capstone) capstone="no"
1574 --enable-capstone) capstone="yes"
1576 --enable-capstone=git) capstone="git"
1578 --enable-capstone=system) capstone="system"
1580 --with-git=*) git="$optarg"
1582 --enable-git-update) git_update=yes
1584 --disable-git-update) git_update=no
1586 --enable-debug-mutex) debug_mutex=yes
1588 --disable-debug-mutex) debug_mutex=no
1590 --enable-libpmem) libpmem=yes
1592 --disable-libpmem) libpmem=no
1594 --enable-xkbcommon) xkbcommon="enabled"
1596 --disable-xkbcommon) xkbcommon="disabled"
1598 --enable-plugins) plugins="yes"
1600 --disable-plugins) plugins="no"
1602 --enable-containers) use_containers="yes"
1604 --disable-containers) use_containers="no"
1606 --enable-fuzzing) fuzzing=yes
1608 --disable-fuzzing) fuzzing=no
1610 --gdb=*) gdb_bin="$optarg"
1612 --enable-rng-none) rng_none=yes
1614 --disable-rng-none) rng_none=no
1616 --enable-keyring) secret_keyring="yes"
1618 --disable-keyring) secret_keyring="no"
1620 --enable-libdaxctl) libdaxctl=yes
1622 --disable-libdaxctl) libdaxctl=no
1625 echo "ERROR: unknown option $opt"
1626 echo "Try '$0 --help' for more information"
1632 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
1633 libdir="${libdir:-$prefix/lib}"
1634 libexecdir="${libexecdir:-$prefix/libexec}"
1635 includedir="${includedir:-$prefix/include}"
1637 if test "$mingw32" = "yes" ; then
1642 sysconfdir="$prefix"
1645 mandir="${mandir:-$prefix/share/man}"
1646 datadir="${datadir:-$prefix/share}"
1647 docdir="${docdir:-$prefix/share/doc}"
1648 bindir="${bindir:-$prefix/bin}"
1649 sysconfdir="${sysconfdir:-$prefix/etc}"
1650 local_statedir="${local_statedir:-$prefix/var}"
1656 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1660 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1663 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1664 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1667 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1668 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1672 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1676 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1680 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1683 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1684 # If we truly care, we should simply detect this case at
1685 # runtime and generate the fallback to serial emulation.
1686 CPU_CFLAGS="-m64 -mcx16"
1687 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1691 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1693 # No special flags required for other host CPUs
1696 eval "cross_cc_${cpu}=\$host_cc"
1697 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1698 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1700 # For user-mode emulation the host arch has to be one we explicitly
1701 # support, even if we're using TCI.
1702 if [ "$ARCH" = "unknown" ]; then
1707 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1711 default_target_list=""
1715 if [ "$softmmu" = "yes" ]; then
1716 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1718 if [ "$linux_user" = "yes" ]; then
1719 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1721 if [ "$bsd_user" = "yes" ]; then
1722 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1725 if test -z "$target_list_exclude" -a -z "$target_list"; then
1726 # if the user doesn't specify anything lets skip deprecating stuff
1727 target_list_exclude=ppc64abi32-linux-user
1730 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1731 for config in $mak_wilds; do
1732 target="$(basename "$config" .mak)"
1734 for excl in $exclude_list; do
1735 if test "$excl" = "$target"; then
1740 if test "$exclude" = "no"; then
1741 default_target_list="${default_target_list} $target"
1745 # Enumerate public trace backends for --help output
1746 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1748 if test x"$show_help" = x"yes" ; then
1751 Usage: configure [options]
1752 Options: [defaults in brackets after descriptions]
1755 --help print this message
1756 --prefix=PREFIX install in PREFIX [$prefix]
1757 --interp-prefix=PREFIX where to find shared libraries, etc.
1758 use %M for cpu name [$interp_prefix]
1759 --target-list=LIST set target list (default: build everything)
1760 $(echo Available targets: $default_target_list | \
1761 fold -s -w 53 | sed -e 's/^/ /')
1762 --target-list-exclude=LIST exclude a set of targets from the default target-list
1764 Advanced options (experts only):
1765 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1766 --cc=CC use C compiler CC [$cc]
1767 --iasl=IASL use ACPI compiler IASL [$iasl]
1768 --host-cc=CC use C compiler CC [$host_cc] for code run at
1770 --cxx=CXX use C++ compiler CXX [$cxx]
1771 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1772 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1773 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1774 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1775 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1776 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1777 --make=MAKE use specified make [$make]
1778 --python=PYTHON use specified python [$python]
1779 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1780 --meson=MESON use specified meson [$meson]
1781 --ninja=NINJA use specified ninja [$ninja]
1782 --smbd=SMBD use specified smbd [$smbd]
1783 --with-git=GIT use specified git [$git]
1784 --static enable static build [$static]
1785 --mandir=PATH install man pages in PATH
1786 --datadir=PATH install firmware in PATH/$qemu_suffix
1787 --docdir=PATH install documentation in PATH/$qemu_suffix
1788 --bindir=PATH install binaries in PATH
1789 --libdir=PATH install libraries in PATH
1790 --libexecdir=PATH install helper binaries in PATH
1791 --sysconfdir=PATH install config in PATH/$qemu_suffix
1792 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1793 --firmwarepath=PATH search PATH for firmware files
1794 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1795 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1796 --with-pkgversion=VERS use specified string as sub-version of the package
1797 --enable-debug enable common debug build options
1798 --enable-sanitizers enable default sanitizers
1799 --enable-tsan enable thread sanitizer
1800 --disable-strip disable stripping binaries
1801 --disable-werror disable compilation abort on warning
1802 --disable-stack-protector disable compiler-provided stack protection
1803 --audio-drv-list=LIST set audio drivers list:
1804 Available drivers: $audio_possible_drivers
1805 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1806 --block-drv-rw-whitelist=L
1807 set block driver read-write whitelist
1808 (affects only QEMU, not qemu-img)
1809 --block-drv-ro-whitelist=L
1810 set block driver read-only whitelist
1811 (affects only QEMU, not qemu-img)
1812 --enable-trace-backends=B Set trace backend
1813 Available backends: $trace_backend_list
1814 --with-trace-file=NAME Full PATH,NAME of file to store traces
1816 --disable-slirp disable SLIRP userspace network connectivity
1817 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1818 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1819 --oss-lib path to OSS library
1820 --cpu=CPU Build for host CPU [$cpu]
1821 --with-coroutine=BACKEND coroutine backend. Supported options:
1822 ucontext, sigaltstack, windows
1823 --enable-gcov enable test coverage analysis with gcov
1824 --disable-blobs disable installing provided firmware blobs
1825 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1826 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1827 --tls-priority default TLS protocol/cipher priority string
1828 --enable-gprof QEMU profiling with gprof
1829 --enable-profiler profiler support
1830 --enable-debug-stack-usage
1831 track the maximum stack usage of stacks created by qemu_alloc_stack
1833 enable plugins via shared library loading
1834 --disable-containers don't use containers for cross-building
1835 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1837 Optional features, enabled with --enable-FEATURE and
1838 disabled with --disable-FEATURE, default is enabled if available:
1840 system all system emulation targets
1841 user supported user emulation targets
1842 linux-user all linux usermode emulation targets
1843 bsd-user all BSD usermode emulation targets
1844 docs build documentation
1845 guest-agent build the QEMU Guest Agent
1846 guest-agent-msi build guest agent Windows MSI installation package
1847 pie Position Independent Executables
1848 modules modules support (non-Windows)
1849 module-upgrades try to load modules from alternate paths for upgrades
1850 debug-tcg TCG debugging (default is disabled)
1851 debug-info debugging information
1852 sparse sparse checker
1853 safe-stack SafeStack Stack Smash Protection. Depends on
1854 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1856 gnutls GNUTLS cryptography support
1857 nettle nettle cryptography support
1858 gcrypt libgcrypt cryptography support
1859 auth-pam PAM access control
1861 sdl-image SDL Image support for icons
1863 vte vte support for the gtk UI
1865 iconv font glyph conversion support
1867 vnc-sasl SASL encryption for VNC server
1868 vnc-jpeg JPEG lossy compression for VNC server
1869 vnc-png PNG compression for VNC server
1870 cocoa Cocoa UI (Mac OS X only)
1872 mpath Multipath persistent reservation passthrough
1873 xen xen backend driver support
1874 xen-pci-passthrough PCI passthrough support for Xen
1875 brlapi BrlAPI (Braile)
1876 curl curl connectivity
1877 membarrier membarrier system call (for Linux 4.14+ or Windows)
1879 kvm KVM acceleration support
1880 hax HAX acceleration support
1881 hvf Hypervisor.framework acceleration support
1882 whpx Windows Hypervisor Platform acceleration support
1883 rdma Enable RDMA-based migration
1884 pvrdma Enable PVRDMA support
1885 vde support for vde network
1886 netmap support for netmap network
1887 linux-aio Linux AIO support
1888 linux-io-uring Linux io_uring support
1889 cap-ng libcap-ng support
1890 attr attr and xattr support
1891 vhost-net vhost-net kernel acceleration support
1892 vhost-vsock virtio sockets device support
1893 vhost-scsi vhost-scsi kernel target support
1894 vhost-crypto vhost-user-crypto backend support
1895 vhost-kernel vhost kernel backend support
1896 vhost-user vhost-user backend support
1897 vhost-vdpa vhost-vdpa kernel backend support
1899 rbd rados block device (rbd)
1900 libiscsi iscsi support
1902 smartcard smartcard support (libcacard)
1903 u2f U2F support (u2f-emu)
1904 libusb libusb (for usb passthrough)
1905 live-block-migration Block migration in the main migration stream
1906 usb-redir usb network redirection support
1907 lzo support of lzo compression library
1908 snappy support of snappy compression library
1909 bzip2 support of bzip2 compression library
1910 (for reading bzip2-compressed dmg images)
1911 lzfse support of lzfse compression library
1912 (for reading lzfse-compressed dmg images)
1913 zstd support for zstd compression library
1914 (for migration compression and qcow2 cluster compression)
1915 seccomp seccomp support
1916 coroutine-pool coroutine freelist (better performance)
1917 glusterfs GlusterFS backend
1919 libssh ssh block device support
1920 numa libnuma support
1921 libxml2 for Parallels image format
1922 tcmalloc tcmalloc support
1923 jemalloc jemalloc support
1924 avx2 AVX2 optimization support
1925 avx512f AVX512F optimization support
1926 replication replication support
1927 opengl opengl support
1928 virglrenderer virgl rendering support
1929 xfsctl xfsctl support
1930 qom-cast-debug cast debugging support
1931 tools build qemu-io, qemu-nbd and qemu-img tools
1932 bochs bochs image format support
1933 cloop cloop image format support
1934 dmg dmg image format support
1935 qcow1 qcow v1 image format support
1936 vdi vdi image format support
1937 vvfat vvfat image format support
1938 qed qed image format support
1939 parallels parallels image format support
1940 sheepdog sheepdog block driver support
1941 crypto-afalg Linux AF_ALG crypto backend driver
1942 capstone capstone disassembler support
1943 debug-mutex mutex debugging support
1944 libpmem libpmem support
1945 xkbcommon xkbcommon support
1946 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1947 libdaxctl libdaxctl support
1949 NOTE: The object files are built at the place where configure is launched
1954 # Remove old dependency files to make sure that they get properly regenerated
1955 rm -f */config-devices.mak.d
1957 if test -z "$python"
1959 error_exit "Python not found. Use --python=/path/to/python"
1962 # Note that if the Python conditional here evaluates True we will exit
1963 # with status 1 which is a shell 'false' value.
1964 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1965 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1966 "Use --python=/path/to/python to specify a supported Python."
1969 # Preserve python version since some functionality is dependent on it
1970 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)
1972 # Suppress writing compiled files
1975 if test -z "$meson"; then
1976 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
1978 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1980 elif test -e "${source_path}/meson/meson.py" ; then
1983 if test "$explicit_python" = yes; then
1984 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1986 error_exit "Meson not found. Use --meson=/path/to/meson"
1990 # Meson uses its own Python interpreter to invoke other Python scripts,
1991 # but the user wants to use the one they specified with --python.
1993 # We do not want to override the distro Python interpreter (and sometimes
1994 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1995 # just require --meson=git|internal together with --python.
1996 if test "$explicit_python" = yes; then
1999 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2004 if test "$meson" = git; then
2005 git_submodules="${git_submodules} meson"
2010 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2011 error_exit "Python setuptools not found"
2013 meson="$python ${source_path}/meson/meson.py"
2015 *) meson=$(command -v meson) ;;
2018 # Probe for ninja (used for compdb)
2020 if test -z "$ninja"; then
2021 for c in ninja ninja-build samu; do
2023 ninja=$(command -v "$c")
2029 # Check that the C compiler works. Doing this here before testing
2030 # the host CPU ensures that we had a valid CC to autodetect the
2031 # $cpu var (and we should bail right here if that's not the case).
2032 # It also allows the help message to be printed without a CC.
2034 if compile_object ; then
2035 : C compiler works ok
2037 error_exit "\"$cc\" either does not exist or does not work"
2039 if ! compile_prog ; then
2040 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2043 # Now we have handled --enable-tcg-interpreter and know we're not just
2044 # printing the help message, bail out if the host CPU isn't supported.
2045 if test "$ARCH" = "unknown"; then
2046 if test "$tcg_interpreter" = "yes" ; then
2047 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2049 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2053 # Consult white-list to determine whether to enable werror
2054 # by default. Only enable by default for git builds
2055 if test -z "$werror" ; then
2056 if test -e "$source_path/.git" && \
2057 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2064 if test "$bogus_os" = "yes"; then
2065 # Now that we know that we're not printing the help and that
2066 # the compiler works (so the results of the check_defines we used
2067 # to identify the OS are reliable), if we didn't recognize the
2068 # host OS we should stop now.
2069 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2072 # Check whether the compiler matches our minimum requirements:
2074 #if defined(__clang_major__) && defined(__clang_minor__)
2075 # ifdef __apple_build_version__
2076 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2077 # error You need at least XCode Clang v5.1 to compile QEMU
2080 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2081 # error You need at least Clang v3.4 to compile QEMU
2084 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2085 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2086 # error You need at least GCC v4.8 to compile QEMU
2089 # error You either need GCC or Clang to compiler QEMU
2091 int main (void) { return 0; }
2093 if ! compile_prog "" "" ; then
2094 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2097 # Accumulate -Wfoo and -Wno-bar separately.
2098 # We will list all of the enable flags first, and the disable flags second.
2099 # Note that we do not add -Werror, because that would enable it for all
2100 # configure tests. If a configure test failed due to -Werror this would
2101 # just silently disable some features, so it's too error prone.
2104 add_to warn_flags -Wold-style-declaration
2105 add_to warn_flags -Wold-style-definition
2106 add_to warn_flags -Wtype-limits
2107 add_to warn_flags -Wformat-security
2108 add_to warn_flags -Wformat-y2k
2109 add_to warn_flags -Winit-self
2110 add_to warn_flags -Wignored-qualifiers
2111 add_to warn_flags -Wempty-body
2112 add_to warn_flags -Wnested-externs
2113 add_to warn_flags -Wendif-labels
2114 add_to warn_flags -Wexpansion-to-defined
2117 add_to nowarn_flags -Wno-initializer-overrides
2118 add_to nowarn_flags -Wno-missing-include-dirs
2119 add_to nowarn_flags -Wno-shift-negative-value
2120 add_to nowarn_flags -Wno-string-plus-int
2121 add_to nowarn_flags -Wno-typedef-redefinition
2122 add_to nowarn_flags -Wno-tautological-type-limit-compare
2123 add_to nowarn_flags -Wno-psabi
2125 gcc_flags="$warn_flags $nowarn_flags"
2127 cc_has_warning_flag() {
2130 # Use the positive sense of the flag when testing for -Wno-wombat
2131 # support (gcc will happily accept the -Wno- form of unknown
2133 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2134 compile_prog "-Werror $optflag" ""
2137 for flag in $gcc_flags; do
2138 if cc_has_warning_flag $flag ; then
2139 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2143 if test "$stack_protector" != "no"; then
2145 int main(int argc, char *argv[])
2147 char arr[64], *p = arr, *c = argv[0];
2154 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2156 for flag in $gcc_flags; do
2157 # We need to check both a compile and a link, since some compiler
2158 # setups fail only on a .c->.o compile and some only at link time
2159 if compile_object "-Werror $flag" &&
2160 compile_prog "-Werror $flag" ""; then
2161 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2162 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2167 if test "$stack_protector" = yes; then
2168 if test $sp_on = 0; then
2169 error_exit "Stack protector not supported"
2174 # Disable -Wmissing-braces on older compilers that warn even for
2175 # the "universal" C zero initializer {0}.
2181 if compile_object "-Werror" "" ; then
2184 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2187 # Our module code doesn't support Windows
2188 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2189 error_exit "Modules are not available for Windows"
2192 # module_upgrades is only reasonable if modules are enabled
2193 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2194 error_exit "Can't enable module-upgrades as Modules are not enabled"
2197 # Static linking is not possible with modules or PIE
2198 if test "$static" = "yes" ; then
2199 if test "$modules" = "yes" ; then
2200 error_exit "static and modules are mutually incompatible"
2204 # Unconditional check for compiler __thread support
2206 static __thread int tls_var;
2207 int main(void) { return tls_var; }
2210 if ! compile_prog "-Werror" "" ; then
2211 error_exit "Your compiler does not support the __thread specifier for " \
2212 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2218 # define THREAD __thread
2222 static THREAD int tls_var;
2223 int main(void) { return tls_var; }
2226 # Check we support --no-pie first; we will need this for building ROMs.
2227 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2228 CFLAGS_NOPIE="-fno-pie"
2229 LDFLAGS_NOPIE="-no-pie"
2232 if test "$static" = "yes"; then
2233 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2234 CFLAGS="-fPIE -DPIE $CFLAGS"
2235 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2237 elif test "$pie" = "yes"; then
2238 error_exit "-static-pie not available due to missing toolchain support"
2240 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2243 elif test "$pie" = "no"; then
2244 CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2245 LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2246 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2247 CFLAGS="-fPIE -DPIE $CFLAGS"
2248 LDFLAGS="-pie $LDFLAGS"
2250 elif test "$pie" = "yes"; then
2251 error_exit "PIE not available due to missing toolchain support"
2253 echo "Disabling PIE due to missing toolchain support"
2257 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2258 # The combination is known as "full relro", because .got.plt is read-only too.
2259 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2260 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2263 ##########################################
2264 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2265 # use i686 as default anyway, but for those that don't, an explicit
2266 # specification is necessary
2268 if test "$cpu" = "i386"; then
2270 static int sfaa(int *ptr)
2272 return __sync_fetch_and_and(ptr, 0);
2278 val = __sync_val_compare_and_swap(&val, 0, 1);
2283 if ! compile_prog "" "" ; then
2284 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2288 #########################################
2289 # Solaris specific configure tool chain decisions
2291 if test "$solaris" = "yes" ; then
2295 if test -f /usr/ccs/bin/ar ; then
2296 error_exit "No path includes ar" \
2297 "Add /usr/ccs/bin to your path and rerun configure"
2299 error_exit "No path includes ar"
2303 if test -z "${target_list+xxx}" ; then
2304 for target in $default_target_list; do
2305 supported_target $target 2>/dev/null && \
2306 target_list="$target_list $target"
2308 target_list="${target_list# }"
2310 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2311 for target in $target_list; do
2312 # Check that we recognised the target name; this allows a more
2313 # friendly error message than if we let it fall through.
2314 case " $default_target_list " in
2318 error_exit "Unknown target name '$target'"
2321 supported_target $target || exit 1
2325 # see if system emulation was really requested
2326 case " $target_list " in
2327 *"-softmmu "*) softmmu=yes
2333 for target in $target_list; do
2335 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2340 # The EDK2 binaries are compressed with bzip2
2341 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2342 error_exit "The bzip2 program is required for building QEMU"
2345 feature_not_found() {
2349 error_exit "User requested feature $feature" \
2350 "configure was not able to find it." \
2355 # big/little endian test
2357 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2358 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2359 extern int foo(short *, short *);
2360 int main(int argc, char *argv[]) {
2361 return foo(big_endian, little_endian);
2365 if compile_object ; then
2366 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2368 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2371 echo big/little test failed
2374 echo big/little test failed
2377 ##########################################
2379 if test -z "$want_tools"; then
2380 if test "$softmmu" = "no"; then
2387 ##########################################
2388 # cocoa implies not SDL or GTK
2389 # (the cocoa UI code currently assumes it is always the active UI
2390 # and doesn't interact well with other UI frontend code)
2391 if test "$cocoa" = "yes"; then
2392 if test "$sdl" = "yes"; then
2393 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2395 if test "$gtk" = "yes"; then
2396 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2402 # Some versions of Mac OS X incorrectly define SIZE_MAX
2406 int main(int argc, char *argv[]) {
2407 return printf("%zu", SIZE_MAX);
2410 have_broken_size_max=no
2411 if ! compile_object -Werror ; then
2412 have_broken_size_max=yes
2415 ##########################################
2419 #include <sys/socket.h>
2420 #include <linux/ip.h>
2421 int main(void) { return sizeof(struct mmsghdr); }
2423 if compile_prog "" "" ; then
2429 if check_include "pty.h" ; then
2436 #include <sys/mman.h>
2437 int main(int argc, char *argv[]) {
2438 return mlockall(MCL_FUTURE);
2441 if compile_prog "" "" ; then
2447 #########################################
2448 # vhost interdependencies and host support
2451 test "$vhost_user" = "" && vhost_user=yes
2452 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2453 error_exit "vhost-user isn't available on win32"
2455 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2456 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2457 error_exit "vhost-vdpa is only available on Linux"
2459 test "$vhost_kernel" = "" && vhost_kernel=$linux
2460 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2461 error_exit "vhost-kernel is only available on Linux"
2464 # vhost-kernel devices
2465 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2466 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2467 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2469 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2470 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2471 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2474 # vhost-user backends
2475 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2476 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2477 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2479 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2480 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2481 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2483 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2484 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2485 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2487 #vhost-vdpa backends
2488 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2489 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2490 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2493 # OR the vhost-kernel and vhost-user values for simplicity
2494 if test "$vhost_net" = ""; then
2495 test "$vhost_net_user" = "yes" && vhost_net=yes
2496 test "$vhost_kernel" = "yes" && vhost_net=yes
2499 ##########################################
2500 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2502 if test "$mingw32" = "yes"; then
2503 # Some versions of MinGW / Mingw-w64 lack localtime_r
2504 # and gmtime_r entirely.
2506 # Some versions of Mingw-w64 define a macro for
2507 # localtime_r/gmtime_r.
2509 # Some versions of Mingw-w64 will define functions
2510 # for localtime_r/gmtime_r, but only if you have
2511 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2512 # though, unistd.h and pthread.h both define
2515 # So this #undef localtime_r and #include <unistd.h>
2516 # are not in fact redundant.
2521 int main(void) { localtime_r(NULL, NULL); return 0; }
2523 if compile_prog "" "" ; then
2530 ##########################################
2533 if ! has "$pkg_config_exe"; then
2534 error_exit "pkg-config binary '$pkg_config_exe' not found"
2537 ##########################################
2540 if test "$linux_user" = "yes"; then
2543 #include <linux/futex.h>
2545 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2551 if ! compile_object ; then
2552 feature_not_found "nptl" "Install glibc and linux kernel headers."
2556 ##########################################
2559 if test "$lzo" != "no" ; then
2561 #include <lzo/lzo1x.h>
2562 int main(void) { lzo_version(); return 0; }
2564 if compile_prog "" "-llzo2" ; then
2568 if test "$lzo" = "yes"; then
2569 feature_not_found "liblzo2" "Install liblzo2 devel"
2575 ##########################################
2578 if test "$snappy" != "no" ; then
2580 #include <snappy-c.h>
2581 int main(void) { snappy_max_compressed_length(4096); return 0; }
2583 if compile_prog "" "-lsnappy" ; then
2584 snappy_libs='-lsnappy'
2587 if test "$snappy" = "yes"; then
2588 feature_not_found "libsnappy" "Install libsnappy devel"
2594 ##########################################
2597 if test "$bzip2" != "no" ; then
2600 int main(void) { BZ2_bzlibVersion(); return 0; }
2602 if compile_prog "" "-lbz2" ; then
2605 if test "$bzip2" = "yes"; then
2606 feature_not_found "libbzip2" "Install libbzip2 devel"
2612 ##########################################
2615 if test "$lzfse" != "no" ; then
2618 int main(void) { lzfse_decode_scratch_size(); return 0; }
2620 if compile_prog "" "-llzfse" ; then
2623 if test "$lzfse" = "yes"; then
2624 feature_not_found "lzfse" "Install lzfse devel"
2630 ##########################################
2633 if test "$zstd" != "no" ; then
2634 libzstd_minver="1.4.0"
2635 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2636 zstd_cflags="$($pkg_config --cflags libzstd)"
2637 zstd_libs="$($pkg_config --libs libzstd)"
2640 if test "$zstd" = "yes" ; then
2641 feature_not_found "libzstd" "Install libzstd devel"
2647 ##########################################
2650 if test "$seccomp" != "no" ; then
2651 libseccomp_minver="2.3.0"
2652 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2653 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2654 seccomp_libs="$($pkg_config --libs libseccomp)"
2657 if test "$seccomp" = "yes" ; then
2658 feature_not_found "libseccomp" \
2659 "Install libseccomp devel >= $libseccomp_minver"
2664 ##########################################
2667 if test "$xen" != "no" ; then
2668 # Check whether Xen library path is specified via --extra-ldflags to avoid
2669 # overriding this setting with pkg-config output. If not, try pkg-config
2670 # to obtain all needed flags.
2672 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2673 $pkg_config --exists xencontrol ; then
2674 xen_ctrl_version="$(printf '%d%02d%02d' \
2675 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2677 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2678 xen_pc="$xen_pc xenevtchn xendevicemodel"
2679 if $pkg_config --exists xentoolcore; then
2680 xen_pc="$xen_pc xentoolcore"
2682 xen_cflags="$($pkg_config --cflags $xen_pc)"
2683 xen_libs="$($pkg_config --libs $xen_pc)"
2686 xen_libs="-lxenstore -lxenctrl -lxenguest"
2687 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2689 # First we test whether Xen headers and libraries are available.
2690 # If no, we are done and there is no Xen support.
2691 # If yes, more tests are run to detect the Xen version.
2695 #include <xenctrl.h>
2700 if ! compile_prog "" "$xen_libs" ; then
2702 if test "$xen" = "yes" ; then
2703 feature_not_found "xen" "Install xen devel"
2709 cat > $TMPC <<EOF &&
2710 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2711 #define __XEN_TOOLS__
2712 #include <xendevicemodel.h>
2713 #include <xenforeignmemory.h>
2715 xendevicemodel_handle *xd;
2716 xenforeignmemory_handle *xfmem;
2718 xd = xendevicemodel_open(0, 0);
2719 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2721 xfmem = xenforeignmemory_open(0, 0);
2722 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2727 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2729 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2730 xen_ctrl_version=41100
2733 cat > $TMPC <<EOF &&
2734 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2735 #include <xenforeignmemory.h>
2736 #include <xentoolcore.h>
2738 xenforeignmemory_handle *xfmem;
2740 xfmem = xenforeignmemory_open(0, 0);
2741 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2742 xentoolcore_restrict_all(0);
2747 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2749 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2750 xen_ctrl_version=41000
2753 cat > $TMPC <<EOF &&
2754 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2755 #define __XEN_TOOLS__
2756 #include <xendevicemodel.h>
2758 xendevicemodel_handle *xd;
2760 xd = xendevicemodel_open(0, 0);
2761 xendevicemodel_close(xd);
2766 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2768 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2769 xen_ctrl_version=40900
2772 cat > $TMPC <<EOF &&
2774 * If we have stable libs the we don't want the libxc compat
2775 * layers, regardless of what CFLAGS we may have been given.
2777 * Also, check if xengnttab_grant_copy_segment_t is defined and
2778 * grant copy operation is implemented.
2780 #undef XC_WANT_COMPAT_EVTCHN_API
2781 #undef XC_WANT_COMPAT_GNTTAB_API
2782 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2783 #include <xenctrl.h>
2784 #include <xenstore.h>
2785 #include <xenevtchn.h>
2786 #include <xengnttab.h>
2787 #include <xenforeignmemory.h>
2789 #include <xen/hvm/hvm_info_table.h>
2790 #if !defined(HVM_MAX_VCPUS)
2791 # error HVM_MAX_VCPUS not defined
2794 xc_interface *xc = NULL;
2795 xenforeignmemory_handle *xfmem;
2796 xenevtchn_handle *xe;
2797 xengnttab_handle *xg;
2798 xengnttab_grant_copy_segment_t* seg = NULL;
2802 xc = xc_interface_open(0, 0, 0);
2803 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2804 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2805 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2806 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2808 xfmem = xenforeignmemory_open(0, 0);
2809 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2811 xe = xenevtchn_open(0, 0);
2814 xg = xengnttab_open(0, 0);
2815 xengnttab_grant_copy(xg, 0, seg);
2820 compile_prog "" "$xen_libs $xen_stable_libs"
2822 xen_ctrl_version=40800
2825 cat > $TMPC <<EOF &&
2827 * If we have stable libs the we don't want the libxc compat
2828 * layers, regardless of what CFLAGS we may have been given.
2830 #undef XC_WANT_COMPAT_EVTCHN_API
2831 #undef XC_WANT_COMPAT_GNTTAB_API
2832 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2833 #include <xenctrl.h>
2834 #include <xenstore.h>
2835 #include <xenevtchn.h>
2836 #include <xengnttab.h>
2837 #include <xenforeignmemory.h>
2839 #include <xen/hvm/hvm_info_table.h>
2840 #if !defined(HVM_MAX_VCPUS)
2841 # error HVM_MAX_VCPUS not defined
2844 xc_interface *xc = NULL;
2845 xenforeignmemory_handle *xfmem;
2846 xenevtchn_handle *xe;
2847 xengnttab_handle *xg;
2851 xc = xc_interface_open(0, 0, 0);
2852 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2853 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2854 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2855 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2857 xfmem = xenforeignmemory_open(0, 0);
2858 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2860 xe = xenevtchn_open(0, 0);
2863 xg = xengnttab_open(0, 0);
2864 xengnttab_map_grant_ref(xg, 0, 0, 0);
2869 compile_prog "" "$xen_libs $xen_stable_libs"
2871 xen_ctrl_version=40701
2876 cat > $TMPC <<EOF &&
2877 #include <xenctrl.h>
2878 #include <xenstore.h>
2880 #include <xen/hvm/hvm_info_table.h>
2881 #if !defined(HVM_MAX_VCPUS)
2882 # error HVM_MAX_VCPUS not defined
2887 xc = xc_interface_open(0, 0, 0);
2888 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2889 xc_gnttab_open(NULL, 0);
2890 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2891 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2892 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2893 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2897 compile_prog "" "$xen_libs"
2899 xen_ctrl_version=40600
2904 cat > $TMPC <<EOF &&
2905 #include <xenctrl.h>
2906 #include <xenstore.h>
2908 #include <xen/hvm/hvm_info_table.h>
2909 #if !defined(HVM_MAX_VCPUS)
2910 # error HVM_MAX_VCPUS not defined
2915 xc = xc_interface_open(0, 0, 0);
2916 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2917 xc_gnttab_open(NULL, 0);
2918 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2919 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2920 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2924 compile_prog "" "$xen_libs"
2926 xen_ctrl_version=40500
2930 cat > $TMPC <<EOF &&
2931 #include <xenctrl.h>
2932 #include <xenstore.h>
2934 #include <xen/hvm/hvm_info_table.h>
2935 #if !defined(HVM_MAX_VCPUS)
2936 # error HVM_MAX_VCPUS not defined
2941 xc = xc_interface_open(0, 0, 0);
2942 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2943 xc_gnttab_open(NULL, 0);
2944 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2945 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2949 compile_prog "" "$xen_libs"
2951 xen_ctrl_version=40200
2955 if test "$xen" = "yes" ; then
2956 feature_not_found "xen (unsupported version)" \
2957 "Install a supported xen (xen 4.2 or newer)"
2962 if test "$xen" = yes; then
2963 if test $xen_ctrl_version -ge 40701 ; then
2964 xen_libs="$xen_libs $xen_stable_libs "
2970 if test "$xen_pci_passthrough" != "no"; then
2971 if test "$xen" = "yes" && test "$linux" = "yes"; then
2972 xen_pci_passthrough=yes
2974 if test "$xen_pci_passthrough" = "yes"; then
2975 error_exit "User requested feature Xen PCI Passthrough" \
2976 " but this feature requires /sys from Linux"
2978 xen_pci_passthrough=no
2982 ##########################################
2983 # Windows Hypervisor Platform accelerator (WHPX) check
2984 if test "$whpx" != "no" ; then
2985 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2988 if test "$whpx" = "yes"; then
2989 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2995 ##########################################
2997 if test "$gettext" != "false" ; then
2998 if has xgettext; then
3001 if test "$gettext" = "true" ; then
3002 feature_not_found "gettext" "Install xgettext binary"
3008 ##########################################
3010 if test "$sparse" != "no" ; then
3014 if test "$sparse" = "yes" ; then
3015 feature_not_found "sparse" "Install sparse binary"
3021 ##########################################
3023 if $pkg_config --exists "x11"; then
3025 x11_cflags=$($pkg_config --cflags x11)
3026 x11_libs=$($pkg_config --libs x11)
3029 ##########################################
3032 if test "$gtk" != "no"; then
3033 gtkpackage="gtk+-3.0"
3034 gtkx11package="gtk+-x11-3.0"
3036 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3037 gtk_cflags=$($pkg_config --cflags $gtkpackage)
3038 gtk_libs=$($pkg_config --libs $gtkpackage)
3039 gtk_version=$($pkg_config --modversion $gtkpackage)
3040 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3042 gtk_cflags="$gtk_cflags $x11_cflags"
3043 gtk_libs="$gtk_libs $x11_libs"
3046 elif test "$gtk" = "yes"; then
3047 feature_not_found "gtk" "Install gtk3-devel"
3054 ##########################################
3057 if test "$gnutls" != "no"; then
3059 if $pkg_config --exists "gnutls >= 3.1.18"; then
3060 gnutls_cflags=$($pkg_config --cflags gnutls)
3061 gnutls_libs=$($pkg_config --libs gnutls)
3062 # Packaging for the static libraries is not always correct.
3063 # At least ubuntu 18.04 ships only shared libraries.
3065 if compile_prog "" "$gnutls_libs" ; then
3069 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3070 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3077 # If user didn't give a --disable/enable-gcrypt flag,
3078 # then mark as disabled if user requested nettle
3080 if test -z "$gcrypt"
3082 if test "$nettle" = "yes"
3088 # If user didn't give a --disable/enable-nettle flag,
3089 # then mark as disabled if user requested gcrypt
3091 if test -z "$nettle"
3093 if test "$gcrypt" = "yes"
3100 if ! has "libgcrypt-config"
3105 if test -n "$cross_prefix"
3107 host=$(libgcrypt-config --host)
3108 if test "$host-" != $cross_prefix
3114 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3115 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3117 if test $maj != 1 || test $min -lt 5
3126 if test "$nettle" != "no"; then
3128 if $pkg_config --exists "nettle >= 2.7.1"; then
3129 nettle_cflags=$($pkg_config --cflags nettle)
3130 nettle_libs=$($pkg_config --libs nettle)
3131 nettle_version=$($pkg_config --modversion nettle)
3132 # Link test to make sure the given libraries work (e.g for static).
3134 if compile_prog "" "$nettle_libs" ; then
3135 if test -z "$gcrypt"; then
3141 if test "$pass" = "yes"
3144 #include <nettle/xts.h>
3149 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3154 if test "$pass" = "no" && test "$nettle" = "yes"; then
3155 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3161 if test "$gcrypt" != "no"; then
3163 if has_libgcrypt; then
3164 gcrypt_cflags=$(libgcrypt-config --cflags)
3165 gcrypt_libs=$(libgcrypt-config --libs)
3166 # Debian has removed -lgpg-error from libgcrypt-config
3167 # as it "spreads unnecessary dependencies" which in
3168 # turn breaks static builds...
3169 if test "$static" = "yes"
3171 gcrypt_libs="$gcrypt_libs -lgpg-error"
3174 # Link test to make sure the given libraries work (e.g for static).
3176 if compile_prog "" "$gcrypt_libs" ; then
3180 if test "$pass" = "yes"; then
3185 gcry_mac_hd_t handle;
3186 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3187 GCRY_MAC_FLAG_SECURE, NULL);
3191 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3197 gcry_cipher_hd_t handle;
3198 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3202 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3206 elif test "$gcrypt" = "yes"; then
3207 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3214 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3216 error_exit "Only one of gcrypt & nettle can be enabled"
3219 ##########################################
3220 # libtasn1 - only for the TLS creds/session test suite
3225 if $pkg_config --exists "libtasn1"; then
3226 tasn1_cflags=$($pkg_config --cflags libtasn1)
3227 tasn1_libs=$($pkg_config --libs libtasn1)
3233 ##########################################
3236 if test "$auth_pam" != "no"; then
3238 #include <security/pam_appl.h>
3241 const char *service_name = "qemu";
3242 const char *user = "frank";
3243 const struct pam_conv pam_conv = { 0 };
3244 pam_handle_t *pamh = NULL;
3245 pam_start(service_name, user, &pam_conv, &pamh);
3249 if compile_prog "" "-lpam" ; then
3252 if test "$auth_pam" = "yes"; then
3253 feature_not_found "PAM" "Install PAM development package"
3260 ##########################################
3261 # getifaddrs (for tests/test-io-channel-socket )
3264 if ! check_include "ifaddrs.h" ; then
3268 #########################################
3271 if check_include "libdrm/drm.h" ; then
3275 #########################################
3276 # sys/signal.h check
3277 have_sys_signal_h=no
3278 if check_include "sys/signal.h" ; then
3279 have_sys_signal_h=yes
3282 ##########################################
3285 if test "$vte" != "no"; then
3286 vteminversion="0.32.0"
3287 if $pkg_config --exists "vte-2.91"; then
3288 vtepackage="vte-2.91"
3290 vtepackage="vte-2.90"
3292 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3293 vte_cflags=$($pkg_config --cflags $vtepackage)
3294 vte_libs=$($pkg_config --libs $vtepackage)
3295 vteversion=$($pkg_config --modversion $vtepackage)
3297 elif test "$vte" = "yes"; then
3298 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3304 ##########################################
3305 # RDMA needs OpenFabrics libraries
3306 if test "$rdma" != "no" ; then
3308 #include <rdma/rdma_cma.h>
3309 int main(void) { return 0; }
3311 rdma_libs="-lrdmacm -libverbs -libumad"
3312 if compile_prog "" "$rdma_libs" ; then
3315 if test "$rdma" = "yes" ; then
3317 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3319 " (1) Fast: Install infiniband packages (devel) from your distro." \
3320 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3321 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3327 ##########################################
3330 cat > $TMPC <<EOF &&
3331 #include <sys/mman.h>
3338 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3344 if test "$rdma" = "yes" ; then
3347 if compile_prog "" ""; then
3354 if ! compile_prog "" ""; then
3355 error_exit "PVRDMA is not supported since mremap is not implemented"
3364 if test "$pvrdma" = "yes" ; then
3365 error_exit "PVRDMA requires rdma suppport"
3370 # Let's see if enhanced reg_mr is supported
3371 if test "$pvrdma" = "yes" ; then
3373 cat > $TMPC <<EOF &&
3374 #include <infiniband/verbs.h>
3380 struct ibv_pd *pd = NULL;
3386 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3393 if ! compile_prog "" "-libverbs"; then
3394 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3398 ##########################################
3399 # xfsctl() probe, used for file-posix.c
3400 if test "$xfs" != "no" ; then
3402 #include <stddef.h> /* NULL */
3403 #include <xfs/xfs.h>
3406 xfsctl(NULL, 0, 0, NULL);
3410 if compile_prog "" "" ; then
3413 if test "$xfs" = "yes" ; then
3414 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3420 ##########################################
3421 # vde libraries probe
3422 if test "$vde" != "no" ; then
3423 vde_libs="-lvdeplug"
3425 #include <libvdeplug.h>
3428 struct vde_open_args a = {0, 0, 0};
3434 if compile_prog "" "$vde_libs" ; then
3437 if test "$vde" = "yes" ; then
3438 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3444 ##########################################
3445 # netmap support probe
3446 # Apart from looking for netmap headers, we make sure that the host API version
3447 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3448 # a minor/major version number. Minor new features will be marked with values up
3449 # to 15, and if something happens that requires a change to the backend we will
3450 # move above 15, submit the backend fixes and modify this two bounds.
3451 if test "$netmap" != "no" ; then
3453 #include <inttypes.h>
3455 #include <net/netmap.h>
3456 #include <net/netmap_user.h>
3457 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3460 int main(void) { return 0; }
3462 if compile_prog "" "" ; then
3465 if test "$netmap" = "yes" ; then
3466 feature_not_found "netmap"
3472 ##########################################
3473 # libcap-ng library probe
3474 if test "$cap_ng" != "no" ; then
3480 capng_capability_to_name(CAPNG_EFFECTIVE);
3484 if compile_prog "" "$cap_libs" ; then
3487 if test "$cap_ng" = "yes" ; then
3488 feature_not_found "cap_ng" "Install libcap-ng devel"
3494 ##########################################
3495 # Sound support libraries probe
3497 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3498 for drv in $audio_drv_list; do
3501 if $pkg_config alsa --exists; then
3502 alsa_libs=$($pkg_config alsa --libs)
3503 alsa_cflags=$($pkg_config alsa --cflags)
3505 if test "$drv" = "try-alsa"; then
3506 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3509 if test "$drv" = "try-alsa"; then
3510 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3512 error_exit "$drv check failed" \
3513 "Make sure to have the $drv libs and headers installed."
3519 if $pkg_config libpulse --exists; then
3521 pulse_libs=$($pkg_config libpulse --libs)
3522 pulse_cflags=$($pkg_config libpulse --cflags)
3523 if test "$drv" = "try-pa"; then
3524 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3527 if test "$drv" = "try-pa"; then
3528 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3530 error_exit "$drv check failed" \
3531 "Make sure to have the $drv libs and headers installed."
3537 if test "$sdl" = "no"; then
3538 error_exit "sdl not found or disabled, can not use sdl audio driver"
3543 if test "$sdl" = "no"; then
3544 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3546 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3551 coreaudio_libs="-framework CoreAudio"
3555 dsound_libs="-lole32 -ldxguid"
3564 if $pkg_config jack --exists; then
3566 jack_libs=$($pkg_config jack --libs)
3567 if test "$drv" = "try-jack"; then
3568 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3571 if test "$drv" = "try-jack"; then
3572 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3574 error_exit "$drv check failed" \
3575 "Make sure to have the $drv libs and headers installed."
3581 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3582 error_exit "Unknown driver '$drv' selected" \
3583 "Possible drivers are: $audio_possible_drivers"
3589 ##########################################
3592 if test "$brlapi" != "no" ; then
3593 brlapi_libs="-lbrlapi"
3597 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3599 if compile_prog "" "$brlapi_libs" ; then
3602 if test "$brlapi" = "yes" ; then
3603 feature_not_found "brlapi" "Install brlapi devel"
3609 ##########################################
3611 if test "$iconv" != "no" ; then
3615 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3616 return conv != (iconv_t) -1;
3619 iconv_prefix_list="/usr/local:/usr"
3620 iconv_lib_list=":-liconv"
3622 for iconv_prefix in $iconv_prefix_list; do
3624 iconv_cflags="-I$iconv_prefix/include"
3625 iconv_ldflags="-L$iconv_prefix/lib"
3626 for iconv_link in $iconv_lib_list; do
3628 iconv_lib="$iconv_ldflags $iconv_link"
3629 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3630 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3635 if test "$iconv_found" = yes ; then
3639 if test "$iconv_found" = "yes" ; then
3642 if test "$iconv" = "yes" ; then
3643 feature_not_found "iconv" "Install iconv devel"
3649 ##########################################
3651 if test "$iconv" = "no" ; then
3652 # curses will need iconv
3655 if test "$curses" != "no" ; then
3656 if test "$mingw32" = "yes" ; then
3657 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3658 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3660 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3661 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3668 #include <langinfo.h>
3670 const char *codeset;
3672 setlocale(LC_ALL, "");
3674 addwstr(L"wide chars\n");
3676 add_wch(WACS_DEGREE);
3677 codeset = nl_langinfo(CODESET);
3678 return codeset != 0;
3682 for curses_inc in $curses_inc_list; do
3683 # Make sure we get the wide character prototypes
3684 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3686 for curses_lib in $curses_lib_list; do
3688 if compile_prog "$curses_inc" "$curses_lib" ; then
3693 if test "$curses_found" = yes ; then
3698 if test "$curses_found" = "yes" ; then
3701 if test "$curses" = "yes" ; then
3702 feature_not_found "curses" "Install ncurses devel"
3708 ##########################################
3710 if test "$curl" != "no" ; then
3711 if $pkg_config libcurl --exists; then
3712 curlconfig="$pkg_config libcurl"
3714 curlconfig=curl-config
3717 #include <curl/curl.h>
3718 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3720 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3721 curl_libs=$($curlconfig --libs 2>/dev/null)
3722 if compile_prog "$curl_cflags" "$curl_libs" ; then
3725 if test "$curl" = "yes" ; then
3726 feature_not_found "curl" "Install libcurl devel"
3732 ##########################################
3733 # glib support probe
3736 glib_modules=gthread-2.0
3737 if test "$modules" = yes; then
3738 glib_modules="$glib_modules gmodule-export-2.0"
3740 if test "$plugins" = yes; then
3741 glib_modules="$glib_modules gmodule-2.0"
3744 for i in $glib_modules; do
3745 if $pkg_config --atleast-version=$glib_req_ver $i; then
3746 glib_cflags=$($pkg_config --cflags $i)
3747 glib_libs=$($pkg_config --libs $i)
3749 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3753 # This workaround is required due to a bug in pkg-config file for glib as it
3754 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3756 if test "$static" = yes && test "$mingw32" = yes; then
3757 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3760 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3762 gio_cflags=$($pkg_config --cflags gio-2.0)
3763 gio_libs=$($pkg_config --libs gio-2.0)
3764 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3765 if [ ! -x "$gdbus_codegen" ]; then
3772 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3773 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3774 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3777 # Sanity check that the current size_t matches the
3778 # size that glib thinks it should be. This catches
3779 # problems on multi-arch where people try to build
3780 # 32-bit QEMU while pointing at 64-bit glib headers
3785 #define QEMU_BUILD_BUG_ON(x) \
3786 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3789 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3794 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3795 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3796 "You probably need to set PKG_CONFIG_LIBDIR"\
3797 "to point to the right pkg-config files for your"\
3801 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3804 int main(void) { return 0; }
3806 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3807 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3808 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3809 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3813 # Silence clang warnings triggered by glib < 2.57.2
3816 typedef struct Foo {
3819 static void foo_free(Foo *f)
3823 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3824 int main(void) { return 0; }
3826 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3827 if cc_has_warning_flag "-Wno-unused-function"; then
3828 glib_cflags="$glib_cflags -Wno-unused-function"
3829 CFLAGS="$CFLAGS -Wno-unused-function"
3833 ##########################################
3834 # SHA command probe for modules
3835 if test "$modules" = yes; then
3836 shacmd_probe="sha1sum sha1 shasum"
3837 for c in $shacmd_probe; do
3843 if test "$shacmd" = ""; then
3844 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3848 ##########################################
3849 # libmpathpersist probe
3851 if test "$mpath" != "no" ; then
3852 # probe for the new API
3854 #include <libudev.h>
3855 #include <mpath_persist.h>
3856 unsigned mpath_mx_alloc_len = 1024;
3858 static struct config *multipath_conf;
3859 extern struct udev *udev;
3860 extern struct config *get_multipath_config(void);
3861 extern void put_multipath_config(struct config *conf);
3863 struct config *get_multipath_config(void) { return multipath_conf; }
3864 void put_multipath_config(struct config *conf) { }
3868 multipath_conf = mpath_lib_init();
3872 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3874 mpathpersist_new_api=yes
3876 # probe for the old API
3878 #include <libudev.h>
3879 #include <mpath_persist.h>
3880 unsigned mpath_mx_alloc_len = 1024;
3883 struct udev *udev = udev_new();
3884 mpath_lib_init(udev);
3888 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3890 mpathpersist_new_api=no
3899 ##########################################
3901 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3905 #include <pthread.h>
3906 static void *f(void *p) { return NULL; }
3909 pthread_create(&thread, 0, f, 0);
3913 if compile_prog "" "" ; then
3916 for pthread_lib in $PTHREADLIBS_LIST; do
3917 if compile_prog "" "$pthread_lib" ; then
3920 for lib_entry in $LIBS; do
3921 if test "$lib_entry" = "$pthread_lib"; then
3926 if test "$found" = "no"; then
3927 LIBS="$pthread_lib $LIBS"
3929 PTHREAD_LIB="$pthread_lib"
3935 if test "$mingw32" != yes && test "$pthread" = no; then
3936 error_exit "pthread check failed" \
3937 "Make sure to have the pthread libs and headers installed."
3940 # check for pthread_setname_np with thread id
3941 pthread_setname_np_w_tid=no
3943 #include <pthread.h>
3945 static void *f(void *p) { return NULL; }
3949 pthread_create(&thread, 0, f, 0);
3950 pthread_setname_np(thread, "QEMU");
3954 if compile_prog "" "$pthread_lib" ; then
3955 pthread_setname_np_w_tid=yes
3958 # check for pthread_setname_np without thread id
3959 pthread_setname_np_wo_tid=no
3961 #include <pthread.h>
3963 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3967 pthread_create(&thread, 0, f, 0);
3971 if compile_prog "" "$pthread_lib" ; then
3972 pthread_setname_np_wo_tid=yes
3975 ##########################################
3977 if test "$rbd" != "no" ; then
3980 #include <rbd/librbd.h>
3983 rados_create(&cluster, NULL);
3987 rbd_libs="-lrbd -lrados"
3988 if compile_prog "" "$rbd_libs" ; then
3991 if test "$rbd" = "yes" ; then
3992 feature_not_found "rados block device" "Install librbd/ceph devel"
3998 ##########################################
4000 if test "$libssh" != "no" ; then
4001 if $pkg_config --exists libssh; then
4002 libssh_cflags=$($pkg_config libssh --cflags)
4003 libssh_libs=$($pkg_config libssh --libs)
4006 if test "$libssh" = "yes" ; then
4007 error_exit "libssh required for --enable-libssh"
4013 ##########################################
4014 # Check for libssh 0.8
4015 # This is done like this instead of using the LIBSSH_VERSION_* and
4016 # SSH_VERSION_* macros because some distributions in the past shipped
4017 # snapshots of the future 0.8 from Git, and those snapshots did not
4018 # have updated version numbers (still referring to 0.7.0).
4020 if test "$libssh" = "yes"; then
4022 #include <libssh/libssh.h>
4023 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4025 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4026 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4030 ##########################################
4033 if test "$linux_aio" != "no" ; then
4036 #include <sys/eventfd.h>
4038 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4040 if compile_prog "" "-laio" ; then
4043 if test "$linux_aio" = "yes" ; then
4044 feature_not_found "linux AIO" "Install libaio devel"
4049 ##########################################
4050 # linux-io-uring probe
4052 if test "$linux_io_uring" != "no" ; then
4053 if $pkg_config liburing; then
4054 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4055 linux_io_uring_libs=$($pkg_config --libs liburing)
4058 if test "$linux_io_uring" = "yes" ; then
4059 feature_not_found "linux io_uring" "Install liburing devel"
4065 ##########################################
4066 # TPM emulation is only on POSIX
4068 if test "$tpm" = ""; then
4069 if test "$mingw32" = "yes"; then
4074 elif test "$tpm" = "yes"; then
4075 if test "$mingw32" = "yes" ; then
4076 error_exit "TPM emulation only available on POSIX systems"
4080 ##########################################
4084 if test "$attr" != "no" ; then
4087 #include <sys/types.h>
4088 #ifdef CONFIG_LIBATTR
4089 #include <attr/xattr.h>
4091 #include <sys/xattr.h>
4093 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4095 if compile_prog "" "" ; then
4097 # Older distros have <attr/xattr.h>, and need -lattr:
4098 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4100 libattr_libs="-lattr"
4103 if test "$attr" = "yes" ; then
4104 feature_not_found "ATTR" "Install libc6 or libattr devel"
4110 ##########################################
4113 #include <sys/types.h>
4114 #include <sys/uio.h>
4116 int main(void) { return sizeof(struct iovec); }
4119 if compile_prog "" "" ; then
4123 ##########################################
4126 #include <sys/types.h>
4127 #include <sys/uio.h>
4129 int main(void) { return preadv(0, 0, 0, 0); }
4132 if compile_prog "" "" ; then
4136 ##########################################
4138 # fdt support is mandatory for at least some target architectures,
4139 # so insist on it if we're building those system emulators.
4141 for target in $target_list; do
4143 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4149 if test "$fdt_required" = "yes"; then
4150 if test "$fdt" = "no"; then
4151 error_exit "fdt disabled but some requested targets require it." \
4152 "You can turn off fdt only if you also disable all the system emulation" \
4153 "targets which need it (by specifying a cut down --target-list)."
4156 elif test "$fdt" != "yes" ; then
4160 # fdt is only required when building softmmu targets
4161 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4165 if test "$fdt" != "no" ; then
4167 # explicitly check for libfdt_env.h as it is missing in some stable installs
4168 # and test for required functions to make sure we are on a version >= 1.4.2
4171 #include <libfdt_env.h>
4172 int main(void) { fdt_check_full(NULL, 0); return 0; }
4174 if compile_prog "" "$fdt_libs" ; then
4175 # system DTC is good - use it
4178 # have GIT checkout, so activate dtc submodule
4179 if test -e "${source_path}/.git" ; then
4180 git_submodules="${git_submodules} dtc"
4182 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4185 fdt_cflags="-I${source_path}/dtc/libfdt"
4186 fdt_ldflags="-Ldtc/libfdt"
4187 fdt_libs="$fdt_libs"
4188 elif test "$fdt" = "yes" ; then
4189 # Not a git build & no libfdt found, prompt for system install
4190 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4191 "Please install the DTC (libfdt) devel package"
4193 # don't have and don't want
4200 ##########################################
4201 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4204 if $pkg_config gbm; then
4205 gbm_cflags="$($pkg_config --cflags gbm)"
4206 gbm_libs="$($pkg_config --libs gbm)"
4210 if test "$opengl" != "no" ; then
4211 opengl_pkgs="epoxy gbm"
4212 if $pkg_config $opengl_pkgs; then
4213 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4214 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4216 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4220 if test "$opengl" = "yes" ; then
4221 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4229 if test "$opengl" = "yes"; then