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