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