]> Git Repo - qemu.git/blob - configure
pnv/psi: Correct the pnv-psi* devices not to be sysbus devices
[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) {
4591     void *tmp = malloc(1);
4592     if (tmp != NULL) {
4593         return 0;
4594     }
4595     return 1;
4596 }
4597 EOF
4598
4599   if compile_prog "" "-ltcmalloc" ; then
4600     LIBS="-ltcmalloc $LIBS"
4601   else
4602     feature_not_found "tcmalloc" "install gperftools devel"
4603   fi
4604 fi
4605
4606 ##########################################
4607 # jemalloc probe
4608
4609 if test "$jemalloc" = "yes" ; then
4610   cat > $TMPC << EOF
4611 #include <stdlib.h>
4612 int main(void) {
4613     void *tmp = malloc(1);
4614     if (tmp != NULL) {
4615         return 0;
4616     }
4617     return 1;
4618 }
4619 EOF
4620
4621   if compile_prog "" "-ljemalloc" ; then
4622     LIBS="-ljemalloc $LIBS"
4623   else
4624     feature_not_found "jemalloc" "install jemalloc devel"
4625   fi
4626 fi
4627
4628 ##########################################
4629 # signalfd probe
4630 signalfd="no"
4631 cat > $TMPC << EOF
4632 #include <unistd.h>
4633 #include <sys/syscall.h>
4634 #include <signal.h>
4635 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4636 EOF
4637
4638 if compile_prog "" "" ; then
4639   signalfd=yes
4640 fi
4641
4642 # check if optreset global is declared by <getopt.h>
4643 optreset="no"
4644 cat > $TMPC << EOF
4645 #include <getopt.h>
4646 int main(void) { return optreset; }
4647 EOF
4648
4649 if compile_prog "" "" ; then
4650   optreset=yes
4651 fi
4652
4653 # check if eventfd is supported
4654 eventfd=no
4655 cat > $TMPC << EOF
4656 #include <sys/eventfd.h>
4657
4658 int main(void)
4659 {
4660     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4661 }
4662 EOF
4663 if compile_prog "" "" ; then
4664   eventfd=yes
4665 fi
4666
4667 # check if memfd is supported
4668 memfd=no
4669 cat > $TMPC << EOF
4670 #include <sys/mman.h>
4671
4672 int main(void)
4673 {
4674     return memfd_create("foo", MFD_ALLOW_SEALING);
4675 }
4676 EOF
4677 if compile_prog "" "" ; then
4678   memfd=yes
4679 fi
4680
4681 # check for usbfs
4682 have_usbfs=no
4683 if test "$linux_user" = "yes"; then
4684   cat > $TMPC << EOF
4685 #include <linux/usbdevice_fs.h>
4686
4687 #ifndef USBDEVFS_GET_CAPABILITIES
4688 #error "USBDEVFS_GET_CAPABILITIES undefined"
4689 #endif
4690
4691 #ifndef USBDEVFS_DISCONNECT_CLAIM
4692 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4693 #endif
4694
4695 int main(void)
4696 {
4697     return 0;
4698 }
4699 EOF
4700   if compile_prog "" ""; then
4701     have_usbfs=yes
4702   fi
4703 fi
4704
4705 # check for fallocate
4706 fallocate=no
4707 cat > $TMPC << EOF
4708 #include <fcntl.h>
4709
4710 int main(void)
4711 {
4712     fallocate(0, 0, 0, 0);
4713     return 0;
4714 }
4715 EOF
4716 if compile_prog "" "" ; then
4717   fallocate=yes
4718 fi
4719
4720 # check for fallocate hole punching
4721 fallocate_punch_hole=no
4722 cat > $TMPC << EOF
4723 #include <fcntl.h>
4724 #include <linux/falloc.h>
4725
4726 int main(void)
4727 {
4728     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4729     return 0;
4730 }
4731 EOF
4732 if compile_prog "" "" ; then
4733   fallocate_punch_hole=yes
4734 fi
4735
4736 # check that fallocate supports range zeroing inside the file
4737 fallocate_zero_range=no
4738 cat > $TMPC << EOF
4739 #include <fcntl.h>
4740 #include <linux/falloc.h>
4741
4742 int main(void)
4743 {
4744     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4745     return 0;
4746 }
4747 EOF
4748 if compile_prog "" "" ; then
4749   fallocate_zero_range=yes
4750 fi
4751
4752 # check for posix_fallocate
4753 posix_fallocate=no
4754 cat > $TMPC << EOF
4755 #include <fcntl.h>
4756
4757 int main(void)
4758 {
4759     posix_fallocate(0, 0, 0);
4760     return 0;
4761 }
4762 EOF
4763 if compile_prog "" "" ; then
4764     posix_fallocate=yes
4765 fi
4766
4767 # check for sync_file_range
4768 sync_file_range=no
4769 cat > $TMPC << EOF
4770 #include <fcntl.h>
4771
4772 int main(void)
4773 {
4774     sync_file_range(0, 0, 0, 0);
4775     return 0;
4776 }
4777 EOF
4778 if compile_prog "" "" ; then
4779   sync_file_range=yes
4780 fi
4781
4782 # check for linux/fiemap.h and FS_IOC_FIEMAP
4783 fiemap=no
4784 cat > $TMPC << EOF
4785 #include <sys/ioctl.h>
4786 #include <linux/fs.h>
4787 #include <linux/fiemap.h>
4788
4789 int main(void)
4790 {
4791     ioctl(0, FS_IOC_FIEMAP, 0);
4792     return 0;
4793 }
4794 EOF
4795 if compile_prog "" "" ; then
4796   fiemap=yes
4797 fi
4798
4799 # check for dup3
4800 dup3=no
4801 cat > $TMPC << EOF
4802 #include <unistd.h>
4803
4804 int main(void)
4805 {
4806     dup3(0, 0, 0);
4807     return 0;
4808 }
4809 EOF
4810 if compile_prog "" "" ; then
4811   dup3=yes
4812 fi
4813
4814 # check for ppoll support
4815 ppoll=no
4816 cat > $TMPC << EOF
4817 #include <poll.h>
4818
4819 int main(void)
4820 {
4821     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4822     ppoll(&pfd, 1, 0, 0);
4823     return 0;
4824 }
4825 EOF
4826 if compile_prog "" "" ; then
4827   ppoll=yes
4828 fi
4829
4830 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4831 prctl_pr_set_timerslack=no
4832 cat > $TMPC << EOF
4833 #include <sys/prctl.h>
4834
4835 int main(void)
4836 {
4837     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4838     return 0;
4839 }
4840 EOF
4841 if compile_prog "" "" ; then
4842   prctl_pr_set_timerslack=yes
4843 fi
4844
4845 # check for epoll support
4846 epoll=no
4847 cat > $TMPC << EOF
4848 #include <sys/epoll.h>
4849
4850 int main(void)
4851 {
4852     epoll_create(0);
4853     return 0;
4854 }
4855 EOF
4856 if compile_prog "" "" ; then
4857   epoll=yes
4858 fi
4859
4860 # epoll_create1 is a later addition
4861 # so we must check separately for its presence
4862 epoll_create1=no
4863 cat > $TMPC << EOF
4864 #include <sys/epoll.h>
4865
4866 int main(void)
4867 {
4868     /* Note that we use epoll_create1 as a value, not as
4869      * a function being called. This is necessary so that on
4870      * old SPARC glibc versions where the function was present in
4871      * the library but not declared in the header file we will
4872      * fail the configure check. (Otherwise we will get a compiler
4873      * warning but not an error, and will proceed to fail the
4874      * qemu compile where we compile with -Werror.)
4875      */
4876     return (int)(uintptr_t)&epoll_create1;
4877 }
4878 EOF
4879 if compile_prog "" "" ; then
4880   epoll_create1=yes
4881 fi
4882
4883 # check for sendfile support
4884 sendfile=no
4885 cat > $TMPC << EOF
4886 #include <sys/sendfile.h>
4887
4888 int main(void)
4889 {
4890     return sendfile(0, 0, 0, 0);
4891 }
4892 EOF
4893 if compile_prog "" "" ; then
4894   sendfile=yes
4895 fi
4896
4897 # check for timerfd support (glibc 2.8 and newer)
4898 timerfd=no
4899 cat > $TMPC << EOF
4900 #include <sys/timerfd.h>
4901
4902 int main(void)
4903 {
4904     return(timerfd_create(CLOCK_REALTIME, 0));
4905 }
4906 EOF
4907 if compile_prog "" "" ; then
4908   timerfd=yes
4909 fi
4910
4911 # check for setns and unshare support
4912 setns=no
4913 cat > $TMPC << EOF
4914 #include <sched.h>
4915
4916 int main(void)
4917 {
4918     int ret;
4919     ret = setns(0, 0);
4920     ret = unshare(0);
4921     return ret;
4922 }
4923 EOF
4924 if compile_prog "" "" ; then
4925   setns=yes
4926 fi
4927
4928 # clock_adjtime probe
4929 clock_adjtime=no
4930 cat > $TMPC <<EOF
4931 #include <time.h>
4932
4933 int main(void)
4934 {
4935     return clock_adjtime(0, 0);
4936 }
4937 EOF
4938 clock_adjtime=no
4939 if compile_prog "" "" ; then
4940   clock_adjtime=yes
4941 fi
4942
4943 # syncfs probe
4944 syncfs=no
4945 cat > $TMPC <<EOF
4946 #include <unistd.h>
4947
4948 int main(void)
4949 {
4950     return syncfs(0);
4951 }
4952 EOF
4953 syncfs=no
4954 if compile_prog "" "" ; then
4955   syncfs=yes
4956 fi
4957
4958 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4959 kcov=no
4960 if check_include sys/kcov.h ; then
4961     kcov=yes
4962 fi
4963
4964 # If we're making warnings fatal, apply this to Sphinx runs as well
4965 sphinx_werror=""
4966 if test "$werror" = "yes"; then
4967     sphinx_werror="-W"
4968 fi
4969
4970 # Check we have a new enough version of sphinx-build
4971 has_sphinx_build() {
4972     # This is a bit awkward but works: create a trivial document and
4973     # try to run it with our configuration file (which enforces a
4974     # version requirement). This will fail if either
4975     # sphinx-build doesn't exist at all or if it is too old.
4976     mkdir -p "$TMPDIR1/sphinx"
4977     touch "$TMPDIR1/sphinx/index.rst"
4978     "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4979                     -b html "$TMPDIR1/sphinx" \
4980                     "$TMPDIR1/sphinx/out"  >> config.log 2>&1
4981 }
4982
4983 # Check if tools are available to build documentation.
4984 if test "$docs" != "no" ; then
4985   if has_sphinx_build; then
4986     sphinx_ok=yes
4987   else
4988     sphinx_ok=no
4989   fi
4990   if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
4991     docs=yes
4992   else
4993     if test "$docs" = "yes" ; then
4994       if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4995         echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4996       fi
4997       feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
4998     fi
4999     docs=no
5000   fi
5001 fi
5002
5003 # Search for bswap_32 function
5004 byteswap_h=no
5005 cat > $TMPC << EOF
5006 #include <byteswap.h>
5007 int main(void) { return bswap_32(0); }
5008 EOF
5009 if compile_prog "" "" ; then
5010   byteswap_h=yes
5011 fi
5012
5013 # Search for bswap32 function
5014 bswap_h=no
5015 cat > $TMPC << EOF
5016 #include <sys/endian.h>
5017 #include <sys/types.h>
5018 #include <machine/bswap.h>
5019 int main(void) { return bswap32(0); }
5020 EOF
5021 if compile_prog "" "" ; then
5022   bswap_h=yes
5023 fi
5024
5025 ##########################################
5026 # Do we have libiscsi >= 1.9.0
5027 if test "$libiscsi" != "no" ; then
5028   if $pkg_config --atleast-version=1.9.0 libiscsi; then
5029     libiscsi="yes"
5030     libiscsi_cflags=$($pkg_config --cflags libiscsi)
5031     libiscsi_libs=$($pkg_config --libs libiscsi)
5032   else
5033     if test "$libiscsi" = "yes" ; then
5034       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5035     fi
5036     libiscsi="no"
5037   fi
5038 fi
5039
5040 ##########################################
5041 # Do we need libm
5042 cat > $TMPC << EOF
5043 #include <math.h>
5044 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5045 EOF
5046 if compile_prog "" "" ; then
5047   :
5048 elif compile_prog "" "-lm" ; then
5049   LIBS="-lm $LIBS"
5050   libs_qga="-lm $libs_qga"
5051 else
5052   error_exit "libm check failed"
5053 fi
5054
5055 ##########################################
5056 # Do we need librt
5057 # uClibc provides 2 versions of clock_gettime(), one with realtime
5058 # support and one without. This means that the clock_gettime() don't
5059 # need -lrt. We still need it for timer_create() so we check for this
5060 # function in addition.
5061 cat > $TMPC <<EOF
5062 #include <signal.h>
5063 #include <time.h>
5064 int main(void) {
5065   timer_create(CLOCK_REALTIME, NULL, NULL);
5066   return clock_gettime(CLOCK_REALTIME, NULL);
5067 }
5068 EOF
5069
5070 if compile_prog "" "" ; then
5071   :
5072 # we need pthread for static linking. use previous pthread test result
5073 elif compile_prog "" "$pthread_lib -lrt" ; then
5074   LIBS="$LIBS -lrt"
5075   libs_qga="$libs_qga -lrt"
5076 fi
5077
5078 # Check whether we need to link libutil for openpty()
5079 cat > $TMPC << EOF
5080 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5081 int main(void) { return openpty(0, 0, 0, 0, 0); }
5082 EOF
5083
5084 if ! compile_prog "" "" ; then
5085   if compile_prog "" "-lutil" ; then
5086     libs_softmmu="-lutil $libs_softmmu"
5087     libs_tools="-lutil $libs_tools"
5088   fi
5089 fi
5090
5091 ##########################################
5092 # spice probe
5093 if test "$spice" != "no" ; then
5094   cat > $TMPC << EOF
5095 #include <spice.h>
5096 int main(void) { spice_server_new(); return 0; }
5097 EOF
5098   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5099   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5100   if $pkg_config --atleast-version=0.12.5 spice-server && \
5101      $pkg_config --atleast-version=0.12.3 spice-protocol && \
5102      compile_prog "$spice_cflags" "$spice_libs" ; then
5103     spice="yes"
5104     libs_softmmu="$libs_softmmu $spice_libs"
5105     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5106     spice_protocol_version=$($pkg_config --modversion spice-protocol)
5107     spice_server_version=$($pkg_config --modversion spice-server)
5108   else
5109     if test "$spice" = "yes" ; then
5110       feature_not_found "spice" \
5111           "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5112     fi
5113     spice="no"
5114   fi
5115 fi
5116
5117 # check for smartcard support
5118 if test "$smartcard" != "no"; then
5119     if $pkg_config --atleast-version=2.5.1 libcacard; then
5120         libcacard_cflags=$($pkg_config --cflags libcacard)
5121         libcacard_libs=$($pkg_config --libs libcacard)
5122         smartcard="yes"
5123     else
5124         if test "$smartcard" = "yes"; then
5125             feature_not_found "smartcard" "Install libcacard devel"
5126         fi
5127         smartcard="no"
5128     fi
5129 fi
5130
5131 # check for libusb
5132 if test "$libusb" != "no" ; then
5133     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5134         libusb="yes"
5135         libusb_cflags=$($pkg_config --cflags libusb-1.0)
5136         libusb_libs=$($pkg_config --libs libusb-1.0)
5137     else
5138         if test "$libusb" = "yes"; then
5139             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5140         fi
5141         libusb="no"
5142     fi
5143 fi
5144
5145 # check for usbredirparser for usb network redirection support
5146 if test "$usb_redir" != "no" ; then
5147     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5148         usb_redir="yes"
5149         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5150         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5151     else
5152         if test "$usb_redir" = "yes"; then
5153             feature_not_found "usb-redir" "Install usbredir devel"
5154         fi
5155         usb_redir="no"
5156     fi
5157 fi
5158
5159 ##########################################
5160 # check if we have VSS SDK headers for win
5161
5162 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5163         test "$vss_win32_sdk" != "no" ; then
5164   case "$vss_win32_sdk" in
5165     "")   vss_win32_include="-isystem $source_path" ;;
5166     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5167           # handle path with spaces. So we symlink the headers into ".sdk/vss".
5168           vss_win32_include="-isystem $source_path/.sdk/vss"
5169           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5170           ;;
5171     *)    vss_win32_include="-isystem $vss_win32_sdk"
5172   esac
5173   cat > $TMPC << EOF
5174 #define __MIDL_user_allocate_free_DEFINED__
5175 #include <inc/win2003/vss.h>
5176 int main(void) { return VSS_CTX_BACKUP; }
5177 EOF
5178   if compile_prog "$vss_win32_include" "" ; then
5179     guest_agent_with_vss="yes"
5180     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5181     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5182     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5183   else
5184     if test "$vss_win32_sdk" != "" ; then
5185       echo "ERROR: Please download and install Microsoft VSS SDK:"
5186       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5187       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5188       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
5189       echo "ERROR: The headers are extracted in the directory \`inc'."
5190       feature_not_found "VSS support"
5191     fi
5192     guest_agent_with_vss="no"
5193   fi
5194 fi
5195
5196 ##########################################
5197 # lookup Windows platform SDK (if not specified)
5198 # The SDK is needed only to build .tlb (type library) file of guest agent
5199 # VSS provider from the source. It is usually unnecessary because the
5200 # pre-compiled .tlb file is included.
5201
5202 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5203         test "$guest_agent_with_vss" = "yes" ; then
5204   if test -z "$win_sdk"; then
5205     programfiles="$PROGRAMFILES"
5206     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5207     if test -n "$programfiles"; then
5208       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5209     else
5210       feature_not_found "Windows SDK"
5211     fi
5212   elif test "$win_sdk" = "no"; then
5213     win_sdk=""
5214   fi
5215 fi
5216
5217 ##########################################
5218 # check if mingw environment provides a recent ntddscsi.h
5219 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5220   cat > $TMPC << EOF
5221 #include <windows.h>
5222 #include <ntddscsi.h>
5223 int main(void) {
5224 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5225 #error Missing required ioctl definitions
5226 #endif
5227   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5228   return addr.Lun;
5229 }
5230 EOF
5231   if compile_prog "" "" ; then
5232     guest_agent_ntddscsi=yes
5233     libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5234   fi
5235 fi
5236
5237 ##########################################
5238 # virgl renderer probe
5239
5240 if test "$virglrenderer" != "no" ; then
5241   cat > $TMPC << EOF
5242 #include <virglrenderer.h>
5243 int main(void) { virgl_renderer_poll(); return 0; }
5244 EOF
5245   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5246   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5247   virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5248   if $pkg_config virglrenderer >/dev/null 2>&1 && \
5249      compile_prog "$virgl_cflags" "$virgl_libs" ; then
5250     virglrenderer="yes"
5251   else
5252     if test "$virglrenderer" = "yes" ; then
5253       feature_not_found "virglrenderer"
5254     fi
5255     virglrenderer="no"
5256   fi
5257 fi
5258
5259 ##########################################
5260 # capstone
5261
5262 case "$capstone" in
5263   "" | yes)
5264     if $pkg_config capstone; then
5265       capstone=system
5266     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5267       capstone=git
5268     elif test -e "${source_path}/capstone/Makefile" ; then
5269       capstone=internal
5270     elif test -z "$capstone" ; then
5271       capstone=no
5272     else
5273       feature_not_found "capstone" "Install capstone devel or git submodule"
5274     fi
5275     ;;
5276
5277   system)
5278     if ! $pkg_config capstone; then
5279       feature_not_found "capstone" "Install capstone devel"
5280     fi
5281     ;;
5282 esac
5283
5284 case "$capstone" in
5285   git | internal)
5286     if test "$capstone" = git; then
5287       git_submodules="${git_submodules} capstone"
5288     fi
5289     mkdir -p capstone
5290     QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5291     if test "$mingw32" = "yes"; then
5292       LIBCAPSTONE=capstone.lib
5293     else
5294       LIBCAPSTONE=libcapstone.a
5295     fi
5296     libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5297     ;;
5298
5299   system)
5300     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5301     libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5302     ;;
5303
5304   no)
5305     ;;
5306   *)
5307     error_exit "Unknown state for capstone: $capstone"
5308     ;;
5309 esac
5310
5311 ##########################################
5312 # check if we have fdatasync
5313
5314 fdatasync=no
5315 cat > $TMPC << EOF
5316 #include <unistd.h>
5317 int main(void) {
5318 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5319 return fdatasync(0);
5320 #else
5321 #error Not supported
5322 #endif
5323 }
5324 EOF
5325 if compile_prog "" "" ; then
5326     fdatasync=yes
5327 fi
5328
5329 ##########################################
5330 # check if we have madvise
5331
5332 madvise=no
5333 cat > $TMPC << EOF
5334 #include <sys/types.h>
5335 #include <sys/mman.h>
5336 #include <stddef.h>
5337 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5338 EOF
5339 if compile_prog "" "" ; then
5340     madvise=yes
5341 fi
5342
5343 ##########################################
5344 # check if we have posix_madvise
5345
5346 posix_madvise=no
5347 cat > $TMPC << EOF
5348 #include <sys/mman.h>
5349 #include <stddef.h>
5350 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5351 EOF
5352 if compile_prog "" "" ; then
5353     posix_madvise=yes
5354 fi
5355
5356 ##########################################
5357 # check if we have posix_memalign()
5358
5359 posix_memalign=no
5360 cat > $TMPC << EOF
5361 #include <stdlib.h>
5362 int main(void) {
5363     void *p;
5364     return posix_memalign(&p, 8, 8);
5365 }
5366 EOF
5367 if compile_prog "" "" ; then
5368     posix_memalign=yes
5369 fi
5370
5371 ##########################################
5372 # check if we have posix_syslog
5373
5374 posix_syslog=no
5375 cat > $TMPC << EOF
5376 #include <syslog.h>
5377 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5378 EOF
5379 if compile_prog "" "" ; then
5380     posix_syslog=yes
5381 fi
5382
5383 ##########################################
5384 # check if we have sem_timedwait
5385
5386 sem_timedwait=no
5387 cat > $TMPC << EOF
5388 #include <semaphore.h>
5389 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5390 EOF
5391 if compile_prog "" "" ; then
5392     sem_timedwait=yes
5393 fi
5394
5395 ##########################################
5396 # check if we have strchrnul
5397
5398 strchrnul=no
5399 cat > $TMPC << EOF
5400 #include <string.h>
5401 int main(void);
5402 // Use a haystack that the compiler shouldn't be able to constant fold
5403 char *haystack = (char*)&main;
5404 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5405 EOF
5406 if compile_prog "" "" ; then
5407     strchrnul=yes
5408 fi
5409
5410 #########################################
5411 # check if we have st_atim
5412
5413 st_atim=no
5414 cat > $TMPC << EOF
5415 #include <sys/stat.h>
5416 #include <stddef.h>
5417 int main(void) { return offsetof(struct stat, st_atim); }
5418 EOF
5419 if compile_prog "" "" ; then
5420     st_atim=yes
5421 fi
5422
5423 ##########################################
5424 # check if trace backend exists
5425
5426 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
5427 if test "$?" -ne 0 ; then
5428   error_exit "invalid trace backends" \
5429       "Please choose supported trace backends."
5430 fi
5431
5432 ##########################################
5433 # For 'ust' backend, test if ust headers are present
5434 if have_backend "ust"; then
5435   cat > $TMPC << EOF
5436 #include <lttng/tracepoint.h>
5437 int main(void) { return 0; }
5438 EOF
5439   if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5440     if $pkg_config lttng-ust --exists; then
5441       lttng_ust_libs=$($pkg_config --libs lttng-ust)
5442     else
5443       lttng_ust_libs="-llttng-ust -ldl"
5444     fi
5445     if $pkg_config liburcu-bp --exists; then
5446       urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5447     else
5448       urcu_bp_libs="-lurcu-bp"
5449     fi
5450
5451     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5452     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5453   else
5454     error_exit "Trace backend 'ust' missing lttng-ust header files"
5455   fi
5456 fi
5457
5458 ##########################################
5459 # For 'dtrace' backend, test if 'dtrace' command is present
5460 if have_backend "dtrace"; then
5461   if ! has 'dtrace' ; then
5462     error_exit "dtrace command is not found in PATH $PATH"
5463   fi
5464   trace_backend_stap="no"
5465   if has 'stap' ; then
5466     trace_backend_stap="yes"
5467   fi
5468 fi
5469
5470 ##########################################
5471 # check and set a backend for coroutine
5472
5473 # We prefer ucontext, but it's not always possible. The fallback
5474 # is sigcontext. On Windows the only valid backend is the Windows
5475 # specific one.
5476
5477 ucontext_works=no
5478 if test "$darwin" != "yes"; then
5479   cat > $TMPC << EOF
5480 #include <ucontext.h>
5481 #ifdef __stub_makecontext
5482 #error Ignoring glibc stub makecontext which will always fail
5483 #endif
5484 int main(void) { makecontext(0, 0, 0); return 0; }
5485 EOF
5486   if compile_prog "" "" ; then
5487     ucontext_works=yes
5488   fi
5489 fi
5490
5491 if test "$coroutine" = ""; then
5492   if test "$mingw32" = "yes"; then
5493     coroutine=win32
5494   elif test "$ucontext_works" = "yes"; then
5495     coroutine=ucontext
5496   else
5497     coroutine=sigaltstack
5498   fi
5499 else
5500   case $coroutine in
5501   windows)
5502     if test "$mingw32" != "yes"; then
5503       error_exit "'windows' coroutine backend only valid for Windows"
5504     fi
5505     # Unfortunately the user visible backend name doesn't match the
5506     # coroutine-*.c filename for this case, so we have to adjust it here.
5507     coroutine=win32
5508     ;;
5509   ucontext)
5510     if test "$ucontext_works" != "yes"; then
5511       feature_not_found "ucontext"
5512     fi
5513     ;;
5514   sigaltstack)
5515     if test "$mingw32" = "yes"; then
5516       error_exit "only the 'windows' coroutine backend is valid for Windows"
5517     fi
5518     ;;
5519   *)
5520     error_exit "unknown coroutine backend $coroutine"
5521     ;;
5522   esac
5523 fi
5524
5525 if test "$coroutine_pool" = ""; then
5526   coroutine_pool=yes
5527 fi
5528
5529 if test "$debug_stack_usage" = "yes"; then
5530   if test "$coroutine_pool" = "yes"; then
5531     echo "WARN: disabling coroutine pool for stack usage debugging"
5532     coroutine_pool=no
5533   fi
5534 fi
5535
5536
5537 ##########################################
5538 # check if we have open_by_handle_at
5539
5540 open_by_handle_at=no
5541 cat > $TMPC << EOF
5542 #include <fcntl.h>
5543 #if !defined(AT_EMPTY_PATH)
5544 # error missing definition
5545 #else
5546 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5547 #endif
5548 EOF
5549 if compile_prog "" "" ; then
5550     open_by_handle_at=yes
5551 fi
5552
5553 ########################################
5554 # check if we have linux/magic.h
5555
5556 linux_magic_h=no
5557 cat > $TMPC << EOF
5558 #include <linux/magic.h>
5559 int main(void) {
5560   return 0;
5561 }
5562 EOF
5563 if compile_prog "" "" ; then
5564     linux_magic_h=yes
5565 fi
5566
5567 ########################################
5568 # check whether we can disable warning option with a pragma (this is needed
5569 # to silence warnings in the headers of some versions of external libraries).
5570 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5571 # only a warning.
5572 #
5573 # If we can't selectively disable warning in the code, disable -Werror so that
5574 # the build doesn't fail anyway.
5575
5576 pragma_disable_unused_but_set=no
5577 cat > $TMPC << EOF
5578 #pragma GCC diagnostic push
5579 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5580 #pragma GCC diagnostic pop
5581
5582 int main(void) {
5583     return 0;
5584 }
5585 EOF
5586 if compile_prog "-Werror" "" ; then
5587     pragma_diagnostic_available=yes
5588 else
5589     werror=no
5590 fi
5591
5592 ########################################
5593 # check if we have valgrind/valgrind.h
5594
5595 valgrind_h=no
5596 cat > $TMPC << EOF
5597 #include <valgrind/valgrind.h>
5598 int main(void) {
5599   return 0;
5600 }
5601 EOF
5602 if compile_prog "" "" ; then
5603     valgrind_h=yes
5604 fi
5605
5606 ########################################
5607 # check if environ is declared
5608
5609 has_environ=no
5610 cat > $TMPC << EOF
5611 #include <unistd.h>
5612 int main(void) {
5613     environ = 0;
5614     return 0;
5615 }
5616 EOF
5617 if compile_prog "" "" ; then
5618     has_environ=yes
5619 fi
5620
5621 ########################################
5622 # check if cpuid.h is usable.
5623
5624 cat > $TMPC << EOF
5625 #include <cpuid.h>
5626 int main(void) {
5627     unsigned a, b, c, d;
5628     int max = __get_cpuid_max(0, 0);
5629
5630     if (max >= 1) {
5631         __cpuid(1, a, b, c, d);
5632     }
5633
5634     if (max >= 7) {
5635         __cpuid_count(7, 0, a, b, c, d);
5636     }
5637
5638     return 0;
5639 }
5640 EOF
5641 if compile_prog "" "" ; then
5642     cpuid_h=yes
5643 fi
5644
5645 ##########################################
5646 # avx2 optimization requirement check
5647 #
5648 # There is no point enabling this if cpuid.h is not usable,
5649 # since we won't be able to select the new routines.
5650
5651 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5652   cat > $TMPC << EOF
5653 #pragma GCC push_options
5654 #pragma GCC target("avx2")
5655 #include <cpuid.h>
5656 #include <immintrin.h>
5657 static int bar(void *a) {
5658     __m256i x = *(__m256i *)a;
5659     return _mm256_testz_si256(x, x);
5660 }
5661 int main(int argc, char *argv[]) { return bar(argv[0]); }
5662 EOF
5663   if compile_object "" ; then
5664     avx2_opt="yes"
5665   else
5666     avx2_opt="no"
5667   fi
5668 fi
5669
5670 ##########################################
5671 # avx512f optimization requirement check
5672 #
5673 # There is no point enabling this if cpuid.h is not usable,
5674 # since we won't be able to select the new routines.
5675 # by default, it is turned off.
5676 # if user explicitly want to enable it, check environment
5677
5678 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5679   cat > $TMPC << EOF
5680 #pragma GCC push_options
5681 #pragma GCC target("avx512f")
5682 #include <cpuid.h>
5683 #include <immintrin.h>
5684 static int bar(void *a) {
5685     __m512i x = *(__m512i *)a;
5686     return _mm512_test_epi64_mask(x, x);
5687 }
5688 int main(int argc, char *argv[])
5689 {
5690         return bar(argv[0]);
5691 }
5692 EOF
5693   if ! compile_object "" ; then
5694     avx512f_opt="no"
5695   fi
5696 else
5697   avx512f_opt="no"
5698 fi
5699
5700 ########################################
5701 # check if __[u]int128_t is usable.
5702
5703 int128=no
5704 cat > $TMPC << EOF
5705 __int128_t a;
5706 __uint128_t b;
5707 int main (void) {
5708   a = a + b;
5709   b = a * b;
5710   a = a * a;
5711   return 0;
5712 }
5713 EOF
5714 if compile_prog "" "" ; then
5715     int128=yes
5716 fi
5717
5718 #########################################
5719 # See if 128-bit atomic operations are supported.
5720
5721 atomic128=no
5722 if test "$int128" = "yes"; then
5723   cat > $TMPC << EOF
5724 int main(void)
5725 {
5726   unsigned __int128 x = 0, y = 0;
5727   y = __atomic_load_16(&x, 0);
5728   __atomic_store_16(&x, y, 0);
5729   __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5730   return 0;
5731 }
5732 EOF
5733   if compile_prog "" "" ; then
5734     atomic128=yes
5735   fi
5736 fi
5737
5738 cmpxchg128=no
5739 if test "$int128" = yes && test "$atomic128" = no; then
5740   cat > $TMPC << EOF
5741 int main(void)
5742 {
5743   unsigned __int128 x = 0, y = 0;
5744   __sync_val_compare_and_swap_16(&x, y, x);
5745   return 0;
5746 }
5747 EOF
5748   if compile_prog "" "" ; then
5749     cmpxchg128=yes
5750   fi
5751 fi
5752
5753 #########################################
5754 # See if 64-bit atomic operations are supported.
5755 # Note that without __atomic builtins, we can only
5756 # assume atomic loads/stores max at pointer size.
5757
5758 cat > $TMPC << EOF
5759 #include <stdint.h>
5760 int main(void)
5761 {
5762   uint64_t x = 0, y = 0;
5763 #ifdef __ATOMIC_RELAXED
5764   y = __atomic_load_8(&x, 0);
5765   __atomic_store_8(&x, y, 0);
5766   __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5767   __atomic_exchange_8(&x, y, 0);
5768   __atomic_fetch_add_8(&x, y, 0);
5769 #else
5770   typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5771   __sync_lock_test_and_set(&x, y);
5772   __sync_val_compare_and_swap(&x, y, 0);
5773   __sync_fetch_and_add(&x, y);
5774 #endif
5775   return 0;
5776 }
5777 EOF
5778 if compile_prog "" "" ; then
5779   atomic64=yes
5780 fi
5781
5782 #########################################
5783 # See if --dynamic-list is supported by the linker
5784 ld_dynamic_list="no"
5785 if test "$static" = "no" ; then
5786     cat > $TMPTXT <<EOF
5787 {
5788   foo;
5789 };
5790 EOF
5791
5792     cat > $TMPC <<EOF
5793 #include <stdio.h>
5794 void foo(void);
5795
5796 void foo(void)
5797 {
5798   printf("foo\n");
5799 }
5800
5801 int main(void)
5802 {
5803   foo();
5804   return 0;
5805 }
5806 EOF
5807
5808     if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5809         ld_dynamic_list="yes"
5810     fi
5811 fi
5812
5813 #########################################
5814 # See if -exported_symbols_list is supported by the linker
5815
5816 ld_exported_symbols_list="no"
5817 if test "$static" = "no" ; then
5818     cat > $TMPTXT <<EOF
5819   _foo
5820 EOF
5821
5822     if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5823         ld_exported_symbols_list="yes"
5824     fi
5825 fi
5826
5827 if  test "$plugins" = "yes" &&
5828     test "$ld_dynamic_list" = "no" &&
5829     test "$ld_exported_symbols_list" = "no" ; then
5830   error_exit \
5831       "Plugin support requires dynamic linking and specifying a set of symbols " \
5832       "that are exported to plugins. Unfortunately your linker doesn't " \
5833       "support the flag (--dynamic-list or -exported_symbols_list) used " \
5834       "for this purpose. You can't build with --static."
5835 fi
5836
5837 ########################################
5838 # See if __attribute__((alias)) is supported.
5839 # This false for Xcode 9, but has been remedied for Xcode 10.
5840 # Unfortunately, travis uses Xcode 9 by default.
5841
5842 attralias=no
5843 cat > $TMPC << EOF
5844 int x = 1;
5845 extern const int y __attribute__((alias("x")));
5846 int main(void) { return 0; }
5847 EOF
5848 if compile_prog "" "" ; then
5849     attralias=yes
5850 fi
5851
5852 ########################################
5853 # check if getauxval is available.
5854
5855 getauxval=no
5856 cat > $TMPC << EOF
5857 #include <sys/auxv.h>
5858 int main(void) {
5859   return getauxval(AT_HWCAP) == 0;
5860 }
5861 EOF
5862 if compile_prog "" "" ; then
5863     getauxval=yes
5864 fi
5865
5866 ########################################
5867 # check if ccache is interfering with
5868 # semantic analysis of macros
5869
5870 unset CCACHE_CPP2
5871 ccache_cpp2=no
5872 cat > $TMPC << EOF
5873 static const int Z = 1;
5874 #define fn() ({ Z; })
5875 #define TAUT(X) ((X) == Z)
5876 #define PAREN(X, Y) (X == Y)
5877 #define ID(X) (X)
5878 int main(int argc, char *argv[])
5879 {
5880     int x = 0, y = 0;
5881     x = ID(x);
5882     x = fn();
5883     fn();
5884     if (PAREN(x, y)) return 0;
5885     if (TAUT(Z)) return 0;
5886     return 0;
5887 }
5888 EOF
5889
5890 if ! compile_object "-Werror"; then
5891     ccache_cpp2=yes
5892 fi
5893
5894 #################################################
5895 # clang does not support glibc + FORTIFY_SOURCE.
5896
5897 if test "$fortify_source" != "no"; then
5898   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5899     fortify_source="no";
5900   elif test -n "$cxx" && has $cxx &&
5901        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5902     fortify_source="no";
5903   else
5904     fortify_source="yes"
5905   fi
5906 fi
5907
5908 ###############################################
5909 # Check if copy_file_range is provided by glibc
5910 have_copy_file_range=no
5911 cat > $TMPC << EOF
5912 #include <unistd.h>
5913 int main(void) {
5914   copy_file_range(0, NULL, 0, NULL, 0, 0);
5915   return 0;
5916 }
5917 EOF
5918 if compile_prog "" "" ; then
5919     have_copy_file_range=yes
5920 fi
5921
5922 ##########################################
5923 # check if struct fsxattr is available via linux/fs.h
5924
5925 have_fsxattr=no
5926 cat > $TMPC << EOF
5927 #include <linux/fs.h>
5928 struct fsxattr foo;
5929 int main(void) {
5930   return 0;
5931 }
5932 EOF
5933 if compile_prog "" "" ; then
5934     have_fsxattr=yes
5935 fi
5936
5937 ##########################################
5938 # check for usable membarrier system call
5939 if test "$membarrier" = "yes"; then
5940     have_membarrier=no
5941     if test "$mingw32" = "yes" ; then
5942         have_membarrier=yes
5943     elif test "$linux" = "yes" ; then
5944         cat > $TMPC << EOF
5945     #include <linux/membarrier.h>
5946     #include <sys/syscall.h>
5947     #include <unistd.h>
5948     #include <stdlib.h>
5949     int main(void) {
5950         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5951         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5952         exit(0);
5953     }
5954 EOF
5955         if compile_prog "" "" ; then
5956             have_membarrier=yes
5957         fi
5958     fi
5959     if test "$have_membarrier" = "no"; then
5960       feature_not_found "membarrier" "membarrier system call not available"
5961     fi
5962 else
5963     # Do not enable it by default even for Mingw32, because it doesn't
5964     # work on Wine.
5965     membarrier=no
5966 fi
5967
5968 ##########################################
5969 # check if rtnetlink.h exists and is useful
5970 have_rtnetlink=no
5971 cat > $TMPC << EOF
5972 #include <linux/rtnetlink.h>
5973 int main(void) {
5974   return IFLA_PROTO_DOWN;
5975 }
5976 EOF
5977 if compile_prog "" "" ; then
5978     have_rtnetlink=yes
5979 fi
5980
5981 ##########################################
5982 # check for usable AF_VSOCK environment
5983 have_af_vsock=no
5984 cat > $TMPC << EOF
5985 #include <errno.h>
5986 #include <sys/types.h>
5987 #include <sys/socket.h>
5988 #if !defined(AF_VSOCK)
5989 # error missing AF_VSOCK flag
5990 #endif
5991 #include <linux/vm_sockets.h>
5992 int main(void) {
5993     int sock, ret;
5994     struct sockaddr_vm svm;
5995     socklen_t len = sizeof(svm);
5996     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5997     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5998     if ((ret == -1) && (errno == ENOTCONN)) {
5999         return 0;
6000     }
6001     return -1;
6002 }
6003 EOF
6004 if compile_prog "" "" ; then
6005     have_af_vsock=yes
6006 fi
6007
6008 ##########################################
6009 # check for usable AF_ALG environment
6010 have_afalg=no
6011 cat > $TMPC << EOF
6012 #include <errno.h>
6013 #include <sys/types.h>
6014 #include <sys/socket.h>
6015 #include <linux/if_alg.h>
6016 int main(void) {
6017     int sock;
6018     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6019     return sock;
6020 }
6021 EOF
6022 if compile_prog "" "" ; then
6023     have_afalg=yes
6024 fi
6025 if test "$crypto_afalg" = "yes"
6026 then
6027     if test "$have_afalg" != "yes"
6028     then
6029         error_exit "AF_ALG requested but could not be detected"
6030     fi
6031 fi
6032
6033
6034 #################################################
6035 # Check to see if we have the Hypervisor framework
6036 if [ "$darwin" = "yes" ] ; then
6037   cat > $TMPC << EOF
6038 #include <Hypervisor/hv.h>
6039 int main() { return 0;}
6040 EOF
6041   if ! compile_object ""; then
6042     hvf='no'
6043   else
6044     hvf='yes'
6045     QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6046   fi
6047 fi
6048
6049 #################################################
6050 # Sparc implicitly links with --relax, which is
6051 # incompatible with -r, so --no-relax should be
6052 # given. It does no harm to give it on other
6053 # platforms too.
6054
6055 # Note: the prototype is needed since QEMU_CFLAGS
6056 #       contains -Wmissing-prototypes
6057 cat > $TMPC << EOF
6058 extern int foo(void);
6059 int foo(void) { return 0; }
6060 EOF
6061 if ! compile_object ""; then
6062   error_exit "Failed to compile object file for LD_REL_FLAGS test"
6063 fi
6064 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6065   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6066     LD_REL_FLAGS=$i
6067     break
6068   fi
6069 done
6070 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6071   feature_not_found "modules" "Cannot find how to build relocatable objects"
6072 fi
6073
6074 ##########################################
6075 # check for sysmacros.h
6076
6077 have_sysmacros=no
6078 cat > $TMPC << EOF
6079 #include <sys/sysmacros.h>
6080 int main(void) {
6081     return makedev(0, 0);
6082 }
6083 EOF
6084 if compile_prog "" "" ; then
6085     have_sysmacros=yes
6086 fi
6087
6088 ##########################################
6089 # Veritas HyperScale block driver VxHS
6090 # Check if libvxhs is installed
6091
6092 if test "$vxhs" != "no" ; then
6093   cat > $TMPC <<EOF
6094 #include <stdint.h>
6095 #include <qnio/qnio_api.h>
6096
6097 void *vxhs_callback;
6098
6099 int main(void) {
6100     iio_init(QNIO_VERSION, vxhs_callback);
6101     return 0;
6102 }
6103 EOF
6104   vxhs_libs="-lvxhs -lssl"
6105   if compile_prog "" "$vxhs_libs" ; then
6106     vxhs=yes
6107   else
6108     if test "$vxhs" = "yes" ; then
6109       feature_not_found "vxhs block device" "Install libvxhs See github"
6110     fi
6111     vxhs=no
6112   fi
6113 fi
6114
6115 ##########################################
6116 # check for _Static_assert()
6117
6118 have_static_assert=no
6119 cat > $TMPC << EOF
6120 _Static_assert(1, "success");
6121 int main(void) {
6122     return 0;
6123 }
6124 EOF
6125 if compile_prog "" "" ; then
6126     have_static_assert=yes
6127 fi
6128
6129 ##########################################
6130 # check for utmpx.h, it is missing e.g. on OpenBSD
6131
6132 have_utmpx=no
6133 cat > $TMPC << EOF
6134 #include <utmpx.h>
6135 struct utmpx user_info;
6136 int main(void) {
6137     return 0;
6138 }
6139 EOF
6140 if compile_prog "" "" ; then
6141     have_utmpx=yes
6142 fi
6143
6144 ##########################################
6145 # check for getrandom()
6146
6147 have_getrandom=no
6148 cat > $TMPC << EOF
6149 #include <sys/random.h>
6150 int main(void) {
6151     return getrandom(0, 0, GRND_NONBLOCK);
6152 }
6153 EOF
6154 if compile_prog "" "" ; then
6155     have_getrandom=yes
6156 fi
6157
6158 ##########################################
6159 # checks for sanitizers
6160
6161 have_asan=no
6162 have_ubsan=no
6163 have_asan_iface_h=no
6164 have_asan_iface_fiber=no
6165
6166 if test "$sanitizers" = "yes" ; then
6167   write_c_skeleton
6168   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6169       have_asan=yes
6170   fi
6171
6172   # we could use a simple skeleton for flags checks, but this also
6173   # detect the static linking issue of ubsan, see also:
6174   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6175   cat > $TMPC << EOF
6176 #include <stdlib.h>
6177 int main(void) {
6178     void *tmp = malloc(10);
6179     if (tmp != NULL) {
6180         return *(int *)(tmp + 2);
6181     }
6182 }
6183 EOF
6184   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6185       have_ubsan=yes
6186   fi
6187
6188   if check_include "sanitizer/asan_interface.h" ; then
6189       have_asan_iface_h=yes
6190   fi
6191
6192   cat > $TMPC << EOF
6193 #include <sanitizer/asan_interface.h>
6194 int main(void) {
6195   __sanitizer_start_switch_fiber(0, 0, 0);
6196   return 0;
6197 }
6198 EOF
6199   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6200       have_asan_iface_fiber=yes
6201   fi
6202 fi
6203
6204 ##########################################
6205 # checks for fuzzer
6206 if test "$fuzzing" = "yes" ; then
6207   write_c_fuzzer_skeleton
6208   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6209       have_fuzzer=yes
6210   fi
6211 fi
6212
6213 ##########################################
6214 # check for libpmem
6215
6216 if test "$libpmem" != "no"; then
6217         if $pkg_config --exists "libpmem"; then
6218                 libpmem="yes"
6219                 libpmem_libs=$($pkg_config --libs libpmem)
6220                 libpmem_cflags=$($pkg_config --cflags libpmem)
6221                 libs_softmmu="$libs_softmmu $libpmem_libs"
6222                 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6223         else
6224                 if test "$libpmem" = "yes" ; then
6225                         feature_not_found "libpmem" "Install nvml or pmdk"
6226                 fi
6227                 libpmem="no"
6228         fi
6229 fi
6230
6231 ##########################################
6232 # check for slirp
6233
6234 # slirp is only required when building softmmu targets
6235 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6236     slirp="no"
6237 fi
6238
6239 case "$slirp" in
6240   "" | yes)
6241     if $pkg_config slirp; then
6242       slirp=system
6243     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6244       slirp=git
6245     elif test -e "${source_path}/slirp/Makefile" ; then
6246       slirp=internal
6247     elif test -z "$slirp" ; then
6248       slirp=no
6249     else
6250       feature_not_found "slirp" "Install slirp devel or git submodule"
6251     fi
6252     ;;
6253
6254   system)
6255     if ! $pkg_config slirp; then
6256       feature_not_found "slirp" "Install slirp devel"
6257     fi
6258     ;;
6259 esac
6260
6261 case "$slirp" in
6262   git | internal)
6263     if test "$slirp" = git; then
6264       git_submodules="${git_submodules} slirp"
6265     fi
6266     mkdir -p slirp
6267     slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6268     slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
6269     if test "$mingw32" = "yes" ; then
6270       slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6271     fi
6272     ;;
6273
6274   system)
6275     slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6276     slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6277     slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6278     ;;
6279
6280   no)
6281     ;;
6282   *)
6283     error_exit "Unknown state for slirp: $slirp"
6284     ;;
6285 esac
6286
6287
6288 ##########################################
6289 # End of CC checks
6290 # After here, no more $cc or $ld runs
6291
6292 write_c_skeleton
6293
6294 if test "$gcov" = "yes" ; then
6295   QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6296   QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
6297 elif test "$fortify_source" = "yes" ; then
6298   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
6299 elif test "$debug" = "no"; then
6300   CFLAGS="-O2 $CFLAGS"
6301 fi
6302
6303 if test "$have_asan" = "yes"; then
6304   QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6305   QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6306   if test "$have_asan_iface_h" = "no" ; then
6307       echo "ASAN build enabled, but ASAN header missing." \
6308            "Without code annotation, the report may be inferior."
6309   elif test "$have_asan_iface_fiber" = "no" ; then
6310       echo "ASAN build enabled, but ASAN header is too old." \
6311            "Without code annotation, the report may be inferior."
6312   fi
6313 fi
6314 if test "$have_ubsan" = "yes"; then
6315   QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6316   QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6317 fi
6318
6319 ##########################################
6320 # Do we have libnfs
6321 if test "$libnfs" != "no" ; then
6322   if $pkg_config --atleast-version=1.9.3 libnfs; then
6323     libnfs="yes"
6324     libnfs_libs=$($pkg_config --libs libnfs)
6325   else
6326     if test "$libnfs" = "yes" ; then
6327       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6328     fi
6329     libnfs="no"
6330   fi
6331 fi
6332
6333 ##########################################
6334 # Do we have libudev
6335 if test "$libudev" != "no" ; then
6336   if $pkg_config libudev && test "$static" != "yes"; then
6337     libudev="yes"
6338     libudev_libs=$($pkg_config --libs libudev)
6339   else
6340     libudev="no"
6341   fi
6342 fi
6343
6344 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6345 if test "$werror" = "yes"; then
6346     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6347 fi
6348
6349 if test "$solaris" = "no" ; then
6350     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6351         QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6352     fi
6353 fi
6354
6355 # test if pod2man has --utf8 option
6356 if pod2man --help | grep -q utf8; then
6357     POD2MAN="pod2man --utf8"
6358 else
6359     POD2MAN="pod2man"
6360 fi
6361
6362 # Use ASLR, no-SEH and DEP if available
6363 if test "$mingw32" = "yes" ; then
6364     for flag in --dynamicbase --no-seh --nxcompat; do
6365         if ld_has $flag ; then
6366             QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6367         fi
6368     done
6369 fi
6370
6371 # Disable OpenBSD W^X if available
6372 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6373     cat > $TMPC <<EOF
6374     int main(void) { return 0; }
6375 EOF
6376     wx_ldflags="-Wl,-z,wxneeded"
6377     if compile_prog "" "$wx_ldflags"; then
6378         QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6379     fi
6380 fi
6381
6382 qemu_confdir=$sysconfdir$confsuffix
6383 qemu_moddir=$libdir$confsuffix
6384 qemu_datadir=$datadir$confsuffix
6385 qemu_localedir="$datadir/locale"
6386 qemu_icondir="$datadir/icons"
6387 qemu_desktopdir="$datadir/applications"
6388
6389 # We can only support ivshmem if we have eventfd
6390 if [ "$eventfd" = "yes" ]; then
6391   ivshmem=yes
6392 fi
6393
6394 tools=""
6395 if test "$want_tools" = "yes" ; then
6396   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6397   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6398     tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
6399   fi
6400   if [ "$ivshmem" = "yes" ]; then
6401     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6402   fi
6403   if [ "$curl" = "yes" ]; then
6404       tools="elf2dmp\$(EXESUF) $tools"
6405   fi
6406 fi
6407 if test "$softmmu" = yes ; then
6408   if test "$linux" = yes; then
6409     if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6410       virtfs=yes
6411       helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)"
6412     else
6413       if test "$virtfs" = yes; then
6414         error_exit "VirtFS requires libcap-ng devel and libattr devel"
6415       fi
6416       virtfs=no
6417     fi
6418     if test "$mpath" != no && test "$mpathpersist" = yes ; then
6419       mpath=yes
6420     else
6421       if test "$mpath" = yes; then
6422         error_exit "Multipath requires libmpathpersist devel"
6423       fi
6424       mpath=no
6425     fi
6426     helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
6427   else
6428     if test "$virtfs" = yes; then
6429       error_exit "VirtFS is supported only on Linux"
6430     fi
6431     virtfs=no
6432     if test "$mpath" = yes; then
6433       error_exit "Multipath is supported only on Linux"
6434     fi
6435     mpath=no
6436   fi
6437   if test "$xkbcommon" = "yes"; then
6438     tools="qemu-keymap\$(EXESUF) $tools"
6439   fi
6440 fi
6441
6442 # Probe for guest agent support/options
6443
6444 if [ "$guest_agent" != "no" ]; then
6445   if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6446       guest_agent=no
6447   elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6448       tools="qemu-ga\$(EXESUF) $tools"
6449       guest_agent=yes
6450   elif [ "$guest_agent" != yes ]; then
6451       guest_agent=no
6452   else
6453       error_exit "Guest agent is not supported on this platform"
6454   fi
6455 fi
6456
6457 # Guest agent Window MSI  package
6458
6459 if test "$guest_agent" != yes; then
6460   if test "$guest_agent_msi" = yes; then
6461     error_exit "MSI guest agent package requires guest agent enabled"
6462   fi
6463   guest_agent_msi=no
6464 elif test "$mingw32" != "yes"; then
6465   if test "$guest_agent_msi" = "yes"; then
6466     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6467   fi
6468   guest_agent_msi=no
6469 elif ! has wixl; then
6470   if test "$guest_agent_msi" = "yes"; then
6471     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6472   fi
6473   guest_agent_msi=no
6474 else
6475   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6476   # disabled explicitly
6477   if test "$guest_agent_msi" != "no"; then
6478     guest_agent_msi=yes
6479   fi
6480 fi
6481
6482 if test "$guest_agent_msi" = "yes"; then
6483   if test "$guest_agent_with_vss" = "yes"; then
6484     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6485   fi
6486
6487   if test "$QEMU_GA_MANUFACTURER" = ""; then
6488     QEMU_GA_MANUFACTURER=QEMU
6489   fi
6490
6491   if test "$QEMU_GA_DISTRO" = ""; then
6492     QEMU_GA_DISTRO=Linux
6493   fi
6494
6495   if test "$QEMU_GA_VERSION" = ""; then
6496       QEMU_GA_VERSION=$(cat $source_path/VERSION)
6497   fi
6498
6499   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6500
6501   case "$cpu" in
6502   x86_64)
6503     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6504     ;;
6505   i386)
6506     QEMU_GA_MSI_ARCH="-D Arch=32"
6507     ;;
6508   *)
6509     error_exit "CPU $cpu not supported for building installation package"
6510     ;;
6511   esac
6512 fi
6513
6514 # Mac OS X ships with a broken assembler
6515 roms=
6516 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6517         test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6518         test "$softmmu" = yes ; then
6519     # Different host OS linkers have different ideas about the name of the ELF
6520     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6521     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6522     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6523         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6524             ld_i386_emulation="$emu"
6525             roms="optionrom"
6526             break
6527         fi
6528     done
6529 fi
6530
6531 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6532 if test "$cpu" = "s390x" ; then
6533   write_c_skeleton
6534   if compile_prog "-march=z900" ""; then
6535     roms="$roms s390-ccw"
6536   fi
6537 fi
6538
6539 # Check that the C++ compiler exists and works with the C compiler.
6540 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6541 if has $cxx; then
6542     cat > $TMPC <<EOF
6543 int c_function(void);
6544 int main(void) { return c_function(); }
6545 EOF
6546
6547     compile_object
6548
6549     cat > $TMPCXX <<EOF
6550 extern "C" {
6551    int c_function(void);
6552 }
6553 int c_function(void) { return 42; }
6554 EOF
6555
6556     update_cxxflags
6557
6558     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6559         # C++ compiler $cxx works ok with C compiler $cc
6560         :
6561     else
6562         echo "C++ compiler $cxx does not work with C compiler $cc"
6563         echo "Disabling C++ specific optional code"
6564         cxx=
6565     fi
6566 else
6567     echo "No C++ compiler available; disabling C++ specific optional code"
6568     cxx=
6569 fi
6570
6571 echo_version() {
6572     if test "$1" = "yes" ; then
6573         echo "($2)"
6574     fi
6575 }
6576
6577 # prepend pixman and ftd flags after all config tests are done
6578 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6579 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6580 libs_softmmu="$pixman_libs $libs_softmmu"
6581
6582 echo "Install prefix    $prefix"
6583 echo "BIOS directory    $(eval echo $qemu_datadir)"
6584 echo "firmware path     $(eval echo $firmwarepath)"
6585 echo "binary directory  $(eval echo $bindir)"
6586 echo "library directory $(eval echo $libdir)"
6587 echo "module directory  $(eval echo $qemu_moddir)"
6588 echo "libexec directory $(eval echo $libexecdir)"
6589 echo "include directory $(eval echo $includedir)"
6590 echo "config directory  $(eval echo $sysconfdir)"
6591 if test "$mingw32" = "no" ; then
6592 echo "local state directory   $(eval echo $local_statedir)"
6593 echo "Manual directory  $(eval echo $mandir)"
6594 echo "ELF interp prefix $interp_prefix"
6595 else
6596 echo "local state directory   queried at runtime"
6597 echo "Windows SDK       $win_sdk"
6598 fi
6599 echo "Build directory   $(pwd)"
6600 echo "Source path       $source_path"
6601 echo "GIT binary        $git"
6602 echo "GIT submodules    $git_submodules"
6603 echo "C compiler        $cc"
6604 echo "Host C compiler   $host_cc"
6605 echo "C++ compiler      $cxx"
6606 echo "Objective-C compiler $objcc"
6607 echo "ARFLAGS           $ARFLAGS"
6608 echo "CFLAGS            $CFLAGS"
6609 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
6610 echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
6611 echo "make              $make"
6612 echo "install           $install"
6613 echo "python            $python ($python_version)"
6614 if test "$docs" != "no"; then
6615     echo "sphinx-build      $sphinx_build"
6616 fi
6617 echo "genisoimage       $genisoimage"
6618 echo "slirp support     $slirp $(echo_version $slirp $slirp_version)"
6619 if test "$slirp" != "no" ; then
6620     echo "smbd              $smbd"
6621 fi
6622 echo "module support    $modules"
6623 echo "alt path mod load $module_upgrades"
6624 echo "host CPU          $cpu"
6625 echo "host big endian   $bigendian"
6626 echo "target list       $target_list"
6627 echo "gprof enabled     $gprof"
6628 echo "sparse enabled    $sparse"
6629 echo "strip binaries    $strip_opt"
6630 echo "profiler          $profiler"
6631 echo "static build      $static"
6632 if test "$darwin" = "yes" ; then
6633     echo "Cocoa support     $cocoa"
6634 fi
6635 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
6636 echo "SDL image support $sdl_image"
6637 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
6638 echo "GTK GL support    $gtk_gl"
6639 echo "VTE support       $vte $(echo_version $vte $vteversion)"
6640 echo "TLS priority      $tls_priority"
6641 echo "GNUTLS support    $gnutls"
6642 echo "libgcrypt         $gcrypt"
6643 if test "$gcrypt" = "yes"
6644 then
6645    echo "  hmac            $gcrypt_hmac"
6646    echo "  XTS             $gcrypt_xts"
6647 fi
6648 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
6649 if test "$nettle" = "yes"
6650 then
6651    echo "  XTS             $nettle_xts"
6652 fi
6653 echo "libtasn1          $tasn1"
6654 echo "PAM               $auth_pam"
6655 echo "iconv support     $iconv"
6656 echo "curses support    $curses"
6657 echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6658 echo "curl support      $curl"
6659 echo "mingw32 support   $mingw32"
6660 echo "Audio drivers     $audio_drv_list"
6661 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6662 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6663 echo "VirtFS support    $virtfs"
6664 echo "Multipath support $mpath"
6665 echo "VNC support       $vnc"
6666 if test "$vnc" = "yes" ; then
6667     echo "VNC SASL support  $vnc_sasl"
6668     echo "VNC JPEG support  $vnc_jpeg"
6669     echo "VNC PNG support   $vnc_png"
6670 fi
6671 echo "xen support       $xen"
6672 if test "$xen" = "yes" ; then
6673   echo "xen ctrl version  $xen_ctrl_version"
6674 fi
6675 echo "brlapi support    $brlapi"
6676 echo "Documentation     $docs"
6677 echo "PIE               $pie"
6678 echo "vde support       $vde"
6679 echo "netmap support    $netmap"
6680 echo "Linux AIO support $linux_aio"
6681 echo "Linux io_uring support $linux_io_uring"
6682 echo "ATTR/XATTR support $attr"
6683 echo "Install blobs     $blobs"
6684 echo "KVM support       $kvm"
6685 echo "HAX support       $hax"
6686 echo "HVF support       $hvf"
6687 echo "WHPX support      $whpx"
6688 echo "TCG support       $tcg"
6689 if test "$tcg" = "yes" ; then
6690     echo "TCG debug enabled $debug_tcg"
6691     echo "TCG interpreter   $tcg_interpreter"
6692 fi
6693 echo "malloc trim support $malloc_trim"
6694 echo "RDMA support      $rdma"
6695 echo "PVRDMA support    $pvrdma"
6696 echo "fdt support       $fdt"
6697 echo "membarrier        $membarrier"
6698 echo "preadv support    $preadv"
6699 echo "fdatasync         $fdatasync"
6700 echo "madvise           $madvise"
6701 echo "posix_madvise     $posix_madvise"
6702 echo "posix_memalign    $posix_memalign"
6703 echo "libcap-ng support $cap_ng"
6704 echo "vhost-net support $vhost_net"
6705 echo "vhost-crypto support $vhost_crypto"
6706 echo "vhost-scsi support $vhost_scsi"
6707 echo "vhost-vsock support $vhost_vsock"
6708 echo "vhost-user support $vhost_user"
6709 echo "vhost-user-fs support $vhost_user_fs"
6710 echo "Trace backends    $trace_backends"
6711 if have_backend "simple"; then
6712 echo "Trace output file $trace_file-<pid>"
6713 fi
6714 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6715 echo "rbd support       $rbd"
6716 echo "xfsctl support    $xfs"
6717 echo "smartcard support $smartcard"
6718 echo "libusb            $libusb"
6719 echo "usb net redir     $usb_redir"
6720 echo "OpenGL support    $opengl"
6721 echo "OpenGL dmabufs    $opengl_dmabuf"
6722 echo "libiscsi support  $libiscsi"
6723 echo "libnfs support    $libnfs"
6724 echo "build guest agent $guest_agent"
6725 echo "QGA VSS support   $guest_agent_with_vss"
6726 echo "QGA w32 disk info $guest_agent_ntddscsi"
6727 echo "QGA MSI support   $guest_agent_msi"
6728 echo "seccomp support   $seccomp"
6729 echo "coroutine backend $coroutine"
6730 echo "coroutine pool    $coroutine_pool"
6731 echo "debug stack usage $debug_stack_usage"
6732 echo "mutex debugging   $debug_mutex"
6733 echo "crypto afalg      $crypto_afalg"
6734 echo "GlusterFS support $glusterfs"
6735 echo "gcov              $gcov_tool"
6736 echo "gcov enabled      $gcov"
6737 echo "TPM support       $tpm"
6738 echo "libssh support    $libssh"
6739 echo "QOM debugging     $qom_cast_debug"
6740 echo "Live block migration $live_block_migration"
6741 echo "lzo support       $lzo"
6742 echo "snappy support    $snappy"
6743 echo "bzip2 support     $bzip2"
6744 echo "lzfse support     $lzfse"
6745 echo "zstd support      $zstd"
6746 echo "NUMA host support $numa"
6747 echo "libxml2           $libxml2"
6748 echo "tcmalloc support  $tcmalloc"
6749 echo "jemalloc support  $jemalloc"
6750 echo "avx2 optimization $avx2_opt"
6751 echo "avx512f optimization $avx512f_opt"
6752 echo "replication support $replication"
6753 echo "VxHS block device $vxhs"
6754 echo "bochs support     $bochs"
6755 echo "cloop support     $cloop"
6756 echo "dmg support       $dmg"
6757 echo "qcow v1 support   $qcow1"
6758 echo "vdi support       $vdi"
6759 echo "vvfat support     $vvfat"
6760 echo "qed support       $qed"
6761 echo "parallels support $parallels"
6762 echo "sheepdog support  $sheepdog"
6763 echo "capstone          $capstone"
6764 echo "libpmem support   $libpmem"
6765 echo "libudev           $libudev"
6766 echo "default devices   $default_devices"
6767 echo "plugin support    $plugins"
6768 echo "fuzzing support   $fuzzing"
6769 echo "gdb               $gdb_bin"
6770
6771 if test "$supported_cpu" = "no"; then
6772     echo
6773     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6774     echo
6775     echo "CPU host architecture $cpu support is not currently maintained."
6776     echo "The QEMU project intends to remove support for this host CPU in"
6777     echo "a future release if nobody volunteers to maintain it and to"
6778     echo "provide a build host for our continuous integration setup."
6779     echo "configure has succeeded and you can continue to build, but"
6780     echo "if you care about QEMU on this platform you should contact"
6781     echo "us upstream at [email protected]."
6782 fi
6783
6784 if test "$supported_os" = "no"; then
6785     echo
6786     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6787     echo
6788     echo "Host OS $targetos support is not currently maintained."
6789     echo "The QEMU project intends to remove support for this host OS in"
6790     echo "a future release if nobody volunteers to maintain it and to"
6791     echo "provide a build host for our continuous integration setup."
6792     echo "configure has succeeded and you can continue to build, but"
6793     echo "if you care about QEMU on this platform you should contact"
6794     echo "us upstream at [email protected]."
6795 fi
6796
6797 config_host_mak="config-host.mak"
6798
6799 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6800
6801 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6802 echo >> $config_host_mak
6803
6804 echo all: >> $config_host_mak
6805 echo "prefix=$prefix" >> $config_host_mak
6806 echo "bindir=$bindir" >> $config_host_mak
6807 echo "libdir=$libdir" >> $config_host_mak
6808 echo "libexecdir=$libexecdir" >> $config_host_mak
6809 echo "includedir=$includedir" >> $config_host_mak
6810 echo "mandir=$mandir" >> $config_host_mak
6811 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6812 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6813 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6814 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6815 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6816 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6817 if test "$mingw32" = "no" ; then
6818   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6819 fi
6820 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6821 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6822 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6823 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6824 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6825 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6826 echo "GIT=$git" >> $config_host_mak
6827 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6828 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6829
6830 echo "ARCH=$ARCH" >> $config_host_mak
6831
6832 if test "$default_devices" = "yes" ; then
6833   echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6834 else
6835   echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6836 fi
6837 if test "$debug_tcg" = "yes" ; then
6838   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6839 fi
6840 if test "$strip_opt" = "yes" ; then
6841   echo "STRIP=${strip}" >> $config_host_mak
6842 fi
6843 if test "$bigendian" = "yes" ; then
6844   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6845 fi
6846 if test "$mingw32" = "yes" ; then
6847   echo "CONFIG_WIN32=y" >> $config_host_mak
6848   rc_version=$(cat $source_path/VERSION)
6849   version_major=${rc_version%%.*}
6850   rc_version=${rc_version#*.}
6851   version_minor=${rc_version%%.*}
6852   rc_version=${rc_version#*.}
6853   version_subminor=${rc_version%%.*}
6854   version_micro=0
6855   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6856   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6857   if test "$guest_agent_with_vss" = "yes" ; then
6858     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6859     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6860     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6861   fi
6862   if test "$guest_agent_ntddscsi" = "yes" ; then
6863     echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6864   fi
6865   if test "$guest_agent_msi" = "yes"; then
6866     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6867     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6868     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6869     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6870     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6871     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6872     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6873   fi
6874 else
6875   echo "CONFIG_POSIX=y" >> $config_host_mak
6876 fi
6877
6878 if test "$linux" = "yes" ; then
6879   echo "CONFIG_LINUX=y" >> $config_host_mak
6880 fi
6881
6882 if test "$darwin" = "yes" ; then
6883   echo "CONFIG_DARWIN=y" >> $config_host_mak
6884 fi
6885
6886 if test "$solaris" = "yes" ; then
6887   echo "CONFIG_SOLARIS=y" >> $config_host_mak
6888 fi
6889 if test "$haiku" = "yes" ; then
6890   echo "CONFIG_HAIKU=y" >> $config_host_mak
6891 fi
6892 if test "$static" = "yes" ; then
6893   echo "CONFIG_STATIC=y" >> $config_host_mak
6894 fi
6895 if test "$profiler" = "yes" ; then
6896   echo "CONFIG_PROFILER=y" >> $config_host_mak
6897 fi
6898 if test "$want_tools" = "yes" ; then
6899   echo "CONFIG_TOOLS=y" >> $config_host_mak
6900 fi
6901 if test "$slirp" != "no"; then
6902   echo "CONFIG_SLIRP=y" >> $config_host_mak
6903   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6904   echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6905   echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6906 fi
6907 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6908     echo "config-host.h: slirp/all" >> $config_host_mak
6909 fi
6910 if test "$vde" = "yes" ; then
6911   echo "CONFIG_VDE=y" >> $config_host_mak
6912   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6913 fi
6914 if test "$netmap" = "yes" ; then
6915   echo "CONFIG_NETMAP=y" >> $config_host_mak
6916 fi
6917 if test "$l2tpv3" = "yes" ; then
6918   echo "CONFIG_L2TPV3=y" >> $config_host_mak
6919 fi
6920 if test "$gprof" = "yes" ; then
6921   echo "CONFIG_GPROF=y" >> $config_host_mak
6922 fi
6923 if test "$cap_ng" = "yes" ; then
6924   echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6925 fi
6926 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6927 for drv in $audio_drv_list; do
6928     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6929     case "$drv" in
6930         alsa | oss | pa | sdl)
6931             echo "$def=m" >> $config_host_mak ;;
6932         *)
6933             echo "$def=y" >> $config_host_mak ;;
6934     esac
6935 done
6936 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6937 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6938 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6939 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6940 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6941 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6942 if test "$audio_win_int" = "yes" ; then
6943   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6944 fi
6945 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6946 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6947 if test "$vnc" = "yes" ; then
6948   echo "CONFIG_VNC=y" >> $config_host_mak
6949 fi
6950 if test "$vnc_sasl" = "yes" ; then
6951   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6952 fi
6953 if test "$vnc_jpeg" = "yes" ; then
6954   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6955 fi
6956 if test "$vnc_png" = "yes" ; then
6957   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6958 fi
6959 if test "$xkbcommon" = "yes" ; then
6960   echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6961   echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6962 fi
6963 if test "$xfs" = "yes" ; then
6964   echo "CONFIG_XFS=y" >> $config_host_mak
6965 fi
6966 qemu_version=$(head $source_path/VERSION)
6967 echo "VERSION=$qemu_version" >>$config_host_mak
6968 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6969 echo "SRC_PATH=$source_path" >> $config_host_mak
6970 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6971 if [ "$docs" = "yes" ] ; then
6972   echo "BUILD_DOCS=yes" >> $config_host_mak
6973 fi
6974 if test "$modules" = "yes"; then
6975   # $shacmd can generate a hash started with digit, which the compiler doesn't
6976   # like as an symbol. So prefix it with an underscore
6977   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6978   echo "CONFIG_MODULES=y" >> $config_host_mak
6979 fi
6980 if test "$module_upgrades" = "yes"; then
6981   echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6982 fi
6983 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6984   echo "CONFIG_X11=y" >> $config_host_mak
6985   echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6986   echo "X11_LIBS=$x11_libs" >> $config_host_mak
6987 fi
6988 if test "$sdl" = "yes" ; then
6989   echo "CONFIG_SDL=m" >> $config_host_mak
6990   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6991   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6992   if test "$sdl_image" = "yes" ; then
6993       echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6994   fi
6995 fi
6996 if test "$cocoa" = "yes" ; then
6997   echo "CONFIG_COCOA=y" >> $config_host_mak
6998 fi
6999 if test "$iconv" = "yes" ; then
7000   echo "CONFIG_ICONV=y" >> $config_host_mak
7001   echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7002   echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7003 fi
7004 if test "$curses" = "yes" ; then
7005   echo "CONFIG_CURSES=m" >> $config_host_mak
7006   echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7007   echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7008 fi
7009 if test "$pipe2" = "yes" ; then
7010   echo "CONFIG_PIPE2=y" >> $config_host_mak
7011 fi
7012 if test "$accept4" = "yes" ; then
7013   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7014 fi
7015 if test "$splice" = "yes" ; then
7016   echo "CONFIG_SPLICE=y" >> $config_host_mak
7017 fi
7018 if test "$eventfd" = "yes" ; then
7019   echo "CONFIG_EVENTFD=y" >> $config_host_mak
7020 fi
7021 if test "$memfd" = "yes" ; then
7022   echo "CONFIG_MEMFD=y" >> $config_host_mak
7023 fi
7024 if test "$have_usbfs" = "yes" ; then
7025   echo "CONFIG_USBFS=y" >> $config_host_mak
7026 fi
7027 if test "$fallocate" = "yes" ; then
7028   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7029 fi
7030 if test "$fallocate_punch_hole" = "yes" ; then
7031   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7032 fi
7033 if test "$fallocate_zero_range" = "yes" ; then
7034   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7035 fi
7036 if test "$posix_fallocate" = "yes" ; then
7037   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7038 fi
7039 if test "$sync_file_range" = "yes" ; then
7040   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7041 fi
7042 if test "$fiemap" = "yes" ; then
7043   echo "CONFIG_FIEMAP=y" >> $config_host_mak
7044 fi
7045 if test "$dup3" = "yes" ; then
7046   echo "CONFIG_DUP3=y" >> $config_host_mak
7047 fi
7048 if test "$ppoll" = "yes" ; then
7049   echo "CONFIG_PPOLL=y" >> $config_host_mak
7050 fi
7051 if test "$prctl_pr_set_timerslack" = "yes" ; then
7052   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7053 fi
7054 if test "$epoll" = "yes" ; then
7055   echo "CONFIG_EPOLL=y" >> $config_host_mak
7056 fi
7057 if test "$epoll_create1" = "yes" ; then
7058   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7059 fi
7060 if test "$sendfile" = "yes" ; then
7061   echo "CONFIG_SENDFILE=y" >> $config_host_mak
7062 fi
7063 if test "$timerfd" = "yes" ; then
7064   echo "CONFIG_TIMERFD=y" >> $config_host_mak
7065 fi
7066 if test "$setns" = "yes" ; then
7067   echo "CONFIG_SETNS=y" >> $config_host_mak
7068 fi
7069 if test "$clock_adjtime" = "yes" ; then
7070   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7071 fi
7072 if test "$syncfs" = "yes" ; then
7073   echo "CONFIG_SYNCFS=y" >> $config_host_mak
7074 fi
7075 if test "$kcov" = "yes" ; then
7076   echo "CONFIG_KCOV=y" >> $config_host_mak
7077 fi
7078 if test "$inotify" = "yes" ; then
7079   echo "CONFIG_INOTIFY=y" >> $config_host_mak
7080 fi
7081 if test "$inotify1" = "yes" ; then
7082   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7083 fi
7084 if test "$sem_timedwait" = "yes" ; then
7085   echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7086 fi
7087 if test "$strchrnul" = "yes" ; then
7088   echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7089 fi
7090 if test "$st_atim" = "yes" ; then
7091   echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7092 fi
7093 if test "$byteswap_h" = "yes" ; then
7094   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7095 fi
7096 if test "$bswap_h" = "yes" ; then
7097   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7098 fi
7099 if test "$curl" = "yes" ; then
7100   echo "CONFIG_CURL=m" >> $config_host_mak
7101   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7102   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7103 fi
7104 if test "$brlapi" = "yes" ; then
7105   echo "CONFIG_BRLAPI=y" >> $config_host_mak
7106   echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7107 fi
7108 if test "$gtk" = "yes" ; then
7109   echo "CONFIG_GTK=m" >> $config_host_mak
7110   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7111   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7112   if test "$gtk_gl" = "yes" ; then
7113     echo "CONFIG_GTK_GL=y" >> $config_host_mak
7114   fi
7115 fi
7116 if test "$gio" = "yes" ; then
7117     echo "CONFIG_GIO=y" >> $config_host_mak
7118     echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7119     echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7120     echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7121 fi
7122 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7123 if test "$gnutls" = "yes" ; then
7124   echo "CONFIG_GNUTLS=y" >> $config_host_mak
7125 fi
7126 if test "$gcrypt" = "yes" ; then
7127   echo "CONFIG_GCRYPT=y" >> $config_host_mak
7128   if test "$gcrypt_hmac" = "yes" ; then
7129     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7130   fi
7131 fi
7132 if test "$nettle" = "yes" ; then
7133   echo "CONFIG_NETTLE=y" >> $config_host_mak
7134   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7135 fi
7136 if test "$qemu_private_xts" = "yes" ; then
7137   echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7138 fi
7139 if test "$tasn1" = "yes" ; then
7140   echo "CONFIG_TASN1=y" >> $config_host_mak
7141 fi
7142 if test "$auth_pam" = "yes" ; then
7143     echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7144 fi
7145 if test "$have_ifaddrs_h" = "yes" ; then
7146     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7147 fi
7148 if test "$have_broken_size_max" = "yes" ; then
7149     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7150 fi
7151
7152 # Work around a system header bug with some kernel/XFS header
7153 # versions where they both try to define 'struct fsxattr':
7154 # xfs headers will not try to redefine structs from linux headers
7155 # if this macro is set.
7156 if test "$have_fsxattr" = "yes" ; then
7157     echo "HAVE_FSXATTR=y" >> $config_host_mak
7158 fi
7159 if test "$have_copy_file_range" = "yes" ; then
7160     echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7161 fi
7162 if test "$vte" = "yes" ; then
7163   echo "CONFIG_VTE=y" >> $config_host_mak
7164   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7165   echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7166 fi
7167 if test "$virglrenderer" = "yes" ; then
7168   echo "CONFIG_VIRGL=y" >> $config_host_mak
7169   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7170   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7171 fi
7172 if test "$xen" = "yes" ; then
7173   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7174   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7175 fi
7176 if test "$linux_aio" = "yes" ; then
7177   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7178 fi
7179 if test "$linux_io_uring" = "yes" ; then
7180   echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7181   echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7182   echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7183 fi
7184 if test "$attr" = "yes" ; then
7185   echo "CONFIG_ATTR=y" >> $config_host_mak
7186 fi
7187 if test "$libattr" = "yes" ; then
7188   echo "CONFIG_LIBATTR=y" >> $config_host_mak
7189 fi
7190 if test "$virtfs" = "yes" ; then
7191   echo "CONFIG_VIRTFS=y" >> $config_host_mak
7192 fi
7193 if test "$mpath" = "yes" ; then
7194   echo "CONFIG_MPATH=y" >> $config_host_mak
7195   if test "$mpathpersist_new_api" = "yes"; then
7196     echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7197   fi
7198 fi
7199 if test "$vhost_scsi" = "yes" ; then
7200   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7201 fi
7202 if test "$vhost_net" = "yes" ; then
7203   echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7204 fi
7205 if test "$vhost_net_user" = "yes" ; then
7206   echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7207 fi
7208 if test "$vhost_crypto" = "yes" ; then
7209   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7210 fi
7211 if test "$vhost_vsock" = "yes" ; then
7212   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7213   if test "$vhost_user" = "yes" ; then
7214     echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7215   fi
7216 fi
7217 if test "$vhost_kernel" = "yes" ; then
7218   echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7219 fi
7220 if test "$vhost_user" = "yes" ; then
7221   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7222 fi
7223 if test "$vhost_user_fs" = "yes" ; then
7224   echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7225 fi
7226 if test "$blobs" = "yes" ; then
7227   echo "INSTALL_BLOBS=yes" >> $config_host_mak
7228 fi
7229 if test "$iovec" = "yes" ; then
7230   echo "CONFIG_IOVEC=y" >> $config_host_mak
7231 fi
7232 if test "$preadv" = "yes" ; then
7233   echo "CONFIG_PREADV=y" >> $config_host_mak
7234 fi
7235 if test "$fdt" != "no" ; then
7236   echo "CONFIG_FDT=y" >> $config_host_mak
7237 fi
7238 if test "$membarrier" = "yes" ; then
7239   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7240 fi
7241 if test "$signalfd" = "yes" ; then
7242   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7243 fi
7244 if test "$optreset" = "yes" ; then
7245   echo "HAVE_OPTRESET=y" >> $config_host_mak
7246 fi
7247 if test "$tcg" = "yes"; then
7248   echo "CONFIG_TCG=y" >> $config_host_mak
7249   if test "$tcg_interpreter" = "yes" ; then
7250     echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7251   fi
7252 fi
7253 if test "$fdatasync" = "yes" ; then
7254   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7255 fi
7256 if test "$madvise" = "yes" ; then
7257   echo "CONFIG_MADVISE=y" >> $config_host_mak
7258 fi
7259 if test "$posix_madvise" = "yes" ; then
7260   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7261 fi
7262 if test "$posix_memalign" = "yes" ; then
7263   echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7264 fi
7265
7266 if test "$spice" = "yes" ; then
7267   echo "CONFIG_SPICE=y" >> $config_host_mak
7268 fi
7269
7270 if test "$smartcard" = "yes" ; then
7271   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7272   echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7273   echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7274 fi
7275
7276 if test "$libusb" = "yes" ; then
7277   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7278   echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7279   echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7280 fi
7281
7282 if test "$usb_redir" = "yes" ; then
7283   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7284   echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7285   echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7286 fi
7287
7288 if test "$opengl" = "yes" ; then
7289   echo "CONFIG_OPENGL=y" >> $config_host_mak
7290   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7291   if test "$opengl_dmabuf" = "yes" ; then
7292     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7293   fi
7294 fi
7295
7296 if test "$gbm" = "yes" ; then
7297     echo "CONFIG_GBM=y" >> $config_host_mak
7298     echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7299     echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7300 fi
7301
7302
7303 if test "$malloc_trim" = "yes" ; then
7304   echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7305 fi
7306
7307 if test "$avx2_opt" = "yes" ; then
7308   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7309 fi
7310
7311 if test "$avx512f_opt" = "yes" ; then
7312   echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7313 fi
7314
7315 if test "$lzo" = "yes" ; then
7316   echo "CONFIG_LZO=y" >> $config_host_mak
7317 fi
7318
7319 if test "$snappy" = "yes" ; then
7320   echo "CONFIG_SNAPPY=y" >> $config_host_mak
7321 fi
7322
7323 if test "$bzip2" = "yes" ; then
7324   echo "CONFIG_BZIP2=y" >> $config_host_mak
7325   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7326 fi
7327
7328 if test "$lzfse" = "yes" ; then
7329   echo "CONFIG_LZFSE=y" >> $config_host_mak
7330   echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7331 fi
7332
7333 if test "$zstd" = "yes" ; then
7334   echo "CONFIG_ZSTD=y" >> $config_host_mak
7335 fi
7336
7337 if test "$libiscsi" = "yes" ; then
7338   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7339   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7340   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7341 fi
7342
7343 if test "$libnfs" = "yes" ; then
7344   echo "CONFIG_LIBNFS=m" >> $config_host_mak
7345   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7346 fi
7347
7348 if test "$seccomp" = "yes"; then
7349   echo "CONFIG_SECCOMP=y" >> $config_host_mak
7350   echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7351   echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7352 fi
7353
7354 # XXX: suppress that
7355 if [ "$bsd" = "yes" ] ; then
7356   echo "CONFIG_BSD=y" >> $config_host_mak
7357 fi
7358
7359 if test "$localtime_r" = "yes" ; then
7360   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7361 fi
7362 if test "$qom_cast_debug" = "yes" ; then
7363   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7364 fi
7365 if test "$rbd" = "yes" ; then
7366   echo "CONFIG_RBD=m" >> $config_host_mak
7367   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7368   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7369 fi
7370
7371 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7372 if test "$coroutine_pool" = "yes" ; then
7373   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7374 else
7375   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7376 fi
7377
7378 if test "$debug_stack_usage" = "yes" ; then
7379   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7380 fi
7381
7382 if test "$crypto_afalg" = "yes" ; then
7383   echo "CONFIG_AF_ALG=y" >> $config_host_mak
7384 fi
7385
7386 if test "$open_by_handle_at" = "yes" ; then
7387   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7388 fi
7389
7390 if test "$linux_magic_h" = "yes" ; then
7391   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7392 fi
7393
7394 if test "$pragma_diagnostic_available" = "yes" ; then
7395   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7396 fi
7397
7398 if test "$valgrind_h" = "yes" ; then
7399   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7400 fi
7401
7402 if test "$have_asan_iface_fiber" = "yes" ; then
7403     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7404 fi
7405
7406 if test "$has_environ" = "yes" ; then
7407   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7408 fi
7409
7410 if test "$cpuid_h" = "yes" ; then
7411   echo "CONFIG_CPUID_H=y" >> $config_host_mak
7412 fi
7413
7414 if test "$int128" = "yes" ; then
7415   echo "CONFIG_INT128=y" >> $config_host_mak
7416 fi
7417
7418 if test "$atomic128" = "yes" ; then
7419   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7420 fi
7421
7422 if test "$cmpxchg128" = "yes" ; then
7423   echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7424 fi
7425
7426 if test "$atomic64" = "yes" ; then
7427   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7428 fi
7429
7430 if test "$attralias" = "yes" ; then
7431   echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7432 fi
7433
7434 if test "$getauxval" = "yes" ; then
7435   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7436 fi
7437
7438 if test "$glusterfs" = "yes" ; then
7439   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7440   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7441   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7442 fi
7443
7444 if test "$glusterfs_xlator_opt" = "yes" ; then
7445   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7446 fi
7447
7448 if test "$glusterfs_discard" = "yes" ; then
7449   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7450 fi
7451
7452 if test "$glusterfs_fallocate" = "yes" ; then
7453   echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7454 fi
7455
7456 if test "$glusterfs_zerofill" = "yes" ; then
7457   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7458 fi
7459
7460 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7461   echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7462 fi
7463
7464 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7465   echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7466 fi
7467
7468 if test "$libssh" = "yes" ; then
7469   echo "CONFIG_LIBSSH=m" >> $config_host_mak
7470   echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7471   echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7472 fi
7473
7474 if test "$live_block_migration" = "yes" ; then
7475   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7476 fi
7477
7478 if test "$tpm" = "yes"; then
7479   echo 'CONFIG_TPM=y' >> $config_host_mak
7480 fi
7481
7482 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7483 if have_backend "nop"; then
7484   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7485 fi
7486 if have_backend "simple"; then
7487   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7488   # Set the appropriate trace file.
7489   trace_file="\"$trace_file-\" FMT_pid"
7490 fi
7491 if have_backend "log"; then
7492   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7493 fi
7494 if have_backend "ust"; then
7495   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7496 fi
7497 if have_backend "dtrace"; then
7498   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7499   if test "$trace_backend_stap" = "yes" ; then
7500     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7501   fi
7502 fi
7503 if have_backend "ftrace"; then
7504   if test "$linux" = "yes" ; then
7505     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7506   else
7507     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7508   fi
7509 fi
7510 if have_backend "syslog"; then
7511   if test "$posix_syslog" = "yes" ; then
7512     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7513   else
7514     feature_not_found "syslog(trace backend)" "syslog not available"
7515   fi
7516 fi
7517 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7518
7519 if test "$rdma" = "yes" ; then
7520   echo "CONFIG_RDMA=y" >> $config_host_mak
7521   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7522 fi
7523
7524 if test "$pvrdma" = "yes" ; then
7525   echo "CONFIG_PVRDMA=y" >> $config_host_mak
7526 fi
7527
7528 if test "$have_rtnetlink" = "yes" ; then
7529   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7530 fi
7531
7532 if test "$libxml2" = "yes" ; then
7533   echo "CONFIG_LIBXML2=y" >> $config_host_mak
7534   echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7535   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7536 fi
7537
7538 if test "$replication" = "yes" ; then
7539   echo "CONFIG_REPLICATION=y" >> $config_host_mak
7540 fi
7541
7542 if test "$have_af_vsock" = "yes" ; then
7543   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7544 fi
7545
7546 if test "$have_sysmacros" = "yes" ; then
7547   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7548 fi
7549
7550 if test "$have_static_assert" = "yes" ; then
7551   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7552 fi
7553
7554 if test "$have_utmpx" = "yes" ; then
7555   echo "HAVE_UTMPX=y" >> $config_host_mak
7556 fi
7557 if test "$have_getrandom" = "yes" ; then
7558   echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7559 fi
7560 if test "$ivshmem" = "yes" ; then
7561   echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7562 fi
7563 if test "$capstone" != "no" ; then
7564   echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7565 fi
7566 if test "$debug_mutex" = "yes" ; then
7567   echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7568 fi
7569
7570 # Hold two types of flag:
7571 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
7572 #                                     a thread we have a handle to
7573 #   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7574 #                                     platform
7575 if test "$pthread_setname_np_w_tid" = "yes" ; then
7576   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7577   echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7578 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7579   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7580   echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7581 fi
7582
7583 if test "$vxhs" = "yes" ; then
7584   echo "CONFIG_VXHS=y" >> $config_host_mak
7585   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7586 fi
7587
7588 if test "$libpmem" = "yes" ; then
7589   echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7590 fi
7591
7592 if test "$bochs" = "yes" ; then
7593   echo "CONFIG_BOCHS=y" >> $config_host_mak
7594 fi
7595 if test "$cloop" = "yes" ; then
7596   echo "CONFIG_CLOOP=y" >> $config_host_mak
7597 fi
7598 if test "$dmg" = "yes" ; then
7599   echo "CONFIG_DMG=y" >> $config_host_mak
7600 fi
7601 if test "$qcow1" = "yes" ; then
7602   echo "CONFIG_QCOW1=y" >> $config_host_mak
7603 fi
7604 if test "$vdi" = "yes" ; then
7605   echo "CONFIG_VDI=y" >> $config_host_mak
7606 fi
7607 if test "$vvfat" = "yes" ; then
7608   echo "CONFIG_VVFAT=y" >> $config_host_mak
7609 fi
7610 if test "$qed" = "yes" ; then
7611   echo "CONFIG_QED=y" >> $config_host_mak
7612 fi
7613 if test "$parallels" = "yes" ; then
7614   echo "CONFIG_PARALLELS=y" >> $config_host_mak
7615 fi
7616 if test "$sheepdog" = "yes" ; then
7617   echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7618 fi
7619 if test "$fuzzing" = "yes" ; then
7620   if test "$have_fuzzer" = "yes"; then
7621     FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7622     FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7623     CFLAGS=" -fsanitize=address,fuzzer-no-link"
7624   else
7625     error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7626     exit 1
7627   fi
7628 fi
7629
7630 if test "$plugins" = "yes" ; then
7631     echo "CONFIG_PLUGIN=y" >> $config_host_mak
7632     LIBS="-ldl $LIBS"
7633     # Copy the export object list to the build dir
7634     if test "$ld_dynamic_list" = "yes" ; then
7635         echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7636         ld_symbols=qemu-plugins-ld.symbols
7637         cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7638     elif test "$ld_exported_symbols_list" = "yes" ; then
7639         echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7640         ld64_symbols=qemu-plugins-ld64.symbols
7641         echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7642         grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7643             sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7644     else
7645         error_exit \
7646             "If \$plugins=yes, either \$ld_dynamic_list or " \
7647             "\$ld_exported_symbols_list should have been set to 'yes'."
7648     fi
7649 fi
7650
7651 if test -n "$gdb_bin" ; then
7652     echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7653 fi
7654
7655 if test "$tcg_interpreter" = "yes"; then
7656   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7657 elif test "$ARCH" = "sparc64" ; then
7658   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7659 elif test "$ARCH" = "s390x" ; then
7660   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7661 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7662   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7663 elif test "$ARCH" = "ppc64" ; then
7664   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7665 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7666   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7667 else
7668   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7669 fi
7670
7671 echo "HELPERS=$helpers" >> $config_host_mak
7672 echo "TOOLS=$tools" >> $config_host_mak
7673 echo "ROMS=$roms" >> $config_host_mak
7674 echo "MAKE=$make" >> $config_host_mak
7675 echo "INSTALL=$install" >> $config_host_mak
7676 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7677 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7678 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7679 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7680 echo "PYTHON=$python" >> $config_host_mak
7681 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7682 echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7683 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7684 echo "CC=$cc" >> $config_host_mak
7685 if $iasl -h > /dev/null 2>&1; then
7686   echo "IASL=$iasl" >> $config_host_mak
7687 fi
7688 echo "HOST_CC=$host_cc" >> $config_host_mak
7689 echo "CXX=$cxx" >> $config_host_mak
7690 echo "OBJCC=$objcc" >> $config_host_mak
7691 echo "AR=$ar" >> $config_host_mak
7692 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7693 echo "AS=$as" >> $config_host_mak
7694 echo "CCAS=$ccas" >> $config_host_mak
7695 echo "CPP=$cpp" >> $config_host_mak
7696 echo "OBJCOPY=$objcopy" >> $config_host_mak
7697 echo "LD=$ld" >> $config_host_mak
7698 echo "RANLIB=$ranlib" >> $config_host_mak
7699 echo "NM=$nm" >> $config_host_mak
7700 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7701 echo "WINDRES=$windres" >> $config_host_mak
7702 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7703 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7704 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7705 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7706 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7707 if test "$sparse" = "yes" ; then
7708   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
7709   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
7710   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
7711   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
7712   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7713 fi
7714 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7715 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7716 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7717 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7718 echo "LIBS+=$LIBS" >> $config_host_mak
7719 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7720 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7721 echo "EXESUF=$EXESUF" >> $config_host_mak
7722 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7723 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7724 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7725 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7726 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7727 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7728 if test "$gcov" = "yes" ; then
7729   echo "CONFIG_GCOV=y" >> $config_host_mak
7730   echo "GCOV=$gcov_tool" >> $config_host_mak
7731 fi
7732
7733 if test "$libudev" != "no"; then
7734     echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7735     echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7736 fi
7737 if test "$fuzzing" != "no"; then
7738     echo "CONFIG_FUZZ=y" >> $config_host_mak
7739     echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7740     echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7741 fi
7742
7743 if test "$edk2_blobs" = "yes" ; then
7744   echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7745 fi
7746
7747 # use included Linux headers
7748 if test "$linux" = "yes" ; then
7749   mkdir -p linux-headers
7750   case "$cpu" in
7751   i386|x86_64|x32)
7752     linux_arch=x86
7753     ;;
7754   ppc|ppc64|ppc64le)
7755     linux_arch=powerpc
7756     ;;
7757   s390x)
7758     linux_arch=s390
7759     ;;
7760   aarch64)
7761     linux_arch=arm64
7762     ;;
7763   mips64)
7764     linux_arch=mips
7765     ;;
7766   *)
7767     # For most CPUs the kernel architecture name and QEMU CPU name match.
7768     linux_arch="$cpu"
7769     ;;
7770   esac
7771     # For non-KVM architectures we will not have asm headers
7772     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7773       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7774     fi
7775 fi
7776
7777 for target in $target_list; do
7778 target_dir="$target"
7779 config_target_mak=$target_dir/config-target.mak
7780 target_name=$(echo $target | cut -d '-' -f 1)
7781 target_aligned_only="no"
7782 case "$target_name" in
7783   alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7784   target_aligned_only="yes"
7785   ;;
7786 esac
7787 target_bigendian="no"
7788 case "$target_name" in
7789   armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7790   target_bigendian="yes"
7791   ;;
7792 esac
7793 target_softmmu="no"
7794 target_user_only="no"
7795 target_linux_user="no"
7796 target_bsd_user="no"
7797 case "$target" in
7798   ${target_name}-softmmu)
7799     target_softmmu="yes"
7800     ;;
7801   ${target_name}-linux-user)
7802     target_user_only="yes"
7803     target_linux_user="yes"
7804     ;;
7805   ${target_name}-bsd-user)
7806     target_user_only="yes"
7807     target_bsd_user="yes"
7808     ;;
7809   *)
7810     error_exit "Target '$target' not recognised"
7811     exit 1
7812     ;;
7813 esac
7814
7815 mkdir -p $target_dir
7816 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7817
7818 bflt="no"
7819 mttcg="no"
7820 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7821 gdb_xml_files=""
7822
7823 TARGET_ARCH="$target_name"
7824 TARGET_BASE_ARCH=""
7825 TARGET_ABI_DIR=""
7826
7827 case "$target_name" in
7828   i386)
7829     mttcg="yes"
7830         gdb_xml_files="i386-32bit.xml"
7831     TARGET_SYSTBL_ABI=i386
7832   ;;
7833   x86_64)
7834     TARGET_BASE_ARCH=i386
7835     TARGET_SYSTBL_ABI=common,64
7836     mttcg="yes"
7837         gdb_xml_files="i386-64bit.xml"
7838   ;;
7839   alpha)
7840     mttcg="yes"
7841     TARGET_SYSTBL_ABI=common
7842   ;;
7843   arm|armeb)
7844     TARGET_ARCH=arm
7845     TARGET_SYSTBL_ABI=common,oabi
7846     bflt="yes"
7847     mttcg="yes"
7848     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7849   ;;
7850   aarch64|aarch64_be)
7851     TARGET_ARCH=aarch64
7852     TARGET_BASE_ARCH=arm
7853     bflt="yes"
7854     mttcg="yes"
7855     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"
7856   ;;
7857   cris)
7858   ;;
7859   hppa)
7860     mttcg="yes"
7861     TARGET_SYSTBL_ABI=common,32
7862   ;;
7863   lm32)
7864   ;;
7865   m68k)
7866     bflt="yes"
7867     gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
7868     TARGET_SYSTBL_ABI=common
7869   ;;
7870   microblaze|microblazeel)
7871     TARGET_ARCH=microblaze
7872     TARGET_SYSTBL_ABI=common
7873     bflt="yes"
7874     echo "TARGET_ABI32=y" >> $config_target_mak
7875   ;;
7876   mips|mipsel)
7877     mttcg="yes"
7878     TARGET_ARCH=mips
7879     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7880     TARGET_SYSTBL_ABI=o32
7881   ;;
7882   mipsn32|mipsn32el)
7883     mttcg="yes"
7884     TARGET_ARCH=mips64
7885     TARGET_BASE_ARCH=mips
7886     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7887     echo "TARGET_ABI32=y" >> $config_target_mak
7888     TARGET_SYSTBL_ABI=n32
7889   ;;
7890   mips64|mips64el)
7891     mttcg="no"
7892     TARGET_ARCH=mips64
7893     TARGET_BASE_ARCH=mips
7894     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7895     TARGET_SYSTBL_ABI=n64
7896   ;;
7897   moxie)
7898   ;;
7899   nios2)
7900   ;;
7901   or1k)
7902     TARGET_ARCH=openrisc
7903     TARGET_BASE_ARCH=openrisc
7904   ;;
7905   ppc)
7906     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7907     TARGET_SYSTBL_ABI=common,nospu,32
7908   ;;
7909   ppc64)
7910     TARGET_BASE_ARCH=ppc
7911     TARGET_ABI_DIR=ppc
7912     TARGET_SYSTBL_ABI=common,nospu,64
7913     mttcg=yes
7914     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7915   ;;
7916   ppc64le)
7917     TARGET_ARCH=ppc64
7918     TARGET_BASE_ARCH=ppc
7919     TARGET_ABI_DIR=ppc
7920     TARGET_SYSTBL_ABI=common,nospu,64
7921     mttcg=yes
7922     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7923   ;;
7924   ppc64abi32)
7925     TARGET_ARCH=ppc64
7926     TARGET_BASE_ARCH=ppc
7927     TARGET_ABI_DIR=ppc
7928     TARGET_SYSTBL_ABI=common,nospu,32
7929     echo "TARGET_ABI32=y" >> $config_target_mak
7930     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7931   ;;
7932   riscv32)
7933     TARGET_BASE_ARCH=riscv
7934     TARGET_ABI_DIR=riscv
7935     mttcg=yes
7936     gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
7937   ;;
7938   riscv64)
7939     TARGET_BASE_ARCH=riscv
7940     TARGET_ABI_DIR=riscv
7941     mttcg=yes
7942     gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
7943   ;;
7944   rx)
7945     TARGET_ARCH=rx
7946     bflt="yes"
7947     target_compiler=$cross_cc_rx
7948     gdb_xml_files="rx-core.xml"
7949   ;;
7950   sh4|sh4eb)
7951     TARGET_ARCH=sh4
7952     TARGET_SYSTBL_ABI=common
7953     bflt="yes"
7954   ;;
7955   sparc)
7956     TARGET_SYSTBL_ABI=common,32
7957   ;;
7958   sparc64)
7959     TARGET_BASE_ARCH=sparc
7960     TARGET_SYSTBL_ABI=common,64
7961   ;;
7962   sparc32plus)
7963     TARGET_ARCH=sparc64
7964     TARGET_BASE_ARCH=sparc
7965     TARGET_ABI_DIR=sparc
7966     TARGET_SYSTBL_ABI=common,32
7967     echo "TARGET_ABI32=y" >> $config_target_mak
7968   ;;
7969   s390x)
7970     TARGET_SYSTBL_ABI=common,64
7971     mttcg=yes
7972     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7973   ;;
7974   tilegx)
7975   ;;
7976   tricore)
7977   ;;
7978   unicore32)
7979   ;;
7980   xtensa|xtensaeb)
7981     TARGET_ARCH=xtensa
7982     TARGET_SYSTBL_ABI=common
7983     bflt="yes"
7984     mttcg="yes"
7985   ;;
7986   *)
7987     error_exit "Unsupported target CPU"
7988   ;;
7989 esac
7990 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7991 if [ "$TARGET_BASE_ARCH" = "" ]; then
7992   TARGET_BASE_ARCH=$TARGET_ARCH
7993 fi
7994
7995 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7996
7997 upper() {
7998     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7999 }
8000
8001 target_arch_name="$(upper $TARGET_ARCH)"
8002 echo "TARGET_$target_arch_name=y" >> $config_target_mak
8003 echo "TARGET_NAME=$target_name" >> $config_target_mak
8004 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8005 if [ "$TARGET_ABI_DIR" = "" ]; then
8006   TARGET_ABI_DIR=$TARGET_ARCH
8007 fi
8008 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8009 if [ "$HOST_VARIANT_DIR" != "" ]; then
8010     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8011 fi
8012 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8013     echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8014 fi
8015
8016 if supported_xen_target $target; then
8017     echo "CONFIG_XEN=y" >> $config_target_mak
8018     echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
8019     if test "$xen_pci_passthrough" = yes; then
8020         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8021     fi
8022 else
8023     echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
8024 fi
8025 if supported_kvm_target $target; then
8026     echo "CONFIG_KVM=y" >> $config_target_mak
8027     echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8028 else
8029     echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
8030 fi
8031 if supported_hax_target $target; then
8032     echo "CONFIG_HAX=y" >> $config_target_mak
8033 fi
8034 if supported_hvf_target $target; then
8035     echo "CONFIG_HVF=y" >> $config_target_mak
8036 fi
8037 if supported_whpx_target $target; then
8038     echo "CONFIG_WHPX=y" >> $config_target_mak
8039 fi
8040 if test "$target_aligned_only" = "yes" ; then
8041   echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8042 fi
8043 if test "$target_bigendian" = "yes" ; then
8044   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8045 fi
8046 if test "$target_softmmu" = "yes" ; then
8047   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8048   if test "$mttcg" = "yes" ; then
8049     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8050   fi
8051 fi
8052 if test "$target_user_only" = "yes" ; then
8053   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8054   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8055 fi
8056 if test "$target_linux_user" = "yes" ; then
8057   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8058 fi
8059 list=""
8060 if test ! -z "$gdb_xml_files" ; then
8061   for x in $gdb_xml_files; do
8062     list="$list $source_path/gdb-xml/$x"
8063   done
8064   echo "TARGET_XML_FILES=$list" >> $config_target_mak
8065 fi
8066
8067 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8068   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8069 fi
8070 if test "$target_bsd_user" = "yes" ; then
8071   echo "CONFIG_BSD_USER=y" >> $config_target_mak
8072 fi
8073
8074
8075 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8076
8077 cflags=""
8078 ldflags=""
8079
8080 disas_config() {
8081   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8082   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8083 }
8084
8085 for i in $ARCH $TARGET_BASE_ARCH ; do
8086   case "$i" in
8087   alpha)
8088     disas_config "ALPHA"
8089   ;;
8090   aarch64)
8091     if test -n "${cxx}"; then
8092       disas_config "ARM_A64"
8093     fi
8094   ;;
8095   arm)
8096     disas_config "ARM"
8097     if test -n "${cxx}"; then
8098       disas_config "ARM_A64"
8099     fi
8100   ;;
8101   cris)
8102     disas_config "CRIS"
8103   ;;
8104   hppa)
8105     disas_config "HPPA"
8106   ;;
8107   i386|x86_64|x32)
8108     disas_config "I386"
8109   ;;
8110   lm32)
8111     disas_config "LM32"
8112   ;;
8113   m68k)
8114     disas_config "M68K"
8115   ;;
8116   microblaze*)
8117     disas_config "MICROBLAZE"
8118   ;;
8119   mips*)
8120     disas_config "MIPS"
8121     if test -n "${cxx}"; then
8122       disas_config "NANOMIPS"
8123     fi
8124   ;;
8125   moxie*)
8126     disas_config "MOXIE"
8127   ;;
8128   nios2)
8129     disas_config "NIOS2"
8130   ;;
8131   or1k)
8132     disas_config "OPENRISC"
8133   ;;
8134   ppc*)
8135     disas_config "PPC"
8136   ;;
8137   riscv*)
8138     disas_config "RISCV"
8139   ;;
8140   rx)
8141     disas_config "RX"
8142   ;;
8143   s390*)
8144     disas_config "S390"
8145   ;;
8146   sh4)
8147     disas_config "SH4"
8148   ;;
8149   sparc*)
8150     disas_config "SPARC"
8151   ;;
8152   xtensa*)
8153     disas_config "XTENSA"
8154   ;;
8155   esac
8156 done
8157 if test "$tcg_interpreter" = "yes" ; then
8158   disas_config "TCI"
8159 fi
8160
8161 case "$ARCH" in
8162 alpha)
8163   # Ensure there's only a single GP
8164   cflags="-msmall-data $cflags"
8165 ;;
8166 esac
8167
8168 if test "$gprof" = "yes" ; then
8169   if test "$target_linux_user" = "yes" ; then
8170     cflags="-p $cflags"
8171     ldflags="-p $ldflags"
8172   fi
8173   if test "$target_softmmu" = "yes" ; then
8174     ldflags="-p $ldflags"
8175     echo "GPROF_CFLAGS=-p" >> $config_target_mak
8176   fi
8177 fi
8178
8179 # Newer kernels on s390 check for an S390_PGSTE program header and
8180 # enable the pgste page table extensions in that case. This makes
8181 # the vm.allocate_pgste sysctl unnecessary. We enable this program
8182 # header if
8183 #  - we build on s390x
8184 #  - we build the system emulation for s390x (qemu-system-s390x)
8185 #  - KVM is enabled
8186 #  - the linker supports --s390-pgste
8187 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8188         test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8189     if ld_has --s390-pgste ; then
8190         ldflags="-Wl,--s390-pgste $ldflags"
8191     fi
8192 fi
8193
8194 echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8195 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8196
8197 done # for target in $targets
8198
8199 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8200 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8201
8202 if [ "$fdt" = "git" ]; then
8203   echo "config-host.h: dtc/all" >> $config_host_mak
8204 fi
8205 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8206   echo "config-host.h: capstone/all" >> $config_host_mak
8207 fi
8208 if test -n "$LIBCAPSTONE"; then
8209   echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8210 fi
8211
8212 if test "$numa" = "yes"; then
8213   echo "CONFIG_NUMA=y" >> $config_host_mak
8214 fi
8215
8216 if test "$ccache_cpp2" = "yes"; then
8217   echo "export CCACHE_CPP2=y" >> $config_host_mak
8218 fi
8219
8220 # If we're using a separate build tree, set it up now.
8221 # DIRS are directories which we simply mkdir in the build tree;
8222 # LINKS are things to symlink back into the source tree
8223 # (these can be both files and directories).
8224 # Caution: do not add files or directories here using wildcards. This
8225 # will result in problems later if a new file matching the wildcard is
8226 # added to the source tree -- nothing will cause configure to be rerun
8227 # so the build tree will be missing the link back to the new file, and
8228 # tests might fail. Prefer to keep the relevant files in their own
8229 # directory and symlink the directory instead.
8230 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8231 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8232 DIRS="$DIRS docs docs/interop fsdev scsi"
8233 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8234 DIRS="$DIRS roms/seabios roms/vgabios"
8235 LINKS="Makefile"
8236 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8237 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
8238 LINKS="$LINKS tests/plugin/Makefile"
8239 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8240 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8241 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8242 LINKS="$LINKS pc-bios/qemu-icon.bmp"
8243 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8244 LINKS="$LINKS tests/acceptance tests/data"
8245 LINKS="$LINKS tests/qemu-iotests/check"
8246 LINKS="$LINKS python"
8247 for bios_file in \
8248     $source_path/pc-bios/*.bin \
8249     $source_path/pc-bios/*.lid \
8250     $source_path/pc-bios/*.rom \
8251     $source_path/pc-bios/*.dtb \
8252     $source_path/pc-bios/*.img \
8253     $source_path/pc-bios/openbios-* \
8254     $source_path/pc-bios/u-boot.* \
8255     $source_path/pc-bios/edk2-*.fd.bz2 \
8256     $source_path/pc-bios/palcode-*
8257 do
8258     LINKS="$LINKS pc-bios/$(basename $bios_file)"
8259 done
8260 mkdir -p $DIRS
8261 for f in $LINKS ; do
8262     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8263         symlink "$source_path/$f" "$f"
8264     fi
8265 done
8266
8267 (for i in $cross_cc_vars; do
8268   export $i
8269 done
8270 export target_list source_path use_containers
8271 $source_path/tests/tcg/configure.sh)
8272
8273 # temporary config to build submodules
8274 for rom in seabios vgabios ; do
8275     config_mak=roms/$rom/config.mak
8276     echo "# Automatically generated by configure - do not modify" > $config_mak
8277     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8278     echo "AS=$as" >> $config_mak
8279     echo "CCAS=$ccas" >> $config_mak
8280     echo "CC=$cc" >> $config_mak
8281     echo "BCC=bcc" >> $config_mak
8282     echo "CPP=$cpp" >> $config_mak
8283     echo "OBJCOPY=objcopy" >> $config_mak
8284     echo "IASL=$iasl" >> $config_mak
8285     echo "LD=$ld" >> $config_mak
8286     echo "RANLIB=$ranlib" >> $config_mak
8287 done
8288
8289 # set up qemu-iotests in this build directory
8290 iotests_common_env="tests/qemu-iotests/common.env"
8291
8292 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8293 echo >> "$iotests_common_env"
8294 echo "export PYTHON='$python'" >> "$iotests_common_env"
8295
8296 # Save the configure command line for later reuse.
8297 cat <<EOD >config.status
8298 #!/bin/sh
8299 # Generated by configure.
8300 # Run this file to recreate the current configuration.
8301 # Compiler output produced by configure, useful for debugging
8302 # configure, is in config.log if it exists.
8303 EOD
8304
8305 preserve_env() {
8306     envname=$1
8307
8308     eval envval=\$$envname
8309
8310     if test -n "$envval"
8311     then
8312         echo "$envname='$envval'" >> config.status
8313         echo "export $envname" >> config.status
8314     else
8315         echo "unset $envname" >> config.status
8316     fi
8317 }
8318
8319 # Preserve various env variables that influence what
8320 # features/build target configure will detect
8321 preserve_env AR
8322 preserve_env AS
8323 preserve_env CC
8324 preserve_env CPP
8325 preserve_env CXX
8326 preserve_env INSTALL
8327 preserve_env LD
8328 preserve_env LD_LIBRARY_PATH
8329 preserve_env LIBTOOL
8330 preserve_env MAKE
8331 preserve_env NM
8332 preserve_env OBJCOPY
8333 preserve_env PATH
8334 preserve_env PKG_CONFIG
8335 preserve_env PKG_CONFIG_LIBDIR
8336 preserve_env PKG_CONFIG_PATH
8337 preserve_env PYTHON
8338 preserve_env SDL2_CONFIG
8339 preserve_env SMBD
8340 preserve_env STRIP
8341 preserve_env WINDRES
8342
8343 printf "exec" >>config.status
8344 printf " '%s'" "$0" "$@" >>config.status
8345 echo ' "$@"' >>config.status
8346 chmod +x config.status
8347
8348 rm -r "$TMPDIR1"
This page took 0.485057 seconds and 4 git commands to generate.