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