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