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