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