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