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