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