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