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