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