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