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