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