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