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