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