xref: /openbmc/qemu/configure (revision a89f364a)
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        libs_qga="$pthread_lib $libs_qga"
3468      fi
3469      PTHREAD_LIB="$pthread_lib"
3470      break
3471    fi
3472  done
3473fi
3474
3475if test "$mingw32" != yes -a "$pthread" = no; then
3476  error_exit "pthread check failed" \
3477      "Make sure to have the pthread libs and headers installed."
3478fi
3479
3480# check for pthread_setname_np
3481pthread_setname_np=no
3482cat > $TMPC << EOF
3483#include <pthread.h>
3484
3485static void *f(void *p) { return NULL; }
3486int main(void)
3487{
3488    pthread_t thread;
3489    pthread_create(&thread, 0, f, 0);
3490    pthread_setname_np(thread, "QEMU");
3491    return 0;
3492}
3493EOF
3494if compile_prog "" "$pthread_lib" ; then
3495  pthread_setname_np=yes
3496fi
3497
3498##########################################
3499# rbd probe
3500if test "$rbd" != "no" ; then
3501  cat > $TMPC <<EOF
3502#include <stdio.h>
3503#include <rbd/librbd.h>
3504int main(void) {
3505    rados_t cluster;
3506    rados_create(&cluster, NULL);
3507    return 0;
3508}
3509EOF
3510  rbd_libs="-lrbd -lrados"
3511  if compile_prog "" "$rbd_libs" ; then
3512    rbd=yes
3513  else
3514    if test "$rbd" = "yes" ; then
3515      feature_not_found "rados block device" "Install librbd/ceph devel"
3516    fi
3517    rbd=no
3518  fi
3519fi
3520
3521##########################################
3522# libssh2 probe
3523min_libssh2_version=1.2.8
3524if test "$libssh2" != "no" ; then
3525  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3526    libssh2_cflags=$($pkg_config libssh2 --cflags)
3527    libssh2_libs=$($pkg_config libssh2 --libs)
3528    libssh2=yes
3529  else
3530    if test "$libssh2" = "yes" ; then
3531      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3532    fi
3533    libssh2=no
3534  fi
3535fi
3536
3537##########################################
3538# libssh2_sftp_fsync probe
3539
3540if test "$libssh2" = "yes"; then
3541  cat > $TMPC <<EOF
3542#include <stdio.h>
3543#include <libssh2.h>
3544#include <libssh2_sftp.h>
3545int main(void) {
3546    LIBSSH2_SESSION *session;
3547    LIBSSH2_SFTP *sftp;
3548    LIBSSH2_SFTP_HANDLE *sftp_handle;
3549    session = libssh2_session_init ();
3550    sftp = libssh2_sftp_init (session);
3551    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3552    libssh2_sftp_fsync (sftp_handle);
3553    return 0;
3554}
3555EOF
3556  # libssh2_cflags/libssh2_libs defined in previous test.
3557  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3558    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3559  fi
3560fi
3561
3562##########################################
3563# linux-aio probe
3564
3565if test "$linux_aio" != "no" ; then
3566  cat > $TMPC <<EOF
3567#include <libaio.h>
3568#include <sys/eventfd.h>
3569#include <stddef.h>
3570int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3571EOF
3572  if compile_prog "" "-laio" ; then
3573    linux_aio=yes
3574  else
3575    if test "$linux_aio" = "yes" ; then
3576      feature_not_found "linux AIO" "Install libaio devel"
3577    fi
3578    linux_aio=no
3579  fi
3580fi
3581
3582##########################################
3583# TPM passthrough is only on x86 Linux
3584
3585if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3586  tpm_passthrough=$tpm
3587else
3588  tpm_passthrough=no
3589fi
3590
3591# TPM emulator is for all posix systems
3592if test "$mingw32" != "yes"; then
3593  tpm_emulator=$tpm
3594else
3595  tpm_emulator=no
3596fi
3597##########################################
3598# attr probe
3599
3600if test "$attr" != "no" ; then
3601  cat > $TMPC <<EOF
3602#include <stdio.h>
3603#include <sys/types.h>
3604#ifdef CONFIG_LIBATTR
3605#include <attr/xattr.h>
3606#else
3607#include <sys/xattr.h>
3608#endif
3609int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3610EOF
3611  if compile_prog "" "" ; then
3612    attr=yes
3613  # Older distros have <attr/xattr.h>, and need -lattr:
3614  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3615    attr=yes
3616    LIBS="-lattr $LIBS"
3617    libattr=yes
3618  else
3619    if test "$attr" = "yes" ; then
3620      feature_not_found "ATTR" "Install libc6 or libattr devel"
3621    fi
3622    attr=no
3623  fi
3624fi
3625
3626##########################################
3627# iovec probe
3628cat > $TMPC <<EOF
3629#include <sys/types.h>
3630#include <sys/uio.h>
3631#include <unistd.h>
3632int main(void) { return sizeof(struct iovec); }
3633EOF
3634iovec=no
3635if compile_prog "" "" ; then
3636  iovec=yes
3637fi
3638
3639##########################################
3640# preadv probe
3641cat > $TMPC <<EOF
3642#include <sys/types.h>
3643#include <sys/uio.h>
3644#include <unistd.h>
3645int main(void) { return preadv(0, 0, 0, 0); }
3646EOF
3647preadv=no
3648if compile_prog "" "" ; then
3649  preadv=yes
3650fi
3651
3652##########################################
3653# fdt probe
3654# fdt support is mandatory for at least some target architectures,
3655# so insist on it if we're building those system emulators.
3656fdt_required=no
3657for target in $target_list; do
3658  case $target in
3659    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3660      fdt_required=yes
3661    ;;
3662  esac
3663done
3664
3665if test "$fdt_required" = "yes"; then
3666  if test "$fdt" = "no"; then
3667    error_exit "fdt disabled but some requested targets require it." \
3668      "You can turn off fdt only if you also disable all the system emulation" \
3669      "targets which need it (by specifying a cut down --target-list)."
3670  fi
3671  fdt=yes
3672fi
3673
3674if test "$fdt" != "no" ; then
3675  fdt_libs="-lfdt"
3676  # explicitly check for libfdt_env.h as it is missing in some stable installs
3677  # and test for required functions to make sure we are on a version >= 1.4.2
3678  cat > $TMPC << EOF
3679#include <libfdt.h>
3680#include <libfdt_env.h>
3681int main(void) { fdt_first_subnode(0, 0); return 0; }
3682EOF
3683  if compile_prog "" "$fdt_libs" ; then
3684    # system DTC is good - use it
3685    fdt=yes
3686  else
3687      # have GIT checkout, so activate dtc submodule
3688      if test -e "${source_path}/.git" ; then
3689          git_submodules="${git_submodules} dtc"
3690      fi
3691      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3692          fdt=yes
3693          dtc_internal="yes"
3694          mkdir -p dtc
3695          if [ "$pwd_is_source_path" != "y" ] ; then
3696              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3697              symlink "$source_path/dtc/scripts" "dtc/scripts"
3698          fi
3699          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3700          fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3701      elif test "$fdt" = "yes" ; then
3702          # Not a git build & no libfdt found, prompt for system install
3703          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3704                     "Please install the DTC (libfdt) devel package"
3705      else
3706          # don't have and don't want
3707          fdt_libs=
3708          fdt=no
3709      fi
3710  fi
3711fi
3712
3713libs_softmmu="$libs_softmmu $fdt_libs"
3714
3715##########################################
3716# opengl probe (for sdl2, gtk, milkymist-tmu2)
3717
3718if test "$opengl" != "no" ; then
3719  opengl_pkgs="epoxy libdrm gbm"
3720  if $pkg_config $opengl_pkgs x11; then
3721    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3722    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3723    opengl=yes
3724    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3725        gtk_gl="yes"
3726    fi
3727    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3728  else
3729    if test "$opengl" = "yes" ; then
3730      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3731    fi
3732    opengl_cflags=""
3733    opengl_libs=""
3734    opengl=no
3735  fi
3736fi
3737
3738if test "$opengl" = "yes"; then
3739  cat > $TMPC << EOF
3740#include <epoxy/egl.h>
3741#ifndef EGL_MESA_image_dma_buf_export
3742# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3743#endif
3744int main(void) { return 0; }
3745EOF
3746  if compile_prog "" "" ; then
3747    opengl_dmabuf=yes
3748  fi
3749fi
3750
3751
3752##########################################
3753# glusterfs probe
3754if test "$glusterfs" != "no" ; then
3755  if $pkg_config --atleast-version=3 glusterfs-api; then
3756    glusterfs="yes"
3757    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3758    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3759    if $pkg_config --atleast-version=4 glusterfs-api; then
3760      glusterfs_xlator_opt="yes"
3761    fi
3762    if $pkg_config --atleast-version=5 glusterfs-api; then
3763      glusterfs_discard="yes"
3764    fi
3765    if $pkg_config --atleast-version=6 glusterfs-api; then
3766      glusterfs_fallocate="yes"
3767      glusterfs_zerofill="yes"
3768    fi
3769  else
3770    if test "$glusterfs" = "yes" ; then
3771      feature_not_found "GlusterFS backend support" \
3772          "Install glusterfs-api devel >= 3"
3773    fi
3774    glusterfs="no"
3775  fi
3776fi
3777
3778# Check for inotify functions when we are building linux-user
3779# emulator.  This is done because older glibc versions don't
3780# have syscall stubs for these implemented.  In that case we
3781# don't provide them even if kernel supports them.
3782#
3783inotify=no
3784cat > $TMPC << EOF
3785#include <sys/inotify.h>
3786
3787int
3788main(void)
3789{
3790	/* try to start inotify */
3791	return inotify_init();
3792}
3793EOF
3794if compile_prog "" "" ; then
3795  inotify=yes
3796fi
3797
3798inotify1=no
3799cat > $TMPC << EOF
3800#include <sys/inotify.h>
3801
3802int
3803main(void)
3804{
3805    /* try to start inotify */
3806    return inotify_init1(0);
3807}
3808EOF
3809if compile_prog "" "" ; then
3810  inotify1=yes
3811fi
3812
3813# check if pipe2 is there
3814pipe2=no
3815cat > $TMPC << EOF
3816#include <unistd.h>
3817#include <fcntl.h>
3818
3819int main(void)
3820{
3821    int pipefd[2];
3822    return pipe2(pipefd, O_CLOEXEC);
3823}
3824EOF
3825if compile_prog "" "" ; then
3826  pipe2=yes
3827fi
3828
3829# check if accept4 is there
3830accept4=no
3831cat > $TMPC << EOF
3832#include <sys/socket.h>
3833#include <stddef.h>
3834
3835int main(void)
3836{
3837    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3838    return 0;
3839}
3840EOF
3841if compile_prog "" "" ; then
3842  accept4=yes
3843fi
3844
3845# check if tee/splice is there. vmsplice was added same time.
3846splice=no
3847cat > $TMPC << EOF
3848#include <unistd.h>
3849#include <fcntl.h>
3850#include <limits.h>
3851
3852int main(void)
3853{
3854    int len, fd = 0;
3855    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3856    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3857    return 0;
3858}
3859EOF
3860if compile_prog "" "" ; then
3861  splice=yes
3862fi
3863
3864##########################################
3865# libnuma probe
3866
3867if test "$numa" != "no" ; then
3868  cat > $TMPC << EOF
3869#include <numa.h>
3870int main(void) { return numa_available(); }
3871EOF
3872
3873  if compile_prog "" "-lnuma" ; then
3874    numa=yes
3875    libs_softmmu="-lnuma $libs_softmmu"
3876  else
3877    if test "$numa" = "yes" ; then
3878      feature_not_found "numa" "install numactl devel"
3879    fi
3880    numa=no
3881  fi
3882fi
3883
3884if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3885    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3886    exit 1
3887fi
3888
3889# Even if malloc_trim() is available, these non-libc memory allocators
3890# do not support it.
3891if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3892    if test "$malloc_trim" = "yes" ; then
3893        echo "Disabling malloc_trim with non-libc memory allocator"
3894    fi
3895    malloc_trim="no"
3896fi
3897
3898#######################################
3899# malloc_trim
3900
3901if test "$malloc_trim" != "no" ; then
3902    cat > $TMPC << EOF
3903#include <malloc.h>
3904int main(void) { malloc_trim(0); return 0; }
3905EOF
3906    if compile_prog "" "" ; then
3907        malloc_trim="yes"
3908    else
3909        malloc_trim="no"
3910    fi
3911fi
3912
3913##########################################
3914# tcmalloc probe
3915
3916if test "$tcmalloc" = "yes" ; then
3917  cat > $TMPC << EOF
3918#include <stdlib.h>
3919int main(void) { malloc(1); return 0; }
3920EOF
3921
3922  if compile_prog "" "-ltcmalloc" ; then
3923    LIBS="-ltcmalloc $LIBS"
3924  else
3925    feature_not_found "tcmalloc" "install gperftools devel"
3926  fi
3927fi
3928
3929##########################################
3930# jemalloc probe
3931
3932if test "$jemalloc" = "yes" ; then
3933  cat > $TMPC << EOF
3934#include <stdlib.h>
3935int main(void) { malloc(1); return 0; }
3936EOF
3937
3938  if compile_prog "" "-ljemalloc" ; then
3939    LIBS="-ljemalloc $LIBS"
3940  else
3941    feature_not_found "jemalloc" "install jemalloc devel"
3942  fi
3943fi
3944
3945##########################################
3946# signalfd probe
3947signalfd="no"
3948cat > $TMPC << EOF
3949#include <unistd.h>
3950#include <sys/syscall.h>
3951#include <signal.h>
3952int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3953EOF
3954
3955if compile_prog "" "" ; then
3956  signalfd=yes
3957fi
3958
3959# check if eventfd is supported
3960eventfd=no
3961cat > $TMPC << EOF
3962#include <sys/eventfd.h>
3963
3964int main(void)
3965{
3966    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3967}
3968EOF
3969if compile_prog "" "" ; then
3970  eventfd=yes
3971fi
3972
3973# check if memfd is supported
3974memfd=no
3975cat > $TMPC << EOF
3976#include <sys/mman.h>
3977
3978int main(void)
3979{
3980    return memfd_create("foo", MFD_ALLOW_SEALING);
3981}
3982EOF
3983if compile_prog "" "" ; then
3984  memfd=yes
3985fi
3986
3987
3988
3989# check for fallocate
3990fallocate=no
3991cat > $TMPC << EOF
3992#include <fcntl.h>
3993
3994int main(void)
3995{
3996    fallocate(0, 0, 0, 0);
3997    return 0;
3998}
3999EOF
4000if compile_prog "" "" ; then
4001  fallocate=yes
4002fi
4003
4004# check for fallocate hole punching
4005fallocate_punch_hole=no
4006cat > $TMPC << EOF
4007#include <fcntl.h>
4008#include <linux/falloc.h>
4009
4010int main(void)
4011{
4012    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4013    return 0;
4014}
4015EOF
4016if compile_prog "" "" ; then
4017  fallocate_punch_hole=yes
4018fi
4019
4020# check that fallocate supports range zeroing inside the file
4021fallocate_zero_range=no
4022cat > $TMPC << EOF
4023#include <fcntl.h>
4024#include <linux/falloc.h>
4025
4026int main(void)
4027{
4028    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4029    return 0;
4030}
4031EOF
4032if compile_prog "" "" ; then
4033  fallocate_zero_range=yes
4034fi
4035
4036# check for posix_fallocate
4037posix_fallocate=no
4038cat > $TMPC << EOF
4039#include <fcntl.h>
4040
4041int main(void)
4042{
4043    posix_fallocate(0, 0, 0);
4044    return 0;
4045}
4046EOF
4047if compile_prog "" "" ; then
4048    posix_fallocate=yes
4049fi
4050
4051# check for sync_file_range
4052sync_file_range=no
4053cat > $TMPC << EOF
4054#include <fcntl.h>
4055
4056int main(void)
4057{
4058    sync_file_range(0, 0, 0, 0);
4059    return 0;
4060}
4061EOF
4062if compile_prog "" "" ; then
4063  sync_file_range=yes
4064fi
4065
4066# check for linux/fiemap.h and FS_IOC_FIEMAP
4067fiemap=no
4068cat > $TMPC << EOF
4069#include <sys/ioctl.h>
4070#include <linux/fs.h>
4071#include <linux/fiemap.h>
4072
4073int main(void)
4074{
4075    ioctl(0, FS_IOC_FIEMAP, 0);
4076    return 0;
4077}
4078EOF
4079if compile_prog "" "" ; then
4080  fiemap=yes
4081fi
4082
4083# check for dup3
4084dup3=no
4085cat > $TMPC << EOF
4086#include <unistd.h>
4087
4088int main(void)
4089{
4090    dup3(0, 0, 0);
4091    return 0;
4092}
4093EOF
4094if compile_prog "" "" ; then
4095  dup3=yes
4096fi
4097
4098# check for ppoll support
4099ppoll=no
4100cat > $TMPC << EOF
4101#include <poll.h>
4102
4103int main(void)
4104{
4105    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4106    ppoll(&pfd, 1, 0, 0);
4107    return 0;
4108}
4109EOF
4110if compile_prog "" "" ; then
4111  ppoll=yes
4112fi
4113
4114# check for prctl(PR_SET_TIMERSLACK , ... ) support
4115prctl_pr_set_timerslack=no
4116cat > $TMPC << EOF
4117#include <sys/prctl.h>
4118
4119int main(void)
4120{
4121    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4122    return 0;
4123}
4124EOF
4125if compile_prog "" "" ; then
4126  prctl_pr_set_timerslack=yes
4127fi
4128
4129# check for epoll support
4130epoll=no
4131cat > $TMPC << EOF
4132#include <sys/epoll.h>
4133
4134int main(void)
4135{
4136    epoll_create(0);
4137    return 0;
4138}
4139EOF
4140if compile_prog "" "" ; then
4141  epoll=yes
4142fi
4143
4144# epoll_create1 is a later addition
4145# so we must check separately for its presence
4146epoll_create1=no
4147cat > $TMPC << EOF
4148#include <sys/epoll.h>
4149
4150int main(void)
4151{
4152    /* Note that we use epoll_create1 as a value, not as
4153     * a function being called. This is necessary so that on
4154     * old SPARC glibc versions where the function was present in
4155     * the library but not declared in the header file we will
4156     * fail the configure check. (Otherwise we will get a compiler
4157     * warning but not an error, and will proceed to fail the
4158     * qemu compile where we compile with -Werror.)
4159     */
4160    return (int)(uintptr_t)&epoll_create1;
4161}
4162EOF
4163if compile_prog "" "" ; then
4164  epoll_create1=yes
4165fi
4166
4167# check for sendfile support
4168sendfile=no
4169cat > $TMPC << EOF
4170#include <sys/sendfile.h>
4171
4172int main(void)
4173{
4174    return sendfile(0, 0, 0, 0);
4175}
4176EOF
4177if compile_prog "" "" ; then
4178  sendfile=yes
4179fi
4180
4181# check for timerfd support (glibc 2.8 and newer)
4182timerfd=no
4183cat > $TMPC << EOF
4184#include <sys/timerfd.h>
4185
4186int main(void)
4187{
4188    return(timerfd_create(CLOCK_REALTIME, 0));
4189}
4190EOF
4191if compile_prog "" "" ; then
4192  timerfd=yes
4193fi
4194
4195# check for setns and unshare support
4196setns=no
4197cat > $TMPC << EOF
4198#include <sched.h>
4199
4200int main(void)
4201{
4202    int ret;
4203    ret = setns(0, 0);
4204    ret = unshare(0);
4205    return ret;
4206}
4207EOF
4208if compile_prog "" "" ; then
4209  setns=yes
4210fi
4211
4212# clock_adjtime probe
4213clock_adjtime=no
4214cat > $TMPC <<EOF
4215#include <time.h>
4216
4217int main(void)
4218{
4219    return clock_adjtime(0, 0);
4220}
4221EOF
4222clock_adjtime=no
4223if compile_prog "" "" ; then
4224  clock_adjtime=yes
4225fi
4226
4227# syncfs probe
4228syncfs=no
4229cat > $TMPC <<EOF
4230#include <unistd.h>
4231
4232int main(void)
4233{
4234    return syncfs(0);
4235}
4236EOF
4237syncfs=no
4238if compile_prog "" "" ; then
4239  syncfs=yes
4240fi
4241
4242# Check if tools are available to build documentation.
4243if test "$docs" != "no" ; then
4244  if has makeinfo && has pod2man; then
4245    docs=yes
4246  else
4247    if test "$docs" = "yes" ; then
4248      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4249    fi
4250    docs=no
4251  fi
4252fi
4253
4254# Search for bswap_32 function
4255byteswap_h=no
4256cat > $TMPC << EOF
4257#include <byteswap.h>
4258int main(void) { return bswap_32(0); }
4259EOF
4260if compile_prog "" "" ; then
4261  byteswap_h=yes
4262fi
4263
4264# Search for bswap32 function
4265bswap_h=no
4266cat > $TMPC << EOF
4267#include <sys/endian.h>
4268#include <sys/types.h>
4269#include <machine/bswap.h>
4270int main(void) { return bswap32(0); }
4271EOF
4272if compile_prog "" "" ; then
4273  bswap_h=yes
4274fi
4275
4276##########################################
4277# Do we have libiscsi >= 1.9.0
4278if test "$libiscsi" != "no" ; then
4279  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4280    libiscsi="yes"
4281    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4282    libiscsi_libs=$($pkg_config --libs libiscsi)
4283  else
4284    if test "$libiscsi" = "yes" ; then
4285      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4286    fi
4287    libiscsi="no"
4288  fi
4289fi
4290
4291##########################################
4292# Do we need libm
4293cat > $TMPC << EOF
4294#include <math.h>
4295int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4296EOF
4297if compile_prog "" "" ; then
4298  :
4299elif compile_prog "" "-lm" ; then
4300  LIBS="-lm $LIBS"
4301  libs_qga="-lm $libs_qga"
4302else
4303  error_exit "libm check failed"
4304fi
4305
4306##########################################
4307# Do we need librt
4308# uClibc provides 2 versions of clock_gettime(), one with realtime
4309# support and one without. This means that the clock_gettime() don't
4310# need -lrt. We still need it for timer_create() so we check for this
4311# function in addition.
4312cat > $TMPC <<EOF
4313#include <signal.h>
4314#include <time.h>
4315int main(void) {
4316  timer_create(CLOCK_REALTIME, NULL, NULL);
4317  return clock_gettime(CLOCK_REALTIME, NULL);
4318}
4319EOF
4320
4321if compile_prog "" "" ; then
4322  :
4323# we need pthread for static linking. use previous pthread test result
4324elif compile_prog "" "$pthread_lib -lrt" ; then
4325  LIBS="$LIBS -lrt"
4326  libs_qga="$libs_qga -lrt"
4327fi
4328
4329if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4330        "$haiku" != "yes" ; then
4331    libs_softmmu="-lutil $libs_softmmu"
4332fi
4333
4334##########################################
4335# spice probe
4336if test "$spice" != "no" ; then
4337  cat > $TMPC << EOF
4338#include <spice.h>
4339int main(void) { spice_server_new(); return 0; }
4340EOF
4341  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4342  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4343  if $pkg_config --atleast-version=0.12.0 spice-server && \
4344     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4345     compile_prog "$spice_cflags" "$spice_libs" ; then
4346    spice="yes"
4347    libs_softmmu="$libs_softmmu $spice_libs"
4348    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4349    spice_protocol_version=$($pkg_config --modversion spice-protocol)
4350    spice_server_version=$($pkg_config --modversion spice-server)
4351  else
4352    if test "$spice" = "yes" ; then
4353      feature_not_found "spice" \
4354          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4355    fi
4356    spice="no"
4357  fi
4358fi
4359
4360# check for smartcard support
4361if test "$smartcard" != "no"; then
4362    if $pkg_config libcacard; then
4363        libcacard_cflags=$($pkg_config --cflags libcacard)
4364        libcacard_libs=$($pkg_config --libs libcacard)
4365        smartcard="yes"
4366    else
4367        if test "$smartcard" = "yes"; then
4368            feature_not_found "smartcard" "Install libcacard devel"
4369        fi
4370        smartcard="no"
4371    fi
4372fi
4373
4374# check for libusb
4375if test "$libusb" != "no" ; then
4376    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4377        libusb="yes"
4378        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4379        libusb_libs=$($pkg_config --libs libusb-1.0)
4380    else
4381        if test "$libusb" = "yes"; then
4382            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4383        fi
4384        libusb="no"
4385    fi
4386fi
4387
4388# check for usbredirparser for usb network redirection support
4389if test "$usb_redir" != "no" ; then
4390    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4391        usb_redir="yes"
4392        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4393        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4394    else
4395        if test "$usb_redir" = "yes"; then
4396            feature_not_found "usb-redir" "Install usbredir devel"
4397        fi
4398        usb_redir="no"
4399    fi
4400fi
4401
4402##########################################
4403# check if we have VSS SDK headers for win
4404
4405if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4406  case "$vss_win32_sdk" in
4407    "")   vss_win32_include="-isystem $source_path" ;;
4408    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4409          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4410          vss_win32_include="-isystem $source_path/.sdk/vss"
4411	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4412	  ;;
4413    *)    vss_win32_include="-isystem $vss_win32_sdk"
4414  esac
4415  cat > $TMPC << EOF
4416#define __MIDL_user_allocate_free_DEFINED__
4417#include <inc/win2003/vss.h>
4418int main(void) { return VSS_CTX_BACKUP; }
4419EOF
4420  if compile_prog "$vss_win32_include" "" ; then
4421    guest_agent_with_vss="yes"
4422    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4423    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4424    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4425  else
4426    if test "$vss_win32_sdk" != "" ; then
4427      echo "ERROR: Please download and install Microsoft VSS SDK:"
4428      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4429      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4430      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4431      echo "ERROR: The headers are extracted in the directory \`inc'."
4432      feature_not_found "VSS support"
4433    fi
4434    guest_agent_with_vss="no"
4435  fi
4436fi
4437
4438##########################################
4439# lookup Windows platform SDK (if not specified)
4440# The SDK is needed only to build .tlb (type library) file of guest agent
4441# VSS provider from the source. It is usually unnecessary because the
4442# pre-compiled .tlb file is included.
4443
4444if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4445  if test -z "$win_sdk"; then
4446    programfiles="$PROGRAMFILES"
4447    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4448    if test -n "$programfiles"; then
4449      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4450    else
4451      feature_not_found "Windows SDK"
4452    fi
4453  elif test "$win_sdk" = "no"; then
4454    win_sdk=""
4455  fi
4456fi
4457
4458##########################################
4459# check if mingw environment provides a recent ntddscsi.h
4460if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4461  cat > $TMPC << EOF
4462#include <windows.h>
4463#include <ntddscsi.h>
4464int main(void) {
4465#if !defined(IOCTL_SCSI_GET_ADDRESS)
4466#error Missing required ioctl definitions
4467#endif
4468  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4469  return addr.Lun;
4470}
4471EOF
4472  if compile_prog "" "" ; then
4473    guest_agent_ntddscsi=yes
4474    libs_qga="-lsetupapi $libs_qga"
4475  fi
4476fi
4477
4478##########################################
4479# virgl renderer probe
4480
4481if test "$virglrenderer" != "no" ; then
4482  cat > $TMPC << EOF
4483#include <virglrenderer.h>
4484int main(void) { virgl_renderer_poll(); return 0; }
4485EOF
4486  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4487  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4488  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4489     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4490    virglrenderer="yes"
4491  else
4492    if test "$virglrenderer" = "yes" ; then
4493      feature_not_found "virglrenderer"
4494    fi
4495    virglrenderer="no"
4496  fi
4497fi
4498
4499##########################################
4500# capstone
4501
4502case "$capstone" in
4503  "" | yes)
4504    if $pkg_config capstone; then
4505      capstone=system
4506    elif test -e "${source_path}/.git" ; then
4507      capstone=git
4508    elif test -e "${source_path}/capstone/Makefile" ; then
4509      capstone=internal
4510    elif test -z "$capstone" ; then
4511      capstone=no
4512    else
4513      feature_not_found "capstone" "Install capstone devel or git submodule"
4514    fi
4515    ;;
4516
4517  system)
4518    if ! $pkg_config capstone; then
4519      feature_not_found "capstone" "Install capstone devel"
4520    fi
4521    ;;
4522esac
4523
4524case "$capstone" in
4525  git | internal)
4526    if test "$capstone" = git; then
4527      git_submodules="${git_submodules} capstone"
4528    fi
4529    mkdir -p capstone
4530    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4531    if test "$mingw32" = "yes"; then
4532      LIBCAPSTONE=capstone.lib
4533    else
4534      LIBCAPSTONE=libcapstone.a
4535    fi
4536    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4537    ;;
4538
4539  system)
4540    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4541    LIBS="$($pkg_config --libs capstone) $LIBS"
4542    ;;
4543
4544  no)
4545    ;;
4546  *)
4547    error_exit "Unknown state for capstone: $capstone"
4548    ;;
4549esac
4550
4551##########################################
4552# check if we have fdatasync
4553
4554fdatasync=no
4555cat > $TMPC << EOF
4556#include <unistd.h>
4557int main(void) {
4558#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4559return fdatasync(0);
4560#else
4561#error Not supported
4562#endif
4563}
4564EOF
4565if compile_prog "" "" ; then
4566    fdatasync=yes
4567fi
4568
4569##########################################
4570# check if we have madvise
4571
4572madvise=no
4573cat > $TMPC << EOF
4574#include <sys/types.h>
4575#include <sys/mman.h>
4576#include <stddef.h>
4577int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4578EOF
4579if compile_prog "" "" ; then
4580    madvise=yes
4581fi
4582
4583##########################################
4584# check if we have posix_madvise
4585
4586posix_madvise=no
4587cat > $TMPC << EOF
4588#include <sys/mman.h>
4589#include <stddef.h>
4590int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4591EOF
4592if compile_prog "" "" ; then
4593    posix_madvise=yes
4594fi
4595
4596##########################################
4597# check if we have posix_syslog
4598
4599posix_syslog=no
4600cat > $TMPC << EOF
4601#include <syslog.h>
4602int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4603EOF
4604if compile_prog "" "" ; then
4605    posix_syslog=yes
4606fi
4607
4608##########################################
4609# check if we have sem_timedwait
4610
4611sem_timedwait=no
4612cat > $TMPC << EOF
4613#include <semaphore.h>
4614int main(void) { return sem_timedwait(0, 0); }
4615EOF
4616if compile_prog "" "" ; then
4617    sem_timedwait=yes
4618fi
4619
4620##########################################
4621# check if trace backend exists
4622
4623$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4624if test "$?" -ne 0 ; then
4625  error_exit "invalid trace backends" \
4626      "Please choose supported trace backends."
4627fi
4628
4629##########################################
4630# For 'ust' backend, test if ust headers are present
4631if have_backend "ust"; then
4632  cat > $TMPC << EOF
4633#include <lttng/tracepoint.h>
4634int main(void) { return 0; }
4635EOF
4636  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4637    if $pkg_config lttng-ust --exists; then
4638      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4639    else
4640      lttng_ust_libs="-llttng-ust -ldl"
4641    fi
4642    if $pkg_config liburcu-bp --exists; then
4643      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4644    else
4645      urcu_bp_libs="-lurcu-bp"
4646    fi
4647
4648    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4649    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4650  else
4651    error_exit "Trace backend 'ust' missing lttng-ust header files"
4652  fi
4653fi
4654
4655##########################################
4656# For 'dtrace' backend, test if 'dtrace' command is present
4657if have_backend "dtrace"; then
4658  if ! has 'dtrace' ; then
4659    error_exit "dtrace command is not found in PATH $PATH"
4660  fi
4661  trace_backend_stap="no"
4662  if has 'stap' ; then
4663    trace_backend_stap="yes"
4664  fi
4665fi
4666
4667##########################################
4668# check and set a backend for coroutine
4669
4670# We prefer ucontext, but it's not always possible. The fallback
4671# is sigcontext. On Windows the only valid backend is the Windows
4672# specific one.
4673
4674ucontext_works=no
4675if test "$darwin" != "yes"; then
4676  cat > $TMPC << EOF
4677#include <ucontext.h>
4678#ifdef __stub_makecontext
4679#error Ignoring glibc stub makecontext which will always fail
4680#endif
4681int main(void) { makecontext(0, 0, 0); return 0; }
4682EOF
4683  if compile_prog "" "" ; then
4684    ucontext_works=yes
4685  fi
4686fi
4687
4688if test "$coroutine" = ""; then
4689  if test "$mingw32" = "yes"; then
4690    coroutine=win32
4691  elif test "$ucontext_works" = "yes"; then
4692    coroutine=ucontext
4693  else
4694    coroutine=sigaltstack
4695  fi
4696else
4697  case $coroutine in
4698  windows)
4699    if test "$mingw32" != "yes"; then
4700      error_exit "'windows' coroutine backend only valid for Windows"
4701    fi
4702    # Unfortunately the user visible backend name doesn't match the
4703    # coroutine-*.c filename for this case, so we have to adjust it here.
4704    coroutine=win32
4705    ;;
4706  ucontext)
4707    if test "$ucontext_works" != "yes"; then
4708      feature_not_found "ucontext"
4709    fi
4710    ;;
4711  sigaltstack)
4712    if test "$mingw32" = "yes"; then
4713      error_exit "only the 'windows' coroutine backend is valid for Windows"
4714    fi
4715    ;;
4716  *)
4717    error_exit "unknown coroutine backend $coroutine"
4718    ;;
4719  esac
4720fi
4721
4722if test "$coroutine_pool" = ""; then
4723  coroutine_pool=yes
4724fi
4725
4726if test "$debug_stack_usage" = "yes"; then
4727  if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4728    error_exit "stack usage debugging is not supported for $cpu"
4729  fi
4730  if test "$coroutine_pool" = "yes"; then
4731    echo "WARN: disabling coroutine pool for stack usage debugging"
4732    coroutine_pool=no
4733  fi
4734fi
4735
4736
4737##########################################
4738# check if we have open_by_handle_at
4739
4740open_by_handle_at=no
4741cat > $TMPC << EOF
4742#include <fcntl.h>
4743#if !defined(AT_EMPTY_PATH)
4744# error missing definition
4745#else
4746int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4747#endif
4748EOF
4749if compile_prog "" "" ; then
4750    open_by_handle_at=yes
4751fi
4752
4753########################################
4754# check if we have linux/magic.h
4755
4756linux_magic_h=no
4757cat > $TMPC << EOF
4758#include <linux/magic.h>
4759int main(void) {
4760  return 0;
4761}
4762EOF
4763if compile_prog "" "" ; then
4764    linux_magic_h=yes
4765fi
4766
4767########################################
4768# check whether we can disable warning option with a pragma (this is needed
4769# to silence warnings in the headers of some versions of external libraries).
4770# This test has to be compiled with -Werror as otherwise an unknown pragma is
4771# only a warning.
4772#
4773# If we can't selectively disable warning in the code, disable -Werror so that
4774# the build doesn't fail anyway.
4775
4776pragma_disable_unused_but_set=no
4777cat > $TMPC << EOF
4778#pragma GCC diagnostic push
4779#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4780#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4781#pragma GCC diagnostic pop
4782
4783int main(void) {
4784    return 0;
4785}
4786EOF
4787if compile_prog "-Werror" "" ; then
4788    pragma_diagnostic_available=yes
4789else
4790    werror=no
4791fi
4792
4793########################################
4794# check if we have valgrind/valgrind.h
4795
4796valgrind_h=no
4797cat > $TMPC << EOF
4798#include <valgrind/valgrind.h>
4799int main(void) {
4800  return 0;
4801}
4802EOF
4803if compile_prog "" "" ; then
4804    valgrind_h=yes
4805fi
4806
4807########################################
4808# check if environ is declared
4809
4810has_environ=no
4811cat > $TMPC << EOF
4812#include <unistd.h>
4813int main(void) {
4814    environ = 0;
4815    return 0;
4816}
4817EOF
4818if compile_prog "" "" ; then
4819    has_environ=yes
4820fi
4821
4822########################################
4823# check if cpuid.h is usable.
4824
4825cat > $TMPC << EOF
4826#include <cpuid.h>
4827int main(void) {
4828    unsigned a, b, c, d;
4829    int max = __get_cpuid_max(0, 0);
4830
4831    if (max >= 1) {
4832        __cpuid(1, a, b, c, d);
4833    }
4834
4835    if (max >= 7) {
4836        __cpuid_count(7, 0, a, b, c, d);
4837    }
4838
4839    return 0;
4840}
4841EOF
4842if compile_prog "" "" ; then
4843    cpuid_h=yes
4844fi
4845
4846##########################################
4847# avx2 optimization requirement check
4848#
4849# There is no point enabling this if cpuid.h is not usable,
4850# since we won't be able to select the new routines.
4851
4852if test $cpuid_h = yes; then
4853  cat > $TMPC << EOF
4854#pragma GCC push_options
4855#pragma GCC target("avx2")
4856#include <cpuid.h>
4857#include <immintrin.h>
4858static int bar(void *a) {
4859    __m256i x = *(__m256i *)a;
4860    return _mm256_testz_si256(x, x);
4861}
4862int main(int argc, char *argv[]) { return bar(argv[0]); }
4863EOF
4864  if compile_object "" ; then
4865    avx2_opt="yes"
4866  fi
4867fi
4868
4869########################################
4870# check if __[u]int128_t is usable.
4871
4872int128=no
4873cat > $TMPC << EOF
4874#if defined(__clang_major__) && defined(__clang_minor__)
4875# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4876#  error __int128_t does not work in CLANG before 3.2
4877# endif
4878#endif
4879__int128_t a;
4880__uint128_t b;
4881int main (void) {
4882  a = a + b;
4883  b = a * b;
4884  a = a * a;
4885  return 0;
4886}
4887EOF
4888if compile_prog "" "" ; then
4889    int128=yes
4890fi
4891
4892#########################################
4893# See if 128-bit atomic operations are supported.
4894
4895atomic128=no
4896if test "$int128" = "yes"; then
4897  cat > $TMPC << EOF
4898int main(void)
4899{
4900  unsigned __int128 x = 0, y = 0;
4901  y = __atomic_load_16(&x, 0);
4902  __atomic_store_16(&x, y, 0);
4903  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4904  return 0;
4905}
4906EOF
4907  if compile_prog "" "" ; then
4908    atomic128=yes
4909  fi
4910fi
4911
4912#########################################
4913# See if 64-bit atomic operations are supported.
4914# Note that without __atomic builtins, we can only
4915# assume atomic loads/stores max at pointer size.
4916
4917cat > $TMPC << EOF
4918#include <stdint.h>
4919int main(void)
4920{
4921  uint64_t x = 0, y = 0;
4922#ifdef __ATOMIC_RELAXED
4923  y = __atomic_load_8(&x, 0);
4924  __atomic_store_8(&x, y, 0);
4925  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4926  __atomic_exchange_8(&x, y, 0);
4927  __atomic_fetch_add_8(&x, y, 0);
4928#else
4929  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4930  __sync_lock_test_and_set(&x, y);
4931  __sync_val_compare_and_swap(&x, y, 0);
4932  __sync_fetch_and_add(&x, y);
4933#endif
4934  return 0;
4935}
4936EOF
4937if compile_prog "" "" ; then
4938  atomic64=yes
4939fi
4940
4941########################################
4942# check if getauxval is available.
4943
4944getauxval=no
4945cat > $TMPC << EOF
4946#include <sys/auxv.h>
4947int main(void) {
4948  return getauxval(AT_HWCAP) == 0;
4949}
4950EOF
4951if compile_prog "" "" ; then
4952    getauxval=yes
4953fi
4954
4955########################################
4956# check if ccache is interfering with
4957# semantic analysis of macros
4958
4959unset CCACHE_CPP2
4960ccache_cpp2=no
4961cat > $TMPC << EOF
4962static const int Z = 1;
4963#define fn() ({ Z; })
4964#define TAUT(X) ((X) == Z)
4965#define PAREN(X, Y) (X == Y)
4966#define ID(X) (X)
4967int main(int argc, char *argv[])
4968{
4969    int x = 0, y = 0;
4970    x = ID(x);
4971    x = fn();
4972    fn();
4973    if (PAREN(x, y)) return 0;
4974    if (TAUT(Z)) return 0;
4975    return 0;
4976}
4977EOF
4978
4979if ! compile_object "-Werror"; then
4980    ccache_cpp2=yes
4981fi
4982
4983#################################################
4984# clang does not support glibc + FORTIFY_SOURCE.
4985
4986if test "$fortify_source" != "no"; then
4987  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4988    fortify_source="no";
4989  elif test -n "$cxx" && has $cxx &&
4990       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4991    fortify_source="no";
4992  else
4993    fortify_source="yes"
4994  fi
4995fi
4996
4997##########################################
4998# check if struct fsxattr is available via linux/fs.h
4999
5000have_fsxattr=no
5001cat > $TMPC << EOF
5002#include <linux/fs.h>
5003struct fsxattr foo;
5004int main(void) {
5005  return 0;
5006}
5007EOF
5008if compile_prog "" "" ; then
5009    have_fsxattr=yes
5010fi
5011
5012##########################################
5013# check if rtnetlink.h exists and is useful
5014have_rtnetlink=no
5015cat > $TMPC << EOF
5016#include <linux/rtnetlink.h>
5017int main(void) {
5018  return IFLA_PROTO_DOWN;
5019}
5020EOF
5021if compile_prog "" "" ; then
5022    have_rtnetlink=yes
5023fi
5024
5025##########################################
5026# check for usable AF_VSOCK environment
5027have_af_vsock=no
5028cat > $TMPC << EOF
5029#include <errno.h>
5030#include <sys/types.h>
5031#include <sys/socket.h>
5032#if !defined(AF_VSOCK)
5033# error missing AF_VSOCK flag
5034#endif
5035#include <linux/vm_sockets.h>
5036int main(void) {
5037    int sock, ret;
5038    struct sockaddr_vm svm;
5039    socklen_t len = sizeof(svm);
5040    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5041    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5042    if ((ret == -1) && (errno == ENOTCONN)) {
5043        return 0;
5044    }
5045    return -1;
5046}
5047EOF
5048if compile_prog "" "" ; then
5049    have_af_vsock=yes
5050fi
5051
5052##########################################
5053# check for usable AF_ALG environment
5054hava_afalg=no
5055cat > $TMPC << EOF
5056#include <errno.h>
5057#include <sys/types.h>
5058#include <sys/socket.h>
5059#include <linux/if_alg.h>
5060int main(void) {
5061    int sock;
5062    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5063    return sock;
5064}
5065EOF
5066if compile_prog "" "" ; then
5067    have_afalg=yes
5068fi
5069if test "$crypto_afalg" = "yes"
5070then
5071    if test "$have_afalg" != "yes"
5072    then
5073	error_exit "AF_ALG requested but could not be detected"
5074    fi
5075fi
5076
5077
5078#################################################
5079# Check to see if we have the Hypervisor framework
5080if [ "$darwin" = "yes" ] ; then
5081  cat > $TMPC << EOF
5082#include <Hypervisor/hv.h>
5083int main() { return 0;}
5084EOF
5085  if ! compile_object ""; then
5086    hvf='no'
5087  else
5088    hvf='yes'
5089    LDFLAGS="-framework Hypervisor $LDFLAGS"
5090  fi
5091fi
5092
5093#################################################
5094# Sparc implicitly links with --relax, which is
5095# incompatible with -r, so --no-relax should be
5096# given. It does no harm to give it on other
5097# platforms too.
5098
5099# Note: the prototype is needed since QEMU_CFLAGS
5100#       contains -Wmissing-prototypes
5101cat > $TMPC << EOF
5102extern int foo(void);
5103int foo(void) { return 0; }
5104EOF
5105if ! compile_object ""; then
5106  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5107fi
5108for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5109  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5110    LD_REL_FLAGS=$i
5111    break
5112  fi
5113done
5114if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5115  feature_not_found "modules" "Cannot find how to build relocatable objects"
5116fi
5117
5118##########################################
5119# check for sysmacros.h
5120
5121have_sysmacros=no
5122cat > $TMPC << EOF
5123#include <sys/sysmacros.h>
5124int main(void) {
5125    return makedev(0, 0);
5126}
5127EOF
5128if compile_prog "" "" ; then
5129    have_sysmacros=yes
5130fi
5131
5132##########################################
5133# Veritas HyperScale block driver VxHS
5134# Check if libvxhs is installed
5135
5136if test "$vxhs" != "no" ; then
5137  cat > $TMPC <<EOF
5138#include <stdint.h>
5139#include <qnio/qnio_api.h>
5140
5141void *vxhs_callback;
5142
5143int main(void) {
5144    iio_init(QNIO_VERSION, vxhs_callback);
5145    return 0;
5146}
5147EOF
5148  vxhs_libs="-lvxhs -lssl"
5149  if compile_prog "" "$vxhs_libs" ; then
5150    vxhs=yes
5151  else
5152    if test "$vxhs" = "yes" ; then
5153      feature_not_found "vxhs block device" "Install libvxhs See github"
5154    fi
5155    vxhs=no
5156  fi
5157fi
5158
5159##########################################
5160# check for _Static_assert()
5161
5162have_static_assert=no
5163cat > $TMPC << EOF
5164_Static_assert(1, "success");
5165int main(void) {
5166    return 0;
5167}
5168EOF
5169if compile_prog "" "" ; then
5170    have_static_assert=yes
5171fi
5172
5173##########################################
5174# check for utmpx.h, it is missing e.g. on OpenBSD
5175
5176have_utmpx=no
5177cat > $TMPC << EOF
5178#include <utmpx.h>
5179struct utmpx user_info;
5180int main(void) {
5181    return 0;
5182}
5183EOF
5184if compile_prog "" "" ; then
5185    have_utmpx=yes
5186fi
5187
5188##########################################
5189# End of CC checks
5190# After here, no more $cc or $ld runs
5191
5192if test "$gcov" = "yes" ; then
5193  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5194  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5195elif test "$fortify_source" = "yes" ; then
5196  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5197elif test "$debug" = "yes"; then
5198  if compile_prog "-Og" ""; then
5199      CFLAGS="-Og $CFLAGS"
5200  elif compile_prog "-O1" ""; then
5201      CFLAGS="-O1 $CFLAGS"
5202  fi
5203  # Workaround GCC false-positive Wuninitialized bugs with Og or O1:
5204  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
5205  if cc_has_warning_flag "-Wno-maybe-uninitialized"; then
5206      CFLAGS="-Wno-maybe-uninitialized $CFLAGS"
5207  fi
5208else
5209    CFLAGS="-O2 $CFLAGS"
5210fi
5211
5212##########################################
5213# Do we have libnfs
5214if test "$libnfs" != "no" ; then
5215  if $pkg_config --atleast-version=1.9.3 libnfs; then
5216    libnfs="yes"
5217    libnfs_libs=$($pkg_config --libs libnfs)
5218  else
5219    if test "$libnfs" = "yes" ; then
5220      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5221    fi
5222    libnfs="no"
5223  fi
5224fi
5225
5226# Now we've finished running tests it's OK to add -Werror to the compiler flags
5227if test "$werror" = "yes"; then
5228    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5229fi
5230
5231if test "$solaris" = "no" ; then
5232    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5233        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5234    fi
5235fi
5236
5237# test if pod2man has --utf8 option
5238if pod2man --help | grep -q utf8; then
5239    POD2MAN="pod2man --utf8"
5240else
5241    POD2MAN="pod2man"
5242fi
5243
5244# Use ASLR, no-SEH and DEP if available
5245if test "$mingw32" = "yes" ; then
5246    for flag in --dynamicbase --no-seh --nxcompat; do
5247        if ld_has $flag ; then
5248            LDFLAGS="-Wl,$flag $LDFLAGS"
5249        fi
5250    done
5251fi
5252
5253qemu_confdir=$sysconfdir$confsuffix
5254qemu_moddir=$libdir$confsuffix
5255qemu_datadir=$datadir$confsuffix
5256qemu_localedir="$datadir/locale"
5257
5258# We can only support ivshmem if we have eventfd
5259if [ "$eventfd" = "yes" ]; then
5260  ivshmem=yes
5261fi
5262
5263tools=""
5264if test "$want_tools" = "yes" ; then
5265  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5266  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5267    tools="qemu-nbd\$(EXESUF) $tools"
5268  fi
5269  if [ "$ivshmem" = "yes" ]; then
5270    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5271  fi
5272fi
5273if test "$softmmu" = yes ; then
5274  if test "$linux" = yes; then
5275    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5276      virtfs=yes
5277      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5278    else
5279      if test "$virtfs" = yes; then
5280        error_exit "VirtFS requires libcap devel and libattr devel"
5281      fi
5282      virtfs=no
5283    fi
5284    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5285      mpath=yes
5286    else
5287      if test "$mpath" = yes; then
5288        error_exit "Multipath requires libmpathpersist devel"
5289      fi
5290      mpath=no
5291    fi
5292    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5293  else
5294    if test "$virtfs" = yes; then
5295      error_exit "VirtFS is supported only on Linux"
5296    fi
5297    virtfs=no
5298    if test "$mpath" = yes; then
5299      error_exit "Multipath is supported only on Linux"
5300    fi
5301    mpath=no
5302  fi
5303  if test "$xkbcommon" = "yes"; then
5304    tools="qemu-keymap\$(EXESUF) $tools"
5305  fi
5306fi
5307
5308# Probe for guest agent support/options
5309
5310if [ "$guest_agent" != "no" ]; then
5311  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5312      tools="qemu-ga $tools"
5313      guest_agent=yes
5314  elif [ "$guest_agent" != yes ]; then
5315      guest_agent=no
5316  else
5317      error_exit "Guest agent is not supported on this platform"
5318  fi
5319fi
5320
5321# Guest agent Window MSI  package
5322
5323if test "$guest_agent" != yes; then
5324  if test "$guest_agent_msi" = yes; then
5325    error_exit "MSI guest agent package requires guest agent enabled"
5326  fi
5327  guest_agent_msi=no
5328elif test "$mingw32" != "yes"; then
5329  if test "$guest_agent_msi" = "yes"; then
5330    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5331  fi
5332  guest_agent_msi=no
5333elif ! has wixl; then
5334  if test "$guest_agent_msi" = "yes"; then
5335    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5336  fi
5337  guest_agent_msi=no
5338else
5339  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5340  # disabled explicitly
5341  if test "$guest_agent_msi" != "no"; then
5342    guest_agent_msi=yes
5343  fi
5344fi
5345
5346if test "$guest_agent_msi" = "yes"; then
5347  if test "$guest_agent_with_vss" = "yes"; then
5348    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5349  fi
5350
5351  if test "$QEMU_GA_MANUFACTURER" = ""; then
5352    QEMU_GA_MANUFACTURER=QEMU
5353  fi
5354
5355  if test "$QEMU_GA_DISTRO" = ""; then
5356    QEMU_GA_DISTRO=Linux
5357  fi
5358
5359  if test "$QEMU_GA_VERSION" = ""; then
5360      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5361  fi
5362
5363  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5364
5365  case "$cpu" in
5366  x86_64)
5367    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5368    ;;
5369  i386)
5370    QEMU_GA_MSI_ARCH="-D Arch=32"
5371    ;;
5372  *)
5373    error_exit "CPU $cpu not supported for building installation package"
5374    ;;
5375  esac
5376fi
5377
5378# Mac OS X ships with a broken assembler
5379roms=
5380if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5381        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5382        "$softmmu" = yes ; then
5383    # Different host OS linkers have different ideas about the name of the ELF
5384    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5385    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5386    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5387        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5388            ld_i386_emulation="$emu"
5389            roms="optionrom"
5390            break
5391        fi
5392    done
5393fi
5394if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5395  roms="$roms spapr-rtas"
5396fi
5397
5398if test "$cpu" = "s390x" ; then
5399  roms="$roms s390-ccw"
5400fi
5401
5402# Probe for the need for relocating the user-only binary.
5403if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5404  textseg_addr=
5405  case "$cpu" in
5406    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5407      # ??? Rationale for choosing this address
5408      textseg_addr=0x60000000
5409      ;;
5410    mips)
5411      # A 256M aligned address, high in the address space, with enough
5412      # room for the code_gen_buffer above it before the stack.
5413      textseg_addr=0x60000000
5414      ;;
5415  esac
5416  if [ -n "$textseg_addr" ]; then
5417    cat > $TMPC <<EOF
5418    int main(void) { return 0; }
5419EOF
5420    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5421    if ! compile_prog "" "$textseg_ldflags"; then
5422      # In case ld does not support -Ttext-segment, edit the default linker
5423      # script via sed to set the .text start addr.  This is needed on FreeBSD
5424      # at least.
5425      if ! $ld --verbose >/dev/null 2>&1; then
5426        error_exit \
5427            "We need to link the QEMU user mode binaries at a" \
5428            "specific text address. Unfortunately your linker" \
5429            "doesn't support either the -Ttext-segment option or" \
5430            "printing the default linker script with --verbose." \
5431            "If you don't want the user mode binaries, pass the" \
5432            "--disable-user option to configure."
5433      fi
5434
5435      $ld --verbose | sed \
5436        -e '1,/==================================================/d' \
5437        -e '/==================================================/,$d' \
5438        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5439        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5440      textseg_ldflags="-Wl,-T../config-host.ld"
5441    fi
5442  fi
5443fi
5444
5445# Check that the C++ compiler exists and works with the C compiler.
5446# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5447if has $cxx; then
5448    cat > $TMPC <<EOF
5449int c_function(void);
5450int main(void) { return c_function(); }
5451EOF
5452
5453    compile_object
5454
5455    cat > $TMPCXX <<EOF
5456extern "C" {
5457   int c_function(void);
5458}
5459int c_function(void) { return 42; }
5460EOF
5461
5462    update_cxxflags
5463
5464    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5465        # C++ compiler $cxx works ok with C compiler $cc
5466        :
5467    else
5468        echo "C++ compiler $cxx does not work with C compiler $cc"
5469        echo "Disabling C++ specific optional code"
5470        cxx=
5471    fi
5472else
5473    echo "No C++ compiler available; disabling C++ specific optional code"
5474    cxx=
5475fi
5476
5477echo_version() {
5478    if test "$1" = "yes" ; then
5479        echo "($2)"
5480    fi
5481}
5482
5483# prepend pixman and ftd flags after all config tests are done
5484QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5485libs_softmmu="$pixman_libs $libs_softmmu"
5486
5487echo "Install prefix    $prefix"
5488echo "BIOS directory    $(eval echo $qemu_datadir)"
5489echo "firmware path     $(eval echo $firmwarepath)"
5490echo "binary directory  $(eval echo $bindir)"
5491echo "library directory $(eval echo $libdir)"
5492echo "module directory  $(eval echo $qemu_moddir)"
5493echo "libexec directory $(eval echo $libexecdir)"
5494echo "include directory $(eval echo $includedir)"
5495echo "config directory  $(eval echo $sysconfdir)"
5496if test "$mingw32" = "no" ; then
5497echo "local state directory   $(eval echo $local_statedir)"
5498echo "Manual directory  $(eval echo $mandir)"
5499echo "ELF interp prefix $interp_prefix"
5500else
5501echo "local state directory   queried at runtime"
5502echo "Windows SDK       $win_sdk"
5503fi
5504echo "Source path       $source_path"
5505echo "GIT binary        $git"
5506echo "GIT submodules    $git_submodules"
5507echo "C compiler        $cc"
5508echo "Host C compiler   $host_cc"
5509echo "C++ compiler      $cxx"
5510echo "Objective-C compiler $objcc"
5511echo "ARFLAGS           $ARFLAGS"
5512echo "CFLAGS            $CFLAGS"
5513echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5514echo "LDFLAGS           $LDFLAGS"
5515echo "make              $make"
5516echo "install           $install"
5517echo "python            $python"
5518if test "$slirp" = "yes" ; then
5519    echo "smbd              $smbd"
5520fi
5521echo "module support    $modules"
5522echo "host CPU          $cpu"
5523echo "host big endian   $bigendian"
5524echo "target list       $target_list"
5525echo "gprof enabled     $gprof"
5526echo "sparse enabled    $sparse"
5527echo "strip binaries    $strip_opt"
5528echo "profiler          $profiler"
5529echo "static build      $static"
5530if test "$darwin" = "yes" ; then
5531    echo "Cocoa support     $cocoa"
5532fi
5533echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5534echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5535echo "GTK GL support    $gtk_gl"
5536echo "VTE support       $vte $(echo_version $vte $vteversion)"
5537echo "TLS priority      $tls_priority"
5538echo "GNUTLS support    $gnutls"
5539echo "GNUTLS rnd        $gnutls_rnd"
5540echo "libgcrypt         $gcrypt"
5541echo "libgcrypt kdf     $gcrypt_kdf"
5542echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5543echo "nettle kdf        $nettle_kdf"
5544echo "libtasn1          $tasn1"
5545echo "curses support    $curses"
5546echo "virgl support     $virglrenderer"
5547echo "curl support      $curl"
5548echo "mingw32 support   $mingw32"
5549echo "Audio drivers     $audio_drv_list"
5550echo "Block whitelist (rw) $block_drv_rw_whitelist"
5551echo "Block whitelist (ro) $block_drv_ro_whitelist"
5552echo "VirtFS support    $virtfs"
5553echo "Multipath support $mpath"
5554echo "VNC support       $vnc"
5555if test "$vnc" = "yes" ; then
5556    echo "VNC SASL support  $vnc_sasl"
5557    echo "VNC JPEG support  $vnc_jpeg"
5558    echo "VNC PNG support   $vnc_png"
5559fi
5560if test -n "$sparc_cpu"; then
5561    echo "Target Sparc Arch $sparc_cpu"
5562fi
5563echo "xen support       $xen"
5564if test "$xen" = "yes" ; then
5565  echo "xen ctrl version  $xen_ctrl_version"
5566  echo "pv dom build      $xen_pv_domain_build"
5567fi
5568echo "brlapi support    $brlapi"
5569echo "bluez  support    $bluez"
5570echo "Documentation     $docs"
5571echo "PIE               $pie"
5572echo "vde support       $vde"
5573echo "netmap support    $netmap"
5574echo "Linux AIO support $linux_aio"
5575echo "ATTR/XATTR support $attr"
5576echo "Install blobs     $blobs"
5577echo "KVM support       $kvm"
5578echo "HAX support       $hax"
5579echo "HVF support       $hvf"
5580echo "TCG support       $tcg"
5581if test "$tcg" = "yes" ; then
5582    echo "TCG debug enabled $debug_tcg"
5583    echo "TCG interpreter   $tcg_interpreter"
5584fi
5585echo "malloc trim support $malloc_trim"
5586echo "RDMA support      $rdma"
5587echo "fdt support       $fdt"
5588echo "preadv support    $preadv"
5589echo "fdatasync         $fdatasync"
5590echo "madvise           $madvise"
5591echo "posix_madvise     $posix_madvise"
5592echo "libcap-ng support $cap_ng"
5593echo "vhost-net support $vhost_net"
5594echo "vhost-scsi support $vhost_scsi"
5595echo "vhost-vsock support $vhost_vsock"
5596echo "vhost-user support $vhost_user"
5597echo "Trace backends    $trace_backends"
5598if have_backend "simple"; then
5599echo "Trace output file $trace_file-<pid>"
5600fi
5601echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5602echo "rbd support       $rbd"
5603echo "xfsctl support    $xfs"
5604echo "smartcard support $smartcard"
5605echo "libusb            $libusb"
5606echo "usb net redir     $usb_redir"
5607echo "OpenGL support    $opengl"
5608echo "OpenGL dmabufs    $opengl_dmabuf"
5609echo "libiscsi support  $libiscsi"
5610echo "libnfs support    $libnfs"
5611echo "build guest agent $guest_agent"
5612echo "QGA VSS support   $guest_agent_with_vss"
5613echo "QGA w32 disk info $guest_agent_ntddscsi"
5614echo "QGA MSI support   $guest_agent_msi"
5615echo "seccomp support   $seccomp"
5616echo "coroutine backend $coroutine"
5617echo "coroutine pool    $coroutine_pool"
5618echo "debug stack usage $debug_stack_usage"
5619echo "crypto afalg      $crypto_afalg"
5620echo "GlusterFS support $glusterfs"
5621echo "gcov              $gcov_tool"
5622echo "gcov enabled      $gcov"
5623echo "TPM support       $tpm"
5624echo "libssh2 support   $libssh2"
5625echo "TPM passthrough   $tpm_passthrough"
5626echo "TPM emulator      $tpm_emulator"
5627echo "QOM debugging     $qom_cast_debug"
5628echo "Live block migration $live_block_migration"
5629echo "lzo support       $lzo"
5630echo "snappy support    $snappy"
5631echo "bzip2 support     $bzip2"
5632echo "NUMA host support $numa"
5633echo "tcmalloc support  $tcmalloc"
5634echo "jemalloc support  $jemalloc"
5635echo "avx2 optimization $avx2_opt"
5636echo "replication support $replication"
5637echo "VxHS block device $vxhs"
5638echo "capstone          $capstone"
5639
5640if test "$sdl_too_old" = "yes"; then
5641echo "-> Your SDL version is too old - please upgrade to have SDL support"
5642fi
5643
5644if test "$gtkabi" = "2.0"; then
5645    echo
5646    echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5647    echo "WARNING: future releases. Please switch to using GTK 3.0"
5648fi
5649
5650if test "$supported_cpu" = "no"; then
5651    echo
5652    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5653    echo
5654    echo "CPU host architecture $cpu support is not currently maintained."
5655    echo "The QEMU project intends to remove support for this host CPU in"
5656    echo "a future release if nobody volunteers to maintain it and to"
5657    echo "provide a build host for our continuous integration setup."
5658    echo "configure has succeeded and you can continue to build, but"
5659    echo "if you care about QEMU on this platform you should contact"
5660    echo "us upstream at qemu-devel@nongnu.org."
5661fi
5662
5663if test "$supported_os" = "no"; then
5664    echo
5665    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5666    echo
5667    echo "Host OS $targetos support is not currently maintained."
5668    echo "The QEMU project intends to remove support for this host OS in"
5669    echo "a future release if nobody volunteers to maintain it and to"
5670    echo "provide a build host for our continuous integration setup."
5671    echo "configure has succeeded and you can continue to build, but"
5672    echo "if you care about QEMU on this platform you should contact"
5673    echo "us upstream at qemu-devel@nongnu.org."
5674fi
5675
5676config_host_mak="config-host.mak"
5677
5678echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5679
5680echo "# Automatically generated by configure - do not modify" > $config_host_mak
5681echo >> $config_host_mak
5682
5683echo all: >> $config_host_mak
5684echo "prefix=$prefix" >> $config_host_mak
5685echo "bindir=$bindir" >> $config_host_mak
5686echo "libdir=$libdir" >> $config_host_mak
5687echo "libexecdir=$libexecdir" >> $config_host_mak
5688echo "includedir=$includedir" >> $config_host_mak
5689echo "mandir=$mandir" >> $config_host_mak
5690echo "sysconfdir=$sysconfdir" >> $config_host_mak
5691echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5692echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5693echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5694echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5695echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5696if test "$mingw32" = "no" ; then
5697  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5698fi
5699echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5700echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5701echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5702echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5703echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5704echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5705echo "GIT=$git" >> $config_host_mak
5706echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5707echo "GIT_UPDATE=$git_update" >> $config_host_mak
5708
5709echo "ARCH=$ARCH" >> $config_host_mak
5710
5711if test "$debug_tcg" = "yes" ; then
5712  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5713fi
5714if test "$strip_opt" = "yes" ; then
5715  echo "STRIP=${strip}" >> $config_host_mak
5716fi
5717if test "$bigendian" = "yes" ; then
5718  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5719fi
5720if test "$mingw32" = "yes" ; then
5721  echo "CONFIG_WIN32=y" >> $config_host_mak
5722  rc_version=$(cat $source_path/VERSION)
5723  version_major=${rc_version%%.*}
5724  rc_version=${rc_version#*.}
5725  version_minor=${rc_version%%.*}
5726  rc_version=${rc_version#*.}
5727  version_subminor=${rc_version%%.*}
5728  version_micro=0
5729  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5730  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5731  if test "$guest_agent_with_vss" = "yes" ; then
5732    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5733    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5734    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5735  fi
5736  if test "$guest_agent_ntddscsi" = "yes" ; then
5737    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5738  fi
5739  if test "$guest_agent_msi" = "yes"; then
5740    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5741    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5742    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5743    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5744    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5745    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5746    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5747  fi
5748else
5749  echo "CONFIG_POSIX=y" >> $config_host_mak
5750fi
5751
5752if test "$linux" = "yes" ; then
5753  echo "CONFIG_LINUX=y" >> $config_host_mak
5754fi
5755
5756if test "$darwin" = "yes" ; then
5757  echo "CONFIG_DARWIN=y" >> $config_host_mak
5758fi
5759
5760if test "$solaris" = "yes" ; then
5761  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5762fi
5763if test "$haiku" = "yes" ; then
5764  echo "CONFIG_HAIKU=y" >> $config_host_mak
5765fi
5766if test "$static" = "yes" ; then
5767  echo "CONFIG_STATIC=y" >> $config_host_mak
5768fi
5769if test "$profiler" = "yes" ; then
5770  echo "CONFIG_PROFILER=y" >> $config_host_mak
5771fi
5772if test "$slirp" = "yes" ; then
5773  echo "CONFIG_SLIRP=y" >> $config_host_mak
5774  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5775fi
5776if test "$vde" = "yes" ; then
5777  echo "CONFIG_VDE=y" >> $config_host_mak
5778  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5779fi
5780if test "$netmap" = "yes" ; then
5781  echo "CONFIG_NETMAP=y" >> $config_host_mak
5782fi
5783if test "$l2tpv3" = "yes" ; then
5784  echo "CONFIG_L2TPV3=y" >> $config_host_mak
5785fi
5786if test "$cap_ng" = "yes" ; then
5787  echo "CONFIG_LIBCAP=y" >> $config_host_mak
5788fi
5789echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5790for drv in $audio_drv_list; do
5791    def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5792    echo "$def=y" >> $config_host_mak
5793done
5794echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5795echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5796echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5797echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5798echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5799if test "$audio_pt_int" = "yes" ; then
5800  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5801fi
5802if test "$audio_win_int" = "yes" ; then
5803  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5804fi
5805echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5806echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5807if test "$vnc" = "yes" ; then
5808  echo "CONFIG_VNC=y" >> $config_host_mak
5809fi
5810if test "$vnc_sasl" = "yes" ; then
5811  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5812fi
5813if test "$vnc_jpeg" = "yes" ; then
5814  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5815fi
5816if test "$vnc_png" = "yes" ; then
5817  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5818fi
5819if test "$xkbcommon" = "yes" ; then
5820  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5821  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5822fi
5823if test "$fnmatch" = "yes" ; then
5824  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5825fi
5826if test "$xfs" = "yes" ; then
5827  echo "CONFIG_XFS=y" >> $config_host_mak
5828fi
5829qemu_version=$(head $source_path/VERSION)
5830echo "VERSION=$qemu_version" >>$config_host_mak
5831echo "PKGVERSION=$pkgversion" >>$config_host_mak
5832echo "SRC_PATH=$source_path" >> $config_host_mak
5833echo "TARGET_DIRS=$target_list" >> $config_host_mak
5834if [ "$docs" = "yes" ] ; then
5835  echo "BUILD_DOCS=yes" >> $config_host_mak
5836fi
5837if test "$modules" = "yes"; then
5838  # $shacmd can generate a hash started with digit, which the compiler doesn't
5839  # like as an symbol. So prefix it with an underscore
5840  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5841  echo "CONFIG_MODULES=y" >> $config_host_mak
5842fi
5843if test "$sdl" = "yes" ; then
5844  echo "CONFIG_SDL=y" >> $config_host_mak
5845  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5846  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5847  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5848fi
5849if test "$cocoa" = "yes" ; then
5850  echo "CONFIG_COCOA=y" >> $config_host_mak
5851fi
5852if test "$curses" = "yes" ; then
5853  echo "CONFIG_CURSES=y" >> $config_host_mak
5854fi
5855if test "$pipe2" = "yes" ; then
5856  echo "CONFIG_PIPE2=y" >> $config_host_mak
5857fi
5858if test "$accept4" = "yes" ; then
5859  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5860fi
5861if test "$splice" = "yes" ; then
5862  echo "CONFIG_SPLICE=y" >> $config_host_mak
5863fi
5864if test "$eventfd" = "yes" ; then
5865  echo "CONFIG_EVENTFD=y" >> $config_host_mak
5866fi
5867if test "$memfd" = "yes" ; then
5868  echo "CONFIG_MEMFD=y" >> $config_host_mak
5869fi
5870if test "$fallocate" = "yes" ; then
5871  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5872fi
5873if test "$fallocate_punch_hole" = "yes" ; then
5874  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5875fi
5876if test "$fallocate_zero_range" = "yes" ; then
5877  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5878fi
5879if test "$posix_fallocate" = "yes" ; then
5880  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5881fi
5882if test "$sync_file_range" = "yes" ; then
5883  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5884fi
5885if test "$fiemap" = "yes" ; then
5886  echo "CONFIG_FIEMAP=y" >> $config_host_mak
5887fi
5888if test "$dup3" = "yes" ; then
5889  echo "CONFIG_DUP3=y" >> $config_host_mak
5890fi
5891if test "$ppoll" = "yes" ; then
5892  echo "CONFIG_PPOLL=y" >> $config_host_mak
5893fi
5894if test "$prctl_pr_set_timerslack" = "yes" ; then
5895  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5896fi
5897if test "$epoll" = "yes" ; then
5898  echo "CONFIG_EPOLL=y" >> $config_host_mak
5899fi
5900if test "$epoll_create1" = "yes" ; then
5901  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5902fi
5903if test "$sendfile" = "yes" ; then
5904  echo "CONFIG_SENDFILE=y" >> $config_host_mak
5905fi
5906if test "$timerfd" = "yes" ; then
5907  echo "CONFIG_TIMERFD=y" >> $config_host_mak
5908fi
5909if test "$setns" = "yes" ; then
5910  echo "CONFIG_SETNS=y" >> $config_host_mak
5911fi
5912if test "$clock_adjtime" = "yes" ; then
5913  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5914fi
5915if test "$syncfs" = "yes" ; then
5916  echo "CONFIG_SYNCFS=y" >> $config_host_mak
5917fi
5918if test "$inotify" = "yes" ; then
5919  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5920fi
5921if test "$inotify1" = "yes" ; then
5922  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5923fi
5924if test "$sem_timedwait" = "yes" ; then
5925  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5926fi
5927if test "$byteswap_h" = "yes" ; then
5928  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5929fi
5930if test "$bswap_h" = "yes" ; then
5931  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5932fi
5933if test "$curl" = "yes" ; then
5934  echo "CONFIG_CURL=m" >> $config_host_mak
5935  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5936  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5937fi
5938if test "$brlapi" = "yes" ; then
5939  echo "CONFIG_BRLAPI=y" >> $config_host_mak
5940  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5941fi
5942if test "$bluez" = "yes" ; then
5943  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5944  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5945fi
5946if test "$glib_subprocess" = "yes" ; then
5947  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5948fi
5949if test "$gtk" = "yes" ; then
5950  echo "CONFIG_GTK=y" >> $config_host_mak
5951  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5952  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5953  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5954  if test "$gtk_gl" = "yes" ; then
5955    echo "CONFIG_GTK_GL=y" >> $config_host_mak
5956  fi
5957fi
5958echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5959if test "$gnutls" = "yes" ; then
5960  echo "CONFIG_GNUTLS=y" >> $config_host_mak
5961fi
5962if test "$gnutls_rnd" = "yes" ; then
5963  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5964fi
5965if test "$gcrypt" = "yes" ; then
5966  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5967  if test "$gcrypt_hmac" = "yes" ; then
5968    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5969  fi
5970  if test "$gcrypt_kdf" = "yes" ; then
5971    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5972  fi
5973fi
5974if test "$nettle" = "yes" ; then
5975  echo "CONFIG_NETTLE=y" >> $config_host_mak
5976  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5977  if test "$nettle_kdf" = "yes" ; then
5978    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5979  fi
5980fi
5981if test "$tasn1" = "yes" ; then
5982  echo "CONFIG_TASN1=y" >> $config_host_mak
5983fi
5984if test "$have_ifaddrs_h" = "yes" ; then
5985    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5986fi
5987if test "$have_broken_size_max" = "yes" ; then
5988    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5989fi
5990
5991# Work around a system header bug with some kernel/XFS header
5992# versions where they both try to define 'struct fsxattr':
5993# xfs headers will not try to redefine structs from linux headers
5994# if this macro is set.
5995if test "$have_fsxattr" = "yes" ; then
5996    echo "HAVE_FSXATTR=y" >> $config_host_mak
5997fi
5998if test "$vte" = "yes" ; then
5999  echo "CONFIG_VTE=y" >> $config_host_mak
6000  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6001fi
6002if test "$virglrenderer" = "yes" ; then
6003  echo "CONFIG_VIRGL=y" >> $config_host_mak
6004  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6005  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6006fi
6007if test "$xen" = "yes" ; then
6008  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6009  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6010  if test "$xen_pv_domain_build" = "yes" ; then
6011    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6012  fi
6013fi
6014if test "$linux_aio" = "yes" ; then
6015  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6016fi
6017if test "$attr" = "yes" ; then
6018  echo "CONFIG_ATTR=y" >> $config_host_mak
6019fi
6020if test "$libattr" = "yes" ; then
6021  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6022fi
6023if test "$virtfs" = "yes" ; then
6024  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6025fi
6026if test "$mpath" = "yes" ; then
6027  echo "CONFIG_MPATH=y" >> $config_host_mak
6028fi
6029if test "$vhost_scsi" = "yes" ; then
6030  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6031fi
6032if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6033  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6034fi
6035if test "$vhost_vsock" = "yes" ; then
6036  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6037fi
6038if test "$vhost_user" = "yes" ; then
6039  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6040fi
6041if test "$blobs" = "yes" ; then
6042  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6043fi
6044if test "$iovec" = "yes" ; then
6045  echo "CONFIG_IOVEC=y" >> $config_host_mak
6046fi
6047if test "$preadv" = "yes" ; then
6048  echo "CONFIG_PREADV=y" >> $config_host_mak
6049fi
6050if test "$fdt" = "yes" ; then
6051  echo "CONFIG_FDT=y" >> $config_host_mak
6052fi
6053if test "$signalfd" = "yes" ; then
6054  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6055fi
6056if test "$tcg" = "yes"; then
6057  echo "CONFIG_TCG=y" >> $config_host_mak
6058  if test "$tcg_interpreter" = "yes" ; then
6059    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6060  fi
6061fi
6062if test "$fdatasync" = "yes" ; then
6063  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6064fi
6065if test "$madvise" = "yes" ; then
6066  echo "CONFIG_MADVISE=y" >> $config_host_mak
6067fi
6068if test "$posix_madvise" = "yes" ; then
6069  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6070fi
6071
6072if test "$spice" = "yes" ; then
6073  echo "CONFIG_SPICE=y" >> $config_host_mak
6074fi
6075
6076if test "$smartcard" = "yes" ; then
6077  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6078  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6079  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6080fi
6081
6082if test "$libusb" = "yes" ; then
6083  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6084  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6085  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6086fi
6087
6088if test "$usb_redir" = "yes" ; then
6089  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6090  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6091  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6092fi
6093
6094if test "$opengl" = "yes" ; then
6095  echo "CONFIG_OPENGL=y" >> $config_host_mak
6096  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6097  if test "$opengl_dmabuf" = "yes" ; then
6098    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6099  fi
6100fi
6101
6102if test "$malloc_trim" = "yes" ; then
6103  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6104fi
6105
6106if test "$avx2_opt" = "yes" ; then
6107  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6108fi
6109
6110if test "$lzo" = "yes" ; then
6111  echo "CONFIG_LZO=y" >> $config_host_mak
6112fi
6113
6114if test "$snappy" = "yes" ; then
6115  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6116fi
6117
6118if test "$bzip2" = "yes" ; then
6119  echo "CONFIG_BZIP2=y" >> $config_host_mak
6120  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6121fi
6122
6123if test "$libiscsi" = "yes" ; then
6124  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6125  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6126  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6127fi
6128
6129if test "$libnfs" = "yes" ; then
6130  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6131  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6132fi
6133
6134if test "$seccomp" = "yes"; then
6135  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6136  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6137  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6138fi
6139
6140# XXX: suppress that
6141if [ "$bsd" = "yes" ] ; then
6142  echo "CONFIG_BSD=y" >> $config_host_mak
6143fi
6144
6145if test "$localtime_r" = "yes" ; then
6146  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6147fi
6148if test "$qom_cast_debug" = "yes" ; then
6149  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6150fi
6151if test "$rbd" = "yes" ; then
6152  echo "CONFIG_RBD=m" >> $config_host_mak
6153  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6154  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6155fi
6156
6157echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6158if test "$coroutine_pool" = "yes" ; then
6159  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6160else
6161  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6162fi
6163
6164if test "$debug_stack_usage" = "yes" ; then
6165  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6166fi
6167
6168if test "$crypto_afalg" = "yes" ; then
6169  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6170fi
6171
6172if test "$open_by_handle_at" = "yes" ; then
6173  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6174fi
6175
6176if test "$linux_magic_h" = "yes" ; then
6177  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6178fi
6179
6180if test "$pragma_diagnostic_available" = "yes" ; then
6181  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6182fi
6183
6184if test "$valgrind_h" = "yes" ; then
6185  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6186fi
6187
6188if test "$has_environ" = "yes" ; then
6189  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6190fi
6191
6192if test "$cpuid_h" = "yes" ; then
6193  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6194fi
6195
6196if test "$int128" = "yes" ; then
6197  echo "CONFIG_INT128=y" >> $config_host_mak
6198fi
6199
6200if test "$atomic128" = "yes" ; then
6201  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6202fi
6203
6204if test "$atomic64" = "yes" ; then
6205  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6206fi
6207
6208if test "$getauxval" = "yes" ; then
6209  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6210fi
6211
6212if test "$glusterfs" = "yes" ; then
6213  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6214  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6215  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6216fi
6217
6218if test "$glusterfs_xlator_opt" = "yes" ; then
6219  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6220fi
6221
6222if test "$glusterfs_discard" = "yes" ; then
6223  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6224fi
6225
6226if test "$glusterfs_fallocate" = "yes" ; then
6227  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6228fi
6229
6230if test "$glusterfs_zerofill" = "yes" ; then
6231  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6232fi
6233
6234if test "$libssh2" = "yes" ; then
6235  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6236  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6237  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6238fi
6239
6240if test "$live_block_migration" = "yes" ; then
6241  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6242fi
6243
6244if test "$tpm" = "yes"; then
6245  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6246  # TPM passthrough support?
6247  if test "$tpm_passthrough" = "yes"; then
6248    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6249  fi
6250  # TPM emulator support?
6251  if test "$tpm_emulator" = "yes"; then
6252    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6253  fi
6254fi
6255
6256echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6257if have_backend "nop"; then
6258  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6259fi
6260if have_backend "simple"; then
6261  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6262  # Set the appropriate trace file.
6263  trace_file="\"$trace_file-\" FMT_pid"
6264fi
6265if have_backend "log"; then
6266  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6267fi
6268if have_backend "ust"; then
6269  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6270fi
6271if have_backend "dtrace"; then
6272  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6273  if test "$trace_backend_stap" = "yes" ; then
6274    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6275  fi
6276fi
6277if have_backend "ftrace"; then
6278  if test "$linux" = "yes" ; then
6279    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6280  else
6281    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6282  fi
6283fi
6284if have_backend "syslog"; then
6285  if test "$posix_syslog" = "yes" ; then
6286    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6287  else
6288    feature_not_found "syslog(trace backend)" "syslog not available"
6289  fi
6290fi
6291echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6292
6293if test "$rdma" = "yes" ; then
6294  echo "CONFIG_RDMA=y" >> $config_host_mak
6295  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6296fi
6297
6298if test "$have_rtnetlink" = "yes" ; then
6299  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6300fi
6301
6302if test "$replication" = "yes" ; then
6303  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6304fi
6305
6306if test "$have_af_vsock" = "yes" ; then
6307  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6308fi
6309
6310if test "$have_sysmacros" = "yes" ; then
6311  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6312fi
6313
6314if test "$have_static_assert" = "yes" ; then
6315  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6316fi
6317
6318if test "$have_utmpx" = "yes" ; then
6319  echo "HAVE_UTMPX=y" >> $config_host_mak
6320fi
6321
6322if test "$ivshmem" = "yes" ; then
6323  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6324fi
6325if test "$capstone" != "no" ; then
6326  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6327fi
6328
6329# Hold two types of flag:
6330#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6331#                                     a thread we have a handle to
6332#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6333#                                     platform
6334if test "$pthread_setname_np" = "yes" ; then
6335  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6336  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6337fi
6338
6339if test "$vxhs" = "yes" ; then
6340  echo "CONFIG_VXHS=y" >> $config_host_mak
6341  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6342fi
6343
6344if test "$tcg_interpreter" = "yes"; then
6345  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6346elif test "$ARCH" = "sparc64" ; then
6347  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6348elif test "$ARCH" = "s390x" ; then
6349  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6350elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6351  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6352elif test "$ARCH" = "ppc64" ; then
6353  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6354else
6355  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6356fi
6357QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6358
6359echo "TOOLS=$tools" >> $config_host_mak
6360echo "ROMS=$roms" >> $config_host_mak
6361echo "MAKE=$make" >> $config_host_mak
6362echo "INSTALL=$install" >> $config_host_mak
6363echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6364echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6365echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6366echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6367echo "PYTHON=$python" >> $config_host_mak
6368echo "CC=$cc" >> $config_host_mak
6369if $iasl -h > /dev/null 2>&1; then
6370  echo "IASL=$iasl" >> $config_host_mak
6371fi
6372echo "CC_I386=$cc_i386" >> $config_host_mak
6373echo "HOST_CC=$host_cc" >> $config_host_mak
6374echo "CXX=$cxx" >> $config_host_mak
6375echo "OBJCC=$objcc" >> $config_host_mak
6376echo "AR=$ar" >> $config_host_mak
6377echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6378echo "AS=$as" >> $config_host_mak
6379echo "CCAS=$ccas" >> $config_host_mak
6380echo "CPP=$cpp" >> $config_host_mak
6381echo "OBJCOPY=$objcopy" >> $config_host_mak
6382echo "LD=$ld" >> $config_host_mak
6383echo "RANLIB=$ranlib" >> $config_host_mak
6384echo "NM=$nm" >> $config_host_mak
6385echo "WINDRES=$windres" >> $config_host_mak
6386echo "CFLAGS=$CFLAGS" >> $config_host_mak
6387echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6388echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6389echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6390echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6391if test "$sparse" = "yes" ; then
6392  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6393  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6394  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6395  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6396  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6397fi
6398if test "$cross_prefix" != ""; then
6399  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6400else
6401  echo "AUTOCONF_HOST := "                             >> $config_host_mak
6402fi
6403echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6404echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6405echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6406echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6407echo "LIBS+=$LIBS" >> $config_host_mak
6408echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6409echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6410echo "EXESUF=$EXESUF" >> $config_host_mak
6411echo "DSOSUF=$DSOSUF" >> $config_host_mak
6412echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6413echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6414echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6415echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6416echo "POD2MAN=$POD2MAN" >> $config_host_mak
6417echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6418if test "$gcov" = "yes" ; then
6419  echo "CONFIG_GCOV=y" >> $config_host_mak
6420  echo "GCOV=$gcov_tool" >> $config_host_mak
6421fi
6422
6423# use included Linux headers
6424if test "$linux" = "yes" ; then
6425  mkdir -p linux-headers
6426  case "$cpu" in
6427  i386|x86_64|x32)
6428    linux_arch=x86
6429    ;;
6430  ppcemb|ppc|ppc64)
6431    linux_arch=powerpc
6432    ;;
6433  s390x)
6434    linux_arch=s390
6435    ;;
6436  aarch64)
6437    linux_arch=arm64
6438    ;;
6439  mips64)
6440    linux_arch=mips
6441    ;;
6442  *)
6443    # For most CPUs the kernel architecture name and QEMU CPU name match.
6444    linux_arch="$cpu"
6445    ;;
6446  esac
6447    # For non-KVM architectures we will not have asm headers
6448    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6449      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6450    fi
6451fi
6452
6453for target in $target_list; do
6454target_dir="$target"
6455config_target_mak=$target_dir/config-target.mak
6456target_name=$(echo $target | cut -d '-' -f 1)
6457target_bigendian="no"
6458
6459case "$target_name" in
6460  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6461  target_bigendian=yes
6462  ;;
6463esac
6464target_softmmu="no"
6465target_user_only="no"
6466target_linux_user="no"
6467target_bsd_user="no"
6468case "$target" in
6469  ${target_name}-softmmu)
6470    target_softmmu="yes"
6471    ;;
6472  ${target_name}-linux-user)
6473    target_user_only="yes"
6474    target_linux_user="yes"
6475    ;;
6476  ${target_name}-bsd-user)
6477    target_user_only="yes"
6478    target_bsd_user="yes"
6479    ;;
6480  *)
6481    error_exit "Target '$target' not recognised"
6482    exit 1
6483    ;;
6484esac
6485
6486mkdir -p $target_dir
6487echo "# Automatically generated by configure - do not modify" > $config_target_mak
6488
6489bflt="no"
6490mttcg="no"
6491interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6492gdb_xml_files=""
6493
6494TARGET_ARCH="$target_name"
6495TARGET_BASE_ARCH=""
6496TARGET_ABI_DIR=""
6497
6498case "$target_name" in
6499  i386)
6500    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6501  ;;
6502  x86_64)
6503    TARGET_BASE_ARCH=i386
6504    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6505  ;;
6506  alpha)
6507    mttcg="yes"
6508  ;;
6509  arm|armeb)
6510    TARGET_ARCH=arm
6511    bflt="yes"
6512    mttcg="yes"
6513    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6514  ;;
6515  aarch64|aarch64_be)
6516    TARGET_ARCH=aarch64
6517    TARGET_BASE_ARCH=arm
6518    bflt="yes"
6519    mttcg="yes"
6520    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6521  ;;
6522  cris)
6523  ;;
6524  hppa)
6525  ;;
6526  lm32)
6527  ;;
6528  m68k)
6529    bflt="yes"
6530    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6531  ;;
6532  microblaze|microblazeel)
6533    TARGET_ARCH=microblaze
6534    bflt="yes"
6535  ;;
6536  mips|mipsel)
6537    TARGET_ARCH=mips
6538    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6539  ;;
6540  mipsn32|mipsn32el)
6541    TARGET_ARCH=mips64
6542    TARGET_BASE_ARCH=mips
6543    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6544    echo "TARGET_ABI32=y" >> $config_target_mak
6545  ;;
6546  mips64|mips64el)
6547    TARGET_ARCH=mips64
6548    TARGET_BASE_ARCH=mips
6549    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6550  ;;
6551  moxie)
6552  ;;
6553  nios2)
6554  ;;
6555  or1k)
6556    TARGET_ARCH=openrisc
6557    TARGET_BASE_ARCH=openrisc
6558  ;;
6559  ppc)
6560    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6561  ;;
6562  ppcemb)
6563    TARGET_BASE_ARCH=ppc
6564    TARGET_ABI_DIR=ppc
6565    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6566  ;;
6567  ppc64)
6568    TARGET_BASE_ARCH=ppc
6569    TARGET_ABI_DIR=ppc
6570    mttcg=yes
6571    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6572  ;;
6573  ppc64le)
6574    TARGET_ARCH=ppc64
6575    TARGET_BASE_ARCH=ppc
6576    TARGET_ABI_DIR=ppc
6577    mttcg=yes
6578    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6579  ;;
6580  ppc64abi32)
6581    TARGET_ARCH=ppc64
6582    TARGET_BASE_ARCH=ppc
6583    TARGET_ABI_DIR=ppc
6584    echo "TARGET_ABI32=y" >> $config_target_mak
6585    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6586  ;;
6587  sh4|sh4eb)
6588    TARGET_ARCH=sh4
6589    bflt="yes"
6590  ;;
6591  sparc)
6592  ;;
6593  sparc64)
6594    TARGET_BASE_ARCH=sparc
6595  ;;
6596  sparc32plus)
6597    TARGET_ARCH=sparc64
6598    TARGET_BASE_ARCH=sparc
6599    TARGET_ABI_DIR=sparc
6600    echo "TARGET_ABI32=y" >> $config_target_mak
6601  ;;
6602  s390x)
6603    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6604  ;;
6605  tilegx)
6606  ;;
6607  tricore)
6608  ;;
6609  unicore32)
6610  ;;
6611  xtensa|xtensaeb)
6612    TARGET_ARCH=xtensa
6613  ;;
6614  *)
6615    error_exit "Unsupported target CPU"
6616  ;;
6617esac
6618# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6619if [ "$TARGET_BASE_ARCH" = "" ]; then
6620  TARGET_BASE_ARCH=$TARGET_ARCH
6621fi
6622
6623symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6624
6625upper() {
6626    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6627}
6628
6629target_arch_name="$(upper $TARGET_ARCH)"
6630echo "TARGET_$target_arch_name=y" >> $config_target_mak
6631echo "TARGET_NAME=$target_name" >> $config_target_mak
6632echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6633if [ "$TARGET_ABI_DIR" = "" ]; then
6634  TARGET_ABI_DIR=$TARGET_ARCH
6635fi
6636echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6637if [ "$HOST_VARIANT_DIR" != "" ]; then
6638    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6639fi
6640
6641if supported_xen_target $target; then
6642    echo "CONFIG_XEN=y" >> $config_target_mak
6643    if test "$xen_pci_passthrough" = yes; then
6644        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6645    fi
6646fi
6647if supported_kvm_target $target; then
6648    echo "CONFIG_KVM=y" >> $config_target_mak
6649    if test "$vhost_net" = "yes" ; then
6650        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6651        if test "$vhost_user" = "yes" ; then
6652            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6653        fi
6654    fi
6655fi
6656if supported_hax_target $target; then
6657    echo "CONFIG_HAX=y" >> $config_target_mak
6658fi
6659if supported_hvf_target $target; then
6660    echo "CONFIG_HVF=y" >> $config_target_mak
6661fi
6662if test "$target_bigendian" = "yes" ; then
6663  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6664fi
6665if test "$target_softmmu" = "yes" ; then
6666  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6667  if test "$mttcg" = "yes" ; then
6668    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6669  fi
6670fi
6671if test "$target_user_only" = "yes" ; then
6672  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6673  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6674fi
6675if test "$target_linux_user" = "yes" ; then
6676  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6677fi
6678list=""
6679if test ! -z "$gdb_xml_files" ; then
6680  for x in $gdb_xml_files; do
6681    list="$list $source_path/gdb-xml/$x"
6682  done
6683  echo "TARGET_XML_FILES=$list" >> $config_target_mak
6684fi
6685
6686if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6687  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6688fi
6689if test "$target_bsd_user" = "yes" ; then
6690  echo "CONFIG_BSD_USER=y" >> $config_target_mak
6691fi
6692
6693# generate QEMU_CFLAGS/LDFLAGS for targets
6694
6695cflags=""
6696ldflags=""
6697
6698disas_config() {
6699  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6700  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6701}
6702
6703for i in $ARCH $TARGET_BASE_ARCH ; do
6704  case "$i" in
6705  alpha)
6706    disas_config "ALPHA"
6707  ;;
6708  aarch64)
6709    if test -n "${cxx}"; then
6710      disas_config "ARM_A64"
6711    fi
6712  ;;
6713  arm)
6714    disas_config "ARM"
6715    if test -n "${cxx}"; then
6716      disas_config "ARM_A64"
6717    fi
6718  ;;
6719  cris)
6720    disas_config "CRIS"
6721  ;;
6722  hppa)
6723    disas_config "HPPA"
6724  ;;
6725  i386|x86_64|x32)
6726    disas_config "I386"
6727  ;;
6728  lm32)
6729    disas_config "LM32"
6730  ;;
6731  m68k)
6732    disas_config "M68K"
6733  ;;
6734  microblaze*)
6735    disas_config "MICROBLAZE"
6736  ;;
6737  mips*)
6738    disas_config "MIPS"
6739  ;;
6740  moxie*)
6741    disas_config "MOXIE"
6742  ;;
6743  nios2)
6744    disas_config "NIOS2"
6745  ;;
6746  or1k)
6747    disas_config "OPENRISC"
6748  ;;
6749  ppc*)
6750    disas_config "PPC"
6751  ;;
6752  s390*)
6753    disas_config "S390"
6754  ;;
6755  sh4)
6756    disas_config "SH4"
6757  ;;
6758  sparc*)
6759    disas_config "SPARC"
6760  ;;
6761  xtensa*)
6762    disas_config "XTENSA"
6763  ;;
6764  esac
6765done
6766if test "$tcg_interpreter" = "yes" ; then
6767  disas_config "TCI"
6768fi
6769
6770case "$ARCH" in
6771alpha)
6772  # Ensure there's only a single GP
6773  cflags="-msmall-data $cflags"
6774;;
6775esac
6776
6777if test "$gprof" = "yes" ; then
6778  echo "TARGET_GPROF=yes" >> $config_target_mak
6779  if test "$target_linux_user" = "yes" ; then
6780    cflags="-p $cflags"
6781    ldflags="-p $ldflags"
6782  fi
6783  if test "$target_softmmu" = "yes" ; then
6784    ldflags="-p $ldflags"
6785    echo "GPROF_CFLAGS=-p" >> $config_target_mak
6786  fi
6787fi
6788
6789if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6790  ldflags="$ldflags $textseg_ldflags"
6791fi
6792
6793# Newer kernels on s390 check for an S390_PGSTE program header and
6794# enable the pgste page table extensions in that case. This makes
6795# the vm.allocate_pgste sysctl unnecessary. We enable this program
6796# header if
6797#  - we build on s390x
6798#  - we build the system emulation for s390x (qemu-system-s390x)
6799#  - KVM is enabled
6800#  - the linker supports --s390-pgste
6801if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6802    if ld_has --s390-pgste ; then
6803        ldflags="-Wl,--s390-pgste $ldflags"
6804    fi
6805fi
6806
6807echo "LDFLAGS+=$ldflags" >> $config_target_mak
6808echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6809
6810done # for target in $targets
6811
6812if [ "$dtc_internal" = "yes" ]; then
6813  echo "config-host.h: subdir-dtc" >> $config_host_mak
6814fi
6815if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6816  echo "config-host.h: subdir-capstone" >> $config_host_mak
6817fi
6818if test -n "$LIBCAPSTONE"; then
6819  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6820fi
6821
6822if test "$numa" = "yes"; then
6823  echo "CONFIG_NUMA=y" >> $config_host_mak
6824fi
6825
6826if test "$ccache_cpp2" = "yes"; then
6827  echo "export CCACHE_CPP2=y" >> $config_host_mak
6828fi
6829
6830# build tree in object directory in case the source is not in the current directory
6831DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6832DIRS="$DIRS docs docs/interop fsdev scsi"
6833DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6834DIRS="$DIRS roms/seabios roms/vgabios"
6835DIRS="$DIRS qapi-generated"
6836FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6837FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6838FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6839FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6840FILES="$FILES pc-bios/spapr-rtas/Makefile"
6841FILES="$FILES pc-bios/s390-ccw/Makefile"
6842FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6843FILES="$FILES pc-bios/qemu-icon.bmp"
6844FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6845for bios_file in \
6846    $source_path/pc-bios/*.bin \
6847    $source_path/pc-bios/*.lid \
6848    $source_path/pc-bios/*.aml \
6849    $source_path/pc-bios/*.rom \
6850    $source_path/pc-bios/*.dtb \
6851    $source_path/pc-bios/*.img \
6852    $source_path/pc-bios/openbios-* \
6853    $source_path/pc-bios/u-boot.* \
6854    $source_path/pc-bios/palcode-*
6855do
6856    FILES="$FILES pc-bios/$(basename $bios_file)"
6857done
6858for test_file in $(find $source_path/tests/acpi-test-data -type f)
6859do
6860    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6861done
6862mkdir -p $DIRS
6863for f in $FILES ; do
6864    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6865        symlink "$source_path/$f" "$f"
6866    fi
6867done
6868
6869# temporary config to build submodules
6870for rom in seabios vgabios ; do
6871    config_mak=roms/$rom/config.mak
6872    echo "# Automatically generated by configure - do not modify" > $config_mak
6873    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6874    echo "AS=$as" >> $config_mak
6875    echo "CCAS=$ccas" >> $config_mak
6876    echo "CC=$cc" >> $config_mak
6877    echo "BCC=bcc" >> $config_mak
6878    echo "CPP=$cpp" >> $config_mak
6879    echo "OBJCOPY=objcopy" >> $config_mak
6880    echo "IASL=$iasl" >> $config_mak
6881    echo "LD=$ld" >> $config_mak
6882    echo "RANLIB=$ranlib" >> $config_mak
6883done
6884
6885# set up tests data directory
6886if [ ! -e tests/data ]; then
6887    symlink "$source_path/tests/data" tests/data
6888fi
6889
6890# set up qemu-iotests in this build directory
6891iotests_common_env="tests/qemu-iotests/common.env"
6892iotests_check="tests/qemu-iotests/check"
6893
6894echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6895echo >> "$iotests_common_env"
6896echo "export PYTHON='$python'" >> "$iotests_common_env"
6897
6898if [ ! -e "$iotests_check" ]; then
6899    symlink "$source_path/$iotests_check" "$iotests_check"
6900fi
6901
6902# Save the configure command line for later reuse.
6903cat <<EOD >config.status
6904#!/bin/sh
6905# Generated by configure.
6906# Run this file to recreate the current configuration.
6907# Compiler output produced by configure, useful for debugging
6908# configure, is in config.log if it exists.
6909EOD
6910printf "exec" >>config.status
6911printf " '%s'" "$0" "$@" >>config.status
6912echo ' "$@"' >>config.status
6913chmod +x config.status
6914
6915rm -r "$TMPDIR1"
6916