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