]> Git Repo - qemu.git/blob - configure
qcow2.py: move qcow2 format classes to separate module
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
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
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
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.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23     echo "ERROR: failed to create temporary directory"
24     exit 1
25 fi
26
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
33 TMPTXT="${TMPDIR1}/${TMPB}.txt"
34
35 rm -f config.log
36
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
41 echo >> config.log
42 echo "#" >> config.log
43
44 print_error() {
45     (echo
46     echo "ERROR: $1"
47     while test -n "$2"; do
48         echo "       $2"
49         shift
50     done
51     echo) >&2
52 }
53
54 error_exit() {
55     print_error "$@"
56     exit 1
57 }
58
59 do_compiler() {
60     # Run the compiler, capturing its output to the log. First argument
61     # is compiler binary to execute.
62     local compiler="$1"
63     shift
64     if test -n "$BASH_VERSION"; then eval '
65         echo >>config.log "
66 funcs: ${FUNCNAME[*]}
67 lines: ${BASH_LINENO[*]}"
68     '; fi
69     echo $compiler "$@" >> config.log
70     $compiler "$@" >> config.log 2>&1 || return $?
71     # Test passed. If this is an --enable-werror build, rerun
72     # the test with -Werror and bail out if it fails. This
73     # makes warning-generating-errors in configure test code
74     # obvious to developers.
75     if test "$werror" != "yes"; then
76         return 0
77     fi
78     # Don't bother rerunning the compile if we were already using -Werror
79     case "$*" in
80         *-Werror*)
81            return 0
82         ;;
83     esac
84     echo $compiler -Werror "$@" >> config.log
85     $compiler -Werror "$@" >> config.log 2>&1 && return $?
86     error_exit "configure test passed without -Werror but failed with -Werror." \
87         "This is probably a bug in the configure script. The failing command" \
88         "will be at the bottom of config.log." \
89         "You can run configure with --disable-werror to bypass this check."
90 }
91
92 do_cc() {
93     do_compiler "$cc" "$@"
94 }
95
96 do_cxx() {
97     do_compiler "$cxx" "$@"
98 }
99
100 update_cxxflags() {
101     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102     # options which some versions of GCC's C++ compiler complain about
103     # because they only make sense for C programs.
104     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
105
106     for arg in $QEMU_CFLAGS; do
107         case $arg in
108             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110                 ;;
111             -std=gnu99)
112                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113                 ;;
114             *)
115                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116                 ;;
117         esac
118     done
119 }
120
121 compile_object() {
122   local_cflags="$1"
123   do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
124 }
125
126 compile_prog() {
127   local_cflags="$1"
128   local_ldflags="$2"
129   do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
130 }
131
132 # symbolically link $1 to $2.  Portable version of "ln -sf".
133 symlink() {
134   rm -rf "$2"
135   mkdir -p "$(dirname "$2")"
136   ln -s "$1" "$2"
137 }
138
139 # check whether a command is available to this shell (may be either an
140 # executable or a builtin)
141 has() {
142     type "$1" >/dev/null 2>&1
143 }
144
145 # search for an executable in PATH
146 path_of() {
147     local_command="$1"
148     local_ifs="$IFS"
149     local_dir=""
150
151     # pathname has a dir component?
152     if [ "${local_command#*/}" != "$local_command" ]; then
153         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154             echo "$local_command"
155             return 0
156         fi
157     fi
158     if [ -z "$local_command" ]; then
159         return 1
160     fi
161
162     IFS=:
163     for local_dir in $PATH; do
164         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165             echo "$local_dir/$local_command"
166             IFS="${local_ifs:-$(printf ' \t\n')}"
167             return 0
168         fi
169     done
170     # not found
171     IFS="${local_ifs:-$(printf ' \t\n')}"
172     return 1
173 }
174
175 have_backend () {
176     echo "$trace_backends" | grep "$1" >/dev/null
177 }
178
179 glob() {
180     eval test -z '"${1#'"$2"'}"'
181 }
182
183 supported_hax_target() {
184     test "$hax" = "yes" || return 1
185     glob "$1" "*-softmmu" || return 1
186     case "${1%-softmmu}" in
187         i386|x86_64)
188             return 0
189         ;;
190     esac
191     return 1
192 }
193
194 supported_kvm_target() {
195     test "$kvm" = "yes" || return 1
196     glob "$1" "*-softmmu" || return 1
197     case "${1%-softmmu}:$cpu" in
198         arm:arm | aarch64:aarch64 | \
199         i386:i386 | i386:x86_64 | i386:x32 | \
200         x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201         mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
202         ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
203         s390x:s390x)
204             return 0
205         ;;
206     esac
207     return 1
208 }
209
210 supported_xen_target() {
211     test "$xen" = "yes" || return 1
212     glob "$1" "*-softmmu" || return 1
213     # Only i386 and x86_64 provide the xenpv machine.
214     case "${1%-softmmu}" in
215         i386|x86_64)
216             return 0
217         ;;
218     esac
219     return 1
220 }
221
222 supported_hvf_target() {
223     test "$hvf" = "yes" || return 1
224     glob "$1" "*-softmmu" || return 1
225     case "${1%-softmmu}" in
226         x86_64)
227             return 0
228         ;;
229     esac
230     return 1
231 }
232
233 supported_whpx_target() {
234     test "$whpx" = "yes" || return 1
235     glob "$1" "*-softmmu" || return 1
236     case "${1%-softmmu}" in
237         i386|x86_64)
238             return 0
239         ;;
240     esac
241     return 1
242 }
243
244 supported_target() {
245     case "$1" in
246         *-softmmu)
247             ;;
248         *-linux-user)
249             if test "$linux" != "yes"; then
250                 print_error "Target '$target' is only available on a Linux host"
251                 return 1
252             fi
253             ;;
254         *-bsd-user)
255             if test "$bsd" != "yes"; then
256                 print_error "Target '$target' is only available on a BSD host"
257                 return 1
258             fi
259             ;;
260         *)
261             print_error "Invalid target name '$target'"
262             return 1
263             ;;
264     esac
265     test "$tcg" = "yes" && return 0
266     supported_kvm_target "$1" && return 0
267     supported_xen_target "$1" && return 0
268     supported_hax_target "$1" && return 0
269     supported_hvf_target "$1" && return 0
270     supported_whpx_target "$1" && return 0
271     print_error "TCG disabled, but hardware accelerator not available for '$target'"
272     return 1
273 }
274
275
276 ld_has() {
277     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278 }
279
280 # make source path absolute
281 source_path=$(cd "$(dirname -- "$0")"; pwd)
282
283 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284 then
285   error_exit "main directory cannot contain spaces nor colons"
286 fi
287
288 # default parameters
289 cpu=""
290 iasl="iasl"
291 interp_prefix="/usr/gnemul/qemu-%M"
292 static="no"
293 cross_prefix=""
294 audio_drv_list=""
295 block_drv_rw_whitelist=""
296 block_drv_ro_whitelist=""
297 host_cc="cc"
298 libs_cpu=""
299 libs_softmmu=""
300 libs_tools=""
301 audio_win_int=""
302 libs_qga=""
303 debug_info="yes"
304 stack_protector=""
305 use_containers="yes"
306 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
307
308 if test -e "$source_path/.git"
309 then
310     git_update=yes
311     git_submodules="ui/keycodemapdb"
312     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
313     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
314 else
315     git_update=no
316     git_submodules=""
317
318     if ! test -f "$source_path/ui/keycodemapdb/README"
319     then
320         echo
321         echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
322         echo
323         echo "This is not a GIT checkout but module content appears to"
324         echo "be missing. Do not use 'git archive' or GitHub download links"
325         echo "to acquire QEMU source archives. Non-GIT builds are only"
326         echo "supported with source archives linked from:"
327         echo
328         echo "  https://www.qemu.org/download/#source"
329         echo
330         echo "Developers working with GIT can use scripts/archive-source.sh"
331         echo "if they need to create valid source archives."
332         echo
333         exit 1
334     fi
335 fi
336 git="git"
337
338 # Don't accept a target_list environment variable.
339 unset target_list
340 unset target_list_exclude
341
342 # Default value for a variable defining feature "foo".
343 #  * foo="no"  feature will only be used if --enable-foo arg is given
344 #  * foo=""    feature will be searched for, and if found, will be used
345 #              unless --disable-foo is given
346 #  * foo="yes" this value will only be set by --enable-foo flag.
347 #              feature will searched for,
348 #              if not found, configure exits with error
349 #
350 # Always add --enable-foo and --disable-foo command line args.
351 # Distributions want to ensure that several features are compiled in, and it
352 # is impossible without a --enable-foo that exits if a feature is not found.
353
354 brlapi=""
355 curl=""
356 curses=""
357 docs=""
358 fdt=""
359 netmap="no"
360 sdl=""
361 sdl_image=""
362 virtfs=""
363 mpath=""
364 vnc="yes"
365 sparse="no"
366 vde=""
367 vnc_sasl=""
368 vnc_jpeg=""
369 vnc_png=""
370 xkbcommon=""
371 xen=""
372 xen_ctrl_version=""
373 xen_pci_passthrough=""
374 linux_aio=""
375 linux_io_uring=""
376 cap_ng=""
377 attr=""
378 libattr=""
379 xfs=""
380 tcg="yes"
381 membarrier=""
382 vhost_net=""
383 vhost_crypto=""
384 vhost_scsi=""
385 vhost_vsock=""
386 vhost_user=""
387 vhost_user_fs=""
388 kvm="no"
389 hax="no"
390 hvf="no"
391 whpx="no"
392 rdma=""
393 pvrdma=""
394 gprof="no"
395 debug_tcg="no"
396 debug="no"
397 sanitizers="no"
398 fortify_source=""
399 strip_opt="yes"
400 tcg_interpreter="no"
401 bigendian="no"
402 mingw32="no"
403 gcov="no"
404 gcov_tool="gcov"
405 EXESUF=""
406 DSOSUF=".so"
407 LDFLAGS_SHARED="-shared"
408 modules="no"
409 module_upgrades="no"
410 prefix="/usr/local"
411 mandir="\${prefix}/share/man"
412 datadir="\${prefix}/share"
413 firmwarepath="\${prefix}/share/qemu-firmware"
414 qemu_docdir="\${prefix}/share/doc/qemu"
415 bindir="\${prefix}/bin"
416 libdir="\${prefix}/lib"
417 libexecdir="\${prefix}/libexec"
418 includedir="\${prefix}/include"
419 sysconfdir="\${prefix}/etc"
420 local_statedir="\${prefix}/var"
421 confsuffix="/qemu"
422 slirp=""
423 oss_lib=""
424 bsd="no"
425 linux="no"
426 solaris="no"
427 profiler="no"
428 cocoa="no"
429 softmmu="yes"
430 linux_user="no"
431 bsd_user="no"
432 blobs="yes"
433 edk2_blobs="no"
434 pkgversion=""
435 pie=""
436 qom_cast_debug="yes"
437 trace_backends="log"
438 trace_file="trace"
439 spice=""
440 rbd=""
441 smartcard=""
442 libusb=""
443 usb_redir=""
444 opengl=""
445 opengl_dmabuf="no"
446 cpuid_h="no"
447 avx2_opt=""
448 zlib="yes"
449 capstone=""
450 lzo=""
451 snappy=""
452 bzip2=""
453 lzfse=""
454 zstd=""
455 guest_agent=""
456 guest_agent_with_vss="no"
457 guest_agent_ntddscsi="no"
458 guest_agent_msi=""
459 vss_win32_sdk=""
460 win_sdk="no"
461 want_tools=""
462 libiscsi=""
463 libnfs=""
464 coroutine=""
465 coroutine_pool=""
466 debug_stack_usage="no"
467 crypto_afalg="no"
468 seccomp=""
469 glusterfs=""
470 glusterfs_xlator_opt="no"
471 glusterfs_discard="no"
472 glusterfs_fallocate="no"
473 glusterfs_zerofill="no"
474 glusterfs_ftruncate_has_stat="no"
475 glusterfs_iocb_has_stat="no"
476 gtk=""
477 gtk_gl="no"
478 tls_priority="NORMAL"
479 gnutls=""
480 nettle=""
481 nettle_xts="no"
482 gcrypt=""
483 gcrypt_hmac="no"
484 gcrypt_xts="no"
485 qemu_private_xts="yes"
486 auth_pam=""
487 vte=""
488 virglrenderer=""
489 tpm=""
490 libssh=""
491 live_block_migration="yes"
492 numa=""
493 tcmalloc="no"
494 jemalloc="no"
495 replication="yes"
496 vxhs=""
497 bochs="yes"
498 cloop="yes"
499 dmg="yes"
500 qcow1="yes"
501 vdi="yes"
502 vvfat="yes"
503 qed="yes"
504 parallels="yes"
505 sheepdog="yes"
506 libxml2=""
507 debug_mutex="no"
508 libpmem=""
509 default_devices="yes"
510 plugins="no"
511 fuzzing="no"
512
513 supported_cpu="no"
514 supported_os="no"
515 bogus_os="no"
516 malloc_trim=""
517
518 # parse CC options first
519 for opt do
520   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
521   case "$opt" in
522   --cross-prefix=*) cross_prefix="$optarg"
523   ;;
524   --cc=*) CC="$optarg"
525   ;;
526   --cxx=*) CXX="$optarg"
527   ;;
528   --cpu=*) cpu="$optarg"
529   ;;
530   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
531                     QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
532   ;;
533   --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
534   ;;
535   --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
536                      EXTRA_LDFLAGS="$optarg"
537   ;;
538   --enable-debug-info) debug_info="yes"
539   ;;
540   --disable-debug-info) debug_info="no"
541   ;;
542   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
543   ;;
544   --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
545                       eval "cross_cc_cflags_${cc_arch}=\$optarg"
546                       cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
547   ;;
548   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
549                 cc_archs="$cc_archs $cc_arch"
550                 eval "cross_cc_${cc_arch}=\$optarg"
551                 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
552   ;;
553   esac
554 done
555 # OS specific
556 # Using uname is really, really broken.  Once we have the right set of checks
557 # we can eliminate its usage altogether.
558
559 # Preferred compiler:
560 #  ${CC} (if set)
561 #  ${cross_prefix}gcc (if cross-prefix specified)
562 #  system compiler
563 if test -z "${CC}${cross_prefix}"; then
564   cc="$host_cc"
565 else
566   cc="${CC-${cross_prefix}gcc}"
567 fi
568
569 if test -z "${CXX}${cross_prefix}"; then
570   cxx="c++"
571 else
572   cxx="${CXX-${cross_prefix}g++}"
573 fi
574
575 ar="${AR-${cross_prefix}ar}"
576 as="${AS-${cross_prefix}as}"
577 ccas="${CCAS-$cc}"
578 cpp="${CPP-$cc -E}"
579 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
580 ld="${LD-${cross_prefix}ld}"
581 ranlib="${RANLIB-${cross_prefix}ranlib}"
582 nm="${NM-${cross_prefix}nm}"
583 strip="${STRIP-${cross_prefix}strip}"
584 windres="${WINDRES-${cross_prefix}windres}"
585 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
586 query_pkg_config() {
587     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
588 }
589 pkg_config=query_pkg_config
590 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
591
592 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
593 ARFLAGS="${ARFLAGS-rv}"
594
595 # default flags for all hosts
596 # We use -fwrapv to tell the compiler that we require a C dialect where
597 # left shift of signed integers is well defined and has the expected
598 # 2s-complement style results. (Both clang and gcc agree that it
599 # provides these semantics.)
600 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
601 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
602 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
603 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
604 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
605 QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
606 if test "$debug_info" = "yes"; then
607     CFLAGS="-g $CFLAGS"
608 fi
609
610 # running configure in the source tree?
611 # we know that's the case if configure is there.
612 if test -f "./configure"; then
613     pwd_is_source_path="y"
614 else
615     pwd_is_source_path="n"
616 fi
617
618 check_define() {
619 cat > $TMPC <<EOF
620 #if !defined($1)
621 #error $1 not defined
622 #endif
623 int main(void) { return 0; }
624 EOF
625   compile_object
626 }
627
628 check_include() {
629 cat > $TMPC <<EOF
630 #include <$1>
631 int main(void) { return 0; }
632 EOF
633   compile_object
634 }
635
636 write_c_skeleton() {
637     cat > $TMPC <<EOF
638 int main(void) { return 0; }
639 EOF
640 }
641
642 write_c_fuzzer_skeleton() {
643     cat > $TMPC <<EOF
644 #include <stdint.h>
645 #include <sys/types.h>
646 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
647 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
648 EOF
649 }
650
651 if check_define __linux__ ; then
652   targetos="Linux"
653 elif check_define _WIN32 ; then
654   targetos='MINGW32'
655 elif check_define __OpenBSD__ ; then
656   targetos='OpenBSD'
657 elif check_define __sun__ ; then
658   targetos='SunOS'
659 elif check_define __HAIKU__ ; then
660   targetos='Haiku'
661 elif check_define __FreeBSD__ ; then
662   targetos='FreeBSD'
663 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
664   targetos='GNU/kFreeBSD'
665 elif check_define __DragonFly__ ; then
666   targetos='DragonFly'
667 elif check_define __NetBSD__; then
668   targetos='NetBSD'
669 elif check_define __APPLE__; then
670   targetos='Darwin'
671 else
672   # This is a fatal error, but don't report it yet, because we
673   # might be going to just print the --help text, or it might
674   # be the result of a missing compiler.
675   targetos='bogus'
676   bogus_os='yes'
677 fi
678
679 # Some host OSes need non-standard checks for which CPU to use.
680 # Note that these checks are broken for cross-compilation: if you're
681 # cross-compiling to one of these OSes then you'll need to specify
682 # the correct CPU with the --cpu option.
683 case $targetos in
684 Darwin)
685   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
686   # run 64-bit userspace code.
687   # If the user didn't specify a CPU explicitly and the kernel says this is
688   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
689   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
690     cpu="x86_64"
691   fi
692   ;;
693 SunOS)
694   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
695   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
696     cpu="x86_64"
697   fi
698 esac
699
700 if test ! -z "$cpu" ; then
701   # command line argument
702   :
703 elif check_define __i386__ ; then
704   cpu="i386"
705 elif check_define __x86_64__ ; then
706   if check_define __ILP32__ ; then
707     cpu="x32"
708   else
709     cpu="x86_64"
710   fi
711 elif check_define __sparc__ ; then
712   if check_define __arch64__ ; then
713     cpu="sparc64"
714   else
715     cpu="sparc"
716   fi
717 elif check_define _ARCH_PPC ; then
718   if check_define _ARCH_PPC64 ; then
719     if check_define _LITTLE_ENDIAN ; then
720       cpu="ppc64le"
721     else
722       cpu="ppc64"
723     fi
724   else
725     cpu="ppc"
726   fi
727 elif check_define __mips__ ; then
728   cpu="mips"
729 elif check_define __s390__ ; then
730   if check_define __s390x__ ; then
731     cpu="s390x"
732   else
733     cpu="s390"
734   fi
735 elif check_define __riscv ; then
736   if check_define _LP64 ; then
737     cpu="riscv64"
738   else
739     cpu="riscv32"
740   fi
741 elif check_define __arm__ ; then
742   cpu="arm"
743 elif check_define __aarch64__ ; then
744   cpu="aarch64"
745 else
746   cpu=$(uname -m)
747 fi
748
749 ARCH=
750 # Normalise host CPU name and set ARCH.
751 # Note that this case should only have supported host CPUs, not guests.
752 case "$cpu" in
753   ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
754     supported_cpu="yes"
755   ;;
756   ppc64le)
757     ARCH="ppc64"
758     supported_cpu="yes"
759   ;;
760   i386|i486|i586|i686|i86pc|BePC)
761     cpu="i386"
762     supported_cpu="yes"
763   ;;
764   x86_64|amd64)
765     cpu="x86_64"
766     supported_cpu="yes"
767   ;;
768   armv*b|armv*l|arm)
769     cpu="arm"
770     supported_cpu="yes"
771   ;;
772   aarch64)
773     cpu="aarch64"
774     supported_cpu="yes"
775   ;;
776   mips*)
777     cpu="mips"
778     supported_cpu="yes"
779   ;;
780   sparc|sun4[cdmuv])
781     cpu="sparc"
782     supported_cpu="yes"
783   ;;
784   *)
785     # This will result in either an error or falling back to TCI later
786     ARCH=unknown
787   ;;
788 esac
789 if test -z "$ARCH"; then
790   ARCH="$cpu"
791 fi
792
793 # OS specific
794
795 # host *BSD for user mode
796 HOST_VARIANT_DIR=""
797
798 case $targetos in
799 MINGW32*)
800   mingw32="yes"
801   hax="yes"
802   vhost_user="no"
803   audio_possible_drivers="dsound sdl"
804   if check_include dsound.h; then
805     audio_drv_list="dsound"
806   else
807     audio_drv_list=""
808   fi
809   supported_os="yes"
810   pie="no"
811 ;;
812 GNU/kFreeBSD)
813   bsd="yes"
814   audio_drv_list="oss try-sdl"
815   audio_possible_drivers="oss sdl pa"
816 ;;
817 FreeBSD)
818   bsd="yes"
819   make="${MAKE-gmake}"
820   audio_drv_list="oss try-sdl"
821   audio_possible_drivers="oss sdl pa"
822   # needed for kinfo_getvmmap(3) in libutil.h
823   LIBS="-lutil $LIBS"
824   # needed for kinfo_getproc
825   libs_qga="-lutil $libs_qga"
826   netmap=""  # enable netmap autodetect
827   HOST_VARIANT_DIR="freebsd"
828   supported_os="yes"
829 ;;
830 DragonFly)
831   bsd="yes"
832   make="${MAKE-gmake}"
833   audio_drv_list="oss try-sdl"
834   audio_possible_drivers="oss sdl pa"
835   HOST_VARIANT_DIR="dragonfly"
836 ;;
837 NetBSD)
838   bsd="yes"
839   hax="yes"
840   make="${MAKE-gmake}"
841   audio_drv_list="oss try-sdl"
842   audio_possible_drivers="oss sdl"
843   oss_lib="-lossaudio"
844   HOST_VARIANT_DIR="netbsd"
845   supported_os="yes"
846 ;;
847 OpenBSD)
848   bsd="yes"
849   make="${MAKE-gmake}"
850   audio_drv_list="try-sdl"
851   audio_possible_drivers="sdl"
852   HOST_VARIANT_DIR="openbsd"
853   supported_os="yes"
854 ;;
855 Darwin)
856   bsd="yes"
857   darwin="yes"
858   hax="yes"
859   hvf="yes"
860   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
861   if [ "$cpu" = "x86_64" ] ; then
862     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
863     QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
864   fi
865   cocoa="yes"
866   audio_drv_list="coreaudio try-sdl"
867   audio_possible_drivers="coreaudio sdl"
868   QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_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"
874   supported_os="yes"
875 ;;
876 SunOS)
877   solaris="yes"
878   make="${MAKE-gmake}"
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"
883   fi
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"
893 ;;
894 Haiku)
895   haiku="yes"
896   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897   LIBS="-lposix_error_mapper -lnetwork $LIBS"
898 ;;
899 Linux)
900   audio_drv_list="try-pa oss"
901   audio_possible_drivers="oss alsa sdl pa"
902   linux="yes"
903   linux_user="yes"
904   kvm="yes"
905   QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
906   supported_os="yes"
907   libudev="yes"
908 ;;
909 esac
910
911 if [ "$bsd" = "yes" ] ; then
912   if [ "$darwin" != "yes" ] ; then
913     bsd_user="yes"
914   fi
915 fi
916
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 too
922 python=
923 for binary in "${PYTHON-python3}" python
924 do
925     if has "$binary"
926     then
927         python=$(command -v "$binary")
928         break
929     fi
930 done
931
932 sphinx_build=
933 for binary in sphinx-build-3 sphinx-build
934 do
935     if has "$binary"
936     then
937         sphinx_build=$(command -v "$binary")
938         break
939     fi
940 done
941
942 # Check for ancillary tools used in testing
943 genisoimage=
944 for binary in genisoimage mkisofs
945 do
946     if has $binary
947     then
948         genisoimage=$(command -v "$binary")
949         break
950     fi
951 done
952
953 : ${smbd=${SMBD-/usr/sbin/smbd}}
954
955 # Default objcc to clang if available, otherwise use CC
956 if has clang; then
957   objcc=clang
958 else
959   objcc="$cc"
960 fi
961
962 if test "$mingw32" = "yes" ; then
963   EXESUF=".exe"
964   DSOSUF=".dll"
965   # MinGW needs -mthreads for TLS and macro _MT.
966   QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
967   LIBS="-lwinmm -lws2_32 $LIBS"
968   write_c_skeleton;
969   if compile_prog "" "-liberty" ; then
970     LIBS="-liberty $LIBS"
971   fi
972   prefix="c:/Program Files/QEMU"
973   mandir="\${prefix}"
974   datadir="\${prefix}"
975   qemu_docdir="\${prefix}"
976   bindir="\${prefix}"
977   sysconfdir="\${prefix}"
978   local_statedir=
979   confsuffix=""
980   libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
981 fi
982
983 werror=""
984
985 for opt do
986   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
987   case "$opt" in
988   --help|-h) show_help=yes
989   ;;
990   --version|-V) exec cat $source_path/VERSION
991   ;;
992   --prefix=*) prefix="$optarg"
993   ;;
994   --interp-prefix=*) interp_prefix="$optarg"
995   ;;
996   --cross-prefix=*)
997   ;;
998   --cc=*)
999   ;;
1000   --host-cc=*) host_cc="$optarg"
1001   ;;
1002   --cxx=*)
1003   ;;
1004   --iasl=*) iasl="$optarg"
1005   ;;
1006   --objcc=*) objcc="$optarg"
1007   ;;
1008   --make=*) make="$optarg"
1009   ;;
1010   --install=*) install="$optarg"
1011   ;;
1012   --python=*) python="$optarg"
1013   ;;
1014   --sphinx-build=*) sphinx_build="$optarg"
1015   ;;
1016   --gcov=*) gcov_tool="$optarg"
1017   ;;
1018   --smbd=*) smbd="$optarg"
1019   ;;
1020   --extra-cflags=*)
1021   ;;
1022   --extra-cxxflags=*)
1023   ;;
1024   --extra-ldflags=*)
1025   ;;
1026   --enable-debug-info)
1027   ;;
1028   --disable-debug-info)
1029   ;;
1030   --cross-cc-*)
1031   ;;
1032   --enable-modules)
1033       modules="yes"
1034   ;;
1035   --disable-modules)
1036       modules="no"
1037   ;;
1038   --disable-module-upgrades) module_upgrades="no"
1039   ;;
1040   --enable-module-upgrades) module_upgrades="yes"
1041   ;;
1042   --cpu=*)
1043   ;;
1044   --target-list=*) target_list="$optarg"
1045                    if test "$target_list_exclude"; then
1046                        error_exit "Can't mix --target-list with --target-list-exclude"
1047                    fi
1048   ;;
1049   --target-list-exclude=*) target_list_exclude="$optarg"
1050                    if test "$target_list"; then
1051                        error_exit "Can't mix --target-list-exclude with --target-list"
1052                    fi
1053   ;;
1054   --enable-trace-backends=*) trace_backends="$optarg"
1055   ;;
1056   # XXX: backwards compatibility
1057   --enable-trace-backend=*) trace_backends="$optarg"
1058   ;;
1059   --with-trace-file=*) trace_file="$optarg"
1060   ;;
1061   --with-default-devices) default_devices="yes"
1062   ;;
1063   --without-default-devices) default_devices="no"
1064   ;;
1065   --enable-gprof) gprof="yes"
1066   ;;
1067   --enable-gcov) gcov="yes"
1068   ;;
1069   --static)
1070     static="yes"
1071     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1072   ;;
1073   --mandir=*) mandir="$optarg"
1074   ;;
1075   --bindir=*) bindir="$optarg"
1076   ;;
1077   --libdir=*) libdir="$optarg"
1078   ;;
1079   --libexecdir=*) libexecdir="$optarg"
1080   ;;
1081   --includedir=*) includedir="$optarg"
1082   ;;
1083   --datadir=*) datadir="$optarg"
1084   ;;
1085   --with-confsuffix=*) confsuffix="$optarg"
1086   ;;
1087   --docdir=*) qemu_docdir="$optarg"
1088   ;;
1089   --sysconfdir=*) sysconfdir="$optarg"
1090   ;;
1091   --localstatedir=*) local_statedir="$optarg"
1092   ;;
1093   --firmwarepath=*) firmwarepath="$optarg"
1094   ;;
1095   --host=*|--build=*|\
1096   --disable-dependency-tracking|\
1097   --sbindir=*|--sharedstatedir=*|\
1098   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1099   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1100     # These switches are silently ignored, for compatibility with
1101     # autoconf-generated configure scripts. This allows QEMU's
1102     # configure to be used by RPM and similar macros that set
1103     # lots of directory switches by default.
1104   ;;
1105   --disable-sdl) sdl="no"
1106   ;;
1107   --enable-sdl) sdl="yes"
1108   ;;
1109   --disable-sdl-image) sdl_image="no"
1110   ;;
1111   --enable-sdl-image) sdl_image="yes"
1112   ;;
1113   --disable-qom-cast-debug) qom_cast_debug="no"
1114   ;;
1115   --enable-qom-cast-debug) qom_cast_debug="yes"
1116   ;;
1117   --disable-virtfs) virtfs="no"
1118   ;;
1119   --enable-virtfs) virtfs="yes"
1120   ;;
1121   --disable-mpath) mpath="no"
1122   ;;
1123   --enable-mpath) mpath="yes"
1124   ;;
1125   --disable-vnc) vnc="no"
1126   ;;
1127   --enable-vnc) vnc="yes"
1128   ;;
1129   --oss-lib=*) oss_lib="$optarg"
1130   ;;
1131   --audio-drv-list=*) audio_drv_list="$optarg"
1132   ;;
1133   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1134   ;;
1135   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1136   ;;
1137   --enable-debug-tcg) debug_tcg="yes"
1138   ;;
1139   --disable-debug-tcg) debug_tcg="no"
1140   ;;
1141   --enable-debug)
1142       # Enable debugging options that aren't excessively noisy
1143       debug_tcg="yes"
1144       debug_mutex="yes"
1145       debug="yes"
1146       strip_opt="no"
1147       fortify_source="no"
1148   ;;
1149   --enable-sanitizers) sanitizers="yes"
1150   ;;
1151   --disable-sanitizers) sanitizers="no"
1152   ;;
1153   --enable-sparse) sparse="yes"
1154   ;;
1155   --disable-sparse) sparse="no"
1156   ;;
1157   --disable-strip) strip_opt="no"
1158   ;;
1159   --disable-vnc-sasl) vnc_sasl="no"
1160   ;;
1161   --enable-vnc-sasl) vnc_sasl="yes"
1162   ;;
1163   --disable-vnc-jpeg) vnc_jpeg="no"
1164   ;;
1165   --enable-vnc-jpeg) vnc_jpeg="yes"
1166   ;;
1167   --disable-vnc-png) vnc_png="no"
1168   ;;
1169   --enable-vnc-png) vnc_png="yes"
1170   ;;
1171   --disable-slirp) slirp="no"
1172   ;;
1173   --enable-slirp=git) slirp="git"
1174   ;;
1175   --enable-slirp=system) slirp="system"
1176   ;;
1177   --disable-vde) vde="no"
1178   ;;
1179   --enable-vde) vde="yes"
1180   ;;
1181   --disable-netmap) netmap="no"
1182   ;;
1183   --enable-netmap) netmap="yes"
1184   ;;
1185   --disable-xen) xen="no"
1186   ;;
1187   --enable-xen) xen="yes"
1188   ;;
1189   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1190   ;;
1191   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1192   ;;
1193   --disable-brlapi) brlapi="no"
1194   ;;
1195   --enable-brlapi) brlapi="yes"
1196   ;;
1197   --disable-kvm) kvm="no"
1198   ;;
1199   --enable-kvm) kvm="yes"
1200   ;;
1201   --disable-hax) hax="no"
1202   ;;
1203   --enable-hax) hax="yes"
1204   ;;
1205   --disable-hvf) hvf="no"
1206   ;;
1207   --enable-hvf) hvf="yes"
1208   ;;
1209   --disable-whpx) whpx="no"
1210   ;;
1211   --enable-whpx) whpx="yes"
1212   ;;
1213   --disable-tcg-interpreter) tcg_interpreter="no"
1214   ;;
1215   --enable-tcg-interpreter) tcg_interpreter="yes"
1216   ;;
1217   --disable-cap-ng)  cap_ng="no"
1218   ;;
1219   --enable-cap-ng) cap_ng="yes"
1220   ;;
1221   --disable-tcg) tcg="no"
1222   ;;
1223   --enable-tcg) tcg="yes"
1224   ;;
1225   --disable-malloc-trim) malloc_trim="no"
1226   ;;
1227   --enable-malloc-trim) malloc_trim="yes"
1228   ;;
1229   --disable-spice) spice="no"
1230   ;;
1231   --enable-spice) spice="yes"
1232   ;;
1233   --disable-libiscsi) libiscsi="no"
1234   ;;
1235   --enable-libiscsi) libiscsi="yes"
1236   ;;
1237   --disable-libnfs) libnfs="no"
1238   ;;
1239   --enable-libnfs) libnfs="yes"
1240   ;;
1241   --enable-profiler) profiler="yes"
1242   ;;
1243   --disable-cocoa) cocoa="no"
1244   ;;
1245   --enable-cocoa)
1246       cocoa="yes" ;
1247       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1248   ;;
1249   --disable-system) softmmu="no"
1250   ;;
1251   --enable-system) softmmu="yes"
1252   ;;
1253   --disable-user)
1254       linux_user="no" ;
1255       bsd_user="no" ;
1256   ;;
1257   --enable-user) ;;
1258   --disable-linux-user) linux_user="no"
1259   ;;
1260   --enable-linux-user) linux_user="yes"
1261   ;;
1262   --disable-bsd-user) bsd_user="no"
1263   ;;
1264   --enable-bsd-user) bsd_user="yes"
1265   ;;
1266   --enable-pie) pie="yes"
1267   ;;
1268   --disable-pie) pie="no"
1269   ;;
1270   --enable-werror) werror="yes"
1271   ;;
1272   --disable-werror) werror="no"
1273   ;;
1274   --enable-stack-protector) stack_protector="yes"
1275   ;;
1276   --disable-stack-protector) stack_protector="no"
1277   ;;
1278   --disable-curses) curses="no"
1279   ;;
1280   --enable-curses) curses="yes"
1281   ;;
1282   --disable-iconv) iconv="no"
1283   ;;
1284   --enable-iconv) iconv="yes"
1285   ;;
1286   --disable-curl) curl="no"
1287   ;;
1288   --enable-curl) curl="yes"
1289   ;;
1290   --disable-fdt) fdt="no"
1291   ;;
1292   --enable-fdt) fdt="yes"
1293   ;;
1294   --disable-linux-aio) linux_aio="no"
1295   ;;
1296   --enable-linux-aio) linux_aio="yes"
1297   ;;
1298   --disable-linux-io-uring) linux_io_uring="no"
1299   ;;
1300   --enable-linux-io-uring) linux_io_uring="yes"
1301   ;;
1302   --disable-attr) attr="no"
1303   ;;
1304   --enable-attr) attr="yes"
1305   ;;
1306   --disable-membarrier) membarrier="no"
1307   ;;
1308   --enable-membarrier) membarrier="yes"
1309   ;;
1310   --disable-blobs) blobs="no"
1311   ;;
1312   --with-pkgversion=*) pkgversion="$optarg"
1313   ;;
1314   --with-coroutine=*) coroutine="$optarg"
1315   ;;
1316   --disable-coroutine-pool) coroutine_pool="no"
1317   ;;
1318   --enable-coroutine-pool) coroutine_pool="yes"
1319   ;;
1320   --enable-debug-stack-usage) debug_stack_usage="yes"
1321   ;;
1322   --enable-crypto-afalg) crypto_afalg="yes"
1323   ;;
1324   --disable-crypto-afalg) crypto_afalg="no"
1325   ;;
1326   --disable-docs) docs="no"
1327   ;;
1328   --enable-docs) docs="yes"
1329   ;;
1330   --disable-vhost-net) vhost_net="no"
1331   ;;
1332   --enable-vhost-net) vhost_net="yes"
1333   ;;
1334   --disable-vhost-crypto) vhost_crypto="no"
1335   ;;
1336   --enable-vhost-crypto) vhost_crypto="yes"
1337   ;;
1338   --disable-vhost-scsi) vhost_scsi="no"
1339   ;;
1340   --enable-vhost-scsi) vhost_scsi="yes"
1341   ;;
1342   --disable-vhost-vsock) vhost_vsock="no"
1343   ;;
1344   --enable-vhost-vsock) vhost_vsock="yes"
1345   ;;
1346   --disable-vhost-user-fs) vhost_user_fs="no"
1347   ;;
1348   --enable-vhost-user-fs) vhost_user_fs="yes"
1349   ;;
1350   --disable-opengl) opengl="no"
1351   ;;
1352   --enable-opengl) opengl="yes"
1353   ;;
1354   --disable-rbd) rbd="no"
1355   ;;
1356   --enable-rbd) rbd="yes"
1357   ;;
1358   --disable-xfsctl) xfs="no"
1359   ;;
1360   --enable-xfsctl) xfs="yes"
1361   ;;
1362   --disable-smartcard) smartcard="no"
1363   ;;
1364   --enable-smartcard) smartcard="yes"
1365   ;;
1366   --disable-libusb) libusb="no"
1367   ;;
1368   --enable-libusb) libusb="yes"
1369   ;;
1370   --disable-usb-redir) usb_redir="no"
1371   ;;
1372   --enable-usb-redir) usb_redir="yes"
1373   ;;
1374   --disable-zlib-test) zlib="no"
1375   ;;
1376   --disable-lzo) lzo="no"
1377   ;;
1378   --enable-lzo) lzo="yes"
1379   ;;
1380   --disable-snappy) snappy="no"
1381   ;;
1382   --enable-snappy) snappy="yes"
1383   ;;
1384   --disable-bzip2) bzip2="no"
1385   ;;
1386   --enable-bzip2) bzip2="yes"
1387   ;;
1388   --enable-lzfse) lzfse="yes"
1389   ;;
1390   --disable-lzfse) lzfse="no"
1391   ;;
1392   --disable-zstd) zstd="no"
1393   ;;
1394   --enable-zstd) zstd="yes"
1395   ;;
1396   --enable-guest-agent) guest_agent="yes"
1397   ;;
1398   --disable-guest-agent) guest_agent="no"
1399   ;;
1400   --enable-guest-agent-msi) guest_agent_msi="yes"
1401   ;;
1402   --disable-guest-agent-msi) guest_agent_msi="no"
1403   ;;
1404   --with-vss-sdk) vss_win32_sdk=""
1405   ;;
1406   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1407   ;;
1408   --without-vss-sdk) vss_win32_sdk="no"
1409   ;;
1410   --with-win-sdk) win_sdk=""
1411   ;;
1412   --with-win-sdk=*) win_sdk="$optarg"
1413   ;;
1414   --without-win-sdk) win_sdk="no"
1415   ;;
1416   --enable-tools) want_tools="yes"
1417   ;;
1418   --disable-tools) want_tools="no"
1419   ;;
1420   --enable-seccomp) seccomp="yes"
1421   ;;
1422   --disable-seccomp) seccomp="no"
1423   ;;
1424   --disable-glusterfs) glusterfs="no"
1425   ;;
1426   --disable-avx2) avx2_opt="no"
1427   ;;
1428   --enable-avx2) avx2_opt="yes"
1429   ;;
1430   --disable-avx512f) avx512f_opt="no"
1431   ;;
1432   --enable-avx512f) avx512f_opt="yes"
1433   ;;
1434
1435   --enable-glusterfs) glusterfs="yes"
1436   ;;
1437   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1438       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1439   ;;
1440   --enable-vhdx|--disable-vhdx)
1441       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1442   ;;
1443   --enable-uuid|--disable-uuid)
1444       echo "$0: $opt is obsolete, UUID support is always built" >&2
1445   ;;
1446   --disable-gtk) gtk="no"
1447   ;;
1448   --enable-gtk) gtk="yes"
1449   ;;
1450   --tls-priority=*) tls_priority="$optarg"
1451   ;;
1452   --disable-gnutls) gnutls="no"
1453   ;;
1454   --enable-gnutls) gnutls="yes"
1455   ;;
1456   --disable-nettle) nettle="no"
1457   ;;
1458   --enable-nettle) nettle="yes"
1459   ;;
1460   --disable-gcrypt) gcrypt="no"
1461   ;;
1462   --enable-gcrypt) gcrypt="yes"
1463   ;;
1464   --disable-auth-pam) auth_pam="no"
1465   ;;
1466   --enable-auth-pam) auth_pam="yes"
1467   ;;
1468   --enable-rdma) rdma="yes"
1469   ;;
1470   --disable-rdma) rdma="no"
1471   ;;
1472   --enable-pvrdma) pvrdma="yes"
1473   ;;
1474   --disable-pvrdma) pvrdma="no"
1475   ;;
1476   --disable-vte) vte="no"
1477   ;;
1478   --enable-vte) vte="yes"
1479   ;;
1480   --disable-virglrenderer) virglrenderer="no"
1481   ;;
1482   --enable-virglrenderer) virglrenderer="yes"
1483   ;;
1484   --disable-tpm) tpm="no"
1485   ;;
1486   --enable-tpm) tpm="yes"
1487   ;;
1488   --disable-libssh) libssh="no"
1489   ;;
1490   --enable-libssh) libssh="yes"
1491   ;;
1492   --disable-live-block-migration) live_block_migration="no"
1493   ;;
1494   --enable-live-block-migration) live_block_migration="yes"
1495   ;;
1496   --disable-numa) numa="no"
1497   ;;
1498   --enable-numa) numa="yes"
1499   ;;
1500   --disable-libxml2) libxml2="no"
1501   ;;
1502   --enable-libxml2) libxml2="yes"
1503   ;;
1504   --disable-tcmalloc) tcmalloc="no"
1505   ;;
1506   --enable-tcmalloc) tcmalloc="yes"
1507   ;;
1508   --disable-jemalloc) jemalloc="no"
1509   ;;
1510   --enable-jemalloc) jemalloc="yes"
1511   ;;
1512   --disable-replication) replication="no"
1513   ;;
1514   --enable-replication) replication="yes"
1515   ;;
1516   --disable-vxhs) vxhs="no"
1517   ;;
1518   --enable-vxhs) vxhs="yes"
1519   ;;
1520   --disable-bochs) bochs="no"
1521   ;;
1522   --enable-bochs) bochs="yes"
1523   ;;
1524   --disable-cloop) cloop="no"
1525   ;;
1526   --enable-cloop) cloop="yes"
1527   ;;
1528   --disable-dmg) dmg="no"
1529   ;;
1530   --enable-dmg) dmg="yes"
1531   ;;
1532   --disable-qcow1) qcow1="no"
1533   ;;
1534   --enable-qcow1) qcow1="yes"
1535   ;;
1536   --disable-vdi) vdi="no"
1537   ;;
1538   --enable-vdi) vdi="yes"
1539   ;;
1540   --disable-vvfat) vvfat="no"
1541   ;;
1542   --enable-vvfat) vvfat="yes"
1543   ;;
1544   --disable-qed) qed="no"
1545   ;;
1546   --enable-qed) qed="yes"
1547   ;;
1548   --disable-parallels) parallels="no"
1549   ;;
1550   --enable-parallels) parallels="yes"
1551   ;;
1552   --disable-sheepdog) sheepdog="no"
1553   ;;
1554   --enable-sheepdog) sheepdog="yes"
1555   ;;
1556   --disable-vhost-user) vhost_user="no"
1557   ;;
1558   --enable-vhost-user) vhost_user="yes"
1559   ;;
1560   --disable-vhost-kernel) vhost_kernel="no"
1561   ;;
1562   --enable-vhost-kernel) vhost_kernel="yes"
1563   ;;
1564   --disable-capstone) capstone="no"
1565   ;;
1566   --enable-capstone) capstone="yes"
1567   ;;
1568   --enable-capstone=git) capstone="git"
1569   ;;
1570   --enable-capstone=system) capstone="system"
1571   ;;
1572   --with-git=*) git="$optarg"
1573   ;;
1574   --enable-git-update) git_update=yes
1575   ;;
1576   --disable-git-update) git_update=no
1577   ;;
1578   --enable-debug-mutex) debug_mutex=yes
1579   ;;
1580   --disable-debug-mutex) debug_mutex=no
1581   ;;
1582   --enable-libpmem) libpmem=yes
1583   ;;
1584   --disable-libpmem) libpmem=no
1585   ;;
1586   --enable-xkbcommon) xkbcommon=yes
1587   ;;
1588   --disable-xkbcommon) xkbcommon=no
1589   ;;
1590   --enable-plugins) plugins="yes"
1591   ;;
1592   --disable-plugins) plugins="no"
1593   ;;
1594   --enable-containers) use_containers="yes"
1595   ;;
1596   --disable-containers) use_containers="no"
1597   ;;
1598   --enable-fuzzing) fuzzing=yes
1599   ;;
1600   --disable-fuzzing) fuzzing=no
1601   ;;
1602   --gdb=*) gdb_bin="$optarg"
1603   ;;
1604   *)
1605       echo "ERROR: unknown option $opt"
1606       echo "Try '$0 --help' for more information"
1607       exit 1
1608   ;;
1609   esac
1610 done
1611
1612 case "$cpu" in
1613     ppc)
1614            CPU_CFLAGS="-m32"
1615            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1616            ;;
1617     ppc64)
1618            CPU_CFLAGS="-m64"
1619            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1620            ;;
1621     sparc)
1622            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1623            QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1624            ;;
1625     sparc64)
1626            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1627            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1628            ;;
1629     s390)
1630            CPU_CFLAGS="-m31"
1631            QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1632            ;;
1633     s390x)
1634            CPU_CFLAGS="-m64"
1635            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1636            ;;
1637     i386)
1638            CPU_CFLAGS="-m32"
1639            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1640            ;;
1641     x86_64)
1642            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1643            # If we truly care, we should simply detect this case at
1644            # runtime and generate the fallback to serial emulation.
1645            CPU_CFLAGS="-m64 -mcx16"
1646            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1647            ;;
1648     x32)
1649            CPU_CFLAGS="-mx32"
1650            QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1651            ;;
1652     # No special flags required for other host CPUs
1653 esac
1654
1655 eval "cross_cc_${cpu}=\$host_cc"
1656 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1657 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1658
1659 # For user-mode emulation the host arch has to be one we explicitly
1660 # support, even if we're using TCI.
1661 if [ "$ARCH" = "unknown" ]; then
1662   bsd_user="no"
1663   linux_user="no"
1664 fi
1665
1666 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1667   tcg="no"
1668 fi
1669
1670 default_target_list=""
1671
1672 mak_wilds=""
1673
1674 if [ "$softmmu" = "yes" ]; then
1675     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1676 fi
1677 if [ "$linux_user" = "yes" ]; then
1678     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1679 fi
1680 if [ "$bsd_user" = "yes" ]; then
1681     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1682 fi
1683
1684 if test -z "$target_list_exclude"; then
1685     for config in $mak_wilds; do
1686         default_target_list="${default_target_list} $(basename "$config" .mak)"
1687     done
1688 else
1689     exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1690     for config in $mak_wilds; do
1691         target="$(basename "$config" .mak)"
1692         exclude="no"
1693         for excl in $exclude_list; do
1694             if test "$excl" = "$target"; then
1695                 exclude="yes"
1696                 break;
1697             fi
1698         done
1699         if test "$exclude" = "no"; then
1700             default_target_list="${default_target_list} $target"
1701         fi
1702     done
1703 fi
1704
1705 # Enumerate public trace backends for --help output
1706 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1707
1708 if test x"$show_help" = x"yes" ; then
1709 cat << EOF
1710
1711 Usage: configure [options]
1712 Options: [defaults in brackets after descriptions]
1713
1714 Standard options:
1715   --help                   print this message
1716   --prefix=PREFIX          install in PREFIX [$prefix]
1717   --interp-prefix=PREFIX   where to find shared libraries, etc.
1718                            use %M for cpu name [$interp_prefix]
1719   --target-list=LIST       set target list (default: build everything)
1720 $(echo Available targets: $default_target_list | \
1721   fold -s -w 53 | sed -e 's/^/                           /')
1722   --target-list-exclude=LIST exclude a set of targets from the default target-list
1723
1724 Advanced options (experts only):
1725   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1726   --cc=CC                  use C compiler CC [$cc]
1727   --iasl=IASL              use ACPI compiler IASL [$iasl]
1728   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1729                            build time
1730   --cxx=CXX                use C++ compiler CXX [$cxx]
1731   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1732   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1733   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1734   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1735   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1736   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1737   --make=MAKE              use specified make [$make]
1738   --install=INSTALL        use specified install [$install]
1739   --python=PYTHON          use specified python [$python]
1740   --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1741   --smbd=SMBD              use specified smbd [$smbd]
1742   --with-git=GIT           use specified git [$git]
1743   --static                 enable static build [$static]
1744   --mandir=PATH            install man pages in PATH
1745   --datadir=PATH           install firmware in PATH$confsuffix
1746   --docdir=PATH            install documentation in PATH$confsuffix
1747   --bindir=PATH            install binaries in PATH
1748   --libdir=PATH            install libraries in PATH
1749   --libexecdir=PATH        install helper binaries in PATH
1750   --sysconfdir=PATH        install config in PATH$confsuffix
1751   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1752   --firmwarepath=PATH      search PATH for firmware files
1753   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1754   --with-pkgversion=VERS   use specified string as sub-version of the package
1755   --enable-debug           enable common debug build options
1756   --enable-sanitizers      enable default sanitizers
1757   --disable-strip          disable stripping binaries
1758   --disable-werror         disable compilation abort on warning
1759   --disable-stack-protector disable compiler-provided stack protection
1760   --audio-drv-list=LIST    set audio drivers list:
1761                            Available drivers: $audio_possible_drivers
1762   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1763   --block-drv-rw-whitelist=L
1764                            set block driver read-write whitelist
1765                            (affects only QEMU, not qemu-img)
1766   --block-drv-ro-whitelist=L
1767                            set block driver read-only whitelist
1768                            (affects only QEMU, not qemu-img)
1769   --enable-trace-backends=B Set trace backend
1770                            Available backends: $trace_backend_list
1771   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1772                            Default:trace-<pid>
1773   --disable-slirp          disable SLIRP userspace network connectivity
1774   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1775   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1776   --oss-lib                path to OSS library
1777   --cpu=CPU                Build for host CPU [$cpu]
1778   --with-coroutine=BACKEND coroutine backend. Supported options:
1779                            ucontext, sigaltstack, windows
1780   --enable-gcov            enable test coverage analysis with gcov
1781   --gcov=GCOV              use specified gcov [$gcov_tool]
1782   --disable-blobs          disable installing provided firmware blobs
1783   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1784   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1785   --tls-priority           default TLS protocol/cipher priority string
1786   --enable-gprof           QEMU profiling with gprof
1787   --enable-profiler        profiler support
1788   --enable-debug-stack-usage
1789                            track the maximum stack usage of stacks created by qemu_alloc_stack
1790   --enable-plugins
1791                            enable plugins via shared library loading
1792   --disable-containers     don't use containers for cross-building
1793   --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1794
1795 Optional features, enabled with --enable-FEATURE and
1796 disabled with --disable-FEATURE, default is enabled if available:
1797
1798   system          all system emulation targets
1799   user            supported user emulation targets
1800   linux-user      all linux usermode emulation targets
1801   bsd-user        all BSD usermode emulation targets
1802   docs            build documentation
1803   guest-agent     build the QEMU Guest Agent
1804   guest-agent-msi build guest agent Windows MSI installation package
1805   pie             Position Independent Executables
1806   modules         modules support (non-Windows)
1807   module-upgrades try to load modules from alternate paths for upgrades
1808   debug-tcg       TCG debugging (default is disabled)
1809   debug-info      debugging information
1810   sparse          sparse checker
1811
1812   gnutls          GNUTLS cryptography support
1813   nettle          nettle cryptography support
1814   gcrypt          libgcrypt cryptography support
1815   auth-pam        PAM access control
1816   sdl             SDL UI
1817   sdl-image       SDL Image support for icons
1818   gtk             gtk UI
1819   vte             vte support for the gtk UI
1820   curses          curses UI
1821   iconv           font glyph conversion support
1822   vnc             VNC UI support
1823   vnc-sasl        SASL encryption for VNC server
1824   vnc-jpeg        JPEG lossy compression for VNC server
1825   vnc-png         PNG compression for VNC server
1826   cocoa           Cocoa UI (Mac OS X only)
1827   virtfs          VirtFS
1828   mpath           Multipath persistent reservation passthrough
1829   xen             xen backend driver support
1830   xen-pci-passthrough    PCI passthrough support for Xen
1831   brlapi          BrlAPI (Braile)
1832   curl            curl connectivity
1833   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1834   fdt             fdt device tree
1835   kvm             KVM acceleration support
1836   hax             HAX acceleration support
1837   hvf             Hypervisor.framework acceleration support
1838   whpx            Windows Hypervisor Platform acceleration support
1839   rdma            Enable RDMA-based migration
1840   pvrdma          Enable PVRDMA support
1841   vde             support for vde network
1842   netmap          support for netmap network
1843   linux-aio       Linux AIO support
1844   linux-io-uring  Linux io_uring support
1845   cap-ng          libcap-ng support
1846   attr            attr and xattr support
1847   vhost-net       vhost-net kernel acceleration support
1848   vhost-vsock     virtio sockets device support
1849   vhost-scsi      vhost-scsi kernel target support
1850   vhost-crypto    vhost-user-crypto backend support
1851   vhost-kernel    vhost kernel backend support
1852   vhost-user      vhost-user backend support
1853   spice           spice
1854   rbd             rados block device (rbd)
1855   libiscsi        iscsi support
1856   libnfs          nfs support
1857   smartcard       smartcard support (libcacard)
1858   libusb          libusb (for usb passthrough)
1859   live-block-migration   Block migration in the main migration stream
1860   usb-redir       usb network redirection support
1861   lzo             support of lzo compression library
1862   snappy          support of snappy compression library
1863   bzip2           support of bzip2 compression library
1864                   (for reading bzip2-compressed dmg images)
1865   lzfse           support of lzfse compression library
1866                   (for reading lzfse-compressed dmg images)
1867   zstd            support for zstd compression library
1868                   (for migration compression and qcow2 cluster compression)
1869   seccomp         seccomp support
1870   coroutine-pool  coroutine freelist (better performance)
1871   glusterfs       GlusterFS backend
1872   tpm             TPM support
1873   libssh          ssh block device support
1874   numa            libnuma support
1875   libxml2         for Parallels image format
1876   tcmalloc        tcmalloc support
1877   jemalloc        jemalloc support
1878   avx2            AVX2 optimization support
1879   avx512f         AVX512F optimization support
1880   replication     replication support
1881   opengl          opengl support
1882   virglrenderer   virgl rendering support
1883   xfsctl          xfsctl support
1884   qom-cast-debug  cast debugging support
1885   tools           build qemu-io, qemu-nbd and qemu-img tools
1886   vxhs            Veritas HyperScale vDisk backend support
1887   bochs           bochs image format support
1888   cloop           cloop image format support
1889   dmg             dmg image format support
1890   qcow1           qcow v1 image format support
1891   vdi             vdi image format support
1892   vvfat           vvfat image format support
1893   qed             qed image format support
1894   parallels       parallels image format support
1895   sheepdog        sheepdog block driver support
1896   crypto-afalg    Linux AF_ALG crypto backend driver
1897   capstone        capstone disassembler support
1898   debug-mutex     mutex debugging support
1899   libpmem         libpmem support
1900   xkbcommon       xkbcommon support
1901
1902 NOTE: The object files are built at the place where configure is launched
1903 EOF
1904 exit 0
1905 fi
1906
1907 # Remove old dependency files to make sure that they get properly regenerated
1908 rm -f */config-devices.mak.d
1909
1910 # Remove syscall_nr.h to be sure they will be regenerated in the build
1911 # directory, not in the source directory
1912 for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1913     i386 x86_64 mips mips64 ; do
1914     # remove the file if it has been generated in the source directory
1915     rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1916     # remove the dependency files
1917     for target in ${arch}*-linux-user ; do
1918         test -d "${target}" && find "${target}" -type f -name "*.d" \
1919              -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1920              -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1921     done
1922 done
1923
1924 if test -z "$python"
1925 then
1926     error_exit "Python not found. Use --python=/path/to/python"
1927 fi
1928
1929 # Note that if the Python conditional here evaluates True we will exit
1930 # with status 1 which is a shell 'false' value.
1931 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1932   error_exit "Cannot use '$python', Python >= 3.5 is required." \
1933       "Use --python=/path/to/python to specify a supported Python."
1934 fi
1935
1936 # Preserve python version since some functionality is dependent on it
1937 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1938
1939 # Suppress writing compiled files
1940 python="$python -B"
1941
1942 # Check that the C compiler works. Doing this here before testing
1943 # the host CPU ensures that we had a valid CC to autodetect the
1944 # $cpu var (and we should bail right here if that's not the case).
1945 # It also allows the help message to be printed without a CC.
1946 write_c_skeleton;
1947 if compile_object ; then
1948   : C compiler works ok
1949 else
1950     error_exit "\"$cc\" either does not exist or does not work"
1951 fi
1952 if ! compile_prog ; then
1953     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1954 fi
1955
1956 # Now we have handled --enable-tcg-interpreter and know we're not just
1957 # printing the help message, bail out if the host CPU isn't supported.
1958 if test "$ARCH" = "unknown"; then
1959     if test "$tcg_interpreter" = "yes" ; then
1960         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1961     else
1962         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1963     fi
1964 fi
1965
1966 # Consult white-list to determine whether to enable werror
1967 # by default.  Only enable by default for git builds
1968 if test -z "$werror" ; then
1969     if test -e "$source_path/.git" && \
1970         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1971         werror="yes"
1972     else
1973         werror="no"
1974     fi
1975 fi
1976
1977 if test "$bogus_os" = "yes"; then
1978     # Now that we know that we're not printing the help and that
1979     # the compiler works (so the results of the check_defines we used
1980     # to identify the OS are reliable), if we didn't recognize the
1981     # host OS we should stop now.
1982     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1983 fi
1984
1985 # Check whether the compiler matches our minimum requirements:
1986 cat > $TMPC << EOF
1987 #if defined(__clang_major__) && defined(__clang_minor__)
1988 # ifdef __apple_build_version__
1989 #  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1990 #   error You need at least XCode Clang v5.1 to compile QEMU
1991 #  endif
1992 # else
1993 #  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1994 #   error You need at least Clang v3.4 to compile QEMU
1995 #  endif
1996 # endif
1997 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1998 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1999 #  error You need at least GCC v4.8 to compile QEMU
2000 # endif
2001 #else
2002 # error You either need GCC or Clang to compiler QEMU
2003 #endif
2004 int main (void) { return 0; }
2005 EOF
2006 if ! compile_prog "" "" ; then
2007     error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2008 fi
2009
2010 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
2011 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
2012 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
2013 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
2014 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
2015 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
2016 # Note that we do not add -Werror to gcc_flags here, because that would
2017 # enable it for all configure tests. If a configure test failed due
2018 # to -Werror this would just silently disable some features,
2019 # so it's too error prone.
2020
2021 cc_has_warning_flag() {
2022     write_c_skeleton;
2023
2024     # Use the positive sense of the flag when testing for -Wno-wombat
2025     # support (gcc will happily accept the -Wno- form of unknown
2026     # warning options).
2027     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2028     compile_prog "-Werror $optflag" ""
2029 }
2030
2031 for flag in $gcc_flags; do
2032     if cc_has_warning_flag $flag ; then
2033         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2034     fi
2035 done
2036
2037 if test "$stack_protector" != "no"; then
2038   cat > $TMPC << EOF
2039 int main(int argc, char *argv[])
2040 {
2041     char arr[64], *p = arr, *c = argv[0];
2042     while (*c) {
2043         *p++ = *c++;
2044     }
2045     return 0;
2046 }
2047 EOF
2048   gcc_flags="-fstack-protector-strong -fstack-protector-all"
2049   sp_on=0
2050   for flag in $gcc_flags; do
2051     # We need to check both a compile and a link, since some compiler
2052     # setups fail only on a .c->.o compile and some only at link time
2053     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2054        compile_prog "-Werror $flag" ""; then
2055       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2056       QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2057       sp_on=1
2058       break
2059     fi
2060   done
2061   if test "$stack_protector" = yes; then
2062     if test $sp_on = 0; then
2063       error_exit "Stack protector not supported"
2064     fi
2065   fi
2066 fi
2067
2068 # Disable -Wmissing-braces on older compilers that warn even for
2069 # the "universal" C zero initializer {0}.
2070 cat > $TMPC << EOF
2071 struct {
2072   int a[2];
2073 } x = {0};
2074 EOF
2075 if compile_object "-Werror" "" ; then
2076   :
2077 else
2078   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2079 fi
2080
2081 # Our module code doesn't support Windows
2082 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2083   error_exit "Modules are not available for Windows"
2084 fi
2085
2086 # module_upgrades is only reasonable if modules are enabled
2087 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2088   error_exit "Can't enable module-upgrades as Modules are not enabled"
2089 fi
2090
2091 # Static linking is not possible with modules or PIE
2092 if test "$static" = "yes" ; then
2093   if test "$modules" = "yes" ; then
2094     error_exit "static and modules are mutually incompatible"
2095   fi
2096 fi
2097
2098 # Unconditional check for compiler __thread support
2099   cat > $TMPC << EOF
2100 static __thread int tls_var;
2101 int main(void) { return tls_var; }
2102 EOF
2103
2104 if ! compile_prog "-Werror" "" ; then
2105     error_exit "Your compiler does not support the __thread specifier for " \
2106         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2107 fi
2108
2109 cat > $TMPC << EOF
2110
2111 #ifdef __linux__
2112 #  define THREAD __thread
2113 #else
2114 #  define THREAD
2115 #endif
2116 static THREAD int tls_var;
2117 int main(void) { return tls_var; }
2118 EOF
2119
2120 # Check we support --no-pie first; we will need this for building ROMs.
2121 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2122   CFLAGS_NOPIE="-fno-pie"
2123   LDFLAGS_NOPIE="-no-pie"
2124 fi
2125
2126 if test "$static" = "yes"; then
2127   if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2128     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2129     QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2130     pie="yes"
2131   elif test "$pie" = "yes"; then
2132     error_exit "-static-pie not available due to missing toolchain support"
2133   else
2134     QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2135     pie="no"
2136   fi
2137 elif test "$pie" = "no"; then
2138   QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2139   QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
2140 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2141   QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2142   QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2143   pie="yes"
2144 elif test "$pie" = "yes"; then
2145   error_exit "PIE not available due to missing toolchain support"
2146 else
2147   echo "Disabling PIE due to missing toolchain support"
2148   pie="no"
2149 fi
2150
2151 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2152 # The combination is known as "full relro", because .got.plt is read-only too.
2153 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2154   QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2155 fi
2156
2157 ##########################################
2158 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2159 # use i686 as default anyway, but for those that don't, an explicit
2160 # specification is necessary
2161
2162 if test "$cpu" = "i386"; then
2163   cat > $TMPC << EOF
2164 static int sfaa(int *ptr)
2165 {
2166   return __sync_fetch_and_and(ptr, 0);
2167 }
2168
2169 int main(void)
2170 {
2171   int val = 42;
2172   val = __sync_val_compare_and_swap(&val, 0, 1);
2173   sfaa(&val);
2174   return val;
2175 }
2176 EOF
2177   if ! compile_prog "" "" ; then
2178     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2179   fi
2180 fi
2181
2182 #########################################
2183 # Solaris specific configure tool chain decisions
2184
2185 if test "$solaris" = "yes" ; then
2186   if has $install; then
2187     :
2188   else
2189     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2190         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2191         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2192   fi
2193   if test "$(path_of $install)" = "/usr/sbin/install" ; then
2194     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2195         "try ginstall from the GNU fileutils available from www.blastwave.org" \
2196         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2197   fi
2198   if has ar; then
2199     :
2200   else
2201     if test -f /usr/ccs/bin/ar ; then
2202       error_exit "No path includes ar" \
2203           "Add /usr/ccs/bin to your path and rerun configure"
2204     fi
2205     error_exit "No path includes ar"
2206   fi
2207 fi
2208
2209 if test -z "${target_list+xxx}" ; then
2210     for target in $default_target_list; do
2211         supported_target $target 2>/dev/null && \
2212             target_list="$target_list $target"
2213     done
2214     target_list="${target_list# }"
2215 else
2216     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2217     for target in $target_list; do
2218         # Check that we recognised the target name; this allows a more
2219         # friendly error message than if we let it fall through.
2220         case " $default_target_list " in
2221             *" $target "*)
2222                 ;;
2223             *)
2224                 error_exit "Unknown target name '$target'"
2225                 ;;
2226         esac
2227         supported_target $target || exit 1
2228     done
2229 fi
2230
2231 # see if system emulation was really requested
2232 case " $target_list " in
2233   *"-softmmu "*) softmmu=yes
2234   ;;
2235   *) softmmu=no
2236   ;;
2237 esac
2238
2239 for target in $target_list; do
2240   case "$target" in
2241     arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2242       edk2_blobs="yes"
2243       ;;
2244   esac
2245 done
2246 # The EDK2 binaries are compressed with bzip2
2247 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2248   error_exit "The bzip2 program is required for building QEMU"
2249 fi
2250
2251 feature_not_found() {
2252   feature=$1
2253   remedy=$2
2254
2255   error_exit "User requested feature $feature" \
2256       "configure was not able to find it." \
2257       "$remedy"
2258 }
2259
2260 # ---
2261 # big/little endian test
2262 cat > $TMPC << EOF
2263 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2264 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2265 extern int foo(short *, short *);
2266 int main(int argc, char *argv[]) {
2267     return foo(big_endian, little_endian);
2268 }
2269 EOF
2270
2271 if compile_object ; then
2272     if strings -a $TMPO | grep -q BiGeNdIaN ; then
2273         bigendian="yes"
2274     elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2275         bigendian="no"
2276     else
2277         echo big/little test failed
2278     fi
2279 else
2280     echo big/little test failed
2281 fi
2282
2283 ##########################################
2284 # system tools
2285 if test -z "$want_tools"; then
2286     if test "$softmmu" = "no"; then
2287         want_tools=no
2288     else
2289         want_tools=yes
2290     fi
2291 fi
2292
2293 ##########################################
2294 # cocoa implies not SDL or GTK
2295 # (the cocoa UI code currently assumes it is always the active UI
2296 # and doesn't interact well with other UI frontend code)
2297 if test "$cocoa" = "yes"; then
2298     if test "$sdl" = "yes"; then
2299         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2300     fi
2301     if test "$gtk" = "yes"; then
2302         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2303     fi
2304     gtk=no
2305     sdl=no
2306 fi
2307
2308 # Some versions of Mac OS X incorrectly define SIZE_MAX
2309 cat > $TMPC << EOF
2310 #include <stdint.h>
2311 #include <stdio.h>
2312 int main(int argc, char *argv[]) {
2313     return printf("%zu", SIZE_MAX);
2314 }
2315 EOF
2316 have_broken_size_max=no
2317 if ! compile_object -Werror ; then
2318     have_broken_size_max=yes
2319 fi
2320
2321 ##########################################
2322 # L2TPV3 probe
2323
2324 cat > $TMPC <<EOF
2325 #include <sys/socket.h>
2326 #include <linux/ip.h>
2327 int main(void) { return sizeof(struct mmsghdr); }
2328 EOF
2329 if compile_prog "" "" ; then
2330   l2tpv3=yes
2331 else
2332   l2tpv3=no
2333 fi
2334
2335 #########################################
2336 # vhost interdependencies and host support
2337
2338 # vhost backends
2339 test "$vhost_user" = "" && vhost_user=yes
2340 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2341   error_exit "vhost-user isn't available on win32"
2342 fi
2343 test "$vhost_kernel" = "" && vhost_kernel=$linux
2344 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2345   error_exit "vhost-kernel is only available on Linux"
2346 fi
2347
2348 # vhost-kernel devices
2349 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2350 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2351   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2352 fi
2353 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2354 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2355   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2356 fi
2357
2358 # vhost-user backends
2359 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2360 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2361   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2362 fi
2363 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2364 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2365   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2366 fi
2367 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2368 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2369   error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2370 fi
2371
2372 # OR the vhost-kernel and vhost-user values for simplicity
2373 if test "$vhost_net" = ""; then
2374   test "$vhost_net_user" = "yes" && vhost_net=yes
2375   test "$vhost_kernel" = "yes" && vhost_net=yes
2376 fi
2377
2378 ##########################################
2379 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2380
2381 if test "$mingw32" = "yes"; then
2382     # Some versions of MinGW / Mingw-w64 lack localtime_r
2383     # and gmtime_r entirely.
2384     #
2385     # Some versions of Mingw-w64 define a macro for
2386     # localtime_r/gmtime_r.
2387     #
2388     # Some versions of Mingw-w64 will define functions
2389     # for localtime_r/gmtime_r, but only if you have
2390     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2391     # though, unistd.h and pthread.h both define
2392     # that for you.
2393     #
2394     # So this #undef localtime_r and #include <unistd.h>
2395     # are not in fact redundant.
2396 cat > $TMPC << EOF
2397 #include <unistd.h>
2398 #include <time.h>
2399 #undef localtime_r
2400 int main(void) { localtime_r(NULL, NULL); return 0; }
2401 EOF
2402     if compile_prog "" "" ; then
2403         localtime_r="yes"
2404     else
2405         localtime_r="no"
2406     fi
2407 fi
2408
2409 ##########################################
2410 # pkg-config probe
2411
2412 if ! has "$pkg_config_exe"; then
2413   error_exit "pkg-config binary '$pkg_config_exe' not found"
2414 fi
2415
2416 ##########################################
2417 # NPTL probe
2418
2419 if test "$linux_user" = "yes"; then
2420   cat > $TMPC <<EOF
2421 #include <sched.h>
2422 #include <linux/futex.h>
2423 int main(void) {
2424 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2425 #error bork
2426 #endif
2427   return 0;
2428 }
2429 EOF
2430   if ! compile_object ; then
2431     feature_not_found "nptl" "Install glibc and linux kernel headers."
2432   fi
2433 fi
2434
2435 ##########################################
2436 # lzo check
2437
2438 if test "$lzo" != "no" ; then
2439     cat > $TMPC << EOF
2440 #include <lzo/lzo1x.h>
2441 int main(void) { lzo_version(); return 0; }
2442 EOF
2443     if compile_prog "" "-llzo2" ; then
2444         libs_softmmu="$libs_softmmu -llzo2"
2445         lzo="yes"
2446     else
2447         if test "$lzo" = "yes"; then
2448             feature_not_found "liblzo2" "Install liblzo2 devel"
2449         fi
2450         lzo="no"
2451     fi
2452 fi
2453
2454 ##########################################
2455 # snappy check
2456
2457 if test "$snappy" != "no" ; then
2458     cat > $TMPC << EOF
2459 #include <snappy-c.h>
2460 int main(void) { snappy_max_compressed_length(4096); return 0; }
2461 EOF
2462     if compile_prog "" "-lsnappy" ; then
2463         libs_softmmu="$libs_softmmu -lsnappy"
2464         snappy="yes"
2465     else
2466         if test "$snappy" = "yes"; then
2467             feature_not_found "libsnappy" "Install libsnappy devel"
2468         fi
2469         snappy="no"
2470     fi
2471 fi
2472
2473 ##########################################
2474 # bzip2 check
2475
2476 if test "$bzip2" != "no" ; then
2477     cat > $TMPC << EOF
2478 #include <bzlib.h>
2479 int main(void) { BZ2_bzlibVersion(); return 0; }
2480 EOF
2481     if compile_prog "" "-lbz2" ; then
2482         bzip2="yes"
2483     else
2484         if test "$bzip2" = "yes"; then
2485             feature_not_found "libbzip2" "Install libbzip2 devel"
2486         fi
2487         bzip2="no"
2488     fi
2489 fi
2490
2491 ##########################################
2492 # lzfse check
2493
2494 if test "$lzfse" != "no" ; then
2495     cat > $TMPC << EOF
2496 #include <lzfse.h>
2497 int main(void) { lzfse_decode_scratch_size(); return 0; }
2498 EOF
2499     if compile_prog "" "-llzfse" ; then
2500         lzfse="yes"
2501     else
2502         if test "$lzfse" = "yes"; then
2503             feature_not_found "lzfse" "Install lzfse devel"
2504         fi
2505         lzfse="no"
2506     fi
2507 fi
2508
2509 ##########################################
2510 # zstd check
2511
2512 if test "$zstd" != "no" ; then
2513     libzstd_minver="1.4.0"
2514     if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2515         zstd_cflags="$($pkg_config --cflags libzstd)"
2516         zstd_libs="$($pkg_config --libs libzstd)"
2517         LIBS="$zstd_libs $LIBS"
2518         QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2519         zstd="yes"
2520     else
2521         if test "$zstd" = "yes" ; then
2522             feature_not_found "libzstd" "Install libzstd devel"
2523         fi
2524         zstd="no"
2525     fi
2526 fi
2527
2528 ##########################################
2529 # libseccomp check
2530
2531 if test "$seccomp" != "no" ; then
2532     libseccomp_minver="2.3.0"
2533     if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2534         seccomp_cflags="$($pkg_config --cflags libseccomp)"
2535         seccomp_libs="$($pkg_config --libs libseccomp)"
2536         seccomp="yes"
2537     else
2538         if test "$seccomp" = "yes" ; then
2539             feature_not_found "libseccomp" \
2540                  "Install libseccomp devel >= $libseccomp_minver"
2541         fi
2542         seccomp="no"
2543     fi
2544 fi
2545 ##########################################
2546 # xen probe
2547
2548 if test "$xen" != "no" ; then
2549   # Check whether Xen library path is specified via --extra-ldflags to avoid
2550   # overriding this setting with pkg-config output. If not, try pkg-config
2551   # to obtain all needed flags.
2552
2553   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2554      $pkg_config --exists xencontrol ; then
2555     xen_ctrl_version="$(printf '%d%02d%02d' \
2556       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2557     xen=yes
2558     xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2559     xen_pc="$xen_pc xenevtchn xendevicemodel"
2560     if $pkg_config --exists xentoolcore; then
2561       xen_pc="$xen_pc xentoolcore"
2562     fi
2563     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2564     libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2565   else
2566
2567     xen_libs="-lxenstore -lxenctrl -lxenguest"
2568     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2569
2570     # First we test whether Xen headers and libraries are available.
2571     # If no, we are done and there is no Xen support.
2572     # If yes, more tests are run to detect the Xen version.
2573
2574     # Xen (any)
2575     cat > $TMPC <<EOF
2576 #include <xenctrl.h>
2577 int main(void) {
2578   return 0;
2579 }
2580 EOF
2581     if ! compile_prog "" "$xen_libs" ; then
2582       # Xen not found
2583       if test "$xen" = "yes" ; then
2584         feature_not_found "xen" "Install xen devel"
2585       fi
2586       xen=no
2587
2588     # Xen unstable
2589     elif
2590         cat > $TMPC <<EOF &&
2591 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2592 #define __XEN_TOOLS__
2593 #include <xendevicemodel.h>
2594 #include <xenforeignmemory.h>
2595 int main(void) {
2596   xendevicemodel_handle *xd;
2597   xenforeignmemory_handle *xfmem;
2598
2599   xd = xendevicemodel_open(0, 0);
2600   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2601
2602   xfmem = xenforeignmemory_open(0, 0);
2603   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2604
2605   return 0;
2606 }
2607 EOF
2608         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2609       then
2610       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2611       xen_ctrl_version=41100
2612       xen=yes
2613     elif
2614         cat > $TMPC <<EOF &&
2615 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2616 #include <xenforeignmemory.h>
2617 #include <xentoolcore.h>
2618 int main(void) {
2619   xenforeignmemory_handle *xfmem;
2620
2621   xfmem = xenforeignmemory_open(0, 0);
2622   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2623   xentoolcore_restrict_all(0);
2624
2625   return 0;
2626 }
2627 EOF
2628         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2629       then
2630       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2631       xen_ctrl_version=41000
2632       xen=yes
2633     elif
2634         cat > $TMPC <<EOF &&
2635 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2636 #define __XEN_TOOLS__
2637 #include <xendevicemodel.h>
2638 int main(void) {
2639   xendevicemodel_handle *xd;
2640
2641   xd = xendevicemodel_open(0, 0);
2642   xendevicemodel_close(xd);
2643
2644   return 0;
2645 }
2646 EOF
2647         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2648       then
2649       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2650       xen_ctrl_version=40900
2651       xen=yes
2652     elif
2653         cat > $TMPC <<EOF &&
2654 /*
2655  * If we have stable libs the we don't want the libxc compat
2656  * layers, regardless of what CFLAGS we may have been given.
2657  *
2658  * Also, check if xengnttab_grant_copy_segment_t is defined and
2659  * grant copy operation is implemented.
2660  */
2661 #undef XC_WANT_COMPAT_EVTCHN_API
2662 #undef XC_WANT_COMPAT_GNTTAB_API
2663 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2664 #include <xenctrl.h>
2665 #include <xenstore.h>
2666 #include <xenevtchn.h>
2667 #include <xengnttab.h>
2668 #include <xenforeignmemory.h>
2669 #include <stdint.h>
2670 #include <xen/hvm/hvm_info_table.h>
2671 #if !defined(HVM_MAX_VCPUS)
2672 # error HVM_MAX_VCPUS not defined
2673 #endif
2674 int main(void) {
2675   xc_interface *xc = NULL;
2676   xenforeignmemory_handle *xfmem;
2677   xenevtchn_handle *xe;
2678   xengnttab_handle *xg;
2679   xengnttab_grant_copy_segment_t* seg = NULL;
2680
2681   xs_daemon_open();
2682
2683   xc = xc_interface_open(0, 0, 0);
2684   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2685   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2686   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2687   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2688
2689   xfmem = xenforeignmemory_open(0, 0);
2690   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2691
2692   xe = xenevtchn_open(0, 0);
2693   xenevtchn_fd(xe);
2694
2695   xg = xengnttab_open(0, 0);
2696   xengnttab_grant_copy(xg, 0, seg);
2697
2698   return 0;
2699 }
2700 EOF
2701         compile_prog "" "$xen_libs $xen_stable_libs"
2702       then
2703       xen_ctrl_version=40800
2704       xen=yes
2705     elif
2706         cat > $TMPC <<EOF &&
2707 /*
2708  * If we have stable libs the we don't want the libxc compat
2709  * layers, regardless of what CFLAGS we may have been given.
2710  */
2711 #undef XC_WANT_COMPAT_EVTCHN_API
2712 #undef XC_WANT_COMPAT_GNTTAB_API
2713 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2714 #include <xenctrl.h>
2715 #include <xenstore.h>
2716 #include <xenevtchn.h>
2717 #include <xengnttab.h>
2718 #include <xenforeignmemory.h>
2719 #include <stdint.h>
2720 #include <xen/hvm/hvm_info_table.h>
2721 #if !defined(HVM_MAX_VCPUS)
2722 # error HVM_MAX_VCPUS not defined
2723 #endif
2724 int main(void) {
2725   xc_interface *xc = NULL;
2726   xenforeignmemory_handle *xfmem;
2727   xenevtchn_handle *xe;
2728   xengnttab_handle *xg;
2729
2730   xs_daemon_open();
2731
2732   xc = xc_interface_open(0, 0, 0);
2733   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2734   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2735   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2736   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2737
2738   xfmem = xenforeignmemory_open(0, 0);
2739   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2740
2741   xe = xenevtchn_open(0, 0);
2742   xenevtchn_fd(xe);
2743
2744   xg = xengnttab_open(0, 0);
2745   xengnttab_map_grant_ref(xg, 0, 0, 0);
2746
2747   return 0;
2748 }
2749 EOF
2750         compile_prog "" "$xen_libs $xen_stable_libs"
2751       then
2752       xen_ctrl_version=40701
2753       xen=yes
2754
2755     # Xen 4.6
2756     elif
2757         cat > $TMPC <<EOF &&
2758 #include <xenctrl.h>
2759 #include <xenstore.h>
2760 #include <stdint.h>
2761 #include <xen/hvm/hvm_info_table.h>
2762 #if !defined(HVM_MAX_VCPUS)
2763 # error HVM_MAX_VCPUS not defined
2764 #endif
2765 int main(void) {
2766   xc_interface *xc;
2767   xs_daemon_open();
2768   xc = xc_interface_open(0, 0, 0);
2769   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2770   xc_gnttab_open(NULL, 0);
2771   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2772   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2773   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2774   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2775   return 0;
2776 }
2777 EOF
2778         compile_prog "" "$xen_libs"
2779       then
2780       xen_ctrl_version=40600
2781       xen=yes
2782
2783     # Xen 4.5
2784     elif
2785         cat > $TMPC <<EOF &&
2786 #include <xenctrl.h>
2787 #include <xenstore.h>
2788 #include <stdint.h>
2789 #include <xen/hvm/hvm_info_table.h>
2790 #if !defined(HVM_MAX_VCPUS)
2791 # error HVM_MAX_VCPUS not defined
2792 #endif
2793 int main(void) {
2794   xc_interface *xc;
2795   xs_daemon_open();
2796   xc = xc_interface_open(0, 0, 0);
2797   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2798   xc_gnttab_open(NULL, 0);
2799   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2800   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2801   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2802   return 0;
2803 }
2804 EOF
2805         compile_prog "" "$xen_libs"
2806       then
2807       xen_ctrl_version=40500
2808       xen=yes
2809
2810     elif
2811         cat > $TMPC <<EOF &&
2812 #include <xenctrl.h>
2813 #include <xenstore.h>
2814 #include <stdint.h>
2815 #include <xen/hvm/hvm_info_table.h>
2816 #if !defined(HVM_MAX_VCPUS)
2817 # error HVM_MAX_VCPUS not defined
2818 #endif
2819 int main(void) {
2820   xc_interface *xc;
2821   xs_daemon_open();
2822   xc = xc_interface_open(0, 0, 0);
2823   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2824   xc_gnttab_open(NULL, 0);
2825   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2826   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2827   return 0;
2828 }
2829 EOF
2830         compile_prog "" "$xen_libs"
2831       then
2832       xen_ctrl_version=40200
2833       xen=yes
2834
2835     else
2836       if test "$xen" = "yes" ; then
2837         feature_not_found "xen (unsupported version)" \
2838                           "Install a supported xen (xen 4.2 or newer)"
2839       fi
2840       xen=no
2841     fi
2842
2843     if test "$xen" = yes; then
2844       if test $xen_ctrl_version -ge 40701  ; then
2845         libs_softmmu="$xen_stable_libs $libs_softmmu"
2846       fi
2847       libs_softmmu="$xen_libs $libs_softmmu"
2848     fi
2849   fi
2850 fi
2851
2852 if test "$xen_pci_passthrough" != "no"; then
2853   if test "$xen" = "yes" && test "$linux" = "yes"; then
2854     xen_pci_passthrough=yes
2855   else
2856     if test "$xen_pci_passthrough" = "yes"; then
2857       error_exit "User requested feature Xen PCI Passthrough" \
2858           " but this feature requires /sys from Linux"
2859     fi
2860     xen_pci_passthrough=no
2861   fi
2862 fi
2863
2864 ##########################################
2865 # Windows Hypervisor Platform accelerator (WHPX) check
2866 if test "$whpx" != "no" ; then
2867     if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2868         whpx="yes"
2869     else
2870         if test "$whpx" = "yes"; then
2871             feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2872         fi
2873         whpx="no"
2874     fi
2875 fi
2876
2877 ##########################################
2878 # Sparse probe
2879 if test "$sparse" != "no" ; then
2880   if has cgcc; then
2881     sparse=yes
2882   else
2883     if test "$sparse" = "yes" ; then
2884       feature_not_found "sparse" "Install sparse binary"
2885     fi
2886     sparse=no
2887   fi
2888 fi
2889
2890 ##########################################
2891 # X11 probe
2892 if $pkg_config --exists "x11"; then
2893     have_x11=yes
2894     x11_cflags=$($pkg_config --cflags x11)
2895     x11_libs=$($pkg_config --libs x11)
2896 fi
2897
2898 ##########################################
2899 # GTK probe
2900
2901 if test "$gtk" != "no"; then
2902     gtkpackage="gtk+-3.0"
2903     gtkx11package="gtk+-x11-3.0"
2904     gtkversion="3.22.0"
2905     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2906         gtk_cflags=$($pkg_config --cflags $gtkpackage)
2907         gtk_libs=$($pkg_config --libs $gtkpackage)
2908         gtk_version=$($pkg_config --modversion $gtkpackage)
2909         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2910             need_x11=yes
2911             gtk_cflags="$gtk_cflags $x11_cflags"
2912             gtk_libs="$gtk_libs $x11_libs"
2913         fi
2914         gtk="yes"
2915     elif test "$gtk" = "yes"; then
2916         feature_not_found "gtk" "Install gtk3-devel"
2917     else
2918         gtk="no"
2919     fi
2920 fi
2921
2922
2923 ##########################################
2924 # GNUTLS probe
2925
2926 if test "$gnutls" != "no"; then
2927     pass="no"
2928     if $pkg_config --exists "gnutls >= 3.1.18"; then
2929         gnutls_cflags=$($pkg_config --cflags gnutls)
2930         gnutls_libs=$($pkg_config --libs gnutls)
2931         # Packaging for the static libraries is not always correct.
2932         # At least ubuntu 18.04 ships only shared libraries.
2933         write_c_skeleton
2934         if compile_prog "" "$gnutls_libs" ; then
2935             LIBS="$gnutls_libs $LIBS"
2936             QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2937             pass="yes"
2938         fi
2939     fi
2940     if test "$pass" = "no" && test "$gnutls" = "yes"; then
2941         feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2942     else
2943         gnutls="$pass"
2944     fi
2945 fi
2946
2947
2948 # If user didn't give a --disable/enable-gcrypt flag,
2949 # then mark as disabled if user requested nettle
2950 # explicitly
2951 if test -z "$gcrypt"
2952 then
2953     if test "$nettle" = "yes"
2954     then
2955         gcrypt="no"
2956     fi
2957 fi
2958
2959 # If user didn't give a --disable/enable-nettle flag,
2960 # then mark as disabled if user requested gcrypt
2961 # explicitly
2962 if test -z "$nettle"
2963 then
2964     if test "$gcrypt" = "yes"
2965     then
2966         nettle="no"
2967     fi
2968 fi
2969
2970 has_libgcrypt() {
2971     if ! has "libgcrypt-config"
2972     then
2973         return 1
2974     fi
2975
2976     if test -n "$cross_prefix"
2977     then
2978         host=$(libgcrypt-config --host)
2979         if test "$host-" != $cross_prefix
2980         then
2981             return 1
2982         fi
2983     fi
2984
2985     maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2986     min=`libgcrypt-config --version | awk -F . '{print $2}'`
2987
2988     if test $maj != 1 || test $min -lt 5
2989     then
2990        return 1
2991     fi
2992
2993     return 0
2994 }
2995
2996
2997 if test "$nettle" != "no"; then
2998     pass="no"
2999     if $pkg_config --exists "nettle >= 2.7.1"; then
3000         nettle_cflags=$($pkg_config --cflags nettle)
3001         nettle_libs=$($pkg_config --libs nettle)
3002         nettle_version=$($pkg_config --modversion nettle)
3003         # Link test to make sure the given libraries work (e.g for static).
3004         write_c_skeleton
3005         if compile_prog "" "$nettle_libs" ; then
3006             LIBS="$nettle_libs $LIBS"
3007             QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3008             if test -z "$gcrypt"; then
3009                gcrypt="no"
3010             fi
3011             pass="yes"
3012         fi
3013     fi
3014     if test "$pass" = "yes"
3015     then
3016         cat > $TMPC << EOF
3017 #include <nettle/xts.h>
3018 int main(void) {
3019   return 0;
3020 }
3021 EOF
3022         if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3023             nettle_xts=yes
3024             qemu_private_xts=no
3025         fi
3026     fi
3027     if test "$pass" = "no" && test "$nettle" = "yes"; then
3028         feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3029     else
3030         nettle="$pass"
3031     fi
3032 fi
3033
3034 if test "$gcrypt" != "no"; then
3035     pass="no"
3036     if has_libgcrypt; then
3037         gcrypt_cflags=$(libgcrypt-config --cflags)
3038         gcrypt_libs=$(libgcrypt-config --libs)
3039         # Debian has removed -lgpg-error from libgcrypt-config
3040         # as it "spreads unnecessary dependencies" which in
3041         # turn breaks static builds...
3042         if test "$static" = "yes"
3043         then
3044             gcrypt_libs="$gcrypt_libs -lgpg-error"
3045         fi
3046
3047         # Link test to make sure the given libraries work (e.g for static).
3048         write_c_skeleton
3049         if compile_prog "" "$gcrypt_libs" ; then
3050             LIBS="$gcrypt_libs $LIBS"
3051             QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3052             pass="yes"
3053         fi
3054     fi
3055     if test "$pass" = "yes"; then
3056         gcrypt="yes"
3057         cat > $TMPC << EOF
3058 #include <gcrypt.h>
3059 int main(void) {
3060   gcry_mac_hd_t handle;
3061   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3062                 GCRY_MAC_FLAG_SECURE, NULL);
3063   return 0;
3064 }
3065 EOF
3066         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3067             gcrypt_hmac=yes
3068         fi
3069         cat > $TMPC << EOF
3070 #include <gcrypt.h>
3071 int main(void) {
3072   gcry_cipher_hd_t handle;
3073   gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3074   return 0;
3075 }
3076 EOF
3077         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3078             gcrypt_xts=yes
3079             qemu_private_xts=no
3080         fi
3081     elif test "$gcrypt" = "yes"; then
3082         feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3083     else
3084         gcrypt="no"
3085     fi
3086 fi
3087
3088
3089 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3090 then
3091     error_exit "Only one of gcrypt & nettle can be enabled"
3092 fi
3093
3094 ##########################################
3095 # libtasn1 - only for the TLS creds/session test suite
3096
3097 tasn1=yes
3098 tasn1_cflags=""
3099 tasn1_libs=""
3100 if $pkg_config --exists "libtasn1"; then
3101     tasn1_cflags=$($pkg_config --cflags libtasn1)
3102     tasn1_libs=$($pkg_config --libs libtasn1)
3103 else
3104     tasn1=no
3105 fi
3106
3107
3108 ##########################################
3109 # PAM probe
3110
3111 if test "$auth_pam" != "no"; then
3112     cat > $TMPC <<EOF
3113 #include <security/pam_appl.h>
3114 #include <stdio.h>
3115 int main(void) {
3116    const char *service_name = "qemu";
3117    const char *user = "frank";
3118    const struct pam_conv pam_conv = { 0 };
3119    pam_handle_t *pamh = NULL;
3120    pam_start(service_name, user, &pam_conv, &pamh);
3121    return 0;
3122 }
3123 EOF
3124     if compile_prog "" "-lpam" ; then
3125         auth_pam=yes
3126     else
3127         if test "$auth_pam" = "yes"; then
3128             feature_not_found "PAM" "Install PAM development package"
3129         else
3130             auth_pam=no
3131         fi
3132     fi
3133 fi
3134
3135 ##########################################
3136 # getifaddrs (for tests/test-io-channel-socket )
3137
3138 have_ifaddrs_h=yes
3139 if ! check_include "ifaddrs.h" ; then
3140   have_ifaddrs_h=no
3141 fi
3142
3143 ##########################################
3144 # VTE probe
3145
3146 if test "$vte" != "no"; then
3147     vteminversion="0.32.0"
3148     if $pkg_config --exists "vte-2.91"; then
3149       vtepackage="vte-2.91"
3150     else
3151       vtepackage="vte-2.90"
3152     fi
3153     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3154         vte_cflags=$($pkg_config --cflags $vtepackage)
3155         vte_libs=$($pkg_config --libs $vtepackage)
3156         vteversion=$($pkg_config --modversion $vtepackage)
3157         vte="yes"
3158     elif test "$vte" = "yes"; then
3159         feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3160     else
3161         vte="no"
3162     fi
3163 fi
3164
3165 ##########################################
3166 # SDL probe
3167
3168 # Look for sdl configuration program (pkg-config or sdl2-config).  Try
3169 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3170
3171 sdl_probe ()
3172 {
3173   if $pkg_config sdl2 --exists; then
3174     sdlconfig="$pkg_config sdl2"
3175     sdlversion=$($sdlconfig --modversion 2>/dev/null)
3176   elif has "$sdl2_config"; then
3177     sdlconfig="$sdl2_config"
3178     sdlversion=$($sdlconfig --version)
3179   else
3180     if test "$sdl" = "yes" ; then
3181       feature_not_found "sdl" "Install SDL2-devel"
3182     fi
3183     sdl=no
3184     # no need to do the rest
3185     return
3186   fi
3187   if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3188     echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3189   fi
3190
3191   cat > $TMPC << EOF
3192 #include <SDL.h>
3193 #undef main /* We don't want SDL to override our main() */
3194 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3195 EOF
3196   sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3197   sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
3198   if test "$static" = "yes" ; then
3199     if $pkg_config sdl2 --exists; then
3200       sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3201     else
3202       sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3203     fi
3204   else
3205     sdl_libs=$($sdlconfig --libs 2>/dev/null)
3206   fi
3207   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3208     sdl=yes
3209
3210     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3211     if test "$sdl" = "yes" && test "$static" = "yes" ; then
3212       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3213          sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3214          sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3215       fi
3216       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3217         :
3218       else
3219         sdl=no
3220       fi
3221     fi # static link
3222   else # sdl not found
3223     if test "$sdl" = "yes" ; then
3224       feature_not_found "sdl" "Install SDL2 devel"
3225     fi
3226     sdl=no
3227   fi # sdl compile test
3228 }
3229
3230 sdl_image_probe ()
3231 {
3232     if test "$sdl_image" != "no" ; then
3233         if $pkg_config SDL2_image --exists; then
3234             if test "$static" = "yes"; then
3235                 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3236             else
3237                 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3238             fi
3239             sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3240             sdl_image=yes
3241
3242             sdl_cflags="$sdl_cflags $sdl_image_cflags"
3243             sdl_libs="$sdl_libs $sdl_image_libs"
3244         else
3245             if test "$sdl_image" = "yes" ; then
3246                 feature_not_found "sdl_image" "Install SDL Image devel"
3247             else
3248                 sdl_image=no
3249             fi
3250         fi
3251     fi
3252 }
3253
3254 if test "$sdl" != "no" ; then
3255   sdl_probe
3256 fi
3257
3258 if test "$sdl" = "yes" ; then
3259   sdl_image_probe
3260 else
3261   if test "$sdl_image" = "yes"; then
3262     echo "warning: SDL Image requested, but SDL is not available, disabling"
3263   fi
3264   sdl_image=no
3265 fi
3266
3267 if test "$sdl" = "yes" ; then
3268   cat > $TMPC <<EOF
3269 #include <SDL.h>
3270 #if defined(SDL_VIDEO_DRIVER_X11)
3271 #include <X11/XKBlib.h>
3272 #else
3273 #error No x11 support
3274 #endif
3275 int main(void) { return 0; }
3276 EOF
3277   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3278     need_x11=yes
3279     sdl_cflags="$sdl_cflags $x11_cflags"
3280     sdl_libs="$sdl_libs $x11_libs"
3281   fi
3282 fi
3283
3284 ##########################################
3285 # RDMA needs OpenFabrics libraries
3286 if test "$rdma" != "no" ; then
3287   cat > $TMPC <<EOF
3288 #include <rdma/rdma_cma.h>
3289 int main(void) { return 0; }
3290 EOF
3291   rdma_libs="-lrdmacm -libverbs -libumad"
3292   if compile_prog "" "$rdma_libs" ; then
3293     rdma="yes"
3294     libs_softmmu="$libs_softmmu $rdma_libs"
3295   else
3296     if test "$rdma" = "yes" ; then
3297         error_exit \
3298             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3299             " Your options:" \
3300             "  (1) Fast: Install infiniband packages (devel) from your distro." \
3301             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3302             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3303     fi
3304     rdma="no"
3305   fi
3306 fi
3307
3308 ##########################################
3309 # PVRDMA detection
3310
3311 cat > $TMPC <<EOF &&
3312 #include <sys/mman.h>
3313
3314 int
3315 main(void)
3316 {
3317     char buf = 0;
3318     void *addr = &buf;
3319     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3320
3321     return 0;
3322 }
3323 EOF
3324
3325 if test "$rdma" = "yes" ; then
3326     case "$pvrdma" in
3327     "")
3328         if compile_prog "" ""; then
3329             pvrdma="yes"
3330         else
3331             pvrdma="no"
3332         fi
3333         ;;
3334     "yes")
3335         if ! compile_prog "" ""; then
3336             error_exit "PVRDMA is not supported since mremap is not implemented"
3337         fi
3338         pvrdma="yes"
3339         ;;
3340     "no")
3341         pvrdma="no"
3342         ;;
3343     esac
3344 else
3345     if test "$pvrdma" = "yes" ; then
3346         error_exit "PVRDMA requires rdma suppport"
3347     fi
3348     pvrdma="no"
3349 fi
3350
3351 # Let's see if enhanced reg_mr is supported
3352 if test "$pvrdma" = "yes" ; then
3353
3354 cat > $TMPC <<EOF &&
3355 #include <infiniband/verbs.h>
3356
3357 int
3358 main(void)
3359 {
3360     struct ibv_mr *mr;
3361     struct ibv_pd *pd = NULL;
3362     size_t length = 10;
3363     uint64_t iova = 0;
3364     int access = 0;
3365     void *addr = NULL;
3366
3367     mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3368
3369     ibv_dereg_mr(mr);
3370
3371     return 0;
3372 }
3373 EOF
3374     if ! compile_prog "" "-libverbs"; then
3375         QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3376     fi
3377 fi
3378
3379 ##########################################
3380 # VNC SASL detection
3381 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3382   cat > $TMPC <<EOF
3383 #include <sasl/sasl.h>
3384 #include <stdio.h>
3385 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3386 EOF
3387   # Assuming Cyrus-SASL installed in /usr prefix
3388   # QEMU defines struct iovec in "qemu/osdep.h",
3389   # we don't want libsasl to redefine it in <sasl/sasl.h>.
3390   vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3391   vnc_sasl_libs="-lsasl2"
3392   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3393     vnc_sasl=yes
3394     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3395     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3396   else
3397     if test "$vnc_sasl" = "yes" ; then
3398       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3399     fi
3400     vnc_sasl=no
3401   fi
3402 fi
3403
3404 ##########################################
3405 # VNC JPEG detection
3406 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3407 cat > $TMPC <<EOF
3408 #include <stdio.h>
3409 #include <jpeglib.h>
3410 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3411 EOF
3412     vnc_jpeg_cflags=""
3413     vnc_jpeg_libs="-ljpeg"
3414   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3415     vnc_jpeg=yes
3416     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3417     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3418   else
3419     if test "$vnc_jpeg" = "yes" ; then
3420       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3421     fi
3422     vnc_jpeg=no
3423   fi
3424 fi
3425
3426 ##########################################
3427 # VNC PNG detection
3428 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3429 cat > $TMPC <<EOF
3430 //#include <stdio.h>
3431 #include <png.h>
3432 #include <stddef.h>
3433 int main(void) {
3434     png_structp png_ptr;
3435     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3436     return png_ptr != 0;
3437 }
3438 EOF
3439   if $pkg_config libpng --exists; then
3440     vnc_png_cflags=$($pkg_config libpng --cflags)
3441     vnc_png_libs=$($pkg_config libpng --libs)
3442   else
3443     vnc_png_cflags=""
3444     vnc_png_libs="-lpng"
3445   fi
3446   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3447     vnc_png=yes
3448     libs_softmmu="$vnc_png_libs $libs_softmmu"
3449     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3450   else
3451     if test "$vnc_png" = "yes" ; then
3452       feature_not_found "vnc-png" "Install libpng devel"
3453     fi
3454     vnc_png=no
3455   fi
3456 fi
3457
3458 ##########################################
3459 # xkbcommon probe
3460 if test "$xkbcommon" != "no" ; then
3461   if $pkg_config xkbcommon --exists; then
3462     xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3463     xkbcommon_libs=$($pkg_config xkbcommon --libs)
3464     xkbcommon=yes
3465   else
3466     if test "$xkbcommon" = "yes" ; then
3467       feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3468     fi
3469     xkbcommon=no
3470   fi
3471 fi
3472
3473
3474 ##########################################
3475 # xfsctl() probe, used for file-posix.c
3476 if test "$xfs" != "no" ; then
3477   cat > $TMPC << EOF
3478 #include <stddef.h>  /* NULL */
3479 #include <xfs/xfs.h>
3480 int main(void)
3481 {
3482     xfsctl(NULL, 0, 0, NULL);
3483     return 0;
3484 }
3485 EOF
3486   if compile_prog "" "" ; then
3487     xfs="yes"
3488   else
3489     if test "$xfs" = "yes" ; then
3490       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3491     fi
3492     xfs=no
3493   fi
3494 fi
3495
3496 ##########################################
3497 # vde libraries probe
3498 if test "$vde" != "no" ; then
3499   vde_libs="-lvdeplug"
3500   cat > $TMPC << EOF
3501 #include <libvdeplug.h>
3502 int main(void)
3503 {
3504     struct vde_open_args a = {0, 0, 0};
3505     char s[] = "";
3506     vde_open(s, s, &a);
3507     return 0;
3508 }
3509 EOF
3510   if compile_prog "" "$vde_libs" ; then
3511     vde=yes
3512   else
3513     if test "$vde" = "yes" ; then
3514       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3515     fi
3516     vde=no
3517   fi
3518 fi
3519
3520 ##########################################
3521 # netmap support probe
3522 # Apart from looking for netmap headers, we make sure that the host API version
3523 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3524 # a minor/major version number. Minor new features will be marked with values up
3525 # to 15, and if something happens that requires a change to the backend we will
3526 # move above 15, submit the backend fixes and modify this two bounds.
3527 if test "$netmap" != "no" ; then
3528   cat > $TMPC << EOF
3529 #include <inttypes.h>
3530 #include <net/if.h>
3531 #include <net/netmap.h>
3532 #include <net/netmap_user.h>
3533 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3534 #error
3535 #endif
3536 int main(void) { return 0; }
3537 EOF
3538   if compile_prog "" "" ; then
3539     netmap=yes
3540   else
3541     if test "$netmap" = "yes" ; then
3542       feature_not_found "netmap"
3543     fi
3544     netmap=no
3545   fi
3546 fi
3547
3548 ##########################################
3549 # libcap-ng library probe
3550 if test "$cap_ng" != "no" ; then
3551   cap_libs="-lcap-ng"
3552   cat > $TMPC << EOF
3553 #include <cap-ng.h>
3554 int main(void)
3555 {
3556     capng_capability_to_name(CAPNG_EFFECTIVE);
3557     return 0;
3558 }
3559 EOF
3560   if compile_prog "" "$cap_libs" ; then
3561     cap_ng=yes
3562     libs_tools="$cap_libs $libs_tools"
3563   else
3564     if test "$cap_ng" = "yes" ; then
3565       feature_not_found "cap_ng" "Install libcap-ng devel"
3566     fi
3567     cap_ng=no
3568   fi
3569 fi
3570
3571 ##########################################
3572 # Sound support libraries probe
3573
3574 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3575 for drv in $audio_drv_list; do
3576     case $drv in
3577     alsa | try-alsa)
3578     if $pkg_config alsa --exists; then
3579         alsa_libs=$($pkg_config alsa --libs)
3580         if test "$drv" = "try-alsa"; then
3581             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3582         fi
3583     else
3584         if test "$drv" = "try-alsa"; then
3585             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3586         else
3587             error_exit "$drv check failed" \
3588                 "Make sure to have the $drv libs and headers installed."
3589         fi
3590     fi
3591     ;;
3592
3593     pa | try-pa)
3594     if $pkg_config libpulse --exists; then
3595         pulse_libs=$($pkg_config libpulse --libs)
3596         if test "$drv" = "try-pa"; then
3597             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3598         fi
3599     else
3600         if test "$drv" = "try-pa"; then
3601             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3602         else
3603             error_exit "$drv check failed" \
3604                 "Make sure to have the $drv libs and headers installed."
3605         fi
3606     fi
3607     ;;
3608
3609     sdl)
3610     if test "$sdl" = "no"; then
3611         error_exit "sdl not found or disabled, can not use sdl audio driver"
3612     fi
3613     ;;
3614
3615     try-sdl)
3616     if test "$sdl" = "no"; then
3617         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3618     else
3619         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3620     fi
3621     ;;
3622
3623     coreaudio)
3624       coreaudio_libs="-framework CoreAudio"
3625     ;;
3626
3627     dsound)
3628       dsound_libs="-lole32 -ldxguid"
3629       audio_win_int="yes"
3630     ;;
3631
3632     oss)
3633       oss_libs="$oss_lib"
3634     ;;
3635
3636     jack | try-jack)
3637     if $pkg_config jack --exists; then
3638         jack_libs=$($pkg_config jack --libs)
3639         if test "$drv" = "try-jack"; then
3640             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3641         fi
3642     else
3643         if test "$drv" = "try-jack"; then
3644             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3645         else
3646             error_exit "$drv check failed" \
3647                 "Make sure to have the $drv libs and headers installed."
3648         fi
3649     fi
3650     ;;
3651
3652     *)
3653     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3654         error_exit "Unknown driver '$drv' selected" \
3655             "Possible drivers are: $audio_possible_drivers"
3656     }
3657     ;;
3658     esac
3659 done
3660
3661 ##########################################
3662 # BrlAPI probe
3663
3664 if test "$brlapi" != "no" ; then
3665   brlapi_libs="-lbrlapi"
3666   cat > $TMPC << EOF
3667 #include <brlapi.h>
3668 #include <stddef.h>
3669 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3670 EOF
3671   if compile_prog "" "$brlapi_libs" ; then
3672     brlapi=yes
3673   else
3674     if test "$brlapi" = "yes" ; then
3675       feature_not_found "brlapi" "Install brlapi devel"
3676     fi
3677     brlapi=no
3678   fi
3679 fi
3680
3681 ##########################################
3682 # iconv probe
3683 if test "$iconv" != "no" ; then
3684   cat > $TMPC << EOF
3685 #include <iconv.h>
3686 int main(void) {
3687   iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3688   return conv != (iconv_t) -1;
3689 }
3690 EOF
3691   iconv_prefix_list="/usr/local:/usr"
3692   iconv_lib_list=":-liconv"
3693   IFS=:
3694   for iconv_prefix in $iconv_prefix_list; do
3695     IFS=:
3696     iconv_cflags="-I$iconv_prefix/include"
3697     iconv_ldflags="-L$iconv_prefix/lib"
3698     for iconv_link in $iconv_lib_list; do
3699       unset IFS
3700       iconv_lib="$iconv_ldflags $iconv_link"
3701       echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3702       if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3703         iconv_found=yes
3704         break
3705       fi
3706     done
3707     if test "$iconv_found" = yes ; then
3708       break
3709     fi
3710   done
3711   if test "$iconv_found" = "yes" ; then
3712     iconv=yes
3713   else
3714     if test "$iconv" = "yes" ; then
3715       feature_not_found "iconv" "Install iconv devel"
3716     fi
3717     iconv=no
3718   fi
3719 fi
3720
3721 ##########################################
3722 # curses probe
3723 if test "$iconv" = "no" ; then
3724   # curses will need iconv
3725   curses=no
3726 fi
3727 if test "$curses" != "no" ; then
3728   if test "$mingw32" = "yes" ; then
3729     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3730     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3731   else
3732     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3733     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3734   fi
3735   curses_found=no
3736   cat > $TMPC << EOF
3737 #include <locale.h>
3738 #include <curses.h>
3739 #include <wchar.h>
3740 #include <langinfo.h>
3741 int main(void) {
3742   const char *codeset;
3743   wchar_t wch = L'w';
3744   setlocale(LC_ALL, "");
3745   resize_term(0, 0);
3746   addwstr(L"wide chars\n");
3747   addnwstr(&wch, 1);
3748   add_wch(WACS_DEGREE);
3749   codeset = nl_langinfo(CODESET);
3750   return codeset != 0;
3751 }
3752 EOF
3753   IFS=:
3754   for curses_inc in $curses_inc_list; do
3755     # Make sure we get the wide character prototypes
3756     curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3757     IFS=:
3758     for curses_lib in $curses_lib_list; do
3759       unset IFS
3760       if compile_prog "$curses_inc" "$curses_lib" ; then
3761         curses_found=yes
3762         break
3763       fi
3764     done
3765     if test "$curses_found" = yes ; then
3766       break
3767     fi
3768   done
3769   unset IFS
3770   if test "$curses_found" = "yes" ; then
3771     curses=yes
3772   else
3773     if test "$curses" = "yes" ; then
3774       feature_not_found "curses" "Install ncurses devel"
3775     fi
3776     curses=no
3777   fi
3778 fi
3779
3780 ##########################################
3781 # curl probe
3782 if test "$curl" != "no" ; then
3783   if $pkg_config libcurl --exists; then
3784     curlconfig="$pkg_config libcurl"
3785   else
3786     curlconfig=curl-config
3787   fi
3788   cat > $TMPC << EOF
3789 #include <curl/curl.h>
3790 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3791 EOF
3792   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3793   curl_libs=$($curlconfig --libs 2>/dev/null)
3794   if compile_prog "$curl_cflags" "$curl_libs" ; then
3795     curl=yes
3796   else
3797     if test "$curl" = "yes" ; then
3798       feature_not_found "curl" "Install libcurl devel"
3799     fi
3800     curl=no
3801   fi
3802 fi # test "$curl"
3803
3804 ##########################################
3805 # glib support probe
3806
3807 glib_req_ver=2.48
3808 glib_modules=gthread-2.0
3809 if test "$modules" = yes; then
3810     glib_modules="$glib_modules gmodule-export-2.0"
3811 fi
3812 if test "$plugins" = yes; then
3813     glib_modules="$glib_modules gmodule-2.0"
3814 fi
3815
3816 # This workaround is required due to a bug in pkg-config file for glib as it
3817 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3818
3819 if test "$static" = yes && test "$mingw32" = yes; then
3820     QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3821 fi
3822
3823 for i in $glib_modules; do
3824     if $pkg_config --atleast-version=$glib_req_ver $i; then
3825         glib_cflags=$($pkg_config --cflags $i)
3826         glib_libs=$($pkg_config --libs $i)
3827         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3828         LIBS="$glib_libs $LIBS"
3829         libs_qga="$glib_libs $libs_qga"
3830     else
3831         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3832     fi
3833 done
3834
3835 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3836     gio=yes
3837     gio_cflags=$($pkg_config --cflags gio-2.0)
3838     gio_libs=$($pkg_config --libs gio-2.0)
3839     gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3840     if [ ! -x "$gdbus_codegen" ]; then
3841         gdbus_codegen=
3842     fi
3843 else
3844     gio=no
3845 fi
3846
3847 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3848     gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3849     gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3850 fi
3851
3852 # Sanity check that the current size_t matches the
3853 # size that glib thinks it should be. This catches
3854 # problems on multi-arch where people try to build
3855 # 32-bit QEMU while pointing at 64-bit glib headers
3856 cat > $TMPC <<EOF
3857 #include <glib.h>
3858 #include <unistd.h>
3859
3860 #define QEMU_BUILD_BUG_ON(x) \
3861   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3862
3863 int main(void) {
3864    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3865    return 0;
3866 }
3867 EOF
3868
3869 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3870     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3871                "You probably need to set PKG_CONFIG_LIBDIR"\
3872                "to point to the right pkg-config files for your"\
3873                "build target"
3874 fi
3875
3876 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3877 cat > $TMPC << EOF
3878 #include <glib.h>
3879 int main(void) { return 0; }
3880 EOF
3881 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3882     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3883         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3884         CFLAGS="-Wno-unknown-attributes $CFLAGS"
3885     fi
3886 fi
3887
3888 # Silence clang warnings triggered by glib < 2.57.2
3889 cat > $TMPC << EOF
3890 #include <glib.h>
3891 typedef struct Foo {
3892     int i;
3893 } Foo;
3894 static void foo_free(Foo *f)
3895 {
3896     g_free(f);
3897 }
3898 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3899 int main(void) { return 0; }
3900 EOF
3901 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3902     if cc_has_warning_flag "-Wno-unused-function"; then
3903         glib_cflags="$glib_cflags -Wno-unused-function"
3904         CFLAGS="$CFLAGS -Wno-unused-function"
3905     fi
3906 fi
3907
3908 #########################################
3909 # zlib check
3910
3911 if test "$zlib" != "no" ; then
3912     if $pkg_config --exists zlib; then
3913         zlib_cflags=$($pkg_config --cflags zlib)
3914         zlib_libs=$($pkg_config --libs zlib)
3915         QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3916         LIBS="$zlib_libs $LIBS"
3917     else
3918         cat > $TMPC << EOF
3919 #include <zlib.h>
3920 int main(void) { zlibVersion(); return 0; }
3921 EOF
3922         if compile_prog "" "-lz" ; then
3923             LIBS="$LIBS -lz"
3924         else
3925             error_exit "zlib check failed" \
3926                 "Make sure to have the zlib libs and headers installed."
3927         fi
3928     fi
3929 fi
3930
3931 ##########################################
3932 # SHA command probe for modules
3933 if test "$modules" = yes; then
3934     shacmd_probe="sha1sum sha1 shasum"
3935     for c in $shacmd_probe; do
3936         if has $c; then
3937             shacmd="$c"
3938             break
3939         fi
3940     done
3941     if test "$shacmd" = ""; then
3942         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3943     fi
3944 fi
3945
3946 ##########################################
3947 # pixman support probe
3948
3949 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3950   pixman_cflags=
3951   pixman_libs=
3952 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3953   pixman_cflags=$($pkg_config --cflags pixman-1)
3954   pixman_libs=$($pkg_config --libs pixman-1)
3955 else
3956   error_exit "pixman >= 0.21.8 not present." \
3957       "Please install the pixman devel package."
3958 fi
3959
3960 ##########################################
3961 # libmpathpersist probe
3962
3963 if test "$mpath" != "no" ; then
3964   # probe for the new API
3965   cat > $TMPC <<EOF
3966 #include <libudev.h>
3967 #include <mpath_persist.h>
3968 unsigned mpath_mx_alloc_len = 1024;
3969 int logsink;
3970 static struct config *multipath_conf;
3971 extern struct udev *udev;
3972 extern struct config *get_multipath_config(void);
3973 extern void put_multipath_config(struct config *conf);
3974 struct udev *udev;
3975 struct config *get_multipath_config(void) { return multipath_conf; }
3976 void put_multipath_config(struct config *conf) { }
3977
3978 int main(void) {
3979     udev = udev_new();
3980     multipath_conf = mpath_lib_init();
3981     return 0;
3982 }
3983 EOF
3984   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3985     mpathpersist=yes
3986     mpathpersist_new_api=yes
3987   else
3988     # probe for the old API
3989     cat > $TMPC <<EOF
3990 #include <libudev.h>
3991 #include <mpath_persist.h>
3992 unsigned mpath_mx_alloc_len = 1024;
3993 int logsink;
3994 int main(void) {
3995     struct udev *udev = udev_new();
3996     mpath_lib_init(udev);
3997     return 0;
3998 }
3999 EOF
4000     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4001       mpathpersist=yes
4002       mpathpersist_new_api=no
4003     else
4004       mpathpersist=no
4005     fi
4006   fi
4007 else
4008   mpathpersist=no
4009 fi
4010
4011 ##########################################
4012 # pthread probe
4013 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4014
4015 pthread=no
4016 cat > $TMPC << EOF
4017 #include <pthread.h>
4018 static void *f(void *p) { return NULL; }
4019 int main(void) {
4020   pthread_t thread;
4021   pthread_create(&thread, 0, f, 0);
4022   return 0;
4023 }
4024 EOF
4025 if compile_prog "" "" ; then
4026   pthread=yes
4027 else
4028   for pthread_lib in $PTHREADLIBS_LIST; do
4029     if compile_prog "" "$pthread_lib" ; then
4030       pthread=yes
4031       found=no
4032       for lib_entry in $LIBS; do
4033         if test "$lib_entry" = "$pthread_lib"; then
4034           found=yes
4035           break
4036         fi
4037       done
4038       if test "$found" = "no"; then
4039         LIBS="$pthread_lib $LIBS"
4040         libs_qga="$pthread_lib $libs_qga"
4041       fi
4042       PTHREAD_LIB="$pthread_lib"
4043       break
4044     fi
4045   done
4046 fi
4047
4048 if test "$mingw32" != yes && test "$pthread" = no; then
4049   error_exit "pthread check failed" \
4050       "Make sure to have the pthread libs and headers installed."
4051 fi
4052
4053 # check for pthread_setname_np with thread id
4054 pthread_setname_np_w_tid=no
4055 cat > $TMPC << EOF
4056 #include <pthread.h>
4057
4058 static void *f(void *p) { return NULL; }
4059 int main(void)
4060 {
4061     pthread_t thread;
4062     pthread_create(&thread, 0, f, 0);
4063     pthread_setname_np(thread, "QEMU");
4064     return 0;
4065 }
4066 EOF
4067 if compile_prog "" "$pthread_lib" ; then
4068   pthread_setname_np_w_tid=yes
4069 fi
4070
4071 # check for pthread_setname_np without thread id
4072 pthread_setname_np_wo_tid=no
4073 cat > $TMPC << EOF
4074 #include <pthread.h>
4075
4076 static void *f(void *p) { pthread_setname_np("QEMU"); }
4077 int main(void)
4078 {
4079     pthread_t thread;
4080     pthread_create(&thread, 0, f, 0);
4081     return 0;
4082 }
4083 EOF
4084 if compile_prog "" "$pthread_lib" ; then
4085   pthread_setname_np_wo_tid=yes
4086 fi
4087
4088 ##########################################
4089 # rbd probe
4090 if test "$rbd" != "no" ; then
4091   cat > $TMPC <<EOF
4092 #include <stdio.h>
4093 #include <rbd/librbd.h>
4094 int main(void) {
4095     rados_t cluster;
4096     rados_create(&cluster, NULL);
4097     return 0;
4098 }
4099 EOF
4100   rbd_libs="-lrbd -lrados"
4101   if compile_prog "" "$rbd_libs" ; then
4102     rbd=yes
4103   else
4104     if test "$rbd" = "yes" ; then
4105       feature_not_found "rados block device" "Install librbd/ceph devel"
4106     fi
4107     rbd=no
4108   fi
4109 fi
4110
4111 ##########################################
4112 # libssh probe
4113 if test "$libssh" != "no" ; then
4114   if $pkg_config --exists libssh; then
4115     libssh_cflags=$($pkg_config libssh --cflags)
4116     libssh_libs=$($pkg_config libssh --libs)
4117     libssh=yes
4118   else
4119     if test "$libssh" = "yes" ; then
4120       error_exit "libssh required for --enable-libssh"
4121     fi
4122     libssh=no
4123   fi
4124 fi
4125
4126 ##########################################
4127 # Check for libssh 0.8
4128 # This is done like this instead of using the LIBSSH_VERSION_* and
4129 # SSH_VERSION_* macros because some distributions in the past shipped
4130 # snapshots of the future 0.8 from Git, and those snapshots did not
4131 # have updated version numbers (still referring to 0.7.0).
4132
4133 if test "$libssh" = "yes"; then
4134   cat > $TMPC <<EOF
4135 #include <libssh/libssh.h>
4136 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4137 EOF
4138   if compile_prog "$libssh_cflags" "$libssh_libs"; then
4139     libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4140   fi
4141 fi
4142
4143 ##########################################
4144 # linux-aio probe
4145
4146 if test "$linux_aio" != "no" ; then
4147   cat > $TMPC <<EOF
4148 #include <libaio.h>
4149 #include <sys/eventfd.h>
4150 #include <stddef.h>
4151 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4152 EOF
4153   if compile_prog "" "-laio" ; then
4154     linux_aio=yes
4155   else
4156     if test "$linux_aio" = "yes" ; then
4157       feature_not_found "linux AIO" "Install libaio devel"
4158     fi
4159     linux_aio=no
4160   fi
4161 fi
4162 ##########################################
4163 # linux-io-uring probe
4164
4165 if test "$linux_io_uring" != "no" ; then
4166   if $pkg_config liburing; then
4167     linux_io_uring_cflags=$($pkg_config --cflags liburing)
4168     linux_io_uring_libs=$($pkg_config --libs liburing)
4169     linux_io_uring=yes
4170
4171     # io_uring is used in libqemuutil.a where per-file -libs variables are not
4172     # seen by programs linking the archive.  It's not ideal, but just add the
4173     # library dependency globally.
4174     LIBS="$linux_io_uring_libs $LIBS"
4175   else
4176     if test "$linux_io_uring" = "yes" ; then
4177       feature_not_found "linux io_uring" "Install liburing devel"
4178     fi
4179     linux_io_uring=no
4180   fi
4181 fi
4182
4183 ##########################################
4184 # TPM emulation is only on POSIX
4185
4186 if test "$tpm" = ""; then
4187   if test "$mingw32" = "yes"; then
4188     tpm=no
4189   else
4190     tpm=yes
4191   fi
4192 elif test "$tpm" = "yes"; then
4193   if test "$mingw32" = "yes" ; then
4194     error_exit "TPM emulation only available on POSIX systems"
4195   fi
4196 fi
4197
4198 ##########################################
4199 # attr probe
4200
4201 if test "$attr" != "no" ; then
4202   cat > $TMPC <<EOF
4203 #include <stdio.h>
4204 #include <sys/types.h>
4205 #ifdef CONFIG_LIBATTR
4206 #include <attr/xattr.h>
4207 #else
4208 #include <sys/xattr.h>
4209 #endif
4210 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4211 EOF
4212   if compile_prog "" "" ; then
4213     attr=yes
4214   # Older distros have <attr/xattr.h>, and need -lattr:
4215   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4216     attr=yes
4217     LIBS="-lattr $LIBS"
4218     libattr=yes
4219   else
4220     if test "$attr" = "yes" ; then
4221       feature_not_found "ATTR" "Install libc6 or libattr devel"
4222     fi
4223     attr=no
4224   fi
4225 fi
4226
4227 ##########################################
4228 # iovec probe
4229 cat > $TMPC <<EOF
4230 #include <sys/types.h>
4231 #include <sys/uio.h>
4232 #include <unistd.h>
4233 int main(void) { return sizeof(struct iovec); }
4234 EOF
4235 iovec=no
4236 if compile_prog "" "" ; then
4237   iovec=yes
4238 fi
4239
4240 ##########################################
4241 # preadv probe
4242 cat > $TMPC <<EOF
4243 #include <sys/types.h>
4244 #include <sys/uio.h>
4245 #include <unistd.h>
4246 int main(void) { return preadv(0, 0, 0, 0); }
4247 EOF
4248 preadv=no
4249 if compile_prog "" "" ; then
4250   preadv=yes
4251 fi
4252
4253 ##########################################
4254 # fdt probe
4255 # fdt support is mandatory for at least some target architectures,
4256 # so insist on it if we're building those system emulators.
4257 fdt_required=no
4258 for target in $target_list; do
4259   case $target in
4260     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4261       fdt_required=yes
4262     ;;
4263   esac
4264 done
4265
4266 if test "$fdt_required" = "yes"; then
4267   if test "$fdt" = "no"; then
4268     error_exit "fdt disabled but some requested targets require it." \
4269       "You can turn off fdt only if you also disable all the system emulation" \
4270       "targets which need it (by specifying a cut down --target-list)."
4271   fi
4272   fdt=yes
4273 elif test "$fdt" != "yes" ; then
4274   fdt=no
4275 fi
4276
4277 # fdt is only required when building softmmu targets
4278 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4279     fdt="no"
4280 fi
4281
4282 if test "$fdt" != "no" ; then
4283   fdt_libs="-lfdt"
4284   # explicitly check for libfdt_env.h as it is missing in some stable installs
4285   # and test for required functions to make sure we are on a version >= 1.4.2
4286   cat > $TMPC << EOF
4287 #include <libfdt.h>
4288 #include <libfdt_env.h>
4289 int main(void) { fdt_check_full(NULL, 0); return 0; }
4290 EOF
4291   if compile_prog "" "$fdt_libs" ; then
4292     # system DTC is good - use it
4293     fdt=system
4294   else
4295       # have GIT checkout, so activate dtc submodule
4296       if test -e "${source_path}/.git" ; then
4297           git_submodules="${git_submodules} dtc"
4298       fi
4299       if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4300           fdt=git
4301           mkdir -p dtc
4302           if [ "$pwd_is_source_path" != "y" ] ; then
4303               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4304               symlink "$source_path/dtc/scripts" "dtc/scripts"
4305           fi
4306           fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4307           fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4308           fdt_libs="$fdt_libs"
4309       elif test "$fdt" = "yes" ; then
4310           # Not a git build & no libfdt found, prompt for system install
4311           error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4312                      "Please install the DTC (libfdt) devel package"
4313       else
4314           # don't have and don't want
4315           fdt_libs=
4316           fdt=no
4317       fi
4318   fi
4319 fi
4320
4321 libs_softmmu="$libs_softmmu $fdt_libs"
4322
4323 ##########################################
4324 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4325
4326 gbm="no"
4327 if $pkg_config gbm; then
4328     gbm_cflags="$($pkg_config --cflags gbm)"
4329     gbm_libs="$($pkg_config --libs gbm)"
4330     gbm="yes"
4331 fi
4332
4333 if test "$opengl" != "no" ; then
4334   opengl_pkgs="epoxy gbm"
4335   if $pkg_config $opengl_pkgs; then
4336     opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4337     opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4338     opengl=yes
4339     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4340         gtk_gl="yes"
4341     fi
4342     QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4343   else
4344     if test "$opengl" = "yes" ; then
4345       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4346     fi
4347     opengl_cflags=""
4348     opengl_libs=""
4349     opengl=no
4350   fi
4351 fi
4352
4353 if test "$opengl" = "yes"; then
4354   cat > $TMPC << EOF
4355 #include <epoxy/egl.h>
4356 #ifndef EGL_MESA_image_dma_buf_export
4357 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4358 #endif
4359 int main(void) { return 0; }
4360 EOF
4361   if compile_prog "" "" ; then
4362     opengl_dmabuf=yes
4363   fi
4364 fi
4365
4366 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4367   for target in $target_list; do
4368     case $target in
4369       lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4370         need_x11=yes
4371       ;;
4372     esac
4373   done
4374 fi
4375
4376 ##########################################
4377 # libxml2 probe
4378 if test "$libxml2" != "no" ; then
4379     if $pkg_config --exists libxml-2.0; then
4380         libxml2="yes"
4381         libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4382         libxml2_libs=$($pkg_config --libs libxml-2.0)
4383     else
4384         if test "$libxml2" = "yes"; then
4385             feature_not_found "libxml2" "Install libxml2 devel"
4386         fi
4387         libxml2="no"
4388     fi
4389 fi
4390
4391 ##########################################
4392 # glusterfs probe
4393 if test "$glusterfs" != "no" ; then
4394   if $pkg_config --atleast-version=3 glusterfs-api; then
4395     glusterfs="yes"
4396     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4397     glusterfs_libs=$($pkg_config --libs glusterfs-api)
4398     if $pkg_config --atleast-version=4 glusterfs-api; then
4399       glusterfs_xlator_opt="yes"
4400     fi
4401     if $pkg_config --atleast-version=5 glusterfs-api; then
4402       glusterfs_discard="yes"
4403     fi
4404     if $pkg_config --atleast-version=6 glusterfs-api; then
4405       glusterfs_fallocate="yes"
4406       glusterfs_zerofill="yes"
4407     fi
4408     cat > $TMPC << EOF
4409 #include <glusterfs/api/glfs.h>
4410
4411 int
4412 main(void)
4413 {
4414         /* new glfs_ftruncate() passes two additional args */
4415         return glfs_ftruncate(NULL, 0, NULL, NULL);
4416 }
4417 EOF
4418     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4419       glusterfs_ftruncate_has_stat="yes"
4420     fi
4421     cat > $TMPC << EOF
4422 #include <glusterfs/api/glfs.h>
4423
4424 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4425 static void
4426 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4427 {}
4428
4429 int
4430 main(void)
4431 {
4432         glfs_io_cbk iocb = &glusterfs_iocb;
4433         iocb(NULL, 0 , NULL, NULL, NULL);
4434         return 0;
4435 }
4436 EOF
4437     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4438       glusterfs_iocb_has_stat="yes"
4439     fi
4440   else
4441     if test "$glusterfs" = "yes" ; then
4442       feature_not_found "GlusterFS backend support" \
4443           "Install glusterfs-api devel >= 3"
4444     fi
4445     glusterfs="no"
4446   fi
4447 fi
4448
4449 # Check for inotify functions when we are building linux-user
4450 # emulator.  This is done because older glibc versions don't
4451 # have syscall stubs for these implemented.  In that case we
4452 # don't provide them even if kernel supports them.
4453 #
4454 inotify=no
4455 cat > $TMPC << EOF
4456 #include <sys/inotify.h>
4457
4458 int
4459 main(void)
4460 {
4461         /* try to start inotify */
4462         return inotify_init();
4463 }
4464 EOF
4465 if compile_prog "" "" ; then
4466   inotify=yes
4467 fi
4468
4469 inotify1=no
4470 cat > $TMPC << EOF
4471 #include <sys/inotify.h>
4472
4473 int
4474 main(void)
4475 {
4476     /* try to start inotify */
4477     return inotify_init1(0);
4478 }
4479 EOF
4480 if compile_prog "" "" ; then
4481   inotify1=yes
4482 fi
4483
4484 # check if pipe2 is there
4485 pipe2=no
4486 cat > $TMPC << EOF
4487 #include <unistd.h>
4488 #include <fcntl.h>
4489
4490 int main(void)
4491 {
4492     int pipefd[2];
4493     return pipe2(pipefd, O_CLOEXEC);
4494 }
4495 EOF
4496 if compile_prog "" "" ; then
4497   pipe2=yes
4498 fi
4499
4500 # check if accept4 is there
4501 accept4=no
4502 cat > $TMPC << EOF
4503 #include <sys/socket.h>
4504 #include <stddef.h>
4505
4506 int main(void)
4507 {
4508     accept4(0, NULL, NULL, SOCK_CLOEXEC);
4509     return 0;
4510 }
4511 EOF
4512 if compile_prog "" "" ; then
4513   accept4=yes
4514 fi
4515
4516 # check if tee/splice is there. vmsplice was added same time.
4517 splice=no
4518 cat > $TMPC << EOF
4519 #include <unistd.h>
4520 #include <fcntl.h>
4521 #include <limits.h>
4522
4523 int main(void)
4524 {
4525     int len, fd = 0;
4526     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4527     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4528     return 0;
4529 }
4530 EOF
4531 if compile_prog "" "" ; then
4532   splice=yes
4533 fi
4534
4535 ##########################################
4536 # libnuma probe
4537
4538 if test "$numa" != "no" ; then
4539   cat > $TMPC << EOF
4540 #include <numa.h>
4541 int main(void) { return numa_available(); }
4542 EOF
4543
4544   if compile_prog "" "-lnuma" ; then
4545     numa=yes
4546     libs_softmmu="-lnuma $libs_softmmu"
4547   else
4548     if test "$numa" = "yes" ; then
4549       feature_not_found "numa" "install numactl devel"
4550     fi
4551     numa=no
4552   fi
4553 fi
4554
4555 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4556     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4557     exit 1
4558 fi
4559
4560 # Even if malloc_trim() is available, these non-libc memory allocators
4561 # do not support it.
4562 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4563     if test "$malloc_trim" = "yes" ; then
4564         echo "Disabling malloc_trim with non-libc memory allocator"
4565     fi
4566     malloc_trim="no"
4567 fi
4568
4569 #######################################
4570 # malloc_trim
4571
4572 if test "$malloc_trim" != "no" ; then
4573     cat > $TMPC << EOF
4574 #include <malloc.h>
4575 int main(void) { malloc_trim(0); return 0; }
4576 EOF
4577     if compile_prog "" "" ; then
4578         malloc_trim="yes"
4579     else
4580         malloc_trim="no"
4581     fi
4582 fi
4583
4584 ##########################################
4585 # tcmalloc probe
4586
4587 if test "$tcmalloc" = "yes" ; then
4588   cat > $TMPC << EOF
4589 #include <stdlib.h>
4590 int main(void) { malloc(1); return 0; }
4591 EOF
4592
4593   if compile_prog "" "-ltcmalloc" ; then
4594     LIBS="-ltcmalloc $LIBS"
4595   else
4596     feature_not_found "tcmalloc" "install gperftools devel"
4597   fi
4598 fi
4599
4600 ##########################################
4601 # jemalloc probe
4602
4603 if test "$jemalloc" = "yes" ; then
4604   cat > $TMPC << EOF
4605 #include <stdlib.h>
4606 int main(void) { malloc(1); return 0; }
4607 EOF
4608
4609   if compile_prog "" "-ljemalloc" ; then
4610     LIBS="-ljemalloc $LIBS"
4611   else
4612     feature_not_found "jemalloc" "install jemalloc devel"
4613   fi
4614 fi
4615
4616 ##########################################
4617 # signalfd probe
4618 signalfd="no"
4619 cat > $TMPC << EOF
4620 #include <unistd.h>
4621 #include <sys/syscall.h>
4622 #include <signal.h>
4623 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4624 EOF
4625
4626 if compile_prog "" "" ; then
4627   signalfd=yes
4628 fi
4629
4630 # check if optreset global is declared by <getopt.h>
4631 optreset="no"
4632 cat > $TMPC << EOF
4633 #include <getopt.h>
4634 int main(void) { return optreset; }
4635 EOF
4636
4637 if compile_prog "" "" ; then
4638   optreset=yes
4639 fi
4640
4641 # check if eventfd is supported
4642 eventfd=no
4643 cat > $TMPC << EOF
4644 #include <sys/eventfd.h>
4645
4646 int main(void)
4647 {
4648     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4649 }
4650 EOF
4651 if compile_prog "" "" ; then
4652   eventfd=yes
4653 fi
4654
4655 # check if memfd is supported
4656 memfd=no
4657 cat > $TMPC << EOF
4658 #include <sys/mman.h>
4659
4660 int main(void)
4661 {
4662     return memfd_create("foo", MFD_ALLOW_SEALING);
4663 }
4664 EOF
4665 if compile_prog "" "" ; then
4666   memfd=yes
4667 fi
4668
4669 # check for usbfs
4670 have_usbfs=no
4671 if test "$linux_user" = "yes"; then
4672   cat > $TMPC << EOF
4673 #include <linux/usbdevice_fs.h>
4674
4675 #ifndef USBDEVFS_GET_CAPABILITIES
4676 #error "USBDEVFS_GET_CAPABILITIES undefined"
4677 #endif
4678
4679 #ifndef USBDEVFS_DISCONNECT_CLAIM
4680 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4681 #endif
4682
4683 int main(void)
4684 {
4685     return 0;
4686 }
4687 EOF
4688   if compile_prog "" ""; then
4689     have_usbfs=yes
4690   fi
4691 fi
4692
4693 # check for fallocate
4694 fallocate=no
4695 cat > $TMPC << EOF
4696 #include <fcntl.h>
4697
4698 int main(void)
4699 {
4700     fallocate(0, 0, 0, 0);
4701     return 0;
4702 }
4703 EOF
4704 if compile_prog "" "" ; then
4705   fallocate=yes
4706 fi
4707
4708 # check for fallocate hole punching
4709 fallocate_punch_hole=no
4710 cat > $TMPC << EOF
4711 #include <fcntl.h>
4712 #include <linux/falloc.h>
4713
4714 int main(void)
4715 {
4716     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4717     return 0;
4718 }
4719 EOF
4720 if compile_prog "" "" ; then
4721   fallocate_punch_hole=yes
4722 fi
4723
4724 # check that fallocate supports range zeroing inside the file
4725 fallocate_zero_range=no
4726 cat > $TMPC << EOF
4727 #include <fcntl.h>
4728 #include <linux/falloc.h>
4729
4730 int main(void)
4731 {
4732     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4733     return 0;
4734 }
4735 EOF
4736 if compile_prog "" "" ; then
4737   fallocate_zero_range=yes
4738 fi
4739
4740 # check for posix_fallocate
4741 posix_fallocate=no
4742 cat > $TMPC << EOF
4743 #include <fcntl.h>
4744
4745 int main(void)
4746 {
4747     posix_fallocate(0, 0, 0);
4748     return 0;
4749 }
4750 EOF
4751 if compile_prog "" "" ; then
4752     posix_fallocate=yes
4753 fi
4754
4755 # check for sync_file_range
4756 sync_file_range=no
4757 cat > $TMPC << EOF
4758 #include <fcntl.h>
4759
4760 int main(void)
4761 {
4762     sync_file_range(0, 0, 0, 0);
4763     return 0;
4764 }
4765 EOF
4766 if compile_prog "" "" ; then
4767   sync_file_range=yes
4768 fi
4769
4770 # check for linux/fiemap.h and FS_IOC_FIEMAP
4771 fiemap=no
4772 cat > $TMPC << EOF
4773 #include <sys/ioctl.h>
4774 #include <linux/fs.h>
4775 #include <linux/fiemap.h>
4776
4777 int main(void)
4778 {
4779     ioctl(0, FS_IOC_FIEMAP, 0);
4780     return 0;
4781 }
4782 EOF
4783 if compile_prog "" "" ; then
4784   fiemap=yes
4785 fi
4786
4787 # check for dup3
4788 dup3=no
4789 cat > $TMPC << EOF
4790 #include <unistd.h>
4791
4792 int main(void)
4793 {
4794     dup3(0, 0, 0);
4795     return 0;
4796 }
4797 EOF
4798 if compile_prog "" "" ; then
4799   dup3=yes
4800 fi
4801
4802 # check for ppoll support
4803 ppoll=no
4804 cat > $TMPC << EOF
4805 #include <poll.h>
4806
4807 int main(void)
4808 {
4809     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4810     ppoll(&pfd, 1, 0, 0);
4811     return 0;
4812 }
4813 EOF
4814 if compile_prog "" "" ; then
4815   ppoll=yes
4816 fi
4817
4818 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4819 prctl_pr_set_timerslack=no
4820 cat > $TMPC << EOF
4821 #include <sys/prctl.h>
4822
4823 int main(void)
4824 {
4825     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4826     return 0;
4827 }
4828 EOF
4829 if compile_prog "" "" ; then
4830   prctl_pr_set_timerslack=yes
4831 fi
4832
4833 # check for epoll support
4834 epoll=no
4835 cat > $TMPC << EOF
4836 #include <sys/epoll.h>
4837
4838 int main(void)
4839 {
4840     epoll_create(0);
4841     return 0;
4842 }
4843 EOF
4844 if compile_prog "" "" ; then
4845   epoll=yes
4846 fi
4847
4848 # epoll_create1 is a later addition
4849 # so we must check separately for its presence
4850 epoll_create1=no
4851 cat > $TMPC << EOF
4852 #include <sys/epoll.h>
4853
4854 int main(void)
4855 {
4856     /* Note that we use epoll_create1 as a value, not as
4857      * a function being called. This is necessary so that on
4858      * old SPARC glibc versions where the function was present in
4859      * the library but not declared in the header file we will
4860      * fail the configure check. (Otherwise we will get a compiler
4861      * warning but not an error, and will proceed to fail the
4862      * qemu compile where we compile with -Werror.)
4863      */
4864     return (int)(uintptr_t)&epoll_create1;
4865 }
4866 EOF
4867 if compile_prog "" "" ; then
4868   epoll_create1=yes
4869 fi
4870
4871 # check for sendfile support
4872 sendfile=no
4873 cat > $TMPC << EOF
4874 #include <sys/sendfile.h>
4875
4876 int main(void)
4877 {
4878     return sendfile(0, 0, 0, 0);
4879 }
4880 EOF
4881 if compile_prog "" "" ; then
4882   sendfile=yes
4883 fi
4884
4885 # check for timerfd support (glibc 2.8 and newer)
4886 timerfd=no
4887 cat > $TMPC << EOF
4888 #include <sys/timerfd.h>
4889
4890 int main(void)
4891 {
4892     return(timerfd_create(CLOCK_REALTIME, 0));
4893 }
4894 EOF
4895 if compile_prog "" "" ; then
4896   timerfd=yes
4897 fi
4898
4899 # check for setns and unshare support
4900 setns=no
4901 cat > $TMPC << EOF
4902 #include <sched.h>
4903
4904 int main(void)
4905 {
4906     int ret;
4907     ret = setns(0, 0);
4908     ret = unshare(0);
4909     return ret;
4910 }
4911 EOF
4912 if compile_prog "" "" ; then
4913   setns=yes
4914 fi
4915
4916 # clock_adjtime probe
4917 clock_adjtime=no
4918 cat > $TMPC <<EOF
4919 #include <time.h>
4920
4921 int main(void)
4922 {
4923     return clock_adjtime(0, 0);
4924 }
4925 EOF
4926 clock_adjtime=no
4927 if compile_prog "" "" ; then
4928   clock_adjtime=yes
4929 fi
4930
4931 # syncfs probe
4932 syncfs=no
4933 cat > $TMPC <<EOF
4934 #include <unistd.h>
4935
4936 int main(void)
4937 {
4938     return syncfs(0);
4939 }
4940 EOF
4941 syncfs=no
4942 if compile_prog "" "" ; then
4943   syncfs=yes
4944 fi
4945
4946 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4947 kcov=no
4948 if check_include sys/kcov.h ; then
4949     kcov=yes
4950 fi
4951
4952 # If we're making warnings fatal, apply this to Sphinx runs as well
4953 sphinx_werror=""
4954 if test "$werror" = "yes"; then
4955     sphinx_werror="-W"
4956 fi
4957
4958 # Check we have a new enough version of sphinx-build
4959 has_sphinx_build() {
4960     # This is a bit awkward but works: create a trivial document and
4961     # try to run it with our configuration file (which enforces a
4962     # version requirement). This will fail if either
4963     # sphinx-build doesn't exist at all or if it is too old.
4964     mkdir -p "$TMPDIR1/sphinx"
4965     touch "$TMPDIR1/sphinx/index.rst"
4966     "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4967                     -b html "$TMPDIR1/sphinx" \
4968                     "$TMPDIR1/sphinx/out"  >> config.log 2>&1
4969 }
4970
4971 # Check if tools are available to build documentation.
4972 if test "$docs" != "no" ; then
4973   if has_sphinx_build; then
4974     sphinx_ok=yes
4975   else
4976     sphinx_ok=no
4977   fi
4978   if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
4979     docs=yes
4980   else
4981     if test "$docs" = "yes" ; then
4982       if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4983         echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4984       fi
4985       feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
4986     fi
4987     docs=no
4988   fi
4989 fi
4990
4991 # Search for bswap_32 function
4992 byteswap_h=no
4993 cat > $TMPC << EOF
4994 #include <byteswap.h>
4995 int main(void) { return bswap_32(0); }
4996 EOF
4997 if compile_prog "" "" ; then
4998   byteswap_h=yes
4999 fi
5000
5001 # Search for bswap32 function
5002 bswap_h=no
5003 cat > $TMPC << EOF
5004 #include <sys/endian.h>
5005 #include <sys/types.h>
5006 #include <machine/bswap.h>
5007 int main(void) { return bswap32(0); }
5008 EOF
5009 if compile_prog "" "" ; then
5010   bswap_h=yes
5011 fi
5012
5013 ##########################################
5014 # Do we have libiscsi >= 1.9.0
5015 if test "$libiscsi" != "no" ; then
5016   if $pkg_config --atleast-version=1.9.0 libiscsi; then
5017     libiscsi="yes"
5018     libiscsi_cflags=$($pkg_config --cflags libiscsi)
5019     libiscsi_libs=$($pkg_config --libs libiscsi)
5020   else
5021     if test "$libiscsi" = "yes" ; then
5022       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5023     fi
5024     libiscsi="no"
5025   fi
5026 fi
5027
5028 ##########################################
5029 # Do we need libm
5030 cat > $TMPC << EOF
5031 #include <math.h>
5032 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5033 EOF
5034 if compile_prog "" "" ; then
5035   :
5036 elif compile_prog "" "-lm" ; then
5037   LIBS="-lm $LIBS"
5038   libs_qga="-lm $libs_qga"
5039 else
5040   error_exit "libm check failed"
5041 fi
5042
5043 ##########################################
5044 # Do we need librt
5045 # uClibc provides 2 versions of clock_gettime(), one with realtime
5046 # support and one without. This means that the clock_gettime() don't
5047 # need -lrt. We still need it for timer_create() so we check for this
5048 # function in addition.
5049 cat > $TMPC <<EOF
5050 #include <signal.h>
5051 #include <time.h>
5052 int main(void) {
5053   timer_create(CLOCK_REALTIME, NULL, NULL);
5054   return clock_gettime(CLOCK_REALTIME, NULL);
5055 }
5056 EOF
5057
5058 if compile_prog "" "" ; then
5059   :
5060 # we need pthread for static linking. use previous pthread test result
5061 elif compile_prog "" "$pthread_lib -lrt" ; then
5062   LIBS="$LIBS -lrt"
5063   libs_qga="$libs_qga -lrt"
5064 fi
5065
5066 # Check whether we need to link libutil for openpty()
5067 cat > $TMPC << EOF
5068 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5069 int main(void) { return openpty(0, 0, 0, 0, 0); }
5070 EOF
5071
5072 if ! compile_prog "" "" ; then
5073   if compile_prog "" "-lutil" ; then
5074     libs_softmmu="-lutil $libs_softmmu"
5075     libs_tools="-lutil $libs_tools"
5076   fi
5077 fi
5078
5079 ##########################################
5080 # spice probe
5081 if test "$spice" != "no" ; then
5082   cat > $TMPC << EOF
5083 #include <spice.h>
5084 int main(void) { spice_server_new(); return 0; }
5085 EOF
5086   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5087   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5088   if $pkg_config --atleast-version=0.12.5 spice-server && \
5089      $pkg_config --atleast-version=0.12.3 spice-protocol && \
5090      compile_prog "$spice_cflags" "$spice_libs" ; then
5091     spice="yes"
5092     libs_softmmu="$libs_softmmu $spice_libs"
5093     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5094     spice_protocol_version=$($pkg_config --modversion spice-protocol)
5095     spice_server_version=$($pkg_config --modversion spice-server)
5096   else
5097     if test "$spice" = "yes" ; then
5098       feature_not_found "spice" \
5099           "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5100     fi
5101     spice="no"
5102   fi
5103 fi
5104
5105 # check for smartcard support
5106 if test "$smartcard" != "no"; then
5107     if $pkg_config --atleast-version=2.5.1 libcacard; then
5108         libcacard_cflags=$($pkg_config --cflags libcacard)
5109         libcacard_libs=$($pkg_config --libs libcacard)
5110         smartcard="yes"
5111     else
5112         if test "$smartcard" = "yes"; then
5113             feature_not_found "smartcard" "Install libcacard devel"
5114         fi
5115         smartcard="no"
5116     fi
5117 fi
5118
5119 # check for libusb
5120 if test "$libusb" != "no" ; then
5121     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5122         libusb="yes"
5123         libusb_cflags=$($pkg_config --cflags libusb-1.0)
5124         libusb_libs=$($pkg_config --libs libusb-1.0)
5125     else
5126         if test "$libusb" = "yes"; then
5127             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5128         fi
5129         libusb="no"
5130     fi
5131 fi
5132
5133 # check for usbredirparser for usb network redirection support
5134 if test "$usb_redir" != "no" ; then
5135     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5136         usb_redir="yes"
5137         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5138         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5139     else
5140         if test "$usb_redir" = "yes"; then
5141             feature_not_found "usb-redir" "Install usbredir devel"
5142         fi
5143         usb_redir="no"
5144     fi
5145 fi
5146
5147 ##########################################
5148 # check if we have VSS SDK headers for win
5149
5150 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5151         test "$vss_win32_sdk" != "no" ; then
5152   case "$vss_win32_sdk" in
5153     "")   vss_win32_include="-isystem $source_path" ;;
5154     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5155           # handle path with spaces. So we symlink the headers into ".sdk/vss".
5156           vss_win32_include="-isystem $source_path/.sdk/vss"
5157           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5158           ;;
5159     *)    vss_win32_include="-isystem $vss_win32_sdk"
5160   esac
5161   cat > $TMPC << EOF
5162 #define __MIDL_user_allocate_free_DEFINED__
5163 #include <inc/win2003/vss.h>
5164 int main(void) { return VSS_CTX_BACKUP; }
5165 EOF
5166   if compile_prog "$vss_win32_include" "" ; then
5167     guest_agent_with_vss="yes"
5168     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5169     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5170     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5171   else
5172     if test "$vss_win32_sdk" != "" ; then
5173       echo "ERROR: Please download and install Microsoft VSS SDK:"
5174       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5175       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5176       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
5177       echo "ERROR: The headers are extracted in the directory \`inc'."
5178       feature_not_found "VSS support"
5179     fi
5180     guest_agent_with_vss="no"
5181   fi
5182 fi
5183
5184 ##########################################
5185 # lookup Windows platform SDK (if not specified)
5186 # The SDK is needed only to build .tlb (type library) file of guest agent
5187 # VSS provider from the source. It is usually unnecessary because the
5188 # pre-compiled .tlb file is included.
5189
5190 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5191         test "$guest_agent_with_vss" = "yes" ; then
5192   if test -z "$win_sdk"; then
5193     programfiles="$PROGRAMFILES"
5194     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5195     if test -n "$programfiles"; then
5196       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5197     else
5198       feature_not_found "Windows SDK"
5199     fi
5200   elif test "$win_sdk" = "no"; then
5201     win_sdk=""
5202   fi
5203 fi
5204
5205 ##########################################
5206 # check if mingw environment provides a recent ntddscsi.h
5207 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5208   cat > $TMPC << EOF
5209 #include <windows.h>
5210 #include <ntddscsi.h>
5211 int main(void) {
5212 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5213 #error Missing required ioctl definitions
5214 #endif
5215   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5216   return addr.Lun;
5217 }
5218 EOF
5219   if compile_prog "" "" ; then
5220     guest_agent_ntddscsi=yes
5221     libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5222   fi
5223 fi
5224
5225 ##########################################
5226 # virgl renderer probe
5227
5228 if test "$virglrenderer" != "no" ; then
5229   cat > $TMPC << EOF
5230 #include <virglrenderer.h>
5231 int main(void) { virgl_renderer_poll(); return 0; }
5232 EOF
5233   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5234   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5235   virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5236   if $pkg_config virglrenderer >/dev/null 2>&1 && \
5237      compile_prog "$virgl_cflags" "$virgl_libs" ; then
5238     virglrenderer="yes"
5239   else
5240     if test "$virglrenderer" = "yes" ; then
5241       feature_not_found "virglrenderer"
5242     fi
5243     virglrenderer="no"
5244   fi
5245 fi
5246
5247 ##########################################
5248 # capstone
5249
5250 case "$capstone" in
5251   "" | yes)
5252     if $pkg_config capstone; then
5253       capstone=system
5254     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5255       capstone=git
5256     elif test -e "${source_path}/capstone/Makefile" ; then
5257       capstone=internal
5258     elif test -z "$capstone" ; then
5259       capstone=no
5260     else
5261       feature_not_found "capstone" "Install capstone devel or git submodule"
5262     fi
5263     ;;
5264
5265   system)
5266     if ! $pkg_config capstone; then
5267       feature_not_found "capstone" "Install capstone devel"
5268     fi
5269     ;;
5270 esac
5271
5272 case "$capstone" in
5273   git | internal)
5274     if test "$capstone" = git; then
5275       git_submodules="${git_submodules} capstone"
5276     fi
5277     mkdir -p capstone
5278     QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5279     if test "$mingw32" = "yes"; then
5280       LIBCAPSTONE=capstone.lib
5281     else
5282       LIBCAPSTONE=libcapstone.a
5283     fi
5284     libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5285     ;;
5286
5287   system)
5288     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5289     libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5290     ;;
5291
5292   no)
5293     ;;
5294   *)
5295     error_exit "Unknown state for capstone: $capstone"
5296     ;;
5297 esac
5298
5299 ##########################################
5300 # check if we have fdatasync
5301
5302 fdatasync=no
5303 cat > $TMPC << EOF
5304 #include <unistd.h>
5305 int main(void) {
5306 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5307 return fdatasync(0);
5308 #else
5309 #error Not supported
5310 #endif
5311 }
5312 EOF
5313 if compile_prog "" "" ; then
5314     fdatasync=yes
5315 fi
5316
5317 ##########################################
5318 # check if we have madvise
5319
5320 madvise=no
5321 cat > $TMPC << EOF
5322 #include <sys/types.h>
5323 #include <sys/mman.h>
5324 #include <stddef.h>
5325 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5326 EOF
5327 if compile_prog "" "" ; then
5328     madvise=yes
5329 fi
5330
5331 ##########################################
5332 # check if we have posix_madvise
5333
5334 posix_madvise=no
5335 cat > $TMPC << EOF
5336 #include <sys/mman.h>
5337 #include <stddef.h>
5338 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5339 EOF
5340 if compile_prog "" "" ; then
5341     posix_madvise=yes
5342 fi
5343
5344 ##########################################
5345 # check if we have posix_memalign()
5346
5347 posix_memalign=no
5348 cat > $TMPC << EOF
5349 #include <stdlib.h>
5350 int main(void) {
5351     void *p;
5352     return posix_memalign(&p, 8, 8);
5353 }
5354 EOF
5355 if compile_prog "" "" ; then
5356     posix_memalign=yes
5357 fi
5358
5359 ##########################################
5360 # check if we have posix_syslog
5361
5362 posix_syslog=no
5363 cat > $TMPC << EOF
5364 #include <syslog.h>
5365 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5366 EOF
5367 if compile_prog "" "" ; then
5368     posix_syslog=yes
5369 fi
5370
5371 ##########################################
5372 # check if we have sem_timedwait
5373
5374 sem_timedwait=no
5375 cat > $TMPC << EOF
5376 #include <semaphore.h>
5377 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5378 EOF
5379 if compile_prog "" "" ; then
5380     sem_timedwait=yes
5381 fi
5382
5383 ##########################################
5384 # check if we have strchrnul
5385
5386 strchrnul=no
5387 cat > $TMPC << EOF
5388 #include <string.h>
5389 int main(void);
5390 // Use a haystack that the compiler shouldn't be able to constant fold
5391 char *haystack = (char*)&main;
5392 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5393 EOF
5394 if compile_prog "" "" ; then
5395     strchrnul=yes
5396 fi
5397
5398 #########################################
5399 # check if we have st_atim
5400
5401 st_atim=no
5402 cat > $TMPC << EOF
5403 #include <sys/stat.h>
5404 #include <stddef.h>
5405 int main(void) { return offsetof(struct stat, st_atim); }
5406 EOF
5407 if compile_prog "" "" ; then
5408     st_atim=yes
5409 fi
5410
5411 ##########################################
5412 # check if trace backend exists
5413
5414 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
5415 if test "$?" -ne 0 ; then
5416   error_exit "invalid trace backends" \
5417       "Please choose supported trace backends."
5418 fi
5419
5420 ##########################################
5421 # For 'ust' backend, test if ust headers are present
5422 if have_backend "ust"; then
5423   cat > $TMPC << EOF
5424 #include <lttng/tracepoint.h>
5425 int main(void) { return 0; }
5426 EOF
5427   if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5428     if $pkg_config lttng-ust --exists; then
5429       lttng_ust_libs=$($pkg_config --libs lttng-ust)
5430     else
5431       lttng_ust_libs="-llttng-ust -ldl"
5432     fi
5433     if $pkg_config liburcu-bp --exists; then
5434       urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5435     else
5436       urcu_bp_libs="-lurcu-bp"
5437     fi
5438
5439     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5440     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5441   else
5442     error_exit "Trace backend 'ust' missing lttng-ust header files"
5443   fi
5444 fi
5445
5446 ##########################################
5447 # For 'dtrace' backend, test if 'dtrace' command is present
5448 if have_backend "dtrace"; then
5449   if ! has 'dtrace' ; then
5450     error_exit "dtrace command is not found in PATH $PATH"
5451   fi
5452   trace_backend_stap="no"
5453   if has 'stap' ; then
5454     trace_backend_stap="yes"
5455   fi
5456 fi
5457
5458 ##########################################
5459 # check and set a backend for coroutine
5460
5461 # We prefer ucontext, but it's not always possible. The fallback
5462 # is sigcontext. On Windows the only valid backend is the Windows
5463 # specific one.
5464
5465 ucontext_works=no
5466 if test "$darwin" != "yes"; then
5467   cat > $TMPC << EOF
5468 #include <ucontext.h>
5469 #ifdef __stub_makecontext
5470 #error Ignoring glibc stub makecontext which will always fail
5471 #endif
5472 int main(void) { makecontext(0, 0, 0); return 0; }
5473 EOF
5474   if compile_prog "" "" ; then
5475     ucontext_works=yes
5476   fi
5477 fi
5478
5479 if test "$coroutine" = ""; then
5480   if test "$mingw32" = "yes"; then
5481     coroutine=win32
5482   elif test "$ucontext_works" = "yes"; then
5483     coroutine=ucontext
5484   else
5485     coroutine=sigaltstack
5486   fi
5487 else
5488   case $coroutine in
5489   windows)
5490     if test "$mingw32" != "yes"; then
5491       error_exit "'windows' coroutine backend only valid for Windows"
5492     fi
5493     # Unfortunately the user visible backend name doesn't match the
5494     # coroutine-*.c filename for this case, so we have to adjust it here.
5495     coroutine=win32
5496     ;;
5497   ucontext)
5498     if test "$ucontext_works" != "yes"; then
5499       feature_not_found "ucontext"
5500     fi
5501     ;;
5502   sigaltstack)
5503     if test "$mingw32" = "yes"; then
5504       error_exit "only the 'windows' coroutine backend is valid for Windows"
5505     fi
5506     ;;
5507   *)
5508     error_exit "unknown coroutine backend $coroutine"
5509     ;;
5510   esac
5511 fi
5512
5513 if test "$coroutine_pool" = ""; then
5514   coroutine_pool=yes
5515 fi
5516
5517 if test "$debug_stack_usage" = "yes"; then
5518   if test "$coroutine_pool" = "yes"; then
5519     echo "WARN: disabling coroutine pool for stack usage debugging"
5520     coroutine_pool=no
5521   fi
5522 fi
5523
5524
5525 ##########################################
5526 # check if we have open_by_handle_at
5527
5528 open_by_handle_at=no
5529 cat > $TMPC << EOF
5530 #include <fcntl.h>
5531 #if !defined(AT_EMPTY_PATH)
5532 # error missing definition
5533 #else
5534 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5535 #endif
5536 EOF
5537 if compile_prog "" "" ; then
5538     open_by_handle_at=yes
5539 fi
5540
5541 ########################################
5542 # check if we have linux/magic.h
5543
5544 linux_magic_h=no
5545 cat > $TMPC << EOF
5546 #include <linux/magic.h>
5547 int main(void) {
5548   return 0;
5549 }
5550 EOF
5551 if compile_prog "" "" ; then
5552     linux_magic_h=yes
5553 fi
5554
5555 ########################################
5556 # check whether we can disable warning option with a pragma (this is needed
5557 # to silence warnings in the headers of some versions of external libraries).
5558 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5559 # only a warning.
5560 #
5561 # If we can't selectively disable warning in the code, disable -Werror so that
5562 # the build doesn't fail anyway.
5563
5564 pragma_disable_unused_but_set=no
5565 cat > $TMPC << EOF
5566 #pragma GCC diagnostic push
5567 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5568 #pragma GCC diagnostic pop
5569
5570 int main(void) {
5571     return 0;
5572 }
5573 EOF
5574 if compile_prog "-Werror" "" ; then
5575     pragma_diagnostic_available=yes
5576 else
5577     werror=no
5578 fi
5579
5580 ########################################
5581 # check if we have valgrind/valgrind.h
5582
5583 valgrind_h=no
5584 cat > $TMPC << EOF
5585 #include <valgrind/valgrind.h>
5586 int main(void) {
5587   return 0;
5588 }
5589 EOF
5590 if compile_prog "" "" ; then
5591     valgrind_h=yes
5592 fi
5593
5594 ########################################
5595 # check if environ is declared
5596
5597 has_environ=no
5598 cat > $TMPC << EOF
5599 #include <unistd.h>
5600 int main(void) {
5601     environ = 0;
5602     return 0;
5603 }
5604 EOF
5605 if compile_prog "" "" ; then
5606     has_environ=yes
5607 fi
5608
5609 ########################################
5610 # check if cpuid.h is usable.
5611
5612 cat > $TMPC << EOF
5613 #include <cpuid.h>
5614 int main(void) {
5615     unsigned a, b, c, d;
5616     int max = __get_cpuid_max(0, 0);
5617
5618     if (max >= 1) {
5619         __cpuid(1, a, b, c, d);
5620     }
5621
5622     if (max >= 7) {
5623         __cpuid_count(7, 0, a, b, c, d);
5624     }
5625
5626     return 0;
5627 }
5628 EOF
5629 if compile_prog "" "" ; then
5630     cpuid_h=yes
5631 fi
5632
5633 ##########################################
5634 # avx2 optimization requirement check
5635 #
5636 # There is no point enabling this if cpuid.h is not usable,
5637 # since we won't be able to select the new routines.
5638
5639 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5640   cat > $TMPC << EOF
5641 #pragma GCC push_options
5642 #pragma GCC target("avx2")
5643 #include <cpuid.h>
5644 #include <immintrin.h>
5645 static int bar(void *a) {
5646     __m256i x = *(__m256i *)a;
5647     return _mm256_testz_si256(x, x);
5648 }
5649 int main(int argc, char *argv[]) { return bar(argv[0]); }
5650 EOF
5651   if compile_object "" ; then
5652     avx2_opt="yes"
5653   else
5654     avx2_opt="no"
5655   fi
5656 fi
5657
5658 ##########################################
5659 # avx512f optimization requirement check
5660 #
5661 # There is no point enabling this if cpuid.h is not usable,
5662 # since we won't be able to select the new routines.
5663 # by default, it is turned off.
5664 # if user explicitly want to enable it, check environment
5665
5666 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5667   cat > $TMPC << EOF
5668 #pragma GCC push_options
5669 #pragma GCC target("avx512f")
5670 #include <cpuid.h>
5671 #include <immintrin.h>
5672 static int bar(void *a) {
5673     __m512i x = *(__m512i *)a;
5674     return _mm512_test_epi64_mask(x, x);
5675 }
5676 int main(int argc, char *argv[])
5677 {
5678         return bar(argv[0]);
5679 }
5680 EOF
5681   if ! compile_object "" ; then
5682     avx512f_opt="no"
5683   fi
5684 else
5685   avx512f_opt="no"
5686 fi
5687
5688 ########################################
5689 # check if __[u]int128_t is usable.
5690
5691 int128=no
5692 cat > $TMPC << EOF
5693 __int128_t a;
5694 __uint128_t b;
5695 int main (void) {
5696   a = a + b;
5697   b = a * b;
5698   a = a * a;
5699   return 0;
5700 }
5701 EOF
5702 if compile_prog "" "" ; then
5703     int128=yes
5704 fi
5705
5706 #########################################
5707 # See if 128-bit atomic operations are supported.
5708
5709 atomic128=no
5710 if test "$int128" = "yes"; then
5711   cat > $TMPC << EOF
5712 int main(void)
5713 {
5714   unsigned __int128 x = 0, y = 0;
5715   y = __atomic_load_16(&x, 0);
5716   __atomic_store_16(&x, y, 0);
5717   __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5718   return 0;
5719 }
5720 EOF
5721   if compile_prog "" "" ; then
5722     atomic128=yes
5723   fi
5724 fi
5725
5726 cmpxchg128=no
5727 if test "$int128" = yes && test "$atomic128" = no; then
5728   cat > $TMPC << EOF
5729 int main(void)
5730 {
5731   unsigned __int128 x = 0, y = 0;
5732   __sync_val_compare_and_swap_16(&x, y, x);
5733   return 0;
5734 }
5735 EOF
5736   if compile_prog "" "" ; then
5737     cmpxchg128=yes
5738   fi
5739 fi
5740
5741 #########################################
5742 # See if 64-bit atomic operations are supported.
5743 # Note that without __atomic builtins, we can only
5744 # assume atomic loads/stores max at pointer size.
5745
5746 cat > $TMPC << EOF
5747 #include <stdint.h>
5748 int main(void)
5749 {
5750   uint64_t x = 0, y = 0;
5751 #ifdef __ATOMIC_RELAXED
5752   y = __atomic_load_8(&x, 0);
5753   __atomic_store_8(&x, y, 0);
5754   __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5755   __atomic_exchange_8(&x, y, 0);
5756   __atomic_fetch_add_8(&x, y, 0);
5757 #else
5758   typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5759   __sync_lock_test_and_set(&x, y);
5760   __sync_val_compare_and_swap(&x, y, 0);
5761   __sync_fetch_and_add(&x, y);
5762 #endif
5763   return 0;
5764 }
5765 EOF
5766 if compile_prog "" "" ; then
5767   atomic64=yes
5768 fi
5769
5770 #########################################
5771 # See if --dynamic-list is supported by the linker
5772 ld_dynamic_list="no"
5773 if test "$static" = "no" ; then
5774     cat > $TMPTXT <<EOF
5775 {
5776   foo;
5777 };
5778 EOF
5779
5780     cat > $TMPC <<EOF
5781 #include <stdio.h>
5782 void foo(void);
5783
5784 void foo(void)
5785 {
5786   printf("foo\n");
5787 }
5788
5789 int main(void)
5790 {
5791   foo();
5792   return 0;
5793 }
5794 EOF
5795
5796     if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5797         ld_dynamic_list="yes"
5798     fi
5799 fi
5800
5801 #########################################
5802 # See if -exported_symbols_list is supported by the linker
5803
5804 ld_exported_symbols_list="no"
5805 if test "$static" = "no" ; then
5806     cat > $TMPTXT <<EOF
5807   _foo
5808 EOF
5809
5810     if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5811         ld_exported_symbols_list="yes"
5812     fi
5813 fi
5814
5815 if  test "$plugins" = "yes" &&
5816     test "$ld_dynamic_list" = "no" &&
5817     test "$ld_exported_symbols_list" = "no" ; then
5818   error_exit \
5819       "Plugin support requires dynamic linking and specifying a set of symbols " \
5820       "that are exported to plugins. Unfortunately your linker doesn't " \
5821       "support the flag (--dynamic-list or -exported_symbols_list) used " \
5822       "for this purpose. You can't build with --static."
5823 fi
5824
5825 ########################################
5826 # See if __attribute__((alias)) is supported.
5827 # This false for Xcode 9, but has been remedied for Xcode 10.
5828 # Unfortunately, travis uses Xcode 9 by default.
5829
5830 attralias=no
5831 cat > $TMPC << EOF
5832 int x = 1;
5833 extern const int y __attribute__((alias("x")));
5834 int main(void) { return 0; }
5835 EOF
5836 if compile_prog "" "" ; then
5837     attralias=yes
5838 fi
5839
5840 ########################################
5841 # check if getauxval is available.
5842
5843 getauxval=no
5844 cat > $TMPC << EOF
5845 #include <sys/auxv.h>
5846 int main(void) {
5847   return getauxval(AT_HWCAP) == 0;
5848 }
5849 EOF
5850 if compile_prog "" "" ; then
5851     getauxval=yes
5852 fi
5853
5854 ########################################
5855 # check if ccache is interfering with
5856 # semantic analysis of macros
5857
5858 unset CCACHE_CPP2
5859 ccache_cpp2=no
5860 cat > $TMPC << EOF
5861 static const int Z = 1;
5862 #define fn() ({ Z; })
5863 #define TAUT(X) ((X) == Z)
5864 #define PAREN(X, Y) (X == Y)
5865 #define ID(X) (X)
5866 int main(int argc, char *argv[])
5867 {
5868     int x = 0, y = 0;
5869     x = ID(x);
5870     x = fn();
5871     fn();
5872     if (PAREN(x, y)) return 0;
5873     if (TAUT(Z)) return 0;
5874     return 0;
5875 }
5876 EOF
5877
5878 if ! compile_object "-Werror"; then
5879     ccache_cpp2=yes
5880 fi
5881
5882 #################################################
5883 # clang does not support glibc + FORTIFY_SOURCE.
5884
5885 if test "$fortify_source" != "no"; then
5886   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5887     fortify_source="no";
5888   elif test -n "$cxx" && has $cxx &&
5889        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5890     fortify_source="no";
5891   else
5892     fortify_source="yes"
5893   fi
5894 fi
5895
5896 ###############################################
5897 # Check if copy_file_range is provided by glibc
5898 have_copy_file_range=no
5899 cat > $TMPC << EOF
5900 #include <unistd.h>
5901 int main(void) {
5902   copy_file_range(0, NULL, 0, NULL, 0, 0);
5903   return 0;
5904 }
5905 EOF
5906 if compile_prog "" "" ; then
5907     have_copy_file_range=yes
5908 fi
5909
5910 ##########################################
5911 # check if struct fsxattr is available via linux/fs.h
5912
5913 have_fsxattr=no
5914 cat > $TMPC << EOF
5915 #include <linux/fs.h>
5916 struct fsxattr foo;
5917 int main(void) {
5918   return 0;
5919 }
5920 EOF
5921 if compile_prog "" "" ; then
5922     have_fsxattr=yes
5923 fi
5924
5925 ##########################################
5926 # check for usable membarrier system call
5927 if test "$membarrier" = "yes"; then
5928     have_membarrier=no
5929     if test "$mingw32" = "yes" ; then
5930         have_membarrier=yes
5931     elif test "$linux" = "yes" ; then
5932         cat > $TMPC << EOF
5933     #include <linux/membarrier.h>
5934     #include <sys/syscall.h>
5935     #include <unistd.h>
5936     #include <stdlib.h>
5937     int main(void) {
5938         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5939         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5940         exit(0);
5941     }
5942 EOF
5943         if compile_prog "" "" ; then
5944             have_membarrier=yes
5945         fi
5946     fi
5947     if test "$have_membarrier" = "no"; then
5948       feature_not_found "membarrier" "membarrier system call not available"
5949     fi
5950 else
5951     # Do not enable it by default even for Mingw32, because it doesn't
5952     # work on Wine.
5953     membarrier=no
5954 fi
5955
5956 ##########################################
5957 # check if rtnetlink.h exists and is useful
5958 have_rtnetlink=no
5959 cat > $TMPC << EOF
5960 #include <linux/rtnetlink.h>
5961 int main(void) {
5962   return IFLA_PROTO_DOWN;
5963 }
5964 EOF
5965 if compile_prog "" "" ; then
5966     have_rtnetlink=yes
5967 fi
5968
5969 ##########################################
5970 # check for usable AF_VSOCK environment
5971 have_af_vsock=no
5972 cat > $TMPC << EOF
5973 #include <errno.h>
5974 #include <sys/types.h>
5975 #include <sys/socket.h>
5976 #if !defined(AF_VSOCK)
5977 # error missing AF_VSOCK flag
5978 #endif
5979 #include <linux/vm_sockets.h>
5980 int main(void) {
5981     int sock, ret;
5982     struct sockaddr_vm svm;
5983     socklen_t len = sizeof(svm);
5984     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5985     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5986     if ((ret == -1) && (errno == ENOTCONN)) {
5987         return 0;
5988     }
5989     return -1;
5990 }
5991 EOF
5992 if compile_prog "" "" ; then
5993     have_af_vsock=yes
5994 fi
5995
5996 ##########################################
5997 # check for usable AF_ALG environment
5998 have_afalg=no
5999 cat > $TMPC << EOF
6000 #include <errno.h>
6001 #include <sys/types.h>
6002 #include <sys/socket.h>
6003 #include <linux/if_alg.h>
6004 int main(void) {
6005     int sock;
6006     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6007     return sock;
6008 }
6009 EOF
6010 if compile_prog "" "" ; then
6011     have_afalg=yes
6012 fi
6013 if test "$crypto_afalg" = "yes"
6014 then
6015     if test "$have_afalg" != "yes"
6016     then
6017         error_exit "AF_ALG requested but could not be detected"
6018     fi
6019 fi
6020
6021
6022 #################################################
6023 # Check to see if we have the Hypervisor framework
6024 if [ "$darwin" = "yes" ] ; then
6025   cat > $TMPC << EOF
6026 #include <Hypervisor/hv.h>
6027 int main() { return 0;}
6028 EOF
6029   if ! compile_object ""; then
6030     hvf='no'
6031   else
6032     hvf='yes'
6033     QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6034   fi
6035 fi
6036
6037 #################################################
6038 # Sparc implicitly links with --relax, which is
6039 # incompatible with -r, so --no-relax should be
6040 # given. It does no harm to give it on other
6041 # platforms too.
6042
6043 # Note: the prototype is needed since QEMU_CFLAGS
6044 #       contains -Wmissing-prototypes
6045 cat > $TMPC << EOF
6046 extern int foo(void);
6047 int foo(void) { return 0; }
6048 EOF
6049 if ! compile_object ""; then
6050   error_exit "Failed to compile object file for LD_REL_FLAGS test"
6051 fi
6052 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6053   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6054     LD_REL_FLAGS=$i
6055     break
6056   fi
6057 done
6058 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6059   feature_not_found "modules" "Cannot find how to build relocatable objects"
6060 fi
6061
6062 ##########################################
6063 # check for sysmacros.h
6064
6065 have_sysmacros=no
6066 cat > $TMPC << EOF
6067 #include <sys/sysmacros.h>
6068 int main(void) {
6069     return makedev(0, 0);
6070 }
6071 EOF
6072 if compile_prog "" "" ; then
6073     have_sysmacros=yes
6074 fi
6075
6076 ##########################################
6077 # Veritas HyperScale block driver VxHS
6078 # Check if libvxhs is installed
6079
6080 if test "$vxhs" != "no" ; then
6081   cat > $TMPC <<EOF
6082 #include <stdint.h>
6083 #include <qnio/qnio_api.h>
6084
6085 void *vxhs_callback;
6086
6087 int main(void) {
6088     iio_init(QNIO_VERSION, vxhs_callback);
6089     return 0;
6090 }
6091 EOF
6092   vxhs_libs="-lvxhs -lssl"
6093   if compile_prog "" "$vxhs_libs" ; then
6094     vxhs=yes
6095   else
6096     if test "$vxhs" = "yes" ; then
6097       feature_not_found "vxhs block device" "Install libvxhs See github"
6098     fi
6099     vxhs=no
6100   fi
6101 fi
6102
6103 ##########################################
6104 # check for _Static_assert()
6105
6106 have_static_assert=no
6107 cat > $TMPC << EOF
6108 _Static_assert(1, "success");
6109 int main(void) {
6110     return 0;
6111 }
6112 EOF
6113 if compile_prog "" "" ; then
6114     have_static_assert=yes
6115 fi
6116
6117 ##########################################
6118 # check for utmpx.h, it is missing e.g. on OpenBSD
6119
6120 have_utmpx=no
6121 cat > $TMPC << EOF
6122 #include <utmpx.h>
6123 struct utmpx user_info;
6124 int main(void) {
6125     return 0;
6126 }
6127 EOF
6128 if compile_prog "" "" ; then
6129     have_utmpx=yes
6130 fi
6131
6132 ##########################################
6133 # check for getrandom()
6134
6135 have_getrandom=no
6136 cat > $TMPC << EOF
6137 #include <sys/random.h>
6138 int main(void) {
6139     return getrandom(0, 0, GRND_NONBLOCK);
6140 }
6141 EOF
6142 if compile_prog "" "" ; then
6143     have_getrandom=yes
6144 fi
6145
6146 ##########################################
6147 # checks for sanitizers
6148
6149 have_asan=no
6150 have_ubsan=no
6151 have_asan_iface_h=no
6152 have_asan_iface_fiber=no
6153
6154 if test "$sanitizers" = "yes" ; then
6155   write_c_skeleton
6156   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6157       have_asan=yes
6158   fi
6159
6160   # we could use a simple skeleton for flags checks, but this also
6161   # detect the static linking issue of ubsan, see also:
6162   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6163   cat > $TMPC << EOF
6164 #include <stdlib.h>
6165 int main(void) {
6166     void *tmp = malloc(10);
6167     return *(int *)(tmp + 2);
6168 }
6169 EOF
6170   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6171       have_ubsan=yes
6172   fi
6173
6174   if check_include "sanitizer/asan_interface.h" ; then
6175       have_asan_iface_h=yes
6176   fi
6177
6178   cat > $TMPC << EOF
6179 #include <sanitizer/asan_interface.h>
6180 int main(void) {
6181   __sanitizer_start_switch_fiber(0, 0, 0);
6182   return 0;
6183 }
6184 EOF
6185   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6186       have_asan_iface_fiber=yes
6187   fi
6188 fi
6189
6190 ##########################################
6191 # checks for fuzzer
6192 if test "$fuzzing" = "yes" ; then
6193   write_c_fuzzer_skeleton
6194   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6195       have_fuzzer=yes
6196   fi
6197 fi
6198
6199 ##########################################
6200 # check for libpmem
6201
6202 if test "$libpmem" != "no"; then
6203         if $pkg_config --exists "libpmem"; then
6204                 libpmem="yes"
6205                 libpmem_libs=$($pkg_config --libs libpmem)
6206                 libpmem_cflags=$($pkg_config --cflags libpmem)
6207                 libs_softmmu="$libs_softmmu $libpmem_libs"
6208                 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6209         else
6210                 if test "$libpmem" = "yes" ; then
6211                         feature_not_found "libpmem" "Install nvml or pmdk"
6212                 fi
6213                 libpmem="no"
6214         fi
6215 fi
6216
6217 ##########################################
6218 # check for slirp
6219
6220 # slirp is only required when building softmmu targets
6221 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6222     slirp="no"
6223 fi
6224
6225 case "$slirp" in
6226   "" | yes)
6227     if $pkg_config slirp; then
6228       slirp=system
6229     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6230       slirp=git
6231     elif test -e "${source_path}/slirp/Makefile" ; then
6232       slirp=internal
6233     elif test -z "$slirp" ; then
6234       slirp=no
6235     else
6236       feature_not_found "slirp" "Install slirp devel or git submodule"
6237     fi
6238     ;;
6239
6240   system)
6241     if ! $pkg_config slirp; then
6242       feature_not_found "slirp" "Install slirp devel"
6243     fi
6244     ;;
6245 esac
6246
6247 case "$slirp" in
6248   git | internal)
6249     if test "$slirp" = git; then
6250       git_submodules="${git_submodules} slirp"
6251     fi
6252     mkdir -p slirp
6253     slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6254     slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
6255     if test "$mingw32" = "yes" ; then
6256       slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6257     fi
6258     ;;
6259
6260   system)
6261     slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6262     slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6263     slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6264     ;;
6265
6266   no)
6267     ;;
6268   *)
6269     error_exit "Unknown state for slirp: $slirp"
6270     ;;
6271 esac
6272
6273
6274 ##########################################
6275 # End of CC checks
6276 # After here, no more $cc or $ld runs
6277
6278 write_c_skeleton
6279
6280 if test "$gcov" = "yes" ; then
6281   QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6282   QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
6283 elif test "$fortify_source" = "yes" ; then
6284   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
6285 elif test "$debug" = "no"; then
6286   CFLAGS="-O2 $CFLAGS"
6287 fi
6288
6289 if test "$have_asan" = "yes"; then
6290   QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6291   QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6292   if test "$have_asan_iface_h" = "no" ; then
6293       echo "ASAN build enabled, but ASAN header missing." \
6294            "Without code annotation, the report may be inferior."
6295   elif test "$have_asan_iface_fiber" = "no" ; then
6296       echo "ASAN build enabled, but ASAN header is too old." \
6297            "Without code annotation, the report may be inferior."
6298   fi
6299 fi
6300 if test "$have_ubsan" = "yes"; then
6301   QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6302   QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6303 fi
6304
6305 ##########################################
6306 # Do we have libnfs
6307 if test "$libnfs" != "no" ; then
6308   if $pkg_config --atleast-version=1.9.3 libnfs; then
6309     libnfs="yes"
6310     libnfs_libs=$($pkg_config --libs libnfs)
6311   else
6312     if test "$libnfs" = "yes" ; then
6313       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6314     fi
6315     libnfs="no"
6316   fi
6317 fi
6318
6319 ##########################################
6320 # Do we have libudev
6321 if test "$libudev" != "no" ; then
6322   if $pkg_config libudev && test "$static" != "yes"; then
6323     libudev="yes"
6324     libudev_libs=$($pkg_config --libs libudev)
6325   else
6326     libudev="no"
6327   fi
6328 fi
6329
6330 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6331 if test "$werror" = "yes"; then
6332     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6333 fi
6334
6335 if test "$solaris" = "no" ; then
6336     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6337         QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6338     fi
6339 fi
6340
6341 # test if pod2man has --utf8 option
6342 if pod2man --help | grep -q utf8; then
6343     POD2MAN="pod2man --utf8"
6344 else
6345     POD2MAN="pod2man"
6346 fi
6347
6348 # Use ASLR, no-SEH and DEP if available
6349 if test "$mingw32" = "yes" ; then
6350     for flag in --dynamicbase --no-seh --nxcompat; do
6351         if ld_has $flag ; then
6352             QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6353         fi
6354     done
6355 fi
6356
6357 # Disable OpenBSD W^X if available
6358 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6359     cat > $TMPC <<EOF
6360     int main(void) { return 0; }
6361 EOF
6362     wx_ldflags="-Wl,-z,wxneeded"
6363     if compile_prog "" "$wx_ldflags"; then
6364         QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6365     fi
6366 fi
6367
6368 qemu_confdir=$sysconfdir$confsuffix
6369 qemu_moddir=$libdir$confsuffix
6370 qemu_datadir=$datadir$confsuffix
6371 qemu_localedir="$datadir/locale"
6372 qemu_icondir="$datadir/icons"
6373 qemu_desktopdir="$datadir/applications"
6374
6375 # We can only support ivshmem if we have eventfd
6376 if [ "$eventfd" = "yes" ]; then
6377   ivshmem=yes
6378 fi
6379
6380 tools=""
6381 if test "$want_tools" = "yes" ; then
6382   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6383   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6384     tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
6385   fi
6386   if [ "$ivshmem" = "yes" ]; then
6387     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6388   fi
6389   if [ "$curl" = "yes" ]; then
6390       tools="elf2dmp\$(EXESUF) $tools"
6391   fi
6392 fi
6393 if test "$softmmu" = yes ; then
6394   if test "$linux" = yes; then
6395     if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6396       virtfs=yes
6397       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6398     else
6399       if test "$virtfs" = yes; then
6400         error_exit "VirtFS requires libcap-ng devel and libattr devel"
6401       fi
6402       virtfs=no
6403     fi
6404     if test "$mpath" != no && test "$mpathpersist" = yes ; then
6405       mpath=yes
6406     else
6407       if test "$mpath" = yes; then
6408         error_exit "Multipath requires libmpathpersist devel"
6409       fi
6410       mpath=no
6411     fi
6412     tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6413   else
6414     if test "$virtfs" = yes; then
6415       error_exit "VirtFS is supported only on Linux"
6416     fi
6417     virtfs=no
6418     if test "$mpath" = yes; then
6419       error_exit "Multipath is supported only on Linux"
6420     fi
6421     mpath=no
6422   fi
6423   if test "$xkbcommon" = "yes"; then
6424     tools="qemu-keymap\$(EXESUF) $tools"
6425   fi
6426 fi
6427
6428 # Probe for guest agent support/options
6429
6430 if [ "$guest_agent" != "no" ]; then
6431   if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6432       guest_agent=no
6433   elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6434       tools="qemu-ga\$(EXESUF) $tools"
6435       guest_agent=yes
6436   elif [ "$guest_agent" != yes ]; then
6437       guest_agent=no
6438   else
6439       error_exit "Guest agent is not supported on this platform"
6440   fi
6441 fi
6442
6443 # Guest agent Window MSI  package
6444
6445 if test "$guest_agent" != yes; then
6446   if test "$guest_agent_msi" = yes; then
6447     error_exit "MSI guest agent package requires guest agent enabled"
6448   fi
6449   guest_agent_msi=no
6450 elif test "$mingw32" != "yes"; then
6451   if test "$guest_agent_msi" = "yes"; then
6452     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6453   fi
6454   guest_agent_msi=no
6455 elif ! has wixl; then
6456   if test "$guest_agent_msi" = "yes"; then
6457     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6458   fi
6459   guest_agent_msi=no
6460 else
6461   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6462   # disabled explicitly
6463   if test "$guest_agent_msi" != "no"; then
6464     guest_agent_msi=yes
6465   fi
6466 fi
6467
6468 if test "$guest_agent_msi" = "yes"; then
6469   if test "$guest_agent_with_vss" = "yes"; then
6470     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6471   fi
6472
6473   if test "$QEMU_GA_MANUFACTURER" = ""; then
6474     QEMU_GA_MANUFACTURER=QEMU
6475   fi
6476
6477   if test "$QEMU_GA_DISTRO" = ""; then
6478     QEMU_GA_DISTRO=Linux
6479   fi
6480
6481   if test "$QEMU_GA_VERSION" = ""; then
6482       QEMU_GA_VERSION=$(cat $source_path/VERSION)
6483   fi
6484
6485   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6486
6487   case "$cpu" in
6488   x86_64)
6489     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6490     ;;
6491   i386)
6492     QEMU_GA_MSI_ARCH="-D Arch=32"
6493     ;;
6494   *)
6495     error_exit "CPU $cpu not supported for building installation package"
6496     ;;
6497   esac
6498 fi
6499
6500 # Mac OS X ships with a broken assembler
6501 roms=
6502 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6503         test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6504         test "$softmmu" = yes ; then
6505     # Different host OS linkers have different ideas about the name of the ELF
6506     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6507     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6508     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6509         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6510             ld_i386_emulation="$emu"
6511             roms="optionrom"
6512             break
6513         fi
6514     done
6515 fi
6516
6517 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6518 if test "$cpu" = "s390x" ; then
6519   write_c_skeleton
6520   if compile_prog "-march=z900" ""; then
6521     roms="$roms s390-ccw"
6522   fi
6523 fi
6524
6525 # Check that the C++ compiler exists and works with the C compiler.
6526 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6527 if has $cxx; then
6528     cat > $TMPC <<EOF
6529 int c_function(void);
6530 int main(void) { return c_function(); }
6531 EOF
6532
6533     compile_object
6534
6535     cat > $TMPCXX <<EOF
6536 extern "C" {
6537    int c_function(void);
6538 }
6539 int c_function(void) { return 42; }
6540 EOF
6541
6542     update_cxxflags
6543
6544     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6545         # C++ compiler $cxx works ok with C compiler $cc
6546         :
6547     else
6548         echo "C++ compiler $cxx does not work with C compiler $cc"
6549         echo "Disabling C++ specific optional code"
6550         cxx=
6551     fi
6552 else
6553     echo "No C++ compiler available; disabling C++ specific optional code"
6554     cxx=
6555 fi
6556
6557 echo_version() {
6558     if test "$1" = "yes" ; then
6559         echo "($2)"
6560     fi
6561 }
6562
6563 # prepend pixman and ftd flags after all config tests are done
6564 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6565 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6566 libs_softmmu="$pixman_libs $libs_softmmu"
6567
6568 echo "Install prefix    $prefix"
6569 echo "BIOS directory    $(eval echo $qemu_datadir)"
6570 echo "firmware path     $(eval echo $firmwarepath)"
6571 echo "binary directory  $(eval echo $bindir)"
6572 echo "library directory $(eval echo $libdir)"
6573 echo "module directory  $(eval echo $qemu_moddir)"
6574 echo "libexec directory $(eval echo $libexecdir)"
6575 echo "include directory $(eval echo $includedir)"
6576 echo "config directory  $(eval echo $sysconfdir)"
6577 if test "$mingw32" = "no" ; then
6578 echo "local state directory   $(eval echo $local_statedir)"
6579 echo "Manual directory  $(eval echo $mandir)"
6580 echo "ELF interp prefix $interp_prefix"
6581 else
6582 echo "local state directory   queried at runtime"
6583 echo "Windows SDK       $win_sdk"
6584 fi
6585 echo "Build directory   $(pwd)"
6586 echo "Source path       $source_path"
6587 echo "GIT binary        $git"
6588 echo "GIT submodules    $git_submodules"
6589 echo "C compiler        $cc"
6590 echo "Host C compiler   $host_cc"
6591 echo "C++ compiler      $cxx"
6592 echo "Objective-C compiler $objcc"
6593 echo "ARFLAGS           $ARFLAGS"
6594 echo "CFLAGS            $CFLAGS"
6595 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
6596 echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
6597 echo "make              $make"
6598 echo "install           $install"
6599 echo "python            $python ($python_version)"
6600 if test "$docs" != "no"; then
6601     echo "sphinx-build      $sphinx_build"
6602 fi
6603 echo "genisoimage       $genisoimage"
6604 echo "slirp support     $slirp $(echo_version $slirp $slirp_version)"
6605 if test "$slirp" != "no" ; then
6606     echo "smbd              $smbd"
6607 fi
6608 echo "module support    $modules"
6609 echo "alt path mod load $module_upgrades"
6610 echo "host CPU          $cpu"
6611 echo "host big endian   $bigendian"
6612 echo "target list       $target_list"
6613 echo "gprof enabled     $gprof"
6614 echo "sparse enabled    $sparse"
6615 echo "strip binaries    $strip_opt"
6616 echo "profiler          $profiler"
6617 echo "static build      $static"
6618 if test "$darwin" = "yes" ; then
6619     echo "Cocoa support     $cocoa"
6620 fi
6621 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
6622 echo "SDL image support $sdl_image"
6623 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
6624 echo "GTK GL support    $gtk_gl"
6625 echo "VTE support       $vte $(echo_version $vte $vteversion)"
6626 echo "TLS priority      $tls_priority"
6627 echo "GNUTLS support    $gnutls"
6628 echo "libgcrypt         $gcrypt"
6629 if test "$gcrypt" = "yes"
6630 then
6631    echo "  hmac            $gcrypt_hmac"
6632    echo "  XTS             $gcrypt_xts"
6633 fi
6634 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
6635 if test "$nettle" = "yes"
6636 then
6637    echo "  XTS             $nettle_xts"
6638 fi
6639 echo "libtasn1          $tasn1"
6640 echo "PAM               $auth_pam"
6641 echo "iconv support     $iconv"
6642 echo "curses support    $curses"
6643 echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6644 echo "curl support      $curl"
6645 echo "mingw32 support   $mingw32"
6646 echo "Audio drivers     $audio_drv_list"
6647 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6648 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6649 echo "VirtFS support    $virtfs"
6650 echo "Multipath support $mpath"
6651 echo "VNC support       $vnc"
6652 if test "$vnc" = "yes" ; then
6653     echo "VNC SASL support  $vnc_sasl"
6654     echo "VNC JPEG support  $vnc_jpeg"
6655     echo "VNC PNG support   $vnc_png"
6656 fi
6657 echo "xen support       $xen"
6658 if test "$xen" = "yes" ; then
6659   echo "xen ctrl version  $xen_ctrl_version"
6660 fi
6661 echo "brlapi support    $brlapi"
6662 echo "Documentation     $docs"
6663 echo "PIE               $pie"
6664 echo "vde support       $vde"
6665 echo "netmap support    $netmap"
6666 echo "Linux AIO support $linux_aio"
6667 echo "Linux io_uring support $linux_io_uring"
6668 echo "ATTR/XATTR support $attr"
6669 echo "Install blobs     $blobs"
6670 echo "KVM support       $kvm"
6671 echo "HAX support       $hax"
6672 echo "HVF support       $hvf"
6673 echo "WHPX support      $whpx"
6674 echo "TCG support       $tcg"
6675 if test "$tcg" = "yes" ; then
6676     echo "TCG debug enabled $debug_tcg"
6677     echo "TCG interpreter   $tcg_interpreter"
6678 fi
6679 echo "malloc trim support $malloc_trim"
6680 echo "RDMA support      $rdma"
6681 echo "PVRDMA support    $pvrdma"
6682 echo "fdt support       $fdt"
6683 echo "membarrier        $membarrier"
6684 echo "preadv support    $preadv"
6685 echo "fdatasync         $fdatasync"
6686 echo "madvise           $madvise"
6687 echo "posix_madvise     $posix_madvise"
6688 echo "posix_memalign    $posix_memalign"
6689 echo "libcap-ng support $cap_ng"
6690 echo "vhost-net support $vhost_net"
6691 echo "vhost-crypto support $vhost_crypto"
6692 echo "vhost-scsi support $vhost_scsi"
6693 echo "vhost-vsock support $vhost_vsock"
6694 echo "vhost-user support $vhost_user"
6695 echo "vhost-user-fs support $vhost_user_fs"
6696 echo "Trace backends    $trace_backends"
6697 if have_backend "simple"; then
6698 echo "Trace output file $trace_file-<pid>"
6699 fi
6700 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6701 echo "rbd support       $rbd"
6702 echo "xfsctl support    $xfs"
6703 echo "smartcard support $smartcard"
6704 echo "libusb            $libusb"
6705 echo "usb net redir     $usb_redir"
6706 echo "OpenGL support    $opengl"
6707 echo "OpenGL dmabufs    $opengl_dmabuf"
6708 echo "libiscsi support  $libiscsi"
6709 echo "libnfs support    $libnfs"
6710 echo "build guest agent $guest_agent"
6711 echo "QGA VSS support   $guest_agent_with_vss"
6712 echo "QGA w32 disk info $guest_agent_ntddscsi"
6713 echo "QGA MSI support   $guest_agent_msi"
6714 echo "seccomp support   $seccomp"
6715 echo "coroutine backend $coroutine"
6716 echo "coroutine pool    $coroutine_pool"
6717 echo "debug stack usage $debug_stack_usage"
6718 echo "mutex debugging   $debug_mutex"
6719 echo "crypto afalg      $crypto_afalg"
6720 echo "GlusterFS support $glusterfs"
6721 echo "gcov              $gcov_tool"
6722 echo "gcov enabled      $gcov"
6723 echo "TPM support       $tpm"
6724 echo "libssh support    $libssh"
6725 echo "QOM debugging     $qom_cast_debug"
6726 echo "Live block migration $live_block_migration"
6727 echo "lzo support       $lzo"
6728 echo "snappy support    $snappy"
6729 echo "bzip2 support     $bzip2"
6730 echo "lzfse support     $lzfse"
6731 echo "zstd support      $zstd"
6732 echo "NUMA host support $numa"
6733 echo "libxml2           $libxml2"
6734 echo "tcmalloc support  $tcmalloc"
6735 echo "jemalloc support  $jemalloc"
6736 echo "avx2 optimization $avx2_opt"
6737 echo "avx512f optimization $avx512f_opt"
6738 echo "replication support $replication"
6739 echo "VxHS block device $vxhs"
6740 echo "bochs support     $bochs"
6741 echo "cloop support     $cloop"
6742 echo "dmg support       $dmg"
6743 echo "qcow v1 support   $qcow1"
6744 echo "vdi support       $vdi"
6745 echo "vvfat support     $vvfat"
6746 echo "qed support       $qed"
6747 echo "parallels support $parallels"
6748 echo "sheepdog support  $sheepdog"
6749 echo "capstone          $capstone"
6750 echo "libpmem support   $libpmem"
6751 echo "libudev           $libudev"
6752 echo "default devices   $default_devices"
6753 echo "plugin support    $plugins"
6754 echo "fuzzing support   $fuzzing"
6755 echo "gdb               $gdb_bin"
6756
6757 if test "$supported_cpu" = "no"; then
6758     echo
6759     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6760     echo
6761     echo "CPU host architecture $cpu support is not currently maintained."
6762     echo "The QEMU project intends to remove support for this host CPU in"
6763     echo "a future release if nobody volunteers to maintain it and to"
6764     echo "provide a build host for our continuous integration setup."
6765     echo "configure has succeeded and you can continue to build, but"
6766     echo "if you care about QEMU on this platform you should contact"
6767     echo "us upstream at [email protected]."
6768 fi
6769
6770 if test "$supported_os" = "no"; then
6771     echo
6772     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6773     echo
6774     echo "Host OS $targetos support is not currently maintained."
6775     echo "The QEMU project intends to remove support for this host OS in"
6776     echo "a future release if nobody volunteers to maintain it and to"
6777     echo "provide a build host for our continuous integration setup."
6778     echo "configure has succeeded and you can continue to build, but"
6779     echo "if you care about QEMU on this platform you should contact"
6780     echo "us upstream at [email protected]."
6781 fi
6782
6783 config_host_mak="config-host.mak"
6784
6785 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6786
6787 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6788 echo >> $config_host_mak
6789
6790 echo all: >> $config_host_mak
6791 echo "prefix=$prefix" >> $config_host_mak
6792 echo "bindir=$bindir" >> $config_host_mak
6793 echo "libdir=$libdir" >> $config_host_mak
6794 echo "libexecdir=$libexecdir" >> $config_host_mak
6795 echo "includedir=$includedir" >> $config_host_mak
6796 echo "mandir=$mandir" >> $config_host_mak
6797 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6798 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6799 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6800 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6801 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6802 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6803 if test "$mingw32" = "no" ; then
6804   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6805 fi
6806 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6807 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6808 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6809 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6810 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6811 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6812 echo "GIT=$git" >> $config_host_mak
6813 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6814 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6815
6816 echo "ARCH=$ARCH" >> $config_host_mak
6817
6818 if test "$default_devices" = "yes" ; then
6819   echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6820 else
6821   echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6822 fi
6823 if test "$debug_tcg" = "yes" ; then
6824   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6825 fi
6826 if test "$strip_opt" = "yes" ; then
6827   echo "STRIP=${strip}" >> $config_host_mak
6828 fi
6829 if test "$bigendian" = "yes" ; then
6830   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6831 fi
6832 if test "$mingw32" = "yes" ; then
6833   echo "CONFIG_WIN32=y" >> $config_host_mak
6834   rc_version=$(cat $source_path/VERSION)
6835   version_major=${rc_version%%.*}
6836   rc_version=${rc_version#*.}
6837   version_minor=${rc_version%%.*}
6838   rc_version=${rc_version#*.}
6839   version_subminor=${rc_version%%.*}
6840   version_micro=0
6841   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6842   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6843   if test "$guest_agent_with_vss" = "yes" ; then
6844     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6845     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6846     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6847   fi
6848   if test "$guest_agent_ntddscsi" = "yes" ; then
6849     echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6850   fi
6851   if test "$guest_agent_msi" = "yes"; then
6852     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6853     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6854     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6855     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6856     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6857     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6858     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6859   fi
6860 else
6861   echo "CONFIG_POSIX=y" >> $config_host_mak
6862 fi
6863
6864 if test "$linux" = "yes" ; then
6865   echo "CONFIG_LINUX=y" >> $config_host_mak
6866 fi
6867
6868 if test "$darwin" = "yes" ; then
6869   echo "CONFIG_DARWIN=y" >> $config_host_mak
6870 fi
6871
6872 if test "$solaris" = "yes" ; then
6873   echo "CONFIG_SOLARIS=y" >> $config_host_mak
6874 fi
6875 if test "$haiku" = "yes" ; then
6876   echo "CONFIG_HAIKU=y" >> $config_host_mak
6877 fi
6878 if test "$static" = "yes" ; then
6879   echo "CONFIG_STATIC=y" >> $config_host_mak
6880 fi
6881 if test "$profiler" = "yes" ; then
6882   echo "CONFIG_PROFILER=y" >> $config_host_mak
6883 fi
6884 if test "$want_tools" = "yes" ; then
6885   echo "CONFIG_TOOLS=y" >> $config_host_mak
6886 fi
6887 if test "$slirp" != "no"; then
6888   echo "CONFIG_SLIRP=y" >> $config_host_mak
6889   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6890   echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6891   echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6892 fi
6893 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6894     echo "config-host.h: slirp/all" >> $config_host_mak
6895 fi
6896 if test "$vde" = "yes" ; then
6897   echo "CONFIG_VDE=y" >> $config_host_mak
6898   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6899 fi
6900 if test "$netmap" = "yes" ; then
6901   echo "CONFIG_NETMAP=y" >> $config_host_mak
6902 fi
6903 if test "$l2tpv3" = "yes" ; then
6904   echo "CONFIG_L2TPV3=y" >> $config_host_mak
6905 fi
6906 if test "$gprof" = "yes" ; then
6907   echo "CONFIG_GPROF=y" >> $config_host_mak
6908 fi
6909 if test "$cap_ng" = "yes" ; then
6910   echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6911 fi
6912 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6913 for drv in $audio_drv_list; do
6914     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6915     case "$drv" in
6916         alsa | oss | pa | sdl)
6917             echo "$def=m" >> $config_host_mak ;;
6918         *)
6919             echo "$def=y" >> $config_host_mak ;;
6920     esac
6921 done
6922 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6923 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6924 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6925 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6926 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6927 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6928 if test "$audio_win_int" = "yes" ; then
6929   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6930 fi
6931 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6932 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6933 if test "$vnc" = "yes" ; then
6934   echo "CONFIG_VNC=y" >> $config_host_mak
6935 fi
6936 if test "$vnc_sasl" = "yes" ; then
6937   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6938 fi
6939 if test "$vnc_jpeg" = "yes" ; then
6940   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6941 fi
6942 if test "$vnc_png" = "yes" ; then
6943   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6944 fi
6945 if test "$xkbcommon" = "yes" ; then
6946   echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6947   echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6948 fi
6949 if test "$xfs" = "yes" ; then
6950   echo "CONFIG_XFS=y" >> $config_host_mak
6951 fi
6952 qemu_version=$(head $source_path/VERSION)
6953 echo "VERSION=$qemu_version" >>$config_host_mak
6954 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6955 echo "SRC_PATH=$source_path" >> $config_host_mak
6956 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6957 if [ "$docs" = "yes" ] ; then
6958   echo "BUILD_DOCS=yes" >> $config_host_mak
6959 fi
6960 if test "$modules" = "yes"; then
6961   # $shacmd can generate a hash started with digit, which the compiler doesn't
6962   # like as an symbol. So prefix it with an underscore
6963   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6964   echo "CONFIG_MODULES=y" >> $config_host_mak
6965 fi
6966 if test "$module_upgrades" = "yes"; then
6967   echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6968 fi
6969 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6970   echo "CONFIG_X11=y" >> $config_host_mak
6971   echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6972   echo "X11_LIBS=$x11_libs" >> $config_host_mak
6973 fi
6974 if test "$sdl" = "yes" ; then
6975   echo "CONFIG_SDL=m" >> $config_host_mak
6976   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6977   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6978   if test "$sdl_image" = "yes" ; then
6979       echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6980   fi
6981 fi
6982 if test "$cocoa" = "yes" ; then
6983   echo "CONFIG_COCOA=y" >> $config_host_mak
6984 fi
6985 if test "$iconv" = "yes" ; then
6986   echo "CONFIG_ICONV=y" >> $config_host_mak
6987   echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6988   echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6989 fi
6990 if test "$curses" = "yes" ; then
6991   echo "CONFIG_CURSES=m" >> $config_host_mak
6992   echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6993   echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6994 fi
6995 if test "$pipe2" = "yes" ; then
6996   echo "CONFIG_PIPE2=y" >> $config_host_mak
6997 fi
6998 if test "$accept4" = "yes" ; then
6999   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7000 fi
7001 if test "$splice" = "yes" ; then
7002   echo "CONFIG_SPLICE=y" >> $config_host_mak
7003 fi
7004 if test "$eventfd" = "yes" ; then
7005   echo "CONFIG_EVENTFD=y" >> $config_host_mak
7006 fi
7007 if test "$memfd" = "yes" ; then
7008   echo "CONFIG_MEMFD=y" >> $config_host_mak
7009 fi
7010 if test "$have_usbfs" = "yes" ; then
7011   echo "CONFIG_USBFS=y" >> $config_host_mak
7012 fi
7013 if test "$fallocate" = "yes" ; then
7014   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7015 fi
7016 if test "$fallocate_punch_hole" = "yes" ; then
7017   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7018 fi
7019 if test "$fallocate_zero_range" = "yes" ; then
7020   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7021 fi
7022 if test "$posix_fallocate" = "yes" ; then
7023   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7024 fi
7025 if test "$sync_file_range" = "yes" ; then
7026   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7027 fi
7028 if test "$fiemap" = "yes" ; then
7029   echo "CONFIG_FIEMAP=y" >> $config_host_mak
7030 fi
7031 if test "$dup3" = "yes" ; then
7032   echo "CONFIG_DUP3=y" >> $config_host_mak
7033 fi
7034 if test "$ppoll" = "yes" ; then
7035   echo "CONFIG_PPOLL=y" >> $config_host_mak
7036 fi
7037 if test "$prctl_pr_set_timerslack" = "yes" ; then
7038   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7039 fi
7040 if test "$epoll" = "yes" ; then
7041   echo "CONFIG_EPOLL=y" >> $config_host_mak
7042 fi
7043 if test "$epoll_create1" = "yes" ; then
7044   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7045 fi
7046 if test "$sendfile" = "yes" ; then
7047   echo "CONFIG_SENDFILE=y" >> $config_host_mak
7048 fi
7049 if test "$timerfd" = "yes" ; then
7050   echo "CONFIG_TIMERFD=y" >> $config_host_mak
7051 fi
7052 if test "$setns" = "yes" ; then
7053   echo "CONFIG_SETNS=y" >> $config_host_mak
7054 fi
7055 if test "$clock_adjtime" = "yes" ; then
7056   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7057 fi
7058 if test "$syncfs" = "yes" ; then
7059   echo "CONFIG_SYNCFS=y" >> $config_host_mak
7060 fi
7061 if test "$kcov" = "yes" ; then
7062   echo "CONFIG_KCOV=y" >> $config_host_mak
7063 fi
7064 if test "$inotify" = "yes" ; then
7065   echo "CONFIG_INOTIFY=y" >> $config_host_mak
7066 fi
7067 if test "$inotify1" = "yes" ; then
7068   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7069 fi
7070 if test "$sem_timedwait" = "yes" ; then
7071   echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7072 fi
7073 if test "$strchrnul" = "yes" ; then
7074   echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7075 fi
7076 if test "$st_atim" = "yes" ; then
7077   echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7078 fi
7079 if test "$byteswap_h" = "yes" ; then
7080   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7081 fi
7082 if test "$bswap_h" = "yes" ; then
7083   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7084 fi
7085 if test "$curl" = "yes" ; then
7086   echo "CONFIG_CURL=m" >> $config_host_mak
7087   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7088   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7089 fi
7090 if test "$brlapi" = "yes" ; then
7091   echo "CONFIG_BRLAPI=y" >> $config_host_mak
7092   echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7093 fi
7094 if test "$gtk" = "yes" ; then
7095   echo "CONFIG_GTK=m" >> $config_host_mak
7096   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7097   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7098   if test "$gtk_gl" = "yes" ; then
7099     echo "CONFIG_GTK_GL=y" >> $config_host_mak
7100   fi
7101 fi
7102 if test "$gio" = "yes" ; then
7103     echo "CONFIG_GIO=y" >> $config_host_mak
7104     echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7105     echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7106     echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7107 fi
7108 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7109 if test "$gnutls" = "yes" ; then
7110   echo "CONFIG_GNUTLS=y" >> $config_host_mak
7111 fi
7112 if test "$gcrypt" = "yes" ; then
7113   echo "CONFIG_GCRYPT=y" >> $config_host_mak
7114   if test "$gcrypt_hmac" = "yes" ; then
7115     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7116   fi
7117 fi
7118 if test "$nettle" = "yes" ; then
7119   echo "CONFIG_NETTLE=y" >> $config_host_mak
7120   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7121 fi
7122 if test "$qemu_private_xts" = "yes" ; then
7123   echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7124 fi
7125 if test "$tasn1" = "yes" ; then
7126   echo "CONFIG_TASN1=y" >> $config_host_mak
7127 fi
7128 if test "$auth_pam" = "yes" ; then
7129     echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7130 fi
7131 if test "$have_ifaddrs_h" = "yes" ; then
7132     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7133 fi
7134 if test "$have_broken_size_max" = "yes" ; then
7135     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7136 fi
7137
7138 # Work around a system header bug with some kernel/XFS header
7139 # versions where they both try to define 'struct fsxattr':
7140 # xfs headers will not try to redefine structs from linux headers
7141 # if this macro is set.
7142 if test "$have_fsxattr" = "yes" ; then
7143     echo "HAVE_FSXATTR=y" >> $config_host_mak
7144 fi
7145 if test "$have_copy_file_range" = "yes" ; then
7146     echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7147 fi
7148 if test "$vte" = "yes" ; then
7149   echo "CONFIG_VTE=y" >> $config_host_mak
7150   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7151   echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7152 fi
7153 if test "$virglrenderer" = "yes" ; then
7154   echo "CONFIG_VIRGL=y" >> $config_host_mak
7155   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7156   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7157 fi
7158 if test "$xen" = "yes" ; then
7159   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7160   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7161 fi
7162 if test "$linux_aio" = "yes" ; then
7163   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7164 fi
7165 if test "$linux_io_uring" = "yes" ; then
7166   echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7167   echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7168   echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7169 fi
7170 if test "$attr" = "yes" ; then
7171   echo "CONFIG_ATTR=y" >> $config_host_mak
7172 fi
7173 if test "$libattr" = "yes" ; then
7174   echo "CONFIG_LIBATTR=y" >> $config_host_mak
7175 fi
7176 if test "$virtfs" = "yes" ; then
7177   echo "CONFIG_VIRTFS=y" >> $config_host_mak
7178 fi
7179 if test "$mpath" = "yes" ; then
7180   echo "CONFIG_MPATH=y" >> $config_host_mak
7181   if test "$mpathpersist_new_api" = "yes"; then
7182     echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7183   fi
7184 fi
7185 if test "$vhost_scsi" = "yes" ; then
7186   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7187 fi
7188 if test "$vhost_net" = "yes" ; then
7189   echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7190 fi
7191 if test "$vhost_net_user" = "yes" ; then
7192   echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7193 fi
7194 if test "$vhost_crypto" = "yes" ; then
7195   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7196 fi
7197 if test "$vhost_vsock" = "yes" ; then
7198   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7199 fi
7200 if test "$vhost_kernel" = "yes" ; then
7201   echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7202 fi
7203 if test "$vhost_user" = "yes" ; then
7204   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7205 fi
7206 if test "$vhost_user_fs" = "yes" ; then
7207   echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7208 fi
7209 if test "$blobs" = "yes" ; then
7210   echo "INSTALL_BLOBS=yes" >> $config_host_mak
7211 fi
7212 if test "$iovec" = "yes" ; then
7213   echo "CONFIG_IOVEC=y" >> $config_host_mak
7214 fi
7215 if test "$preadv" = "yes" ; then
7216   echo "CONFIG_PREADV=y" >> $config_host_mak
7217 fi
7218 if test "$fdt" != "no" ; then
7219   echo "CONFIG_FDT=y" >> $config_host_mak
7220 fi
7221 if test "$membarrier" = "yes" ; then
7222   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7223 fi
7224 if test "$signalfd" = "yes" ; then
7225   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7226 fi
7227 if test "$optreset" = "yes" ; then
7228   echo "HAVE_OPTRESET=y" >> $config_host_mak
7229 fi
7230 if test "$tcg" = "yes"; then
7231   echo "CONFIG_TCG=y" >> $config_host_mak
7232   if test "$tcg_interpreter" = "yes" ; then
7233     echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7234   fi
7235 fi
7236 if test "$fdatasync" = "yes" ; then
7237   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7238 fi
7239 if test "$madvise" = "yes" ; then
7240   echo "CONFIG_MADVISE=y" >> $config_host_mak
7241 fi
7242 if test "$posix_madvise" = "yes" ; then
7243   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7244 fi
7245 if test "$posix_memalign" = "yes" ; then
7246   echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7247 fi
7248
7249 if test "$spice" = "yes" ; then
7250   echo "CONFIG_SPICE=y" >> $config_host_mak
7251 fi
7252
7253 if test "$smartcard" = "yes" ; then
7254   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7255   echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7256   echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7257 fi
7258
7259 if test "$libusb" = "yes" ; then
7260   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7261   echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7262   echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7263 fi
7264
7265 if test "$usb_redir" = "yes" ; then
7266   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7267   echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7268   echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7269 fi
7270
7271 if test "$opengl" = "yes" ; then
7272   echo "CONFIG_OPENGL=y" >> $config_host_mak
7273   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7274   if test "$opengl_dmabuf" = "yes" ; then
7275     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7276   fi
7277 fi
7278
7279 if test "$gbm" = "yes" ; then
7280     echo "CONFIG_GBM=y" >> $config_host_mak
7281     echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7282     echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7283 fi
7284
7285
7286 if test "$malloc_trim" = "yes" ; then
7287   echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7288 fi
7289
7290 if test "$avx2_opt" = "yes" ; then
7291   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7292 fi
7293
7294 if test "$avx512f_opt" = "yes" ; then
7295   echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7296 fi
7297
7298 if test "$lzo" = "yes" ; then
7299   echo "CONFIG_LZO=y" >> $config_host_mak
7300 fi
7301
7302 if test "$snappy" = "yes" ; then
7303   echo "CONFIG_SNAPPY=y" >> $config_host_mak
7304 fi
7305
7306 if test "$bzip2" = "yes" ; then
7307   echo "CONFIG_BZIP2=y" >> $config_host_mak
7308   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7309 fi
7310
7311 if test "$lzfse" = "yes" ; then
7312   echo "CONFIG_LZFSE=y" >> $config_host_mak
7313   echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7314 fi
7315
7316 if test "$zstd" = "yes" ; then
7317   echo "CONFIG_ZSTD=y" >> $config_host_mak
7318 fi
7319
7320 if test "$libiscsi" = "yes" ; then
7321   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7322   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7323   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7324 fi
7325
7326 if test "$libnfs" = "yes" ; then
7327   echo "CONFIG_LIBNFS=m" >> $config_host_mak
7328   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7329 fi
7330
7331 if test "$seccomp" = "yes"; then
7332   echo "CONFIG_SECCOMP=y" >> $config_host_mak
7333   echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7334   echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7335 fi
7336
7337 # XXX: suppress that
7338 if [ "$bsd" = "yes" ] ; then
7339   echo "CONFIG_BSD=y" >> $config_host_mak
7340 fi
7341
7342 if test "$localtime_r" = "yes" ; then
7343   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7344 fi
7345 if test "$qom_cast_debug" = "yes" ; then
7346   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7347 fi
7348 if test "$rbd" = "yes" ; then
7349   echo "CONFIG_RBD=m" >> $config_host_mak
7350   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7351   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7352 fi
7353
7354 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7355 if test "$coroutine_pool" = "yes" ; then
7356   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7357 else
7358   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7359 fi
7360
7361 if test "$debug_stack_usage" = "yes" ; then
7362   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7363 fi
7364
7365 if test "$crypto_afalg" = "yes" ; then
7366   echo "CONFIG_AF_ALG=y" >> $config_host_mak
7367 fi
7368
7369 if test "$open_by_handle_at" = "yes" ; then
7370   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7371 fi
7372
7373 if test "$linux_magic_h" = "yes" ; then
7374   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7375 fi
7376
7377 if test "$pragma_diagnostic_available" = "yes" ; then
7378   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7379 fi
7380
7381 if test "$valgrind_h" = "yes" ; then
7382   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7383 fi
7384
7385 if test "$have_asan_iface_fiber" = "yes" ; then
7386     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7387 fi
7388
7389 if test "$has_environ" = "yes" ; then
7390   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7391 fi
7392
7393 if test "$cpuid_h" = "yes" ; then
7394   echo "CONFIG_CPUID_H=y" >> $config_host_mak
7395 fi
7396
7397 if test "$int128" = "yes" ; then
7398   echo "CONFIG_INT128=y" >> $config_host_mak
7399 fi
7400
7401 if test "$atomic128" = "yes" ; then
7402   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7403 fi
7404
7405 if test "$cmpxchg128" = "yes" ; then
7406   echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7407 fi
7408
7409 if test "$atomic64" = "yes" ; then
7410   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7411 fi
7412
7413 if test "$attralias" = "yes" ; then
7414   echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7415 fi
7416
7417 if test "$getauxval" = "yes" ; then
7418   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7419 fi
7420
7421 if test "$glusterfs" = "yes" ; then
7422   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7423   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7424   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7425 fi
7426
7427 if test "$glusterfs_xlator_opt" = "yes" ; then
7428   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7429 fi
7430
7431 if test "$glusterfs_discard" = "yes" ; then
7432   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7433 fi
7434
7435 if test "$glusterfs_fallocate" = "yes" ; then
7436   echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7437 fi
7438
7439 if test "$glusterfs_zerofill" = "yes" ; then
7440   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7441 fi
7442
7443 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7444   echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7445 fi
7446
7447 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7448   echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7449 fi
7450
7451 if test "$libssh" = "yes" ; then
7452   echo "CONFIG_LIBSSH=m" >> $config_host_mak
7453   echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7454   echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7455 fi
7456
7457 if test "$live_block_migration" = "yes" ; then
7458   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7459 fi
7460
7461 if test "$tpm" = "yes"; then
7462   echo 'CONFIG_TPM=y' >> $config_host_mak
7463 fi
7464
7465 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7466 if have_backend "nop"; then
7467   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7468 fi
7469 if have_backend "simple"; then
7470   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7471   # Set the appropriate trace file.
7472   trace_file="\"$trace_file-\" FMT_pid"
7473 fi
7474 if have_backend "log"; then
7475   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7476 fi
7477 if have_backend "ust"; then
7478   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7479 fi
7480 if have_backend "dtrace"; then
7481   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7482   if test "$trace_backend_stap" = "yes" ; then
7483     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7484   fi
7485 fi
7486 if have_backend "ftrace"; then
7487   if test "$linux" = "yes" ; then
7488     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7489   else
7490     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7491   fi
7492 fi
7493 if have_backend "syslog"; then
7494   if test "$posix_syslog" = "yes" ; then
7495     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7496   else
7497     feature_not_found "syslog(trace backend)" "syslog not available"
7498   fi
7499 fi
7500 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7501
7502 if test "$rdma" = "yes" ; then
7503   echo "CONFIG_RDMA=y" >> $config_host_mak
7504   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7505 fi
7506
7507 if test "$pvrdma" = "yes" ; then
7508   echo "CONFIG_PVRDMA=y" >> $config_host_mak
7509 fi
7510
7511 if test "$have_rtnetlink" = "yes" ; then
7512   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7513 fi
7514
7515 if test "$libxml2" = "yes" ; then
7516   echo "CONFIG_LIBXML2=y" >> $config_host_mak
7517   echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7518   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7519 fi
7520
7521 if test "$replication" = "yes" ; then
7522   echo "CONFIG_REPLICATION=y" >> $config_host_mak
7523 fi
7524
7525 if test "$have_af_vsock" = "yes" ; then
7526   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7527 fi
7528
7529 if test "$have_sysmacros" = "yes" ; then
7530   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7531 fi
7532
7533 if test "$have_static_assert" = "yes" ; then
7534   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7535 fi
7536
7537 if test "$have_utmpx" = "yes" ; then
7538   echo "HAVE_UTMPX=y" >> $config_host_mak
7539 fi
7540 if test "$have_getrandom" = "yes" ; then
7541   echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7542 fi
7543 if test "$ivshmem" = "yes" ; then
7544   echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7545 fi
7546 if test "$capstone" != "no" ; then
7547   echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7548 fi
7549 if test "$debug_mutex" = "yes" ; then
7550   echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7551 fi
7552
7553 # Hold two types of flag:
7554 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
7555 #                                     a thread we have a handle to
7556 #   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7557 #                                     platform
7558 if test "$pthread_setname_np_w_tid" = "yes" ; then
7559   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7560   echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7561 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7562   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7563   echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7564 fi
7565
7566 if test "$vxhs" = "yes" ; then
7567   echo "CONFIG_VXHS=y" >> $config_host_mak
7568   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7569 fi
7570
7571 if test "$libpmem" = "yes" ; then
7572   echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7573 fi
7574
7575 if test "$bochs" = "yes" ; then
7576   echo "CONFIG_BOCHS=y" >> $config_host_mak
7577 fi
7578 if test "$cloop" = "yes" ; then
7579   echo "CONFIG_CLOOP=y" >> $config_host_mak
7580 fi
7581 if test "$dmg" = "yes" ; then
7582   echo "CONFIG_DMG=y" >> $config_host_mak
7583 fi
7584 if test "$qcow1" = "yes" ; then
7585   echo "CONFIG_QCOW1=y" >> $config_host_mak
7586 fi
7587 if test "$vdi" = "yes" ; then
7588   echo "CONFIG_VDI=y" >> $config_host_mak
7589 fi
7590 if test "$vvfat" = "yes" ; then
7591   echo "CONFIG_VVFAT=y" >> $config_host_mak
7592 fi
7593 if test "$qed" = "yes" ; then
7594   echo "CONFIG_QED=y" >> $config_host_mak
7595 fi
7596 if test "$parallels" = "yes" ; then
7597   echo "CONFIG_PARALLELS=y" >> $config_host_mak
7598 fi
7599 if test "$sheepdog" = "yes" ; then
7600   echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7601 fi
7602 if test "$fuzzing" = "yes" ; then
7603   if test "$have_fuzzer" = "yes"; then
7604     FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7605     FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7606     CFLAGS=" -fsanitize=address,fuzzer-no-link"
7607   else
7608     error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7609     exit 1
7610   fi
7611 fi
7612
7613 if test "$plugins" = "yes" ; then
7614     echo "CONFIG_PLUGIN=y" >> $config_host_mak
7615     LIBS="-ldl $LIBS"
7616     # Copy the export object list to the build dir
7617     if test "$ld_dynamic_list" = "yes" ; then
7618         echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7619         ld_symbols=qemu-plugins-ld.symbols
7620         cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7621     elif test "$ld_exported_symbols_list" = "yes" ; then
7622         echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7623         ld64_symbols=qemu-plugins-ld64.symbols
7624         echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7625         grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7626             sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7627     else
7628         error_exit \
7629             "If \$plugins=yes, either \$ld_dynamic_list or " \
7630             "\$ld_exported_symbols_list should have been set to 'yes'."
7631     fi
7632 fi
7633
7634 if test -n "$gdb_bin" ; then
7635     echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7636 fi
7637
7638 if test "$tcg_interpreter" = "yes"; then
7639   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7640 elif test "$ARCH" = "sparc64" ; then
7641   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7642 elif test "$ARCH" = "s390x" ; then
7643   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7644 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7645   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7646 elif test "$ARCH" = "ppc64" ; then
7647   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7648 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7649   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7650 else
7651   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7652 fi
7653
7654 echo "TOOLS=$tools" >> $config_host_mak
7655 echo "ROMS=$roms" >> $config_host_mak
7656 echo "MAKE=$make" >> $config_host_mak
7657 echo "INSTALL=$install" >> $config_host_mak
7658 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7659 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7660 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7661 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7662 echo "PYTHON=$python" >> $config_host_mak
7663 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7664 echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7665 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7666 echo "CC=$cc" >> $config_host_mak
7667 if $iasl -h > /dev/null 2>&1; then
7668   echo "IASL=$iasl" >> $config_host_mak
7669 fi
7670 echo "HOST_CC=$host_cc" >> $config_host_mak
7671 echo "CXX=$cxx" >> $config_host_mak
7672 echo "OBJCC=$objcc" >> $config_host_mak
7673 echo "AR=$ar" >> $config_host_mak
7674 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7675 echo "AS=$as" >> $config_host_mak
7676 echo "CCAS=$ccas" >> $config_host_mak
7677 echo "CPP=$cpp" >> $config_host_mak
7678 echo "OBJCOPY=$objcopy" >> $config_host_mak
7679 echo "LD=$ld" >> $config_host_mak
7680 echo "RANLIB=$ranlib" >> $config_host_mak
7681 echo "NM=$nm" >> $config_host_mak
7682 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7683 echo "WINDRES=$windres" >> $config_host_mak
7684 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7685 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7686 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7687 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7688 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7689 if test "$sparse" = "yes" ; then
7690   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
7691   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
7692   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
7693   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
7694   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7695 fi
7696 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7697 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7698 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7699 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7700 echo "LIBS+=$LIBS" >> $config_host_mak
7701 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7702 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7703 echo "EXESUF=$EXESUF" >> $config_host_mak
7704 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7705 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7706 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7707 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7708 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7709 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7710 if test "$gcov" = "yes" ; then
7711   echo "CONFIG_GCOV=y" >> $config_host_mak
7712   echo "GCOV=$gcov_tool" >> $config_host_mak
7713 fi
7714
7715 if test "$libudev" != "no"; then
7716     echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7717     echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7718 fi
7719 if test "$fuzzing" != "no"; then
7720     echo "CONFIG_FUZZ=y" >> $config_host_mak
7721     echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7722     echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7723 fi
7724
7725 if test "$edk2_blobs" = "yes" ; then
7726   echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7727 fi
7728
7729 # use included Linux headers
7730 if test "$linux" = "yes" ; then
7731   mkdir -p linux-headers
7732   case "$cpu" in
7733   i386|x86_64|x32)
7734     linux_arch=x86
7735     ;;
7736   ppc|ppc64|ppc64le)
7737     linux_arch=powerpc
7738     ;;
7739   s390x)
7740     linux_arch=s390
7741     ;;
7742   aarch64)
7743     linux_arch=arm64
7744     ;;
7745   mips64)
7746     linux_arch=mips
7747     ;;
7748   *)
7749     # For most CPUs the kernel architecture name and QEMU CPU name match.
7750     linux_arch="$cpu"
7751     ;;
7752   esac
7753     # For non-KVM architectures we will not have asm headers
7754     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7755       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7756     fi
7757 fi
7758
7759 for target in $target_list; do
7760 target_dir="$target"
7761 config_target_mak=$target_dir/config-target.mak
7762 target_name=$(echo $target | cut -d '-' -f 1)
7763 target_aligned_only="no"
7764 case "$target_name" in
7765   alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7766   target_aligned_only="yes"
7767   ;;
7768 esac
7769 target_bigendian="no"
7770 case "$target_name" in
7771   armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7772   target_bigendian="yes"
7773   ;;
7774 esac
7775 target_softmmu="no"
7776 target_user_only="no"
7777 target_linux_user="no"
7778 target_bsd_user="no"
7779 case "$target" in
7780   ${target_name}-softmmu)
7781     target_softmmu="yes"
7782     ;;
7783   ${target_name}-linux-user)
7784     target_user_only="yes"
7785     target_linux_user="yes"
7786     ;;
7787   ${target_name}-bsd-user)
7788     target_user_only="yes"
7789     target_bsd_user="yes"
7790     ;;
7791   *)
7792     error_exit "Target '$target' not recognised"
7793     exit 1
7794     ;;
7795 esac
7796
7797 mkdir -p $target_dir
7798 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7799
7800 bflt="no"
7801 mttcg="no"
7802 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7803 gdb_xml_files=""
7804
7805 TARGET_ARCH="$target_name"
7806 TARGET_BASE_ARCH=""
7807 TARGET_ABI_DIR=""
7808
7809 case "$target_name" in
7810   i386)
7811     mttcg="yes"
7812         gdb_xml_files="i386-32bit.xml"
7813     TARGET_SYSTBL_ABI=i386
7814   ;;
7815   x86_64)
7816     TARGET_BASE_ARCH=i386
7817     TARGET_SYSTBL_ABI=common,64
7818     mttcg="yes"
7819         gdb_xml_files="i386-64bit.xml"
7820   ;;
7821   alpha)
7822     mttcg="yes"
7823     TARGET_SYSTBL_ABI=common
7824   ;;
7825   arm|armeb)
7826     TARGET_ARCH=arm
7827     TARGET_SYSTBL_ABI=common,oabi
7828     bflt="yes"
7829     mttcg="yes"
7830     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7831   ;;
7832   aarch64|aarch64_be)
7833     TARGET_ARCH=aarch64
7834     TARGET_BASE_ARCH=arm
7835     bflt="yes"
7836     mttcg="yes"
7837     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7838   ;;
7839   cris)
7840   ;;
7841   hppa)
7842     mttcg="yes"
7843     TARGET_SYSTBL_ABI=common,32
7844   ;;
7845   lm32)
7846   ;;
7847   m68k)
7848     bflt="yes"
7849     gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
7850     TARGET_SYSTBL_ABI=common
7851   ;;
7852   microblaze|microblazeel)
7853     TARGET_ARCH=microblaze
7854     TARGET_SYSTBL_ABI=common
7855     bflt="yes"
7856     echo "TARGET_ABI32=y" >> $config_target_mak
7857   ;;
7858   mips|mipsel)
7859     mttcg="yes"
7860     TARGET_ARCH=mips
7861     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7862     TARGET_SYSTBL_ABI=o32
7863   ;;
7864   mipsn32|mipsn32el)
7865     mttcg="yes"
7866     TARGET_ARCH=mips64
7867     TARGET_BASE_ARCH=mips
7868     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7869     echo "TARGET_ABI32=y" >> $config_target_mak
7870     TARGET_SYSTBL_ABI=n32
7871   ;;
7872   mips64|mips64el)
7873     mttcg="no"
7874     TARGET_ARCH=mips64
7875     TARGET_BASE_ARCH=mips
7876     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7877     TARGET_SYSTBL_ABI=n64
7878   ;;
7879   moxie)
7880   ;;
7881   nios2)
7882   ;;
7883   or1k)
7884     TARGET_ARCH=openrisc
7885     TARGET_BASE_ARCH=openrisc
7886   ;;
7887   ppc)
7888     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7889     TARGET_SYSTBL_ABI=common,nospu,32
7890   ;;
7891   ppc64)
7892     TARGET_BASE_ARCH=ppc
7893     TARGET_ABI_DIR=ppc
7894     TARGET_SYSTBL_ABI=common,nospu,64
7895     mttcg=yes
7896     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7897   ;;
7898   ppc64le)
7899     TARGET_ARCH=ppc64
7900     TARGET_BASE_ARCH=ppc
7901     TARGET_ABI_DIR=ppc
7902     TARGET_SYSTBL_ABI=common,nospu,64
7903     mttcg=yes
7904     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7905   ;;
7906   ppc64abi32)
7907     TARGET_ARCH=ppc64
7908     TARGET_BASE_ARCH=ppc
7909     TARGET_ABI_DIR=ppc
7910     TARGET_SYSTBL_ABI=common,nospu,32
7911     echo "TARGET_ABI32=y" >> $config_target_mak
7912     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7913   ;;
7914   riscv32)
7915     TARGET_BASE_ARCH=riscv
7916     TARGET_ABI_DIR=riscv
7917     mttcg=yes
7918     gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
7919   ;;
7920   riscv64)
7921     TARGET_BASE_ARCH=riscv
7922     TARGET_ABI_DIR=riscv
7923     mttcg=yes
7924     gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
7925   ;;
7926   rx)
7927     TARGET_ARCH=rx
7928     bflt="yes"
7929     target_compiler=$cross_cc_rx
7930     gdb_xml_files="rx-core.xml"
7931   ;;
7932   sh4|sh4eb)
7933     TARGET_ARCH=sh4
7934     TARGET_SYSTBL_ABI=common
7935     bflt="yes"
7936   ;;
7937   sparc)
7938     TARGET_SYSTBL_ABI=common,32
7939   ;;
7940   sparc64)
7941     TARGET_BASE_ARCH=sparc
7942     TARGET_SYSTBL_ABI=common,64
7943   ;;
7944   sparc32plus)
7945     TARGET_ARCH=sparc64
7946     TARGET_BASE_ARCH=sparc
7947     TARGET_ABI_DIR=sparc
7948     TARGET_SYSTBL_ABI=common,32
7949     echo "TARGET_ABI32=y" >> $config_target_mak
7950   ;;
7951   s390x)
7952     TARGET_SYSTBL_ABI=common,64
7953     mttcg=yes
7954     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7955   ;;
7956   tilegx)
7957   ;;
7958   tricore)
7959   ;;
7960   unicore32)
7961   ;;
7962   xtensa|xtensaeb)
7963     TARGET_ARCH=xtensa
7964     TARGET_SYSTBL_ABI=common
7965     bflt="yes"
7966     mttcg="yes"
7967   ;;
7968   *)
7969     error_exit "Unsupported target CPU"
7970   ;;
7971 esac
7972 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7973 if [ "$TARGET_BASE_ARCH" = "" ]; then
7974   TARGET_BASE_ARCH=$TARGET_ARCH
7975 fi
7976
7977 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7978
7979 upper() {
7980     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7981 }
7982
7983 target_arch_name="$(upper $TARGET_ARCH)"
7984 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7985 echo "TARGET_NAME=$target_name" >> $config_target_mak
7986 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7987 if [ "$TARGET_ABI_DIR" = "" ]; then
7988   TARGET_ABI_DIR=$TARGET_ARCH
7989 fi
7990 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7991 if [ "$HOST_VARIANT_DIR" != "" ]; then
7992     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7993 fi
7994 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7995     echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7996 fi
7997
7998 if supported_xen_target $target; then
7999     echo "CONFIG_XEN=y" >> $config_target_mak
8000     echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
8001     if test "$xen_pci_passthrough" = yes; then
8002         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8003     fi
8004 else
8005     echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
8006 fi
8007 if supported_kvm_target $target; then
8008     echo "CONFIG_KVM=y" >> $config_target_mak
8009     echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8010 else
8011     echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
8012 fi
8013 if supported_hax_target $target; then
8014     echo "CONFIG_HAX=y" >> $config_target_mak
8015 fi
8016 if supported_hvf_target $target; then
8017     echo "CONFIG_HVF=y" >> $config_target_mak
8018 fi
8019 if supported_whpx_target $target; then
8020     echo "CONFIG_WHPX=y" >> $config_target_mak
8021 fi
8022 if test "$target_aligned_only" = "yes" ; then
8023   echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8024 fi
8025 if test "$target_bigendian" = "yes" ; then
8026   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8027 fi
8028 if test "$target_softmmu" = "yes" ; then
8029   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8030   if test "$mttcg" = "yes" ; then
8031     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8032   fi
8033 fi
8034 if test "$target_user_only" = "yes" ; then
8035   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8036   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8037 fi
8038 if test "$target_linux_user" = "yes" ; then
8039   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8040 fi
8041 list=""
8042 if test ! -z "$gdb_xml_files" ; then
8043   for x in $gdb_xml_files; do
8044     list="$list $source_path/gdb-xml/$x"
8045   done
8046   echo "TARGET_XML_FILES=$list" >> $config_target_mak
8047 fi
8048
8049 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8050   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8051 fi
8052 if test "$target_bsd_user" = "yes" ; then
8053   echo "CONFIG_BSD_USER=y" >> $config_target_mak
8054 fi
8055
8056
8057 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8058
8059 cflags=""
8060 ldflags=""
8061
8062 disas_config() {
8063   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8064   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8065 }
8066
8067 for i in $ARCH $TARGET_BASE_ARCH ; do
8068   case "$i" in
8069   alpha)
8070     disas_config "ALPHA"
8071   ;;
8072   aarch64)
8073     if test -n "${cxx}"; then
8074       disas_config "ARM_A64"
8075     fi
8076   ;;
8077   arm)
8078     disas_config "ARM"
8079     if test -n "${cxx}"; then
8080       disas_config "ARM_A64"
8081     fi
8082   ;;
8083   cris)
8084     disas_config "CRIS"
8085   ;;
8086   hppa)
8087     disas_config "HPPA"
8088   ;;
8089   i386|x86_64|x32)
8090     disas_config "I386"
8091   ;;
8092   lm32)
8093     disas_config "LM32"
8094   ;;
8095   m68k)
8096     disas_config "M68K"
8097   ;;
8098   microblaze*)
8099     disas_config "MICROBLAZE"
8100   ;;
8101   mips*)
8102     disas_config "MIPS"
8103     if test -n "${cxx}"; then
8104       disas_config "NANOMIPS"
8105     fi
8106   ;;
8107   moxie*)
8108     disas_config "MOXIE"
8109   ;;
8110   nios2)
8111     disas_config "NIOS2"
8112   ;;
8113   or1k)
8114     disas_config "OPENRISC"
8115   ;;
8116   ppc*)
8117     disas_config "PPC"
8118   ;;
8119   riscv*)
8120     disas_config "RISCV"
8121   ;;
8122   rx)
8123     disas_config "RX"
8124   ;;
8125   s390*)
8126     disas_config "S390"
8127   ;;
8128   sh4)
8129     disas_config "SH4"
8130   ;;
8131   sparc*)
8132     disas_config "SPARC"
8133   ;;
8134   xtensa*)
8135     disas_config "XTENSA"
8136   ;;
8137   esac
8138 done
8139 if test "$tcg_interpreter" = "yes" ; then
8140   disas_config "TCI"
8141 fi
8142
8143 case "$ARCH" in
8144 alpha)
8145   # Ensure there's only a single GP
8146   cflags="-msmall-data $cflags"
8147 ;;
8148 esac
8149
8150 if test "$gprof" = "yes" ; then
8151   if test "$target_linux_user" = "yes" ; then
8152     cflags="-p $cflags"
8153     ldflags="-p $ldflags"
8154   fi
8155   if test "$target_softmmu" = "yes" ; then
8156     ldflags="-p $ldflags"
8157     echo "GPROF_CFLAGS=-p" >> $config_target_mak
8158   fi
8159 fi
8160
8161 # Newer kernels on s390 check for an S390_PGSTE program header and
8162 # enable the pgste page table extensions in that case. This makes
8163 # the vm.allocate_pgste sysctl unnecessary. We enable this program
8164 # header if
8165 #  - we build on s390x
8166 #  - we build the system emulation for s390x (qemu-system-s390x)
8167 #  - KVM is enabled
8168 #  - the linker supports --s390-pgste
8169 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8170         test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8171     if ld_has --s390-pgste ; then
8172         ldflags="-Wl,--s390-pgste $ldflags"
8173     fi
8174 fi
8175
8176 echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8177 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8178
8179 done # for target in $targets
8180
8181 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8182 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8183
8184 if [ "$fdt" = "git" ]; then
8185   echo "config-host.h: dtc/all" >> $config_host_mak
8186 fi
8187 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8188   echo "config-host.h: capstone/all" >> $config_host_mak
8189 fi
8190 if test -n "$LIBCAPSTONE"; then
8191   echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8192 fi
8193
8194 if test "$numa" = "yes"; then
8195   echo "CONFIG_NUMA=y" >> $config_host_mak
8196 fi
8197
8198 if test "$ccache_cpp2" = "yes"; then
8199   echo "export CCACHE_CPP2=y" >> $config_host_mak
8200 fi
8201
8202 # If we're using a separate build tree, set it up now.
8203 # DIRS are directories which we simply mkdir in the build tree;
8204 # LINKS are things to symlink back into the source tree
8205 # (these can be both files and directories).
8206 # Caution: do not add files or directories here using wildcards. This
8207 # will result in problems later if a new file matching the wildcard is
8208 # added to the source tree -- nothing will cause configure to be rerun
8209 # so the build tree will be missing the link back to the new file, and
8210 # tests might fail. Prefer to keep the relevant files in their own
8211 # directory and symlink the directory instead.
8212 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8213 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8214 DIRS="$DIRS docs docs/interop fsdev scsi"
8215 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8216 DIRS="$DIRS roms/seabios roms/vgabios"
8217 LINKS="Makefile"
8218 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8219 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
8220 LINKS="$LINKS tests/plugin/Makefile"
8221 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8222 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8223 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8224 LINKS="$LINKS pc-bios/qemu-icon.bmp"
8225 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8226 LINKS="$LINKS tests/acceptance tests/data"
8227 LINKS="$LINKS tests/qemu-iotests/check"
8228 LINKS="$LINKS python"
8229 for bios_file in \
8230     $source_path/pc-bios/*.bin \
8231     $source_path/pc-bios/*.lid \
8232     $source_path/pc-bios/*.rom \
8233     $source_path/pc-bios/*.dtb \
8234     $source_path/pc-bios/*.img \
8235     $source_path/pc-bios/openbios-* \
8236     $source_path/pc-bios/u-boot.* \
8237     $source_path/pc-bios/edk2-*.fd.bz2 \
8238     $source_path/pc-bios/palcode-*
8239 do
8240     LINKS="$LINKS pc-bios/$(basename $bios_file)"
8241 done
8242 mkdir -p $DIRS
8243 for f in $LINKS ; do
8244     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8245         symlink "$source_path/$f" "$f"
8246     fi
8247 done
8248
8249 (for i in $cross_cc_vars; do
8250   export $i
8251 done
8252 export target_list source_path use_containers
8253 $source_path/tests/tcg/configure.sh)
8254
8255 # temporary config to build submodules
8256 for rom in seabios vgabios ; do
8257     config_mak=roms/$rom/config.mak
8258     echo "# Automatically generated by configure - do not modify" > $config_mak
8259     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8260     echo "AS=$as" >> $config_mak
8261     echo "CCAS=$ccas" >> $config_mak
8262     echo "CC=$cc" >> $config_mak
8263     echo "BCC=bcc" >> $config_mak
8264     echo "CPP=$cpp" >> $config_mak
8265     echo "OBJCOPY=objcopy" >> $config_mak
8266     echo "IASL=$iasl" >> $config_mak
8267     echo "LD=$ld" >> $config_mak
8268     echo "RANLIB=$ranlib" >> $config_mak
8269 done
8270
8271 # set up qemu-iotests in this build directory
8272 iotests_common_env="tests/qemu-iotests/common.env"
8273
8274 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8275 echo >> "$iotests_common_env"
8276 echo "export PYTHON='$python'" >> "$iotests_common_env"
8277
8278 # Save the configure command line for later reuse.
8279 cat <<EOD >config.status
8280 #!/bin/sh
8281 # Generated by configure.
8282 # Run this file to recreate the current configuration.
8283 # Compiler output produced by configure, useful for debugging
8284 # configure, is in config.log if it exists.
8285 EOD
8286
8287 preserve_env() {
8288     envname=$1
8289
8290     eval envval=\$$envname
8291
8292     if test -n "$envval"
8293     then
8294         echo "$envname='$envval'" >> config.status
8295         echo "export $envname" >> config.status
8296     else
8297         echo "unset $envname" >> config.status
8298     fi
8299 }
8300
8301 # Preserve various env variables that influence what
8302 # features/build target configure will detect
8303 preserve_env AR
8304 preserve_env AS
8305 preserve_env CC
8306 preserve_env CPP
8307 preserve_env CXX
8308 preserve_env INSTALL
8309 preserve_env LD
8310 preserve_env LD_LIBRARY_PATH
8311 preserve_env LIBTOOL
8312 preserve_env MAKE
8313 preserve_env NM
8314 preserve_env OBJCOPY
8315 preserve_env PATH
8316 preserve_env PKG_CONFIG
8317 preserve_env PKG_CONFIG_LIBDIR
8318 preserve_env PKG_CONFIG_PATH
8319 preserve_env PYTHON
8320 preserve_env SDL2_CONFIG
8321 preserve_env SMBD
8322 preserve_env STRIP
8323 preserve_env WINDRES
8324
8325 printf "exec" >>config.status
8326 printf " '%s'" "$0" "$@" >>config.status
8327 echo ' "$@"' >>config.status
8328 chmod +x config.status
8329
8330 rm -r "$TMPDIR1"
This page took 0.455009 seconds and 4 git commands to generate.