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