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