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