]> Git Repo - qemu.git/blob - configure
ui: remove support for GTK2 in favour of GTK3
[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.0.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 # g_test_trap_subprocess added in 2.38. Used by some tests.
3535 glib_subprocess=yes
3536 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3537     glib_subprocess=no
3538 fi
3539
3540 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3541 cat > $TMPC << EOF
3542 #include <glib.h>
3543 int main(void) { return 0; }
3544 EOF
3545 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3546     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3547         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3548         CFLAGS="-Wno-unknown-attributes $CFLAGS"
3549     fi
3550 fi
3551
3552 ##########################################
3553 # SHA command probe for modules
3554 if test "$modules" = yes; then
3555     shacmd_probe="sha1sum sha1 shasum"
3556     for c in $shacmd_probe; do
3557         if has $c; then
3558             shacmd="$c"
3559             break
3560         fi
3561     done
3562     if test "$shacmd" = ""; then
3563         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3564     fi
3565 fi
3566
3567 ##########################################
3568 # pixman support probe
3569
3570 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3571   pixman_cflags=
3572   pixman_libs=
3573 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3574   pixman_cflags=$($pkg_config --cflags pixman-1)
3575   pixman_libs=$($pkg_config --libs pixman-1)
3576 else
3577   error_exit "pixman >= 0.21.8 not present." \
3578       "Please install the pixman devel package."
3579 fi
3580
3581 ##########################################
3582 # libmpathpersist probe
3583
3584 if test "$mpath" != "no" ; then
3585   # probe for the new API
3586   cat > $TMPC <<EOF
3587 #include <libudev.h>
3588 #include <mpath_persist.h>
3589 unsigned mpath_mx_alloc_len = 1024;
3590 int logsink;
3591 static struct config *multipath_conf;
3592 extern struct udev *udev;
3593 extern struct config *get_multipath_config(void);
3594 extern void put_multipath_config(struct config *conf);
3595 struct udev *udev;
3596 struct config *get_multipath_config(void) { return multipath_conf; }
3597 void put_multipath_config(struct config *conf) { }
3598
3599 int main(void) {
3600     udev = udev_new();
3601     multipath_conf = mpath_lib_init();
3602     return 0;
3603 }
3604 EOF
3605   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3606     mpathpersist=yes
3607     mpathpersist_new_api=yes
3608   else
3609     # probe for the old API
3610     cat > $TMPC <<EOF
3611 #include <libudev.h>
3612 #include <mpath_persist.h>
3613 unsigned mpath_mx_alloc_len = 1024;
3614 int logsink;
3615 int main(void) {
3616     struct udev *udev = udev_new();
3617     mpath_lib_init(udev);
3618     return 0;
3619 }
3620 EOF
3621     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3622       mpathpersist=yes
3623       mpathpersist_new_api=no
3624     else
3625       mpathpersist=no
3626     fi
3627   fi
3628 else
3629   mpathpersist=no
3630 fi
3631
3632 ##########################################
3633 # libcap probe
3634
3635 if test "$cap" != "no" ; then
3636   cat > $TMPC <<EOF
3637 #include <stdio.h>
3638 #include <sys/capability.h>
3639 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3640 EOF
3641   if compile_prog "" "-lcap" ; then
3642     cap=yes
3643   else
3644     cap=no
3645   fi
3646 fi
3647
3648 ##########################################
3649 # pthread probe
3650 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3651
3652 pthread=no
3653 cat > $TMPC << EOF
3654 #include <pthread.h>
3655 static void *f(void *p) { return NULL; }
3656 int main(void) {
3657   pthread_t thread;
3658   pthread_create(&thread, 0, f, 0);
3659   return 0;
3660 }
3661 EOF
3662 if compile_prog "" "" ; then
3663   pthread=yes
3664 else
3665   for pthread_lib in $PTHREADLIBS_LIST; do
3666     if compile_prog "" "$pthread_lib" ; then
3667       pthread=yes
3668       found=no
3669       for lib_entry in $LIBS; do
3670         if test "$lib_entry" = "$pthread_lib"; then
3671           found=yes
3672           break
3673         fi
3674       done
3675       if test "$found" = "no"; then
3676         LIBS="$pthread_lib $LIBS"
3677         libs_qga="$pthread_lib $libs_qga"
3678       fi
3679       PTHREAD_LIB="$pthread_lib"
3680       break
3681     fi
3682   done
3683 fi
3684
3685 if test "$mingw32" != yes -a "$pthread" = no; then
3686   error_exit "pthread check failed" \
3687       "Make sure to have the pthread libs and headers installed."
3688 fi
3689
3690 # check for pthread_setname_np
3691 pthread_setname_np=no
3692 cat > $TMPC << EOF
3693 #include <pthread.h>
3694
3695 static void *f(void *p) { return NULL; }
3696 int main(void)
3697 {
3698     pthread_t thread;
3699     pthread_create(&thread, 0, f, 0);
3700     pthread_setname_np(thread, "QEMU");
3701     return 0;
3702 }
3703 EOF
3704 if compile_prog "" "$pthread_lib" ; then
3705   pthread_setname_np=yes
3706 fi
3707
3708 ##########################################
3709 # rbd probe
3710 if test "$rbd" != "no" ; then
3711   cat > $TMPC <<EOF
3712 #include <stdio.h>
3713 #include <rbd/librbd.h>
3714 int main(void) {
3715     rados_t cluster;
3716     rados_create(&cluster, NULL);
3717     return 0;
3718 }
3719 EOF
3720   rbd_libs="-lrbd -lrados"
3721   if compile_prog "" "$rbd_libs" ; then
3722     rbd=yes
3723   else
3724     if test "$rbd" = "yes" ; then
3725       feature_not_found "rados block device" "Install librbd/ceph devel"
3726     fi
3727     rbd=no
3728   fi
3729 fi
3730
3731 ##########################################
3732 # libssh2 probe
3733 min_libssh2_version=1.2.8
3734 if test "$libssh2" != "no" ; then
3735   if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3736     libssh2_cflags=$($pkg_config libssh2 --cflags)
3737     libssh2_libs=$($pkg_config libssh2 --libs)
3738     libssh2=yes
3739   else
3740     if test "$libssh2" = "yes" ; then
3741       error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3742     fi
3743     libssh2=no
3744   fi
3745 fi
3746
3747 ##########################################
3748 # libssh2_sftp_fsync probe
3749
3750 if test "$libssh2" = "yes"; then
3751   cat > $TMPC <<EOF
3752 #include <stdio.h>
3753 #include <libssh2.h>
3754 #include <libssh2_sftp.h>
3755 int main(void) {
3756     LIBSSH2_SESSION *session;
3757     LIBSSH2_SFTP *sftp;
3758     LIBSSH2_SFTP_HANDLE *sftp_handle;
3759     session = libssh2_session_init ();
3760     sftp = libssh2_sftp_init (session);
3761     sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3762     libssh2_sftp_fsync (sftp_handle);
3763     return 0;
3764 }
3765 EOF
3766   # libssh2_cflags/libssh2_libs defined in previous test.
3767   if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3768     QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3769   fi
3770 fi
3771
3772 ##########################################
3773 # linux-aio probe
3774
3775 if test "$linux_aio" != "no" ; then
3776   cat > $TMPC <<EOF
3777 #include <libaio.h>
3778 #include <sys/eventfd.h>
3779 #include <stddef.h>
3780 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3781 EOF
3782   if compile_prog "" "-laio" ; then
3783     linux_aio=yes
3784   else
3785     if test "$linux_aio" = "yes" ; then
3786       feature_not_found "linux AIO" "Install libaio devel"
3787     fi
3788     linux_aio=no
3789   fi
3790 fi
3791
3792 ##########################################
3793 # TPM passthrough is only on x86 Linux
3794
3795 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3796   tpm_passthrough=$tpm
3797 else
3798   tpm_passthrough=no
3799 fi
3800
3801 # TPM emulator is for all posix systems
3802 if test "$mingw32" != "yes"; then
3803   tpm_emulator=$tpm
3804 else
3805   tpm_emulator=no
3806 fi
3807 ##########################################
3808 # attr probe
3809
3810 if test "$attr" != "no" ; then
3811   cat > $TMPC <<EOF
3812 #include <stdio.h>
3813 #include <sys/types.h>
3814 #ifdef CONFIG_LIBATTR
3815 #include <attr/xattr.h>
3816 #else
3817 #include <sys/xattr.h>
3818 #endif
3819 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3820 EOF
3821   if compile_prog "" "" ; then
3822     attr=yes
3823   # Older distros have <attr/xattr.h>, and need -lattr:
3824   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3825     attr=yes
3826     LIBS="-lattr $LIBS"
3827     libattr=yes
3828   else
3829     if test "$attr" = "yes" ; then
3830       feature_not_found "ATTR" "Install libc6 or libattr devel"
3831     fi
3832     attr=no
3833   fi
3834 fi
3835
3836 ##########################################
3837 # iovec probe
3838 cat > $TMPC <<EOF
3839 #include <sys/types.h>
3840 #include <sys/uio.h>
3841 #include <unistd.h>
3842 int main(void) { return sizeof(struct iovec); }
3843 EOF
3844 iovec=no
3845 if compile_prog "" "" ; then
3846   iovec=yes
3847 fi
3848
3849 ##########################################
3850 # preadv probe
3851 cat > $TMPC <<EOF
3852 #include <sys/types.h>
3853 #include <sys/uio.h>
3854 #include <unistd.h>
3855 int main(void) { return preadv(0, 0, 0, 0); }
3856 EOF
3857 preadv=no
3858 if compile_prog "" "" ; then
3859   preadv=yes
3860 fi
3861
3862 ##########################################
3863 # fdt probe
3864 # fdt support is mandatory for at least some target architectures,
3865 # so insist on it if we're building those system emulators.
3866 fdt_required=no
3867 for target in $target_list; do
3868   case $target in
3869     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3870       fdt_required=yes
3871     ;;
3872   esac
3873 done
3874
3875 if test "$fdt_required" = "yes"; then
3876   if test "$fdt" = "no"; then
3877     error_exit "fdt disabled but some requested targets require it." \
3878       "You can turn off fdt only if you also disable all the system emulation" \
3879       "targets which need it (by specifying a cut down --target-list)."
3880   fi
3881   fdt=yes
3882 fi
3883
3884 if test "$fdt" != "no" ; then
3885   fdt_libs="-lfdt"
3886   # explicitly check for libfdt_env.h as it is missing in some stable installs
3887   # and test for required functions to make sure we are on a version >= 1.4.2
3888   cat > $TMPC << EOF
3889 #include <libfdt.h>
3890 #include <libfdt_env.h>
3891 int main(void) { fdt_first_subnode(0, 0); return 0; }
3892 EOF
3893   if compile_prog "" "$fdt_libs" ; then
3894     # system DTC is good - use it
3895     fdt=system
3896   else
3897       # have GIT checkout, so activate dtc submodule
3898       if test -e "${source_path}/.git" ; then
3899           git_submodules="${git_submodules} dtc"
3900       fi
3901       if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3902           fdt=git
3903           mkdir -p dtc
3904           if [ "$pwd_is_source_path" != "y" ] ; then
3905               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3906               symlink "$source_path/dtc/scripts" "dtc/scripts"
3907           fi
3908           fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3909           fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3910           fdt_libs="$fdt_libs"
3911       elif test "$fdt" = "yes" ; then
3912           # Not a git build & no libfdt found, prompt for system install
3913           error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3914                      "Please install the DTC (libfdt) devel package"
3915       else
3916           # don't have and don't want
3917           fdt_libs=
3918           fdt=no
3919       fi
3920   fi
3921 fi
3922
3923 libs_softmmu="$libs_softmmu $fdt_libs"
3924
3925 ##########################################
3926 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3927
3928 if test "$opengl" != "no" ; then
3929   opengl_pkgs="epoxy gbm"
3930   if $pkg_config $opengl_pkgs; then
3931     opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3932     opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3933     opengl=yes
3934     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3935         gtk_gl="yes"
3936     fi
3937     QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3938   else
3939     if test "$opengl" = "yes" ; then
3940       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3941     fi
3942     opengl_cflags=""
3943     opengl_libs=""
3944     opengl=no
3945   fi
3946 fi
3947
3948 if test "$opengl" = "yes"; then
3949   cat > $TMPC << EOF
3950 #include <epoxy/egl.h>
3951 #ifndef EGL_MESA_image_dma_buf_export
3952 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3953 #endif
3954 int main(void) { return 0; }
3955 EOF
3956   if compile_prog "" "" ; then
3957     opengl_dmabuf=yes
3958   fi
3959 fi
3960
3961 ##########################################
3962 # libxml2 probe
3963 if test "$libxml2" != "no" ; then
3964     if $pkg_config --exists libxml-2.0; then
3965         libxml2="yes"
3966         libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3967         libxml2_libs=$($pkg_config --libs libxml-2.0)
3968     else
3969         if test "$libxml2" = "yes"; then
3970             feature_not_found "libxml2" "Install libxml2 devel"
3971         fi
3972         libxml2="no"
3973     fi
3974 fi
3975
3976 ##########################################
3977 # glusterfs probe
3978 if test "$glusterfs" != "no" ; then
3979   if $pkg_config --atleast-version=3 glusterfs-api; then
3980     glusterfs="yes"
3981     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3982     glusterfs_libs=$($pkg_config --libs glusterfs-api)
3983     if $pkg_config --atleast-version=4 glusterfs-api; then
3984       glusterfs_xlator_opt="yes"
3985     fi
3986     if $pkg_config --atleast-version=5 glusterfs-api; then
3987       glusterfs_discard="yes"
3988     fi
3989     if $pkg_config --atleast-version=6 glusterfs-api; then
3990       glusterfs_fallocate="yes"
3991       glusterfs_zerofill="yes"
3992     fi
3993   else
3994     if test "$glusterfs" = "yes" ; then
3995       feature_not_found "GlusterFS backend support" \
3996           "Install glusterfs-api devel >= 3"
3997     fi
3998     glusterfs="no"
3999   fi
4000 fi
4001
4002 # Check for inotify functions when we are building linux-user
4003 # emulator.  This is done because older glibc versions don't
4004 # have syscall stubs for these implemented.  In that case we
4005 # don't provide them even if kernel supports them.
4006 #
4007 inotify=no
4008 cat > $TMPC << EOF
4009 #include <sys/inotify.h>
4010
4011 int
4012 main(void)
4013 {
4014         /* try to start inotify */
4015         return inotify_init();
4016 }
4017 EOF
4018 if compile_prog "" "" ; then
4019   inotify=yes
4020 fi
4021
4022 inotify1=no
4023 cat > $TMPC << EOF
4024 #include <sys/inotify.h>
4025
4026 int
4027 main(void)
4028 {
4029     /* try to start inotify */
4030     return inotify_init1(0);
4031 }
4032 EOF
4033 if compile_prog "" "" ; then
4034   inotify1=yes
4035 fi
4036
4037 # check if pipe2 is there
4038 pipe2=no
4039 cat > $TMPC << EOF
4040 #include <unistd.h>
4041 #include <fcntl.h>
4042
4043 int main(void)
4044 {
4045     int pipefd[2];
4046     return pipe2(pipefd, O_CLOEXEC);
4047 }
4048 EOF
4049 if compile_prog "" "" ; then
4050   pipe2=yes
4051 fi
4052
4053 # check if accept4 is there
4054 accept4=no
4055 cat > $TMPC << EOF
4056 #include <sys/socket.h>
4057 #include <stddef.h>
4058
4059 int main(void)
4060 {
4061     accept4(0, NULL, NULL, SOCK_CLOEXEC);
4062     return 0;
4063 }
4064 EOF
4065 if compile_prog "" "" ; then
4066   accept4=yes
4067 fi
4068
4069 # check if tee/splice is there. vmsplice was added same time.
4070 splice=no
4071 cat > $TMPC << EOF
4072 #include <unistd.h>
4073 #include <fcntl.h>
4074 #include <limits.h>
4075
4076 int main(void)
4077 {
4078     int len, fd = 0;
4079     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4080     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4081     return 0;
4082 }
4083 EOF
4084 if compile_prog "" "" ; then
4085   splice=yes
4086 fi
4087
4088 ##########################################
4089 # libnuma probe
4090
4091 if test "$numa" != "no" ; then
4092   cat > $TMPC << EOF
4093 #include <numa.h>
4094 int main(void) { return numa_available(); }
4095 EOF
4096
4097   if compile_prog "" "-lnuma" ; then
4098     numa=yes
4099     libs_softmmu="-lnuma $libs_softmmu"
4100   else
4101     if test "$numa" = "yes" ; then
4102       feature_not_found "numa" "install numactl devel"
4103     fi
4104     numa=no
4105   fi
4106 fi
4107
4108 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4109     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4110     exit 1
4111 fi
4112
4113 # Even if malloc_trim() is available, these non-libc memory allocators
4114 # do not support it.
4115 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4116     if test "$malloc_trim" = "yes" ; then
4117         echo "Disabling malloc_trim with non-libc memory allocator"
4118     fi
4119     malloc_trim="no"
4120 fi
4121
4122 #######################################
4123 # malloc_trim
4124
4125 if test "$malloc_trim" != "no" ; then
4126     cat > $TMPC << EOF
4127 #include <malloc.h>
4128 int main(void) { malloc_trim(0); return 0; }
4129 EOF
4130     if compile_prog "" "" ; then
4131         malloc_trim="yes"
4132     else
4133         malloc_trim="no"
4134     fi
4135 fi
4136
4137 ##########################################
4138 # tcmalloc probe
4139
4140 if test "$tcmalloc" = "yes" ; then
4141   cat > $TMPC << EOF
4142 #include <stdlib.h>
4143 int main(void) { malloc(1); return 0; }
4144 EOF
4145
4146   if compile_prog "" "-ltcmalloc" ; then
4147     LIBS="-ltcmalloc $LIBS"
4148   else
4149     feature_not_found "tcmalloc" "install gperftools devel"
4150   fi
4151 fi
4152
4153 ##########################################
4154 # jemalloc probe
4155
4156 if test "$jemalloc" = "yes" ; then
4157   cat > $TMPC << EOF
4158 #include <stdlib.h>
4159 int main(void) { malloc(1); return 0; }
4160 EOF
4161
4162   if compile_prog "" "-ljemalloc" ; then
4163     LIBS="-ljemalloc $LIBS"
4164   else
4165     feature_not_found "jemalloc" "install jemalloc devel"
4166   fi
4167 fi
4168
4169 ##########################################
4170 # signalfd probe
4171 signalfd="no"
4172 cat > $TMPC << EOF
4173 #include <unistd.h>
4174 #include <sys/syscall.h>
4175 #include <signal.h>
4176 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4177 EOF
4178
4179 if compile_prog "" "" ; then
4180   signalfd=yes
4181 fi
4182
4183 # check if eventfd is supported
4184 eventfd=no
4185 cat > $TMPC << EOF
4186 #include <sys/eventfd.h>
4187
4188 int main(void)
4189 {
4190     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4191 }
4192 EOF
4193 if compile_prog "" "" ; then
4194   eventfd=yes
4195 fi
4196
4197 # check if memfd is supported
4198 memfd=no
4199 cat > $TMPC << EOF
4200 #include <sys/mman.h>
4201
4202 int main(void)
4203 {
4204     return memfd_create("foo", MFD_ALLOW_SEALING);
4205 }
4206 EOF
4207 if compile_prog "" "" ; then
4208   memfd=yes
4209 fi
4210
4211
4212
4213 # check for fallocate
4214 fallocate=no
4215 cat > $TMPC << EOF
4216 #include <fcntl.h>
4217
4218 int main(void)
4219 {
4220     fallocate(0, 0, 0, 0);
4221     return 0;
4222 }
4223 EOF
4224 if compile_prog "" "" ; then
4225   fallocate=yes
4226 fi
4227
4228 # check for fallocate hole punching
4229 fallocate_punch_hole=no
4230 cat > $TMPC << EOF
4231 #include <fcntl.h>
4232 #include <linux/falloc.h>
4233
4234 int main(void)
4235 {
4236     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4237     return 0;
4238 }
4239 EOF
4240 if compile_prog "" "" ; then
4241   fallocate_punch_hole=yes
4242 fi
4243
4244 # check that fallocate supports range zeroing inside the file
4245 fallocate_zero_range=no
4246 cat > $TMPC << EOF
4247 #include <fcntl.h>
4248 #include <linux/falloc.h>
4249
4250 int main(void)
4251 {
4252     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4253     return 0;
4254 }
4255 EOF
4256 if compile_prog "" "" ; then
4257   fallocate_zero_range=yes
4258 fi
4259
4260 # check for posix_fallocate
4261 posix_fallocate=no
4262 cat > $TMPC << EOF
4263 #include <fcntl.h>
4264
4265 int main(void)
4266 {
4267     posix_fallocate(0, 0, 0);
4268     return 0;
4269 }
4270 EOF
4271 if compile_prog "" "" ; then
4272     posix_fallocate=yes
4273 fi
4274
4275 # check for sync_file_range
4276 sync_file_range=no
4277 cat > $TMPC << EOF
4278 #include <fcntl.h>
4279
4280 int main(void)
4281 {
4282     sync_file_range(0, 0, 0, 0);
4283     return 0;
4284 }
4285 EOF
4286 if compile_prog "" "" ; then
4287   sync_file_range=yes
4288 fi
4289
4290 # check for linux/fiemap.h and FS_IOC_FIEMAP
4291 fiemap=no
4292 cat > $TMPC << EOF
4293 #include <sys/ioctl.h>
4294 #include <linux/fs.h>
4295 #include <linux/fiemap.h>
4296
4297 int main(void)
4298 {
4299     ioctl(0, FS_IOC_FIEMAP, 0);
4300     return 0;
4301 }
4302 EOF
4303 if compile_prog "" "" ; then
4304   fiemap=yes
4305 fi
4306
4307 # check for dup3
4308 dup3=no
4309 cat > $TMPC << EOF
4310 #include <unistd.h>
4311
4312 int main(void)
4313 {
4314     dup3(0, 0, 0);
4315     return 0;
4316 }
4317 EOF
4318 if compile_prog "" "" ; then
4319   dup3=yes
4320 fi
4321
4322 # check for ppoll support
4323 ppoll=no
4324 cat > $TMPC << EOF
4325 #include <poll.h>
4326
4327 int main(void)
4328 {
4329     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4330     ppoll(&pfd, 1, 0, 0);
4331     return 0;
4332 }
4333 EOF
4334 if compile_prog "" "" ; then
4335   ppoll=yes
4336 fi
4337
4338 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4339 prctl_pr_set_timerslack=no
4340 cat > $TMPC << EOF
4341 #include <sys/prctl.h>
4342
4343 int main(void)
4344 {
4345     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4346     return 0;
4347 }
4348 EOF
4349 if compile_prog "" "" ; then
4350   prctl_pr_set_timerslack=yes
4351 fi
4352
4353 # check for epoll support
4354 epoll=no
4355 cat > $TMPC << EOF
4356 #include <sys/epoll.h>
4357
4358 int main(void)
4359 {
4360     epoll_create(0);
4361     return 0;
4362 }
4363 EOF
4364 if compile_prog "" "" ; then
4365   epoll=yes
4366 fi
4367
4368 # epoll_create1 is a later addition
4369 # so we must check separately for its presence
4370 epoll_create1=no
4371 cat > $TMPC << EOF
4372 #include <sys/epoll.h>
4373
4374 int main(void)
4375 {
4376     /* Note that we use epoll_create1 as a value, not as
4377      * a function being called. This is necessary so that on
4378      * old SPARC glibc versions where the function was present in
4379      * the library but not declared in the header file we will
4380      * fail the configure check. (Otherwise we will get a compiler
4381      * warning but not an error, and will proceed to fail the
4382      * qemu compile where we compile with -Werror.)
4383      */
4384     return (int)(uintptr_t)&epoll_create1;
4385 }
4386 EOF
4387 if compile_prog "" "" ; then
4388   epoll_create1=yes
4389 fi
4390
4391 # check for sendfile support
4392 sendfile=no
4393 cat > $TMPC << EOF
4394 #include <sys/sendfile.h>
4395
4396 int main(void)
4397 {
4398     return sendfile(0, 0, 0, 0);
4399 }
4400 EOF
4401 if compile_prog "" "" ; then
4402   sendfile=yes
4403 fi
4404
4405 # check for timerfd support (glibc 2.8 and newer)
4406 timerfd=no
4407 cat > $TMPC << EOF
4408 #include <sys/timerfd.h>
4409
4410 int main(void)
4411 {
4412     return(timerfd_create(CLOCK_REALTIME, 0));
4413 }
4414 EOF
4415 if compile_prog "" "" ; then
4416   timerfd=yes
4417 fi
4418
4419 # check for setns and unshare support
4420 setns=no
4421 cat > $TMPC << EOF
4422 #include <sched.h>
4423
4424 int main(void)
4425 {
4426     int ret;
4427     ret = setns(0, 0);
4428     ret = unshare(0);
4429     return ret;
4430 }
4431 EOF
4432 if compile_prog "" "" ; then
4433   setns=yes
4434 fi
4435
4436 # clock_adjtime probe
4437 clock_adjtime=no
4438 cat > $TMPC <<EOF
4439 #include <time.h>
4440
4441 int main(void)
4442 {
4443     return clock_adjtime(0, 0);
4444 }
4445 EOF
4446 clock_adjtime=no
4447 if compile_prog "" "" ; then
4448   clock_adjtime=yes
4449 fi
4450
4451 # syncfs probe
4452 syncfs=no
4453 cat > $TMPC <<EOF
4454 #include <unistd.h>
4455
4456 int main(void)
4457 {
4458     return syncfs(0);
4459 }
4460 EOF
4461 syncfs=no
4462 if compile_prog "" "" ; then
4463   syncfs=yes
4464 fi
4465
4466 # Check if tools are available to build documentation.
4467 if test "$docs" != "no" ; then
4468   if has makeinfo && has pod2man; then
4469     docs=yes
4470   else
4471     if test "$docs" = "yes" ; then
4472       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4473     fi
4474     docs=no
4475   fi
4476 fi
4477
4478 # Search for bswap_32 function
4479 byteswap_h=no
4480 cat > $TMPC << EOF
4481 #include <byteswap.h>
4482 int main(void) { return bswap_32(0); }
4483 EOF
4484 if compile_prog "" "" ; then
4485   byteswap_h=yes
4486 fi
4487
4488 # Search for bswap32 function
4489 bswap_h=no
4490 cat > $TMPC << EOF
4491 #include <sys/endian.h>
4492 #include <sys/types.h>
4493 #include <machine/bswap.h>
4494 int main(void) { return bswap32(0); }
4495 EOF
4496 if compile_prog "" "" ; then
4497   bswap_h=yes
4498 fi
4499
4500 ##########################################
4501 # Do we have libiscsi >= 1.9.0
4502 if test "$libiscsi" != "no" ; then
4503   if $pkg_config --atleast-version=1.9.0 libiscsi; then
4504     libiscsi="yes"
4505     libiscsi_cflags=$($pkg_config --cflags libiscsi)
4506     libiscsi_libs=$($pkg_config --libs libiscsi)
4507   else
4508     if test "$libiscsi" = "yes" ; then
4509       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4510     fi
4511     libiscsi="no"
4512   fi
4513 fi
4514
4515 ##########################################
4516 # Do we need libm
4517 cat > $TMPC << EOF
4518 #include <math.h>
4519 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4520 EOF
4521 if compile_prog "" "" ; then
4522   :
4523 elif compile_prog "" "-lm" ; then
4524   LIBS="-lm $LIBS"
4525   libs_qga="-lm $libs_qga"
4526 else
4527   error_exit "libm check failed"
4528 fi
4529
4530 ##########################################
4531 # Do we need librt
4532 # uClibc provides 2 versions of clock_gettime(), one with realtime
4533 # support and one without. This means that the clock_gettime() don't
4534 # need -lrt. We still need it for timer_create() so we check for this
4535 # function in addition.
4536 cat > $TMPC <<EOF
4537 #include <signal.h>
4538 #include <time.h>
4539 int main(void) {
4540   timer_create(CLOCK_REALTIME, NULL, NULL);
4541   return clock_gettime(CLOCK_REALTIME, NULL);
4542 }
4543 EOF
4544
4545 if compile_prog "" "" ; then
4546   :
4547 # we need pthread for static linking. use previous pthread test result
4548 elif compile_prog "" "$pthread_lib -lrt" ; then
4549   LIBS="$LIBS -lrt"
4550   libs_qga="$libs_qga -lrt"
4551 fi
4552
4553 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4554         "$haiku" != "yes" ; then
4555     libs_softmmu="-lutil $libs_softmmu"
4556 fi
4557
4558 ##########################################
4559 # spice probe
4560 if test "$spice" != "no" ; then
4561   cat > $TMPC << EOF
4562 #include <spice.h>
4563 int main(void) { spice_server_new(); return 0; }
4564 EOF
4565   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4566   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4567   if $pkg_config --atleast-version=0.12.0 spice-server && \
4568      $pkg_config --atleast-version=0.12.3 spice-protocol && \
4569      compile_prog "$spice_cflags" "$spice_libs" ; then
4570     spice="yes"
4571     libs_softmmu="$libs_softmmu $spice_libs"
4572     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4573     spice_protocol_version=$($pkg_config --modversion spice-protocol)
4574     spice_server_version=$($pkg_config --modversion spice-server)
4575   else
4576     if test "$spice" = "yes" ; then
4577       feature_not_found "spice" \
4578           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4579     fi
4580     spice="no"
4581   fi
4582 fi
4583
4584 # check for smartcard support
4585 if test "$smartcard" != "no"; then
4586     if $pkg_config --atleast-version=2.5.1 libcacard; then
4587         libcacard_cflags=$($pkg_config --cflags libcacard)
4588         libcacard_libs=$($pkg_config --libs libcacard)
4589         smartcard="yes"
4590     else
4591         if test "$smartcard" = "yes"; then
4592             feature_not_found "smartcard" "Install libcacard devel"
4593         fi
4594         smartcard="no"
4595     fi
4596 fi
4597
4598 # check for libusb
4599 if test "$libusb" != "no" ; then
4600     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4601         libusb="yes"
4602         libusb_cflags=$($pkg_config --cflags libusb-1.0)
4603         libusb_libs=$($pkg_config --libs libusb-1.0)
4604     else
4605         if test "$libusb" = "yes"; then
4606             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4607         fi
4608         libusb="no"
4609     fi
4610 fi
4611
4612 # check for usbredirparser for usb network redirection support
4613 if test "$usb_redir" != "no" ; then
4614     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4615         usb_redir="yes"
4616         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4617         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4618     else
4619         if test "$usb_redir" = "yes"; then
4620             feature_not_found "usb-redir" "Install usbredir devel"
4621         fi
4622         usb_redir="no"
4623     fi
4624 fi
4625
4626 ##########################################
4627 # check if we have VSS SDK headers for win
4628
4629 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4630   case "$vss_win32_sdk" in
4631     "")   vss_win32_include="-isystem $source_path" ;;
4632     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4633           # handle path with spaces. So we symlink the headers into ".sdk/vss".
4634           vss_win32_include="-isystem $source_path/.sdk/vss"
4635           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4636           ;;
4637     *)    vss_win32_include="-isystem $vss_win32_sdk"
4638   esac
4639   cat > $TMPC << EOF
4640 #define __MIDL_user_allocate_free_DEFINED__
4641 #include <inc/win2003/vss.h>
4642 int main(void) { return VSS_CTX_BACKUP; }
4643 EOF
4644   if compile_prog "$vss_win32_include" "" ; then
4645     guest_agent_with_vss="yes"
4646     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4647     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4648     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4649   else
4650     if test "$vss_win32_sdk" != "" ; then
4651       echo "ERROR: Please download and install Microsoft VSS SDK:"
4652       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4653       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4654       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4655       echo "ERROR: The headers are extracted in the directory \`inc'."
4656       feature_not_found "VSS support"
4657     fi
4658     guest_agent_with_vss="no"
4659   fi
4660 fi
4661
4662 ##########################################
4663 # lookup Windows platform SDK (if not specified)
4664 # The SDK is needed only to build .tlb (type library) file of guest agent
4665 # VSS provider from the source. It is usually unnecessary because the
4666 # pre-compiled .tlb file is included.
4667
4668 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4669   if test -z "$win_sdk"; then
4670     programfiles="$PROGRAMFILES"
4671     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4672     if test -n "$programfiles"; then
4673       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4674     else
4675       feature_not_found "Windows SDK"
4676     fi
4677   elif test "$win_sdk" = "no"; then
4678     win_sdk=""
4679   fi
4680 fi
4681
4682 ##########################################
4683 # check if mingw environment provides a recent ntddscsi.h
4684 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4685   cat > $TMPC << EOF
4686 #include <windows.h>
4687 #include <ntddscsi.h>
4688 int main(void) {
4689 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4690 #error Missing required ioctl definitions
4691 #endif
4692   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4693   return addr.Lun;
4694 }
4695 EOF
4696   if compile_prog "" "" ; then
4697     guest_agent_ntddscsi=yes
4698     libs_qga="-lsetupapi $libs_qga"
4699   fi
4700 fi
4701
4702 ##########################################
4703 # virgl renderer probe
4704
4705 if test "$virglrenderer" != "no" ; then
4706   cat > $TMPC << EOF
4707 #include <virglrenderer.h>
4708 int main(void) { virgl_renderer_poll(); return 0; }
4709 EOF
4710   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4711   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4712   virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4713   if $pkg_config virglrenderer >/dev/null 2>&1 && \
4714      compile_prog "$virgl_cflags" "$virgl_libs" ; then
4715     virglrenderer="yes"
4716   else
4717     if test "$virglrenderer" = "yes" ; then
4718       feature_not_found "virglrenderer"
4719     fi
4720     virglrenderer="no"
4721   fi
4722 fi
4723
4724 ##########################################
4725 # capstone
4726
4727 case "$capstone" in
4728   "" | yes)
4729     if $pkg_config capstone; then
4730       capstone=system
4731     elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4732       capstone=git
4733     elif test -e "${source_path}/capstone/Makefile" ; then
4734       capstone=internal
4735     elif test -z "$capstone" ; then
4736       capstone=no
4737     else
4738       feature_not_found "capstone" "Install capstone devel or git submodule"
4739     fi
4740     ;;
4741
4742   system)
4743     if ! $pkg_config capstone; then
4744       feature_not_found "capstone" "Install capstone devel"
4745     fi
4746     ;;
4747 esac
4748
4749 case "$capstone" in
4750   git | internal)
4751     if test "$capstone" = git; then
4752       git_submodules="${git_submodules} capstone"
4753     fi
4754     mkdir -p capstone
4755     QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4756     if test "$mingw32" = "yes"; then
4757       LIBCAPSTONE=capstone.lib
4758     else
4759       LIBCAPSTONE=libcapstone.a
4760     fi
4761     LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4762     ;;
4763
4764   system)
4765     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4766     LIBS="$($pkg_config --libs capstone) $LIBS"
4767     ;;
4768
4769   no)
4770     ;;
4771   *)
4772     error_exit "Unknown state for capstone: $capstone"
4773     ;;
4774 esac
4775
4776 ##########################################
4777 # check if we have fdatasync
4778
4779 fdatasync=no
4780 cat > $TMPC << EOF
4781 #include <unistd.h>
4782 int main(void) {
4783 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4784 return fdatasync(0);
4785 #else
4786 #error Not supported
4787 #endif
4788 }
4789 EOF
4790 if compile_prog "" "" ; then
4791     fdatasync=yes
4792 fi
4793
4794 ##########################################
4795 # check if we have madvise
4796
4797 madvise=no
4798 cat > $TMPC << EOF
4799 #include <sys/types.h>
4800 #include <sys/mman.h>
4801 #include <stddef.h>
4802 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4803 EOF
4804 if compile_prog "" "" ; then
4805     madvise=yes
4806 fi
4807
4808 ##########################################
4809 # check if we have posix_madvise
4810
4811 posix_madvise=no
4812 cat > $TMPC << EOF
4813 #include <sys/mman.h>
4814 #include <stddef.h>
4815 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4816 EOF
4817 if compile_prog "" "" ; then
4818     posix_madvise=yes
4819 fi
4820
4821 ##########################################
4822 # check if we have posix_memalign()
4823
4824 posix_memalign=no
4825 cat > $TMPC << EOF
4826 #include <stdlib.h>
4827 int main(void) {
4828     void *p;
4829     return posix_memalign(&p, 8, 8);
4830 }
4831 EOF
4832 if compile_prog "" "" ; then
4833     posix_memalign=yes
4834 fi
4835
4836 ##########################################
4837 # check if we have posix_syslog
4838
4839 posix_syslog=no
4840 cat > $TMPC << EOF
4841 #include <syslog.h>
4842 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4843 EOF
4844 if compile_prog "" "" ; then
4845     posix_syslog=yes
4846 fi
4847
4848 ##########################################
4849 # check if we have sem_timedwait
4850
4851 sem_timedwait=no
4852 cat > $TMPC << EOF
4853 #include <semaphore.h>
4854 int main(void) { return sem_timedwait(0, 0); }
4855 EOF
4856 if compile_prog "" "" ; then
4857     sem_timedwait=yes
4858 fi
4859
4860 ##########################################
4861 # check if we have strchrnul
4862
4863 strchrnul=no
4864 cat > $TMPC << EOF
4865 #include <string.h>
4866 int main(void);
4867 // Use a haystack that the compiler shouldn't be able to constant fold
4868 char *haystack = (char*)&main;
4869 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4870 EOF
4871 if compile_prog "" "" ; then
4872     strchrnul=yes
4873 fi
4874
4875 ##########################################
4876 # check if trace backend exists
4877
4878 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4879 if test "$?" -ne 0 ; then
4880   error_exit "invalid trace backends" \
4881       "Please choose supported trace backends."
4882 fi
4883
4884 ##########################################
4885 # For 'ust' backend, test if ust headers are present
4886 if have_backend "ust"; then
4887   cat > $TMPC << EOF
4888 #include <lttng/tracepoint.h>
4889 int main(void) { return 0; }
4890 EOF
4891   if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4892     if $pkg_config lttng-ust --exists; then
4893       lttng_ust_libs=$($pkg_config --libs lttng-ust)
4894     else
4895       lttng_ust_libs="-llttng-ust -ldl"
4896     fi
4897     if $pkg_config liburcu-bp --exists; then
4898       urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4899     else
4900       urcu_bp_libs="-lurcu-bp"
4901     fi
4902
4903     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4904     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4905   else
4906     error_exit "Trace backend 'ust' missing lttng-ust header files"
4907   fi
4908 fi
4909
4910 ##########################################
4911 # For 'dtrace' backend, test if 'dtrace' command is present
4912 if have_backend "dtrace"; then
4913   if ! has 'dtrace' ; then
4914     error_exit "dtrace command is not found in PATH $PATH"
4915   fi
4916   trace_backend_stap="no"
4917   if has 'stap' ; then
4918     trace_backend_stap="yes"
4919   fi
4920 fi
4921
4922 ##########################################
4923 # check and set a backend for coroutine
4924
4925 # We prefer ucontext, but it's not always possible. The fallback
4926 # is sigcontext. On Windows the only valid backend is the Windows
4927 # specific one.
4928
4929 ucontext_works=no
4930 if test "$darwin" != "yes"; then
4931   cat > $TMPC << EOF
4932 #include <ucontext.h>
4933 #ifdef __stub_makecontext
4934 #error Ignoring glibc stub makecontext which will always fail
4935 #endif
4936 int main(void) { makecontext(0, 0, 0); return 0; }
4937 EOF
4938   if compile_prog "" "" ; then
4939     ucontext_works=yes
4940   fi
4941 fi
4942
4943 if test "$coroutine" = ""; then
4944   if test "$mingw32" = "yes"; then
4945     coroutine=win32
4946   elif test "$ucontext_works" = "yes"; then
4947     coroutine=ucontext
4948   else
4949     coroutine=sigaltstack
4950   fi
4951 else
4952   case $coroutine in
4953   windows)
4954     if test "$mingw32" != "yes"; then
4955       error_exit "'windows' coroutine backend only valid for Windows"
4956     fi
4957     # Unfortunately the user visible backend name doesn't match the
4958     # coroutine-*.c filename for this case, so we have to adjust it here.
4959     coroutine=win32
4960     ;;
4961   ucontext)
4962     if test "$ucontext_works" != "yes"; then
4963       feature_not_found "ucontext"
4964     fi
4965     ;;
4966   sigaltstack)
4967     if test "$mingw32" = "yes"; then
4968       error_exit "only the 'windows' coroutine backend is valid for Windows"
4969     fi
4970     ;;
4971   *)
4972     error_exit "unknown coroutine backend $coroutine"
4973     ;;
4974   esac
4975 fi
4976
4977 if test "$coroutine_pool" = ""; then
4978   coroutine_pool=yes
4979 fi
4980
4981 if test "$debug_stack_usage" = "yes"; then
4982   if test "$coroutine_pool" = "yes"; then
4983     echo "WARN: disabling coroutine pool for stack usage debugging"
4984     coroutine_pool=no
4985   fi
4986 fi
4987
4988
4989 ##########################################
4990 # check if we have open_by_handle_at
4991
4992 open_by_handle_at=no
4993 cat > $TMPC << EOF
4994 #include <fcntl.h>
4995 #if !defined(AT_EMPTY_PATH)
4996 # error missing definition
4997 #else
4998 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4999 #endif
5000 EOF
5001 if compile_prog "" "" ; then
5002     open_by_handle_at=yes
5003 fi
5004
5005 ########################################
5006 # check if we have linux/magic.h
5007
5008 linux_magic_h=no
5009 cat > $TMPC << EOF
5010 #include <linux/magic.h>
5011 int main(void) {
5012   return 0;
5013 }
5014 EOF
5015 if compile_prog "" "" ; then
5016     linux_magic_h=yes
5017 fi
5018
5019 ########################################
5020 # check whether we can disable warning option with a pragma (this is needed
5021 # to silence warnings in the headers of some versions of external libraries).
5022 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5023 # only a warning.
5024 #
5025 # If we can't selectively disable warning in the code, disable -Werror so that
5026 # the build doesn't fail anyway.
5027
5028 pragma_disable_unused_but_set=no
5029 cat > $TMPC << EOF
5030 #pragma GCC diagnostic push
5031 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5032 #pragma GCC diagnostic pop
5033
5034 int main(void) {
5035     return 0;
5036 }
5037 EOF
5038 if compile_prog "-Werror" "" ; then
5039     pragma_diagnostic_available=yes
5040 else
5041     werror=no
5042 fi
5043
5044 ########################################
5045 # check if we have valgrind/valgrind.h
5046
5047 valgrind_h=no
5048 cat > $TMPC << EOF
5049 #include <valgrind/valgrind.h>
5050 int main(void) {
5051   return 0;
5052 }
5053 EOF
5054 if compile_prog "" "" ; then
5055     valgrind_h=yes
5056 fi
5057
5058 ########################################
5059 # check if environ is declared
5060
5061 has_environ=no
5062 cat > $TMPC << EOF
5063 #include <unistd.h>
5064 int main(void) {
5065     environ = 0;
5066     return 0;
5067 }
5068 EOF
5069 if compile_prog "" "" ; then
5070     has_environ=yes
5071 fi
5072
5073 ########################################
5074 # check if cpuid.h is usable.
5075
5076 cat > $TMPC << EOF
5077 #include <cpuid.h>
5078 int main(void) {
5079     unsigned a, b, c, d;
5080     int max = __get_cpuid_max(0, 0);
5081
5082     if (max >= 1) {
5083         __cpuid(1, a, b, c, d);
5084     }
5085
5086     if (max >= 7) {
5087         __cpuid_count(7, 0, a, b, c, d);
5088     }
5089
5090     return 0;
5091 }
5092 EOF
5093 if compile_prog "" "" ; then
5094     cpuid_h=yes
5095 fi
5096
5097 ##########################################
5098 # avx2 optimization requirement check
5099 #
5100 # There is no point enabling this if cpuid.h is not usable,
5101 # since we won't be able to select the new routines.
5102
5103 if test $cpuid_h = yes; then
5104   cat > $TMPC << EOF
5105 #pragma GCC push_options
5106 #pragma GCC target("avx2")
5107 #include <cpuid.h>
5108 #include <immintrin.h>
5109 static int bar(void *a) {
5110     __m256i x = *(__m256i *)a;
5111     return _mm256_testz_si256(x, x);
5112 }
5113 int main(int argc, char *argv[]) { return bar(argv[0]); }
5114 EOF
5115   if compile_object "" ; then
5116     avx2_opt="yes"
5117   fi
5118 fi
5119
5120 ########################################
5121 # check if __[u]int128_t is usable.
5122
5123 int128=no
5124 cat > $TMPC << EOF
5125 #if defined(__clang_major__) && defined(__clang_minor__)
5126 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5127 #  error __int128_t does not work in CLANG before 3.2
5128 # endif
5129 #endif
5130 __int128_t a;
5131 __uint128_t b;
5132 int main (void) {
5133   a = a + b;
5134   b = a * b;
5135   a = a * a;
5136   return 0;
5137 }
5138 EOF
5139 if compile_prog "" "" ; then
5140     int128=yes
5141 fi
5142
5143 #########################################
5144 # See if 128-bit atomic operations are supported.
5145
5146 atomic128=no
5147 if test "$int128" = "yes"; then
5148   cat > $TMPC << EOF
5149 int main(void)
5150 {
5151   unsigned __int128 x = 0, y = 0;
5152   y = __atomic_load_16(&x, 0);
5153   __atomic_store_16(&x, y, 0);
5154   __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5155   return 0;
5156 }
5157 EOF
5158   if compile_prog "" "" ; then
5159     atomic128=yes
5160   fi
5161 fi
5162
5163 #########################################
5164 # See if 64-bit atomic operations are supported.
5165 # Note that without __atomic builtins, we can only
5166 # assume atomic loads/stores max at pointer size.
5167
5168 cat > $TMPC << EOF
5169 #include <stdint.h>
5170 int main(void)
5171 {
5172   uint64_t x = 0, y = 0;
5173 #ifdef __ATOMIC_RELAXED
5174   y = __atomic_load_8(&x, 0);
5175   __atomic_store_8(&x, y, 0);
5176   __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5177   __atomic_exchange_8(&x, y, 0);
5178   __atomic_fetch_add_8(&x, y, 0);
5179 #else
5180   typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5181   __sync_lock_test_and_set(&x, y);
5182   __sync_val_compare_and_swap(&x, y, 0);
5183   __sync_fetch_and_add(&x, y);
5184 #endif
5185   return 0;
5186 }
5187 EOF
5188 if compile_prog "" "" ; then
5189   atomic64=yes
5190 fi
5191
5192 ########################################
5193 # See if 16-byte vector operations are supported.
5194 # Even without a vector unit the compiler may expand these.
5195 # There is a bug in old GCC for PPC that crashes here.
5196 # Unfortunately it's the system compiler for Centos 7.
5197
5198 cat > $TMPC << EOF
5199 typedef unsigned char U1 __attribute__((vector_size(16)));
5200 typedef unsigned short U2 __attribute__((vector_size(16)));
5201 typedef unsigned int U4 __attribute__((vector_size(16)));
5202 typedef unsigned long long U8 __attribute__((vector_size(16)));
5203 typedef signed char S1 __attribute__((vector_size(16)));
5204 typedef signed short S2 __attribute__((vector_size(16)));
5205 typedef signed int S4 __attribute__((vector_size(16)));
5206 typedef signed long long S8 __attribute__((vector_size(16)));
5207 static U1 a1, b1;
5208 static U2 a2, b2;
5209 static U4 a4, b4;
5210 static U8 a8, b8;
5211 static S1 c1;
5212 static S2 c2;
5213 static S4 c4;
5214 static S8 c8;
5215 static int i;
5216 void helper(void *d, void *a, int shift, int i);
5217 void helper(void *d, void *a, int shift, int i)
5218 {
5219   *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5220   *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5221   *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5222   *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5223 }
5224 int main(void)
5225 {
5226   a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5227   a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5228   a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5229   a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5230   a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5231   a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5232   a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5233   a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5234   c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5235   return 0;
5236 }
5237 EOF
5238
5239 vector16=no
5240 if compile_prog "" "" ; then
5241   vector16=yes
5242 fi
5243
5244 ########################################
5245 # check if getauxval is available.
5246
5247 getauxval=no
5248 cat > $TMPC << EOF
5249 #include <sys/auxv.h>
5250 int main(void) {
5251   return getauxval(AT_HWCAP) == 0;
5252 }
5253 EOF
5254 if compile_prog "" "" ; then
5255     getauxval=yes
5256 fi
5257
5258 ########################################
5259 # check if ccache is interfering with
5260 # semantic analysis of macros
5261
5262 unset CCACHE_CPP2
5263 ccache_cpp2=no
5264 cat > $TMPC << EOF
5265 static const int Z = 1;
5266 #define fn() ({ Z; })
5267 #define TAUT(X) ((X) == Z)
5268 #define PAREN(X, Y) (X == Y)
5269 #define ID(X) (X)
5270 int main(int argc, char *argv[])
5271 {
5272     int x = 0, y = 0;
5273     x = ID(x);
5274     x = fn();
5275     fn();
5276     if (PAREN(x, y)) return 0;
5277     if (TAUT(Z)) return 0;
5278     return 0;
5279 }
5280 EOF
5281
5282 if ! compile_object "-Werror"; then
5283     ccache_cpp2=yes
5284 fi
5285
5286 #################################################
5287 # clang does not support glibc + FORTIFY_SOURCE.
5288
5289 if test "$fortify_source" != "no"; then
5290   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5291     fortify_source="no";
5292   elif test -n "$cxx" && has $cxx &&
5293        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5294     fortify_source="no";
5295   else
5296     fortify_source="yes"
5297   fi
5298 fi
5299
5300 ###############################################
5301 # Check if copy_file_range is provided by glibc
5302 have_copy_file_range=no
5303 cat > $TMPC << EOF
5304 #include <unistd.h>
5305 int main(void) {
5306   copy_file_range(0, NULL, 0, NULL, 0, 0);
5307   return 0;
5308 }
5309 EOF
5310 if compile_prog "" "" ; then
5311     have_copy_file_range=yes
5312 fi
5313
5314 ##########################################
5315 # check if struct fsxattr is available via linux/fs.h
5316
5317 have_fsxattr=no
5318 cat > $TMPC << EOF
5319 #include <linux/fs.h>
5320 struct fsxattr foo;
5321 int main(void) {
5322   return 0;
5323 }
5324 EOF
5325 if compile_prog "" "" ; then
5326     have_fsxattr=yes
5327 fi
5328
5329 ##########################################
5330 # check for usable membarrier system call
5331 if test "$membarrier" = "yes"; then
5332     have_membarrier=no
5333     if test "$mingw32" = "yes" ; then
5334         have_membarrier=yes
5335     elif test "$linux" = "yes" ; then
5336         cat > $TMPC << EOF
5337     #include <linux/membarrier.h>
5338     #include <sys/syscall.h>
5339     #include <unistd.h>
5340     #include <stdlib.h>
5341     int main(void) {
5342         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5343         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5344         exit(0);
5345     }
5346 EOF
5347         if compile_prog "" "" ; then
5348             have_membarrier=yes
5349         fi
5350     fi
5351     if test "$have_membarrier" = "no"; then
5352       feature_not_found "membarrier" "membarrier system call not available"
5353     fi
5354 else
5355     # Do not enable it by default even for Mingw32, because it doesn't
5356     # work on Wine.
5357     membarrier=no
5358 fi
5359
5360 ##########################################
5361 # check if rtnetlink.h exists and is useful
5362 have_rtnetlink=no
5363 cat > $TMPC << EOF
5364 #include <linux/rtnetlink.h>
5365 int main(void) {
5366   return IFLA_PROTO_DOWN;
5367 }
5368 EOF
5369 if compile_prog "" "" ; then
5370     have_rtnetlink=yes
5371 fi
5372
5373 ##########################################
5374 # check for usable AF_VSOCK environment
5375 have_af_vsock=no
5376 cat > $TMPC << EOF
5377 #include <errno.h>
5378 #include <sys/types.h>
5379 #include <sys/socket.h>
5380 #if !defined(AF_VSOCK)
5381 # error missing AF_VSOCK flag
5382 #endif
5383 #include <linux/vm_sockets.h>
5384 int main(void) {
5385     int sock, ret;
5386     struct sockaddr_vm svm;
5387     socklen_t len = sizeof(svm);
5388     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5389     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5390     if ((ret == -1) && (errno == ENOTCONN)) {
5391         return 0;
5392     }
5393     return -1;
5394 }
5395 EOF
5396 if compile_prog "" "" ; then
5397     have_af_vsock=yes
5398 fi
5399
5400 ##########################################
5401 # check for usable AF_ALG environment
5402 hava_afalg=no
5403 cat > $TMPC << EOF
5404 #include <errno.h>
5405 #include <sys/types.h>
5406 #include <sys/socket.h>
5407 #include <linux/if_alg.h>
5408 int main(void) {
5409     int sock;
5410     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5411     return sock;
5412 }
5413 EOF
5414 if compile_prog "" "" ; then
5415     have_afalg=yes
5416 fi
5417 if test "$crypto_afalg" = "yes"
5418 then
5419     if test "$have_afalg" != "yes"
5420     then
5421         error_exit "AF_ALG requested but could not be detected"
5422     fi
5423 fi
5424
5425
5426 #################################################
5427 # Check to see if we have the Hypervisor framework
5428 if [ "$darwin" = "yes" ] ; then
5429   cat > $TMPC << EOF
5430 #include <Hypervisor/hv.h>
5431 int main() { return 0;}
5432 EOF
5433   if ! compile_object ""; then
5434     hvf='no'
5435   else
5436     hvf='yes'
5437     LDFLAGS="-framework Hypervisor $LDFLAGS"
5438   fi
5439 fi
5440
5441 #################################################
5442 # Sparc implicitly links with --relax, which is
5443 # incompatible with -r, so --no-relax should be
5444 # given. It does no harm to give it on other
5445 # platforms too.
5446
5447 # Note: the prototype is needed since QEMU_CFLAGS
5448 #       contains -Wmissing-prototypes
5449 cat > $TMPC << EOF
5450 extern int foo(void);
5451 int foo(void) { return 0; }
5452 EOF
5453 if ! compile_object ""; then
5454   error_exit "Failed to compile object file for LD_REL_FLAGS test"
5455 fi
5456 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5457   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5458     LD_REL_FLAGS=$i
5459     break
5460   fi
5461 done
5462 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5463   feature_not_found "modules" "Cannot find how to build relocatable objects"
5464 fi
5465
5466 ##########################################
5467 # check for sysmacros.h
5468
5469 have_sysmacros=no
5470 cat > $TMPC << EOF
5471 #include <sys/sysmacros.h>
5472 int main(void) {
5473     return makedev(0, 0);
5474 }
5475 EOF
5476 if compile_prog "" "" ; then
5477     have_sysmacros=yes
5478 fi
5479
5480 ##########################################
5481 # Veritas HyperScale block driver VxHS
5482 # Check if libvxhs is installed
5483
5484 if test "$vxhs" != "no" ; then
5485   cat > $TMPC <<EOF
5486 #include <stdint.h>
5487 #include <qnio/qnio_api.h>
5488
5489 void *vxhs_callback;
5490
5491 int main(void) {
5492     iio_init(QNIO_VERSION, vxhs_callback);
5493     return 0;
5494 }
5495 EOF
5496   vxhs_libs="-lvxhs -lssl"
5497   if compile_prog "" "$vxhs_libs" ; then
5498     vxhs=yes
5499   else
5500     if test "$vxhs" = "yes" ; then
5501       feature_not_found "vxhs block device" "Install libvxhs See github"
5502     fi
5503     vxhs=no
5504   fi
5505 fi
5506
5507 ##########################################
5508 # check for _Static_assert()
5509
5510 have_static_assert=no
5511 cat > $TMPC << EOF
5512 _Static_assert(1, "success");
5513 int main(void) {
5514     return 0;
5515 }
5516 EOF
5517 if compile_prog "" "" ; then
5518     have_static_assert=yes
5519 fi
5520
5521 ##########################################
5522 # check for utmpx.h, it is missing e.g. on OpenBSD
5523
5524 have_utmpx=no
5525 cat > $TMPC << EOF
5526 #include <utmpx.h>
5527 struct utmpx user_info;
5528 int main(void) {
5529     return 0;
5530 }
5531 EOF
5532 if compile_prog "" "" ; then
5533     have_utmpx=yes
5534 fi
5535
5536 ##########################################
5537 # checks for sanitizers
5538
5539 have_asan=no
5540 have_ubsan=no
5541 have_asan_iface_h=no
5542 have_asan_iface_fiber=no
5543
5544 if test "$sanitizers" = "yes" ; then
5545   write_c_skeleton
5546   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5547       have_asan=yes
5548   fi
5549
5550   # we could use a simple skeleton for flags checks, but this also
5551   # detect the static linking issue of ubsan, see also:
5552   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5553   cat > $TMPC << EOF
5554 #include <stdlib.h>
5555 int main(void) {
5556     void *tmp = malloc(10);
5557     return *(int *)(tmp + 2);
5558 }
5559 EOF
5560   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5561       have_ubsan=yes
5562   fi
5563
5564   if check_include "sanitizer/asan_interface.h" ; then
5565       have_asan_iface_h=yes
5566   fi
5567
5568   cat > $TMPC << EOF
5569 #include <sanitizer/asan_interface.h>
5570 int main(void) {
5571   __sanitizer_start_switch_fiber(0, 0, 0);
5572   return 0;
5573 }
5574 EOF
5575   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5576       have_asan_iface_fiber=yes
5577   fi
5578 fi
5579
5580 ##########################################
5581 # Docker and cross-compiler support
5582 #
5583 # This is specifically for building test
5584 # cases for foreign architectures, not
5585 # cross-compiling QEMU itself.
5586
5587 if has "docker"; then
5588     docker=$($python $source_path/tests/docker/docker.py probe)
5589 fi
5590
5591 ##########################################
5592 # check for libpmem
5593
5594 if test "$libpmem" != "no"; then
5595         if $pkg_config --exists "libpmem"; then
5596                 libpmem="yes"
5597                 libpmem_libs=$($pkg_config --libs libpmem)
5598                 libpmem_cflags=$($pkg_config --cflags libpmem)
5599                 libs_softmmu="$libs_softmmu $libpmem_libs"
5600                 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5601         else
5602                 if test "$libpmem" = "yes" ; then
5603                         feature_not_found "libpmem" "Install nvml or pmdk"
5604                 fi
5605                 libpmem="no"
5606         fi
5607 fi
5608
5609 ##########################################
5610 # End of CC checks
5611 # After here, no more $cc or $ld runs
5612
5613 write_c_skeleton
5614
5615 if test "$gcov" = "yes" ; then
5616   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5617   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5618 elif test "$fortify_source" = "yes" ; then
5619   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5620 elif test "$debug" = "no"; then
5621   CFLAGS="-O2 $CFLAGS"
5622 fi
5623
5624 if test "$have_asan" = "yes"; then
5625   CFLAGS="-fsanitize=address $CFLAGS"
5626   if test "$have_asan_iface_h" = "no" ; then
5627       echo "ASAN build enabled, but ASAN header missing." \
5628            "Without code annotation, the report may be inferior."
5629   elif test "$have_asan_iface_fiber" = "no" ; then
5630       echo "ASAN build enabled, but ASAN header is too old." \
5631            "Without code annotation, the report may be inferior."
5632   fi
5633 fi
5634 if test "$have_ubsan" = "yes"; then
5635   CFLAGS="-fsanitize=undefined $CFLAGS"
5636 fi
5637
5638 ##########################################
5639 # Do we have libnfs
5640 if test "$libnfs" != "no" ; then
5641   if $pkg_config --atleast-version=1.9.3 libnfs; then
5642     libnfs="yes"
5643     libnfs_libs=$($pkg_config --libs libnfs)
5644   else
5645     if test "$libnfs" = "yes" ; then
5646       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5647     fi
5648     libnfs="no"
5649   fi
5650 fi
5651
5652 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5653 if test "$werror" = "yes"; then
5654     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5655 fi
5656
5657 if test "$solaris" = "no" ; then
5658     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5659         LDFLAGS="-Wl,--warn-common $LDFLAGS"
5660     fi
5661 fi
5662
5663 # test if pod2man has --utf8 option
5664 if pod2man --help | grep -q utf8; then
5665     POD2MAN="pod2man --utf8"
5666 else
5667     POD2MAN="pod2man"
5668 fi
5669
5670 # Use ASLR, no-SEH and DEP if available
5671 if test "$mingw32" = "yes" ; then
5672     for flag in --dynamicbase --no-seh --nxcompat; do
5673         if ld_has $flag ; then
5674             LDFLAGS="-Wl,$flag $LDFLAGS"
5675         fi
5676     done
5677 fi
5678
5679 qemu_confdir=$sysconfdir$confsuffix
5680 qemu_moddir=$libdir$confsuffix
5681 qemu_datadir=$datadir$confsuffix
5682 qemu_localedir="$datadir/locale"
5683
5684 # We can only support ivshmem if we have eventfd
5685 if [ "$eventfd" = "yes" ]; then
5686   ivshmem=yes
5687 fi
5688
5689 tools=""
5690 if test "$want_tools" = "yes" ; then
5691   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5692   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5693     tools="qemu-nbd\$(EXESUF) $tools"
5694   fi
5695   if [ "$ivshmem" = "yes" ]; then
5696     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5697   fi
5698   if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5699     tools="elf2dmp $tools"
5700   fi
5701 fi
5702 if test "$softmmu" = yes ; then
5703   if test "$linux" = yes; then
5704     if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5705       virtfs=yes
5706       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5707     else
5708       if test "$virtfs" = yes; then
5709         error_exit "VirtFS requires libcap devel and libattr devel"
5710       fi
5711       virtfs=no
5712     fi
5713     if test "$mpath" != no && test "$mpathpersist" = yes ; then
5714       mpath=yes
5715     else
5716       if test "$mpath" = yes; then
5717         error_exit "Multipath requires libmpathpersist devel"
5718       fi
5719       mpath=no
5720     fi
5721     tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5722   else
5723     if test "$virtfs" = yes; then
5724       error_exit "VirtFS is supported only on Linux"
5725     fi
5726     virtfs=no
5727     if test "$mpath" = yes; then
5728       error_exit "Multipath is supported only on Linux"
5729     fi
5730     mpath=no
5731   fi
5732   if test "$xkbcommon" = "yes"; then
5733     tools="qemu-keymap\$(EXESUF) $tools"
5734   fi
5735 fi
5736
5737 # Probe for guest agent support/options
5738
5739 if [ "$guest_agent" != "no" ]; then
5740   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5741       tools="qemu-ga $tools"
5742       guest_agent=yes
5743   elif [ "$guest_agent" != yes ]; then
5744       guest_agent=no
5745   else
5746       error_exit "Guest agent is not supported on this platform"
5747   fi
5748 fi
5749
5750 # Guest agent Window MSI  package
5751
5752 if test "$guest_agent" != yes; then
5753   if test "$guest_agent_msi" = yes; then
5754     error_exit "MSI guest agent package requires guest agent enabled"
5755   fi
5756   guest_agent_msi=no
5757 elif test "$mingw32" != "yes"; then
5758   if test "$guest_agent_msi" = "yes"; then
5759     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5760   fi
5761   guest_agent_msi=no
5762 elif ! has wixl; then
5763   if test "$guest_agent_msi" = "yes"; then
5764     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5765   fi
5766   guest_agent_msi=no
5767 else
5768   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5769   # disabled explicitly
5770   if test "$guest_agent_msi" != "no"; then
5771     guest_agent_msi=yes
5772   fi
5773 fi
5774
5775 if test "$guest_agent_msi" = "yes"; then
5776   if test "$guest_agent_with_vss" = "yes"; then
5777     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5778   fi
5779
5780   if test "$QEMU_GA_MANUFACTURER" = ""; then
5781     QEMU_GA_MANUFACTURER=QEMU
5782   fi
5783
5784   if test "$QEMU_GA_DISTRO" = ""; then
5785     QEMU_GA_DISTRO=Linux
5786   fi
5787
5788   if test "$QEMU_GA_VERSION" = ""; then
5789       QEMU_GA_VERSION=$(cat $source_path/VERSION)
5790   fi
5791
5792   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5793
5794   case "$cpu" in
5795   x86_64)
5796     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5797     ;;
5798   i386)
5799     QEMU_GA_MSI_ARCH="-D Arch=32"
5800     ;;
5801   *)
5802     error_exit "CPU $cpu not supported for building installation package"
5803     ;;
5804   esac
5805 fi
5806
5807 # Mac OS X ships with a broken assembler
5808 roms=
5809 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5810         "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5811         "$softmmu" = yes ; then
5812     # Different host OS linkers have different ideas about the name of the ELF
5813     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5814     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5815     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5816         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5817             ld_i386_emulation="$emu"
5818             roms="optionrom"
5819             break
5820         fi
5821     done
5822 fi
5823 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5824   roms="$roms spapr-rtas"
5825 fi
5826
5827 if test "$cpu" = "s390x" ; then
5828   roms="$roms s390-ccw"
5829 fi
5830
5831 # Probe for the need for relocating the user-only binary.
5832 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5833   textseg_addr=
5834   case "$cpu" in
5835     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5836       # ??? Rationale for choosing this address
5837       textseg_addr=0x60000000
5838       ;;
5839     mips)
5840       # A 256M aligned address, high in the address space, with enough
5841       # room for the code_gen_buffer above it before the stack.
5842       textseg_addr=0x60000000
5843       ;;
5844   esac
5845   if [ -n "$textseg_addr" ]; then
5846     cat > $TMPC <<EOF
5847     int main(void) { return 0; }
5848 EOF
5849     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5850     if ! compile_prog "" "$textseg_ldflags"; then
5851       # In case ld does not support -Ttext-segment, edit the default linker
5852       # script via sed to set the .text start addr.  This is needed on FreeBSD
5853       # at least.
5854       if ! $ld --verbose >/dev/null 2>&1; then
5855         error_exit \
5856             "We need to link the QEMU user mode binaries at a" \
5857             "specific text address. Unfortunately your linker" \
5858             "doesn't support either the -Ttext-segment option or" \
5859             "printing the default linker script with --verbose." \
5860             "If you don't want the user mode binaries, pass the" \
5861             "--disable-user option to configure."
5862       fi
5863
5864       $ld --verbose | sed \
5865         -e '1,/==================================================/d' \
5866         -e '/==================================================/,$d' \
5867         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5868         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5869       textseg_ldflags="-Wl,-T../config-host.ld"
5870     fi
5871   fi
5872 fi
5873
5874 # Check that the C++ compiler exists and works with the C compiler.
5875 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5876 if has $cxx; then
5877     cat > $TMPC <<EOF
5878 int c_function(void);
5879 int main(void) { return c_function(); }
5880 EOF
5881
5882     compile_object
5883
5884     cat > $TMPCXX <<EOF
5885 extern "C" {
5886    int c_function(void);
5887 }
5888 int c_function(void) { return 42; }
5889 EOF
5890
5891     update_cxxflags
5892
5893     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5894         # C++ compiler $cxx works ok with C compiler $cc
5895         :
5896     else
5897         echo "C++ compiler $cxx does not work with C compiler $cc"
5898         echo "Disabling C++ specific optional code"
5899         cxx=
5900     fi
5901 else
5902     echo "No C++ compiler available; disabling C++ specific optional code"
5903     cxx=
5904 fi
5905
5906 echo_version() {
5907     if test "$1" = "yes" ; then
5908         echo "($2)"
5909     fi
5910 }
5911
5912 # prepend pixman and ftd flags after all config tests are done
5913 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5914 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5915 libs_softmmu="$pixman_libs $libs_softmmu"
5916
5917 echo "Install prefix    $prefix"
5918 echo "BIOS directory    $(eval echo $qemu_datadir)"
5919 echo "firmware path     $(eval echo $firmwarepath)"
5920 echo "binary directory  $(eval echo $bindir)"
5921 echo "library directory $(eval echo $libdir)"
5922 echo "module directory  $(eval echo $qemu_moddir)"
5923 echo "libexec directory $(eval echo $libexecdir)"
5924 echo "include directory $(eval echo $includedir)"
5925 echo "config directory  $(eval echo $sysconfdir)"
5926 if test "$mingw32" = "no" ; then
5927 echo "local state directory   $(eval echo $local_statedir)"
5928 echo "Manual directory  $(eval echo $mandir)"
5929 echo "ELF interp prefix $interp_prefix"
5930 else
5931 echo "local state directory   queried at runtime"
5932 echo "Windows SDK       $win_sdk"
5933 fi
5934 echo "Source path       $source_path"
5935 echo "GIT binary        $git"
5936 echo "GIT submodules    $git_submodules"
5937 echo "C compiler        $cc"
5938 echo "Host C compiler   $host_cc"
5939 echo "C++ compiler      $cxx"
5940 echo "Objective-C compiler $objcc"
5941 echo "ARFLAGS           $ARFLAGS"
5942 echo "CFLAGS            $CFLAGS"
5943 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5944 echo "LDFLAGS           $LDFLAGS"
5945 echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
5946 echo "make              $make"
5947 echo "install           $install"
5948 echo "python            $python"
5949 if test "$slirp" = "yes" ; then
5950     echo "smbd              $smbd"
5951 fi
5952 echo "module support    $modules"
5953 echo "host CPU          $cpu"
5954 echo "host big endian   $bigendian"
5955 echo "target list       $target_list"
5956 echo "gprof enabled     $gprof"
5957 echo "sparse enabled    $sparse"
5958 echo "strip binaries    $strip_opt"
5959 echo "profiler          $profiler"
5960 echo "static build      $static"
5961 if test "$darwin" = "yes" ; then
5962     echo "Cocoa support     $cocoa"
5963 fi
5964 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5965 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5966 echo "GTK GL support    $gtk_gl"
5967 echo "VTE support       $vte $(echo_version $vte $vteversion)"
5968 echo "TLS priority      $tls_priority"
5969 echo "GNUTLS support    $gnutls"
5970 echo "GNUTLS rnd        $gnutls_rnd"
5971 echo "libgcrypt         $gcrypt"
5972 echo "libgcrypt kdf     $gcrypt_kdf"
5973 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5974 echo "nettle kdf        $nettle_kdf"
5975 echo "libtasn1          $tasn1"
5976 echo "curses support    $curses"
5977 echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
5978 echo "curl support      $curl"
5979 echo "mingw32 support   $mingw32"
5980 echo "Audio drivers     $audio_drv_list"
5981 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5982 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5983 echo "VirtFS support    $virtfs"
5984 echo "Multipath support $mpath"
5985 echo "VNC support       $vnc"
5986 if test "$vnc" = "yes" ; then
5987     echo "VNC SASL support  $vnc_sasl"
5988     echo "VNC JPEG support  $vnc_jpeg"
5989     echo "VNC PNG support   $vnc_png"
5990 fi
5991 if test -n "$sparc_cpu"; then
5992     echo "Target Sparc Arch $sparc_cpu"
5993 fi
5994 echo "xen support       $xen"
5995 if test "$xen" = "yes" ; then
5996   echo "xen ctrl version  $xen_ctrl_version"
5997   echo "pv dom build      $xen_pv_domain_build"
5998 fi
5999 echo "brlapi support    $brlapi"
6000 echo "bluez  support    $bluez"
6001 echo "Documentation     $docs"
6002 echo "PIE               $pie"
6003 echo "vde support       $vde"
6004 echo "netmap support    $netmap"
6005 echo "Linux AIO support $linux_aio"
6006 echo "ATTR/XATTR support $attr"
6007 echo "Install blobs     $blobs"
6008 echo "KVM support       $kvm"
6009 echo "HAX support       $hax"
6010 echo "HVF support       $hvf"
6011 echo "WHPX support      $whpx"
6012 echo "TCG support       $tcg"
6013 if test "$tcg" = "yes" ; then
6014     echo "TCG debug enabled $debug_tcg"
6015     echo "TCG interpreter   $tcg_interpreter"
6016 fi
6017 echo "malloc trim support $malloc_trim"
6018 echo "RDMA support      $rdma"
6019 echo "PVRDMA support    $pvrdma"
6020 echo "fdt support       $fdt"
6021 echo "membarrier        $membarrier"
6022 echo "preadv support    $preadv"
6023 echo "fdatasync         $fdatasync"
6024 echo "madvise           $madvise"
6025 echo "posix_madvise     $posix_madvise"
6026 echo "posix_memalign    $posix_memalign"
6027 echo "libcap-ng support $cap_ng"
6028 echo "vhost-net support $vhost_net"
6029 echo "vhost-crypto support $vhost_crypto"
6030 echo "vhost-scsi support $vhost_scsi"
6031 echo "vhost-vsock support $vhost_vsock"
6032 echo "vhost-user support $vhost_user"
6033 echo "Trace backends    $trace_backends"
6034 if have_backend "simple"; then
6035 echo "Trace output file $trace_file-<pid>"
6036 fi
6037 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6038 echo "rbd support       $rbd"
6039 echo "xfsctl support    $xfs"
6040 echo "smartcard support $smartcard"
6041 echo "libusb            $libusb"
6042 echo "usb net redir     $usb_redir"
6043 echo "OpenGL support    $opengl"
6044 echo "OpenGL dmabufs    $opengl_dmabuf"
6045 echo "libiscsi support  $libiscsi"
6046 echo "libnfs support    $libnfs"
6047 echo "build guest agent $guest_agent"
6048 echo "QGA VSS support   $guest_agent_with_vss"
6049 echo "QGA w32 disk info $guest_agent_ntddscsi"
6050 echo "QGA MSI support   $guest_agent_msi"
6051 echo "seccomp support   $seccomp"
6052 echo "coroutine backend $coroutine"
6053 echo "coroutine pool    $coroutine_pool"
6054 echo "debug stack usage $debug_stack_usage"
6055 echo "mutex debugging   $debug_mutex"
6056 echo "crypto afalg      $crypto_afalg"
6057 echo "GlusterFS support $glusterfs"
6058 echo "gcov              $gcov_tool"
6059 echo "gcov enabled      $gcov"
6060 echo "TPM support       $tpm"
6061 echo "libssh2 support   $libssh2"
6062 echo "TPM passthrough   $tpm_passthrough"
6063 echo "TPM emulator      $tpm_emulator"
6064 echo "QOM debugging     $qom_cast_debug"
6065 echo "Live block migration $live_block_migration"
6066 echo "lzo support       $lzo"
6067 echo "snappy support    $snappy"
6068 echo "bzip2 support     $bzip2"
6069 echo "NUMA host support $numa"
6070 echo "libxml2           $libxml2"
6071 echo "tcmalloc support  $tcmalloc"
6072 echo "jemalloc support  $jemalloc"
6073 echo "avx2 optimization $avx2_opt"
6074 echo "replication support $replication"
6075 echo "VxHS block device $vxhs"
6076 echo "capstone          $capstone"
6077 echo "docker            $docker"
6078 echo "libpmem support   $libpmem"
6079
6080 if test "$sdl_too_old" = "yes"; then
6081 echo "-> Your SDL version is too old - please upgrade to have SDL support"
6082 fi
6083
6084 if test "$sdlabi" = "1.2"; then
6085     echo
6086     echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6087     echo "WARNING: future releases. Please switch to using SDL 2.0"
6088 fi
6089
6090 if test "$supported_cpu" = "no"; then
6091     echo
6092     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6093     echo
6094     echo "CPU host architecture $cpu support is not currently maintained."
6095     echo "The QEMU project intends to remove support for this host CPU in"
6096     echo "a future release if nobody volunteers to maintain it and to"
6097     echo "provide a build host for our continuous integration setup."
6098     echo "configure has succeeded and you can continue to build, but"
6099     echo "if you care about QEMU on this platform you should contact"
6100     echo "us upstream at [email protected]."
6101 fi
6102
6103 if test "$supported_os" = "no"; then
6104     echo
6105     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6106     echo
6107     echo "Host OS $targetos support is not currently maintained."
6108     echo "The QEMU project intends to remove support for this host OS in"
6109     echo "a future release if nobody volunteers to maintain it and to"
6110     echo "provide a build host for our continuous integration setup."
6111     echo "configure has succeeded and you can continue to build, but"
6112     echo "if you care about QEMU on this platform you should contact"
6113     echo "us upstream at [email protected]."
6114 fi
6115
6116 config_host_mak="config-host.mak"
6117
6118 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6119
6120 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6121 echo >> $config_host_mak
6122
6123 echo all: >> $config_host_mak
6124 echo "prefix=$prefix" >> $config_host_mak
6125 echo "bindir=$bindir" >> $config_host_mak
6126 echo "libdir=$libdir" >> $config_host_mak
6127 echo "libexecdir=$libexecdir" >> $config_host_mak
6128 echo "includedir=$includedir" >> $config_host_mak
6129 echo "mandir=$mandir" >> $config_host_mak
6130 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6131 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6132 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6133 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6134 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6135 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6136 if test "$mingw32" = "no" ; then
6137   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6138 fi
6139 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6140 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6141 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6142 echo "GIT=$git" >> $config_host_mak
6143 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6144 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6145
6146 echo "ARCH=$ARCH" >> $config_host_mak
6147
6148 if test "$debug_tcg" = "yes" ; then
6149   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6150 fi
6151 if test "$strip_opt" = "yes" ; then
6152   echo "STRIP=${strip}" >> $config_host_mak
6153 fi
6154 if test "$bigendian" = "yes" ; then
6155   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6156 fi
6157 if test "$mingw32" = "yes" ; then
6158   echo "CONFIG_WIN32=y" >> $config_host_mak
6159   rc_version=$(cat $source_path/VERSION)
6160   version_major=${rc_version%%.*}
6161   rc_version=${rc_version#*.}
6162   version_minor=${rc_version%%.*}
6163   rc_version=${rc_version#*.}
6164   version_subminor=${rc_version%%.*}
6165   version_micro=0
6166   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6167   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6168   if test "$guest_agent_with_vss" = "yes" ; then
6169     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6170     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6171     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6172   fi
6173   if test "$guest_agent_ntddscsi" = "yes" ; then
6174     echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6175   fi
6176   if test "$guest_agent_msi" = "yes"; then
6177     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6178     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6179     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6180     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6181     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6182     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6183     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6184   fi
6185 else
6186   echo "CONFIG_POSIX=y" >> $config_host_mak
6187 fi
6188
6189 if test "$linux" = "yes" ; then
6190   echo "CONFIG_LINUX=y" >> $config_host_mak
6191 fi
6192
6193 if test "$darwin" = "yes" ; then
6194   echo "CONFIG_DARWIN=y" >> $config_host_mak
6195 fi
6196
6197 if test "$solaris" = "yes" ; then
6198   echo "CONFIG_SOLARIS=y" >> $config_host_mak
6199 fi
6200 if test "$haiku" = "yes" ; then
6201   echo "CONFIG_HAIKU=y" >> $config_host_mak
6202 fi
6203 if test "$static" = "yes" ; then
6204   echo "CONFIG_STATIC=y" >> $config_host_mak
6205 fi
6206 if test "$profiler" = "yes" ; then
6207   echo "CONFIG_PROFILER=y" >> $config_host_mak
6208 fi
6209 if test "$slirp" = "yes" ; then
6210   echo "CONFIG_SLIRP=y" >> $config_host_mak
6211   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6212 fi
6213 if test "$vde" = "yes" ; then
6214   echo "CONFIG_VDE=y" >> $config_host_mak
6215   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6216 fi
6217 if test "$netmap" = "yes" ; then
6218   echo "CONFIG_NETMAP=y" >> $config_host_mak
6219 fi
6220 if test "$l2tpv3" = "yes" ; then
6221   echo "CONFIG_L2TPV3=y" >> $config_host_mak
6222 fi
6223 if test "$cap_ng" = "yes" ; then
6224   echo "CONFIG_LIBCAP=y" >> $config_host_mak
6225 fi
6226 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6227 for drv in $audio_drv_list; do
6228     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6229     case "$drv" in
6230         alsa | oss | pa | sdl)
6231             echo "$def=m" >> $config_host_mak ;;
6232         *)
6233             echo "$def=y" >> $config_host_mak ;;
6234     esac
6235 done
6236 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6237 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6238 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6239 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6240 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6241 if test "$audio_pt_int" = "yes" ; then
6242   echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6243 fi
6244 if test "$audio_win_int" = "yes" ; then
6245   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6246 fi
6247 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6248 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6249 if test "$vnc" = "yes" ; then
6250   echo "CONFIG_VNC=y" >> $config_host_mak
6251 fi
6252 if test "$vnc_sasl" = "yes" ; then
6253   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6254 fi
6255 if test "$vnc_jpeg" = "yes" ; then
6256   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6257 fi
6258 if test "$vnc_png" = "yes" ; then
6259   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6260 fi
6261 if test "$xkbcommon" = "yes" ; then
6262   echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6263   echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6264 fi
6265 if test "$fnmatch" = "yes" ; then
6266   echo "CONFIG_FNMATCH=y" >> $config_host_mak
6267 fi
6268 if test "$xfs" = "yes" ; then
6269   echo "CONFIG_XFS=y" >> $config_host_mak
6270 fi
6271 qemu_version=$(head $source_path/VERSION)
6272 echo "VERSION=$qemu_version" >>$config_host_mak
6273 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6274 echo "SRC_PATH=$source_path" >> $config_host_mak
6275 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6276 if [ "$docs" = "yes" ] ; then
6277   echo "BUILD_DOCS=yes" >> $config_host_mak
6278 fi
6279 if test "$modules" = "yes"; then
6280   # $shacmd can generate a hash started with digit, which the compiler doesn't
6281   # like as an symbol. So prefix it with an underscore
6282   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6283   echo "CONFIG_MODULES=y" >> $config_host_mak
6284 fi
6285 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6286   echo "CONFIG_X11=y" >> $config_host_mak
6287   echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6288   echo "X11_LIBS=$x11_libs" >> $config_host_mak
6289 fi
6290 if test "$sdl" = "yes" ; then
6291   echo "CONFIG_SDL=m" >> $config_host_mak
6292   echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6293   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6294   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6295 fi
6296 if test "$cocoa" = "yes" ; then
6297   echo "CONFIG_COCOA=y" >> $config_host_mak
6298 fi
6299 if test "$curses" = "yes" ; then
6300   echo "CONFIG_CURSES=m" >> $config_host_mak
6301   echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6302   echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6303 fi
6304 if test "$pipe2" = "yes" ; then
6305   echo "CONFIG_PIPE2=y" >> $config_host_mak
6306 fi
6307 if test "$accept4" = "yes" ; then
6308   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6309 fi
6310 if test "$splice" = "yes" ; then
6311   echo "CONFIG_SPLICE=y" >> $config_host_mak
6312 fi
6313 if test "$eventfd" = "yes" ; then
6314   echo "CONFIG_EVENTFD=y" >> $config_host_mak
6315 fi
6316 if test "$memfd" = "yes" ; then
6317   echo "CONFIG_MEMFD=y" >> $config_host_mak
6318 fi
6319 if test "$fallocate" = "yes" ; then
6320   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6321 fi
6322 if test "$fallocate_punch_hole" = "yes" ; then
6323   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6324 fi
6325 if test "$fallocate_zero_range" = "yes" ; then
6326   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6327 fi
6328 if test "$posix_fallocate" = "yes" ; then
6329   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6330 fi
6331 if test "$sync_file_range" = "yes" ; then
6332   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6333 fi
6334 if test "$fiemap" = "yes" ; then
6335   echo "CONFIG_FIEMAP=y" >> $config_host_mak
6336 fi
6337 if test "$dup3" = "yes" ; then
6338   echo "CONFIG_DUP3=y" >> $config_host_mak
6339 fi
6340 if test "$ppoll" = "yes" ; then
6341   echo "CONFIG_PPOLL=y" >> $config_host_mak
6342 fi
6343 if test "$prctl_pr_set_timerslack" = "yes" ; then
6344   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6345 fi
6346 if test "$epoll" = "yes" ; then
6347   echo "CONFIG_EPOLL=y" >> $config_host_mak
6348 fi
6349 if test "$epoll_create1" = "yes" ; then
6350   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6351 fi
6352 if test "$sendfile" = "yes" ; then
6353   echo "CONFIG_SENDFILE=y" >> $config_host_mak
6354 fi
6355 if test "$timerfd" = "yes" ; then
6356   echo "CONFIG_TIMERFD=y" >> $config_host_mak
6357 fi
6358 if test "$setns" = "yes" ; then
6359   echo "CONFIG_SETNS=y" >> $config_host_mak
6360 fi
6361 if test "$clock_adjtime" = "yes" ; then
6362   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6363 fi
6364 if test "$syncfs" = "yes" ; then
6365   echo "CONFIG_SYNCFS=y" >> $config_host_mak
6366 fi
6367 if test "$inotify" = "yes" ; then
6368   echo "CONFIG_INOTIFY=y" >> $config_host_mak
6369 fi
6370 if test "$inotify1" = "yes" ; then
6371   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6372 fi
6373 if test "$sem_timedwait" = "yes" ; then
6374   echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6375 fi
6376 if test "$strchrnul" = "yes" ; then
6377   echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6378 fi
6379 if test "$byteswap_h" = "yes" ; then
6380   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6381 fi
6382 if test "$bswap_h" = "yes" ; then
6383   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6384 fi
6385 if test "$curl" = "yes" ; then
6386   echo "CONFIG_CURL=m" >> $config_host_mak
6387   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6388   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6389 fi
6390 if test "$brlapi" = "yes" ; then
6391   echo "CONFIG_BRLAPI=y" >> $config_host_mak
6392   echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6393 fi
6394 if test "$bluez" = "yes" ; then
6395   echo "CONFIG_BLUEZ=y" >> $config_host_mak
6396   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6397 fi
6398 if test "$gtk" = "yes" ; then
6399   echo "CONFIG_GTK=m" >> $config_host_mak
6400   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6401   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6402   if test "$gtk_gl" = "yes" ; then
6403     echo "CONFIG_GTK_GL=y" >> $config_host_mak
6404   fi
6405 fi
6406 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6407 if test "$gnutls" = "yes" ; then
6408   echo "CONFIG_GNUTLS=y" >> $config_host_mak
6409 fi
6410 if test "$gnutls_rnd" = "yes" ; then
6411   echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6412 fi
6413 if test "$gcrypt" = "yes" ; then
6414   echo "CONFIG_GCRYPT=y" >> $config_host_mak
6415   if test "$gcrypt_hmac" = "yes" ; then
6416     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6417   fi
6418   if test "$gcrypt_kdf" = "yes" ; then
6419     echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6420   fi
6421 fi
6422 if test "$nettle" = "yes" ; then
6423   echo "CONFIG_NETTLE=y" >> $config_host_mak
6424   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6425   if test "$nettle_kdf" = "yes" ; then
6426     echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6427   fi
6428 fi
6429 if test "$tasn1" = "yes" ; then
6430   echo "CONFIG_TASN1=y" >> $config_host_mak
6431 fi
6432 if test "$have_ifaddrs_h" = "yes" ; then
6433     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6434 fi
6435 if test "$have_broken_size_max" = "yes" ; then
6436     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6437 fi
6438
6439 # Work around a system header bug with some kernel/XFS header
6440 # versions where they both try to define 'struct fsxattr':
6441 # xfs headers will not try to redefine structs from linux headers
6442 # if this macro is set.
6443 if test "$have_fsxattr" = "yes" ; then
6444     echo "HAVE_FSXATTR=y" >> $config_host_mak
6445 fi
6446 if test "$have_copy_file_range" = "yes" ; then
6447     echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6448 fi
6449 if test "$vte" = "yes" ; then
6450   echo "CONFIG_VTE=y" >> $config_host_mak
6451   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6452   echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6453 fi
6454 if test "$virglrenderer" = "yes" ; then
6455   echo "CONFIG_VIRGL=y" >> $config_host_mak
6456   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6457   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6458 fi
6459 if test "$xen" = "yes" ; then
6460   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6461   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6462   if test "$xen_pv_domain_build" = "yes" ; then
6463     echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6464   fi
6465 fi
6466 if test "$linux_aio" = "yes" ; then
6467   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6468 fi
6469 if test "$attr" = "yes" ; then
6470   echo "CONFIG_ATTR=y" >> $config_host_mak
6471 fi
6472 if test "$libattr" = "yes" ; then
6473   echo "CONFIG_LIBATTR=y" >> $config_host_mak
6474 fi
6475 if test "$virtfs" = "yes" ; then
6476   echo "CONFIG_VIRTFS=y" >> $config_host_mak
6477 fi
6478 if test "$mpath" = "yes" ; then
6479   echo "CONFIG_MPATH=y" >> $config_host_mak
6480   if test "$mpathpersist_new_api" = "yes"; then
6481     echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6482   fi
6483 fi
6484 if test "$vhost_scsi" = "yes" ; then
6485   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6486 fi
6487 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6488   echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6489 fi
6490 if test "$vhost_crypto" = "yes" ; then
6491   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6492 fi
6493 if test "$vhost_vsock" = "yes" ; then
6494   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6495 fi
6496 if test "$vhost_user" = "yes" ; then
6497   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6498 fi
6499 if test "$blobs" = "yes" ; then
6500   echo "INSTALL_BLOBS=yes" >> $config_host_mak
6501 fi
6502 if test "$iovec" = "yes" ; then
6503   echo "CONFIG_IOVEC=y" >> $config_host_mak
6504 fi
6505 if test "$preadv" = "yes" ; then
6506   echo "CONFIG_PREADV=y" >> $config_host_mak
6507 fi
6508 if test "$fdt" != "no" ; then
6509   echo "CONFIG_FDT=y" >> $config_host_mak
6510 fi
6511 if test "$membarrier" = "yes" ; then
6512   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6513 fi
6514 if test "$signalfd" = "yes" ; then
6515   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6516 fi
6517 if test "$tcg" = "yes"; then
6518   echo "CONFIG_TCG=y" >> $config_host_mak
6519   if test "$tcg_interpreter" = "yes" ; then
6520     echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6521   fi
6522 fi
6523 if test "$fdatasync" = "yes" ; then
6524   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6525 fi
6526 if test "$madvise" = "yes" ; then
6527   echo "CONFIG_MADVISE=y" >> $config_host_mak
6528 fi
6529 if test "$posix_madvise" = "yes" ; then
6530   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6531 fi
6532 if test "$posix_memalign" = "yes" ; then
6533   echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6534 fi
6535
6536 if test "$spice" = "yes" ; then
6537   echo "CONFIG_SPICE=y" >> $config_host_mak
6538 fi
6539
6540 if test "$smartcard" = "yes" ; then
6541   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6542   echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6543   echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6544 fi
6545
6546 if test "$libusb" = "yes" ; then
6547   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6548   echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6549   echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6550 fi
6551
6552 if test "$usb_redir" = "yes" ; then
6553   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6554   echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6555   echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6556 fi
6557
6558 if test "$opengl" = "yes" ; then
6559   echo "CONFIG_OPENGL=y" >> $config_host_mak
6560   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6561   if test "$opengl_dmabuf" = "yes" ; then
6562     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6563   fi
6564 fi
6565
6566 if test "$malloc_trim" = "yes" ; then
6567   echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6568 fi
6569
6570 if test "$avx2_opt" = "yes" ; then
6571   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6572 fi
6573
6574 if test "$lzo" = "yes" ; then
6575   echo "CONFIG_LZO=y" >> $config_host_mak
6576 fi
6577
6578 if test "$snappy" = "yes" ; then
6579   echo "CONFIG_SNAPPY=y" >> $config_host_mak
6580 fi
6581
6582 if test "$bzip2" = "yes" ; then
6583   echo "CONFIG_BZIP2=y" >> $config_host_mak
6584   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6585 fi
6586
6587 if test "$libiscsi" = "yes" ; then
6588   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6589   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6590   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6591 fi
6592
6593 if test "$libnfs" = "yes" ; then
6594   echo "CONFIG_LIBNFS=m" >> $config_host_mak
6595   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6596 fi
6597
6598 if test "$seccomp" = "yes"; then
6599   echo "CONFIG_SECCOMP=y" >> $config_host_mak
6600   echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6601   echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6602 fi
6603
6604 # XXX: suppress that
6605 if [ "$bsd" = "yes" ] ; then
6606   echo "CONFIG_BSD=y" >> $config_host_mak
6607 fi
6608
6609 if test "$localtime_r" = "yes" ; then
6610   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6611 fi
6612 if test "$qom_cast_debug" = "yes" ; then
6613   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6614 fi
6615 if test "$rbd" = "yes" ; then
6616   echo "CONFIG_RBD=m" >> $config_host_mak
6617   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6618   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6619 fi
6620
6621 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6622 if test "$coroutine_pool" = "yes" ; then
6623   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6624 else
6625   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6626 fi
6627
6628 if test "$debug_stack_usage" = "yes" ; then
6629   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6630 fi
6631
6632 if test "$crypto_afalg" = "yes" ; then
6633   echo "CONFIG_AF_ALG=y" >> $config_host_mak
6634 fi
6635
6636 if test "$open_by_handle_at" = "yes" ; then
6637   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6638 fi
6639
6640 if test "$linux_magic_h" = "yes" ; then
6641   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6642 fi
6643
6644 if test "$pragma_diagnostic_available" = "yes" ; then
6645   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6646 fi
6647
6648 if test "$valgrind_h" = "yes" ; then
6649   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6650 fi
6651
6652 if test "$have_asan_iface_fiber" = "yes" ; then
6653     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6654 fi
6655
6656 if test "$has_environ" = "yes" ; then
6657   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6658 fi
6659
6660 if test "$cpuid_h" = "yes" ; then
6661   echo "CONFIG_CPUID_H=y" >> $config_host_mak
6662 fi
6663
6664 if test "$int128" = "yes" ; then
6665   echo "CONFIG_INT128=y" >> $config_host_mak
6666 fi
6667
6668 if test "$atomic128" = "yes" ; then
6669   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6670 fi
6671
6672 if test "$atomic64" = "yes" ; then
6673   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6674 fi
6675
6676 if test "$vector16" = "yes" ; then
6677   echo "CONFIG_VECTOR16=y" >> $config_host_mak
6678 fi
6679
6680 if test "$getauxval" = "yes" ; then
6681   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6682 fi
6683
6684 if test "$glusterfs" = "yes" ; then
6685   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6686   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6687   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6688 fi
6689
6690 if test "$glusterfs_xlator_opt" = "yes" ; then
6691   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6692 fi
6693
6694 if test "$glusterfs_discard" = "yes" ; then
6695   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6696 fi
6697
6698 if test "$glusterfs_fallocate" = "yes" ; then
6699   echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6700 fi
6701
6702 if test "$glusterfs_zerofill" = "yes" ; then
6703   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6704 fi
6705
6706 if test "$libssh2" = "yes" ; then
6707   echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6708   echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6709   echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6710 fi
6711
6712 if test "$live_block_migration" = "yes" ; then
6713   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6714 fi
6715
6716 if test "$tpm" = "yes"; then
6717   echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6718   # TPM passthrough support?
6719   if test "$tpm_passthrough" = "yes"; then
6720     echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6721   fi
6722   # TPM emulator support?
6723   if test "$tpm_emulator" = "yes"; then
6724     echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6725   fi
6726 fi
6727
6728 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6729 if have_backend "nop"; then
6730   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6731 fi
6732 if have_backend "simple"; then
6733   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6734   # Set the appropriate trace file.
6735   trace_file="\"$trace_file-\" FMT_pid"
6736 fi
6737 if have_backend "log"; then
6738   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6739 fi
6740 if have_backend "ust"; then
6741   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6742 fi
6743 if have_backend "dtrace"; then
6744   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6745   if test "$trace_backend_stap" = "yes" ; then
6746     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6747   fi
6748 fi
6749 if have_backend "ftrace"; then
6750   if test "$linux" = "yes" ; then
6751     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6752   else
6753     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6754   fi
6755 fi
6756 if have_backend "syslog"; then
6757   if test "$posix_syslog" = "yes" ; then
6758     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6759   else
6760     feature_not_found "syslog(trace backend)" "syslog not available"
6761   fi
6762 fi
6763 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6764
6765 if test "$rdma" = "yes" ; then
6766   echo "CONFIG_RDMA=y" >> $config_host_mak
6767   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6768 fi
6769
6770 if test "$pvrdma" = "yes" ; then
6771   echo "CONFIG_PVRDMA=y" >> $config_host_mak
6772 fi
6773
6774 if test "$have_rtnetlink" = "yes" ; then
6775   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6776 fi
6777
6778 if test "$libxml2" = "yes" ; then
6779   echo "CONFIG_LIBXML2=y" >> $config_host_mak
6780   echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6781   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6782 fi
6783
6784 if test "$replication" = "yes" ; then
6785   echo "CONFIG_REPLICATION=y" >> $config_host_mak
6786 fi
6787
6788 if test "$have_af_vsock" = "yes" ; then
6789   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6790 fi
6791
6792 if test "$have_sysmacros" = "yes" ; then
6793   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6794 fi
6795
6796 if test "$have_static_assert" = "yes" ; then
6797   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6798 fi
6799
6800 if test "$have_utmpx" = "yes" ; then
6801   echo "HAVE_UTMPX=y" >> $config_host_mak
6802 fi
6803
6804 if test "$ivshmem" = "yes" ; then
6805   echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6806 fi
6807 if test "$capstone" != "no" ; then
6808   echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6809 fi
6810 if test "$debug_mutex" = "yes" ; then
6811   echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6812 fi
6813
6814 # Hold two types of flag:
6815 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6816 #                                     a thread we have a handle to
6817 #   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6818 #                                     platform
6819 if test "$pthread_setname_np" = "yes" ; then
6820   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6821   echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6822 fi
6823
6824 if test "$vxhs" = "yes" ; then
6825   echo "CONFIG_VXHS=y" >> $config_host_mak
6826   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6827 fi
6828
6829 if test "$libpmem" = "yes" ; then
6830   echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6831 fi
6832
6833 if test "$tcg_interpreter" = "yes"; then
6834   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6835 elif test "$ARCH" = "sparc64" ; then
6836   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6837 elif test "$ARCH" = "s390x" ; then
6838   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6839 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6840   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6841 elif test "$ARCH" = "ppc64" ; then
6842   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6843 else
6844   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6845 fi
6846 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6847
6848 echo "TOOLS=$tools" >> $config_host_mak
6849 echo "ROMS=$roms" >> $config_host_mak
6850 echo "MAKE=$make" >> $config_host_mak
6851 echo "INSTALL=$install" >> $config_host_mak
6852 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6853 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6854 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6855 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6856 echo "PYTHON=$python" >> $config_host_mak
6857 echo "CC=$cc" >> $config_host_mak
6858 if $iasl -h > /dev/null 2>&1; then
6859   echo "IASL=$iasl" >> $config_host_mak
6860 fi
6861 echo "HOST_CC=$host_cc" >> $config_host_mak
6862 echo "CXX=$cxx" >> $config_host_mak
6863 echo "OBJCC=$objcc" >> $config_host_mak
6864 echo "AR=$ar" >> $config_host_mak
6865 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6866 echo "AS=$as" >> $config_host_mak
6867 echo "CCAS=$ccas" >> $config_host_mak
6868 echo "CPP=$cpp" >> $config_host_mak
6869 echo "OBJCOPY=$objcopy" >> $config_host_mak
6870 echo "LD=$ld" >> $config_host_mak
6871 echo "RANLIB=$ranlib" >> $config_host_mak
6872 echo "NM=$nm" >> $config_host_mak
6873 echo "WINDRES=$windres" >> $config_host_mak
6874 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6875 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6876 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6877 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6878 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6879 if test "$sparse" = "yes" ; then
6880   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6881   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6882   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6883   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6884   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6885 fi
6886 if test "$cross_prefix" != ""; then
6887   echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6888 else
6889   echo "AUTOCONF_HOST := "                             >> $config_host_mak
6890 fi
6891 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6892 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6893 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6894 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6895 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6896 echo "LIBS+=$LIBS" >> $config_host_mak
6897 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6898 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6899 echo "EXESUF=$EXESUF" >> $config_host_mak
6900 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6901 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6902 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6903 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6904 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6905 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6906 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6907 if test "$gcov" = "yes" ; then
6908   echo "CONFIG_GCOV=y" >> $config_host_mak
6909   echo "GCOV=$gcov_tool" >> $config_host_mak
6910 fi
6911
6912 if test "$docker" != "no"; then
6913     echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6914 fi
6915
6916 # use included Linux headers
6917 if test "$linux" = "yes" ; then
6918   mkdir -p linux-headers
6919   case "$cpu" in
6920   i386|x86_64|x32)
6921     linux_arch=x86
6922     ;;
6923   ppc|ppc64)
6924     linux_arch=powerpc
6925     ;;
6926   s390x)
6927     linux_arch=s390
6928     ;;
6929   aarch64)
6930     linux_arch=arm64
6931     ;;
6932   mips64)
6933     linux_arch=mips
6934     ;;
6935   *)
6936     # For most CPUs the kernel architecture name and QEMU CPU name match.
6937     linux_arch="$cpu"
6938     ;;
6939   esac
6940     # For non-KVM architectures we will not have asm headers
6941     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6942       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6943     fi
6944 fi
6945
6946 for target in $target_list; do
6947 target_dir="$target"
6948 config_target_mak=$target_dir/config-target.mak
6949 target_name=$(echo $target | cut -d '-' -f 1)
6950 target_bigendian="no"
6951
6952 case "$target_name" in
6953   armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6954   target_bigendian=yes
6955   ;;
6956 esac
6957 target_softmmu="no"
6958 target_user_only="no"
6959 target_linux_user="no"
6960 target_bsd_user="no"
6961 case "$target" in
6962   ${target_name}-softmmu)
6963     target_softmmu="yes"
6964     ;;
6965   ${target_name}-linux-user)
6966     target_user_only="yes"
6967     target_linux_user="yes"
6968     ;;
6969   ${target_name}-bsd-user)
6970     target_user_only="yes"
6971     target_bsd_user="yes"
6972     ;;
6973   *)
6974     error_exit "Target '$target' not recognised"
6975     exit 1
6976     ;;
6977 esac
6978
6979 target_compiler=""
6980 target_compiler_static=""
6981 target_compiler_cflags=""
6982
6983 mkdir -p $target_dir
6984 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6985
6986 bflt="no"
6987 mttcg="no"
6988 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6989 gdb_xml_files=""
6990
6991 TARGET_ARCH="$target_name"
6992 TARGET_BASE_ARCH=""
6993 TARGET_ABI_DIR=""
6994
6995 case "$target_name" in
6996   i386)
6997     mttcg="yes"
6998     gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6999     target_compiler=$cross_cc_i386
7000     target_compiler_cflags=$cross_cc_ccflags_i386
7001   ;;
7002   x86_64)
7003     TARGET_BASE_ARCH=i386
7004     mttcg="yes"
7005     gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
7006     target_compiler=$cross_cc_x86_64
7007   ;;
7008   alpha)
7009     mttcg="yes"
7010     target_compiler=$cross_cc_alpha
7011   ;;
7012   arm|armeb)
7013     TARGET_ARCH=arm
7014     bflt="yes"
7015     mttcg="yes"
7016     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7017     target_compiler=$cross_cc_arm
7018     eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7019   ;;
7020   aarch64|aarch64_be)
7021     TARGET_ARCH=aarch64
7022     TARGET_BASE_ARCH=arm
7023     bflt="yes"
7024     mttcg="yes"
7025     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7026     target_compiler=$cross_cc_aarch64
7027     eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7028   ;;
7029   cris)
7030     target_compiler=$cross_cc_cris
7031   ;;
7032   hppa)
7033     mttcg="yes"
7034     target_compiler=$cross_cc_hppa
7035   ;;
7036   lm32)
7037     target_compiler=$cross_cc_lm32
7038   ;;
7039   m68k)
7040     bflt="yes"
7041     gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7042     target_compiler=$cross_cc_m68k
7043   ;;
7044   microblaze|microblazeel)
7045     TARGET_ARCH=microblaze
7046     bflt="yes"
7047     echo "TARGET_ABI32=y" >> $config_target_mak
7048     target_compiler=$cross_cc_microblaze
7049   ;;
7050   mips|mipsel)
7051     TARGET_ARCH=mips
7052     target_compiler=$cross_cc_mips
7053     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7054   ;;
7055   mipsn32|mipsn32el)
7056     TARGET_ARCH=mips64
7057     TARGET_BASE_ARCH=mips
7058     target_compiler=$cross_cc_mipsn32
7059     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7060     echo "TARGET_ABI32=y" >> $config_target_mak
7061   ;;
7062   mips64|mips64el)
7063     TARGET_ARCH=mips64
7064     TARGET_BASE_ARCH=mips
7065     target_compiler=$cross_cc_mips64
7066     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7067   ;;
7068   moxie)
7069     target_compiler=$cross_cc_moxie
7070   ;;
7071   nios2)
7072     target_compiler=$cross_cc_nios2
7073   ;;
7074   or1k)
7075     target_compiler=$cross_cc_or1k
7076     TARGET_ARCH=openrisc
7077     TARGET_BASE_ARCH=openrisc
7078   ;;
7079   ppc)
7080     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7081     target_compiler=$cross_cc_powerpc
7082   ;;
7083   ppc64)
7084     TARGET_BASE_ARCH=ppc
7085     TARGET_ABI_DIR=ppc
7086     mttcg=yes
7087     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7088     target_compiler=$cross_cc_ppc64
7089   ;;
7090   ppc64le)
7091     TARGET_ARCH=ppc64
7092     TARGET_BASE_ARCH=ppc
7093     TARGET_ABI_DIR=ppc
7094     mttcg=yes
7095     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7096     target_compiler=$cross_cc_ppc64le
7097   ;;
7098   ppc64abi32)
7099     TARGET_ARCH=ppc64
7100     TARGET_BASE_ARCH=ppc
7101     TARGET_ABI_DIR=ppc
7102     echo "TARGET_ABI32=y" >> $config_target_mak
7103     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7104     target_compiler=$cross_cc_ppc64abi32
7105   ;;
7106   riscv32)
7107     TARGET_BASE_ARCH=riscv
7108     TARGET_ABI_DIR=riscv
7109     mttcg=yes
7110     target_compiler=$cross_cc_riscv32
7111   ;;
7112   riscv64)
7113     TARGET_BASE_ARCH=riscv
7114     TARGET_ABI_DIR=riscv
7115     mttcg=yes
7116     target_compiler=$cross_cc_riscv64
7117   ;;
7118   sh4|sh4eb)
7119     TARGET_ARCH=sh4
7120     bflt="yes"
7121     target_compiler=$cross_cc_sh4
7122   ;;
7123   sparc)
7124     target_compiler=$cross_cc_sparc
7125   ;;
7126   sparc64)
7127     TARGET_BASE_ARCH=sparc
7128     target_compiler=$cross_cc_sparc64
7129   ;;
7130   sparc32plus)
7131     TARGET_ARCH=sparc64
7132     TARGET_BASE_ARCH=sparc
7133     TARGET_ABI_DIR=sparc
7134     target_compiler=$cross_cc_sparc32plus
7135     echo "TARGET_ABI32=y" >> $config_target_mak
7136   ;;
7137   s390x)
7138     mttcg=yes
7139     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7140     target_compiler=$cross_cc_s390x
7141   ;;
7142   tilegx)
7143     target_compiler=$cross_cc_tilegx
7144   ;;
7145   tricore)
7146     target_compiler=$cross_cc_tricore
7147   ;;
7148   unicore32)
7149     target_compiler=$cross_cc_unicore32
7150   ;;
7151   xtensa|xtensaeb)
7152     TARGET_ARCH=xtensa
7153     mttcg="yes"
7154     target_compiler=$cross_cc_xtensa
7155   ;;
7156   *)
7157     error_exit "Unsupported target CPU"
7158   ;;
7159 esac
7160 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7161 if [ "$TARGET_BASE_ARCH" = "" ]; then
7162   TARGET_BASE_ARCH=$TARGET_ARCH
7163 fi
7164
7165 # Do we have a cross compiler for this target?
7166 if has $target_compiler; then
7167
7168     write_c_skeleton
7169
7170     if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7171         # For host systems we might get away with building without -static
7172         if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7173             target_compiler=""
7174         else
7175             enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7176             target_compiler_static="n"
7177         fi
7178     else
7179         enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7180         target_compiler_static="y"
7181     fi
7182 else
7183     target_compiler=""
7184 fi
7185
7186 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7187
7188 upper() {
7189     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7190 }
7191
7192 target_arch_name="$(upper $TARGET_ARCH)"
7193 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7194 echo "TARGET_NAME=$target_name" >> $config_target_mak
7195 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7196 if [ "$TARGET_ABI_DIR" = "" ]; then
7197   TARGET_ABI_DIR=$TARGET_ARCH
7198 fi
7199 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7200 if [ "$HOST_VARIANT_DIR" != "" ]; then
7201     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7202 fi
7203
7204 if supported_xen_target $target; then
7205     echo "CONFIG_XEN=y" >> $config_target_mak
7206     if test "$xen_pci_passthrough" = yes; then
7207         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7208     fi
7209 fi
7210 if supported_kvm_target $target; then
7211     echo "CONFIG_KVM=y" >> $config_target_mak
7212     if test "$vhost_net" = "yes" ; then
7213         echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7214         if test "$vhost_user" = "yes" ; then
7215             echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7216         fi
7217     fi
7218 fi
7219 if supported_hax_target $target; then
7220     echo "CONFIG_HAX=y" >> $config_target_mak
7221 fi
7222 if supported_hvf_target $target; then
7223     echo "CONFIG_HVF=y" >> $config_target_mak
7224 fi
7225 if supported_whpx_target $target; then
7226     echo "CONFIG_WHPX=y" >> $config_target_mak
7227 fi
7228 if test "$target_bigendian" = "yes" ; then
7229   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7230 fi
7231 if test "$target_softmmu" = "yes" ; then
7232   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7233   if test "$mttcg" = "yes" ; then
7234     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7235   fi
7236 fi
7237 if test "$target_user_only" = "yes" ; then
7238   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7239   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7240 fi
7241 if test "$target_linux_user" = "yes" ; then
7242   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7243 fi
7244 list=""
7245 if test ! -z "$gdb_xml_files" ; then
7246   for x in $gdb_xml_files; do
7247     list="$list $source_path/gdb-xml/$x"
7248   done
7249   echo "TARGET_XML_FILES=$list" >> $config_target_mak
7250 fi
7251
7252 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7253   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7254 fi
7255 if test "$target_bsd_user" = "yes" ; then
7256   echo "CONFIG_BSD_USER=y" >> $config_target_mak
7257 fi
7258
7259 if test -n "$target_compiler"; then
7260   echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7261
7262   if test -n "$target_compiler_static"; then
7263       echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7264   fi
7265
7266   if test -n "$target_compiler_cflags"; then
7267       echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7268   fi
7269 fi
7270
7271
7272 # generate QEMU_CFLAGS/LDFLAGS for targets
7273
7274 cflags=""
7275 ldflags=""
7276
7277 disas_config() {
7278   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7279   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7280 }
7281
7282 for i in $ARCH $TARGET_BASE_ARCH ; do
7283   case "$i" in
7284   alpha)
7285     disas_config "ALPHA"
7286   ;;
7287   aarch64)
7288     if test -n "${cxx}"; then
7289       disas_config "ARM_A64"
7290     fi
7291   ;;
7292   arm)
7293     disas_config "ARM"
7294     if test -n "${cxx}"; then
7295       disas_config "ARM_A64"
7296     fi
7297   ;;
7298   cris)
7299     disas_config "CRIS"
7300   ;;
7301   hppa)
7302     disas_config "HPPA"
7303   ;;
7304   i386|x86_64|x32)
7305     disas_config "I386"
7306   ;;
7307   lm32)
7308     disas_config "LM32"
7309   ;;
7310   m68k)
7311     disas_config "M68K"
7312   ;;
7313   microblaze*)
7314     disas_config "MICROBLAZE"
7315   ;;
7316   mips*)
7317     disas_config "MIPS"
7318   ;;
7319   moxie*)
7320     disas_config "MOXIE"
7321   ;;
7322   nios2)
7323     disas_config "NIOS2"
7324   ;;
7325   or1k)
7326     disas_config "OPENRISC"
7327   ;;
7328   ppc*)
7329     disas_config "PPC"
7330   ;;
7331   riscv)
7332     disas_config "RISCV"
7333   ;;
7334   s390*)
7335     disas_config "S390"
7336   ;;
7337   sh4)
7338     disas_config "SH4"
7339   ;;
7340   sparc*)
7341     disas_config "SPARC"
7342   ;;
7343   xtensa*)
7344     disas_config "XTENSA"
7345   ;;
7346   esac
7347 done
7348 if test "$tcg_interpreter" = "yes" ; then
7349   disas_config "TCI"
7350 fi
7351
7352 case "$ARCH" in
7353 alpha)
7354   # Ensure there's only a single GP
7355   cflags="-msmall-data $cflags"
7356 ;;
7357 esac
7358
7359 if test "$gprof" = "yes" ; then
7360   echo "TARGET_GPROF=yes" >> $config_target_mak
7361   if test "$target_linux_user" = "yes" ; then
7362     cflags="-p $cflags"
7363     ldflags="-p $ldflags"
7364   fi
7365   if test "$target_softmmu" = "yes" ; then
7366     ldflags="-p $ldflags"
7367     echo "GPROF_CFLAGS=-p" >> $config_target_mak
7368   fi
7369 fi
7370
7371 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7372   ldflags="$ldflags $textseg_ldflags"
7373 fi
7374
7375 # Newer kernels on s390 check for an S390_PGSTE program header and
7376 # enable the pgste page table extensions in that case. This makes
7377 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7378 # header if
7379 #  - we build on s390x
7380 #  - we build the system emulation for s390x (qemu-system-s390x)
7381 #  - KVM is enabled
7382 #  - the linker supports --s390-pgste
7383 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7384     if ld_has --s390-pgste ; then
7385         ldflags="-Wl,--s390-pgste $ldflags"
7386     fi
7387 fi
7388
7389 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7390 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7391
7392 done # for target in $targets
7393
7394 if test -n "$enabled_cross_compilers"; then
7395     echo
7396     echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7397 fi
7398
7399 if [ "$fdt" = "git" ]; then
7400   echo "config-host.h: subdir-dtc" >> $config_host_mak
7401 fi
7402 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7403   echo "config-host.h: subdir-capstone" >> $config_host_mak
7404 fi
7405 if test -n "$LIBCAPSTONE"; then
7406   echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7407 fi
7408
7409 if test "$numa" = "yes"; then
7410   echo "CONFIG_NUMA=y" >> $config_host_mak
7411 fi
7412
7413 if test "$ccache_cpp2" = "yes"; then
7414   echo "export CCACHE_CPP2=y" >> $config_host_mak
7415 fi
7416
7417 # build tree in object directory in case the source is not in the current directory
7418 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7419 DIRS="$DIRS tests/fp"
7420 DIRS="$DIRS docs docs/interop fsdev scsi"
7421 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7422 DIRS="$DIRS roms/seabios roms/vgabios"
7423 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7424 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7425 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7426 FILES="$FILES tests/fp/Makefile"
7427 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7428 FILES="$FILES pc-bios/spapr-rtas/Makefile"
7429 FILES="$FILES pc-bios/s390-ccw/Makefile"
7430 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7431 FILES="$FILES pc-bios/qemu-icon.bmp"
7432 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7433 for bios_file in \
7434     $source_path/pc-bios/*.bin \
7435     $source_path/pc-bios/*.lid \
7436     $source_path/pc-bios/*.aml \
7437     $source_path/pc-bios/*.rom \
7438     $source_path/pc-bios/*.dtb \
7439     $source_path/pc-bios/*.img \
7440     $source_path/pc-bios/openbios-* \
7441     $source_path/pc-bios/u-boot.* \
7442     $source_path/pc-bios/palcode-*
7443 do
7444     FILES="$FILES pc-bios/$(basename $bios_file)"
7445 done
7446 for test_file in $(find $source_path/tests/acpi-test-data -type f)
7447 do
7448     FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7449 done
7450 for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7451 do
7452     FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7453 done
7454 mkdir -p $DIRS
7455 for f in $FILES ; do
7456     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7457         symlink "$source_path/$f" "$f"
7458     fi
7459 done
7460
7461 # temporary config to build submodules
7462 for rom in seabios vgabios ; do
7463     config_mak=roms/$rom/config.mak
7464     echo "# Automatically generated by configure - do not modify" > $config_mak
7465     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7466     echo "AS=$as" >> $config_mak
7467     echo "CCAS=$ccas" >> $config_mak
7468     echo "CC=$cc" >> $config_mak
7469     echo "BCC=bcc" >> $config_mak
7470     echo "CPP=$cpp" >> $config_mak
7471     echo "OBJCOPY=objcopy" >> $config_mak
7472     echo "IASL=$iasl" >> $config_mak
7473     echo "LD=$ld" >> $config_mak
7474     echo "RANLIB=$ranlib" >> $config_mak
7475 done
7476
7477 # set up tests data directory
7478 for tests_subdir in acceptance data; do
7479     if [ ! -e tests/$tests_subdir ]; then
7480         symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7481     fi
7482 done
7483
7484 # set up qemu-iotests in this build directory
7485 iotests_common_env="tests/qemu-iotests/common.env"
7486 iotests_check="tests/qemu-iotests/check"
7487
7488 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7489 echo >> "$iotests_common_env"
7490 echo "export PYTHON='$python'" >> "$iotests_common_env"
7491
7492 if [ ! -e "$iotests_check" ]; then
7493     symlink "$source_path/$iotests_check" "$iotests_check"
7494 fi
7495
7496 # Save the configure command line for later reuse.
7497 cat <<EOD >config.status
7498 #!/bin/sh
7499 # Generated by configure.
7500 # Run this file to recreate the current configuration.
7501 # Compiler output produced by configure, useful for debugging
7502 # configure, is in config.log if it exists.
7503 EOD
7504
7505 preserve_env() {
7506     envname=$1
7507
7508     eval envval=\$$envname
7509
7510     if test -n "$envval"
7511     then
7512         echo "$envname='$envval'" >> config.status
7513         echo "export $envname" >> config.status
7514     else
7515         echo "unset $envname" >> config.status
7516     fi
7517 }
7518
7519 # Preserve various env variables that influence what
7520 # features/build target configure will detect
7521 preserve_env AR
7522 preserve_env AS
7523 preserve_env CC
7524 preserve_env CPP
7525 preserve_env CXX
7526 preserve_env INSTALL
7527 preserve_env LD
7528 preserve_env LD_LIBRARY_PATH
7529 preserve_env LIBTOOL
7530 preserve_env MAKE
7531 preserve_env NM
7532 preserve_env OBJCOPY
7533 preserve_env PATH
7534 preserve_env PKG_CONFIG
7535 preserve_env PKG_CONFIG_LIBDIR
7536 preserve_env PKG_CONFIG_PATH
7537 preserve_env PYTHON
7538 preserve_env SDL_CONFIG
7539 preserve_env SDL2_CONFIG
7540 preserve_env SMBD
7541 preserve_env STRIP
7542 preserve_env WINDRES
7543
7544 printf "exec" >>config.status
7545 printf " '%s'" "$0" "$@" >>config.status
7546 echo ' "$@"' >>config.status
7547 chmod +x config.status
7548
7549 rm -r "$TMPDIR1"
This page took 0.418597 seconds and 4 git commands to generate.