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