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