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