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