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