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