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