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