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