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