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