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"
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
41 echo "#" >> config.log
46 while test -n "$2"; do
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
63 if test -n "$BASH_VERSION"; then eval '
66 lines: ${BASH_LINENO[*]}"
68 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
70 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
77 # Don't bother rerunning the compile if we were already using -Werror
83 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
85 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
92 do_compiler "$cc" "$@"
96 do_compiler "$cxx" "$@"
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105 for arg in $QEMU_CFLAGS; do
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
114 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
122 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
128 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
131 # symbolically link $1 to $2. Portable version of "ln -sf".
134 mkdir -p "$(dirname "$2")"
138 # check whether a command is available to this shell (may be either an
139 # executable or a builtin)
141 type "$1" >/dev/null 2>&1
144 # search for an executable in PATH
150 # pathname has a dir component?
151 if [ "${local_command#*/}" != "$local_command" ]; then
152 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153 echo "$local_command"
157 if [ -z "$local_command" ]; then
162 for local_dir in $PATH; do
163 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164 echo "$local_dir/$local_command"
165 IFS="${local_ifs:-$(printf ' \t\n')}"
170 IFS="${local_ifs:-$(printf ' \t\n')}"
175 echo "$trace_backends" | grep "$1" >/dev/null
179 eval test -z '"${1#'"$2"'}"'
182 supported_hax_target() {
183 test "$hax" = "yes" || return 1
184 glob "$1" "*-softmmu" || return 1
185 case "${1%-softmmu}" in
193 supported_kvm_target() {
194 test "$kvm" = "yes" || return 1
195 glob "$1" "*-softmmu" || return 1
196 case "${1%-softmmu}:$cpu" in
197 arm:arm | aarch64:aarch64 | \
198 i386:i386 | i386:x86_64 | i386:x32 | \
199 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200 mips:mips | mipsel:mips | \
201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
209 supported_xen_target() {
210 test "$xen" = "yes" || return 1
211 glob "$1" "*-softmmu" || return 1
212 # Only i386 and x86_64 provide the xenpv machine.
213 case "${1%-softmmu}" in
221 supported_hvf_target() {
222 test "$hvf" = "yes" || return 1
223 glob "$1" "*-softmmu" || return 1
224 case "${1%-softmmu}" in
232 supported_whpx_target() {
233 test "$whpx" = "yes" || return 1
234 glob "$1" "*-softmmu" || return 1
235 case "${1%-softmmu}" in
248 if test "$linux" != "yes"; then
249 print_error "Target '$target' is only available on a Linux host"
254 if test "$bsd" != "yes"; then
255 print_error "Target '$target' is only available on a BSD host"
260 print_error "Invalid target name '$target'"
264 test "$tcg" = "yes" && return 0
265 supported_kvm_target "$1" && return 0
266 supported_xen_target "$1" && return 0
267 supported_hax_target "$1" && return 0
268 supported_hvf_target "$1" && return 0
269 supported_whpx_target "$1" && return 0
270 print_error "TCG disabled, but hardware accelerator not available for '$target'"
276 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
279 # make source path absolute
280 source_path=$(cd "$(dirname -- "$0")"; pwd)
282 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284 error_exit "main directory cannot contain spaces nor colons"
290 interp_prefix="/usr/gnemul/qemu-%M"
294 block_drv_rw_whitelist=""
295 block_drv_ro_whitelist=""
306 if test -e "$source_path/.git"
309 git_submodules="ui/keycodemapdb"
310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
316 if ! test -f "$source_path/ui/keycodemapdb/README"
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
326 echo " https://www.qemu.org/download/"
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
336 # Don't accept a target_list environment variable.
338 unset target_list_exclude
340 # Default value for a variable defining feature "foo".
341 # * foo="no" feature will only be used if --enable-foo arg is given
342 # * foo="" feature will be searched for, and if found, will be used
343 # unless --disable-foo is given
344 # * foo="yes" this value will only be set by --enable-foo flag.
345 # feature will searched for,
346 # if not found, configure exits with error
348 # Always add --enable-foo and --disable-foo command line args.
349 # Distributions want to ensure that several features are compiled in, and it
350 # is impossible without a --enable-foo that exits if a feature is not found.
372 xen_pci_passthrough=""
404 LDFLAGS_SHARED="-shared"
407 mandir="\${prefix}/share/man"
408 datadir="\${prefix}/share"
409 firmwarepath="\${prefix}/share/qemu-firmware"
410 qemu_docdir="\${prefix}/share/doc/qemu"
411 bindir="\${prefix}/bin"
412 libdir="\${prefix}/lib"
413 libexecdir="\${prefix}/libexec"
414 includedir="\${prefix}/include"
415 sysconfdir="\${prefix}/etc"
416 local_statedir="\${prefix}/var"
450 guest_agent_with_vss="no"
451 guest_agent_ntddscsi="no"
460 debug_stack_usage="no"
464 glusterfs_xlator_opt="no"
465 glusterfs_discard="no"
466 glusterfs_fallocate="no"
467 glusterfs_zerofill="no"
468 glusterfs_ftruncate_has_stat="no"
469 glusterfs_iocb_has_stat="no"
472 tls_priority="NORMAL"
482 live_block_migration="yes"
501 default_devices="yes"
503 # cross compilers defaults, can be overridden with --cross-cc-ARCH
504 cross_cc_aarch64="aarch64-linux-gnu-gcc"
505 cross_cc_aarch64_be="$cross_cc_aarch64"
506 cross_cc_cflags_aarch64_be="-mbig-endian"
507 cross_cc_arm="arm-linux-gnueabihf-gcc"
508 cross_cc_cflags_armeb="-mbig-endian"
509 cross_cc_i386="i386-pc-linux-gnu-gcc"
510 cross_cc_cflags_i386=""
511 cross_cc_ppc="powerpc-linux-gnu-gcc"
512 cross_cc_cflags_ppc="-m32"
513 cross_cc_ppc64="powerpc-linux-gnu-gcc"
514 cross_cc_cflags_ppc64="-m64"
515 cross_cc_ppc64le="powerpc64le-linux-gnu-gcc"
517 enabled_cross_compilers=""
524 # parse CC options first
526 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
528 --cross-prefix=*) cross_prefix="$optarg"
532 --cxx=*) CXX="$optarg"
534 --cpu=*) cpu="$optarg"
536 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
538 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
540 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
541 EXTRA_LDFLAGS="$optarg"
543 --enable-debug-info) debug_info="yes"
545 --disable-debug-info) debug_info="no"
547 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
549 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
550 eval "cross_cc_cflags_${cc_arch}=\$optarg"
552 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
553 eval "cross_cc_${cc_arch}=\$optarg"
558 # Using uname is really, really broken. Once we have the right set of checks
559 # we can eliminate its usage altogether.
561 # Preferred compiler:
563 # ${cross_prefix}gcc (if cross-prefix specified)
565 if test -z "${CC}${cross_prefix}"; then
568 cc="${CC-${cross_prefix}gcc}"
571 if test -z "${CXX}${cross_prefix}"; then
574 cxx="${CXX-${cross_prefix}g++}"
577 ar="${AR-${cross_prefix}ar}"
578 as="${AS-${cross_prefix}as}"
581 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
582 ld="${LD-${cross_prefix}ld}"
583 ranlib="${RANLIB-${cross_prefix}ranlib}"
584 nm="${NM-${cross_prefix}nm}"
585 strip="${STRIP-${cross_prefix}strip}"
586 windres="${WINDRES-${cross_prefix}windres}"
587 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
589 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
591 pkg_config=query_pkg_config
592 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
594 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
595 ARFLAGS="${ARFLAGS-rv}"
597 # default flags for all hosts
598 # We use -fwrapv to tell the compiler that we require a C dialect where
599 # left shift of signed integers is well defined and has the expected
600 # 2s-complement style results. (Both clang and gcc agree that it
601 # provides these semantics.)
602 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
603 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
604 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
605 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
606 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
607 if test "$debug_info" = "yes"; then
609 LDFLAGS="-g $LDFLAGS"
612 # running configure in the source tree?
613 # we know that's the case if configure is there.
614 if test -f "./configure"; then
615 pwd_is_source_path="y"
617 pwd_is_source_path="n"
623 #error $1 not defined
625 int main(void) { return 0; }
633 int main(void) { return 0; }
640 int main(void) { return 0; }
644 if check_define __linux__ ; then
646 elif check_define _WIN32 ; then
648 elif check_define __OpenBSD__ ; then
650 elif check_define __sun__ ; then
652 elif check_define __HAIKU__ ; then
654 elif check_define __FreeBSD__ ; then
656 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
657 targetos='GNU/kFreeBSD'
658 elif check_define __DragonFly__ ; then
660 elif check_define __NetBSD__; then
662 elif check_define __APPLE__; then
665 # This is a fatal error, but don't report it yet, because we
666 # might be going to just print the --help text, or it might
667 # be the result of a missing compiler.
672 # Some host OSes need non-standard checks for which CPU to use.
673 # Note that these checks are broken for cross-compilation: if you're
674 # cross-compiling to one of these OSes then you'll need to specify
675 # the correct CPU with the --cpu option.
678 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
679 # run 64-bit userspace code.
680 # If the user didn't specify a CPU explicitly and the kernel says this is
681 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
682 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
687 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
688 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
693 if test ! -z "$cpu" ; then
694 # command line argument
696 elif check_define __i386__ ; then
698 elif check_define __x86_64__ ; then
699 if check_define __ILP32__ ; then
704 elif check_define __sparc__ ; then
705 if check_define __arch64__ ; then
710 elif check_define _ARCH_PPC ; then
711 if check_define _ARCH_PPC64 ; then
712 if check_define _LITTLE_ENDIAN ; then
720 elif check_define __mips__ ; then
722 elif check_define __s390__ ; then
723 if check_define __s390x__ ; then
728 elif check_define __riscv ; then
729 if check_define _LP64 ; then
734 elif check_define __arm__ ; then
736 elif check_define __aarch64__ ; then
743 # Normalise host CPU name and set ARCH.
744 # Note that this case should only have supported host CPUs, not guests.
746 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
748 eval "cross_cc_${cpu}=\$host_cc"
753 cross_cc_ppc64le=$host_cc
755 i386|i486|i586|i686|i86pc|BePC)
758 cross_cc_i386=$host_cc
763 cross_cc_x86_64=$host_cc
768 cross_cc_arm=$host_cc
773 cross_cc_aarch64=$host_cc
778 cross_cc_mips=$host_cc
783 cross_cc_sparc=$host_cc
786 # This will result in either an error or falling back to TCI later
790 if test -z "$ARCH"; then
796 # host *BSD for user mode
804 audio_possible_drivers="dsound sdl"
805 if check_include dsound.h; then
806 audio_drv_list="dsound"
814 audio_drv_list="oss try-sdl"
815 audio_possible_drivers="oss sdl pa"
820 audio_drv_list="oss try-sdl"
821 audio_possible_drivers="oss sdl pa"
822 # needed for kinfo_getvmmap(3) in libutil.h
824 # needed for kinfo_getproc
825 libs_qga="-lutil $libs_qga"
826 netmap="" # enable netmap autodetect
827 HOST_VARIANT_DIR="freebsd"
833 audio_drv_list="oss try-sdl"
834 audio_possible_drivers="oss sdl pa"
835 HOST_VARIANT_DIR="dragonfly"
841 audio_drv_list="oss try-sdl"
842 audio_possible_drivers="oss sdl"
844 HOST_VARIANT_DIR="netbsd"
850 audio_drv_list="try-sdl"
851 audio_possible_drivers="sdl"
852 HOST_VARIANT_DIR="openbsd"
860 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
861 if [ "$cpu" = "x86_64" ] ; then
862 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
863 LDFLAGS="-arch x86_64 $LDFLAGS"
866 audio_drv_list="coreaudio try-sdl"
867 audio_possible_drivers="coreaudio sdl"
868 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
869 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
870 # Disable attempts to use ObjectiveC features in os/object.h since they
871 # won't work when we're compiling with gcc as a C compiler.
872 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
873 HOST_VARIANT_DIR="darwin"
879 install="${INSTALL-ginstall}"
880 smbd="${SMBD-/usr/sfw/sbin/smbd}"
881 if test -f /usr/include/sys/soundcard.h ; then
882 audio_drv_list="oss try-sdl"
884 audio_possible_drivers="oss sdl"
885 # needed for CMSG_ macros in sys/socket.h
886 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
887 # needed for TIOCWIN* defines in termios.h
888 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
889 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
890 solarisnetlibs="-lsocket -lnsl -lresolv"
891 LIBS="$solarisnetlibs $LIBS"
892 libs_qga="$solarisnetlibs $libs_qga"
896 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897 LIBS="-lposix_error_mapper -lnetwork $LIBS"
900 audio_drv_list="try-pa oss"
901 audio_possible_drivers="oss alsa sdl pa"
905 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
911 if [ "$bsd" = "yes" ] ; then
912 if [ "$darwin" != "yes" ] ; then
917 : ${make=${MAKE-make}}
918 : ${install=${INSTALL-install}}
919 # We prefer python 3.x. A bare 'python' is traditionally
920 # python 2.x, but some distros have it as python 3.x, so
921 # we check that before python2
923 for binary in "${PYTHON-python3}" python python2
931 : ${smbd=${SMBD-/usr/sbin/smbd}}
933 # Default objcc to clang if available, otherwise use CC
940 if test "$mingw32" = "yes" ; then
943 # MinGW needs -mthreads for TLS and macro _MT.
944 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
945 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
947 if compile_prog "" "-liberty" ; then
948 LIBS="-liberty $LIBS"
950 prefix="c:/Program Files/QEMU"
953 qemu_docdir="\${prefix}"
955 sysconfdir="\${prefix}"
958 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
964 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
966 --help|-h) show_help=yes
968 --version|-V) exec cat $source_path/VERSION
970 --prefix=*) prefix="$optarg"
972 --interp-prefix=*) interp_prefix="$optarg"
978 --host-cc=*) host_cc="$optarg"
982 --iasl=*) iasl="$optarg"
984 --objcc=*) objcc="$optarg"
986 --make=*) make="$optarg"
988 --install=*) install="$optarg"
990 --python=*) python="$optarg"
992 --gcov=*) gcov_tool="$optarg"
994 --smbd=*) smbd="$optarg"
1002 --enable-debug-info)
1004 --disable-debug-info)
1016 --target-list=*) target_list="$optarg"
1017 if test "$target_list_exclude"; then
1018 error_exit "Can't mix --target-list with --target-list-exclude"
1021 --target-list-exclude=*) target_list_exclude="$optarg"
1022 if test "$target_list"; then
1023 error_exit "Can't mix --target-list-exclude with --target-list"
1026 --enable-trace-backends=*) trace_backends="$optarg"
1028 # XXX: backwards compatibility
1029 --enable-trace-backend=*) trace_backends="$optarg"
1031 --with-trace-file=*) trace_file="$optarg"
1033 --with-default-devices) default_devices="yes"
1035 --without-default-devices) default_devices="no"
1037 --enable-gprof) gprof="yes"
1039 --enable-gcov) gcov="yes"
1043 LDFLAGS="-static $LDFLAGS"
1044 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1046 --mandir=*) mandir="$optarg"
1048 --bindir=*) bindir="$optarg"
1050 --libdir=*) libdir="$optarg"
1052 --libexecdir=*) libexecdir="$optarg"
1054 --includedir=*) includedir="$optarg"
1056 --datadir=*) datadir="$optarg"
1058 --with-confsuffix=*) confsuffix="$optarg"
1060 --docdir=*) qemu_docdir="$optarg"
1062 --sysconfdir=*) sysconfdir="$optarg"
1064 --localstatedir=*) local_statedir="$optarg"
1066 --firmwarepath=*) firmwarepath="$optarg"
1068 --host=*|--build=*|\
1069 --disable-dependency-tracking|\
1070 --sbindir=*|--sharedstatedir=*|\
1071 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1072 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1073 # These switches are silently ignored, for compatibility with
1074 # autoconf-generated configure scripts. This allows QEMU's
1075 # configure to be used by RPM and similar macros that set
1076 # lots of directory switches by default.
1078 --disable-sdl) sdl="no"
1080 --enable-sdl) sdl="yes"
1082 --disable-sdl-image) sdl_image="no"
1084 --enable-sdl-image) sdl_image="yes"
1086 --disable-qom-cast-debug) qom_cast_debug="no"
1088 --enable-qom-cast-debug) qom_cast_debug="yes"
1090 --disable-virtfs) virtfs="no"
1092 --enable-virtfs) virtfs="yes"
1094 --disable-mpath) mpath="no"
1096 --enable-mpath) mpath="yes"
1098 --disable-vnc) vnc="no"
1100 --enable-vnc) vnc="yes"
1102 --oss-lib=*) oss_lib="$optarg"
1104 --audio-drv-list=*) audio_drv_list="$optarg"
1106 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1108 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1110 --enable-debug-tcg) debug_tcg="yes"
1112 --disable-debug-tcg) debug_tcg="no"
1115 # Enable debugging options that aren't excessively noisy
1122 --enable-sanitizers) sanitizers="yes"
1124 --disable-sanitizers) sanitizers="no"
1126 --enable-sparse) sparse="yes"
1128 --disable-sparse) sparse="no"
1130 --disable-strip) strip_opt="no"
1132 --disable-vnc-sasl) vnc_sasl="no"
1134 --enable-vnc-sasl) vnc_sasl="yes"
1136 --disable-vnc-jpeg) vnc_jpeg="no"
1138 --enable-vnc-jpeg) vnc_jpeg="yes"
1140 --disable-vnc-png) vnc_png="no"
1142 --enable-vnc-png) vnc_png="yes"
1144 --disable-slirp) slirp="no"
1146 --enable-slirp=git) slirp="git"
1148 --enable-slirp=system) slirp="system"
1150 --disable-vde) vde="no"
1152 --enable-vde) vde="yes"
1154 --disable-netmap) netmap="no"
1156 --enable-netmap) netmap="yes"
1158 --disable-xen) xen="no"
1160 --enable-xen) xen="yes"
1162 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1164 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1166 --disable-brlapi) brlapi="no"
1168 --enable-brlapi) brlapi="yes"
1170 --disable-bluez) bluez="no"
1172 --enable-bluez) bluez="yes"
1174 --disable-kvm) kvm="no"
1176 --enable-kvm) kvm="yes"
1178 --disable-hax) hax="no"
1180 --enable-hax) hax="yes"
1182 --disable-hvf) hvf="no"
1184 --enable-hvf) hvf="yes"
1186 --disable-whpx) whpx="no"
1188 --enable-whpx) whpx="yes"
1190 --disable-tcg-interpreter) tcg_interpreter="no"
1192 --enable-tcg-interpreter) tcg_interpreter="yes"
1194 --disable-cap-ng) cap_ng="no"
1196 --enable-cap-ng) cap_ng="yes"
1198 --disable-tcg) tcg="no"
1200 --enable-tcg) tcg="yes"
1202 --disable-malloc-trim) malloc_trim="no"
1204 --enable-malloc-trim) malloc_trim="yes"
1206 --disable-spice) spice="no"
1208 --enable-spice) spice="yes"
1210 --disable-libiscsi) libiscsi="no"
1212 --enable-libiscsi) libiscsi="yes"
1214 --disable-libnfs) libnfs="no"
1216 --enable-libnfs) libnfs="yes"
1218 --enable-profiler) profiler="yes"
1220 --disable-cocoa) cocoa="no"
1224 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1226 --disable-system) softmmu="no"
1228 --enable-system) softmmu="yes"
1235 --disable-linux-user) linux_user="no"
1237 --enable-linux-user) linux_user="yes"
1239 --disable-bsd-user) bsd_user="no"
1241 --enable-bsd-user) bsd_user="yes"
1243 --enable-pie) pie="yes"
1245 --disable-pie) pie="no"
1247 --enable-werror) werror="yes"
1249 --disable-werror) werror="no"
1251 --enable-stack-protector) stack_protector="yes"
1253 --disable-stack-protector) stack_protector="no"
1255 --disable-curses) curses="no"
1257 --enable-curses) curses="yes"
1259 --disable-iconv) iconv="no"
1261 --enable-iconv) iconv="yes"
1263 --disable-curl) curl="no"
1265 --enable-curl) curl="yes"
1267 --disable-fdt) fdt="no"
1269 --enable-fdt) fdt="yes"
1271 --disable-linux-aio) linux_aio="no"
1273 --enable-linux-aio) linux_aio="yes"
1275 --disable-attr) attr="no"
1277 --enable-attr) attr="yes"
1279 --disable-membarrier) membarrier="no"
1281 --enable-membarrier) membarrier="yes"
1283 --disable-blobs) blobs="no"
1285 --with-pkgversion=*) pkgversion="$optarg"
1287 --with-coroutine=*) coroutine="$optarg"
1289 --disable-coroutine-pool) coroutine_pool="no"
1291 --enable-coroutine-pool) coroutine_pool="yes"
1293 --enable-debug-stack-usage) debug_stack_usage="yes"
1295 --enable-crypto-afalg) crypto_afalg="yes"
1297 --disable-crypto-afalg) crypto_afalg="no"
1299 --disable-docs) docs="no"
1301 --enable-docs) docs="yes"
1303 --disable-vhost-net) vhost_net="no"
1305 --enable-vhost-net) vhost_net="yes"
1307 --disable-vhost-crypto) vhost_crypto="no"
1309 --enable-vhost-crypto) vhost_crypto="yes"
1311 --disable-vhost-scsi) vhost_scsi="no"
1313 --enable-vhost-scsi) vhost_scsi="yes"
1315 --disable-vhost-vsock) vhost_vsock="no"
1317 --enable-vhost-vsock) vhost_vsock="yes"
1319 --disable-opengl) opengl="no"
1321 --enable-opengl) opengl="yes"
1323 --disable-rbd) rbd="no"
1325 --enable-rbd) rbd="yes"
1327 --disable-xfsctl) xfs="no"
1329 --enable-xfsctl) xfs="yes"
1331 --disable-smartcard) smartcard="no"
1333 --enable-smartcard) smartcard="yes"
1335 --disable-libusb) libusb="no"
1337 --enable-libusb) libusb="yes"
1339 --disable-usb-redir) usb_redir="no"
1341 --enable-usb-redir) usb_redir="yes"
1343 --disable-zlib-test) zlib="no"
1345 --disable-lzo) lzo="no"
1347 --enable-lzo) lzo="yes"
1349 --disable-snappy) snappy="no"
1351 --enable-snappy) snappy="yes"
1353 --disable-bzip2) bzip2="no"
1355 --enable-bzip2) bzip2="yes"
1357 --enable-lzfse) lzfse="yes"
1359 --disable-lzfse) lzfse="no"
1361 --enable-guest-agent) guest_agent="yes"
1363 --disable-guest-agent) guest_agent="no"
1365 --enable-guest-agent-msi) guest_agent_msi="yes"
1367 --disable-guest-agent-msi) guest_agent_msi="no"
1369 --with-vss-sdk) vss_win32_sdk=""
1371 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1373 --without-vss-sdk) vss_win32_sdk="no"
1375 --with-win-sdk) win_sdk=""
1377 --with-win-sdk=*) win_sdk="$optarg"
1379 --without-win-sdk) win_sdk="no"
1381 --enable-tools) want_tools="yes"
1383 --disable-tools) want_tools="no"
1385 --enable-seccomp) seccomp="yes"
1387 --disable-seccomp) seccomp="no"
1389 --disable-glusterfs) glusterfs="no"
1391 --disable-avx2) avx2_opt="no"
1393 --enable-avx2) avx2_opt="yes"
1395 --enable-glusterfs) glusterfs="yes"
1397 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1398 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1400 --enable-vhdx|--disable-vhdx)
1401 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1403 --enable-uuid|--disable-uuid)
1404 echo "$0: $opt is obsolete, UUID support is always built" >&2
1406 --disable-gtk) gtk="no"
1408 --enable-gtk) gtk="yes"
1410 --tls-priority=*) tls_priority="$optarg"
1412 --disable-gnutls) gnutls="no"
1414 --enable-gnutls) gnutls="yes"
1416 --disable-nettle) nettle="no"
1418 --enable-nettle) nettle="yes"
1420 --disable-gcrypt) gcrypt="no"
1422 --enable-gcrypt) gcrypt="yes"
1424 --disable-auth-pam) auth_pam="no"
1426 --enable-auth-pam) auth_pam="yes"
1428 --enable-rdma) rdma="yes"
1430 --disable-rdma) rdma="no"
1432 --enable-pvrdma) pvrdma="yes"
1434 --disable-pvrdma) pvrdma="no"
1436 --disable-vte) vte="no"
1438 --enable-vte) vte="yes"
1440 --disable-virglrenderer) virglrenderer="no"
1442 --enable-virglrenderer) virglrenderer="yes"
1444 --disable-tpm) tpm="no"
1446 --enable-tpm) tpm="yes"
1448 --disable-libssh) libssh="no"
1450 --enable-libssh) libssh="yes"
1452 --disable-live-block-migration) live_block_migration="no"
1454 --enable-live-block-migration) live_block_migration="yes"
1456 --disable-numa) numa="no"
1458 --enable-numa) numa="yes"
1460 --disable-libxml2) libxml2="no"
1462 --enable-libxml2) libxml2="yes"
1464 --disable-tcmalloc) tcmalloc="no"
1466 --enable-tcmalloc) tcmalloc="yes"
1468 --disable-jemalloc) jemalloc="no"
1470 --enable-jemalloc) jemalloc="yes"
1472 --disable-replication) replication="no"
1474 --enable-replication) replication="yes"
1476 --disable-vxhs) vxhs="no"
1478 --enable-vxhs) vxhs="yes"
1480 --disable-bochs) bochs="no"
1482 --enable-bochs) bochs="yes"
1484 --disable-cloop) cloop="no"
1486 --enable-cloop) cloop="yes"
1488 --disable-dmg) dmg="no"
1490 --enable-dmg) dmg="yes"
1492 --disable-qcow1) qcow1="no"
1494 --enable-qcow1) qcow1="yes"
1496 --disable-vdi) vdi="no"
1498 --enable-vdi) vdi="yes"
1500 --disable-vvfat) vvfat="no"
1502 --enable-vvfat) vvfat="yes"
1504 --disable-qed) qed="no"
1506 --enable-qed) qed="yes"
1508 --disable-parallels) parallels="no"
1510 --enable-parallels) parallels="yes"
1512 --disable-sheepdog) sheepdog="no"
1514 --enable-sheepdog) sheepdog="yes"
1516 --disable-vhost-user) vhost_user="no"
1518 --enable-vhost-user) vhost_user="yes"
1520 --disable-vhost-kernel) vhost_kernel="no"
1522 --enable-vhost-kernel) vhost_kernel="yes"
1524 --disable-capstone) capstone="no"
1526 --enable-capstone) capstone="yes"
1528 --enable-capstone=git) capstone="git"
1530 --enable-capstone=system) capstone="system"
1532 --with-git=*) git="$optarg"
1534 --enable-git-update) git_update=yes
1536 --disable-git-update) git_update=no
1538 --enable-debug-mutex) debug_mutex=yes
1540 --disable-debug-mutex) debug_mutex=no
1542 --enable-libpmem) libpmem=yes
1544 --disable-libpmem) libpmem=no
1547 echo "ERROR: unknown option $opt"
1548 echo "Try '$0 --help' for more information"
1557 LDFLAGS="-m32 $LDFLAGS"
1559 cross_cc_cflags_ppc="$CPU_CFLAGS"
1563 LDFLAGS="-m64 $LDFLAGS"
1565 cross_cc_cflags_ppc64="$CPU_CFLAGS"
1568 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1569 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1571 cross_cc_cflags_sparc="$CPU_CFLAGS"
1574 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1575 LDFLAGS="-m64 $LDFLAGS"
1576 cross_cc_sparc64=$cc
1577 cross_cc_cflags_sparc64="$CPU_CFLAGS"
1581 LDFLAGS="-m31 $LDFLAGS"
1583 cross_cc_cflags_s390="$CPU_CFLAGS"
1587 LDFLAGS="-m64 $LDFLAGS"
1589 cross_cc_cflags_s390x="$CPU_CFLAGS"
1593 LDFLAGS="-m32 $LDFLAGS"
1595 cross_cc_cflags_i386="$CPU_CFLAGS"
1598 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1599 # If we truly care, we should simply detect this case at
1600 # runtime and generate the fallback to serial emulation.
1601 CPU_CFLAGS="-m64 -mcx16"
1602 LDFLAGS="-m64 $LDFLAGS"
1604 cross_cc_cflags_x86_64="$CPU_CFLAGS"
1608 LDFLAGS="-mx32 $LDFLAGS"
1610 cross_cc_cflags_i386="$CPU_CFLAGS"
1612 # No special flags required for other host CPUs
1615 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1617 # For user-mode emulation the host arch has to be one we explicitly
1618 # support, even if we're using TCI.
1619 if [ "$ARCH" = "unknown" ]; then
1624 default_target_list=""
1628 if [ "$softmmu" = "yes" ]; then
1629 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1631 if [ "$linux_user" = "yes" ]; then
1632 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1634 if [ "$bsd_user" = "yes" ]; then
1635 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1638 if test -z "$target_list_exclude"; then
1639 for config in $mak_wilds; do
1640 default_target_list="${default_target_list} $(basename "$config" .mak)"
1643 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1644 for config in $mak_wilds; do
1645 target="$(basename "$config" .mak)"
1647 for excl in $exclude_list; do
1648 if test "$excl" = "$target"; then
1653 if test "$exclude" = "no"; then
1654 default_target_list="${default_target_list} $target"
1659 # Enumerate public trace backends for --help output
1660 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1662 if test x"$show_help" = x"yes" ; then
1665 Usage: configure [options]
1666 Options: [defaults in brackets after descriptions]
1669 --help print this message
1670 --prefix=PREFIX install in PREFIX [$prefix]
1671 --interp-prefix=PREFIX where to find shared libraries, etc.
1672 use %M for cpu name [$interp_prefix]
1673 --target-list=LIST set target list (default: build everything)
1674 $(echo Available targets: $default_target_list | \
1675 fold -s -w 53 | sed -e 's/^/ /')
1676 --target-list-exclude=LIST exclude a set of targets from the default target-list
1678 Advanced options (experts only):
1679 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1680 --cc=CC use C compiler CC [$cc]
1681 --iasl=IASL use ACPI compiler IASL [$iasl]
1682 --host-cc=CC use C compiler CC [$host_cc] for code run at
1684 --cxx=CXX use C++ compiler CXX [$cxx]
1685 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1686 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1687 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1688 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1689 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1690 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1691 --make=MAKE use specified make [$make]
1692 --install=INSTALL use specified install [$install]
1693 --python=PYTHON use specified python [$python]
1694 --smbd=SMBD use specified smbd [$smbd]
1695 --with-git=GIT use specified git [$git]
1696 --static enable static build [$static]
1697 --mandir=PATH install man pages in PATH
1698 --datadir=PATH install firmware in PATH$confsuffix
1699 --docdir=PATH install documentation in PATH$confsuffix
1700 --bindir=PATH install binaries in PATH
1701 --libdir=PATH install libraries in PATH
1702 --libexecdir=PATH install helper binaries in PATH
1703 --sysconfdir=PATH install config in PATH$confsuffix
1704 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1705 --firmwarepath=PATH search PATH for firmware files
1706 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1707 --with-pkgversion=VERS use specified string as sub-version of the package
1708 --enable-debug enable common debug build options
1709 --enable-sanitizers enable default sanitizers
1710 --disable-strip disable stripping binaries
1711 --disable-werror disable compilation abort on warning
1712 --disable-stack-protector disable compiler-provided stack protection
1713 --audio-drv-list=LIST set audio drivers list:
1714 Available drivers: $audio_possible_drivers
1715 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1716 --block-drv-rw-whitelist=L
1717 set block driver read-write whitelist
1718 (affects only QEMU, not qemu-img)
1719 --block-drv-ro-whitelist=L
1720 set block driver read-only whitelist
1721 (affects only QEMU, not qemu-img)
1722 --enable-trace-backends=B Set trace backend
1723 Available backends: $trace_backend_list
1724 --with-trace-file=NAME Full PATH,NAME of file to store traces
1726 --disable-slirp disable SLIRP userspace network connectivity
1727 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1728 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1729 --oss-lib path to OSS library
1730 --cpu=CPU Build for host CPU [$cpu]
1731 --with-coroutine=BACKEND coroutine backend. Supported options:
1732 ucontext, sigaltstack, windows
1733 --enable-gcov enable test coverage analysis with gcov
1734 --gcov=GCOV use specified gcov [$gcov_tool]
1735 --disable-blobs disable installing provided firmware blobs
1736 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1737 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1738 --tls-priority default TLS protocol/cipher priority string
1739 --enable-gprof QEMU profiling with gprof
1740 --enable-profiler profiler support
1741 --enable-debug-stack-usage
1742 track the maximum stack usage of stacks created by qemu_alloc_stack
1744 Optional features, enabled with --enable-FEATURE and
1745 disabled with --disable-FEATURE, default is enabled if available:
1747 system all system emulation targets
1748 user supported user emulation targets
1749 linux-user all linux usermode emulation targets
1750 bsd-user all BSD usermode emulation targets
1751 docs build documentation
1752 guest-agent build the QEMU Guest Agent
1753 guest-agent-msi build guest agent Windows MSI installation package
1754 pie Position Independent Executables
1755 modules modules support
1756 debug-tcg TCG debugging (default is disabled)
1757 debug-info debugging information
1758 sparse sparse checker
1760 gnutls GNUTLS cryptography support
1761 nettle nettle cryptography support
1762 gcrypt libgcrypt cryptography support
1763 auth-pam PAM access control
1765 sdl-image SDL Image support for icons
1767 vte vte support for the gtk UI
1769 iconv font glyph conversion support
1771 vnc-sasl SASL encryption for VNC server
1772 vnc-jpeg JPEG lossy compression for VNC server
1773 vnc-png PNG compression for VNC server
1774 cocoa Cocoa UI (Mac OS X only)
1776 mpath Multipath persistent reservation passthrough
1777 xen xen backend driver support
1778 xen-pci-passthrough PCI passthrough support for Xen
1779 brlapi BrlAPI (Braile)
1780 curl curl connectivity
1781 membarrier membarrier system call (for Linux 4.14+ or Windows)
1783 bluez bluez stack connectivity
1784 kvm KVM acceleration support
1785 hax HAX acceleration support
1786 hvf Hypervisor.framework acceleration support
1787 whpx Windows Hypervisor Platform acceleration support
1788 rdma Enable RDMA-based migration
1789 pvrdma Enable PVRDMA support
1790 vde support for vde network
1791 netmap support for netmap network
1792 linux-aio Linux AIO support
1793 cap-ng libcap-ng support
1794 attr attr and xattr support
1795 vhost-net vhost-net kernel acceleration support
1796 vhost-vsock virtio sockets device support
1797 vhost-scsi vhost-scsi kernel target support
1798 vhost-crypto vhost-user-crypto backend support
1799 vhost-kernel vhost kernel backend support
1800 vhost-user vhost-user backend support
1802 rbd rados block device (rbd)
1803 libiscsi iscsi support
1805 smartcard smartcard support (libcacard)
1806 libusb libusb (for usb passthrough)
1807 live-block-migration Block migration in the main migration stream
1808 usb-redir usb network redirection support
1809 lzo support of lzo compression library
1810 snappy support of snappy compression library
1811 bzip2 support of bzip2 compression library
1812 (for reading bzip2-compressed dmg images)
1813 lzfse support of lzfse compression library
1814 (for reading lzfse-compressed dmg images)
1815 seccomp seccomp support
1816 coroutine-pool coroutine freelist (better performance)
1817 glusterfs GlusterFS backend
1819 libssh ssh block device support
1820 numa libnuma support
1821 libxml2 for Parallels image format
1822 tcmalloc tcmalloc support
1823 jemalloc jemalloc support
1824 avx2 AVX2 optimization support
1825 replication replication support
1826 opengl opengl support
1827 virglrenderer virgl rendering support
1828 xfsctl xfsctl support
1829 qom-cast-debug cast debugging support
1830 tools build qemu-io, qemu-nbd and qemu-img tools
1831 vxhs Veritas HyperScale vDisk backend support
1832 bochs bochs image format support
1833 cloop cloop image format support
1834 dmg dmg image format support
1835 qcow1 qcow v1 image format support
1836 vdi vdi image format support
1837 vvfat vvfat image format support
1838 qed qed image format support
1839 parallels parallels image format support
1840 sheepdog sheepdog block driver support
1841 crypto-afalg Linux AF_ALG crypto backend driver
1842 capstone capstone disassembler support
1843 debug-mutex mutex debugging support
1844 libpmem libpmem support
1846 NOTE: The object files are built at the place where configure is launched
1851 # Remove old dependency files to make sure that they get properly regenerated
1852 rm -f */config-devices.mak.d
1854 if test -z "$python"
1856 error_exit "Python not found. Use --python=/path/to/python"
1859 # Note that if the Python conditional here evaluates True we will exit
1860 # with status 1 which is a shell 'false' value.
1861 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1862 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1863 "Use --python=/path/to/python to specify a supported Python."
1866 # Preserve python version since some functionality is dependent on it
1867 python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1869 # Suppress writing compiled files
1872 # Check that the C compiler works. Doing this here before testing
1873 # the host CPU ensures that we had a valid CC to autodetect the
1874 # $cpu var (and we should bail right here if that's not the case).
1875 # It also allows the help message to be printed without a CC.
1877 if compile_object ; then
1878 : C compiler works ok
1880 error_exit "\"$cc\" either does not exist or does not work"
1882 if ! compile_prog ; then
1883 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1886 # Now we have handled --enable-tcg-interpreter and know we're not just
1887 # printing the help message, bail out if the host CPU isn't supported.
1888 if test "$ARCH" = "unknown"; then
1889 if test "$tcg_interpreter" = "yes" ; then
1890 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1892 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1896 # Consult white-list to determine whether to enable werror
1897 # by default. Only enable by default for git builds
1898 if test -z "$werror" ; then
1899 if test -e "$source_path/.git" && \
1900 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1907 if test "$bogus_os" = "yes"; then
1908 # Now that we know that we're not printing the help and that
1909 # the compiler works (so the results of the check_defines we used
1910 # to identify the OS are reliable), if we didn't recognize the
1911 # host OS we should stop now.
1912 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1915 # Check whether the compiler matches our minimum requirements:
1917 #if defined(__clang_major__) && defined(__clang_minor__)
1918 # ifdef __apple_build_version__
1919 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1920 # error You need at least XCode Clang v5.1 to compile QEMU
1923 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1924 # error You need at least Clang v3.4 to compile QEMU
1927 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1928 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1929 # error You need at least GCC v4.8 to compile QEMU
1932 # error You either need GCC or Clang to compiler QEMU
1934 int main (void) { return 0; }
1936 if ! compile_prog "" "" ; then
1937 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1940 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1941 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1942 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1943 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1944 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1945 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1946 # Note that we do not add -Werror to gcc_flags here, because that would
1947 # enable it for all configure tests. If a configure test failed due
1948 # to -Werror this would just silently disable some features,
1949 # so it's too error prone.
1951 cc_has_warning_flag() {
1954 # Use the positive sense of the flag when testing for -Wno-wombat
1955 # support (gcc will happily accept the -Wno- form of unknown
1957 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1958 compile_prog "-Werror $optflag" ""
1961 for flag in $gcc_flags; do
1962 if cc_has_warning_flag $flag ; then
1963 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1967 if test "$stack_protector" != "no"; then
1969 int main(int argc, char *argv[])
1971 char arr[64], *p = arr, *c = argv[0];
1978 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1980 for flag in $gcc_flags; do
1981 # We need to check both a compile and a link, since some compiler
1982 # setups fail only on a .c->.o compile and some only at link time
1983 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1984 compile_prog "-Werror $flag" ""; then
1985 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1990 if test "$stack_protector" = yes; then
1991 if test $sp_on = 0; then
1992 error_exit "Stack protector not supported"
1997 # Disable -Wmissing-braces on older compilers that warn even for
1998 # the "universal" C zero initializer {0}.
2004 if compile_object "-Werror" "" ; then
2007 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2010 # Static linking is not possible with modules or PIE
2011 if test "$static" = "yes" ; then
2012 if test "$modules" = "yes" ; then
2013 error_exit "static and modules are mutually incompatible"
2015 if test "$pie" = "yes" ; then
2016 error_exit "static and pie are mutually incompatible"
2022 # Unconditional check for compiler __thread support
2024 static __thread int tls_var;
2025 int main(void) { return tls_var; }
2028 if ! compile_prog "-Werror" "" ; then
2029 error_exit "Your compiler does not support the __thread specifier for " \
2030 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2033 if test "$pie" = ""; then
2034 case "$cpu-$targetos" in
2035 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2043 if test "$pie" != "no" ; then
2047 # define THREAD __thread
2052 static THREAD int tls_var;
2054 int main(void) { return tls_var; }
2057 if compile_prog "-fPIE -DPIE" "-pie"; then
2058 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2059 LDFLAGS="-pie $LDFLAGS"
2061 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2062 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2065 if test "$pie" = "yes"; then
2066 error_exit "PIE not available due to missing toolchain support"
2068 echo "Disabling PIE due to missing toolchain support"
2073 if compile_prog "-Werror -fno-pie" "-nopie"; then
2074 CFLAGS_NOPIE="-fno-pie"
2075 LDFLAGS_NOPIE="-nopie"
2079 ##########################################
2080 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2081 # use i686 as default anyway, but for those that don't, an explicit
2082 # specification is necessary
2084 if test "$cpu" = "i386"; then
2086 static int sfaa(int *ptr)
2088 return __sync_fetch_and_and(ptr, 0);
2094 val = __sync_val_compare_and_swap(&val, 0, 1);
2099 if ! compile_prog "" "" ; then
2100 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2104 #########################################
2105 # Solaris specific configure tool chain decisions
2107 if test "$solaris" = "yes" ; then
2108 if has $install; then
2111 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2112 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2113 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2115 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2116 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2117 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2118 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2123 if test -f /usr/ccs/bin/ar ; then
2124 error_exit "No path includes ar" \
2125 "Add /usr/ccs/bin to your path and rerun configure"
2127 error_exit "No path includes ar"
2131 if test -z "${target_list+xxx}" ; then
2132 for target in $default_target_list; do
2133 supported_target $target 2>/dev/null && \
2134 target_list="$target_list $target"
2136 target_list="${target_list# }"
2138 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2139 for target in $target_list; do
2140 # Check that we recognised the target name; this allows a more
2141 # friendly error message than if we let it fall through.
2142 case " $default_target_list " in
2146 error_exit "Unknown target name '$target'"
2149 supported_target $target || exit 1
2153 # see if system emulation was really requested
2154 case " $target_list " in
2155 *"-softmmu "*) softmmu=yes
2161 feature_not_found() {
2165 error_exit "User requested feature $feature" \
2166 "configure was not able to find it." \
2171 # big/little endian test
2173 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2174 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2175 extern int foo(short *, short *);
2176 int main(int argc, char *argv[]) {
2177 return foo(big_endian, little_endian);
2181 if compile_object ; then
2182 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2184 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2187 echo big/little test failed
2190 echo big/little test failed
2193 ##########################################
2194 # cocoa implies not SDL or GTK
2195 # (the cocoa UI code currently assumes it is always the active UI
2196 # and doesn't interact well with other UI frontend code)
2197 if test "$cocoa" = "yes"; then
2198 if test "$sdl" = "yes"; then
2199 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2201 if test "$gtk" = "yes"; then
2202 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2208 # Some versions of Mac OS X incorrectly define SIZE_MAX
2212 int main(int argc, char *argv[]) {
2213 return printf("%zu", SIZE_MAX);
2216 have_broken_size_max=no
2217 if ! compile_object -Werror ; then
2218 have_broken_size_max=yes
2221 ##########################################
2225 #include <sys/socket.h>
2226 #include <linux/ip.h>
2227 int main(void) { return sizeof(struct mmsghdr); }
2229 if compile_prog "" "" ; then
2235 #########################################
2236 # vhost interdependencies and host support
2239 test "$vhost_user" = "" && vhost_user=yes
2240 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2241 error_exit "vhost-user isn't available on win32"
2243 test "$vhost_kernel" = "" && vhost_kernel=$linux
2244 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2245 error_exit "vhost-kernel is only available on Linux"
2248 # vhost-kernel devices
2249 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2250 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2251 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2253 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2254 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2255 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2258 # vhost-user backends
2259 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2260 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2261 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2263 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2264 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2265 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2268 # OR the vhost-kernel and vhost-user values for simplicity
2269 if test "$vhost_net" = ""; then
2270 test "$vhost_net_user" = "yes" && vhost_net=yes
2271 test "$vhost_kernel" = "yes" && vhost_net=yes
2274 ##########################################
2275 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2277 if test "$mingw32" = "yes"; then
2278 # Some versions of MinGW / Mingw-w64 lack localtime_r
2279 # and gmtime_r entirely.
2281 # Some versions of Mingw-w64 define a macro for
2282 # localtime_r/gmtime_r.
2284 # Some versions of Mingw-w64 will define functions
2285 # for localtime_r/gmtime_r, but only if you have
2286 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2287 # though, unistd.h and pthread.h both define
2290 # So this #undef localtime_r and #include <unistd.h>
2291 # are not in fact redundant.
2296 int main(void) { localtime_r(NULL, NULL); return 0; }
2298 if compile_prog "" "" ; then
2305 ##########################################
2308 if ! has "$pkg_config_exe"; then
2309 error_exit "pkg-config binary '$pkg_config_exe' not found"
2312 ##########################################
2315 if test "$linux_user" = "yes"; then
2318 #include <linux/futex.h>
2320 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2326 if ! compile_object ; then
2327 feature_not_found "nptl" "Install glibc and linux kernel headers."
2331 ##########################################
2334 if test "$lzo" != "no" ; then
2336 #include <lzo/lzo1x.h>
2337 int main(void) { lzo_version(); return 0; }
2339 if compile_prog "" "-llzo2" ; then
2340 libs_softmmu="$libs_softmmu -llzo2"
2343 if test "$lzo" = "yes"; then
2344 feature_not_found "liblzo2" "Install liblzo2 devel"
2350 ##########################################
2353 if test "$snappy" != "no" ; then
2355 #include <snappy-c.h>
2356 int main(void) { snappy_max_compressed_length(4096); return 0; }
2358 if compile_prog "" "-lsnappy" ; then
2359 libs_softmmu="$libs_softmmu -lsnappy"
2362 if test "$snappy" = "yes"; then
2363 feature_not_found "libsnappy" "Install libsnappy devel"
2369 ##########################################
2372 if test "$bzip2" != "no" ; then
2375 int main(void) { BZ2_bzlibVersion(); return 0; }
2377 if compile_prog "" "-lbz2" ; then
2380 if test "$bzip2" = "yes"; then
2381 feature_not_found "libbzip2" "Install libbzip2 devel"
2387 ##########################################
2390 if test "$lzfse" != "no" ; then
2393 int main(void) { lzfse_decode_scratch_size(); return 0; }
2395 if compile_prog "" "-llzfse" ; then
2398 if test "$lzfse" = "yes"; then
2399 feature_not_found "lzfse" "Install lzfse devel"
2405 ##########################################
2408 if test "$seccomp" != "no" ; then
2409 libseccomp_minver="2.3.0"
2410 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2411 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2412 seccomp_libs="$($pkg_config --libs libseccomp)"
2415 if test "$seccomp" = "yes" ; then
2416 feature_not_found "libseccomp" \
2417 "Install libseccomp devel >= $libseccomp_minver"
2422 ##########################################
2425 if test "$xen" != "no" ; then
2426 # Check whether Xen library path is specified via --extra-ldflags to avoid
2427 # overriding this setting with pkg-config output. If not, try pkg-config
2428 # to obtain all needed flags.
2430 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2431 $pkg_config --exists xencontrol ; then
2432 xen_ctrl_version="$(printf '%d%02d%02d' \
2433 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2435 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2436 xen_pc="$xen_pc xenevtchn xendevicemodel"
2437 if $pkg_config --exists xentoolcore; then
2438 xen_pc="$xen_pc xentoolcore"
2440 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2441 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2444 xen_libs="-lxenstore -lxenctrl -lxenguest"
2445 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2447 # First we test whether Xen headers and libraries are available.
2448 # If no, we are done and there is no Xen support.
2449 # If yes, more tests are run to detect the Xen version.
2453 #include <xenctrl.h>
2458 if ! compile_prog "" "$xen_libs" ; then
2460 if test "$xen" = "yes" ; then
2461 feature_not_found "xen" "Install xen devel"
2467 cat > $TMPC <<EOF &&
2468 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2469 #define __XEN_TOOLS__
2470 #include <xendevicemodel.h>
2471 #include <xenforeignmemory.h>
2473 xendevicemodel_handle *xd;
2474 xenforeignmemory_handle *xfmem;
2476 xd = xendevicemodel_open(0, 0);
2477 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2479 xfmem = xenforeignmemory_open(0, 0);
2480 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2485 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2487 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2488 xen_ctrl_version=41100
2491 cat > $TMPC <<EOF &&
2492 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2493 #include <xenforeignmemory.h>
2494 #include <xentoolcore.h>
2496 xenforeignmemory_handle *xfmem;
2498 xfmem = xenforeignmemory_open(0, 0);
2499 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2500 xentoolcore_restrict_all(0);
2505 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2507 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2508 xen_ctrl_version=41000
2511 cat > $TMPC <<EOF &&
2512 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2513 #define __XEN_TOOLS__
2514 #include <xendevicemodel.h>
2516 xendevicemodel_handle *xd;
2518 xd = xendevicemodel_open(0, 0);
2519 xendevicemodel_close(xd);
2524 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2526 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2527 xen_ctrl_version=40900
2530 cat > $TMPC <<EOF &&
2532 * If we have stable libs the we don't want the libxc compat
2533 * layers, regardless of what CFLAGS we may have been given.
2535 * Also, check if xengnttab_grant_copy_segment_t is defined and
2536 * grant copy operation is implemented.
2538 #undef XC_WANT_COMPAT_EVTCHN_API
2539 #undef XC_WANT_COMPAT_GNTTAB_API
2540 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2541 #include <xenctrl.h>
2542 #include <xenstore.h>
2543 #include <xenevtchn.h>
2544 #include <xengnttab.h>
2545 #include <xenforeignmemory.h>
2547 #include <xen/hvm/hvm_info_table.h>
2548 #if !defined(HVM_MAX_VCPUS)
2549 # error HVM_MAX_VCPUS not defined
2552 xc_interface *xc = NULL;
2553 xenforeignmemory_handle *xfmem;
2554 xenevtchn_handle *xe;
2555 xengnttab_handle *xg;
2556 xengnttab_grant_copy_segment_t* seg = NULL;
2560 xc = xc_interface_open(0, 0, 0);
2561 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2562 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2563 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2564 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2566 xfmem = xenforeignmemory_open(0, 0);
2567 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2569 xe = xenevtchn_open(0, 0);
2572 xg = xengnttab_open(0, 0);
2573 xengnttab_grant_copy(xg, 0, seg);
2578 compile_prog "" "$xen_libs $xen_stable_libs"
2580 xen_ctrl_version=40800
2583 cat > $TMPC <<EOF &&
2585 * If we have stable libs the we don't want the libxc compat
2586 * layers, regardless of what CFLAGS we may have been given.
2588 #undef XC_WANT_COMPAT_EVTCHN_API
2589 #undef XC_WANT_COMPAT_GNTTAB_API
2590 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591 #include <xenctrl.h>
2592 #include <xenstore.h>
2593 #include <xenevtchn.h>
2594 #include <xengnttab.h>
2595 #include <xenforeignmemory.h>
2597 #include <xen/hvm/hvm_info_table.h>
2598 #if !defined(HVM_MAX_VCPUS)
2599 # error HVM_MAX_VCPUS not defined
2602 xc_interface *xc = NULL;
2603 xenforeignmemory_handle *xfmem;
2604 xenevtchn_handle *xe;
2605 xengnttab_handle *xg;
2609 xc = xc_interface_open(0, 0, 0);
2610 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2611 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2612 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2613 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2615 xfmem = xenforeignmemory_open(0, 0);
2616 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2618 xe = xenevtchn_open(0, 0);
2621 xg = xengnttab_open(0, 0);
2622 xengnttab_map_grant_ref(xg, 0, 0, 0);
2627 compile_prog "" "$xen_libs $xen_stable_libs"
2629 xen_ctrl_version=40701
2634 cat > $TMPC <<EOF &&
2635 #include <xenctrl.h>
2636 #include <xenstore.h>
2638 #include <xen/hvm/hvm_info_table.h>
2639 #if !defined(HVM_MAX_VCPUS)
2640 # error HVM_MAX_VCPUS not defined
2645 xc = xc_interface_open(0, 0, 0);
2646 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647 xc_gnttab_open(NULL, 0);
2648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2650 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2651 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2655 compile_prog "" "$xen_libs"
2657 xen_ctrl_version=40600
2662 cat > $TMPC <<EOF &&
2663 #include <xenctrl.h>
2664 #include <xenstore.h>
2666 #include <xen/hvm/hvm_info_table.h>
2667 #if !defined(HVM_MAX_VCPUS)
2668 # error HVM_MAX_VCPUS not defined
2673 xc = xc_interface_open(0, 0, 0);
2674 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2675 xc_gnttab_open(NULL, 0);
2676 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2677 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2678 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2682 compile_prog "" "$xen_libs"
2684 xen_ctrl_version=40500
2688 cat > $TMPC <<EOF &&
2689 #include <xenctrl.h>
2690 #include <xenstore.h>
2692 #include <xen/hvm/hvm_info_table.h>
2693 #if !defined(HVM_MAX_VCPUS)
2694 # error HVM_MAX_VCPUS not defined
2699 xc = xc_interface_open(0, 0, 0);
2700 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2701 xc_gnttab_open(NULL, 0);
2702 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2703 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2707 compile_prog "" "$xen_libs"
2709 xen_ctrl_version=40200
2713 if test "$xen" = "yes" ; then
2714 feature_not_found "xen (unsupported version)" \
2715 "Install a supported xen (xen 4.2 or newer)"
2720 if test "$xen" = yes; then
2721 if test $xen_ctrl_version -ge 40701 ; then
2722 libs_softmmu="$xen_stable_libs $libs_softmmu"
2724 libs_softmmu="$xen_libs $libs_softmmu"
2729 if test "$xen_pci_passthrough" != "no"; then
2730 if test "$xen" = "yes" && test "$linux" = "yes"; then
2731 xen_pci_passthrough=yes
2733 if test "$xen_pci_passthrough" = "yes"; then
2734 error_exit "User requested feature Xen PCI Passthrough" \
2735 " but this feature requires /sys from Linux"
2737 xen_pci_passthrough=no
2741 ##########################################
2742 # Windows Hypervisor Platform accelerator (WHPX) check
2743 if test "$whpx" != "no" ; then
2744 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2747 if test "$whpx" = "yes"; then
2748 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2754 ##########################################
2756 if test "$sparse" != "no" ; then
2760 if test "$sparse" = "yes" ; then
2761 feature_not_found "sparse" "Install sparse binary"
2767 ##########################################
2769 if $pkg_config --exists "x11"; then
2771 x11_cflags=$($pkg_config --cflags x11)
2772 x11_libs=$($pkg_config --libs x11)
2775 ##########################################
2778 if test "$gtk" != "no"; then
2779 gtkpackage="gtk+-3.0"
2780 gtkx11package="gtk+-x11-3.0"
2782 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2783 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2784 gtk_libs=$($pkg_config --libs $gtkpackage)
2785 gtk_version=$($pkg_config --modversion $gtkpackage)
2786 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2788 gtk_cflags="$gtk_cflags $x11_cflags"
2789 gtk_libs="$gtk_libs $x11_libs"
2792 elif test "$gtk" = "yes"; then
2793 feature_not_found "gtk" "Install gtk3-devel"
2800 ##########################################
2803 if test "$gnutls" != "no"; then
2805 if $pkg_config --exists "gnutls >= 3.1.18"; then
2806 gnutls_cflags=$($pkg_config --cflags gnutls)
2807 gnutls_libs=$($pkg_config --libs gnutls)
2808 # Packaging for the static libraries is not always correct.
2809 # At least ubuntu 18.04 ships only shared libraries.
2811 if compile_prog "" "$gnutls_libs" ; then
2812 LIBS="$gnutls_libs $LIBS"
2813 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2817 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2818 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2825 # If user didn't give a --disable/enable-gcrypt flag,
2826 # then mark as disabled if user requested nettle
2828 if test -z "$gcrypt"
2830 if test "$nettle" = "yes"
2836 # If user didn't give a --disable/enable-nettle flag,
2837 # then mark as disabled if user requested gcrypt
2839 if test -z "$nettle"
2841 if test "$gcrypt" = "yes"
2848 if ! has "libgcrypt-config"
2853 if test -n "$cross_prefix"
2855 host=$(libgcrypt-config --host)
2856 if test "$host-" != $cross_prefix
2862 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2863 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2865 if test $maj != 1 || test $min -lt 5
2874 if test "$nettle" != "no"; then
2876 if $pkg_config --exists "nettle >= 2.7.1"; then
2877 nettle_cflags=$($pkg_config --cflags nettle)
2878 nettle_libs=$($pkg_config --libs nettle)
2879 nettle_version=$($pkg_config --modversion nettle)
2880 # Link test to make sure the given libraries work (e.g for static).
2882 if compile_prog "" "$nettle_libs" ; then
2883 LIBS="$nettle_libs $LIBS"
2884 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2885 if test -z "$gcrypt"; then
2891 if test "$pass" = "no" && test "$nettle" = "yes"; then
2892 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2898 if test "$gcrypt" != "no"; then
2900 if has_libgcrypt; then
2901 gcrypt_cflags=$(libgcrypt-config --cflags)
2902 gcrypt_libs=$(libgcrypt-config --libs)
2903 # Debian has removed -lgpg-error from libgcrypt-config
2904 # as it "spreads unnecessary dependencies" which in
2905 # turn breaks static builds...
2906 if test "$static" = "yes"
2908 gcrypt_libs="$gcrypt_libs -lgpg-error"
2911 # Link test to make sure the given libraries work (e.g for static).
2913 if compile_prog "" "$gcrypt_libs" ; then
2914 LIBS="$gcrypt_libs $LIBS"
2915 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2919 if test "$pass" = "yes"; then
2924 gcry_mac_hd_t handle;
2925 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2926 GCRY_MAC_FLAG_SECURE, NULL);
2930 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2933 elif test "$gcrypt" = "yes"; then
2934 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2941 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2943 error_exit "Only one of gcrypt & nettle can be enabled"
2946 ##########################################
2947 # libtasn1 - only for the TLS creds/session test suite
2952 if $pkg_config --exists "libtasn1"; then
2953 tasn1_cflags=$($pkg_config --cflags libtasn1)
2954 tasn1_libs=$($pkg_config --libs libtasn1)
2960 ##########################################
2963 if test "$auth_pam" != "no"; then
2965 #include <security/pam_appl.h>
2968 const char *service_name = "qemu";
2969 const char *user = "frank";
2970 const struct pam_conv pam_conv = { 0 };
2971 pam_handle_t *pamh = NULL;
2972 pam_start(service_name, user, &pam_conv, &pamh);
2976 if compile_prog "" "-lpam" ; then
2979 if test "$auth_pam" = "yes"; then
2980 feature_not_found "PAM" "Install PAM development package"
2987 ##########################################
2988 # getifaddrs (for tests/test-io-channel-socket )
2991 if ! check_include "ifaddrs.h" ; then
2995 ##########################################
2998 if test "$vte" != "no"; then
2999 vteminversion="0.32.0"
3000 if $pkg_config --exists "vte-2.91"; then
3001 vtepackage="vte-2.91"
3003 vtepackage="vte-2.90"
3005 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3006 vte_cflags=$($pkg_config --cflags $vtepackage)
3007 vte_libs=$($pkg_config --libs $vtepackage)
3008 vteversion=$($pkg_config --modversion $vtepackage)
3010 elif test "$vte" = "yes"; then
3011 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3017 ##########################################
3020 # Look for sdl configuration program (pkg-config or sdl-config). Try
3021 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
3025 if $pkg_config sdl2 --exists; then
3026 sdlconfig="$pkg_config sdl2"
3027 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3028 elif has ${sdl_config}; then
3029 sdlconfig="$sdl2_config"
3030 sdlversion=$($sdlconfig --version)
3032 if test "$sdl" = "yes" ; then
3033 feature_not_found "sdl" "Install SDL2-devel"
3036 # no need to do the rest
3039 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3040 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3045 #undef main /* We don't want SDL to override our main() */
3046 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3048 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3049 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3050 if test "$static" = "yes" ; then
3051 if $pkg_config sdl2 --exists; then
3052 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3054 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3057 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3059 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3062 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3063 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3064 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3065 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3066 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3068 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3074 else # sdl not found
3075 if test "$sdl" = "yes" ; then
3076 feature_not_found "sdl" "Install SDL2 devel"
3079 fi # sdl compile test
3084 if test "$sdl_image" != "no" ; then
3085 if $pkg_config SDL2_image --exists; then
3086 if test "$static" = "yes"; then
3087 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3089 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3091 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3094 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3095 sdl_libs="$sdl_libs $sdl_image_libs"
3097 if test "$sdl_image" = "yes" ; then
3098 feature_not_found "sdl_image" "Install SDL Image devel"
3106 if test "$sdl" != "no" ; then
3110 if test "$sdl" = "yes" ; then
3113 if test "$sdl_image" = "yes"; then
3114 echo "warning: SDL Image requested, but SDL is not available, disabling"
3119 if test "$sdl" = "yes" ; then
3122 #if defined(SDL_VIDEO_DRIVER_X11)
3123 #include <X11/XKBlib.h>
3125 #error No x11 support
3127 int main(void) { return 0; }
3129 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3131 sdl_cflags="$sdl_cflags $x11_cflags"
3132 sdl_libs="$sdl_libs $x11_libs"
3136 ##########################################
3137 # RDMA needs OpenFabrics libraries
3138 if test "$rdma" != "no" ; then
3140 #include <rdma/rdma_cma.h>
3141 int main(void) { return 0; }
3143 rdma_libs="-lrdmacm -libverbs -libumad"
3144 if compile_prog "" "$rdma_libs" ; then
3146 libs_softmmu="$libs_softmmu $rdma_libs"
3148 if test "$rdma" = "yes" ; then
3150 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3152 " (1) Fast: Install infiniband packages (devel) from your distro." \
3153 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3154 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3160 ##########################################
3163 cat > $TMPC <<EOF &&
3164 #include <sys/mman.h>
3171 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3177 if test "$rdma" = "yes" ; then
3180 if compile_prog "" ""; then
3187 if ! compile_prog "" ""; then
3188 error_exit "PVRDMA is not supported since mremap is not implemented"
3197 if test "$pvrdma" = "yes" ; then
3198 error_exit "PVRDMA requires rdma suppport"
3203 ##########################################
3204 # VNC SASL detection
3205 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3207 #include <sasl/sasl.h>
3209 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3211 # Assuming Cyrus-SASL installed in /usr prefix
3213 vnc_sasl_libs="-lsasl2"
3214 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3216 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3217 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3219 if test "$vnc_sasl" = "yes" ; then
3220 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3226 ##########################################
3227 # VNC JPEG detection
3228 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3231 #include <jpeglib.h>
3232 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3235 vnc_jpeg_libs="-ljpeg"
3236 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3238 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3239 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3241 if test "$vnc_jpeg" = "yes" ; then
3242 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3248 ##########################################
3250 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3252 //#include <stdio.h>
3256 png_structp png_ptr;
3257 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3258 return png_ptr != 0;
3261 if $pkg_config libpng --exists; then
3262 vnc_png_cflags=$($pkg_config libpng --cflags)
3263 vnc_png_libs=$($pkg_config libpng --libs)
3266 vnc_png_libs="-lpng"
3268 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3270 libs_softmmu="$vnc_png_libs $libs_softmmu"
3271 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3273 if test "$vnc_png" = "yes" ; then
3274 feature_not_found "vnc-png" "Install libpng devel"
3280 ##########################################
3282 if test "$xkbcommon" != "no" ; then
3283 if $pkg_config xkbcommon --exists; then
3284 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3285 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3288 if test "$xkbcommon" = "yes" ; then
3289 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3296 ##########################################
3297 # xfsctl() probe, used for file-posix.c
3298 if test "$xfs" != "no" ; then
3300 #include <stddef.h> /* NULL */
3301 #include <xfs/xfs.h>
3304 xfsctl(NULL, 0, 0, NULL);
3308 if compile_prog "" "" ; then
3311 if test "$xfs" = "yes" ; then
3312 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3318 ##########################################
3319 # vde libraries probe
3320 if test "$vde" != "no" ; then
3321 vde_libs="-lvdeplug"
3323 #include <libvdeplug.h>
3326 struct vde_open_args a = {0, 0, 0};
3332 if compile_prog "" "$vde_libs" ; then
3335 if test "$vde" = "yes" ; then
3336 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3342 ##########################################
3343 # netmap support probe
3344 # Apart from looking for netmap headers, we make sure that the host API version
3345 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3346 # a minor/major version number. Minor new features will be marked with values up
3347 # to 15, and if something happens that requires a change to the backend we will
3348 # move above 15, submit the backend fixes and modify this two bounds.
3349 if test "$netmap" != "no" ; then
3351 #include <inttypes.h>
3353 #include <net/netmap.h>
3354 #include <net/netmap_user.h>
3355 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3358 int main(void) { return 0; }
3360 if compile_prog "" "" ; then
3363 if test "$netmap" = "yes" ; then
3364 feature_not_found "netmap"
3370 ##########################################
3371 # libcap-ng library probe
3372 if test "$cap_ng" != "no" ; then
3378 capng_capability_to_name(CAPNG_EFFECTIVE);
3382 if compile_prog "" "$cap_libs" ; then
3384 libs_tools="$cap_libs $libs_tools"
3386 if test "$cap_ng" = "yes" ; then
3387 feature_not_found "cap_ng" "Install libcap-ng devel"
3393 ##########################################
3394 # Sound support libraries probe
3396 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3397 for drv in $audio_drv_list; do
3400 if $pkg_config alsa --exists; then
3401 alsa_libs=$($pkg_config alsa --libs)
3402 if test "$drv" = "try-alsa"; then
3403 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3406 if test "$drv" = "try-alsa"; then
3407 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3409 error_exit "$drv check failed" \
3410 "Make sure to have the $drv libs and headers installed."
3416 if $pkg_config libpulse --exists; then
3417 pulse_libs=$($pkg_config libpulse --libs)
3419 if test "$drv" = "try-pa"; then
3420 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3423 if test "$drv" = "try-pa"; then
3424 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3426 error_exit "$drv check failed" \
3427 "Make sure to have the $drv libs and headers installed."
3433 if test "$sdl" = "no"; then
3434 error_exit "sdl not found or disabled, can not use sdl audio driver"
3439 if test "$sdl" = "no"; then
3440 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3442 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3447 coreaudio_libs="-framework CoreAudio"
3451 dsound_libs="-lole32 -ldxguid"
3460 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3461 error_exit "Unknown driver '$drv' selected" \
3462 "Possible drivers are: $audio_possible_drivers"
3468 ##########################################
3471 if test "$brlapi" != "no" ; then
3472 brlapi_libs="-lbrlapi"
3476 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3478 if compile_prog "" "$brlapi_libs" ; then
3481 if test "$brlapi" = "yes" ; then
3482 feature_not_found "brlapi" "Install brlapi devel"
3488 ##########################################
3490 if test "$iconv" != "no" ; then
3494 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3495 return conv != (iconv_t) -1;
3498 iconv_prefix_list="/usr/local:/usr"
3499 iconv_lib_list=":-liconv"
3501 for iconv_prefix in $iconv_prefix_list; do
3503 iconv_cflags="-I$iconv_prefix/include"
3504 iconv_ldflags="-L$iconv_prefix/lib"
3505 for iconv_link in $iconv_lib_list; do
3507 iconv_lib="$iconv_ldflags $iconv_link"
3508 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3509 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3514 if test "$iconv_found" = yes ; then
3518 if test "$iconv_found" = "yes" ; then
3521 if test "$iconv" = "yes" ; then
3522 feature_not_found "iconv" "Install iconv devel"
3528 ##########################################
3530 if test "$iconv" = "no" ; then
3531 # curses will need iconv
3534 if test "$curses" != "no" ; then
3535 if test "$mingw32" = "yes" ; then
3536 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3537 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3539 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3540 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3547 #include <langinfo.h>
3549 const char *codeset;
3551 setlocale(LC_ALL, "");
3553 addwstr(L"wide chars\n");
3555 add_wch(WACS_DEGREE);
3556 codeset = nl_langinfo(CODESET);
3557 return codeset != 0;
3561 for curses_inc in $curses_inc_list; do
3562 # Make sure we get the wide character prototypes
3563 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3565 for curses_lib in $curses_lib_list; do
3567 if compile_prog "$curses_inc" "$curses_lib" ; then
3572 if test "$curses_found" = yes ; then
3577 if test "$curses_found" = "yes" ; then
3580 if test "$curses" = "yes" ; then
3581 feature_not_found "curses" "Install ncurses devel"
3587 ##########################################
3589 if test "$curl" != "no" ; then
3590 if $pkg_config libcurl --exists; then
3591 curlconfig="$pkg_config libcurl"
3593 curlconfig=curl-config
3596 #include <curl/curl.h>
3597 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3599 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3600 curl_libs=$($curlconfig --libs 2>/dev/null)
3601 if compile_prog "$curl_cflags" "$curl_libs" ; then
3604 if test "$curl" = "yes" ; then
3605 feature_not_found "curl" "Install libcurl devel"
3611 ##########################################
3612 # bluez support probe
3613 if test "$bluez" != "no" ; then
3615 #include <bluetooth/bluetooth.h>
3616 int main(void) { return bt_error(0); }
3618 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3619 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3620 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3622 libs_softmmu="$bluez_libs $libs_softmmu"
3624 if test "$bluez" = "yes" ; then
3625 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3631 ##########################################
3632 # glib support probe
3635 glib_modules=gthread-2.0
3636 if test "$modules" = yes; then
3637 glib_modules="$glib_modules gmodule-export-2.0"
3640 # This workaround is required due to a bug in pkg-config file for glib as it
3641 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3643 if test "$static" = yes && test "$mingw32" = yes; then
3644 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3647 for i in $glib_modules; do
3648 if $pkg_config --atleast-version=$glib_req_ver $i; then
3649 glib_cflags=$($pkg_config --cflags $i)
3650 glib_libs=$($pkg_config --libs $i)
3651 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3652 LIBS="$glib_libs $LIBS"
3653 libs_qga="$glib_libs $libs_qga"
3655 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3659 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3661 gio_cflags=$($pkg_config --cflags gio-2.0)
3662 gio_libs=$($pkg_config --libs gio-2.0)
3667 # Sanity check that the current size_t matches the
3668 # size that glib thinks it should be. This catches
3669 # problems on multi-arch where people try to build
3670 # 32-bit QEMU while pointing at 64-bit glib headers
3675 #define QEMU_BUILD_BUG_ON(x) \
3676 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3679 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3684 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3685 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3686 "You probably need to set PKG_CONFIG_LIBDIR"\
3687 "to point to the right pkg-config files for your"\
3691 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3694 int main(void) { return 0; }
3696 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3697 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3698 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3699 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3703 #########################################
3706 if test "$zlib" != "no" ; then
3707 if $pkg_config --exists zlib; then
3708 zlib_cflags=$($pkg_config --cflags zlib)
3709 zlib_libs=$($pkg_config --libs zlib)
3710 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3711 LIBS="$zlib_libs $LIBS"
3715 int main(void) { zlibVersion(); return 0; }
3717 if compile_prog "" "-lz" ; then
3720 error_exit "zlib check failed" \
3721 "Make sure to have the zlib libs and headers installed."
3726 ##########################################
3727 # SHA command probe for modules
3728 if test "$modules" = yes; then
3729 shacmd_probe="sha1sum sha1 shasum"
3730 for c in $shacmd_probe; do
3736 if test "$shacmd" = ""; then
3737 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3741 ##########################################
3742 # pixman support probe
3744 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3747 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3748 pixman_cflags=$($pkg_config --cflags pixman-1)
3749 pixman_libs=$($pkg_config --libs pixman-1)
3751 error_exit "pixman >= 0.21.8 not present." \
3752 "Please install the pixman devel package."
3755 ##########################################
3756 # libmpathpersist probe
3758 if test "$mpath" != "no" ; then
3759 # probe for the new API
3761 #include <libudev.h>
3762 #include <mpath_persist.h>
3763 unsigned mpath_mx_alloc_len = 1024;
3765 static struct config *multipath_conf;
3766 extern struct udev *udev;
3767 extern struct config *get_multipath_config(void);
3768 extern void put_multipath_config(struct config *conf);
3770 struct config *get_multipath_config(void) { return multipath_conf; }
3771 void put_multipath_config(struct config *conf) { }
3775 multipath_conf = mpath_lib_init();
3779 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3781 mpathpersist_new_api=yes
3783 # probe for the old API
3785 #include <libudev.h>
3786 #include <mpath_persist.h>
3787 unsigned mpath_mx_alloc_len = 1024;
3790 struct udev *udev = udev_new();
3791 mpath_lib_init(udev);
3795 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3797 mpathpersist_new_api=no
3806 ##########################################
3809 if test "$cap" != "no" ; then
3812 #include <sys/capability.h>
3813 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3815 if compile_prog "" "-lcap" ; then
3822 ##########################################
3824 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3828 #include <pthread.h>
3829 static void *f(void *p) { return NULL; }
3832 pthread_create(&thread, 0, f, 0);
3836 if compile_prog "" "" ; then
3839 for pthread_lib in $PTHREADLIBS_LIST; do
3840 if compile_prog "" "$pthread_lib" ; then
3843 for lib_entry in $LIBS; do
3844 if test "$lib_entry" = "$pthread_lib"; then
3849 if test "$found" = "no"; then
3850 LIBS="$pthread_lib $LIBS"
3851 libs_qga="$pthread_lib $libs_qga"
3853 PTHREAD_LIB="$pthread_lib"
3859 if test "$mingw32" != yes && test "$pthread" = no; then
3860 error_exit "pthread check failed" \
3861 "Make sure to have the pthread libs and headers installed."
3864 # check for pthread_setname_np with thread id
3865 pthread_setname_np_w_tid=no
3867 #include <pthread.h>
3869 static void *f(void *p) { return NULL; }
3873 pthread_create(&thread, 0, f, 0);
3874 pthread_setname_np(thread, "QEMU");
3878 if compile_prog "" "$pthread_lib" ; then
3879 pthread_setname_np_w_tid=yes
3882 # check for pthread_setname_np without thread id
3883 pthread_setname_np_wo_tid=no
3885 #include <pthread.h>
3887 static void *f(void *p) { pthread_setname_np("QEMU"); }
3891 pthread_create(&thread, 0, f, 0);
3895 if compile_prog "" "$pthread_lib" ; then
3896 pthread_setname_np_wo_tid=yes
3899 ##########################################
3901 if test "$rbd" != "no" ; then
3904 #include <rbd/librbd.h>
3907 rados_create(&cluster, NULL);
3911 rbd_libs="-lrbd -lrados"
3912 if compile_prog "" "$rbd_libs" ; then
3915 if test "$rbd" = "yes" ; then
3916 feature_not_found "rados block device" "Install librbd/ceph devel"
3922 ##########################################
3924 if test "$libssh" != "no" ; then
3925 if $pkg_config --exists libssh; then
3926 libssh_cflags=$($pkg_config libssh --cflags)
3927 libssh_libs=$($pkg_config libssh --libs)
3930 if test "$libssh" = "yes" ; then
3931 error_exit "libssh required for --enable-libssh"
3937 ##########################################
3938 # Check for libssh 0.8
3939 # This is done like this instead of using the LIBSSH_VERSION_* and
3940 # SSH_VERSION_* macros because some distributions in the past shipped
3941 # snapshots of the future 0.8 from Git, and those snapshots did not
3942 # have updated version numbers (still referring to 0.7.0).
3944 if test "$libssh" = "yes"; then
3946 #include <libssh/libssh.h>
3947 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3949 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3950 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3954 ##########################################
3957 if test "$linux_aio" != "no" ; then
3960 #include <sys/eventfd.h>
3962 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3964 if compile_prog "" "-laio" ; then
3967 if test "$linux_aio" = "yes" ; then
3968 feature_not_found "linux AIO" "Install libaio devel"
3974 ##########################################
3975 # TPM emulation is only on POSIX
3977 if test "$tpm" = ""; then
3978 if test "$mingw32" = "yes"; then
3983 elif test "$tpm" = "yes"; then
3984 if test "$mingw32" = "yes" ; then
3985 error_exit "TPM emulation only available on POSIX systems"
3989 ##########################################
3992 if test "$attr" != "no" ; then
3995 #include <sys/types.h>
3996 #ifdef CONFIG_LIBATTR
3997 #include <attr/xattr.h>
3999 #include <sys/xattr.h>
4001 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4003 if compile_prog "" "" ; then
4005 # Older distros have <attr/xattr.h>, and need -lattr:
4006 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4011 if test "$attr" = "yes" ; then
4012 feature_not_found "ATTR" "Install libc6 or libattr devel"
4018 ##########################################
4021 #include <sys/types.h>
4022 #include <sys/uio.h>
4024 int main(void) { return sizeof(struct iovec); }
4027 if compile_prog "" "" ; then
4031 ##########################################
4034 #include <sys/types.h>
4035 #include <sys/uio.h>
4037 int main(void) { return preadv(0, 0, 0, 0); }
4040 if compile_prog "" "" ; then
4044 ##########################################
4046 # fdt support is mandatory for at least some target architectures,
4047 # so insist on it if we're building those system emulators.
4049 for target in $target_list; do
4051 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4057 if test "$fdt_required" = "yes"; then
4058 if test "$fdt" = "no"; then
4059 error_exit "fdt disabled but some requested targets require it." \
4060 "You can turn off fdt only if you also disable all the system emulation" \
4061 "targets which need it (by specifying a cut down --target-list)."
4066 if test "$fdt" != "no" ; then
4068 # explicitly check for libfdt_env.h as it is missing in some stable installs
4069 # and test for required functions to make sure we are on a version >= 1.4.2
4072 #include <libfdt_env.h>
4073 int main(void) { fdt_check_full(NULL, 0); return 0; }
4075 if compile_prog "" "$fdt_libs" ; then
4076 # system DTC is good - use it
4079 # have GIT checkout, so activate dtc submodule
4080 if test -e "${source_path}/.git" ; then
4081 git_submodules="${git_submodules} dtc"
4083 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4086 if [ "$pwd_is_source_path" != "y" ] ; then
4087 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4088 symlink "$source_path/dtc/scripts" "dtc/scripts"
4090 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4091 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4092 fdt_libs="$fdt_libs"
4093 elif test "$fdt" = "yes" ; then
4094 # Not a git build & no libfdt found, prompt for system install
4095 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4096 "Please install the DTC (libfdt) devel package"
4098 # don't have and don't want
4105 libs_softmmu="$libs_softmmu $fdt_libs"
4107 ##########################################
4108 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4111 if $pkg_config gbm; then
4112 gbm_cflags="$($pkg_config --cflags gbm)"
4113 gbm_libs="$($pkg_config --libs gbm)"
4117 if test "$opengl" != "no" ; then
4118 opengl_pkgs="epoxy gbm"
4119 if $pkg_config $opengl_pkgs; then
4120 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4121 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4123 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4126 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4128 if test "$opengl" = "yes" ; then
4129 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4137 if test "$opengl" = "yes"; then
4139 #include <epoxy/egl.h>
4140 #ifndef EGL_MESA_image_dma_buf_export
4141 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4143 int main(void) { return 0; }
4145 if compile_prog "" "" ; then
4150 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4151 for target in $target_list; do
4153 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4160 ##########################################
4162 if test "$libxml2" != "no" ; then
4163 if $pkg_config --exists libxml-2.0; then
4165 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4166 libxml2_libs=$($pkg_config --libs libxml-2.0)
4168 if test "$libxml2" = "yes"; then
4169 feature_not_found "libxml2" "Install libxml2 devel"
4175 ##########################################
4177 if test "$glusterfs" != "no" ; then
4178 if $pkg_config --atleast-version=3 glusterfs-api; then
4180 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4181 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4182 if $pkg_config --atleast-version=4 glusterfs-api; then
4183 glusterfs_xlator_opt="yes"
4185 if $pkg_config --atleast-version=5 glusterfs-api; then
4186 glusterfs_discard="yes"
4188 if $pkg_config --atleast-version=6 glusterfs-api; then
4189 glusterfs_fallocate="yes"
4190 glusterfs_zerofill="yes"
4193 #include <glusterfs/api/glfs.h>
4198 /* new glfs_ftruncate() passes two additional args */
4199 return glfs_ftruncate(NULL, 0, NULL, NULL);
4202 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4203 glusterfs_ftruncate_has_stat="yes"
4206 #include <glusterfs/api/glfs.h>
4208 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4210 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4216 glfs_io_cbk iocb = &glusterfs_iocb;
4217 iocb(NULL, 0 , NULL, NULL, NULL);
4221 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4222 glusterfs_iocb_has_stat="yes"
4225 if test "$glusterfs" = "yes" ; then
4226 feature_not_found "GlusterFS backend support" \
4227 "Install glusterfs-api devel >= 3"
4233 # Check for inotify functions when we are building linux-user
4234 # emulator. This is done because older glibc versions don't
4235 # have syscall stubs for these implemented. In that case we
4236 # don't provide them even if kernel supports them.
4240 #include <sys/inotify.h>
4245 /* try to start inotify */
4246 return inotify_init();
4249 if compile_prog "" "" ; then
4255 #include <sys/inotify.h>
4260 /* try to start inotify */
4261 return inotify_init1(0);
4264 if compile_prog "" "" ; then
4268 # check if pipe2 is there
4277 return pipe2(pipefd, O_CLOEXEC);
4280 if compile_prog "" "" ; then
4284 # check if accept4 is there
4287 #include <sys/socket.h>
4292 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4296 if compile_prog "" "" ; then
4300 # check if tee/splice is there. vmsplice was added same time.
4310 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4311 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4315 if compile_prog "" "" ; then
4319 ##########################################
4322 if test "$numa" != "no" ; then
4325 int main(void) { return numa_available(); }
4328 if compile_prog "" "-lnuma" ; then
4330 libs_softmmu="-lnuma $libs_softmmu"
4332 if test "$numa" = "yes" ; then
4333 feature_not_found "numa" "install numactl devel"
4339 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4340 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4344 # Even if malloc_trim() is available, these non-libc memory allocators
4345 # do not support it.
4346 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4347 if test "$malloc_trim" = "yes" ; then
4348 echo "Disabling malloc_trim with non-libc memory allocator"
4353 #######################################
4356 if test "$malloc_trim" != "no" ; then
4359 int main(void) { malloc_trim(0); return 0; }
4361 if compile_prog "" "" ; then
4368 ##########################################
4371 if test "$tcmalloc" = "yes" ; then
4374 int main(void) { malloc(1); return 0; }
4377 if compile_prog "" "-ltcmalloc" ; then
4378 LIBS="-ltcmalloc $LIBS"
4380 feature_not_found "tcmalloc" "install gperftools devel"
4384 ##########################################
4387 if test "$jemalloc" = "yes" ; then
4390 int main(void) { malloc(1); return 0; }
4393 if compile_prog "" "-ljemalloc" ; then
4394 LIBS="-ljemalloc $LIBS"
4396 feature_not_found "jemalloc" "install jemalloc devel"
4400 ##########################################
4405 #include <sys/syscall.h>
4407 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4410 if compile_prog "" "" ; then
4414 # check if optreset global is declared by <getopt.h>
4418 int main(void) { return optreset; }
4421 if compile_prog "" "" ; then
4425 # check if eventfd is supported
4428 #include <sys/eventfd.h>
4432 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4435 if compile_prog "" "" ; then
4439 # check if memfd is supported
4442 #include <sys/mman.h>
4446 return memfd_create("foo", MFD_ALLOW_SEALING);
4449 if compile_prog "" "" ; then
4455 if test "$linux_user" = "yes"; then
4457 #include <linux/usbdevice_fs.h>
4459 #ifndef USBDEVFS_GET_CAPABILITIES
4460 #error "USBDEVFS_GET_CAPABILITIES undefined"
4463 #ifndef USBDEVFS_DISCONNECT_CLAIM
4464 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4472 if compile_prog "" ""; then
4477 # check for fallocate
4484 fallocate(0, 0, 0, 0);
4488 if compile_prog "" "" ; then
4492 # check for fallocate hole punching
4493 fallocate_punch_hole=no
4496 #include <linux/falloc.h>
4500 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4504 if compile_prog "" "" ; then
4505 fallocate_punch_hole=yes
4508 # check that fallocate supports range zeroing inside the file
4509 fallocate_zero_range=no
4512 #include <linux/falloc.h>
4516 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4520 if compile_prog "" "" ; then
4521 fallocate_zero_range=yes
4524 # check for posix_fallocate
4531 posix_fallocate(0, 0, 0);
4535 if compile_prog "" "" ; then
4539 # check for sync_file_range
4546 sync_file_range(0, 0, 0, 0);
4550 if compile_prog "" "" ; then
4554 # check for linux/fiemap.h and FS_IOC_FIEMAP
4557 #include <sys/ioctl.h>
4558 #include <linux/fs.h>
4559 #include <linux/fiemap.h>
4563 ioctl(0, FS_IOC_FIEMAP, 0);
4567 if compile_prog "" "" ; then
4582 if compile_prog "" "" ; then
4586 # check for ppoll support
4593 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4594 ppoll(&pfd, 1, 0, 0);
4598 if compile_prog "" "" ; then
4602 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4603 prctl_pr_set_timerslack=no
4605 #include <sys/prctl.h>
4609 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4613 if compile_prog "" "" ; then
4614 prctl_pr_set_timerslack=yes
4617 # check for epoll support
4620 #include <sys/epoll.h>
4628 if compile_prog "" "" ; then
4632 # epoll_create1 is a later addition
4633 # so we must check separately for its presence
4636 #include <sys/epoll.h>
4640 /* Note that we use epoll_create1 as a value, not as
4641 * a function being called. This is necessary so that on
4642 * old SPARC glibc versions where the function was present in
4643 * the library but not declared in the header file we will
4644 * fail the configure check. (Otherwise we will get a compiler
4645 * warning but not an error, and will proceed to fail the
4646 * qemu compile where we compile with -Werror.)
4648 return (int)(uintptr_t)&epoll_create1;
4651 if compile_prog "" "" ; then
4655 # check for sendfile support
4658 #include <sys/sendfile.h>
4662 return sendfile(0, 0, 0, 0);
4665 if compile_prog "" "" ; then
4669 # check for timerfd support (glibc 2.8 and newer)
4672 #include <sys/timerfd.h>
4676 return(timerfd_create(CLOCK_REALTIME, 0));
4679 if compile_prog "" "" ; then
4683 # check for setns and unshare support
4696 if compile_prog "" "" ; then
4700 # clock_adjtime probe
4707 return clock_adjtime(0, 0);
4711 if compile_prog "" "" ; then
4726 if compile_prog "" "" ; then
4730 # Check we have a new enough version of sphinx-build
4731 has_sphinx_build() {
4732 # This is a bit awkward but works: create a trivial document and
4733 # try to run it with our configuration file (which enforces a
4734 # version requirement). This will fail if either
4735 # sphinx-build doesn't exist at all or if it is too old.
4736 mkdir -p "$TMPDIR1/sphinx"
4737 touch "$TMPDIR1/sphinx/index.rst"
4738 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4741 # Check if tools are available to build documentation.
4742 if test "$docs" != "no" ; then
4743 if has makeinfo && has pod2man && has_sphinx_build; then
4746 if test "$docs" = "yes" ; then
4747 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4753 # Search for bswap_32 function
4756 #include <byteswap.h>
4757 int main(void) { return bswap_32(0); }
4759 if compile_prog "" "" ; then
4763 # Search for bswap32 function
4766 #include <sys/endian.h>
4767 #include <sys/types.h>
4768 #include <machine/bswap.h>
4769 int main(void) { return bswap32(0); }
4771 if compile_prog "" "" ; then
4775 ##########################################
4776 # Do we have libiscsi >= 1.9.0
4777 if test "$libiscsi" != "no" ; then
4778 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4780 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4781 libiscsi_libs=$($pkg_config --libs libiscsi)
4783 if test "$libiscsi" = "yes" ; then
4784 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4790 ##########################################
4794 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4796 if compile_prog "" "" ; then
4798 elif compile_prog "" "-lm" ; then
4800 libs_qga="-lm $libs_qga"
4802 error_exit "libm check failed"
4805 ##########################################
4807 # uClibc provides 2 versions of clock_gettime(), one with realtime
4808 # support and one without. This means that the clock_gettime() don't
4809 # need -lrt. We still need it for timer_create() so we check for this
4810 # function in addition.
4815 timer_create(CLOCK_REALTIME, NULL, NULL);
4816 return clock_gettime(CLOCK_REALTIME, NULL);
4820 if compile_prog "" "" ; then
4822 # we need pthread for static linking. use previous pthread test result
4823 elif compile_prog "" "$pthread_lib -lrt" ; then
4825 libs_qga="$libs_qga -lrt"
4828 # Check whether we need to link libutil for openpty()
4830 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4831 int main(void) { return openpty(0, 0, 0, 0, 0); }
4834 if ! compile_prog "" "" ; then
4835 if compile_prog "" "-lutil" ; then
4836 libs_softmmu="-lutil $libs_softmmu"
4837 libs_tools="-lutil $libs_tools"
4841 ##########################################
4843 if test "$spice" != "no" ; then
4846 int main(void) { spice_server_new(); return 0; }
4848 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4849 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4850 if $pkg_config --atleast-version=0.12.5 spice-server && \
4851 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4852 compile_prog "$spice_cflags" "$spice_libs" ; then
4854 libs_softmmu="$libs_softmmu $spice_libs"
4855 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4856 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4857 spice_server_version=$($pkg_config --modversion spice-server)
4859 if test "$spice" = "yes" ; then
4860 feature_not_found "spice" \
4861 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4867 # check for smartcard support
4868 if test "$smartcard" != "no"; then
4869 if $pkg_config --atleast-version=2.5.1 libcacard; then
4870 libcacard_cflags=$($pkg_config --cflags libcacard)
4871 libcacard_libs=$($pkg_config --libs libcacard)
4874 if test "$smartcard" = "yes"; then
4875 feature_not_found "smartcard" "Install libcacard devel"
4882 if test "$libusb" != "no" ; then
4883 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4885 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4886 libusb_libs=$($pkg_config --libs libusb-1.0)
4888 if test "$libusb" = "yes"; then
4889 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4895 # check for usbredirparser for usb network redirection support
4896 if test "$usb_redir" != "no" ; then
4897 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4899 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4900 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4902 if test "$usb_redir" = "yes"; then
4903 feature_not_found "usb-redir" "Install usbredir devel"
4909 ##########################################
4910 # check if we have VSS SDK headers for win
4912 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4913 test "$vss_win32_sdk" != "no" ; then
4914 case "$vss_win32_sdk" in
4915 "") vss_win32_include="-isystem $source_path" ;;
4916 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4917 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4918 vss_win32_include="-isystem $source_path/.sdk/vss"
4919 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4921 *) vss_win32_include="-isystem $vss_win32_sdk"
4924 #define __MIDL_user_allocate_free_DEFINED__
4925 #include <inc/win2003/vss.h>
4926 int main(void) { return VSS_CTX_BACKUP; }
4928 if compile_prog "$vss_win32_include" "" ; then
4929 guest_agent_with_vss="yes"
4930 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4931 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4932 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4934 if test "$vss_win32_sdk" != "" ; then
4935 echo "ERROR: Please download and install Microsoft VSS SDK:"
4936 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4937 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4938 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4939 echo "ERROR: The headers are extracted in the directory \`inc'."
4940 feature_not_found "VSS support"
4942 guest_agent_with_vss="no"
4946 ##########################################
4947 # lookup Windows platform SDK (if not specified)
4948 # The SDK is needed only to build .tlb (type library) file of guest agent
4949 # VSS provider from the source. It is usually unnecessary because the
4950 # pre-compiled .tlb file is included.
4952 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4953 test "$guest_agent_with_vss" = "yes" ; then
4954 if test -z "$win_sdk"; then
4955 programfiles="$PROGRAMFILES"
4956 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4957 if test -n "$programfiles"; then
4958 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4960 feature_not_found "Windows SDK"
4962 elif test "$win_sdk" = "no"; then
4967 ##########################################
4968 # check if mingw environment provides a recent ntddscsi.h
4969 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4971 #include <windows.h>
4972 #include <ntddscsi.h>
4974 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4975 #error Missing required ioctl definitions
4977 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4981 if compile_prog "" "" ; then
4982 guest_agent_ntddscsi=yes
4983 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4987 ##########################################
4988 # virgl renderer probe
4990 if test "$virglrenderer" != "no" ; then
4992 #include <virglrenderer.h>
4993 int main(void) { virgl_renderer_poll(); return 0; }
4995 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4996 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4997 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4998 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4999 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5002 if test "$virglrenderer" = "yes" ; then
5003 feature_not_found "virglrenderer"
5009 ##########################################
5014 if $pkg_config capstone; then
5016 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5018 elif test -e "${source_path}/capstone/Makefile" ; then
5020 elif test -z "$capstone" ; then
5023 feature_not_found "capstone" "Install capstone devel or git submodule"
5028 if ! $pkg_config capstone; then
5029 feature_not_found "capstone" "Install capstone devel"
5036 if test "$capstone" = git; then
5037 git_submodules="${git_submodules} capstone"
5040 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5041 if test "$mingw32" = "yes"; then
5042 LIBCAPSTONE=capstone.lib
5044 LIBCAPSTONE=libcapstone.a
5046 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5050 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5051 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5057 error_exit "Unknown state for capstone: $capstone"
5061 ##########################################
5062 # check if we have fdatasync
5068 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5069 return fdatasync(0);
5071 #error Not supported
5075 if compile_prog "" "" ; then
5079 ##########################################
5080 # check if we have madvise
5084 #include <sys/types.h>
5085 #include <sys/mman.h>
5087 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5089 if compile_prog "" "" ; then
5093 ##########################################
5094 # check if we have posix_madvise
5098 #include <sys/mman.h>
5100 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5102 if compile_prog "" "" ; then
5106 ##########################################
5107 # check if we have posix_memalign()
5114 return posix_memalign(&p, 8, 8);
5117 if compile_prog "" "" ; then
5121 ##########################################
5122 # check if we have posix_syslog
5127 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5129 if compile_prog "" "" ; then
5133 ##########################################
5134 # check if we have sem_timedwait
5138 #include <semaphore.h>
5139 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5141 if compile_prog "" "" ; then
5145 ##########################################
5146 # check if we have strchrnul
5152 // Use a haystack that the compiler shouldn't be able to constant fold
5153 char *haystack = (char*)&main;
5154 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5156 if compile_prog "" "" ; then
5160 ##########################################
5161 # check if trace backend exists
5163 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5164 if test "$?" -ne 0 ; then
5165 error_exit "invalid trace backends" \
5166 "Please choose supported trace backends."
5169 ##########################################
5170 # For 'ust' backend, test if ust headers are present
5171 if have_backend "ust"; then
5173 #include <lttng/tracepoint.h>
5174 int main(void) { return 0; }
5176 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5177 if $pkg_config lttng-ust --exists; then
5178 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5180 lttng_ust_libs="-llttng-ust -ldl"
5182 if $pkg_config liburcu-bp --exists; then
5183 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5185 urcu_bp_libs="-lurcu-bp"
5188 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5189 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5191 error_exit "Trace backend 'ust' missing lttng-ust header files"
5195 ##########################################
5196 # For 'dtrace' backend, test if 'dtrace' command is present
5197 if have_backend "dtrace"; then
5198 if ! has 'dtrace' ; then
5199 error_exit "dtrace command is not found in PATH $PATH"
5201 trace_backend_stap="no"
5202 if has 'stap' ; then
5203 trace_backend_stap="yes"
5207 ##########################################
5208 # check and set a backend for coroutine
5210 # We prefer ucontext, but it's not always possible. The fallback
5211 # is sigcontext. On Windows the only valid backend is the Windows
5215 if test "$darwin" != "yes"; then
5217 #include <ucontext.h>
5218 #ifdef __stub_makecontext
5219 #error Ignoring glibc stub makecontext which will always fail
5221 int main(void) { makecontext(0, 0, 0); return 0; }
5223 if compile_prog "" "" ; then
5228 if test "$coroutine" = ""; then
5229 if test "$mingw32" = "yes"; then
5231 elif test "$ucontext_works" = "yes"; then
5234 coroutine=sigaltstack
5239 if test "$mingw32" != "yes"; then
5240 error_exit "'windows' coroutine backend only valid for Windows"
5242 # Unfortunately the user visible backend name doesn't match the
5243 # coroutine-*.c filename for this case, so we have to adjust it here.
5247 if test "$ucontext_works" != "yes"; then
5248 feature_not_found "ucontext"
5252 if test "$mingw32" = "yes"; then
5253 error_exit "only the 'windows' coroutine backend is valid for Windows"
5257 error_exit "unknown coroutine backend $coroutine"
5262 if test "$coroutine_pool" = ""; then
5266 if test "$debug_stack_usage" = "yes"; then
5267 if test "$coroutine_pool" = "yes"; then
5268 echo "WARN: disabling coroutine pool for stack usage debugging"
5274 ##########################################
5275 # check if we have open_by_handle_at
5277 open_by_handle_at=no
5280 #if !defined(AT_EMPTY_PATH)
5281 # error missing definition
5283 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5286 if compile_prog "" "" ; then
5287 open_by_handle_at=yes
5290 ########################################
5291 # check if we have linux/magic.h
5295 #include <linux/magic.h>
5300 if compile_prog "" "" ; then
5304 ########################################
5305 # check whether we can disable warning option with a pragma (this is needed
5306 # to silence warnings in the headers of some versions of external libraries).
5307 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5310 # If we can't selectively disable warning in the code, disable -Werror so that
5311 # the build doesn't fail anyway.
5313 pragma_disable_unused_but_set=no
5315 #pragma GCC diagnostic push
5316 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5317 #pragma GCC diagnostic pop
5323 if compile_prog "-Werror" "" ; then
5324 pragma_diagnostic_available=yes
5329 ########################################
5330 # check if we have valgrind/valgrind.h
5334 #include <valgrind/valgrind.h>
5339 if compile_prog "" "" ; then
5343 ########################################
5344 # check if environ is declared
5354 if compile_prog "" "" ; then
5358 ########################################
5359 # check if cpuid.h is usable.
5364 unsigned a, b, c, d;
5365 int max = __get_cpuid_max(0, 0);
5368 __cpuid(1, a, b, c, d);
5372 __cpuid_count(7, 0, a, b, c, d);
5378 if compile_prog "" "" ; then
5382 ##########################################
5383 # avx2 optimization requirement check
5385 # There is no point enabling this if cpuid.h is not usable,
5386 # since we won't be able to select the new routines.
5388 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5390 #pragma GCC push_options
5391 #pragma GCC target("avx2")
5393 #include <immintrin.h>
5394 static int bar(void *a) {
5395 __m256i x = *(__m256i *)a;
5396 return _mm256_testz_si256(x, x);
5398 int main(int argc, char *argv[]) { return bar(argv[0]); }
5400 if compile_object "" ; then
5407 ########################################
5408 # check if __[u]int128_t is usable.
5421 if compile_prog "" "" ; then
5425 #########################################
5426 # See if 128-bit atomic operations are supported.
5429 if test "$int128" = "yes"; then
5433 unsigned __int128 x = 0, y = 0;
5434 y = __atomic_load_16(&x, 0);
5435 __atomic_store_16(&x, y, 0);
5436 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5440 if compile_prog "" "" ; then
5446 if test "$int128" = yes && test "$atomic128" = no; then
5450 unsigned __int128 x = 0, y = 0;
5451 __sync_val_compare_and_swap_16(&x, y, x);
5455 if compile_prog "" "" ; then
5460 #########################################
5461 # See if 64-bit atomic operations are supported.
5462 # Note that without __atomic builtins, we can only
5463 # assume atomic loads/stores max at pointer size.
5469 uint64_t x = 0, y = 0;
5470 #ifdef __ATOMIC_RELAXED
5471 y = __atomic_load_8(&x, 0);
5472 __atomic_store_8(&x, y, 0);
5473 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5474 __atomic_exchange_8(&x, y, 0);
5475 __atomic_fetch_add_8(&x, y, 0);
5477 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5478 __sync_lock_test_and_set(&x, y);
5479 __sync_val_compare_and_swap(&x, y, 0);
5480 __sync_fetch_and_add(&x, y);
5485 if compile_prog "" "" ; then
5489 ########################################
5490 # See if 16-byte vector operations are supported.
5491 # Even without a vector unit the compiler may expand these.
5492 # There is a bug in old GCC for PPC that crashes here.
5493 # Unfortunately it's the system compiler for Centos 7.
5496 typedef unsigned char U1 __attribute__((vector_size(16)));
5497 typedef unsigned short U2 __attribute__((vector_size(16)));
5498 typedef unsigned int U4 __attribute__((vector_size(16)));
5499 typedef unsigned long long U8 __attribute__((vector_size(16)));
5500 typedef signed char S1 __attribute__((vector_size(16)));
5501 typedef signed short S2 __attribute__((vector_size(16)));
5502 typedef signed int S4 __attribute__((vector_size(16)));
5503 typedef signed long long S8 __attribute__((vector_size(16)));
5513 void helper(void *d, void *a, int shift, int i);
5514 void helper(void *d, void *a, int shift, int i)
5516 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5517 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5518 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5519 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5523 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5524 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5525 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5526 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5527 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5528 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5529 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5530 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5531 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5537 if compile_prog "" "" ; then
5541 ########################################
5542 # check if getauxval is available.
5546 #include <sys/auxv.h>
5548 return getauxval(AT_HWCAP) == 0;
5551 if compile_prog "" "" ; then
5555 ########################################
5556 # check if ccache is interfering with
5557 # semantic analysis of macros
5562 static const int Z = 1;
5563 #define fn() ({ Z; })
5564 #define TAUT(X) ((X) == Z)
5565 #define PAREN(X, Y) (X == Y)
5567 int main(int argc, char *argv[])
5573 if (PAREN(x, y)) return 0;
5574 if (TAUT(Z)) return 0;
5579 if ! compile_object "-Werror"; then
5583 #################################################
5584 # clang does not support glibc + FORTIFY_SOURCE.
5586 if test "$fortify_source" != "no"; then
5587 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5588 fortify_source="no";
5589 elif test -n "$cxx" && has $cxx &&
5590 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5591 fortify_source="no";
5593 fortify_source="yes"
5597 ###############################################
5598 # Check if copy_file_range is provided by glibc
5599 have_copy_file_range=no
5603 copy_file_range(0, NULL, 0, NULL, 0, 0);
5607 if compile_prog "" "" ; then
5608 have_copy_file_range=yes
5611 ##########################################
5612 # check if struct fsxattr is available via linux/fs.h
5616 #include <linux/fs.h>
5622 if compile_prog "" "" ; then
5626 ##########################################
5627 # check for usable membarrier system call
5628 if test "$membarrier" = "yes"; then
5630 if test "$mingw32" = "yes" ; then
5632 elif test "$linux" = "yes" ; then
5634 #include <linux/membarrier.h>
5635 #include <sys/syscall.h>
5639 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5640 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5644 if compile_prog "" "" ; then
5648 if test "$have_membarrier" = "no"; then
5649 feature_not_found "membarrier" "membarrier system call not available"
5652 # Do not enable it by default even for Mingw32, because it doesn't
5657 ##########################################
5658 # check if rtnetlink.h exists and is useful
5661 #include <linux/rtnetlink.h>
5663 return IFLA_PROTO_DOWN;
5666 if compile_prog "" "" ; then
5670 ##########################################
5671 # check for usable AF_VSOCK environment
5675 #include <sys/types.h>
5676 #include <sys/socket.h>
5677 #if !defined(AF_VSOCK)
5678 # error missing AF_VSOCK flag
5680 #include <linux/vm_sockets.h>
5683 struct sockaddr_vm svm;
5684 socklen_t len = sizeof(svm);
5685 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5686 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5687 if ((ret == -1) && (errno == ENOTCONN)) {
5693 if compile_prog "" "" ; then
5697 ##########################################
5698 # check for usable AF_ALG environment
5702 #include <sys/types.h>
5703 #include <sys/socket.h>
5704 #include <linux/if_alg.h>
5707 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5711 if compile_prog "" "" ; then
5714 if test "$crypto_afalg" = "yes"
5716 if test "$have_afalg" != "yes"
5718 error_exit "AF_ALG requested but could not be detected"
5723 #################################################
5724 # Check to see if we have the Hypervisor framework
5725 if [ "$darwin" = "yes" ] ; then
5727 #include <Hypervisor/hv.h>
5728 int main() { return 0;}
5730 if ! compile_object ""; then
5734 LDFLAGS="-framework Hypervisor $LDFLAGS"
5738 #################################################
5739 # Sparc implicitly links with --relax, which is
5740 # incompatible with -r, so --no-relax should be
5741 # given. It does no harm to give it on other
5744 # Note: the prototype is needed since QEMU_CFLAGS
5745 # contains -Wmissing-prototypes
5747 extern int foo(void);
5748 int foo(void) { return 0; }
5750 if ! compile_object ""; then
5751 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5753 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5754 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5759 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5760 feature_not_found "modules" "Cannot find how to build relocatable objects"
5763 ##########################################
5764 # check for sysmacros.h
5768 #include <sys/sysmacros.h>
5770 return makedev(0, 0);
5773 if compile_prog "" "" ; then
5777 ##########################################
5778 # Veritas HyperScale block driver VxHS
5779 # Check if libvxhs is installed
5781 if test "$vxhs" != "no" ; then
5784 #include <qnio/qnio_api.h>
5786 void *vxhs_callback;
5789 iio_init(QNIO_VERSION, vxhs_callback);
5793 vxhs_libs="-lvxhs -lssl"
5794 if compile_prog "" "$vxhs_libs" ; then
5797 if test "$vxhs" = "yes" ; then
5798 feature_not_found "vxhs block device" "Install libvxhs See github"
5804 ##########################################
5805 # check for _Static_assert()
5807 have_static_assert=no
5809 _Static_assert(1, "success");
5814 if compile_prog "" "" ; then
5815 have_static_assert=yes
5818 ##########################################
5819 # check for utmpx.h, it is missing e.g. on OpenBSD
5824 struct utmpx user_info;
5829 if compile_prog "" "" ; then
5833 ##########################################
5834 # check for getrandom()
5838 #include <sys/random.h>
5840 return getrandom(0, 0, GRND_NONBLOCK);
5843 if compile_prog "" "" ; then
5847 ##########################################
5848 # checks for sanitizers
5852 have_asan_iface_h=no
5853 have_asan_iface_fiber=no
5855 if test "$sanitizers" = "yes" ; then
5857 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5861 # we could use a simple skeleton for flags checks, but this also
5862 # detect the static linking issue of ubsan, see also:
5863 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5867 void *tmp = malloc(10);
5868 return *(int *)(tmp + 2);
5871 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5875 if check_include "sanitizer/asan_interface.h" ; then
5876 have_asan_iface_h=yes
5880 #include <sanitizer/asan_interface.h>
5882 __sanitizer_start_switch_fiber(0, 0, 0);
5886 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5887 have_asan_iface_fiber=yes
5891 ##########################################
5892 # Docker and cross-compiler support
5894 # This is specifically for building test
5895 # cases for foreign architectures, not
5896 # cross-compiling QEMU itself.
5898 if has "docker"; then
5899 docker=$($python $source_path/tests/docker/docker.py probe)
5902 ##########################################
5905 if test "$libpmem" != "no"; then
5906 if $pkg_config --exists "libpmem"; then
5908 libpmem_libs=$($pkg_config --libs libpmem)
5909 libpmem_cflags=$($pkg_config --cflags libpmem)
5910 libs_softmmu="$libs_softmmu $libpmem_libs"
5911 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5913 if test "$libpmem" = "yes" ; then
5914 feature_not_found "libpmem" "Install nvml or pmdk"
5920 ##########################################
5925 if $pkg_config slirp; then
5927 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5929 elif test -e "${source_path}/slirp/Makefile" ; then
5931 elif test -z "$slirp" ; then
5934 feature_not_found "slirp" "Install slirp devel or git submodule"
5939 if ! $pkg_config slirp; then
5940 feature_not_found "slirp" "Install slirp devel"
5947 if test "$slirp" = git; then
5948 git_submodules="${git_submodules} slirp"
5951 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5952 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5956 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5957 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5958 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5964 error_exit "Unknown state for slirp: $slirp"
5969 ##########################################
5971 # After here, no more $cc or $ld runs
5975 if test "$gcov" = "yes" ; then
5976 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5977 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5978 elif test "$fortify_source" = "yes" ; then
5979 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5980 elif test "$debug" = "no"; then
5981 CFLAGS="-O2 $CFLAGS"
5984 if test "$have_asan" = "yes"; then
5985 CFLAGS="-fsanitize=address $CFLAGS"
5986 if test "$have_asan_iface_h" = "no" ; then
5987 echo "ASAN build enabled, but ASAN header missing." \
5988 "Without code annotation, the report may be inferior."
5989 elif test "$have_asan_iface_fiber" = "no" ; then
5990 echo "ASAN build enabled, but ASAN header is too old." \
5991 "Without code annotation, the report may be inferior."
5994 if test "$have_ubsan" = "yes"; then
5995 CFLAGS="-fsanitize=undefined $CFLAGS"
5998 ##########################################
6000 if test "$libnfs" != "no" ; then
6001 if $pkg_config --atleast-version=1.9.3 libnfs; then
6003 libnfs_libs=$($pkg_config --libs libnfs)
6005 if test "$libnfs" = "yes" ; then
6006 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6012 ##########################################
6013 # Do we have libudev
6014 if test "$libudev" != "no" ; then
6015 if $pkg_config libudev && test "$static" != "yes"; then
6017 libudev_libs=$($pkg_config --libs libudev)
6023 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6024 if test "$werror" = "yes"; then
6025 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6028 if test "$solaris" = "no" ; then
6029 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6030 LDFLAGS="-Wl,--warn-common $LDFLAGS"
6034 # test if pod2man has --utf8 option
6035 if pod2man --help | grep -q utf8; then
6036 POD2MAN="pod2man --utf8"
6041 # Use ASLR, no-SEH and DEP if available
6042 if test "$mingw32" = "yes" ; then
6043 for flag in --dynamicbase --no-seh --nxcompat; do
6044 if ld_has $flag ; then
6045 LDFLAGS="-Wl,$flag $LDFLAGS"
6050 # Disable OpenBSD W^X if available
6051 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6053 int main(void) { return 0; }
6055 wx_ldflags="-Wl,-z,wxneeded"
6056 if compile_prog "" "$wx_ldflags"; then
6057 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6061 qemu_confdir=$sysconfdir$confsuffix
6062 qemu_moddir=$libdir$confsuffix
6063 qemu_datadir=$datadir$confsuffix
6064 qemu_localedir="$datadir/locale"
6065 qemu_icondir="$datadir/icons"
6066 qemu_desktopdir="$datadir/applications"
6068 # We can only support ivshmem if we have eventfd
6069 if [ "$eventfd" = "yes" ]; then
6074 if test "$want_tools" = "yes" ; then
6075 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6076 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6077 tools="qemu-nbd\$(EXESUF) $tools"
6079 if [ "$ivshmem" = "yes" ]; then
6080 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6082 if [ "$curl" = "yes" ]; then
6083 tools="elf2dmp\$(EXESUF) $tools"
6086 if test "$softmmu" = yes ; then
6087 if test "$linux" = yes; then
6088 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6090 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6092 if test "$virtfs" = yes; then
6093 error_exit "VirtFS requires libcap devel and libattr devel"
6097 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6100 if test "$mpath" = yes; then
6101 error_exit "Multipath requires libmpathpersist devel"
6105 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6107 if test "$virtfs" = yes; then
6108 error_exit "VirtFS is supported only on Linux"
6111 if test "$mpath" = yes; then
6112 error_exit "Multipath is supported only on Linux"
6116 if test "$xkbcommon" = "yes"; then
6117 tools="qemu-keymap\$(EXESUF) $tools"
6121 # Probe for guest agent support/options
6123 if [ "$guest_agent" != "no" ]; then
6124 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6126 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6127 tools="qemu-ga $tools"
6129 elif [ "$guest_agent" != yes ]; then
6132 error_exit "Guest agent is not supported on this platform"
6136 # Guest agent Window MSI package
6138 if test "$guest_agent" != yes; then
6139 if test "$guest_agent_msi" = yes; then
6140 error_exit "MSI guest agent package requires guest agent enabled"
6143 elif test "$mingw32" != "yes"; then
6144 if test "$guest_agent_msi" = "yes"; then
6145 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6148 elif ! has wixl; then
6149 if test "$guest_agent_msi" = "yes"; then
6150 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6154 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6155 # disabled explicitly
6156 if test "$guest_agent_msi" != "no"; then
6161 if test "$guest_agent_msi" = "yes"; then
6162 if test "$guest_agent_with_vss" = "yes"; then
6163 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6166 if test "$QEMU_GA_MANUFACTURER" = ""; then
6167 QEMU_GA_MANUFACTURER=QEMU
6170 if test "$QEMU_GA_DISTRO" = ""; then
6171 QEMU_GA_DISTRO=Linux
6174 if test "$QEMU_GA_VERSION" = ""; then
6175 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6178 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6182 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6185 QEMU_GA_MSI_ARCH="-D Arch=32"
6188 error_exit "CPU $cpu not supported for building installation package"
6193 # Mac OS X ships with a broken assembler
6195 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6196 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6197 test "$softmmu" = yes ; then
6198 # Different host OS linkers have different ideas about the name of the ELF
6199 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6200 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6201 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6202 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6203 ld_i386_emulation="$emu"
6209 if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
6210 roms="$roms spapr-rtas"
6213 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6214 if test "$cpu" = "s390x" ; then
6216 if compile_prog "-march=z900" ""; then
6217 roms="$roms s390-ccw"
6221 # Probe for the need for relocating the user-only binary.
6222 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6225 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6226 # ??? Rationale for choosing this address
6227 textseg_addr=0x60000000
6230 # A 256M aligned address, high in the address space, with enough
6231 # room for the code_gen_buffer above it before the stack.
6232 textseg_addr=0x60000000
6235 if [ -n "$textseg_addr" ]; then
6237 int main(void) { return 0; }
6239 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6240 if ! compile_prog "" "$textseg_ldflags"; then
6241 # In case ld does not support -Ttext-segment, edit the default linker
6242 # script via sed to set the .text start addr. This is needed on FreeBSD
6244 if ! $ld --verbose >/dev/null 2>&1; then
6246 "We need to link the QEMU user mode binaries at a" \
6247 "specific text address. Unfortunately your linker" \
6248 "doesn't support either the -Ttext-segment option or" \
6249 "printing the default linker script with --verbose." \
6250 "If you don't want the user mode binaries, pass the" \
6251 "--disable-user option to configure."
6254 $ld --verbose | sed \
6255 -e '1,/==================================================/d' \
6256 -e '/==================================================/,$d' \
6257 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6258 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6259 textseg_ldflags="-Wl,-T../config-host.ld"
6264 # Check that the C++ compiler exists and works with the C compiler.
6265 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6268 int c_function(void);
6269 int main(void) { return c_function(); }
6276 int c_function(void);
6278 int c_function(void) { return 42; }
6283 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6284 # C++ compiler $cxx works ok with C compiler $cc
6287 echo "C++ compiler $cxx does not work with C compiler $cc"
6288 echo "Disabling C++ specific optional code"
6292 echo "No C++ compiler available; disabling C++ specific optional code"
6297 if test "$1" = "yes" ; then
6302 # prepend pixman and ftd flags after all config tests are done
6303 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6304 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6305 libs_softmmu="$pixman_libs $libs_softmmu"
6307 echo "Install prefix $prefix"
6308 echo "BIOS directory $(eval echo $qemu_datadir)"
6309 echo "firmware path $(eval echo $firmwarepath)"
6310 echo "binary directory $(eval echo $bindir)"
6311 echo "library directory $(eval echo $libdir)"
6312 echo "module directory $(eval echo $qemu_moddir)"
6313 echo "libexec directory $(eval echo $libexecdir)"
6314 echo "include directory $(eval echo $includedir)"
6315 echo "config directory $(eval echo $sysconfdir)"
6316 if test "$mingw32" = "no" ; then
6317 echo "local state directory $(eval echo $local_statedir)"
6318 echo "Manual directory $(eval echo $mandir)"
6319 echo "ELF interp prefix $interp_prefix"
6321 echo "local state directory queried at runtime"
6322 echo "Windows SDK $win_sdk"
6324 echo "Source path $source_path"
6325 echo "GIT binary $git"
6326 echo "GIT submodules $git_submodules"
6327 echo "C compiler $cc"
6328 echo "Host C compiler $host_cc"
6329 echo "C++ compiler $cxx"
6330 echo "Objective-C compiler $objcc"
6331 echo "ARFLAGS $ARFLAGS"
6332 echo "CFLAGS $CFLAGS"
6333 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6334 echo "LDFLAGS $LDFLAGS"
6335 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6337 echo "install $install"
6338 echo "python $python ($python_version)"
6339 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6340 if test "$slirp" != "no" ; then
6343 echo "module support $modules"
6344 echo "host CPU $cpu"
6345 echo "host big endian $bigendian"
6346 echo "target list $target_list"
6347 echo "gprof enabled $gprof"
6348 echo "sparse enabled $sparse"
6349 echo "strip binaries $strip_opt"
6350 echo "profiler $profiler"
6351 echo "static build $static"
6352 if test "$darwin" = "yes" ; then
6353 echo "Cocoa support $cocoa"
6355 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6356 echo "SDL image support $sdl_image"
6357 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6358 echo "GTK GL support $gtk_gl"
6359 echo "VTE support $vte $(echo_version $vte $vteversion)"
6360 echo "TLS priority $tls_priority"
6361 echo "GNUTLS support $gnutls"
6362 echo "libgcrypt $gcrypt"
6363 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6364 echo "libtasn1 $tasn1"
6365 echo "PAM $auth_pam"
6366 echo "iconv support $iconv"
6367 echo "curses support $curses"
6368 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6369 echo "curl support $curl"
6370 echo "mingw32 support $mingw32"
6371 echo "Audio drivers $audio_drv_list"
6372 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6373 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6374 echo "VirtFS support $virtfs"
6375 echo "Multipath support $mpath"
6376 echo "VNC support $vnc"
6377 if test "$vnc" = "yes" ; then
6378 echo "VNC SASL support $vnc_sasl"
6379 echo "VNC JPEG support $vnc_jpeg"
6380 echo "VNC PNG support $vnc_png"
6382 if test -n "$sparc_cpu"; then
6383 echo "Target Sparc Arch $sparc_cpu"
6385 echo "xen support $xen"
6386 if test "$xen" = "yes" ; then
6387 echo "xen ctrl version $xen_ctrl_version"
6389 echo "brlapi support $brlapi"
6390 echo "bluez support $bluez"
6391 echo "Documentation $docs"
6393 echo "vde support $vde"
6394 echo "netmap support $netmap"
6395 echo "Linux AIO support $linux_aio"
6396 echo "ATTR/XATTR support $attr"
6397 echo "Install blobs $blobs"
6398 echo "KVM support $kvm"
6399 echo "HAX support $hax"
6400 echo "HVF support $hvf"
6401 echo "WHPX support $whpx"
6402 echo "TCG support $tcg"
6403 if test "$tcg" = "yes" ; then
6404 echo "TCG debug enabled $debug_tcg"
6405 echo "TCG interpreter $tcg_interpreter"
6407 echo "malloc trim support $malloc_trim"
6408 echo "RDMA support $rdma"
6409 echo "PVRDMA support $pvrdma"
6410 echo "fdt support $fdt"
6411 echo "membarrier $membarrier"
6412 echo "preadv support $preadv"
6413 echo "fdatasync $fdatasync"
6414 echo "madvise $madvise"
6415 echo "posix_madvise $posix_madvise"
6416 echo "posix_memalign $posix_memalign"
6417 echo "libcap-ng support $cap_ng"
6418 echo "vhost-net support $vhost_net"
6419 echo "vhost-crypto support $vhost_crypto"
6420 echo "vhost-scsi support $vhost_scsi"
6421 echo "vhost-vsock support $vhost_vsock"
6422 echo "vhost-user support $vhost_user"
6423 echo "Trace backends $trace_backends"
6424 if have_backend "simple"; then
6425 echo "Trace output file $trace_file-<pid>"
6427 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6428 echo "rbd support $rbd"
6429 echo "xfsctl support $xfs"
6430 echo "smartcard support $smartcard"
6431 echo "libusb $libusb"
6432 echo "usb net redir $usb_redir"
6433 echo "OpenGL support $opengl"
6434 echo "OpenGL dmabufs $opengl_dmabuf"
6435 echo "libiscsi support $libiscsi"
6436 echo "libnfs support $libnfs"
6437 echo "build guest agent $guest_agent"
6438 echo "QGA VSS support $guest_agent_with_vss"
6439 echo "QGA w32 disk info $guest_agent_ntddscsi"
6440 echo "QGA MSI support $guest_agent_msi"
6441 echo "seccomp support $seccomp"
6442 echo "coroutine backend $coroutine"
6443 echo "coroutine pool $coroutine_pool"
6444 echo "debug stack usage $debug_stack_usage"
6445 echo "mutex debugging $debug_mutex"
6446 echo "crypto afalg $crypto_afalg"
6447 echo "GlusterFS support $glusterfs"
6448 echo "gcov $gcov_tool"
6449 echo "gcov enabled $gcov"
6450 echo "TPM support $tpm"
6451 echo "libssh support $libssh"
6452 echo "QOM debugging $qom_cast_debug"
6453 echo "Live block migration $live_block_migration"
6454 echo "lzo support $lzo"
6455 echo "snappy support $snappy"
6456 echo "bzip2 support $bzip2"
6457 echo "lzfse support $lzfse"
6458 echo "NUMA host support $numa"
6459 echo "libxml2 $libxml2"
6460 echo "tcmalloc support $tcmalloc"
6461 echo "jemalloc support $jemalloc"
6462 echo "avx2 optimization $avx2_opt"
6463 echo "replication support $replication"
6464 echo "VxHS block device $vxhs"
6465 echo "bochs support $bochs"
6466 echo "cloop support $cloop"
6467 echo "dmg support $dmg"
6468 echo "qcow v1 support $qcow1"
6469 echo "vdi support $vdi"
6470 echo "vvfat support $vvfat"
6471 echo "qed support $qed"
6472 echo "parallels support $parallels"
6473 echo "sheepdog support $sheepdog"
6474 echo "capstone $capstone"
6475 echo "docker $docker"
6476 echo "libpmem support $libpmem"
6477 echo "libudev $libudev"
6478 echo "default devices $default_devices"
6480 if test "$supported_cpu" = "no"; then
6482 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6484 echo "CPU host architecture $cpu support is not currently maintained."
6485 echo "The QEMU project intends to remove support for this host CPU in"
6486 echo "a future release if nobody volunteers to maintain it and to"
6487 echo "provide a build host for our continuous integration setup."
6488 echo "configure has succeeded and you can continue to build, but"
6489 echo "if you care about QEMU on this platform you should contact"
6493 if test "$supported_os" = "no"; then
6495 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6497 echo "Host OS $targetos support is not currently maintained."
6498 echo "The QEMU project intends to remove support for this host OS in"
6499 echo "a future release if nobody volunteers to maintain it and to"
6500 echo "provide a build host for our continuous integration setup."
6501 echo "configure has succeeded and you can continue to build, but"
6502 echo "if you care about QEMU on this platform you should contact"
6506 # Note that if the Python conditional here evaluates True we will exit
6507 # with status 1 which is a shell 'false' value.
6508 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6510 echo "warning: Python 2 support is deprecated" >&2
6511 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6514 config_host_mak="config-host.mak"
6516 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6518 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6519 echo >> $config_host_mak
6521 echo all: >> $config_host_mak
6522 echo "prefix=$prefix" >> $config_host_mak
6523 echo "bindir=$bindir" >> $config_host_mak
6524 echo "libdir=$libdir" >> $config_host_mak
6525 echo "libexecdir=$libexecdir" >> $config_host_mak
6526 echo "includedir=$includedir" >> $config_host_mak
6527 echo "mandir=$mandir" >> $config_host_mak
6528 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6529 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6530 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6531 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6532 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6533 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6534 if test "$mingw32" = "no" ; then
6535 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6537 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6538 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6539 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6540 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6541 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6542 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6543 echo "GIT=$git" >> $config_host_mak
6544 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6545 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6547 echo "ARCH=$ARCH" >> $config_host_mak
6549 if test "$default_devices" = "yes" ; then
6550 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6552 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6554 if test "$debug_tcg" = "yes" ; then
6555 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6557 if test "$strip_opt" = "yes" ; then
6558 echo "STRIP=${strip}" >> $config_host_mak
6560 if test "$bigendian" = "yes" ; then
6561 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6563 if test "$mingw32" = "yes" ; then
6564 echo "CONFIG_WIN32=y" >> $config_host_mak
6565 rc_version=$(cat $source_path/VERSION)
6566 version_major=${rc_version%%.*}
6567 rc_version=${rc_version#*.}
6568 version_minor=${rc_version%%.*}
6569 rc_version=${rc_version#*.}
6570 version_subminor=${rc_version%%.*}
6572 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6573 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6574 if test "$guest_agent_with_vss" = "yes" ; then
6575 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6576 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6577 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6579 if test "$guest_agent_ntddscsi" = "yes" ; then
6580 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6582 if test "$guest_agent_msi" = "yes"; then
6583 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6584 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6585 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6586 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6587 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6588 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6589 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6592 echo "CONFIG_POSIX=y" >> $config_host_mak
6595 if test "$linux" = "yes" ; then
6596 echo "CONFIG_LINUX=y" >> $config_host_mak
6599 if test "$darwin" = "yes" ; then
6600 echo "CONFIG_DARWIN=y" >> $config_host_mak
6603 if test "$solaris" = "yes" ; then
6604 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6606 if test "$haiku" = "yes" ; then
6607 echo "CONFIG_HAIKU=y" >> $config_host_mak
6609 if test "$static" = "yes" ; then
6610 echo "CONFIG_STATIC=y" >> $config_host_mak
6612 if test "$profiler" = "yes" ; then
6613 echo "CONFIG_PROFILER=y" >> $config_host_mak
6615 if test "$slirp" != "no"; then
6616 echo "CONFIG_SLIRP=y" >> $config_host_mak
6617 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6618 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6619 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6621 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6622 echo "config-host.h: slirp/all" >> $config_host_mak
6624 if test "$vde" = "yes" ; then
6625 echo "CONFIG_VDE=y" >> $config_host_mak
6626 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6628 if test "$netmap" = "yes" ; then
6629 echo "CONFIG_NETMAP=y" >> $config_host_mak
6631 if test "$l2tpv3" = "yes" ; then
6632 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6634 if test "$cap_ng" = "yes" ; then
6635 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6637 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6638 for drv in $audio_drv_list; do
6639 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6641 alsa | oss | pa | sdl)
6642 echo "$def=m" >> $config_host_mak ;;
6644 echo "$def=y" >> $config_host_mak ;;
6647 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6648 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6649 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6650 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6651 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6652 if test "$audio_pt_int" = "yes" ; then
6653 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6655 if test "$audio_win_int" = "yes" ; then
6656 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6658 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6659 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6660 if test "$vnc" = "yes" ; then
6661 echo "CONFIG_VNC=y" >> $config_host_mak
6663 if test "$vnc_sasl" = "yes" ; then
6664 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6666 if test "$vnc_jpeg" = "yes" ; then
6667 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6669 if test "$vnc_png" = "yes" ; then
6670 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6672 if test "$xkbcommon" = "yes" ; then
6673 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6674 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6676 if test "$xfs" = "yes" ; then
6677 echo "CONFIG_XFS=y" >> $config_host_mak
6679 qemu_version=$(head $source_path/VERSION)
6680 echo "VERSION=$qemu_version" >>$config_host_mak
6681 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6682 echo "SRC_PATH=$source_path" >> $config_host_mak
6683 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6684 if [ "$docs" = "yes" ] ; then
6685 echo "BUILD_DOCS=yes" >> $config_host_mak
6687 if test "$modules" = "yes"; then
6688 # $shacmd can generate a hash started with digit, which the compiler doesn't
6689 # like as an symbol. So prefix it with an underscore
6690 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6691 echo "CONFIG_MODULES=y" >> $config_host_mak
6693 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6694 echo "CONFIG_X11=y" >> $config_host_mak
6695 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6696 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6698 if test "$sdl" = "yes" ; then
6699 echo "CONFIG_SDL=m" >> $config_host_mak
6700 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6701 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6702 if test "$sdl_image" = "yes" ; then
6703 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6706 if test "$cocoa" = "yes" ; then
6707 echo "CONFIG_COCOA=y" >> $config_host_mak
6709 if test "$iconv" = "yes" ; then
6710 echo "CONFIG_ICONV=y" >> $config_host_mak
6711 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6712 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6714 if test "$curses" = "yes" ; then
6715 echo "CONFIG_CURSES=m" >> $config_host_mak
6716 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6717 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6719 if test "$pipe2" = "yes" ; then
6720 echo "CONFIG_PIPE2=y" >> $config_host_mak
6722 if test "$accept4" = "yes" ; then
6723 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6725 if test "$splice" = "yes" ; then
6726 echo "CONFIG_SPLICE=y" >> $config_host_mak
6728 if test "$eventfd" = "yes" ; then
6729 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6731 if test "$memfd" = "yes" ; then
6732 echo "CONFIG_MEMFD=y" >> $config_host_mak
6734 if test "$have_usbfs" = "yes" ; then
6735 echo "CONFIG_USBFS=y" >> $config_host_mak
6737 if test "$fallocate" = "yes" ; then
6738 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6740 if test "$fallocate_punch_hole" = "yes" ; then
6741 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6743 if test "$fallocate_zero_range" = "yes" ; then
6744 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6746 if test "$posix_fallocate" = "yes" ; then
6747 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6749 if test "$sync_file_range" = "yes" ; then
6750 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6752 if test "$fiemap" = "yes" ; then
6753 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6755 if test "$dup3" = "yes" ; then
6756 echo "CONFIG_DUP3=y" >> $config_host_mak
6758 if test "$ppoll" = "yes" ; then
6759 echo "CONFIG_PPOLL=y" >> $config_host_mak
6761 if test "$prctl_pr_set_timerslack" = "yes" ; then
6762 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6764 if test "$epoll" = "yes" ; then
6765 echo "CONFIG_EPOLL=y" >> $config_host_mak
6767 if test "$epoll_create1" = "yes" ; then
6768 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6770 if test "$sendfile" = "yes" ; then
6771 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6773 if test "$timerfd" = "yes" ; then
6774 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6776 if test "$setns" = "yes" ; then
6777 echo "CONFIG_SETNS=y" >> $config_host_mak
6779 if test "$clock_adjtime" = "yes" ; then
6780 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6782 if test "$syncfs" = "yes" ; then
6783 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6785 if test "$inotify" = "yes" ; then
6786 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6788 if test "$inotify1" = "yes" ; then
6789 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6791 if test "$sem_timedwait" = "yes" ; then
6792 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6794 if test "$strchrnul" = "yes" ; then
6795 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6797 if test "$byteswap_h" = "yes" ; then
6798 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6800 if test "$bswap_h" = "yes" ; then
6801 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6803 if test "$curl" = "yes" ; then
6804 echo "CONFIG_CURL=m" >> $config_host_mak
6805 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6806 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6808 if test "$brlapi" = "yes" ; then
6809 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6810 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6812 if test "$bluez" = "yes" ; then
6813 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6814 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6816 if test "$gtk" = "yes" ; then
6817 echo "CONFIG_GTK=m" >> $config_host_mak
6818 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6819 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6820 if test "$gtk_gl" = "yes" ; then
6821 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6824 if test "$gio" = "yes" ; then
6825 echo "CONFIG_GIO=y" >> $config_host_mak
6826 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6827 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6829 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6830 if test "$gnutls" = "yes" ; then
6831 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6833 if test "$gcrypt" = "yes" ; then
6834 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6835 if test "$gcrypt_hmac" = "yes" ; then
6836 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6839 if test "$nettle" = "yes" ; then
6840 echo "CONFIG_NETTLE=y" >> $config_host_mak
6841 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6843 if test "$tasn1" = "yes" ; then
6844 echo "CONFIG_TASN1=y" >> $config_host_mak
6846 if test "$auth_pam" = "yes" ; then
6847 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6849 if test "$have_ifaddrs_h" = "yes" ; then
6850 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6852 if test "$have_broken_size_max" = "yes" ; then
6853 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6856 # Work around a system header bug with some kernel/XFS header
6857 # versions where they both try to define 'struct fsxattr':
6858 # xfs headers will not try to redefine structs from linux headers
6859 # if this macro is set.
6860 if test "$have_fsxattr" = "yes" ; then
6861 echo "HAVE_FSXATTR=y" >> $config_host_mak
6863 if test "$have_copy_file_range" = "yes" ; then
6864 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6866 if test "$vte" = "yes" ; then
6867 echo "CONFIG_VTE=y" >> $config_host_mak
6868 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6869 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6871 if test "$virglrenderer" = "yes" ; then
6872 echo "CONFIG_VIRGL=y" >> $config_host_mak
6873 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6874 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6876 if test "$xen" = "yes" ; then
6877 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6878 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6880 if test "$linux_aio" = "yes" ; then
6881 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6883 if test "$attr" = "yes" ; then
6884 echo "CONFIG_ATTR=y" >> $config_host_mak
6886 if test "$libattr" = "yes" ; then
6887 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6889 if test "$virtfs" = "yes" ; then
6890 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6892 if test "$mpath" = "yes" ; then
6893 echo "CONFIG_MPATH=y" >> $config_host_mak
6894 if test "$mpathpersist_new_api" = "yes"; then
6895 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6898 if test "$vhost_scsi" = "yes" ; then
6899 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6901 if test "$vhost_net" = "yes" ; then
6902 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6904 if test "$vhost_net_user" = "yes" ; then
6905 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6907 if test "$vhost_crypto" = "yes" ; then
6908 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6910 if test "$vhost_vsock" = "yes" ; then
6911 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6913 if test "$vhost_kernel" = "yes" ; then
6914 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6916 if test "$vhost_user" = "yes" ; then
6917 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6919 if test "$blobs" = "yes" ; then
6920 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6922 if test "$iovec" = "yes" ; then
6923 echo "CONFIG_IOVEC=y" >> $config_host_mak
6925 if test "$preadv" = "yes" ; then
6926 echo "CONFIG_PREADV=y" >> $config_host_mak
6928 if test "$fdt" != "no" ; then
6929 echo "CONFIG_FDT=y" >> $config_host_mak
6931 if test "$membarrier" = "yes" ; then
6932 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6934 if test "$signalfd" = "yes" ; then
6935 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6937 if test "$optreset" = "yes" ; then
6938 echo "HAVE_OPTRESET=y" >> $config_host_mak
6940 if test "$tcg" = "yes"; then
6941 echo "CONFIG_TCG=y" >> $config_host_mak
6942 if test "$tcg_interpreter" = "yes" ; then
6943 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6946 if test "$fdatasync" = "yes" ; then
6947 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6949 if test "$madvise" = "yes" ; then
6950 echo "CONFIG_MADVISE=y" >> $config_host_mak
6952 if test "$posix_madvise" = "yes" ; then
6953 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6955 if test "$posix_memalign" = "yes" ; then
6956 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6959 if test "$spice" = "yes" ; then
6960 echo "CONFIG_SPICE=y" >> $config_host_mak
6963 if test "$smartcard" = "yes" ; then
6964 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6965 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6966 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6969 if test "$libusb" = "yes" ; then
6970 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6971 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6972 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6975 if test "$usb_redir" = "yes" ; then
6976 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6977 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6978 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6981 if test "$opengl" = "yes" ; then
6982 echo "CONFIG_OPENGL=y" >> $config_host_mak
6983 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6984 if test "$opengl_dmabuf" = "yes" ; then
6985 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6989 if test "$gbm" = "yes" ; then
6990 echo "CONFIG_GBM=y" >> $config_host_mak
6991 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6992 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6996 if test "$malloc_trim" = "yes" ; then
6997 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7000 if test "$avx2_opt" = "yes" ; then
7001 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7004 if test "$lzo" = "yes" ; then
7005 echo "CONFIG_LZO=y" >> $config_host_mak
7008 if test "$snappy" = "yes" ; then
7009 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7012 if test "$bzip2" = "yes" ; then
7013 echo "CONFIG_BZIP2=y" >> $config_host_mak
7014 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7017 if test "$lzfse" = "yes" ; then
7018 echo "CONFIG_LZFSE=y" >> $config_host_mak
7019 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7022 if test "$libiscsi" = "yes" ; then
7023 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7024 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7025 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7028 if test "$libnfs" = "yes" ; then
7029 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7030 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7033 if test "$seccomp" = "yes"; then
7034 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7035 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7036 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7039 # XXX: suppress that
7040 if [ "$bsd" = "yes" ] ; then
7041 echo "CONFIG_BSD=y" >> $config_host_mak
7044 if test "$localtime_r" = "yes" ; then
7045 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7047 if test "$qom_cast_debug" = "yes" ; then
7048 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7050 if test "$rbd" = "yes" ; then
7051 echo "CONFIG_RBD=m" >> $config_host_mak
7052 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7053 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7056 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7057 if test "$coroutine_pool" = "yes" ; then
7058 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7060 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7063 if test "$debug_stack_usage" = "yes" ; then
7064 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7067 if test "$crypto_afalg" = "yes" ; then
7068 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7071 if test "$open_by_handle_at" = "yes" ; then
7072 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7075 if test "$linux_magic_h" = "yes" ; then
7076 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7079 if test "$pragma_diagnostic_available" = "yes" ; then
7080 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7083 if test "$valgrind_h" = "yes" ; then
7084 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7087 if test "$have_asan_iface_fiber" = "yes" ; then
7088 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7091 if test "$has_environ" = "yes" ; then
7092 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7095 if test "$cpuid_h" = "yes" ; then
7096 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7099 if test "$int128" = "yes" ; then
7100 echo "CONFIG_INT128=y" >> $config_host_mak
7103 if test "$atomic128" = "yes" ; then
7104 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7107 if test "$cmpxchg128" = "yes" ; then
7108 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7111 if test "$atomic64" = "yes" ; then
7112 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7115 if test "$vector16" = "yes" ; then
7116 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7119 if test "$getauxval" = "yes" ; then
7120 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7123 if test "$glusterfs" = "yes" ; then
7124 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7125 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7126 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7129 if test "$glusterfs_xlator_opt" = "yes" ; then
7130 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7133 if test "$glusterfs_discard" = "yes" ; then
7134 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7137 if test "$glusterfs_fallocate" = "yes" ; then
7138 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7141 if test "$glusterfs_zerofill" = "yes" ; then
7142 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7145 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7146 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7149 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7150 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7153 if test "$libssh" = "yes" ; then
7154 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7155 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7156 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7159 if test "$live_block_migration" = "yes" ; then
7160 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7163 if test "$tpm" = "yes"; then
7164 echo 'CONFIG_TPM=y' >> $config_host_mak
7167 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7168 if have_backend "nop"; then
7169 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7171 if have_backend "simple"; then
7172 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7173 # Set the appropriate trace file.
7174 trace_file="\"$trace_file-\" FMT_pid"
7176 if have_backend "log"; then
7177 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7179 if have_backend "ust"; then
7180 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7182 if have_backend "dtrace"; then
7183 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7184 if test "$trace_backend_stap" = "yes" ; then
7185 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7188 if have_backend "ftrace"; then
7189 if test "$linux" = "yes" ; then
7190 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7192 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7195 if have_backend "syslog"; then
7196 if test "$posix_syslog" = "yes" ; then
7197 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7199 feature_not_found "syslog(trace backend)" "syslog not available"
7202 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7204 if test "$rdma" = "yes" ; then
7205 echo "CONFIG_RDMA=y" >> $config_host_mak
7206 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7209 if test "$pvrdma" = "yes" ; then
7210 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7213 if test "$have_rtnetlink" = "yes" ; then
7214 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7217 if test "$libxml2" = "yes" ; then
7218 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7219 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7220 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7223 if test "$replication" = "yes" ; then
7224 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7227 if test "$have_af_vsock" = "yes" ; then
7228 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7231 if test "$have_sysmacros" = "yes" ; then
7232 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7235 if test "$have_static_assert" = "yes" ; then
7236 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7239 if test "$have_utmpx" = "yes" ; then
7240 echo "HAVE_UTMPX=y" >> $config_host_mak
7242 if test "$have_getrandom" = "yes" ; then
7243 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7245 if test "$ivshmem" = "yes" ; then
7246 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7248 if test "$capstone" != "no" ; then
7249 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7251 if test "$debug_mutex" = "yes" ; then
7252 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7255 # Hold two types of flag:
7256 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7257 # a thread we have a handle to
7258 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7260 if test "$pthread_setname_np_w_tid" = "yes" ; then
7261 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7262 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7263 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7264 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7265 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7268 if test "$vxhs" = "yes" ; then
7269 echo "CONFIG_VXHS=y" >> $config_host_mak
7270 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7273 if test "$libpmem" = "yes" ; then
7274 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7277 if test "$bochs" = "yes" ; then
7278 echo "CONFIG_BOCHS=y" >> $config_host_mak
7280 if test "$cloop" = "yes" ; then
7281 echo "CONFIG_CLOOP=y" >> $config_host_mak
7283 if test "$dmg" = "yes" ; then
7284 echo "CONFIG_DMG=y" >> $config_host_mak
7286 if test "$qcow1" = "yes" ; then
7287 echo "CONFIG_QCOW1=y" >> $config_host_mak
7289 if test "$vdi" = "yes" ; then
7290 echo "CONFIG_VDI=y" >> $config_host_mak
7292 if test "$vvfat" = "yes" ; then
7293 echo "CONFIG_VVFAT=y" >> $config_host_mak
7295 if test "$qed" = "yes" ; then
7296 echo "CONFIG_QED=y" >> $config_host_mak
7298 if test "$parallels" = "yes" ; then
7299 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7301 if test "$sheepdog" = "yes" ; then
7302 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7305 if test "$tcg_interpreter" = "yes"; then
7306 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7307 elif test "$ARCH" = "sparc64" ; then
7308 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7309 elif test "$ARCH" = "s390x" ; then
7310 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7311 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7312 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7313 elif test "$ARCH" = "ppc64" ; then
7314 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7315 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7316 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7318 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7320 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7322 echo "TOOLS=$tools" >> $config_host_mak
7323 echo "ROMS=$roms" >> $config_host_mak
7324 echo "MAKE=$make" >> $config_host_mak
7325 echo "INSTALL=$install" >> $config_host_mak
7326 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7327 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7328 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7329 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7330 echo "PYTHON=$python" >> $config_host_mak
7331 echo "PYTHON_VERSION=$python_version" >> $config_host_mak
7332 echo "CC=$cc" >> $config_host_mak
7333 if $iasl -h > /dev/null 2>&1; then
7334 echo "IASL=$iasl" >> $config_host_mak
7336 echo "HOST_CC=$host_cc" >> $config_host_mak
7337 echo "CXX=$cxx" >> $config_host_mak
7338 echo "OBJCC=$objcc" >> $config_host_mak
7339 echo "AR=$ar" >> $config_host_mak
7340 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7341 echo "AS=$as" >> $config_host_mak
7342 echo "CCAS=$ccas" >> $config_host_mak
7343 echo "CPP=$cpp" >> $config_host_mak
7344 echo "OBJCOPY=$objcopy" >> $config_host_mak
7345 echo "LD=$ld" >> $config_host_mak
7346 echo "RANLIB=$ranlib" >> $config_host_mak
7347 echo "NM=$nm" >> $config_host_mak
7348 echo "WINDRES=$windres" >> $config_host_mak
7349 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7350 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7351 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7352 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7353 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7354 if test "$sparse" = "yes" ; then
7355 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7356 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7357 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7358 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7359 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7361 if test "$cross_prefix" != ""; then
7362 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7364 echo "AUTOCONF_HOST := " >> $config_host_mak
7366 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7367 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7368 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7369 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7370 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7371 echo "LIBS+=$LIBS" >> $config_host_mak
7372 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7373 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7374 echo "EXESUF=$EXESUF" >> $config_host_mak
7375 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7376 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7377 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7378 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7379 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7380 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7381 if test "$gcov" = "yes" ; then
7382 echo "CONFIG_GCOV=y" >> $config_host_mak
7383 echo "GCOV=$gcov_tool" >> $config_host_mak
7386 if test "$docker" != "no"; then
7387 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7390 if test "$libudev" != "no"; then
7391 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7392 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7395 # use included Linux headers
7396 if test "$linux" = "yes" ; then
7397 mkdir -p linux-headers
7415 # For most CPUs the kernel architecture name and QEMU CPU name match.
7419 # For non-KVM architectures we will not have asm headers
7420 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7421 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7425 for target in $target_list; do
7426 target_dir="$target"
7427 config_target_mak=$target_dir/config-target.mak
7428 target_name=$(echo $target | cut -d '-' -f 1)
7429 target_bigendian="no"
7431 case "$target_name" in
7432 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7433 target_bigendian=yes
7437 target_user_only="no"
7438 target_linux_user="no"
7439 target_bsd_user="no"
7441 ${target_name}-softmmu)
7442 target_softmmu="yes"
7444 ${target_name}-linux-user)
7445 target_user_only="yes"
7446 target_linux_user="yes"
7448 ${target_name}-bsd-user)
7449 target_user_only="yes"
7450 target_bsd_user="yes"
7453 error_exit "Target '$target' not recognised"
7459 target_compiler_static=""
7460 target_compiler_cflags=""
7462 mkdir -p $target_dir
7463 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7467 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7470 TARGET_ARCH="$target_name"
7474 case "$target_name" in
7477 gdb_xml_files="i386-32bit.xml"
7478 target_compiler=$cross_cc_i386
7479 target_compiler_cflags=$cross_cc_ccflags_i386
7482 TARGET_BASE_ARCH=i386
7484 gdb_xml_files="i386-64bit.xml"
7485 target_compiler=$cross_cc_x86_64
7489 target_compiler=$cross_cc_alpha
7495 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7496 target_compiler=$cross_cc_arm
7497 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7501 TARGET_BASE_ARCH=arm
7504 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7505 target_compiler=$cross_cc_aarch64
7506 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7509 target_compiler=$cross_cc_cris
7513 target_compiler=$cross_cc_hppa
7516 target_compiler=$cross_cc_lm32
7520 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7521 target_compiler=$cross_cc_m68k
7523 microblaze|microblazeel)
7524 TARGET_ARCH=microblaze
7526 echo "TARGET_ABI32=y" >> $config_target_mak
7527 target_compiler=$cross_cc_microblaze
7532 target_compiler=$cross_cc_mips
7533 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7538 TARGET_BASE_ARCH=mips
7539 target_compiler=$cross_cc_mipsn32
7540 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7541 echo "TARGET_ABI32=y" >> $config_target_mak
7546 TARGET_BASE_ARCH=mips
7547 target_compiler=$cross_cc_mips64
7548 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7551 target_compiler=$cross_cc_moxie
7554 target_compiler=$cross_cc_nios2
7557 target_compiler=$cross_cc_or1k
7558 TARGET_ARCH=openrisc
7559 TARGET_BASE_ARCH=openrisc
7562 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7563 target_compiler=$cross_cc_ppc
7564 target_compiler_cflags="$cross_cc_cflags_ppc"
7567 TARGET_BASE_ARCH=ppc
7570 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7571 target_compiler=$cross_cc_ppc64
7572 target_compiler_cflags="$cross_cc_cflags_ppc64"
7576 TARGET_BASE_ARCH=ppc
7579 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7580 target_compiler=$cross_cc_ppc64le
7584 TARGET_BASE_ARCH=ppc
7586 echo "TARGET_ABI32=y" >> $config_target_mak
7587 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7588 target_compiler=$cross_cc_ppc64abi32
7591 TARGET_BASE_ARCH=riscv
7592 TARGET_ABI_DIR=riscv
7594 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7595 target_compiler=$cross_cc_riscv32
7598 TARGET_BASE_ARCH=riscv
7599 TARGET_ABI_DIR=riscv
7601 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7602 target_compiler=$cross_cc_riscv64
7607 target_compiler=$cross_cc_sh4
7610 target_compiler=$cross_cc_sparc
7613 TARGET_BASE_ARCH=sparc
7614 target_compiler=$cross_cc_sparc64
7618 TARGET_BASE_ARCH=sparc
7619 TARGET_ABI_DIR=sparc
7620 target_compiler=$cross_cc_sparc32plus
7621 echo "TARGET_ABI32=y" >> $config_target_mak
7625 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7626 target_compiler=$cross_cc_s390x
7629 target_compiler=$cross_cc_tilegx
7632 target_compiler=$cross_cc_tricore
7635 target_compiler=$cross_cc_unicore32
7641 target_compiler=$cross_cc_xtensa
7644 error_exit "Unsupported target CPU"
7647 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7648 if [ "$TARGET_BASE_ARCH" = "" ]; then
7649 TARGET_BASE_ARCH=$TARGET_ARCH
7652 # Do we have a cross compiler for this target?
7653 if has $target_compiler; then
7657 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7658 # For host systems we might get away with building without -static
7659 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7662 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7663 target_compiler_static="n"
7666 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7667 target_compiler_static="y"
7673 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7676 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7679 target_arch_name="$(upper $TARGET_ARCH)"
7680 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7681 echo "TARGET_NAME=$target_name" >> $config_target_mak
7682 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7683 if [ "$TARGET_ABI_DIR" = "" ]; then
7684 TARGET_ABI_DIR=$TARGET_ARCH
7686 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7687 if [ "$HOST_VARIANT_DIR" != "" ]; then
7688 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7691 if supported_xen_target $target; then
7692 echo "CONFIG_XEN=y" >> $config_target_mak
7693 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7694 if test "$xen_pci_passthrough" = yes; then
7695 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7698 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7700 if supported_kvm_target $target; then
7701 echo "CONFIG_KVM=y" >> $config_target_mak
7702 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7704 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7706 if supported_hax_target $target; then
7707 echo "CONFIG_HAX=y" >> $config_target_mak
7709 if supported_hvf_target $target; then
7710 echo "CONFIG_HVF=y" >> $config_target_mak
7712 if supported_whpx_target $target; then
7713 echo "CONFIG_WHPX=y" >> $config_target_mak
7715 if test "$target_bigendian" = "yes" ; then
7716 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7718 if test "$target_softmmu" = "yes" ; then
7719 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7720 if test "$mttcg" = "yes" ; then
7721 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7724 if test "$target_user_only" = "yes" ; then
7725 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7726 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7728 if test "$target_linux_user" = "yes" ; then
7729 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7732 if test ! -z "$gdb_xml_files" ; then
7733 for x in $gdb_xml_files; do
7734 list="$list $source_path/gdb-xml/$x"
7736 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7739 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7740 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7742 if test "$target_bsd_user" = "yes" ; then
7743 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7746 if test -n "$target_compiler"; then
7747 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7749 if test -n "$target_compiler_static"; then
7750 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7753 if test -n "$target_compiler_cflags"; then
7754 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7759 # generate QEMU_CFLAGS/LDFLAGS for targets
7765 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7766 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7769 for i in $ARCH $TARGET_BASE_ARCH ; do
7772 disas_config "ALPHA"
7775 if test -n "${cxx}"; then
7776 disas_config "ARM_A64"
7781 if test -n "${cxx}"; then
7782 disas_config "ARM_A64"
7801 disas_config "MICROBLAZE"
7805 if test -n "${cxx}"; then
7806 disas_config "NANOMIPS"
7810 disas_config "MOXIE"
7813 disas_config "NIOS2"
7816 disas_config "OPENRISC"
7822 disas_config "RISCV"
7831 disas_config "SPARC"
7834 disas_config "XTENSA"
7838 if test "$tcg_interpreter" = "yes" ; then
7844 # Ensure there's only a single GP
7845 cflags="-msmall-data $cflags"
7849 if test "$gprof" = "yes" ; then
7850 echo "TARGET_GPROF=y" >> $config_target_mak
7851 if test "$target_linux_user" = "yes" ; then
7853 ldflags="-p $ldflags"
7855 if test "$target_softmmu" = "yes" ; then
7856 ldflags="-p $ldflags"
7857 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7861 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7862 ldflags="$ldflags $textseg_ldflags"
7865 # Newer kernels on s390 check for an S390_PGSTE program header and
7866 # enable the pgste page table extensions in that case. This makes
7867 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7869 # - we build on s390x
7870 # - we build the system emulation for s390x (qemu-system-s390x)
7872 # - the linker supports --s390-pgste
7873 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7874 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7875 if ld_has --s390-pgste ; then
7876 ldflags="-Wl,--s390-pgste $ldflags"
7880 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7881 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7883 done # for target in $targets
7885 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7886 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7888 if test -n "$enabled_cross_compilers"; then
7890 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7893 if [ "$fdt" = "git" ]; then
7894 echo "config-host.h: dtc/all" >> $config_host_mak
7896 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7897 echo "config-host.h: capstone/all" >> $config_host_mak
7899 if test -n "$LIBCAPSTONE"; then
7900 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7903 if test "$numa" = "yes"; then
7904 echo "CONFIG_NUMA=y" >> $config_host_mak
7907 if test "$ccache_cpp2" = "yes"; then
7908 echo "export CCACHE_CPP2=y" >> $config_host_mak
7911 # If we're using a separate build tree, set it up now.
7912 # DIRS are directories which we simply mkdir in the build tree;
7913 # LINKS are things to symlink back into the source tree
7914 # (these can be both files and directories).
7915 # Caution: do not add files or directories here using wildcards. This
7916 # will result in problems later if a new file matching the wildcard is
7917 # added to the source tree -- nothing will cause configure to be rerun
7918 # so the build tree will be missing the link back to the new file, and
7919 # tests might fail. Prefer to keep the relevant files in their own
7920 # directory and symlink the directory instead.
7921 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7922 DIRS="$DIRS tests/fp tests/qgraph"
7923 DIRS="$DIRS docs docs/interop fsdev scsi"
7924 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7925 DIRS="$DIRS roms/seabios roms/vgabios"
7926 LINKS="Makefile tests/tcg/Makefile"
7927 LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7928 LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7929 LINKS="$LINKS tests/fp/Makefile"
7930 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7931 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7932 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7933 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7934 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7935 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7936 LINKS="$LINKS tests/acceptance tests/data"
7937 LINKS="$LINKS tests/qemu-iotests/check"
7938 LINKS="$LINKS python"
7940 $source_path/pc-bios/*.bin \
7941 $source_path/pc-bios/*.lid \
7942 $source_path/pc-bios/*.rom \
7943 $source_path/pc-bios/*.dtb \
7944 $source_path/pc-bios/*.img \
7945 $source_path/pc-bios/openbios-* \
7946 $source_path/pc-bios/u-boot.* \
7947 $source_path/pc-bios/edk2-*.fd.bz2 \
7948 $source_path/pc-bios/palcode-*
7950 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7953 for f in $LINKS ; do
7954 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7955 symlink "$source_path/$f" "$f"
7959 # temporary config to build submodules
7960 for rom in seabios vgabios ; do
7961 config_mak=roms/$rom/config.mak
7962 echo "# Automatically generated by configure - do not modify" > $config_mak
7963 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7964 echo "AS=$as" >> $config_mak
7965 echo "CCAS=$ccas" >> $config_mak
7966 echo "CC=$cc" >> $config_mak
7967 echo "BCC=bcc" >> $config_mak
7968 echo "CPP=$cpp" >> $config_mak
7969 echo "OBJCOPY=objcopy" >> $config_mak
7970 echo "IASL=$iasl" >> $config_mak
7971 echo "LD=$ld" >> $config_mak
7972 echo "RANLIB=$ranlib" >> $config_mak
7975 # set up qemu-iotests in this build directory
7976 iotests_common_env="tests/qemu-iotests/common.env"
7978 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7979 echo >> "$iotests_common_env"
7980 echo "export PYTHON='$python'" >> "$iotests_common_env"
7982 # Save the configure command line for later reuse.
7983 cat <<EOD >config.status
7985 # Generated by configure.
7986 # Run this file to recreate the current configuration.
7987 # Compiler output produced by configure, useful for debugging
7988 # configure, is in config.log if it exists.
7994 eval envval=\$$envname
7996 if test -n "$envval"
7998 echo "$envname='$envval'" >> config.status
7999 echo "export $envname" >> config.status
8001 echo "unset $envname" >> config.status
8005 # Preserve various env variables that influence what
8006 # features/build target configure will detect
8012 preserve_env INSTALL
8014 preserve_env LD_LIBRARY_PATH
8015 preserve_env LIBTOOL
8018 preserve_env OBJCOPY
8020 preserve_env PKG_CONFIG
8021 preserve_env PKG_CONFIG_LIBDIR
8022 preserve_env PKG_CONFIG_PATH
8024 preserve_env SDL_CONFIG
8025 preserve_env SDL2_CONFIG
8028 preserve_env WINDRES
8030 printf "exec" >>config.status
8031 printf " '%s'" "$0" "$@" >>config.status
8032 echo ' "$@"' >>config.status
8033 chmod +x config.status