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