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