spapr/xive: Modify kvm_cpu_is_enabled() interface
[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 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17 if test "$PWD" = "$source_path"
18 then
19     echo "Using './build' as the directory for build output"
20
21     MARKER=build/auto-created-by-configure
22
23     if test -e build
24     then
25         if test -f $MARKER
26         then
27            rm -rf build
28         else
29             echo "ERROR: ./build dir already exists and was not previously created by configure"
30             exit 1
31         fi
32     fi
33
34     mkdir build
35     touch $MARKER
36
37     cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
40
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
44
45 .NOTPARALLEL: %
46 %: force
47         @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48         @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49         @if test "$(MAKECMDGOALS)" = "distclean" && \
50             test -e build/auto-created-by-configure ; \
51         then \
52             rm -rf build GNUmakefile ; \
53         fi
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
57
58 EOF
59     cd build
60     exec $source_path/configure "$@"
61 fi
62
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72     echo "ERROR: failed to create temporary directory"
73     exit 1
74 fi
75
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
82
83 rm -f config.log
84
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
91
92 print_error() {
93     (echo
94     echo "ERROR: $1"
95     while test -n "$2"; do
96         echo "       $2"
97         shift
98     done
99     echo) >&2
100 }
101
102 error_exit() {
103     print_error "$@"
104     exit 1
105 }
106
107 do_compiler() {
108     # Run the compiler, capturing its output to the log. First argument
109     # is compiler binary to execute.
110     local compiler="$1"
111     shift
112     if test -n "$BASH_VERSION"; then eval '
113         echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116     '; fi
117     echo $compiler "$@" >> config.log
118     $compiler "$@" >> config.log 2>&1 || return $?
119     # Test passed. If this is an --enable-werror build, rerun
120     # the test with -Werror and bail out if it fails. This
121     # makes warning-generating-errors in configure test code
122     # obvious to developers.
123     if test "$werror" != "yes"; then
124         return 0
125     fi
126     # Don't bother rerunning the compile if we were already using -Werror
127     case "$*" in
128         *-Werror*)
129            return 0
130         ;;
131     esac
132     echo $compiler -Werror "$@" >> config.log
133     $compiler -Werror "$@" >> config.log 2>&1 && return $?
134     error_exit "configure test passed without -Werror but failed with -Werror." \
135         "This is probably a bug in the configure script. The failing command" \
136         "will be at the bottom of config.log." \
137         "You can run configure with --disable-werror to bypass this check."
138 }
139
140 do_cc() {
141     do_compiler "$cc" "$@"
142 }
143
144 do_cxx() {
145     do_compiler "$cxx" "$@"
146 }
147
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150     eval $1=\${$1:+\"\$$1 \"}\$2
151 }
152
153 update_cxxflags() {
154     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155     # options which some versions of GCC's C++ compiler complain about
156     # because they only make sense for C programs.
157     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158     CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159     for arg in $QEMU_CFLAGS; do
160         case $arg in
161             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
163                 ;;
164             *)
165                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
166                 ;;
167         esac
168     done
169 }
170
171 compile_object() {
172   local_cflags="$1"
173   do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
174 }
175
176 compile_prog() {
177   local_cflags="$1"
178   local_ldflags="$2"
179   do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
180 }
181
182 # symbolically link $1 to $2.  Portable version of "ln -sf".
183 symlink() {
184   rm -rf "$2"
185   mkdir -p "$(dirname "$2")"
186   ln -s "$1" "$2"
187 }
188
189 # check whether a command is available to this shell (may be either an
190 # executable or a builtin)
191 has() {
192     type "$1" >/dev/null 2>&1
193 }
194
195 # search for an executable in PATH
196 path_of() {
197     local_command="$1"
198     local_ifs="$IFS"
199     local_dir=""
200
201     # pathname has a dir component?
202     if [ "${local_command#*/}" != "$local_command" ]; then
203         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
204             echo "$local_command"
205             return 0
206         fi
207     fi
208     if [ -z "$local_command" ]; then
209         return 1
210     fi
211
212     IFS=:
213     for local_dir in $PATH; do
214         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
215             echo "$local_dir/$local_command"
216             IFS="${local_ifs:-$(printf ' \t\n')}"
217             return 0
218         fi
219     done
220     # not found
221     IFS="${local_ifs:-$(printf ' \t\n')}"
222     return 1
223 }
224
225 version_ge () {
226     local_ver1=`echo $1 | tr . ' '`
227     local_ver2=`echo $2 | tr . ' '`
228     while true; do
229         set x $local_ver1
230         local_first=${2-0}
231         # 'shift 2' if $2 is set, or 'shift' if $2 is not set
232         shift ${2:+2}
233         local_ver1=$*
234         set x $local_ver2
235         # the second argument finished, the first must be greater or equal
236         test $# = 1 && return 0
237         test $local_first -lt $2 && return 1
238         test $local_first -gt $2 && return 0
239         shift ${2:+2}
240         local_ver2=$*
241     done
242 }
243
244 have_backend () {
245     echo "$trace_backends" | grep "$1" >/dev/null
246 }
247
248 glob() {
249     eval test -z '"${1#'"$2"'}"'
250 }
251
252 supported_hax_target() {
253     test "$hax" = "yes" || return 1
254     glob "$1" "*-softmmu" || return 1
255     case "${1%-softmmu}" in
256         i386|x86_64)
257             return 0
258         ;;
259     esac
260     return 1
261 }
262
263 supported_kvm_target() {
264     test "$kvm" = "yes" || return 1
265     glob "$1" "*-softmmu" || return 1
266     case "${1%-softmmu}:$cpu" in
267         arm:arm | aarch64:aarch64 | \
268         i386:i386 | i386:x86_64 | i386:x32 | \
269         x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
270         mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
271         ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
272         s390x:s390x)
273             return 0
274         ;;
275     esac
276     return 1
277 }
278
279 supported_xen_target() {
280     test "$xen" = "yes" || return 1
281     glob "$1" "*-softmmu" || return 1
282     # Only i386 and x86_64 provide the xenpv machine.
283     case "${1%-softmmu}" in
284         i386|x86_64)
285             return 0
286         ;;
287     esac
288     return 1
289 }
290
291 supported_hvf_target() {
292     test "$hvf" = "yes" || return 1
293     glob "$1" "*-softmmu" || return 1
294     case "${1%-softmmu}" in
295         x86_64)
296             return 0
297         ;;
298     esac
299     return 1
300 }
301
302 supported_whpx_target() {
303     test "$whpx" = "yes" || return 1
304     glob "$1" "*-softmmu" || return 1
305     case "${1%-softmmu}" in
306         i386|x86_64)
307             return 0
308         ;;
309     esac
310     return 1
311 }
312
313 supported_target() {
314     case "$1" in
315         *-softmmu)
316             ;;
317         *-linux-user)
318             if test "$linux" != "yes"; then
319                 print_error "Target '$target' is only available on a Linux host"
320                 return 1
321             fi
322             ;;
323         *-bsd-user)
324             if test "$bsd" != "yes"; then
325                 print_error "Target '$target' is only available on a BSD host"
326                 return 1
327             fi
328             ;;
329         *)
330             print_error "Invalid target name '$target'"
331             return 1
332             ;;
333     esac
334     test "$tcg" = "yes" && return 0
335     supported_kvm_target "$1" && return 0
336     supported_xen_target "$1" && return 0
337     supported_hax_target "$1" && return 0
338     supported_hvf_target "$1" && return 0
339     supported_whpx_target "$1" && return 0
340     print_error "TCG disabled, but hardware accelerator not available for '$target'"
341     return 1
342 }
343
344
345 ld_has() {
346     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
347 }
348
349 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
350 then
351   error_exit "main directory cannot contain spaces nor colons"
352 fi
353
354 # default parameters
355 cpu=""
356 iasl="iasl"
357 interp_prefix="/usr/gnemul/qemu-%M"
358 static="no"
359 cross_prefix=""
360 audio_drv_list=""
361 block_drv_rw_whitelist=""
362 block_drv_ro_whitelist=""
363 host_cc="cc"
364 libs_tools=""
365 audio_win_int=""
366 libs_qga=""
367 debug_info="yes"
368 stack_protector=""
369 safe_stack=""
370 use_containers="yes"
371 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
372
373 if test -e "$source_path/.git"
374 then
375     git_update=yes
376     git_submodules="ui/keycodemapdb"
377     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
378     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
379 else
380     git_update=no
381     git_submodules=""
382
383     if ! test -f "$source_path/ui/keycodemapdb/README"
384     then
385         echo
386         echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
387         echo
388         echo "This is not a GIT checkout but module content appears to"
389         echo "be missing. Do not use 'git archive' or GitHub download links"
390         echo "to acquire QEMU source archives. Non-GIT builds are only"
391         echo "supported with source archives linked from:"
392         echo
393         echo "  https://www.qemu.org/download/#source"
394         echo
395         echo "Developers working with GIT can use scripts/archive-source.sh"
396         echo "if they need to create valid source archives."
397         echo
398         exit 1
399     fi
400 fi
401 git="git"
402
403 # Don't accept a target_list environment variable.
404 unset target_list
405 unset target_list_exclude
406
407 # Default value for a variable defining feature "foo".
408 #  * foo="no"  feature will only be used if --enable-foo arg is given
409 #  * foo=""    feature will be searched for, and if found, will be used
410 #              unless --disable-foo is given
411 #  * foo="yes" this value will only be set by --enable-foo flag.
412 #              feature will searched for,
413 #              if not found, configure exits with error
414 #
415 # Always add --enable-foo and --disable-foo command line args.
416 # Distributions want to ensure that several features are compiled in, and it
417 # is impossible without a --enable-foo that exits if a feature is not found.
418
419 brlapi=""
420 curl=""
421 curses=""
422 docs=""
423 fdt=""
424 netmap="no"
425 sdl="auto"
426 sdl_image="auto"
427 virtfs=""
428 mpath=""
429 vnc="enabled"
430 sparse="no"
431 vde=""
432 vnc_sasl="auto"
433 vnc_jpeg="auto"
434 vnc_png="auto"
435 xkbcommon="auto"
436 xen=""
437 xen_ctrl_version=""
438 xen_pci_passthrough=""
439 linux_aio=""
440 linux_io_uring=""
441 cap_ng=""
442 attr=""
443 libattr=""
444 xfs=""
445 tcg="yes"
446 membarrier=""
447 vhost_net=""
448 vhost_crypto=""
449 vhost_scsi=""
450 vhost_vsock=""
451 vhost_user=""
452 vhost_user_fs=""
453 kvm="no"
454 hax="no"
455 hvf="no"
456 whpx="no"
457 rdma=""
458 pvrdma=""
459 gprof="no"
460 debug_tcg="no"
461 debug="no"
462 sanitizers="no"
463 tsan="no"
464 fortify_source=""
465 strip_opt="yes"
466 tcg_interpreter="no"
467 bigendian="no"
468 mingw32="no"
469 gcov="no"
470 EXESUF=""
471 HOST_DSOSUF=".so"
472 LDFLAGS_SHARED="-shared"
473 modules="no"
474 module_upgrades="no"
475 prefix="/usr/local"
476 qemu_suffix="qemu"
477 slirp=""
478 oss_lib=""
479 bsd="no"
480 linux="no"
481 solaris="no"
482 profiler="no"
483 cocoa="no"
484 softmmu="yes"
485 linux_user="no"
486 bsd_user="no"
487 blobs="yes"
488 edk2_blobs="no"
489 pkgversion=""
490 pie=""
491 qom_cast_debug="yes"
492 trace_backends="log"
493 trace_file="trace"
494 spice=""
495 rbd=""
496 smartcard=""
497 u2f="auto"
498 libusb=""
499 usb_redir=""
500 opengl=""
501 opengl_dmabuf="no"
502 cpuid_h="no"
503 avx2_opt=""
504 capstone=""
505 lzo=""
506 snappy=""
507 bzip2=""
508 lzfse=""
509 zstd=""
510 guest_agent=""
511 guest_agent_with_vss="no"
512 guest_agent_ntddscsi="no"
513 guest_agent_msi=""
514 vss_win32_sdk=""
515 win_sdk="no"
516 want_tools=""
517 libiscsi=""
518 libnfs=""
519 coroutine=""
520 coroutine_pool=""
521 debug_stack_usage="no"
522 crypto_afalg="no"
523 seccomp=""
524 glusterfs=""
525 glusterfs_xlator_opt="no"
526 glusterfs_discard="no"
527 glusterfs_fallocate="no"
528 glusterfs_zerofill="no"
529 glusterfs_ftruncate_has_stat="no"
530 glusterfs_iocb_has_stat="no"
531 gtk=""
532 gtk_gl="no"
533 tls_priority="NORMAL"
534 gnutls=""
535 nettle=""
536 nettle_xts="no"
537 gcrypt=""
538 gcrypt_hmac="no"
539 gcrypt_xts="no"
540 qemu_private_xts="yes"
541 auth_pam=""
542 vte=""
543 virglrenderer=""
544 tpm=""
545 libssh=""
546 live_block_migration="yes"
547 numa=""
548 tcmalloc="no"
549 jemalloc="no"
550 replication="yes"
551 bochs="yes"
552 cloop="yes"
553 dmg="yes"
554 qcow1="yes"
555 vdi="yes"
556 vvfat="yes"
557 qed="yes"
558 parallels="yes"
559 sheepdog="yes"
560 libxml2=""
561 debug_mutex="no"
562 libpmem=""
563 default_devices="yes"
564 plugins="no"
565 fuzzing="no"
566 rng_none="no"
567 secret_keyring=""
568 libdaxctl=""
569 meson=""
570 ninja=""
571 skip_meson=no
572 gettext=""
573
574 bogus_os="no"
575 malloc_trim=""
576
577 # parse CC options first
578 for opt do
579   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
580   case "$opt" in
581   --cross-prefix=*) cross_prefix="$optarg"
582   ;;
583   --cc=*) CC="$optarg"
584   ;;
585   --cxx=*) CXX="$optarg"
586   ;;
587   --cpu=*) cpu="$optarg"
588   ;;
589   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
590                     QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
591   ;;
592   --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
593   ;;
594   --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
595                      EXTRA_LDFLAGS="$optarg"
596   ;;
597   --enable-debug-info) debug_info="yes"
598   ;;
599   --disable-debug-info) debug_info="no"
600   ;;
601   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
602   ;;
603   --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
604                       eval "cross_cc_cflags_${cc_arch}=\$optarg"
605                       cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
606   ;;
607   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
608                 cc_archs="$cc_archs $cc_arch"
609                 eval "cross_cc_${cc_arch}=\$optarg"
610                 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
611   ;;
612   esac
613 done
614 # OS specific
615 # Using uname is really, really broken.  Once we have the right set of checks
616 # we can eliminate its usage altogether.
617
618 # Preferred compiler:
619 #  ${CC} (if set)
620 #  ${cross_prefix}gcc (if cross-prefix specified)
621 #  system compiler
622 if test -z "${CC}${cross_prefix}"; then
623   cc="$host_cc"
624 else
625   cc="${CC-${cross_prefix}gcc}"
626 fi
627
628 if test -z "${CXX}${cross_prefix}"; then
629   cxx="c++"
630 else
631   cxx="${CXX-${cross_prefix}g++}"
632 fi
633
634 ar="${AR-${cross_prefix}ar}"
635 as="${AS-${cross_prefix}as}"
636 ccas="${CCAS-$cc}"
637 cpp="${CPP-$cc -E}"
638 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
639 ld="${LD-${cross_prefix}ld}"
640 ranlib="${RANLIB-${cross_prefix}ranlib}"
641 nm="${NM-${cross_prefix}nm}"
642 strip="${STRIP-${cross_prefix}strip}"
643 windres="${WINDRES-${cross_prefix}windres}"
644 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
645 query_pkg_config() {
646     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
647 }
648 pkg_config=query_pkg_config
649 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
650
651 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
652 ARFLAGS="${ARFLAGS-rv}"
653
654 # default flags for all hosts
655 # We use -fwrapv to tell the compiler that we require a C dialect where
656 # left shift of signed integers is well defined and has the expected
657 # 2s-complement style results. (Both clang and gcc agree that it
658 # provides these semantics.)
659 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
660 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
661 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
662 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
663 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
664 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
665 CFLAGS="-std=gnu99 -Wall"
666
667
668 # running configure in the source tree?
669 # we know that's the case if configure is there.
670 if test -f "./configure"; then
671     pwd_is_source_path="y"
672 else
673     pwd_is_source_path="n"
674 fi
675
676 check_define() {
677 cat > $TMPC <<EOF
678 #if !defined($1)
679 #error $1 not defined
680 #endif
681 int main(void) { return 0; }
682 EOF
683   compile_object
684 }
685
686 check_include() {
687 cat > $TMPC <<EOF
688 #include <$1>
689 int main(void) { return 0; }
690 EOF
691   compile_object
692 }
693
694 write_c_skeleton() {
695     cat > $TMPC <<EOF
696 int main(void) { return 0; }
697 EOF
698 }
699
700 write_c_fuzzer_skeleton() {
701     cat > $TMPC <<EOF
702 #include <stdint.h>
703 #include <sys/types.h>
704 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
705 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
706 EOF
707 }
708
709 if check_define __linux__ ; then
710   targetos="Linux"
711 elif check_define _WIN32 ; then
712   targetos='MINGW32'
713 elif check_define __OpenBSD__ ; then
714   targetos='OpenBSD'
715 elif check_define __sun__ ; then
716   targetos='SunOS'
717 elif check_define __HAIKU__ ; then
718   targetos='Haiku'
719 elif check_define __FreeBSD__ ; then
720   targetos='FreeBSD'
721 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
722   targetos='GNU/kFreeBSD'
723 elif check_define __DragonFly__ ; then
724   targetos='DragonFly'
725 elif check_define __NetBSD__; then
726   targetos='NetBSD'
727 elif check_define __APPLE__; then
728   targetos='Darwin'
729 else
730   # This is a fatal error, but don't report it yet, because we
731   # might be going to just print the --help text, or it might
732   # be the result of a missing compiler.
733   targetos='bogus'
734   bogus_os='yes'
735 fi
736
737 # Some host OSes need non-standard checks for which CPU to use.
738 # Note that these checks are broken for cross-compilation: if you're
739 # cross-compiling to one of these OSes then you'll need to specify
740 # the correct CPU with the --cpu option.
741 case $targetos in
742 Darwin)
743   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
744   # run 64-bit userspace code.
745   # If the user didn't specify a CPU explicitly and the kernel says this is
746   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
747   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
748     cpu="x86_64"
749   fi
750   ;;
751 SunOS)
752   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
753   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
754     cpu="x86_64"
755   fi
756 esac
757
758 if test ! -z "$cpu" ; then
759   # command line argument
760   :
761 elif check_define __i386__ ; then
762   cpu="i386"
763 elif check_define __x86_64__ ; then
764   if check_define __ILP32__ ; then
765     cpu="x32"
766   else
767     cpu="x86_64"
768   fi
769 elif check_define __sparc__ ; then
770   if check_define __arch64__ ; then
771     cpu="sparc64"
772   else
773     cpu="sparc"
774   fi
775 elif check_define _ARCH_PPC ; then
776   if check_define _ARCH_PPC64 ; then
777     if check_define _LITTLE_ENDIAN ; then
778       cpu="ppc64le"
779     else
780       cpu="ppc64"
781     fi
782   else
783     cpu="ppc"
784   fi
785 elif check_define __mips__ ; then
786   cpu="mips"
787 elif check_define __s390__ ; then
788   if check_define __s390x__ ; then
789     cpu="s390x"
790   else
791     cpu="s390"
792   fi
793 elif check_define __riscv ; then
794   if check_define _LP64 ; then
795     cpu="riscv64"
796   else
797     cpu="riscv32"
798   fi
799 elif check_define __arm__ ; then
800   cpu="arm"
801 elif check_define __aarch64__ ; then
802   cpu="aarch64"
803 else
804   cpu=$(uname -m)
805 fi
806
807 ARCH=
808 # Normalise host CPU name and set ARCH.
809 # Note that this case should only have supported host CPUs, not guests.
810 case "$cpu" in
811   ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
812   ;;
813   ppc64le)
814     ARCH="ppc64"
815   ;;
816   i386|i486|i586|i686|i86pc|BePC)
817     cpu="i386"
818   ;;
819   x86_64|amd64)
820     cpu="x86_64"
821   ;;
822   armv*b|armv*l|arm)
823     cpu="arm"
824   ;;
825   aarch64)
826     cpu="aarch64"
827   ;;
828   mips*)
829     cpu="mips"
830   ;;
831   sparc|sun4[cdmuv])
832     cpu="sparc"
833   ;;
834   *)
835     # This will result in either an error or falling back to TCI later
836     ARCH=unknown
837   ;;
838 esac
839 if test -z "$ARCH"; then
840   ARCH="$cpu"
841 fi
842
843 # OS specific
844
845 # host *BSD for user mode
846 HOST_VARIANT_DIR=""
847
848 case $targetos in
849 MINGW32*)
850   mingw32="yes"
851   hax="yes"
852   whpx=""
853   vhost_user="no"
854   audio_possible_drivers="dsound sdl"
855   if check_include dsound.h; then
856     audio_drv_list="dsound"
857   else
858     audio_drv_list=""
859   fi
860   supported_os="yes"
861   pie="no"
862 ;;
863 GNU/kFreeBSD)
864   bsd="yes"
865   audio_drv_list="oss try-sdl"
866   audio_possible_drivers="oss sdl pa"
867 ;;
868 FreeBSD)
869   bsd="yes"
870   make="${MAKE-gmake}"
871   audio_drv_list="oss try-sdl"
872   audio_possible_drivers="oss sdl pa"
873   # needed for kinfo_getvmmap(3) in libutil.h
874   LIBS="-lutil $LIBS"
875   netmap=""  # enable netmap autodetect
876   HOST_VARIANT_DIR="freebsd"
877 ;;
878 DragonFly)
879   bsd="yes"
880   make="${MAKE-gmake}"
881   audio_drv_list="oss try-sdl"
882   audio_possible_drivers="oss sdl pa"
883   HOST_VARIANT_DIR="dragonfly"
884 ;;
885 NetBSD)
886   bsd="yes"
887   hax="yes"
888   make="${MAKE-gmake}"
889   audio_drv_list="oss try-sdl"
890   audio_possible_drivers="oss sdl"
891   oss_lib="-lossaudio"
892   HOST_VARIANT_DIR="netbsd"
893 ;;
894 OpenBSD)
895   bsd="yes"
896   make="${MAKE-gmake}"
897   audio_drv_list="try-sdl"
898   audio_possible_drivers="sdl"
899   HOST_VARIANT_DIR="openbsd"
900 ;;
901 Darwin)
902   bsd="yes"
903   darwin="yes"
904   hax="yes"
905   hvf="yes"
906   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
907   if [ "$cpu" = "x86_64" ] ; then
908     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
909     QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
910   fi
911   cocoa="yes"
912   audio_drv_list="coreaudio try-sdl"
913   audio_possible_drivers="coreaudio sdl"
914   QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
915   # Disable attempts to use ObjectiveC features in os/object.h since they
916   # won't work when we're compiling with gcc as a C compiler.
917   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
918   HOST_VARIANT_DIR="darwin"
919 ;;
920 SunOS)
921   solaris="yes"
922   make="${MAKE-gmake}"
923   install="${INSTALL-ginstall}"
924   smbd="${SMBD-/usr/sfw/sbin/smbd}"
925   if test -f /usr/include/sys/soundcard.h ; then
926     audio_drv_list="oss try-sdl"
927   fi
928   audio_possible_drivers="oss sdl"
929 # needed for CMSG_ macros in sys/socket.h
930   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
931 # needed for TIOCWIN* defines in termios.h
932   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
933   solarisnetlibs="-lsocket -lnsl -lresolv"
934   LIBS="$solarisnetlibs $LIBS"
935 ;;
936 Haiku)
937   haiku="yes"
938   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
939   LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
940 ;;
941 Linux)
942   audio_drv_list="try-pa oss"
943   audio_possible_drivers="oss alsa sdl pa"
944   linux="yes"
945   linux_user="yes"
946   kvm="yes"
947   QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
948   libudev="yes"
949 ;;
950 esac
951
952 if [ "$bsd" = "yes" ] ; then
953   if [ "$darwin" != "yes" ] ; then
954     bsd_user="yes"
955   fi
956 fi
957
958 : ${make=${MAKE-make}}
959 : ${install=${INSTALL-install}}
960 # We prefer python 3.x. A bare 'python' is traditionally
961 # python 2.x, but some distros have it as python 3.x, so
962 # we check that too
963 python=
964 explicit_python=no
965 for binary in "${PYTHON-python3}" python
966 do
967     if has "$binary"
968     then
969         python=$(command -v "$binary")
970         break
971     fi
972 done
973
974 sphinx_build=
975 for binary in sphinx-build-3 sphinx-build
976 do
977     if has "$binary"
978     then
979         sphinx_build=$(command -v "$binary")
980         break
981     fi
982 done
983
984 # Check for ancillary tools used in testing
985 genisoimage=
986 for binary in genisoimage mkisofs
987 do
988     if has $binary
989     then
990         genisoimage=$(command -v "$binary")
991         break
992     fi
993 done
994
995 : ${smbd=${SMBD-/usr/sbin/smbd}}
996
997 # Default objcc to clang if available, otherwise use CC
998 if has clang; then
999   objcc=clang
1000 else
1001   objcc="$cc"
1002 fi
1003
1004 if test "$mingw32" = "yes" ; then
1005   EXESUF=".exe"
1006   HOST_DSOSUF=".dll"
1007   # MinGW needs -mthreads for TLS and macro _MT.
1008   CFLAGS="-mthreads $CFLAGS"
1009   LIBS="-lwinmm -lws2_32 $LIBS"
1010   write_c_skeleton;
1011   if compile_prog "" "-liberty" ; then
1012     LIBS="-liberty $LIBS"
1013   fi
1014   prefix="c:/Program Files/QEMU"
1015   qemu_suffix=""
1016   libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1017 fi
1018
1019 werror=""
1020
1021 for opt do
1022   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1023   case "$opt" in
1024   --help|-h) show_help=yes
1025   ;;
1026   --version|-V) exec cat $source_path/VERSION
1027   ;;
1028   --prefix=*) prefix="$optarg"
1029   ;;
1030   --interp-prefix=*) interp_prefix="$optarg"
1031   ;;
1032   --cross-prefix=*)
1033   ;;
1034   --cc=*)
1035   ;;
1036   --host-cc=*) host_cc="$optarg"
1037   ;;
1038   --cxx=*)
1039   ;;
1040   --iasl=*) iasl="$optarg"
1041   ;;
1042   --objcc=*) objcc="$optarg"
1043   ;;
1044   --make=*) make="$optarg"
1045   ;;
1046   --install=*) install="$optarg"
1047   ;;
1048   --python=*) python="$optarg" ; explicit_python=yes
1049   ;;
1050   --sphinx-build=*) sphinx_build="$optarg"
1051   ;;
1052   --skip-meson) skip_meson=yes
1053   ;;
1054   --meson=*) meson="$optarg"
1055   ;;
1056   --ninja=*) ninja="$optarg"
1057   ;;
1058   --smbd=*) smbd="$optarg"
1059   ;;
1060   --extra-cflags=*)
1061   ;;
1062   --extra-cxxflags=*)
1063   ;;
1064   --extra-ldflags=*)
1065   ;;
1066   --enable-debug-info)
1067   ;;
1068   --disable-debug-info)
1069   ;;
1070   --cross-cc-*)
1071   ;;
1072   --enable-modules)
1073       modules="yes"
1074   ;;
1075   --disable-modules)
1076       modules="no"
1077   ;;
1078   --disable-module-upgrades) module_upgrades="no"
1079   ;;
1080   --enable-module-upgrades) module_upgrades="yes"
1081   ;;
1082   --cpu=*)
1083   ;;
1084   --target-list=*) target_list="$optarg"
1085                    if test "$target_list_exclude"; then
1086                        error_exit "Can't mix --target-list with --target-list-exclude"
1087                    fi
1088   ;;
1089   --target-list-exclude=*) target_list_exclude="$optarg"
1090                    if test "$target_list"; then
1091                        error_exit "Can't mix --target-list-exclude with --target-list"
1092                    fi
1093   ;;
1094   --enable-trace-backends=*) trace_backends="$optarg"
1095   ;;
1096   # XXX: backwards compatibility
1097   --enable-trace-backend=*) trace_backends="$optarg"
1098   ;;
1099   --with-trace-file=*) trace_file="$optarg"
1100   ;;
1101   --with-default-devices) default_devices="yes"
1102   ;;
1103   --without-default-devices) default_devices="no"
1104   ;;
1105   --enable-gprof) gprof="yes"
1106   ;;
1107   --enable-gcov) gcov="yes"
1108   ;;
1109   --static)
1110     static="yes"
1111     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1112   ;;
1113   --mandir=*) mandir="$optarg"
1114   ;;
1115   --bindir=*) bindir="$optarg"
1116   ;;
1117   --libdir=*) libdir="$optarg"
1118   ;;
1119   --libexecdir=*) libexecdir="$optarg"
1120   ;;
1121   --includedir=*) includedir="$optarg"
1122   ;;
1123   --datadir=*) datadir="$optarg"
1124   ;;
1125   --with-suffix=*) qemu_suffix="$optarg"
1126   ;;
1127   --docdir=*) qemu_docdir="$optarg"
1128   ;;
1129   --sysconfdir=*) sysconfdir="$optarg"
1130   ;;
1131   --localstatedir=*) local_statedir="$optarg"
1132   ;;
1133   --firmwarepath=*) firmwarepath="$optarg"
1134   ;;
1135   --host=*|--build=*|\
1136   --disable-dependency-tracking|\
1137   --sbindir=*|--sharedstatedir=*|\
1138   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1139   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1140     # These switches are silently ignored, for compatibility with
1141     # autoconf-generated configure scripts. This allows QEMU's
1142     # configure to be used by RPM and similar macros that set
1143     # lots of directory switches by default.
1144   ;;
1145   --disable-sdl) sdl="disabled"
1146   ;;
1147   --enable-sdl) sdl="enabled"
1148   ;;
1149   --disable-sdl-image) sdl_image="disabled"
1150   ;;
1151   --enable-sdl-image) sdl_image="enabled"
1152   ;;
1153   --disable-qom-cast-debug) qom_cast_debug="no"
1154   ;;
1155   --enable-qom-cast-debug) qom_cast_debug="yes"
1156   ;;
1157   --disable-virtfs) virtfs="no"
1158   ;;
1159   --enable-virtfs) virtfs="yes"
1160   ;;
1161   --disable-mpath) mpath="no"
1162   ;;
1163   --enable-mpath) mpath="yes"
1164   ;;
1165   --disable-vnc) vnc="disabled"
1166   ;;
1167   --enable-vnc) vnc="enabled"
1168   ;;
1169   --disable-gettext) gettext="false"
1170   ;;
1171   --enable-gettext) gettext="true"
1172   ;;
1173   --oss-lib=*) oss_lib="$optarg"
1174   ;;
1175   --audio-drv-list=*) audio_drv_list="$optarg"
1176   ;;
1177   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1178   ;;
1179   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1180   ;;
1181   --enable-debug-tcg) debug_tcg="yes"
1182   ;;
1183   --disable-debug-tcg) debug_tcg="no"
1184   ;;
1185   --enable-debug)
1186       # Enable debugging options that aren't excessively noisy
1187       debug_tcg="yes"
1188       debug_mutex="yes"
1189       debug="yes"
1190       strip_opt="no"
1191       fortify_source="no"
1192   ;;
1193   --enable-sanitizers) sanitizers="yes"
1194   ;;
1195   --disable-sanitizers) sanitizers="no"
1196   ;;
1197   --enable-tsan) tsan="yes"
1198   ;;
1199   --disable-tsan) tsan="no"
1200   ;;
1201   --enable-sparse) sparse="yes"
1202   ;;
1203   --disable-sparse) sparse="no"
1204   ;;
1205   --disable-strip) strip_opt="no"
1206   ;;
1207   --disable-vnc-sasl) vnc_sasl="disabled"
1208   ;;
1209   --enable-vnc-sasl) vnc_sasl="enabled"
1210   ;;
1211   --disable-vnc-jpeg) vnc_jpeg="disabled"
1212   ;;
1213   --enable-vnc-jpeg) vnc_jpeg="enabled"
1214   ;;
1215   --disable-vnc-png) vnc_png="disabled"
1216   ;;
1217   --enable-vnc-png) vnc_png="enabled"
1218   ;;
1219   --disable-slirp) slirp="no"
1220   ;;
1221   --enable-slirp=git) slirp="git"
1222   ;;
1223   --enable-slirp=system) slirp="system"
1224   ;;
1225   --disable-vde) vde="no"
1226   ;;
1227   --enable-vde) vde="yes"
1228   ;;
1229   --disable-netmap) netmap="no"
1230   ;;
1231   --enable-netmap) netmap="yes"
1232   ;;
1233   --disable-xen) xen="no"
1234   ;;
1235   --enable-xen) xen="yes"
1236   ;;
1237   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1238   ;;
1239   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1240   ;;
1241   --disable-brlapi) brlapi="no"
1242   ;;
1243   --enable-brlapi) brlapi="yes"
1244   ;;
1245   --disable-kvm) kvm="no"
1246   ;;
1247   --enable-kvm) kvm="yes"
1248   ;;
1249   --disable-hax) hax="no"
1250   ;;
1251   --enable-hax) hax="yes"
1252   ;;
1253   --disable-hvf) hvf="no"
1254   ;;
1255   --enable-hvf) hvf="yes"
1256   ;;
1257   --disable-whpx) whpx="no"
1258   ;;
1259   --enable-whpx) whpx="yes"
1260   ;;
1261   --disable-tcg-interpreter) tcg_interpreter="no"
1262   ;;
1263   --enable-tcg-interpreter) tcg_interpreter="yes"
1264   ;;
1265   --disable-cap-ng)  cap_ng="no"
1266   ;;
1267   --enable-cap-ng) cap_ng="yes"
1268   ;;
1269   --disable-tcg) tcg="no"
1270   ;;
1271   --enable-tcg) tcg="yes"
1272   ;;
1273   --disable-malloc-trim) malloc_trim="no"
1274   ;;
1275   --enable-malloc-trim) malloc_trim="yes"
1276   ;;
1277   --disable-spice) spice="no"
1278   ;;
1279   --enable-spice) spice="yes"
1280   ;;
1281   --disable-libiscsi) libiscsi="no"
1282   ;;
1283   --enable-libiscsi) libiscsi="yes"
1284   ;;
1285   --disable-libnfs) libnfs="no"
1286   ;;
1287   --enable-libnfs) libnfs="yes"
1288   ;;
1289   --enable-profiler) profiler="yes"
1290   ;;
1291   --disable-cocoa) cocoa="no"
1292   ;;
1293   --enable-cocoa)
1294       cocoa="yes" ;
1295       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1296   ;;
1297   --disable-system) softmmu="no"
1298   ;;
1299   --enable-system) softmmu="yes"
1300   ;;
1301   --disable-user)
1302       linux_user="no" ;
1303       bsd_user="no" ;
1304   ;;
1305   --enable-user) ;;
1306   --disable-linux-user) linux_user="no"
1307   ;;
1308   --enable-linux-user) linux_user="yes"
1309   ;;
1310   --disable-bsd-user) bsd_user="no"
1311   ;;
1312   --enable-bsd-user) bsd_user="yes"
1313   ;;
1314   --enable-pie) pie="yes"
1315   ;;
1316   --disable-pie) pie="no"
1317   ;;
1318   --enable-werror) werror="yes"
1319   ;;
1320   --disable-werror) werror="no"
1321   ;;
1322   --enable-stack-protector) stack_protector="yes"
1323   ;;
1324   --disable-stack-protector) stack_protector="no"
1325   ;;
1326   --enable-safe-stack) safe_stack="yes"
1327   ;;
1328   --disable-safe-stack) safe_stack="no"
1329   ;;
1330   --disable-curses) curses="no"
1331   ;;
1332   --enable-curses) curses="yes"
1333   ;;
1334   --disable-iconv) iconv="no"
1335   ;;
1336   --enable-iconv) iconv="yes"
1337   ;;
1338   --disable-curl) curl="no"
1339   ;;
1340   --enable-curl) curl="yes"
1341   ;;
1342   --disable-fdt) fdt="no"
1343   ;;
1344   --enable-fdt) fdt="yes"
1345   ;;
1346   --disable-linux-aio) linux_aio="no"
1347   ;;
1348   --enable-linux-aio) linux_aio="yes"
1349   ;;
1350   --disable-linux-io-uring) linux_io_uring="no"
1351   ;;
1352   --enable-linux-io-uring) linux_io_uring="yes"
1353   ;;
1354   --disable-attr) attr="no"
1355   ;;
1356   --enable-attr) attr="yes"
1357   ;;
1358   --disable-membarrier) membarrier="no"
1359   ;;
1360   --enable-membarrier) membarrier="yes"
1361   ;;
1362   --disable-blobs) blobs="no"
1363   ;;
1364   --with-pkgversion=*) pkgversion="$optarg"
1365   ;;
1366   --with-coroutine=*) coroutine="$optarg"
1367   ;;
1368   --disable-coroutine-pool) coroutine_pool="no"
1369   ;;
1370   --enable-coroutine-pool) coroutine_pool="yes"
1371   ;;
1372   --enable-debug-stack-usage) debug_stack_usage="yes"
1373   ;;
1374   --enable-crypto-afalg) crypto_afalg="yes"
1375   ;;
1376   --disable-crypto-afalg) crypto_afalg="no"
1377   ;;
1378   --disable-docs) docs="no"
1379   ;;
1380   --enable-docs) docs="yes"
1381   ;;
1382   --disable-vhost-net) vhost_net="no"
1383   ;;
1384   --enable-vhost-net) vhost_net="yes"
1385   ;;
1386   --disable-vhost-crypto) vhost_crypto="no"
1387   ;;
1388   --enable-vhost-crypto) vhost_crypto="yes"
1389   ;;
1390   --disable-vhost-scsi) vhost_scsi="no"
1391   ;;
1392   --enable-vhost-scsi) vhost_scsi="yes"
1393   ;;
1394   --disable-vhost-vsock) vhost_vsock="no"
1395   ;;
1396   --enable-vhost-vsock) vhost_vsock="yes"
1397   ;;
1398   --disable-vhost-user-fs) vhost_user_fs="no"
1399   ;;
1400   --enable-vhost-user-fs) vhost_user_fs="yes"
1401   ;;
1402   --disable-opengl) opengl="no"
1403   ;;
1404   --enable-opengl) opengl="yes"
1405   ;;
1406   --disable-rbd) rbd="no"
1407   ;;
1408   --enable-rbd) rbd="yes"
1409   ;;
1410   --disable-xfsctl) xfs="no"
1411   ;;
1412   --enable-xfsctl) xfs="yes"
1413   ;;
1414   --disable-smartcard) smartcard="no"
1415   ;;
1416   --enable-smartcard) smartcard="yes"
1417   ;;
1418   --disable-u2f) u2f="disabled"
1419   ;;
1420   --enable-u2f) u2f="enabled"
1421   ;;
1422   --disable-libusb) libusb="no"
1423   ;;
1424   --enable-libusb) libusb="yes"
1425   ;;
1426   --disable-usb-redir) usb_redir="no"
1427   ;;
1428   --enable-usb-redir) usb_redir="yes"
1429   ;;
1430   --disable-zlib-test)
1431   ;;
1432   --disable-lzo) lzo="no"
1433   ;;
1434   --enable-lzo) lzo="yes"
1435   ;;
1436   --disable-snappy) snappy="no"
1437   ;;
1438   --enable-snappy) snappy="yes"
1439   ;;
1440   --disable-bzip2) bzip2="no"
1441   ;;
1442   --enable-bzip2) bzip2="yes"
1443   ;;
1444   --enable-lzfse) lzfse="yes"
1445   ;;
1446   --disable-lzfse) lzfse="no"
1447   ;;
1448   --disable-zstd) zstd="no"
1449   ;;
1450   --enable-zstd) zstd="yes"
1451   ;;
1452   --enable-guest-agent) guest_agent="yes"
1453   ;;
1454   --disable-guest-agent) guest_agent="no"
1455   ;;
1456   --enable-guest-agent-msi) guest_agent_msi="yes"
1457   ;;
1458   --disable-guest-agent-msi) guest_agent_msi="no"
1459   ;;
1460   --with-vss-sdk) vss_win32_sdk=""
1461   ;;
1462   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1463   ;;
1464   --without-vss-sdk) vss_win32_sdk="no"
1465   ;;
1466   --with-win-sdk) win_sdk=""
1467   ;;
1468   --with-win-sdk=*) win_sdk="$optarg"
1469   ;;
1470   --without-win-sdk) win_sdk="no"
1471   ;;
1472   --enable-tools) want_tools="yes"
1473   ;;
1474   --disable-tools) want_tools="no"
1475   ;;
1476   --enable-seccomp) seccomp="yes"
1477   ;;
1478   --disable-seccomp) seccomp="no"
1479   ;;
1480   --disable-glusterfs) glusterfs="no"
1481   ;;
1482   --disable-avx2) avx2_opt="no"
1483   ;;
1484   --enable-avx2) avx2_opt="yes"
1485   ;;
1486   --disable-avx512f) avx512f_opt="no"
1487   ;;
1488   --enable-avx512f) avx512f_opt="yes"
1489   ;;
1490
1491   --enable-glusterfs) glusterfs="yes"
1492   ;;
1493   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1494       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1495   ;;
1496   --enable-vhdx|--disable-vhdx)
1497       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1498   ;;
1499   --enable-uuid|--disable-uuid)
1500       echo "$0: $opt is obsolete, UUID support is always built" >&2
1501   ;;
1502   --disable-gtk) gtk="no"
1503   ;;
1504   --enable-gtk) gtk="yes"
1505   ;;
1506   --tls-priority=*) tls_priority="$optarg"
1507   ;;
1508   --disable-gnutls) gnutls="no"
1509   ;;
1510   --enable-gnutls) gnutls="yes"
1511   ;;
1512   --disable-nettle) nettle="no"
1513   ;;
1514   --enable-nettle) nettle="yes"
1515   ;;
1516   --disable-gcrypt) gcrypt="no"
1517   ;;
1518   --enable-gcrypt) gcrypt="yes"
1519   ;;
1520   --disable-auth-pam) auth_pam="no"
1521   ;;
1522   --enable-auth-pam) auth_pam="yes"
1523   ;;
1524   --enable-rdma) rdma="yes"
1525   ;;
1526   --disable-rdma) rdma="no"
1527   ;;
1528   --enable-pvrdma) pvrdma="yes"
1529   ;;
1530   --disable-pvrdma) pvrdma="no"
1531   ;;
1532   --disable-vte) vte="no"
1533   ;;
1534   --enable-vte) vte="yes"
1535   ;;
1536   --disable-virglrenderer) virglrenderer="no"
1537   ;;
1538   --enable-virglrenderer) virglrenderer="yes"
1539   ;;
1540   --disable-tpm) tpm="no"
1541   ;;
1542   --enable-tpm) tpm="yes"
1543   ;;
1544   --disable-libssh) libssh="no"
1545   ;;
1546   --enable-libssh) libssh="yes"
1547   ;;
1548   --disable-live-block-migration) live_block_migration="no"
1549   ;;
1550   --enable-live-block-migration) live_block_migration="yes"
1551   ;;
1552   --disable-numa) numa="no"
1553   ;;
1554   --enable-numa) numa="yes"
1555   ;;
1556   --disable-libxml2) libxml2="no"
1557   ;;
1558   --enable-libxml2) libxml2="yes"
1559   ;;
1560   --disable-tcmalloc) tcmalloc="no"
1561   ;;
1562   --enable-tcmalloc) tcmalloc="yes"
1563   ;;
1564   --disable-jemalloc) jemalloc="no"
1565   ;;
1566   --enable-jemalloc) jemalloc="yes"
1567   ;;
1568   --disable-replication) replication="no"
1569   ;;
1570   --enable-replication) replication="yes"
1571   ;;
1572   --disable-bochs) bochs="no"
1573   ;;
1574   --enable-bochs) bochs="yes"
1575   ;;
1576   --disable-cloop) cloop="no"
1577   ;;
1578   --enable-cloop) cloop="yes"
1579   ;;
1580   --disable-dmg) dmg="no"
1581   ;;
1582   --enable-dmg) dmg="yes"
1583   ;;
1584   --disable-qcow1) qcow1="no"
1585   ;;
1586   --enable-qcow1) qcow1="yes"
1587   ;;
1588   --disable-vdi) vdi="no"
1589   ;;
1590   --enable-vdi) vdi="yes"
1591   ;;
1592   --disable-vvfat) vvfat="no"
1593   ;;
1594   --enable-vvfat) vvfat="yes"
1595   ;;
1596   --disable-qed) qed="no"
1597   ;;
1598   --enable-qed) qed="yes"
1599   ;;
1600   --disable-parallels) parallels="no"
1601   ;;
1602   --enable-parallels) parallels="yes"
1603   ;;
1604   --disable-sheepdog) sheepdog="no"
1605   ;;
1606   --enable-sheepdog) sheepdog="yes"
1607   ;;
1608   --disable-vhost-user) vhost_user="no"
1609   ;;
1610   --enable-vhost-user) vhost_user="yes"
1611   ;;
1612   --disable-vhost-vdpa) vhost_vdpa="no"
1613   ;;
1614   --enable-vhost-vdpa) vhost_vdpa="yes"
1615   ;;
1616   --disable-vhost-kernel) vhost_kernel="no"
1617   ;;
1618   --enable-vhost-kernel) vhost_kernel="yes"
1619   ;;
1620   --disable-capstone) capstone="no"
1621   ;;
1622   --enable-capstone) capstone="yes"
1623   ;;
1624   --enable-capstone=git) capstone="git"
1625   ;;
1626   --enable-capstone=system) capstone="system"
1627   ;;
1628   --with-git=*) git="$optarg"
1629   ;;
1630   --enable-git-update) git_update=yes
1631   ;;
1632   --disable-git-update) git_update=no
1633   ;;
1634   --enable-debug-mutex) debug_mutex=yes
1635   ;;
1636   --disable-debug-mutex) debug_mutex=no
1637   ;;
1638   --enable-libpmem) libpmem=yes
1639   ;;
1640   --disable-libpmem) libpmem=no
1641   ;;
1642   --enable-xkbcommon) xkbcommon="enabled"
1643   ;;
1644   --disable-xkbcommon) xkbcommon="disabled"
1645   ;;
1646   --enable-plugins) plugins="yes"
1647   ;;
1648   --disable-plugins) plugins="no"
1649   ;;
1650   --enable-containers) use_containers="yes"
1651   ;;
1652   --disable-containers) use_containers="no"
1653   ;;
1654   --enable-fuzzing) fuzzing=yes
1655   ;;
1656   --disable-fuzzing) fuzzing=no
1657   ;;
1658   --gdb=*) gdb_bin="$optarg"
1659   ;;
1660   --enable-rng-none) rng_none=yes
1661   ;;
1662   --disable-rng-none) rng_none=no
1663   ;;
1664   --enable-keyring) secret_keyring="yes"
1665   ;;
1666   --disable-keyring) secret_keyring="no"
1667   ;;
1668   --enable-libdaxctl) libdaxctl=yes
1669   ;;
1670   --disable-libdaxctl) libdaxctl=no
1671   ;;
1672   *)
1673       echo "ERROR: unknown option $opt"
1674       echo "Try '$0 --help' for more information"
1675       exit 1
1676   ;;
1677   esac
1678 done
1679
1680 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
1681 libdir="${libdir:-$prefix/lib}"
1682 libexecdir="${libexecdir:-$prefix/libexec}"
1683 includedir="${includedir:-$prefix/include}"
1684
1685 if test "$mingw32" = "yes" ; then
1686     mandir="$prefix"
1687     datadir="$prefix"
1688     docdir="$prefix"
1689     bindir="$prefix"
1690     sysconfdir="$prefix"
1691     local_statedir=
1692 else
1693     mandir="${mandir:-$prefix/share/man}"
1694     datadir="${datadir:-$prefix/share}"
1695     docdir="${docdir:-$prefix/share/doc}"
1696     bindir="${bindir:-$prefix/bin}"
1697     sysconfdir="${sysconfdir:-$prefix/etc}"
1698     local_statedir="${local_statedir:-$prefix/var}"
1699 fi
1700
1701 case "$cpu" in
1702     ppc)
1703            CPU_CFLAGS="-m32"
1704            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1705            ;;
1706     ppc64)
1707            CPU_CFLAGS="-m64"
1708            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1709            ;;
1710     sparc)
1711            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1712            QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1713            ;;
1714     sparc64)
1715            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1716            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1717            ;;
1718     s390)
1719            CPU_CFLAGS="-m31"
1720            QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1721            ;;
1722     s390x)
1723            CPU_CFLAGS="-m64"
1724            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1725            ;;
1726     i386)
1727            CPU_CFLAGS="-m32"
1728            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1729            ;;
1730     x86_64)
1731            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1732            # If we truly care, we should simply detect this case at
1733            # runtime and generate the fallback to serial emulation.
1734            CPU_CFLAGS="-m64 -mcx16"
1735            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1736            ;;
1737     x32)
1738            CPU_CFLAGS="-mx32"
1739            QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1740            ;;
1741     # No special flags required for other host CPUs
1742 esac
1743
1744 eval "cross_cc_${cpu}=\$host_cc"
1745 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1746 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1747
1748 # For user-mode emulation the host arch has to be one we explicitly
1749 # support, even if we're using TCI.
1750 if [ "$ARCH" = "unknown" ]; then
1751   bsd_user="no"
1752   linux_user="no"
1753 fi
1754
1755 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1756   tcg="no"
1757 fi
1758
1759 default_target_list=""
1760
1761 mak_wilds=""
1762
1763 if [ "$softmmu" = "yes" ]; then
1764     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1765 fi
1766 if [ "$linux_user" = "yes" ]; then
1767     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1768 fi
1769 if [ "$bsd_user" = "yes" ]; then
1770     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1771 fi
1772
1773 if test -z "$target_list_exclude"; then
1774     for config in $mak_wilds; do
1775         default_target_list="${default_target_list} $(basename "$config" .mak)"
1776     done
1777 else
1778     exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1779     for config in $mak_wilds; do
1780         target="$(basename "$config" .mak)"
1781         exclude="no"
1782         for excl in $exclude_list; do
1783             if test "$excl" = "$target"; then
1784                 exclude="yes"
1785                 break;
1786             fi
1787         done
1788         if test "$exclude" = "no"; then
1789             default_target_list="${default_target_list} $target"
1790         fi
1791     done
1792 fi
1793
1794 # Enumerate public trace backends for --help output
1795 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1796
1797 if test x"$show_help" = x"yes" ; then
1798 cat << EOF
1799
1800 Usage: configure [options]
1801 Options: [defaults in brackets after descriptions]
1802
1803 Standard options:
1804   --help                   print this message
1805   --prefix=PREFIX          install in PREFIX [$prefix]
1806   --interp-prefix=PREFIX   where to find shared libraries, etc.
1807                            use %M for cpu name [$interp_prefix]
1808   --target-list=LIST       set target list (default: build everything)
1809 $(echo Available targets: $default_target_list | \
1810   fold -s -w 53 | sed -e 's/^/                           /')
1811   --target-list-exclude=LIST exclude a set of targets from the default target-list
1812
1813 Advanced options (experts only):
1814   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1815   --cc=CC                  use C compiler CC [$cc]
1816   --iasl=IASL              use ACPI compiler IASL [$iasl]
1817   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1818                            build time
1819   --cxx=CXX                use C++ compiler CXX [$cxx]
1820   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1821   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1822   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1823   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1824   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1825   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1826   --make=MAKE              use specified make [$make]
1827   --install=INSTALL        use specified install [$install]
1828   --python=PYTHON          use specified python [$python]
1829   --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1830   --meson=MESON            use specified meson [$meson]
1831   --ninja=NINJA            use specified ninja [$ninja]
1832   --smbd=SMBD              use specified smbd [$smbd]
1833   --with-git=GIT           use specified git [$git]
1834   --static                 enable static build [$static]
1835   --mandir=PATH            install man pages in PATH
1836   --datadir=PATH           install firmware in PATH/$qemu_suffix
1837   --docdir=PATH            install documentation in PATH/$qemu_suffix
1838   --bindir=PATH            install binaries in PATH
1839   --libdir=PATH            install libraries in PATH
1840   --libexecdir=PATH        install helper binaries in PATH
1841   --sysconfdir=PATH        install config in PATH/$qemu_suffix
1842   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1843   --firmwarepath=PATH      search PATH for firmware files
1844   --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1845   --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1846   --with-pkgversion=VERS   use specified string as sub-version of the package
1847   --enable-debug           enable common debug build options
1848   --enable-sanitizers      enable default sanitizers
1849   --enable-tsan            enable thread sanitizer
1850   --disable-strip          disable stripping binaries
1851   --disable-werror         disable compilation abort on warning
1852   --disable-stack-protector disable compiler-provided stack protection
1853   --audio-drv-list=LIST    set audio drivers list:
1854                            Available drivers: $audio_possible_drivers
1855   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1856   --block-drv-rw-whitelist=L
1857                            set block driver read-write whitelist
1858                            (affects only QEMU, not qemu-img)
1859   --block-drv-ro-whitelist=L
1860                            set block driver read-only whitelist
1861                            (affects only QEMU, not qemu-img)
1862   --enable-trace-backends=B Set trace backend
1863                            Available backends: $trace_backend_list
1864   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1865                            Default:trace-<pid>
1866   --disable-slirp          disable SLIRP userspace network connectivity
1867   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1868   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1869   --oss-lib                path to OSS library
1870   --cpu=CPU                Build for host CPU [$cpu]
1871   --with-coroutine=BACKEND coroutine backend. Supported options:
1872                            ucontext, sigaltstack, windows
1873   --enable-gcov            enable test coverage analysis with gcov
1874   --disable-blobs          disable installing provided firmware blobs
1875   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1876   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1877   --tls-priority           default TLS protocol/cipher priority string
1878   --enable-gprof           QEMU profiling with gprof
1879   --enable-profiler        profiler support
1880   --enable-debug-stack-usage
1881                            track the maximum stack usage of stacks created by qemu_alloc_stack
1882   --enable-plugins
1883                            enable plugins via shared library loading
1884   --disable-containers     don't use containers for cross-building
1885   --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1886
1887 Optional features, enabled with --enable-FEATURE and
1888 disabled with --disable-FEATURE, default is enabled if available:
1889
1890   system          all system emulation targets
1891   user            supported user emulation targets
1892   linux-user      all linux usermode emulation targets
1893   bsd-user        all BSD usermode emulation targets
1894   docs            build documentation
1895   guest-agent     build the QEMU Guest Agent
1896   guest-agent-msi build guest agent Windows MSI installation package
1897   pie             Position Independent Executables
1898   modules         modules support (non-Windows)
1899   module-upgrades try to load modules from alternate paths for upgrades
1900   debug-tcg       TCG debugging (default is disabled)
1901   debug-info      debugging information
1902   sparse          sparse checker
1903   safe-stack      SafeStack Stack Smash Protection. Depends on
1904                   clang/llvm >= 3.7 and requires coroutine backend ucontext.
1905
1906   gnutls          GNUTLS cryptography support
1907   nettle          nettle cryptography support
1908   gcrypt          libgcrypt cryptography support
1909   auth-pam        PAM access control
1910   sdl             SDL UI
1911   sdl-image       SDL Image support for icons
1912   gtk             gtk UI
1913   vte             vte support for the gtk UI
1914   curses          curses UI
1915   iconv           font glyph conversion support
1916   vnc             VNC UI support
1917   vnc-sasl        SASL encryption for VNC server
1918   vnc-jpeg        JPEG lossy compression for VNC server
1919   vnc-png         PNG compression for VNC server
1920   cocoa           Cocoa UI (Mac OS X only)
1921   virtfs          VirtFS
1922   mpath           Multipath persistent reservation passthrough
1923   xen             xen backend driver support
1924   xen-pci-passthrough    PCI passthrough support for Xen
1925   brlapi          BrlAPI (Braile)
1926   curl            curl connectivity
1927   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1928   fdt             fdt device tree
1929   kvm             KVM acceleration support
1930   hax             HAX acceleration support
1931   hvf             Hypervisor.framework acceleration support
1932   whpx            Windows Hypervisor Platform acceleration support
1933   rdma            Enable RDMA-based migration
1934   pvrdma          Enable PVRDMA support
1935   vde             support for vde network
1936   netmap          support for netmap network
1937   linux-aio       Linux AIO support
1938   linux-io-uring  Linux io_uring support
1939   cap-ng          libcap-ng support
1940   attr            attr and xattr support
1941   vhost-net       vhost-net kernel acceleration support
1942   vhost-vsock     virtio sockets device support
1943   vhost-scsi      vhost-scsi kernel target support
1944   vhost-crypto    vhost-user-crypto backend support
1945   vhost-kernel    vhost kernel backend support
1946   vhost-user      vhost-user backend support
1947   vhost-vdpa      vhost-vdpa kernel backend support
1948   spice           spice
1949   rbd             rados block device (rbd)
1950   libiscsi        iscsi support
1951   libnfs          nfs support
1952   smartcard       smartcard support (libcacard)
1953   u2f             U2F support (u2f-emu)
1954   libusb          libusb (for usb passthrough)
1955   live-block-migration   Block migration in the main migration stream
1956   usb-redir       usb network redirection support
1957   lzo             support of lzo compression library
1958   snappy          support of snappy compression library
1959   bzip2           support of bzip2 compression library
1960                   (for reading bzip2-compressed dmg images)
1961   lzfse           support of lzfse compression library
1962                   (for reading lzfse-compressed dmg images)
1963   zstd            support for zstd compression library
1964                   (for migration compression and qcow2 cluster compression)
1965   seccomp         seccomp support
1966   coroutine-pool  coroutine freelist (better performance)
1967   glusterfs       GlusterFS backend
1968   tpm             TPM support
1969   libssh          ssh block device support
1970   numa            libnuma support
1971   libxml2         for Parallels image format
1972   tcmalloc        tcmalloc support
1973   jemalloc        jemalloc support
1974   avx2            AVX2 optimization support
1975   avx512f         AVX512F optimization support
1976   replication     replication support
1977   opengl          opengl support
1978   virglrenderer   virgl rendering support
1979   xfsctl          xfsctl support
1980   qom-cast-debug  cast debugging support
1981   tools           build qemu-io, qemu-nbd and qemu-img tools
1982   bochs           bochs image format support
1983   cloop           cloop image format support
1984   dmg             dmg image format support
1985   qcow1           qcow v1 image format support
1986   vdi             vdi image format support
1987   vvfat           vvfat image format support
1988   qed             qed image format support
1989   parallels       parallels image format support
1990   sheepdog        sheepdog block driver support
1991   crypto-afalg    Linux AF_ALG crypto backend driver
1992   capstone        capstone disassembler support
1993   debug-mutex     mutex debugging support
1994   libpmem         libpmem support
1995   xkbcommon       xkbcommon support
1996   rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
1997   libdaxctl       libdaxctl support
1998
1999 NOTE: The object files are built at the place where configure is launched
2000 EOF
2001 exit 0
2002 fi
2003
2004 # Remove old dependency files to make sure that they get properly regenerated
2005 rm -f */config-devices.mak.d
2006
2007 if test -z "$python"
2008 then
2009     error_exit "Python not found. Use --python=/path/to/python"
2010 fi
2011
2012 # Note that if the Python conditional here evaluates True we will exit
2013 # with status 1 which is a shell 'false' value.
2014 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2015   error_exit "Cannot use '$python', Python >= 3.5 is required." \
2016       "Use --python=/path/to/python to specify a supported Python."
2017 fi
2018
2019 # Preserve python version since some functionality is dependent on it
2020 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)
2021
2022 # Suppress writing compiled files
2023 python="$python -B"
2024
2025 if test -z "$meson"; then
2026     if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
2027         meson=meson
2028     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2029         meson=git
2030     elif test -e "${source_path}/meson/meson.py" ; then
2031         meson=internal
2032     else
2033         if test "$explicit_python" = yes; then
2034             error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2035         else
2036             error_exit "Meson not found.  Use --meson=/path/to/meson"
2037         fi
2038     fi
2039 else
2040     # Meson uses its own Python interpreter to invoke other Python scripts,
2041     # but the user wants to use the one they specified with --python.
2042     #
2043     # We do not want to override the distro Python interpreter (and sometimes
2044     # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2045     # just require --meson=git|internal together with --python.
2046     if test "$explicit_python" = yes; then
2047         case "$meson" in
2048             git | internal) ;;
2049             *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2050         esac
2051     fi
2052 fi
2053
2054 if test "$meson" = git; then
2055     git_submodules="${git_submodules} meson"
2056 fi
2057 if test "$git_update" = yes; then
2058     (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
2059 fi
2060
2061 case "$meson" in
2062     git | internal)
2063         if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2064             error_exit "Python setuptools not found"
2065         fi
2066         meson="$python ${source_path}/meson/meson.py"
2067         ;;
2068     *) meson=$(command -v meson) ;;
2069 esac
2070
2071 # Probe for ninja (used for compdb)
2072
2073 if test -z "$ninja"; then
2074     for c in ninja ninja-build samu; do
2075         if has $c; then
2076             ninja=$(command -v "$c")
2077             break
2078         fi
2079     done
2080 fi
2081
2082 # Check that the C compiler works. Doing this here before testing
2083 # the host CPU ensures that we had a valid CC to autodetect the
2084 # $cpu var (and we should bail right here if that's not the case).
2085 # It also allows the help message to be printed without a CC.
2086 write_c_skeleton;
2087 if compile_object ; then
2088   : C compiler works ok
2089 else
2090     error_exit "\"$cc\" either does not exist or does not work"
2091 fi
2092 if ! compile_prog ; then
2093     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2094 fi
2095
2096 # Now we have handled --enable-tcg-interpreter and know we're not just
2097 # printing the help message, bail out if the host CPU isn't supported.
2098 if test "$ARCH" = "unknown"; then
2099     if test "$tcg_interpreter" = "yes" ; then
2100         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2101     else
2102         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2103     fi
2104 fi
2105
2106 # Consult white-list to determine whether to enable werror
2107 # by default.  Only enable by default for git builds
2108 if test -z "$werror" ; then
2109     if test -e "$source_path/.git" && \
2110         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2111         werror="yes"
2112     else
2113         werror="no"
2114     fi
2115 fi
2116
2117 if test "$bogus_os" = "yes"; then
2118     # Now that we know that we're not printing the help and that
2119     # the compiler works (so the results of the check_defines we used
2120     # to identify the OS are reliable), if we didn't recognize the
2121     # host OS we should stop now.
2122     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2123 fi
2124
2125 # Check whether the compiler matches our minimum requirements:
2126 cat > $TMPC << EOF
2127 #if defined(__clang_major__) && defined(__clang_minor__)
2128 # ifdef __apple_build_version__
2129 #  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2130 #   error You need at least XCode Clang v5.1 to compile QEMU
2131 #  endif
2132 # else
2133 #  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2134 #   error You need at least Clang v3.4 to compile QEMU
2135 #  endif
2136 # endif
2137 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2138 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2139 #  error You need at least GCC v4.8 to compile QEMU
2140 # endif
2141 #else
2142 # error You either need GCC or Clang to compiler QEMU
2143 #endif
2144 int main (void) { return 0; }
2145 EOF
2146 if ! compile_prog "" "" ; then
2147     error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2148 fi
2149
2150 # Accumulate -Wfoo and -Wno-bar separately.
2151 # We will list all of the enable flags first, and the disable flags second.
2152 # Note that we do not add -Werror, because that would enable it for all
2153 # configure tests. If a configure test failed due to -Werror this would
2154 # just silently disable some features, so it's too error prone.
2155
2156 warn_flags=
2157 add_to warn_flags -Wold-style-declaration
2158 add_to warn_flags -Wold-style-definition
2159 add_to warn_flags -Wtype-limits
2160 add_to warn_flags -Wformat-security
2161 add_to warn_flags -Wformat-y2k
2162 add_to warn_flags -Winit-self
2163 add_to warn_flags -Wignored-qualifiers
2164 add_to warn_flags -Wempty-body
2165 add_to warn_flags -Wnested-externs
2166 add_to warn_flags -Wendif-labels
2167 add_to warn_flags -Wexpansion-to-defined
2168
2169 nowarn_flags=
2170 add_to nowarn_flags -Wno-initializer-overrides
2171 add_to nowarn_flags -Wno-missing-include-dirs
2172 add_to nowarn_flags -Wno-shift-negative-value
2173 add_to nowarn_flags -Wno-string-plus-int
2174 add_to nowarn_flags -Wno-typedef-redefinition
2175 add_to nowarn_flags -Wno-tautological-type-limit-compare
2176 add_to nowarn_flags -Wno-psabi
2177
2178 gcc_flags="$warn_flags $nowarn_flags"
2179
2180 cc_has_warning_flag() {
2181     write_c_skeleton;
2182
2183     # Use the positive sense of the flag when testing for -Wno-wombat
2184     # support (gcc will happily accept the -Wno- form of unknown
2185     # warning options).
2186     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2187     compile_prog "-Werror $optflag" ""
2188 }
2189
2190 for flag in $gcc_flags; do
2191     if cc_has_warning_flag $flag ; then
2192         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2193     fi
2194 done
2195
2196 if test "$stack_protector" != "no"; then
2197   cat > $TMPC << EOF
2198 int main(int argc, char *argv[])
2199 {
2200     char arr[64], *p = arr, *c = argv[0];
2201     while (*c) {
2202         *p++ = *c++;
2203     }
2204     return 0;
2205 }
2206 EOF
2207   gcc_flags="-fstack-protector-strong -fstack-protector-all"
2208   sp_on=0
2209   for flag in $gcc_flags; do
2210     # We need to check both a compile and a link, since some compiler
2211     # setups fail only on a .c->.o compile and some only at link time
2212     if compile_object "-Werror $flag" &&
2213        compile_prog "-Werror $flag" ""; then
2214       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2215       QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2216       sp_on=1
2217       break
2218     fi
2219   done
2220   if test "$stack_protector" = yes; then
2221     if test $sp_on = 0; then
2222       error_exit "Stack protector not supported"
2223     fi
2224   fi
2225 fi
2226
2227 # Disable -Wmissing-braces on older compilers that warn even for
2228 # the "universal" C zero initializer {0}.
2229 cat > $TMPC << EOF
2230 struct {
2231   int a[2];
2232 } x = {0};
2233 EOF
2234 if compile_object "-Werror" "" ; then
2235   :
2236 else
2237   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2238 fi
2239
2240 # Our module code doesn't support Windows
2241 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2242   error_exit "Modules are not available for Windows"
2243 fi
2244
2245 # module_upgrades is only reasonable if modules are enabled
2246 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2247   error_exit "Can't enable module-upgrades as Modules are not enabled"
2248 fi
2249
2250 # Static linking is not possible with modules or PIE
2251 if test "$static" = "yes" ; then
2252   if test "$modules" = "yes" ; then
2253     error_exit "static and modules are mutually incompatible"
2254   fi
2255 fi
2256
2257 # Unconditional check for compiler __thread support
2258   cat > $TMPC << EOF
2259 static __thread int tls_var;
2260 int main(void) { return tls_var; }
2261 EOF
2262
2263 if ! compile_prog "-Werror" "" ; then
2264     error_exit "Your compiler does not support the __thread specifier for " \
2265         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2266 fi
2267
2268 cat > $TMPC << EOF
2269
2270 #ifdef __linux__
2271 #  define THREAD __thread
2272 #else
2273 #  define THREAD
2274 #endif
2275 static THREAD int tls_var;
2276 int main(void) { return tls_var; }
2277 EOF
2278
2279 # Check we support --no-pie first; we will need this for building ROMs.
2280 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2281   CFLAGS_NOPIE="-fno-pie"
2282   LDFLAGS_NOPIE="-no-pie"
2283 fi
2284
2285 if test "$static" = "yes"; then
2286   if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2287     CFLAGS="-fPIE -DPIE $CFLAGS"
2288     QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2289     pie="yes"
2290   elif test "$pie" = "yes"; then
2291     error_exit "-static-pie not available due to missing toolchain support"
2292   else
2293     QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2294     pie="no"
2295   fi
2296 elif test "$pie" = "no"; then
2297   CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2298   LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2299 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2300   CFLAGS="-fPIE -DPIE $CFLAGS"
2301   LDFLAGS="-pie $LDFLAGS"
2302   pie="yes"
2303 elif test "$pie" = "yes"; then
2304   error_exit "PIE not available due to missing toolchain support"
2305 else
2306   echo "Disabling PIE due to missing toolchain support"
2307   pie="no"
2308 fi
2309
2310 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2311 # The combination is known as "full relro", because .got.plt is read-only too.
2312 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2313   QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2314 fi
2315
2316 ##########################################
2317 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2318 # use i686 as default anyway, but for those that don't, an explicit
2319 # specification is necessary
2320
2321 if test "$cpu" = "i386"; then
2322   cat > $TMPC << EOF
2323 static int sfaa(int *ptr)
2324 {
2325   return __sync_fetch_and_and(ptr, 0);
2326 }
2327
2328 int main(void)
2329 {
2330   int val = 42;
2331   val = __sync_val_compare_and_swap(&val, 0, 1);
2332   sfaa(&val);
2333   return val;
2334 }
2335 EOF
2336   if ! compile_prog "" "" ; then
2337     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2338   fi
2339 fi
2340
2341 #########################################
2342 # Solaris specific configure tool chain decisions
2343
2344 if test "$solaris" = "yes" ; then
2345   if has $install; then
2346     :
2347   else
2348     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2349         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2350         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2351   fi
2352   if test "$(path_of $install)" = "/usr/sbin/install" ; then
2353     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2354         "try ginstall from the GNU fileutils available from www.blastwave.org" \
2355         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2356   fi
2357   if has ar; then
2358     :
2359   else
2360     if test -f /usr/ccs/bin/ar ; then
2361       error_exit "No path includes ar" \
2362           "Add /usr/ccs/bin to your path and rerun configure"
2363     fi
2364     error_exit "No path includes ar"
2365   fi
2366 fi
2367
2368 if test -z "${target_list+xxx}" ; then
2369     for target in $default_target_list; do
2370         supported_target $target 2>/dev/null && \
2371             target_list="$target_list $target"
2372     done
2373     target_list="${target_list# }"
2374 else
2375     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2376     for target in $target_list; do
2377         # Check that we recognised the target name; this allows a more
2378         # friendly error message than if we let it fall through.
2379         case " $default_target_list " in
2380             *" $target "*)
2381                 ;;
2382             *)
2383                 error_exit "Unknown target name '$target'"
2384                 ;;
2385         esac
2386         supported_target $target || exit 1
2387     done
2388 fi
2389
2390 # see if system emulation was really requested
2391 case " $target_list " in
2392   *"-softmmu "*) softmmu=yes
2393   ;;
2394   *) softmmu=no
2395   ;;
2396 esac
2397
2398 for target in $target_list; do
2399   case "$target" in
2400     arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2401       edk2_blobs="yes"
2402       ;;
2403   esac
2404 done
2405 # The EDK2 binaries are compressed with bzip2
2406 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2407   error_exit "The bzip2 program is required for building QEMU"
2408 fi
2409
2410 feature_not_found() {
2411   feature=$1
2412   remedy=$2
2413
2414   error_exit "User requested feature $feature" \
2415       "configure was not able to find it." \
2416       "$remedy"
2417 }
2418
2419 # ---
2420 # big/little endian test
2421 cat > $TMPC << EOF
2422 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2423 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2424 extern int foo(short *, short *);
2425 int main(int argc, char *argv[]) {
2426     return foo(big_endian, little_endian);
2427 }
2428 EOF
2429
2430 if compile_object ; then
2431     if strings -a $TMPO | grep -q BiGeNdIaN ; then
2432         bigendian="yes"
2433     elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2434         bigendian="no"
2435     else
2436         echo big/little test failed
2437     fi
2438 else
2439     echo big/little test failed
2440 fi
2441
2442 ##########################################
2443 # system tools
2444 if test -z "$want_tools"; then
2445     if test "$softmmu" = "no"; then
2446         want_tools=no
2447     else
2448         want_tools=yes
2449     fi
2450 fi
2451
2452 ##########################################
2453 # cocoa implies not SDL or GTK
2454 # (the cocoa UI code currently assumes it is always the active UI
2455 # and doesn't interact well with other UI frontend code)
2456 if test "$cocoa" = "yes"; then
2457     if test "$sdl" = "yes"; then
2458         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2459     fi
2460     if test "$gtk" = "yes"; then
2461         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2462     fi
2463     gtk=no
2464     sdl=disabled
2465 fi
2466
2467 # Some versions of Mac OS X incorrectly define SIZE_MAX
2468 cat > $TMPC << EOF
2469 #include <stdint.h>
2470 #include <stdio.h>
2471 int main(int argc, char *argv[]) {
2472     return printf("%zu", SIZE_MAX);
2473 }
2474 EOF
2475 have_broken_size_max=no
2476 if ! compile_object -Werror ; then
2477     have_broken_size_max=yes
2478 fi
2479
2480 ##########################################
2481 # L2TPV3 probe
2482
2483 cat > $TMPC <<EOF
2484 #include <sys/socket.h>
2485 #include <linux/ip.h>
2486 int main(void) { return sizeof(struct mmsghdr); }
2487 EOF
2488 if compile_prog "" "" ; then
2489   l2tpv3=yes
2490 else
2491   l2tpv3=no
2492 fi
2493
2494 if check_include "pty.h" ; then
2495   pty_h=yes
2496 else
2497   pty_h=no
2498 fi
2499
2500 cat > $TMPC <<EOF
2501 #include <sys/mman.h>
2502 int main(int argc, char *argv[]) {
2503     return mlockall(MCL_FUTURE);
2504 }
2505 EOF
2506 if compile_prog "" "" ; then
2507   have_mlockall=yes
2508 else
2509   have_mlockall=no
2510 fi
2511
2512 #########################################
2513 # vhost interdependencies and host support
2514
2515 # vhost backends
2516 test "$vhost_user" = "" && vhost_user=yes
2517 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2518   error_exit "vhost-user isn't available on win32"
2519 fi
2520 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2521 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2522   error_exit "vhost-vdpa is only available on Linux"
2523 fi
2524 test "$vhost_kernel" = "" && vhost_kernel=$linux
2525 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2526   error_exit "vhost-kernel is only available on Linux"
2527 fi
2528
2529 # vhost-kernel devices
2530 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2531 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2532   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2533 fi
2534 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2535 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2536   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2537 fi
2538
2539 # vhost-user backends
2540 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2541 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2542   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2543 fi
2544 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2545 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2546   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2547 fi
2548 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2549 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2550   error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2551 fi
2552 #vhost-vdpa backends
2553 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2554 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2555   error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2556 fi
2557
2558 # OR the vhost-kernel and vhost-user values for simplicity
2559 if test "$vhost_net" = ""; then
2560   test "$vhost_net_user" = "yes" && vhost_net=yes
2561   test "$vhost_kernel" = "yes" && vhost_net=yes
2562 fi
2563
2564 ##########################################
2565 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2566
2567 if test "$mingw32" = "yes"; then
2568     # Some versions of MinGW / Mingw-w64 lack localtime_r
2569     # and gmtime_r entirely.
2570     #
2571     # Some versions of Mingw-w64 define a macro for
2572     # localtime_r/gmtime_r.
2573     #
2574     # Some versions of Mingw-w64 will define functions
2575     # for localtime_r/gmtime_r, but only if you have
2576     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2577     # though, unistd.h and pthread.h both define
2578     # that for you.
2579     #
2580     # So this #undef localtime_r and #include <unistd.h>
2581     # are not in fact redundant.
2582 cat > $TMPC << EOF
2583 #include <unistd.h>
2584 #include <time.h>
2585 #undef localtime_r
2586 int main(void) { localtime_r(NULL, NULL); return 0; }
2587 EOF
2588     if compile_prog "" "" ; then
2589         localtime_r="yes"
2590     else
2591         localtime_r="no"
2592     fi
2593 fi
2594
2595 ##########################################
2596 # pkg-config probe
2597
2598 if ! has "$pkg_config_exe"; then
2599   error_exit "pkg-config binary '$pkg_config_exe' not found"
2600 fi
2601
2602 ##########################################
2603 # NPTL probe
2604
2605 if test "$linux_user" = "yes"; then
2606   cat > $TMPC <<EOF
2607 #include <sched.h>
2608 #include <linux/futex.h>
2609 int main(void) {
2610 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2611 #error bork
2612 #endif
2613   return 0;
2614 }
2615 EOF
2616   if ! compile_object ; then
2617     feature_not_found "nptl" "Install glibc and linux kernel headers."
2618   fi
2619 fi
2620
2621 ##########################################
2622 # lzo check
2623
2624 if test "$lzo" != "no" ; then
2625     cat > $TMPC << EOF
2626 #include <lzo/lzo1x.h>
2627 int main(void) { lzo_version(); return 0; }
2628 EOF
2629     if compile_prog "" "-llzo2" ; then
2630         lzo_libs="-llzo2"
2631         lzo="yes"
2632     else
2633         if test "$lzo" = "yes"; then
2634             feature_not_found "liblzo2" "Install liblzo2 devel"
2635         fi
2636         lzo="no"
2637     fi
2638 fi
2639
2640 ##########################################
2641 # snappy check
2642
2643 if test "$snappy" != "no" ; then
2644     cat > $TMPC << EOF
2645 #include <snappy-c.h>
2646 int main(void) { snappy_max_compressed_length(4096); return 0; }
2647 EOF
2648     if compile_prog "" "-lsnappy" ; then
2649         snappy_libs='-lsnappy'
2650         snappy="yes"
2651     else
2652         if test "$snappy" = "yes"; then
2653             feature_not_found "libsnappy" "Install libsnappy devel"
2654         fi
2655         snappy="no"
2656     fi
2657 fi
2658
2659 ##########################################
2660 # bzip2 check
2661
2662 if test "$bzip2" != "no" ; then
2663     cat > $TMPC << EOF
2664 #include <bzlib.h>
2665 int main(void) { BZ2_bzlibVersion(); return 0; }
2666 EOF
2667     if compile_prog "" "-lbz2" ; then
2668         bzip2="yes"
2669     else
2670         if test "$bzip2" = "yes"; then
2671             feature_not_found "libbzip2" "Install libbzip2 devel"
2672         fi
2673         bzip2="no"
2674     fi
2675 fi
2676
2677 ##########################################
2678 # lzfse check
2679
2680 if test "$lzfse" != "no" ; then
2681     cat > $TMPC << EOF
2682 #include <lzfse.h>
2683 int main(void) { lzfse_decode_scratch_size(); return 0; }
2684 EOF
2685     if compile_prog "" "-llzfse" ; then
2686         lzfse="yes"
2687     else
2688         if test "$lzfse" = "yes"; then
2689             feature_not_found "lzfse" "Install lzfse devel"
2690         fi
2691         lzfse="no"
2692     fi
2693 fi
2694
2695 ##########################################
2696 # zstd check
2697
2698 if test "$zstd" != "no" ; then
2699     libzstd_minver="1.4.0"
2700     if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2701         zstd_cflags="$($pkg_config --cflags libzstd)"
2702         zstd_libs="$($pkg_config --libs libzstd)"
2703         zstd="yes"
2704     else
2705         if test "$zstd" = "yes" ; then
2706             feature_not_found "libzstd" "Install libzstd devel"
2707         fi
2708         zstd="no"
2709     fi
2710 fi
2711
2712 ##########################################
2713 # libseccomp check
2714
2715 if test "$seccomp" != "no" ; then
2716     libseccomp_minver="2.3.0"
2717     if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2718         seccomp_cflags="$($pkg_config --cflags libseccomp)"
2719         seccomp_libs="$($pkg_config --libs libseccomp)"
2720         seccomp="yes"
2721     else
2722         if test "$seccomp" = "yes" ; then
2723             feature_not_found "libseccomp" \
2724                  "Install libseccomp devel >= $libseccomp_minver"
2725         fi
2726         seccomp="no"
2727     fi
2728 fi
2729 ##########################################
2730 # xen probe
2731
2732 if test "$xen" != "no" ; then
2733   # Check whether Xen library path is specified via --extra-ldflags to avoid
2734   # overriding this setting with pkg-config output. If not, try pkg-config
2735   # to obtain all needed flags.
2736
2737   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2738      $pkg_config --exists xencontrol ; then
2739     xen_ctrl_version="$(printf '%d%02d%02d' \
2740       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2741     xen=yes
2742     xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2743     xen_pc="$xen_pc xenevtchn xendevicemodel"
2744     if $pkg_config --exists xentoolcore; then
2745       xen_pc="$xen_pc xentoolcore"
2746     fi
2747     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2748     xen_cflags="$($pkg_config --cflags $xen_pc)"
2749     xen_libs="$($pkg_config --libs $xen_pc)"
2750   else
2751
2752     xen_libs="-lxenstore -lxenctrl -lxenguest"
2753     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2754
2755     # First we test whether Xen headers and libraries are available.
2756     # If no, we are done and there is no Xen support.
2757     # If yes, more tests are run to detect the Xen version.
2758
2759     # Xen (any)
2760     cat > $TMPC <<EOF
2761 #include <xenctrl.h>
2762 int main(void) {
2763   return 0;
2764 }
2765 EOF
2766     if ! compile_prog "" "$xen_libs" ; then
2767       # Xen not found
2768       if test "$xen" = "yes" ; then
2769         feature_not_found "xen" "Install xen devel"
2770       fi
2771       xen=no
2772
2773     # Xen unstable
2774     elif
2775         cat > $TMPC <<EOF &&
2776 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2777 #define __XEN_TOOLS__
2778 #include <xendevicemodel.h>
2779 #include <xenforeignmemory.h>
2780 int main(void) {
2781   xendevicemodel_handle *xd;
2782   xenforeignmemory_handle *xfmem;
2783
2784   xd = xendevicemodel_open(0, 0);
2785   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2786
2787   xfmem = xenforeignmemory_open(0, 0);
2788   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2789
2790   return 0;
2791 }
2792 EOF
2793         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2794       then
2795       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2796       xen_ctrl_version=41100
2797       xen=yes
2798     elif
2799         cat > $TMPC <<EOF &&
2800 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2801 #include <xenforeignmemory.h>
2802 #include <xentoolcore.h>
2803 int main(void) {
2804   xenforeignmemory_handle *xfmem;
2805
2806   xfmem = xenforeignmemory_open(0, 0);
2807   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2808   xentoolcore_restrict_all(0);
2809
2810   return 0;
2811 }
2812 EOF
2813         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2814       then
2815       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2816       xen_ctrl_version=41000
2817       xen=yes
2818     elif
2819         cat > $TMPC <<EOF &&
2820 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2821 #define __XEN_TOOLS__
2822 #include <xendevicemodel.h>
2823 int main(void) {
2824   xendevicemodel_handle *xd;
2825
2826   xd = xendevicemodel_open(0, 0);
2827   xendevicemodel_close(xd);
2828
2829   return 0;
2830 }
2831 EOF
2832         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2833       then
2834       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2835       xen_ctrl_version=40900
2836       xen=yes
2837     elif
2838         cat > $TMPC <<EOF &&
2839 /*
2840  * If we have stable libs the we don't want the libxc compat
2841  * layers, regardless of what CFLAGS we may have been given.
2842  *
2843  * Also, check if xengnttab_grant_copy_segment_t is defined and
2844  * grant copy operation is implemented.
2845  */
2846 #undef XC_WANT_COMPAT_EVTCHN_API
2847 #undef XC_WANT_COMPAT_GNTTAB_API
2848 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2849 #include <xenctrl.h>
2850 #include <xenstore.h>
2851 #include <xenevtchn.h>
2852 #include <xengnttab.h>
2853 #include <xenforeignmemory.h>
2854 #include <stdint.h>
2855 #include <xen/hvm/hvm_info_table.h>
2856 #if !defined(HVM_MAX_VCPUS)
2857 # error HVM_MAX_VCPUS not defined
2858 #endif
2859 int main(void) {
2860   xc_interface *xc = NULL;
2861   xenforeignmemory_handle *xfmem;
2862   xenevtchn_handle *xe;
2863   xengnttab_handle *xg;
2864   xengnttab_grant_copy_segment_t* seg = NULL;
2865
2866   xs_daemon_open();
2867
2868   xc = xc_interface_open(0, 0, 0);
2869   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2870   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2871   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2872   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2873
2874   xfmem = xenforeignmemory_open(0, 0);
2875   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2876
2877   xe = xenevtchn_open(0, 0);
2878   xenevtchn_fd(xe);
2879
2880   xg = xengnttab_open(0, 0);
2881   xengnttab_grant_copy(xg, 0, seg);
2882
2883   return 0;
2884 }
2885 EOF
2886         compile_prog "" "$xen_libs $xen_stable_libs"
2887       then
2888       xen_ctrl_version=40800
2889       xen=yes
2890     elif
2891         cat > $TMPC <<EOF &&
2892 /*
2893  * If we have stable libs the we don't want the libxc compat
2894  * layers, regardless of what CFLAGS we may have been given.
2895  */
2896 #undef XC_WANT_COMPAT_EVTCHN_API
2897 #undef XC_WANT_COMPAT_GNTTAB_API
2898 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2899 #include <xenctrl.h>
2900 #include <xenstore.h>
2901 #include <xenevtchn.h>
2902 #include <xengnttab.h>
2903 #include <xenforeignmemory.h>
2904 #include <stdint.h>
2905 #include <xen/hvm/hvm_info_table.h>
2906 #if !defined(HVM_MAX_VCPUS)
2907 # error HVM_MAX_VCPUS not defined
2908 #endif
2909 int main(void) {
2910   xc_interface *xc = NULL;
2911   xenforeignmemory_handle *xfmem;
2912   xenevtchn_handle *xe;
2913   xengnttab_handle *xg;
2914
2915   xs_daemon_open();
2916
2917   xc = xc_interface_open(0, 0, 0);
2918   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2919   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2920   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2921   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2922
2923   xfmem = xenforeignmemory_open(0, 0);
2924   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2925
2926   xe = xenevtchn_open(0, 0);
2927   xenevtchn_fd(xe);
2928
2929   xg = xengnttab_open(0, 0);
2930   xengnttab_map_grant_ref(xg, 0, 0, 0);
2931
2932   return 0;
2933 }
2934 EOF
2935         compile_prog "" "$xen_libs $xen_stable_libs"
2936       then
2937       xen_ctrl_version=40701
2938       xen=yes
2939
2940     # Xen 4.6
2941     elif
2942         cat > $TMPC <<EOF &&
2943 #include <xenctrl.h>
2944 #include <xenstore.h>
2945 #include <stdint.h>
2946 #include <xen/hvm/hvm_info_table.h>
2947 #if !defined(HVM_MAX_VCPUS)
2948 # error HVM_MAX_VCPUS not defined
2949 #endif
2950 int main(void) {
2951   xc_interface *xc;
2952   xs_daemon_open();
2953   xc = xc_interface_open(0, 0, 0);
2954   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2955   xc_gnttab_open(NULL, 0);
2956   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2957   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2958   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2959   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2960   return 0;
2961 }
2962 EOF
2963         compile_prog "" "$xen_libs"
2964       then
2965       xen_ctrl_version=40600
2966       xen=yes
2967
2968     # Xen 4.5
2969     elif
2970         cat > $TMPC <<EOF &&
2971 #include <xenctrl.h>
2972 #include <xenstore.h>
2973 #include <stdint.h>
2974 #include <xen/hvm/hvm_info_table.h>
2975 #if !defined(HVM_MAX_VCPUS)
2976 # error HVM_MAX_VCPUS not defined
2977 #endif
2978 int main(void) {
2979   xc_interface *xc;
2980   xs_daemon_open();
2981   xc = xc_interface_open(0, 0, 0);
2982   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2983   xc_gnttab_open(NULL, 0);
2984   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2985   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2986   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2987   return 0;
2988 }
2989 EOF
2990         compile_prog "" "$xen_libs"
2991       then
2992       xen_ctrl_version=40500
2993       xen=yes
2994
2995     elif
2996         cat > $TMPC <<EOF &&
2997 #include <xenctrl.h>
2998 #include <xenstore.h>
2999 #include <stdint.h>
3000 #include <xen/hvm/hvm_info_table.h>
3001 #if !defined(HVM_MAX_VCPUS)
3002 # error HVM_MAX_VCPUS not defined
3003 #endif
3004 int main(void) {
3005   xc_interface *xc;
3006   xs_daemon_open();
3007   xc = xc_interface_open(0, 0, 0);
3008   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
3009   xc_gnttab_open(NULL, 0);
3010   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
3011   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
3012   return 0;
3013 }
3014 EOF
3015         compile_prog "" "$xen_libs"
3016       then
3017       xen_ctrl_version=40200
3018       xen=yes
3019
3020     else
3021       if test "$xen" = "yes" ; then
3022         feature_not_found "xen (unsupported version)" \
3023                           "Install a supported xen (xen 4.2 or newer)"
3024       fi
3025       xen=no
3026     fi
3027
3028     if test "$xen" = yes; then
3029       if test $xen_ctrl_version -ge 40701  ; then
3030         xen_libs="$xen_libs $xen_stable_libs "
3031       fi
3032     fi
3033   fi
3034 fi
3035
3036 if test "$xen_pci_passthrough" != "no"; then
3037   if test "$xen" = "yes" && test "$linux" = "yes"; then
3038     xen_pci_passthrough=yes
3039   else
3040     if test "$xen_pci_passthrough" = "yes"; then
3041       error_exit "User requested feature Xen PCI Passthrough" \
3042           " but this feature requires /sys from Linux"
3043     fi
3044     xen_pci_passthrough=no
3045   fi
3046 fi
3047
3048 ##########################################
3049 # Windows Hypervisor Platform accelerator (WHPX) check
3050 if test "$whpx" != "no" ; then
3051     if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3052         whpx="yes"
3053     else
3054         if test "$whpx" = "yes"; then
3055             feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3056         fi
3057         whpx="no"
3058     fi
3059 fi
3060
3061 ##########################################
3062 # gettext probe
3063 if test "$gettext" != "false" ; then
3064   if has xgettext; then
3065     gettext=true
3066   else
3067     if test "$gettext" = "true" ; then
3068       feature_not_found "gettext" "Install xgettext binary"
3069     fi
3070     gettext=false
3071   fi
3072 fi
3073
3074 ##########################################
3075 # Sparse probe
3076 if test "$sparse" != "no" ; then
3077   if has sparse; then
3078     sparse=yes
3079   else
3080     if test "$sparse" = "yes" ; then
3081       feature_not_found "sparse" "Install sparse binary"
3082     fi
3083     sparse=no
3084   fi
3085 fi
3086
3087 ##########################################
3088 # X11 probe
3089 if $pkg_config --exists "x11"; then
3090     have_x11=yes
3091     x11_cflags=$($pkg_config --cflags x11)
3092     x11_libs=$($pkg_config --libs x11)
3093 fi
3094
3095 ##########################################
3096 # GTK probe
3097
3098 if test "$gtk" != "no"; then
3099     gtkpackage="gtk+-3.0"
3100     gtkx11package="gtk+-x11-3.0"
3101     gtkversion="3.22.0"
3102     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3103         gtk_cflags=$($pkg_config --cflags $gtkpackage)
3104         gtk_libs=$($pkg_config --libs $gtkpackage)
3105         gtk_version=$($pkg_config --modversion $gtkpackage)
3106         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3107             need_x11=yes
3108             gtk_cflags="$gtk_cflags $x11_cflags"
3109             gtk_libs="$gtk_libs $x11_libs"
3110         fi
3111         gtk="yes"
3112     elif test "$gtk" = "yes"; then
3113         feature_not_found "gtk" "Install gtk3-devel"
3114     else
3115         gtk="no"
3116     fi
3117 fi
3118
3119
3120 ##########################################
3121 # GNUTLS probe
3122
3123 if test "$gnutls" != "no"; then
3124     pass="no"
3125     if $pkg_config --exists "gnutls >= 3.1.18"; then
3126         gnutls_cflags=$($pkg_config --cflags gnutls)
3127         gnutls_libs=$($pkg_config --libs gnutls)
3128         # Packaging for the static libraries is not always correct.
3129         # At least ubuntu 18.04 ships only shared libraries.
3130         write_c_skeleton
3131         if compile_prog "" "$gnutls_libs" ; then
3132             LIBS="$gnutls_libs $LIBS"
3133             QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3134             pass="yes"
3135         fi
3136     fi
3137     if test "$pass" = "no" && test "$gnutls" = "yes"; then
3138         feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3139     else
3140         gnutls="$pass"
3141     fi
3142 fi
3143
3144
3145 # If user didn't give a --disable/enable-gcrypt flag,
3146 # then mark as disabled if user requested nettle
3147 # explicitly
3148 if test -z "$gcrypt"
3149 then
3150     if test "$nettle" = "yes"
3151     then
3152         gcrypt="no"
3153     fi
3154 fi
3155
3156 # If user didn't give a --disable/enable-nettle flag,
3157 # then mark as disabled if user requested gcrypt
3158 # explicitly
3159 if test -z "$nettle"
3160 then
3161     if test "$gcrypt" = "yes"
3162     then
3163         nettle="no"
3164     fi
3165 fi
3166
3167 has_libgcrypt() {
3168     if ! has "libgcrypt-config"
3169     then
3170         return 1
3171     fi
3172
3173     if test -n "$cross_prefix"
3174     then
3175         host=$(libgcrypt-config --host)
3176         if test "$host-" != $cross_prefix
3177         then
3178             return 1
3179         fi
3180     fi
3181
3182     maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3183     min=`libgcrypt-config --version | awk -F . '{print $2}'`
3184
3185     if test $maj != 1 || test $min -lt 5
3186     then
3187        return 1
3188     fi
3189
3190     return 0
3191 }
3192
3193
3194 if test "$nettle" != "no"; then
3195     pass="no"
3196     if $pkg_config --exists "nettle >= 2.7.1"; then
3197         nettle_cflags=$($pkg_config --cflags nettle)
3198         nettle_libs=$($pkg_config --libs nettle)
3199         nettle_version=$($pkg_config --modversion nettle)
3200         # Link test to make sure the given libraries work (e.g for static).
3201         write_c_skeleton
3202         if compile_prog "" "$nettle_libs" ; then
3203             LIBS="$nettle_libs $LIBS"
3204             QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3205             if test -z "$gcrypt"; then
3206                gcrypt="no"
3207             fi
3208             pass="yes"
3209         fi
3210     fi
3211     if test "$pass" = "yes"
3212     then
3213         cat > $TMPC << EOF
3214 #include <nettle/xts.h>
3215 int main(void) {
3216   return 0;
3217 }
3218 EOF
3219         if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3220             nettle_xts=yes
3221             qemu_private_xts=no
3222         fi
3223     fi
3224     if test "$pass" = "no" && test "$nettle" = "yes"; then
3225         feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3226     else
3227         nettle="$pass"
3228     fi
3229 fi
3230
3231 if test "$gcrypt" != "no"; then
3232     pass="no"
3233     if has_libgcrypt; then
3234         gcrypt_cflags=$(libgcrypt-config --cflags)
3235         gcrypt_libs=$(libgcrypt-config --libs)
3236         # Debian has removed -lgpg-error from libgcrypt-config
3237         # as it "spreads unnecessary dependencies" which in
3238         # turn breaks static builds...
3239         if test "$static" = "yes"
3240         then
3241             gcrypt_libs="$gcrypt_libs -lgpg-error"
3242         fi
3243
3244         # Link test to make sure the given libraries work (e.g for static).
3245         write_c_skeleton
3246         if compile_prog "" "$gcrypt_libs" ; then
3247             LIBS="$gcrypt_libs $LIBS"
3248             QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3249             pass="yes"
3250         fi
3251     fi
3252     if test "$pass" = "yes"; then
3253         gcrypt="yes"
3254         cat > $TMPC << EOF
3255 #include <gcrypt.h>
3256 int main(void) {
3257   gcry_mac_hd_t handle;
3258   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3259                 GCRY_MAC_FLAG_SECURE, NULL);
3260   return 0;
3261 }
3262 EOF
3263         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3264             gcrypt_hmac=yes
3265         fi
3266         cat > $TMPC << EOF
3267 #include <gcrypt.h>
3268 int main(void) {
3269   gcry_cipher_hd_t handle;
3270   gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3271   return 0;
3272 }
3273 EOF
3274         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3275             gcrypt_xts=yes
3276             qemu_private_xts=no
3277         fi
3278     elif test "$gcrypt" = "yes"; then
3279         feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3280     else
3281         gcrypt="no"
3282     fi
3283 fi
3284
3285
3286 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3287 then
3288     error_exit "Only one of gcrypt & nettle can be enabled"
3289 fi
3290
3291 ##########################################
3292 # libtasn1 - only for the TLS creds/session test suite
3293
3294 tasn1=yes
3295 tasn1_cflags=""
3296 tasn1_libs=""
3297 if $pkg_config --exists "libtasn1"; then
3298     tasn1_cflags=$($pkg_config --cflags libtasn1)
3299     tasn1_libs=$($pkg_config --libs libtasn1)
3300 else
3301     tasn1=no
3302 fi
3303
3304
3305 ##########################################
3306 # PAM probe
3307
3308 if test "$auth_pam" != "no"; then
3309     cat > $TMPC <<EOF
3310 #include <security/pam_appl.h>
3311 #include <stdio.h>
3312 int main(void) {
3313    const char *service_name = "qemu";
3314    const char *user = "frank";
3315    const struct pam_conv pam_conv = { 0 };
3316    pam_handle_t *pamh = NULL;
3317    pam_start(service_name, user, &pam_conv, &pamh);
3318    return 0;
3319 }
3320 EOF
3321     if compile_prog "" "-lpam" ; then
3322         auth_pam=yes
3323     else
3324         if test "$auth_pam" = "yes"; then
3325             feature_not_found "PAM" "Install PAM development package"
3326         else
3327             auth_pam=no
3328         fi
3329     fi
3330 fi
3331
3332 ##########################################
3333 # getifaddrs (for tests/test-io-channel-socket )
3334
3335 have_ifaddrs_h=yes
3336 if ! check_include "ifaddrs.h" ; then
3337   have_ifaddrs_h=no
3338 fi
3339
3340 #########################################
3341 # libdrm check
3342 have_drm_h=no
3343 if check_include "libdrm/drm.h" ; then
3344     have_drm_h=yes
3345 fi
3346
3347 #########################################
3348 # sys/signal.h check
3349 have_sys_signal_h=no
3350 if check_include "sys/signal.h" ; then
3351   have_sys_signal_h=yes
3352 fi
3353
3354 ##########################################
3355 # VTE probe
3356
3357 if test "$vte" != "no"; then
3358     vteminversion="0.32.0"
3359     if $pkg_config --exists "vte-2.91"; then
3360       vtepackage="vte-2.91"
3361     else
3362       vtepackage="vte-2.90"
3363     fi
3364     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3365         vte_cflags=$($pkg_config --cflags $vtepackage)
3366         vte_libs=$($pkg_config --libs $vtepackage)
3367         vteversion=$($pkg_config --modversion $vtepackage)
3368         vte="yes"
3369     elif test "$vte" = "yes"; then
3370         feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3371     else
3372         vte="no"
3373     fi
3374 fi
3375
3376 ##########################################
3377 # RDMA needs OpenFabrics libraries
3378 if test "$rdma" != "no" ; then
3379   cat > $TMPC <<EOF
3380 #include <rdma/rdma_cma.h>
3381 int main(void) { return 0; }
3382 EOF
3383   rdma_libs="-lrdmacm -libverbs -libumad"
3384   if compile_prog "" "$rdma_libs" ; then
3385     rdma="yes"
3386   else
3387     if test "$rdma" = "yes" ; then
3388         error_exit \
3389             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3390             " Your options:" \
3391             "  (1) Fast: Install infiniband packages (devel) from your distro." \
3392             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3393             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3394     fi
3395     rdma="no"
3396   fi
3397 fi
3398
3399 ##########################################
3400 # PVRDMA detection
3401
3402 cat > $TMPC <<EOF &&
3403 #include <sys/mman.h>
3404
3405 int
3406 main(void)
3407 {
3408     char buf = 0;
3409     void *addr = &buf;
3410     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3411
3412     return 0;
3413 }
3414 EOF
3415
3416 if test "$rdma" = "yes" ; then
3417     case "$pvrdma" in
3418     "")
3419         if compile_prog "" ""; then
3420             pvrdma="yes"
3421         else
3422             pvrdma="no"
3423         fi
3424         ;;
3425     "yes")
3426         if ! compile_prog "" ""; then
3427             error_exit "PVRDMA is not supported since mremap is not implemented"
3428         fi
3429         pvrdma="yes"
3430         ;;
3431     "no")
3432         pvrdma="no"
3433         ;;
3434     esac
3435 else
3436     if test "$pvrdma" = "yes" ; then
3437         error_exit "PVRDMA requires rdma suppport"
3438     fi
3439     pvrdma="no"
3440 fi
3441
3442 # Let's see if enhanced reg_mr is supported
3443 if test "$pvrdma" = "yes" ; then
3444
3445 cat > $TMPC <<EOF &&
3446 #include <infiniband/verbs.h>
3447
3448 int
3449 main(void)
3450 {
3451     struct ibv_mr *mr;
3452     struct ibv_pd *pd = NULL;
3453     size_t length = 10;
3454     uint64_t iova = 0;
3455     int access = 0;
3456     void *addr = NULL;
3457
3458     mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3459
3460     ibv_dereg_mr(mr);
3461
3462     return 0;
3463 }
3464 EOF
3465     if ! compile_prog "" "-libverbs"; then
3466         QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3467     fi
3468 fi
3469
3470 ##########################################
3471 # xfsctl() probe, used for file-posix.c
3472 if test "$xfs" != "no" ; then
3473   cat > $TMPC << EOF
3474 #include <stddef.h>  /* NULL */
3475 #include <xfs/xfs.h>
3476 int main(void)
3477 {
3478     xfsctl(NULL, 0, 0, NULL);
3479     return 0;
3480 }
3481 EOF
3482   if compile_prog "" "" ; then
3483     xfs="yes"
3484   else
3485     if test "$xfs" = "yes" ; then
3486       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3487     fi
3488     xfs=no
3489   fi
3490 fi
3491
3492 ##########################################
3493 # vde libraries probe
3494 if test "$vde" != "no" ; then
3495   vde_libs="-lvdeplug"
3496   cat > $TMPC << EOF
3497 #include <libvdeplug.h>
3498 int main(void)
3499 {
3500     struct vde_open_args a = {0, 0, 0};
3501     char s[] = "";
3502     vde_open(s, s, &a);
3503     return 0;
3504 }
3505 EOF
3506   if compile_prog "" "$vde_libs" ; then
3507     vde=yes
3508   else
3509     if test "$vde" = "yes" ; then
3510       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3511     fi
3512     vde=no
3513   fi
3514 fi
3515
3516 ##########################################
3517 # netmap support probe
3518 # Apart from looking for netmap headers, we make sure that the host API version
3519 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3520 # a minor/major version number. Minor new features will be marked with values up
3521 # to 15, and if something happens that requires a change to the backend we will
3522 # move above 15, submit the backend fixes and modify this two bounds.
3523 if test "$netmap" != "no" ; then
3524   cat > $TMPC << EOF
3525 #include <inttypes.h>
3526 #include <net/if.h>
3527 #include <net/netmap.h>
3528 #include <net/netmap_user.h>
3529 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3530 #error
3531 #endif
3532 int main(void) { return 0; }
3533 EOF
3534   if compile_prog "" "" ; then
3535     netmap=yes
3536   else
3537     if test "$netmap" = "yes" ; then
3538       feature_not_found "netmap"
3539     fi
3540     netmap=no
3541   fi
3542 fi
3543
3544 ##########################################
3545 # libcap-ng library probe
3546 if test "$cap_ng" != "no" ; then
3547   cap_libs="-lcap-ng"
3548   cat > $TMPC << EOF
3549 #include <cap-ng.h>
3550 int main(void)
3551 {
3552     capng_capability_to_name(CAPNG_EFFECTIVE);
3553     return 0;
3554 }
3555 EOF
3556   if compile_prog "" "$cap_libs" ; then
3557     cap_ng=yes
3558   else
3559     if test "$cap_ng" = "yes" ; then
3560       feature_not_found "cap_ng" "Install libcap-ng devel"
3561     fi
3562     cap_ng=no
3563   fi
3564 fi
3565
3566 ##########################################
3567 # Sound support libraries probe
3568
3569 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3570 for drv in $audio_drv_list; do
3571     case $drv in
3572     alsa | try-alsa)
3573     if $pkg_config alsa --exists; then
3574         alsa_libs=$($pkg_config alsa --libs)
3575         alsa_cflags=$($pkg_config alsa --cflags)
3576         alsa=yes
3577         if test "$drv" = "try-alsa"; then
3578             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3579         fi
3580     else
3581         if test "$drv" = "try-alsa"; then
3582             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3583         else
3584             error_exit "$drv check failed" \
3585                 "Make sure to have the $drv libs and headers installed."
3586         fi
3587     fi
3588     ;;
3589
3590     pa | try-pa)
3591     if $pkg_config libpulse --exists; then
3592         libpulse=yes
3593         pulse_libs=$($pkg_config libpulse --libs)
3594         pulse_cflags=$($pkg_config libpulse --cflags)
3595         if test "$drv" = "try-pa"; then
3596             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3597         fi
3598     else
3599         if test "$drv" = "try-pa"; then
3600             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3601         else
3602             error_exit "$drv check failed" \
3603                 "Make sure to have the $drv libs and headers installed."
3604         fi
3605     fi
3606     ;;
3607
3608     sdl)
3609     if test "$sdl" = "no"; then
3610         error_exit "sdl not found or disabled, can not use sdl audio driver"
3611     fi
3612     ;;
3613
3614     try-sdl)
3615     if test "$sdl" = "no"; then
3616         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3617     else
3618         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3619     fi
3620     ;;
3621
3622     coreaudio)
3623       coreaudio_libs="-framework CoreAudio"
3624     ;;
3625
3626     dsound)
3627       dsound_libs="-lole32 -ldxguid"
3628       audio_win_int="yes"
3629     ;;
3630
3631     oss)
3632       oss_libs="$oss_lib"
3633     ;;
3634
3635     jack | try-jack)
3636     if $pkg_config jack --exists; then
3637         libjack=yes
3638         jack_libs=$($pkg_config jack --libs)
3639         if test "$drv" = "try-jack"; then
3640             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3641         fi
3642     else
3643         if test "$drv" = "try-jack"; then
3644             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3645         else
3646             error_exit "$drv check failed" \
3647                 "Make sure to have the $drv libs and headers installed."
3648         fi
3649     fi
3650     ;;
3651
3652     *)
3653     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3654         error_exit "Unknown driver '$drv' selected" \
3655             "Possible drivers are: $audio_possible_drivers"
3656     }
3657     ;;
3658     esac
3659 done
3660
3661 ##########################################
3662 # BrlAPI probe
3663
3664 if test "$brlapi" != "no" ; then
3665   brlapi_libs="-lbrlapi"
3666   cat > $TMPC << EOF
3667 #include <brlapi.h>
3668 #include <stddef.h>
3669 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3670 EOF
3671   if compile_prog "" "$brlapi_libs" ; then
3672     brlapi=yes
3673   else
3674     if test "$brlapi" = "yes" ; then
3675       feature_not_found "brlapi" "Install brlapi devel"
3676     fi
3677     brlapi=no
3678   fi
3679 fi
3680
3681 ##########################################
3682 # iconv probe
3683 if test "$iconv" != "no" ; then
3684   cat > $TMPC << EOF
3685 #include <iconv.h>
3686 int main(void) {
3687   iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3688   return conv != (iconv_t) -1;
3689 }
3690 EOF
3691   iconv_prefix_list="/usr/local:/usr"
3692   iconv_lib_list=":-liconv"
3693   IFS=:
3694   for iconv_prefix in $iconv_prefix_list; do
3695     IFS=:
3696     iconv_cflags="-I$iconv_prefix/include"
3697     iconv_ldflags="-L$iconv_prefix/lib"
3698     for iconv_link in $iconv_lib_list; do
3699       unset IFS
3700       iconv_lib="$iconv_ldflags $iconv_link"
3701       echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3702       if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3703         iconv_found=yes
3704         break
3705       fi
3706     done
3707     if test "$iconv_found" = yes ; then
3708       break
3709     fi
3710   done
3711   if test "$iconv_found" = "yes" ; then
3712     iconv=yes
3713   else
3714     if test "$iconv" = "yes" ; then
3715       feature_not_found "iconv" "Install iconv devel"
3716     fi
3717     iconv=no
3718   fi
3719 fi
3720
3721 ##########################################
3722 # curses probe
3723 if test "$iconv" = "no" ; then
3724   # curses will need iconv
3725   curses=no
3726 fi
3727 if test "$curses" != "no" ; then
3728   if test "$mingw32" = "yes" ; then
3729     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3730     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3731   else
3732     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3733     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3734   fi
3735   curses_found=no
3736   cat > $TMPC << EOF
3737 #include <locale.h>
3738 #include <curses.h>
3739 #include <wchar.h>
3740 #include <langinfo.h>
3741 int main(void) {
3742   const char *codeset;
3743   wchar_t wch = L'w';
3744   setlocale(LC_ALL, "");
3745   resize_term(0, 0);
3746   addwstr(L"wide chars\n");
3747   addnwstr(&wch, 1);
3748   add_wch(WACS_DEGREE);
3749   codeset = nl_langinfo(CODESET);
3750   return codeset != 0;
3751 }
3752 EOF
3753   IFS=:
3754   for curses_inc in $curses_inc_list; do
3755     # Make sure we get the wide character prototypes
3756     curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3757     IFS=:
3758     for curses_lib in $curses_lib_list; do
3759       unset IFS
3760       if compile_prog "$curses_inc" "$curses_lib" ; then
3761         curses_found=yes
3762         break
3763       fi
3764     done
3765     if test "$curses_found" = yes ; then
3766       break
3767     fi
3768   done
3769   unset IFS
3770   if test "$curses_found" = "yes" ; then
3771     curses=yes
3772   else
3773     if test "$curses" = "yes" ; then
3774       feature_not_found "curses" "Install ncurses devel"
3775     fi
3776     curses=no
3777   fi
3778 fi
3779
3780 ##########################################
3781 # curl probe
3782 if test "$curl" != "no" ; then
3783   if $pkg_config libcurl --exists; then
3784     curlconfig="$pkg_config libcurl"
3785   else
3786     curlconfig=curl-config
3787   fi
3788   cat > $TMPC << EOF
3789 #include <curl/curl.h>
3790 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3791 EOF
3792   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3793   curl_libs=$($curlconfig --libs 2>/dev/null)
3794   if compile_prog "$curl_cflags" "$curl_libs" ; then
3795     curl=yes
3796   else
3797     if test "$curl" = "yes" ; then
3798       feature_not_found "curl" "Install libcurl devel"
3799     fi
3800     curl=no
3801   fi
3802 fi # test "$curl"
3803
3804 ##########################################
3805 # glib support probe
3806
3807 glib_req_ver=2.48
3808 glib_modules=gthread-2.0
3809 if test "$modules" = yes; then
3810     glib_modules="$glib_modules gmodule-export-2.0"
3811 fi
3812 if test "$plugins" = yes; then
3813     glib_modules="$glib_modules gmodule-2.0"
3814 fi
3815
3816 # This workaround is required due to a bug in pkg-config file for glib as it
3817 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3818
3819 if test "$static" = yes && test "$mingw32" = yes; then
3820     QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3821 fi
3822
3823 for i in $glib_modules; do
3824     if $pkg_config --atleast-version=$glib_req_ver $i; then
3825         glib_cflags=$($pkg_config --cflags $i)
3826         glib_libs=$($pkg_config --libs $i)
3827         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3828         LIBS="$glib_libs $LIBS"
3829     else
3830         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3831     fi
3832 done
3833
3834 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3835     gio=yes
3836     gio_cflags=$($pkg_config --cflags gio-2.0)
3837     gio_libs=$($pkg_config --libs gio-2.0)
3838     gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3839     if [ ! -x "$gdbus_codegen" ]; then
3840         gdbus_codegen=
3841     fi
3842 else
3843     gio=no
3844 fi
3845
3846 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3847     gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3848     gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3849 fi
3850
3851 # Sanity check that the current size_t matches the
3852 # size that glib thinks it should be. This catches
3853 # problems on multi-arch where people try to build
3854 # 32-bit QEMU while pointing at 64-bit glib headers
3855 cat > $TMPC <<EOF
3856 #include <glib.h>
3857 #include <unistd.h>
3858
3859 #define QEMU_BUILD_BUG_ON(x) \
3860   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3861
3862 int main(void) {
3863    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3864    return 0;
3865 }
3866 EOF
3867
3868 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3869     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3870                "You probably need to set PKG_CONFIG_LIBDIR"\
3871                "to point to the right pkg-config files for your"\
3872                "build target"
3873 fi
3874
3875 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3876 cat > $TMPC << EOF
3877 #include <glib.h>
3878 int main(void) { return 0; }
3879 EOF
3880 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3881     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3882         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3883         QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
3884     fi
3885 fi
3886
3887 # Silence clang warnings triggered by glib < 2.57.2
3888 cat > $TMPC << EOF
3889 #include <glib.h>
3890 typedef struct Foo {
3891     int i;
3892 } Foo;
3893 static void foo_free(Foo *f)
3894 {
3895     g_free(f);
3896 }
3897 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3898 int main(void) { return 0; }
3899 EOF
3900 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3901     if cc_has_warning_flag "-Wno-unused-function"; then
3902         glib_cflags="$glib_cflags -Wno-unused-function"
3903         CFLAGS="$CFLAGS -Wno-unused-function"
3904     fi
3905 fi
3906
3907 ##########################################
3908 # SHA command probe for modules
3909 if test "$modules" = yes; then
3910     shacmd_probe="sha1sum sha1 shasum"
3911     for c in $shacmd_probe; do
3912         if has $c; then
3913             shacmd="$c"
3914             break
3915         fi
3916     done
3917     if test "$shacmd" = ""; then
3918         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3919     fi
3920 fi
3921
3922 ##########################################
3923 # libmpathpersist probe
3924
3925 if test "$mpath" != "no" ; then
3926   # probe for the new API
3927   cat > $TMPC <<EOF
3928 #include <libudev.h>
3929 #include <mpath_persist.h>
3930 unsigned mpath_mx_alloc_len = 1024;
3931 int logsink;
3932 static struct config *multipath_conf;
3933 extern struct udev *udev;
3934 extern struct config *get_multipath_config(void);
3935 extern void put_multipath_config(struct config *conf);
3936 struct udev *udev;
3937 struct config *get_multipath_config(void) { return multipath_conf; }
3938 void put_multipath_config(struct config *conf) { }
3939
3940 int main(void) {
3941     udev = udev_new();
3942     multipath_conf = mpath_lib_init();
3943     return 0;
3944 }
3945 EOF
3946   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3947     mpathpersist=yes
3948     mpathpersist_new_api=yes
3949   else
3950     # probe for the old API
3951     cat > $TMPC <<EOF
3952 #include <libudev.h>
3953 #include <mpath_persist.h>
3954 unsigned mpath_mx_alloc_len = 1024;
3955 int logsink;
3956 int main(void) {
3957     struct udev *udev = udev_new();
3958     mpath_lib_init(udev);
3959     return 0;
3960 }
3961 EOF
3962     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3963       mpathpersist=yes
3964       mpathpersist_new_api=no
3965     else
3966       mpathpersist=no
3967     fi
3968   fi
3969 else
3970   mpathpersist=no
3971 fi
3972
3973 ##########################################
3974 # pthread probe
3975 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3976
3977 pthread=no
3978 cat > $TMPC << EOF
3979 #include <pthread.h>
3980 static void *f(void *p) { return NULL; }
3981 int main(void) {
3982   pthread_t thread;
3983   pthread_create(&thread, 0, f, 0);
3984   return 0;
3985 }
3986 EOF
3987 if compile_prog "" "" ; then
3988   pthread=yes
3989 else
3990   for pthread_lib in $PTHREADLIBS_LIST; do
3991     if compile_prog "" "$pthread_lib" ; then
3992       pthread=yes
3993       found=no
3994       for lib_entry in $LIBS; do
3995         if test "$lib_entry" = "$pthread_lib"; then
3996           found=yes
3997           break
3998         fi
3999       done
4000       if test "$found" = "no"; then
4001         LIBS="$pthread_lib $LIBS"
4002       fi
4003       PTHREAD_LIB="$pthread_lib"
4004       break
4005     fi
4006   done
4007 fi
4008
4009 if test "$mingw32" != yes && test "$pthread" = no; then
4010   error_exit "pthread check failed" \
4011       "Make sure to have the pthread libs and headers installed."
4012 fi
4013
4014 # check for pthread_setname_np with thread id
4015 pthread_setname_np_w_tid=no
4016 cat > $TMPC << EOF
4017 #include <pthread.h>
4018
4019 static void *f(void *p) { return NULL; }
4020 int main(void)
4021 {
4022     pthread_t thread;
4023     pthread_create(&thread, 0, f, 0);
4024     pthread_setname_np(thread, "QEMU");
4025     return 0;
4026 }
4027 EOF
4028 if compile_prog "" "$pthread_lib" ; then
4029   pthread_setname_np_w_tid=yes
4030 fi
4031
4032 # check for pthread_setname_np without thread id
4033 pthread_setname_np_wo_tid=no
4034 cat > $TMPC << EOF
4035 #include <pthread.h>
4036
4037 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4038 int main(void)
4039 {
4040     pthread_t thread;
4041     pthread_create(&thread, 0, f, 0);
4042     return 0;
4043 }
4044 EOF
4045 if compile_prog "" "$pthread_lib" ; then
4046   pthread_setname_np_wo_tid=yes
4047 fi
4048
4049 ##########################################
4050 # rbd probe
4051 if test "$rbd" != "no" ; then
4052   cat > $TMPC <<EOF
4053 #include <stdio.h>
4054 #include <rbd/librbd.h>
4055 int main(void) {
4056     rados_t cluster;
4057     rados_create(&cluster, NULL);
4058     return 0;
4059 }
4060 EOF
4061   rbd_libs="-lrbd -lrados"
4062   if compile_prog "" "$rbd_libs" ; then
4063     rbd=yes
4064   else
4065     if test "$rbd" = "yes" ; then
4066       feature_not_found "rados block device" "Install librbd/ceph devel"
4067     fi
4068     rbd=no
4069   fi
4070 fi
4071
4072 ##########################################
4073 # libssh probe
4074 if test "$libssh" != "no" ; then
4075   if $pkg_config --exists libssh; then
4076     libssh_cflags=$($pkg_config libssh --cflags)
4077     libssh_libs=$($pkg_config libssh --libs)
4078     libssh=yes
4079   else
4080     if test "$libssh" = "yes" ; then
4081       error_exit "libssh required for --enable-libssh"
4082     fi
4083     libssh=no
4084   fi
4085 fi
4086
4087 ##########################################
4088 # Check for libssh 0.8
4089 # This is done like this instead of using the LIBSSH_VERSION_* and
4090 # SSH_VERSION_* macros because some distributions in the past shipped
4091 # snapshots of the future 0.8 from Git, and those snapshots did not
4092 # have updated version numbers (still referring to 0.7.0).
4093
4094 if test "$libssh" = "yes"; then
4095   cat > $TMPC <<EOF
4096 #include <libssh/libssh.h>
4097 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4098 EOF
4099   if compile_prog "$libssh_cflags" "$libssh_libs"; then
4100     libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4101   fi
4102 fi
4103
4104 ##########################################
4105 # linux-aio probe
4106
4107 if test "$linux_aio" != "no" ; then
4108   cat > $TMPC <<EOF
4109 #include <libaio.h>
4110 #include <sys/eventfd.h>
4111 #include <stddef.h>
4112 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4113 EOF
4114   if compile_prog "" "-laio" ; then
4115     linux_aio=yes
4116   else
4117     if test "$linux_aio" = "yes" ; then
4118       feature_not_found "linux AIO" "Install libaio devel"
4119     fi
4120     linux_aio=no
4121   fi
4122 fi
4123 ##########################################
4124 # linux-io-uring probe
4125
4126 if test "$linux_io_uring" != "no" ; then
4127   if $pkg_config liburing; then
4128     linux_io_uring_cflags=$($pkg_config --cflags liburing)
4129     linux_io_uring_libs=$($pkg_config --libs liburing)
4130     linux_io_uring=yes
4131
4132     # io_uring is used in libqemuutil.a where per-file -libs variables are not
4133     # seen by programs linking the archive.  It's not ideal, but just add the
4134     # library dependency globally.
4135     LIBS="$linux_io_uring_libs $LIBS"
4136   else
4137     if test "$linux_io_uring" = "yes" ; then
4138       feature_not_found "linux io_uring" "Install liburing devel"
4139     fi
4140     linux_io_uring=no
4141   fi
4142 fi
4143
4144 ##########################################
4145 # TPM emulation is only on POSIX
4146
4147 if test "$tpm" = ""; then
4148   if test "$mingw32" = "yes"; then
4149     tpm=no
4150   else
4151     tpm=yes
4152   fi
4153 elif test "$tpm" = "yes"; then
4154   if test "$mingw32" = "yes" ; then
4155     error_exit "TPM emulation only available on POSIX systems"
4156   fi
4157 fi
4158
4159 ##########################################
4160 # attr probe
4161
4162 libattr_libs=
4163 if test "$attr" != "no" ; then
4164   cat > $TMPC <<EOF
4165 #include <stdio.h>
4166 #include <sys/types.h>
4167 #ifdef CONFIG_LIBATTR
4168 #include <attr/xattr.h>
4169 #else
4170 #include <sys/xattr.h>
4171 #endif
4172 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4173 EOF
4174   if compile_prog "" "" ; then
4175     attr=yes
4176   # Older distros have <attr/xattr.h>, and need -lattr:
4177   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4178     attr=yes
4179     libattr_libs="-lattr"
4180     LIBS="$libattr_libs $LIBS"
4181     libattr=yes
4182   else
4183     if test "$attr" = "yes" ; then
4184       feature_not_found "ATTR" "Install libc6 or libattr devel"
4185     fi
4186     attr=no
4187   fi
4188 fi
4189
4190 ##########################################
4191 # iovec probe
4192 cat > $TMPC <<EOF
4193 #include <sys/types.h>
4194 #include <sys/uio.h>
4195 #include <unistd.h>
4196 int main(void) { return sizeof(struct iovec); }
4197 EOF
4198 iovec=no
4199 if compile_prog "" "" ; then
4200   iovec=yes
4201 fi
4202
4203 ##########################################
4204 # preadv probe
4205 cat > $TMPC <<EOF
4206 #include <sys/types.h>
4207 #include <sys/uio.h>
4208 #include <unistd.h>
4209 int main(void) { return preadv(0, 0, 0, 0); }
4210 EOF
4211 preadv=no
4212 if compile_prog "" "" ; then
4213   preadv=yes
4214 fi
4215
4216 ##########################################
4217 # fdt probe
4218 # fdt support is mandatory for at least some target architectures,
4219 # so insist on it if we're building those system emulators.
4220 fdt_required=no
4221 for target in $target_list; do
4222   case $target in
4223     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4224       fdt_required=yes
4225     ;;
4226   esac
4227 done
4228
4229 if test "$fdt_required" = "yes"; then
4230   if test "$fdt" = "no"; then
4231     error_exit "fdt disabled but some requested targets require it." \
4232       "You can turn off fdt only if you also disable all the system emulation" \
4233       "targets which need it (by specifying a cut down --target-list)."
4234   fi
4235   fdt=yes
4236 elif test "$fdt" != "yes" ; then
4237   fdt=no
4238 fi
4239
4240 # fdt is only required when building softmmu targets
4241 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4242     fdt="no"
4243 fi
4244
4245 if test "$fdt" != "no" ; then
4246   fdt_libs="-lfdt"
4247   # explicitly check for libfdt_env.h as it is missing in some stable installs
4248   # and test for required functions to make sure we are on a version >= 1.4.2
4249   cat > $TMPC << EOF
4250 #include <libfdt.h>
4251 #include <libfdt_env.h>
4252 int main(void) { fdt_check_full(NULL, 0); return 0; }
4253 EOF
4254   if compile_prog "" "$fdt_libs" ; then
4255     # system DTC is good - use it
4256     fdt=system
4257   else
4258       # have GIT checkout, so activate dtc submodule
4259       if test -e "${source_path}/.git" ; then
4260           git_submodules="${git_submodules} dtc"
4261       fi
4262       if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4263           fdt=git
4264           mkdir -p dtc
4265           if [ "$pwd_is_source_path" != "y" ] ; then
4266               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4267           fi
4268           fdt_cflags="-I${source_path}/dtc/libfdt"
4269           fdt_ldflags="-L$PWD/dtc/libfdt"
4270           fdt_libs="$fdt_libs"
4271       elif test "$fdt" = "yes" ; then
4272           # Not a git build & no libfdt found, prompt for system install
4273           error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4274                      "Please install the DTC (libfdt) devel package"
4275       else
4276           # don't have and don't want
4277           fdt_libs=
4278           fdt=no
4279       fi
4280   fi
4281 fi
4282
4283 ##########################################
4284 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4285
4286 gbm="no"
4287 if $pkg_config gbm; then
4288     gbm_cflags="$($pkg_config --cflags gbm)"
4289     gbm_libs="$($pkg_config --libs gbm)"
4290     gbm="yes"
4291 fi
4292
4293 if test "$opengl" != "no" ; then
4294   opengl_pkgs="epoxy gbm"
4295   if $pkg_config $opengl_pkgs; then
4296     opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4297     opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4298     opengl=yes
4299     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4300         gtk_gl="yes"
4301     fi
4302     QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4303   else
4304     if test "$opengl" = "yes" ; then
4305       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4306     fi
4307     opengl_cflags=""
4308     opengl_libs=""
4309     opengl=no
4310   fi
4311 fi
4312
4313 if test "$opengl" = "yes"; then
4314   cat > $TMPC << EOF
4315 #include <epoxy/egl.h>
4316 #ifndef EGL_MESA_image_dma_buf_export
4317 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4318 #endif
4319 int main(void) { return 0; }
4320 EOF
4321   if compile_prog "" "" ; then
4322     opengl_dmabuf=yes
4323   fi
4324 fi
4325
4326 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4327   for target in $target_list; do
4328     case $target in
4329       lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4330         need_x11=yes
4331       ;;
4332     esac
4333   done
4334 fi
4335
4336 ##########################################
4337 # libxml2 probe
4338 if test "$libxml2" != "no" ; then
4339     if $pkg_config --exists libxml-2.0; then
4340         libxml2="yes"
4341         libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4342         libxml2_libs=$($pkg_config --libs libxml-2.0)
4343     else
4344         if test "$libxml2" = "yes"; then
4345             feature_not_found "libxml2" "Install libxml2 devel"
4346         fi
4347         libxml2="no"
4348     fi
4349 fi
4350
4351 ##########################################
4352 # glusterfs probe
4353 if test "$glusterfs" != "no" ; then
4354   if $pkg_config --atleast-version=3 glusterfs-api; then
4355     glusterfs="yes"
4356     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4357     glusterfs_libs=$($pkg_config --libs glusterfs-api)
4358     if $pkg_config --atleast-version=4 glusterfs-api; then
4359       glusterfs_xlator_opt="yes"
4360     fi
4361     if $pkg_config --atleast-version=5 glusterfs-api; then
4362       glusterfs_discard="yes"
4363     fi
4364     if $pkg_config --atleast-version=6 glusterfs-api; then
4365       glusterfs_fallocate="yes"
4366       glusterfs_zerofill="yes"
4367     fi
4368     cat > $TMPC << EOF
4369 #include <glusterfs/api/glfs.h>
4370
4371 int
4372 main(void)
4373 {
4374         /* new glfs_ftruncate() passes two additional args */
4375         return glfs_ftruncate(NULL, 0, NULL, NULL);
4376 }
4377 EOF
4378     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4379       glusterfs_ftruncate_has_stat="yes"
4380     fi
4381     cat > $TMPC << EOF
4382 #include <glusterfs/api/glfs.h>
4383
4384 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4385 static void
4386 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4387 {}
4388
4389 int
4390 main(void)
4391 {
4392         glfs_io_cbk iocb = &glusterfs_iocb;
4393         iocb(NULL, 0 , NULL, NULL, NULL);
4394         return 0;
4395 }
4396 EOF
4397     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4398       glusterfs_iocb_has_stat="yes"
4399     fi
4400   else
4401     if test "$glusterfs" = "yes" ; then
4402       feature_not_found "GlusterFS backend support" \
4403           "Install glusterfs-api devel >= 3"
4404     fi
4405     glusterfs="no"
4406   fi
4407 fi
4408
4409 # Check for inotify functions when we are building linux-user
4410 # emulator.  This is done because older glibc versions don't
4411 # have syscall stubs for these implemented.  In that case we
4412 # don't provide them even if kernel supports them.
4413 #
4414 inotify=no
4415 cat > $TMPC << EOF
4416 #include <sys/inotify.h>
4417
4418 int
4419 main(void)
4420 {
4421         /* try to start inotify */
4422         return inotify_init();
4423 }
4424 EOF
4425 if compile_prog "" "" ; then
4426   inotify=yes
4427 fi
4428
4429 inotify1=no
4430 cat > $TMPC << EOF
4431 #include <sys/inotify.h>
4432
4433 int
4434 main(void)
4435 {
4436     /* try to start inotify */
4437     return inotify_init1(0);
4438 }
4439 EOF
4440 if compile_prog "" "" ; then
4441   inotify1=yes
4442 fi
4443
4444 # check if pipe2 is there
4445 pipe2=no
4446 cat > $TMPC << EOF
4447 #include <unistd.h>
4448 #include <fcntl.h>
4449
4450 int main(void)
4451 {
4452     int pipefd[2];
4453     return pipe2(pipefd, O_CLOEXEC);
4454 }
4455 EOF
4456 if compile_prog "" "" ; then
4457   pipe2=yes
4458 fi
4459
4460 # check if accept4 is there
4461 accept4=no
4462 cat > $TMPC << EOF
4463 #include <sys/socket.h>
4464 #include <stddef.h>
4465
4466 int main(void)
4467 {
4468     accept4(0, NULL, NULL, SOCK_CLOEXEC);
4469     return 0;
4470 }
4471 EOF
4472 if compile_prog "" "" ; then
4473   accept4=yes
4474 fi
4475
4476 # check if tee/splice is there. vmsplice was added same time.
4477 splice=no
4478 cat > $TMPC << EOF
4479 #include <unistd.h>
4480 #include <fcntl.h>
4481 #include <limits.h>
4482
4483 int main(void)
4484 {
4485     int len, fd = 0;
4486     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4487     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4488     return 0;
4489 }
4490 EOF
4491 if compile_prog "" "" ; then
4492   splice=yes
4493 fi
4494
4495 ##########################################
4496 # libnuma probe
4497
4498 if test "$numa" != "no" ; then
4499   cat > $TMPC << EOF
4500 #include <numa.h>
4501 int main(void) { return numa_available(); }
4502 EOF
4503
4504   if compile_prog "" "-lnuma" ; then
4505     numa=yes
4506     numa_libs="-lnuma"
4507   else
4508     if test "$numa" = "yes" ; then
4509       feature_not_found "numa" "install numactl devel"
4510     fi
4511     numa=no
4512   fi
4513 fi
4514
4515 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4516     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4517     exit 1
4518 fi
4519
4520 # Even if malloc_trim() is available, these non-libc memory allocators
4521 # do not support it.
4522 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4523     if test "$malloc_trim" = "yes" ; then
4524         echo "Disabling malloc_trim with non-libc memory allocator"
4525     fi
4526     malloc_trim="no"
4527 fi
4528
4529 #######################################
4530 # malloc_trim
4531
4532 if test "$malloc_trim" != "no" ; then
4533     cat > $TMPC << EOF
4534 #include <malloc.h>
4535 int main(void) { malloc_trim(0); return 0; }
4536 EOF
4537     if compile_prog "" "" ; then
4538         malloc_trim="yes"
4539     else
4540         malloc_trim="no"
4541     fi
4542 fi
4543
4544 ##########################################
4545 # tcmalloc probe
4546
4547 if test "$tcmalloc" = "yes" ; then
4548   cat > $TMPC << EOF
4549 #include <stdlib.h>
4550 int main(void) {
4551     void *tmp = malloc(1);
4552     if (tmp != NULL) {
4553         return 0;
4554     }
4555     return 1;
4556 }
4557 EOF
4558
4559   if compile_prog "" "-ltcmalloc" ; then
4560     LIBS="-ltcmalloc $LIBS"
4561   else
4562     feature_not_found "tcmalloc" "install gperftools devel"
4563   fi
4564 fi
4565
4566 ##########################################
4567 # jemalloc probe
4568
4569 if test "$jemalloc" = "yes" ; then
4570   cat > $TMPC << EOF
4571 #include <stdlib.h>
4572 int main(void) {
4573     void *tmp = malloc(1);
4574     if (tmp != NULL) {
4575         return 0;
4576     }
4577     return 1;
4578 }
4579 EOF
4580
4581   if compile_prog "" "-ljemalloc" ; then
4582     LIBS="-ljemalloc $LIBS"
4583   else
4584     feature_not_found "jemalloc" "install jemalloc devel"
4585   fi
4586 fi
4587
4588 ##########################################
4589 # signalfd probe
4590 signalfd="no"
4591 cat > $TMPC << EOF
4592 #include <unistd.h>
4593 #include <sys/syscall.h>
4594 #include <signal.h>
4595 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4596 EOF
4597
4598 if compile_prog "" "" ; then
4599   signalfd=yes
4600 fi
4601
4602 # check if optreset global is declared by <getopt.h>
4603 optreset="no"
4604 cat > $TMPC << EOF
4605 #include <getopt.h>
4606 int main(void) { return optreset; }
4607 EOF
4608
4609 if compile_prog "" "" ; then
4610   optreset=yes
4611 fi
4612
4613 # check if eventfd is supported
4614 eventfd=no
4615 cat > $TMPC << EOF
4616 #include <sys/eventfd.h>
4617
4618 int main(void)
4619 {
4620     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4621 }
4622 EOF
4623 if compile_prog "" "" ; then
4624   eventfd=yes
4625 fi
4626
4627 # check if memfd is supported
4628 memfd=no
4629 cat > $TMPC << EOF
4630 #include <sys/mman.h>
4631
4632 int main(void)
4633 {
4634     return memfd_create("foo", MFD_ALLOW_SEALING);
4635 }
4636 EOF
4637 if compile_prog "" "" ; then
4638   memfd=yes
4639 fi
4640
4641 # check for usbfs
4642 have_usbfs=no
4643 if test "$linux_user" = "yes"; then
4644   cat > $TMPC << EOF
4645 #include <linux/usbdevice_fs.h>
4646
4647 #ifndef USBDEVFS_GET_CAPABILITIES
4648 #error "USBDEVFS_GET_CAPABILITIES undefined"
4649 #endif
4650
4651 #ifndef USBDEVFS_DISCONNECT_CLAIM
4652 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4653 #endif
4654
4655 int main(void)
4656 {
4657     return 0;
4658 }
4659 EOF
4660   if compile_prog "" ""; then
4661     have_usbfs=yes
4662   fi
4663 fi
4664
4665 # check for fallocate
4666 fallocate=no
4667 cat > $TMPC << EOF
4668 #include <fcntl.h>
4669
4670 int main(void)
4671 {
4672     fallocate(0, 0, 0, 0);
4673     return 0;
4674 }
4675 EOF
4676 if compile_prog "" "" ; then
4677   fallocate=yes
4678 fi
4679
4680 # check for fallocate hole punching
4681 fallocate_punch_hole=no
4682 cat > $TMPC << EOF
4683 #include <fcntl.h>
4684 #include <linux/falloc.h>
4685
4686 int main(void)
4687 {
4688     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4689     return 0;
4690 }
4691 EOF
4692 if compile_prog "" "" ; then
4693   fallocate_punch_hole=yes
4694 fi
4695
4696 # check that fallocate supports range zeroing inside the file
4697 fallocate_zero_range=no
4698 cat > $TMPC << EOF
4699 #include <fcntl.h>
4700 #include <linux/falloc.h>
4701
4702 int main(void)
4703 {
4704     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4705     return 0;
4706 }
4707 EOF
4708 if compile_prog "" "" ; then
4709   fallocate_zero_range=yes
4710 fi
4711
4712 # check for posix_fallocate
4713 posix_fallocate=no
4714 cat > $TMPC << EOF
4715 #include <fcntl.h>
4716
4717 int main(void)
4718 {
4719     posix_fallocate(0, 0, 0);
4720     return 0;
4721 }
4722 EOF
4723 if compile_prog "" "" ; then
4724     posix_fallocate=yes
4725 fi
4726
4727 # check for sync_file_range
4728 sync_file_range=no
4729 cat > $TMPC << EOF
4730 #include <fcntl.h>
4731
4732 int main(void)
4733 {
4734     sync_file_range(0, 0, 0, 0);
4735     return 0;
4736 }
4737 EOF
4738 if compile_prog "" "" ; then
4739   sync_file_range=yes
4740 fi
4741
4742 # check for linux/fiemap.h and FS_IOC_FIEMAP
4743 fiemap=no
4744 cat > $TMPC << EOF
4745 #include <sys/ioctl.h>
4746 #include <linux/fs.h>
4747 #include <linux/fiemap.h>
4748
4749 int main(void)
4750 {
4751     ioctl(0, FS_IOC_FIEMAP, 0);
4752     return 0;
4753 }
4754 EOF
4755 if compile_prog "" "" ; then
4756   fiemap=yes
4757 fi
4758
4759 # check for dup3
4760 dup3=no
4761 cat > $TMPC << EOF
4762 #include <unistd.h>
4763
4764 int main(void)
4765 {
4766     dup3(0, 0, 0);
4767     return 0;
4768 }
4769 EOF
4770 if compile_prog "" "" ; then
4771   dup3=yes
4772 fi
4773
4774 # check for ppoll support
4775 ppoll=no
4776 cat > $TMPC << EOF
4777 #include <poll.h>
4778
4779 int main(void)
4780 {
4781     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4782     ppoll(&pfd, 1, 0, 0);
4783     return 0;
4784 }
4785 EOF
4786 if compile_prog "" "" ; then
4787   ppoll=yes
4788 fi
4789
4790 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4791 prctl_pr_set_timerslack=no
4792 cat > $TMPC << EOF
4793 #include <sys/prctl.h>
4794
4795 int main(void)
4796 {