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