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