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