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