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