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