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