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