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