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