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