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