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