xref: /openbmc/qemu/configure (revision db432672)
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# See if 16-byte vector operations are supported.
5005# Even without a vector unit the compiler may expand these.
5006# There is a bug in old GCC for PPC that crashes here.
5007# Unfortunately it's the system compiler for Centos 7.
5008
5009cat > $TMPC << EOF
5010typedef unsigned char U1 __attribute__((vector_size(16)));
5011typedef unsigned short U2 __attribute__((vector_size(16)));
5012typedef unsigned int U4 __attribute__((vector_size(16)));
5013typedef unsigned long long U8 __attribute__((vector_size(16)));
5014typedef signed char S1 __attribute__((vector_size(16)));
5015typedef signed short S2 __attribute__((vector_size(16)));
5016typedef signed int S4 __attribute__((vector_size(16)));
5017typedef signed long long S8 __attribute__((vector_size(16)));
5018static U1 a1, b1;
5019static U2 a2, b2;
5020static U4 a4, b4;
5021static U8 a8, b8;
5022static S1 c1;
5023static S2 c2;
5024static S4 c4;
5025static S8 c8;
5026static int i;
5027int main(void)
5028{
5029  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5030  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5031  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5032  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5033  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5034  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5035  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5036  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5037  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5038  return 0;
5039}
5040EOF
5041
5042vector16=no
5043if compile_prog "" "" ; then
5044  vector16=yes
5045fi
5046
5047########################################
5048# check if getauxval is available.
5049
5050getauxval=no
5051cat > $TMPC << EOF
5052#include <sys/auxv.h>
5053int main(void) {
5054  return getauxval(AT_HWCAP) == 0;
5055}
5056EOF
5057if compile_prog "" "" ; then
5058    getauxval=yes
5059fi
5060
5061########################################
5062# check if ccache is interfering with
5063# semantic analysis of macros
5064
5065unset CCACHE_CPP2
5066ccache_cpp2=no
5067cat > $TMPC << EOF
5068static const int Z = 1;
5069#define fn() ({ Z; })
5070#define TAUT(X) ((X) == Z)
5071#define PAREN(X, Y) (X == Y)
5072#define ID(X) (X)
5073int main(int argc, char *argv[])
5074{
5075    int x = 0, y = 0;
5076    x = ID(x);
5077    x = fn();
5078    fn();
5079    if (PAREN(x, y)) return 0;
5080    if (TAUT(Z)) return 0;
5081    return 0;
5082}
5083EOF
5084
5085if ! compile_object "-Werror"; then
5086    ccache_cpp2=yes
5087fi
5088
5089#################################################
5090# clang does not support glibc + FORTIFY_SOURCE.
5091
5092if test "$fortify_source" != "no"; then
5093  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5094    fortify_source="no";
5095  elif test -n "$cxx" && has $cxx &&
5096       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5097    fortify_source="no";
5098  else
5099    fortify_source="yes"
5100  fi
5101fi
5102
5103##########################################
5104# check if struct fsxattr is available via linux/fs.h
5105
5106have_fsxattr=no
5107cat > $TMPC << EOF
5108#include <linux/fs.h>
5109struct fsxattr foo;
5110int main(void) {
5111  return 0;
5112}
5113EOF
5114if compile_prog "" "" ; then
5115    have_fsxattr=yes
5116fi
5117
5118##########################################
5119# check if rtnetlink.h exists and is useful
5120have_rtnetlink=no
5121cat > $TMPC << EOF
5122#include <linux/rtnetlink.h>
5123int main(void) {
5124  return IFLA_PROTO_DOWN;
5125}
5126EOF
5127if compile_prog "" "" ; then
5128    have_rtnetlink=yes
5129fi
5130
5131##########################################
5132# check for usable AF_VSOCK environment
5133have_af_vsock=no
5134cat > $TMPC << EOF
5135#include <errno.h>
5136#include <sys/types.h>
5137#include <sys/socket.h>
5138#if !defined(AF_VSOCK)
5139# error missing AF_VSOCK flag
5140#endif
5141#include <linux/vm_sockets.h>
5142int main(void) {
5143    int sock, ret;
5144    struct sockaddr_vm svm;
5145    socklen_t len = sizeof(svm);
5146    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5147    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5148    if ((ret == -1) && (errno == ENOTCONN)) {
5149        return 0;
5150    }
5151    return -1;
5152}
5153EOF
5154if compile_prog "" "" ; then
5155    have_af_vsock=yes
5156fi
5157
5158##########################################
5159# check for usable AF_ALG environment
5160hava_afalg=no
5161cat > $TMPC << EOF
5162#include <errno.h>
5163#include <sys/types.h>
5164#include <sys/socket.h>
5165#include <linux/if_alg.h>
5166int main(void) {
5167    int sock;
5168    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5169    return sock;
5170}
5171EOF
5172if compile_prog "" "" ; then
5173    have_afalg=yes
5174fi
5175if test "$crypto_afalg" = "yes"
5176then
5177    if test "$have_afalg" != "yes"
5178    then
5179	error_exit "AF_ALG requested but could not be detected"
5180    fi
5181fi
5182
5183
5184#################################################
5185# Check to see if we have the Hypervisor framework
5186if [ "$darwin" = "yes" ] ; then
5187  cat > $TMPC << EOF
5188#include <Hypervisor/hv.h>
5189int main() { return 0;}
5190EOF
5191  if ! compile_object ""; then
5192    hvf='no'
5193  else
5194    hvf='yes'
5195    LDFLAGS="-framework Hypervisor $LDFLAGS"
5196  fi
5197fi
5198
5199#################################################
5200# Sparc implicitly links with --relax, which is
5201# incompatible with -r, so --no-relax should be
5202# given. It does no harm to give it on other
5203# platforms too.
5204
5205# Note: the prototype is needed since QEMU_CFLAGS
5206#       contains -Wmissing-prototypes
5207cat > $TMPC << EOF
5208extern int foo(void);
5209int foo(void) { return 0; }
5210EOF
5211if ! compile_object ""; then
5212  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5213fi
5214for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5215  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5216    LD_REL_FLAGS=$i
5217    break
5218  fi
5219done
5220if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5221  feature_not_found "modules" "Cannot find how to build relocatable objects"
5222fi
5223
5224##########################################
5225# check for sysmacros.h
5226
5227have_sysmacros=no
5228cat > $TMPC << EOF
5229#include <sys/sysmacros.h>
5230int main(void) {
5231    return makedev(0, 0);
5232}
5233EOF
5234if compile_prog "" "" ; then
5235    have_sysmacros=yes
5236fi
5237
5238##########################################
5239# Veritas HyperScale block driver VxHS
5240# Check if libvxhs is installed
5241
5242if test "$vxhs" != "no" ; then
5243  cat > $TMPC <<EOF
5244#include <stdint.h>
5245#include <qnio/qnio_api.h>
5246
5247void *vxhs_callback;
5248
5249int main(void) {
5250    iio_init(QNIO_VERSION, vxhs_callback);
5251    return 0;
5252}
5253EOF
5254  vxhs_libs="-lvxhs -lssl"
5255  if compile_prog "" "$vxhs_libs" ; then
5256    vxhs=yes
5257  else
5258    if test "$vxhs" = "yes" ; then
5259      feature_not_found "vxhs block device" "Install libvxhs See github"
5260    fi
5261    vxhs=no
5262  fi
5263fi
5264
5265##########################################
5266# check for _Static_assert()
5267
5268have_static_assert=no
5269cat > $TMPC << EOF
5270_Static_assert(1, "success");
5271int main(void) {
5272    return 0;
5273}
5274EOF
5275if compile_prog "" "" ; then
5276    have_static_assert=yes
5277fi
5278
5279##########################################
5280# check for utmpx.h, it is missing e.g. on OpenBSD
5281
5282have_utmpx=no
5283cat > $TMPC << EOF
5284#include <utmpx.h>
5285struct utmpx user_info;
5286int main(void) {
5287    return 0;
5288}
5289EOF
5290if compile_prog "" "" ; then
5291    have_utmpx=yes
5292fi
5293
5294##########################################
5295# checks for sanitizers
5296
5297write_c_skeleton
5298
5299have_asan=no
5300have_ubsan=no
5301have_asan_iface_h=no
5302have_asan_iface_fiber=no
5303
5304if test "$sanitizers" = "yes" ; then
5305  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5306      have_asan=yes
5307  fi
5308  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5309      have_ubsan=yes
5310  fi
5311
5312  if check_include "sanitizer/asan_interface.h" ; then
5313      have_asan_iface_h=yes
5314  fi
5315
5316  cat > $TMPC << EOF
5317#include <sanitizer/asan_interface.h>
5318int main(void) {
5319  __sanitizer_start_switch_fiber(0, 0, 0);
5320  return 0;
5321}
5322EOF
5323  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5324      have_asan_iface_fiber=yes
5325  fi
5326fi
5327
5328##########################################
5329# End of CC checks
5330# After here, no more $cc or $ld runs
5331
5332write_c_skeleton
5333
5334if test "$gcov" = "yes" ; then
5335  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5336  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5337elif test "$fortify_source" = "yes" ; then
5338  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5339elif test "$debug" = "yes"; then
5340  if compile_prog "-Og" ""; then
5341      CFLAGS="-Og $CFLAGS"
5342  elif compile_prog "-O1" ""; then
5343      CFLAGS="-O1 $CFLAGS"
5344  fi
5345  # Workaround GCC false-positive Wuninitialized bugs with Og or O1:
5346  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
5347  if cc_has_warning_flag "-Wno-maybe-uninitialized"; then
5348      CFLAGS="-Wno-maybe-uninitialized $CFLAGS"
5349  fi
5350else
5351    CFLAGS="-O2 $CFLAGS"
5352fi
5353
5354if test "$have_asan" = "yes"; then
5355  CFLAGS="-fsanitize=address $CFLAGS"
5356  if test "$have_asan_iface_h" = "no" ; then
5357      echo "ASAN build enabled, but ASAN header missing." \
5358           "Without code annotation, the report may be inferior."
5359  elif test "$have_asan_iface_fiber" = "no" ; then
5360      echo "ASAN build enabled, but ASAN header is too old." \
5361           "Without code annotation, the report may be inferior."
5362  fi
5363fi
5364if test "$have_ubsan" = "yes"; then
5365  CFLAGS="-fsanitize=undefined $CFLAGS"
5366fi
5367
5368##########################################
5369# Do we have libnfs
5370if test "$libnfs" != "no" ; then
5371  if $pkg_config --atleast-version=1.9.3 libnfs; then
5372    libnfs="yes"
5373    libnfs_libs=$($pkg_config --libs libnfs)
5374  else
5375    if test "$libnfs" = "yes" ; then
5376      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5377    fi
5378    libnfs="no"
5379  fi
5380fi
5381
5382# Now we've finished running tests it's OK to add -Werror to the compiler flags
5383if test "$werror" = "yes"; then
5384    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5385fi
5386
5387if test "$solaris" = "no" ; then
5388    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5389        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5390    fi
5391fi
5392
5393# test if pod2man has --utf8 option
5394if pod2man --help | grep -q utf8; then
5395    POD2MAN="pod2man --utf8"
5396else
5397    POD2MAN="pod2man"
5398fi
5399
5400# Use ASLR, no-SEH and DEP if available
5401if test "$mingw32" = "yes" ; then
5402    for flag in --dynamicbase --no-seh --nxcompat; do
5403        if ld_has $flag ; then
5404            LDFLAGS="-Wl,$flag $LDFLAGS"
5405        fi
5406    done
5407fi
5408
5409qemu_confdir=$sysconfdir$confsuffix
5410qemu_moddir=$libdir$confsuffix
5411qemu_datadir=$datadir$confsuffix
5412qemu_localedir="$datadir/locale"
5413
5414# We can only support ivshmem if we have eventfd
5415if [ "$eventfd" = "yes" ]; then
5416  ivshmem=yes
5417fi
5418
5419tools=""
5420if test "$want_tools" = "yes" ; then
5421  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5422  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5423    tools="qemu-nbd\$(EXESUF) $tools"
5424  fi
5425  if [ "$ivshmem" = "yes" ]; then
5426    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5427  fi
5428fi
5429if test "$softmmu" = yes ; then
5430  if test "$linux" = yes; then
5431    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5432      virtfs=yes
5433      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5434    else
5435      if test "$virtfs" = yes; then
5436        error_exit "VirtFS requires libcap devel and libattr devel"
5437      fi
5438      virtfs=no
5439    fi
5440    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5441      mpath=yes
5442    else
5443      if test "$mpath" = yes; then
5444        error_exit "Multipath requires libmpathpersist devel"
5445      fi
5446      mpath=no
5447    fi
5448    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5449  else
5450    if test "$virtfs" = yes; then
5451      error_exit "VirtFS is supported only on Linux"
5452    fi
5453    virtfs=no
5454    if test "$mpath" = yes; then
5455      error_exit "Multipath is supported only on Linux"
5456    fi
5457    mpath=no
5458  fi
5459  if test "$xkbcommon" = "yes"; then
5460    tools="qemu-keymap\$(EXESUF) $tools"
5461  fi
5462fi
5463
5464# Probe for guest agent support/options
5465
5466if [ "$guest_agent" != "no" ]; then
5467  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5468      tools="qemu-ga $tools"
5469      guest_agent=yes
5470  elif [ "$guest_agent" != yes ]; then
5471      guest_agent=no
5472  else
5473      error_exit "Guest agent is not supported on this platform"
5474  fi
5475fi
5476
5477# Guest agent Window MSI  package
5478
5479if test "$guest_agent" != yes; then
5480  if test "$guest_agent_msi" = yes; then
5481    error_exit "MSI guest agent package requires guest agent enabled"
5482  fi
5483  guest_agent_msi=no
5484elif test "$mingw32" != "yes"; then
5485  if test "$guest_agent_msi" = "yes"; then
5486    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5487  fi
5488  guest_agent_msi=no
5489elif ! has wixl; then
5490  if test "$guest_agent_msi" = "yes"; then
5491    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5492  fi
5493  guest_agent_msi=no
5494else
5495  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5496  # disabled explicitly
5497  if test "$guest_agent_msi" != "no"; then
5498    guest_agent_msi=yes
5499  fi
5500fi
5501
5502if test "$guest_agent_msi" = "yes"; then
5503  if test "$guest_agent_with_vss" = "yes"; then
5504    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5505  fi
5506
5507  if test "$QEMU_GA_MANUFACTURER" = ""; then
5508    QEMU_GA_MANUFACTURER=QEMU
5509  fi
5510
5511  if test "$QEMU_GA_DISTRO" = ""; then
5512    QEMU_GA_DISTRO=Linux
5513  fi
5514
5515  if test "$QEMU_GA_VERSION" = ""; then
5516      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5517  fi
5518
5519  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5520
5521  case "$cpu" in
5522  x86_64)
5523    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5524    ;;
5525  i386)
5526    QEMU_GA_MSI_ARCH="-D Arch=32"
5527    ;;
5528  *)
5529    error_exit "CPU $cpu not supported for building installation package"
5530    ;;
5531  esac
5532fi
5533
5534# Mac OS X ships with a broken assembler
5535roms=
5536if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5537        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5538        "$softmmu" = yes ; then
5539    # Different host OS linkers have different ideas about the name of the ELF
5540    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5541    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5542    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5543        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5544            ld_i386_emulation="$emu"
5545            roms="optionrom"
5546            break
5547        fi
5548    done
5549fi
5550if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5551  roms="$roms spapr-rtas"
5552fi
5553
5554if test "$cpu" = "s390x" ; then
5555  roms="$roms s390-ccw"
5556fi
5557
5558# Probe for the need for relocating the user-only binary.
5559if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5560  textseg_addr=
5561  case "$cpu" in
5562    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5563      # ??? Rationale for choosing this address
5564      textseg_addr=0x60000000
5565      ;;
5566    mips)
5567      # A 256M aligned address, high in the address space, with enough
5568      # room for the code_gen_buffer above it before the stack.
5569      textseg_addr=0x60000000
5570      ;;
5571  esac
5572  if [ -n "$textseg_addr" ]; then
5573    cat > $TMPC <<EOF
5574    int main(void) { return 0; }
5575EOF
5576    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5577    if ! compile_prog "" "$textseg_ldflags"; then
5578      # In case ld does not support -Ttext-segment, edit the default linker
5579      # script via sed to set the .text start addr.  This is needed on FreeBSD
5580      # at least.
5581      if ! $ld --verbose >/dev/null 2>&1; then
5582        error_exit \
5583            "We need to link the QEMU user mode binaries at a" \
5584            "specific text address. Unfortunately your linker" \
5585            "doesn't support either the -Ttext-segment option or" \
5586            "printing the default linker script with --verbose." \
5587            "If you don't want the user mode binaries, pass the" \
5588            "--disable-user option to configure."
5589      fi
5590
5591      $ld --verbose | sed \
5592        -e '1,/==================================================/d' \
5593        -e '/==================================================/,$d' \
5594        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5595        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5596      textseg_ldflags="-Wl,-T../config-host.ld"
5597    fi
5598  fi
5599fi
5600
5601# Check that the C++ compiler exists and works with the C compiler.
5602# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5603if has $cxx; then
5604    cat > $TMPC <<EOF
5605int c_function(void);
5606int main(void) { return c_function(); }
5607EOF
5608
5609    compile_object
5610
5611    cat > $TMPCXX <<EOF
5612extern "C" {
5613   int c_function(void);
5614}
5615int c_function(void) { return 42; }
5616EOF
5617
5618    update_cxxflags
5619
5620    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5621        # C++ compiler $cxx works ok with C compiler $cc
5622        :
5623    else
5624        echo "C++ compiler $cxx does not work with C compiler $cc"
5625        echo "Disabling C++ specific optional code"
5626        cxx=
5627    fi
5628else
5629    echo "No C++ compiler available; disabling C++ specific optional code"
5630    cxx=
5631fi
5632
5633echo_version() {
5634    if test "$1" = "yes" ; then
5635        echo "($2)"
5636    fi
5637}
5638
5639# prepend pixman and ftd flags after all config tests are done
5640QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5641libs_softmmu="$pixman_libs $libs_softmmu"
5642
5643echo "Install prefix    $prefix"
5644echo "BIOS directory    $(eval echo $qemu_datadir)"
5645echo "firmware path     $(eval echo $firmwarepath)"
5646echo "binary directory  $(eval echo $bindir)"
5647echo "library directory $(eval echo $libdir)"
5648echo "module directory  $(eval echo $qemu_moddir)"
5649echo "libexec directory $(eval echo $libexecdir)"
5650echo "include directory $(eval echo $includedir)"
5651echo "config directory  $(eval echo $sysconfdir)"
5652if test "$mingw32" = "no" ; then
5653echo "local state directory   $(eval echo $local_statedir)"
5654echo "Manual directory  $(eval echo $mandir)"
5655echo "ELF interp prefix $interp_prefix"
5656else
5657echo "local state directory   queried at runtime"
5658echo "Windows SDK       $win_sdk"
5659fi
5660echo "Source path       $source_path"
5661echo "GIT binary        $git"
5662echo "GIT submodules    $git_submodules"
5663echo "C compiler        $cc"
5664echo "Host C compiler   $host_cc"
5665echo "C++ compiler      $cxx"
5666echo "Objective-C compiler $objcc"
5667echo "ARFLAGS           $ARFLAGS"
5668echo "CFLAGS            $CFLAGS"
5669echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5670echo "LDFLAGS           $LDFLAGS"
5671echo "make              $make"
5672echo "install           $install"
5673echo "python            $python"
5674if test "$slirp" = "yes" ; then
5675    echo "smbd              $smbd"
5676fi
5677echo "module support    $modules"
5678echo "host CPU          $cpu"
5679echo "host big endian   $bigendian"
5680echo "target list       $target_list"
5681echo "gprof enabled     $gprof"
5682echo "sparse enabled    $sparse"
5683echo "strip binaries    $strip_opt"
5684echo "profiler          $profiler"
5685echo "static build      $static"
5686if test "$darwin" = "yes" ; then
5687    echo "Cocoa support     $cocoa"
5688fi
5689echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5690echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5691echo "GTK GL support    $gtk_gl"
5692echo "VTE support       $vte $(echo_version $vte $vteversion)"
5693echo "TLS priority      $tls_priority"
5694echo "GNUTLS support    $gnutls"
5695echo "GNUTLS rnd        $gnutls_rnd"
5696echo "libgcrypt         $gcrypt"
5697echo "libgcrypt kdf     $gcrypt_kdf"
5698echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5699echo "nettle kdf        $nettle_kdf"
5700echo "libtasn1          $tasn1"
5701echo "curses support    $curses"
5702echo "virgl support     $virglrenderer"
5703echo "curl support      $curl"
5704echo "mingw32 support   $mingw32"
5705echo "Audio drivers     $audio_drv_list"
5706echo "Block whitelist (rw) $block_drv_rw_whitelist"
5707echo "Block whitelist (ro) $block_drv_ro_whitelist"
5708echo "VirtFS support    $virtfs"
5709echo "Multipath support $mpath"
5710echo "VNC support       $vnc"
5711if test "$vnc" = "yes" ; then
5712    echo "VNC SASL support  $vnc_sasl"
5713    echo "VNC JPEG support  $vnc_jpeg"
5714    echo "VNC PNG support   $vnc_png"
5715fi
5716if test -n "$sparc_cpu"; then
5717    echo "Target Sparc Arch $sparc_cpu"
5718fi
5719echo "xen support       $xen"
5720if test "$xen" = "yes" ; then
5721  echo "xen ctrl version  $xen_ctrl_version"
5722  echo "pv dom build      $xen_pv_domain_build"
5723fi
5724echo "brlapi support    $brlapi"
5725echo "bluez  support    $bluez"
5726echo "Documentation     $docs"
5727echo "PIE               $pie"
5728echo "vde support       $vde"
5729echo "netmap support    $netmap"
5730echo "Linux AIO support $linux_aio"
5731echo "ATTR/XATTR support $attr"
5732echo "Install blobs     $blobs"
5733echo "KVM support       $kvm"
5734echo "HAX support       $hax"
5735echo "HVF support       $hvf"
5736echo "WHPX support      $whpx"
5737echo "TCG support       $tcg"
5738if test "$tcg" = "yes" ; then
5739    echo "TCG debug enabled $debug_tcg"
5740    echo "TCG interpreter   $tcg_interpreter"
5741fi
5742echo "malloc trim support $malloc_trim"
5743echo "RDMA support      $rdma"
5744echo "fdt support       $fdt"
5745echo "preadv support    $preadv"
5746echo "fdatasync         $fdatasync"
5747echo "madvise           $madvise"
5748echo "posix_madvise     $posix_madvise"
5749echo "libcap-ng support $cap_ng"
5750echo "vhost-net support $vhost_net"
5751echo "vhost-scsi support $vhost_scsi"
5752echo "vhost-vsock support $vhost_vsock"
5753echo "vhost-user support $vhost_user"
5754echo "Trace backends    $trace_backends"
5755if have_backend "simple"; then
5756echo "Trace output file $trace_file-<pid>"
5757fi
5758echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5759echo "rbd support       $rbd"
5760echo "xfsctl support    $xfs"
5761echo "smartcard support $smartcard"
5762echo "libusb            $libusb"
5763echo "usb net redir     $usb_redir"
5764echo "OpenGL support    $opengl"
5765echo "OpenGL dmabufs    $opengl_dmabuf"
5766echo "libiscsi support  $libiscsi"
5767echo "libnfs support    $libnfs"
5768echo "build guest agent $guest_agent"
5769echo "QGA VSS support   $guest_agent_with_vss"
5770echo "QGA w32 disk info $guest_agent_ntddscsi"
5771echo "QGA MSI support   $guest_agent_msi"
5772echo "seccomp support   $seccomp"
5773echo "coroutine backend $coroutine"
5774echo "coroutine pool    $coroutine_pool"
5775echo "debug stack usage $debug_stack_usage"
5776echo "crypto afalg      $crypto_afalg"
5777echo "GlusterFS support $glusterfs"
5778echo "gcov              $gcov_tool"
5779echo "gcov enabled      $gcov"
5780echo "TPM support       $tpm"
5781echo "libssh2 support   $libssh2"
5782echo "TPM passthrough   $tpm_passthrough"
5783echo "TPM emulator      $tpm_emulator"
5784echo "QOM debugging     $qom_cast_debug"
5785echo "Live block migration $live_block_migration"
5786echo "lzo support       $lzo"
5787echo "snappy support    $snappy"
5788echo "bzip2 support     $bzip2"
5789echo "NUMA host support $numa"
5790echo "libxml2           $libxml2"
5791echo "tcmalloc support  $tcmalloc"
5792echo "jemalloc support  $jemalloc"
5793echo "avx2 optimization $avx2_opt"
5794echo "replication support $replication"
5795echo "VxHS block device $vxhs"
5796echo "capstone          $capstone"
5797
5798if test "$sdl_too_old" = "yes"; then
5799echo "-> Your SDL version is too old - please upgrade to have SDL support"
5800fi
5801
5802if test "$gtkabi" = "2.0"; then
5803    echo
5804    echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5805    echo "WARNING: future releases. Please switch to using GTK 3.0"
5806fi
5807
5808if test "$sdlabi" = "1.2"; then
5809    echo
5810    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5811    echo "WARNING: future releases. Please switch to using SDL 2.0"
5812fi
5813
5814if test "$supported_cpu" = "no"; then
5815    echo
5816    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5817    echo
5818    echo "CPU host architecture $cpu support is not currently maintained."
5819    echo "The QEMU project intends to remove support for this host CPU in"
5820    echo "a future release if nobody volunteers to maintain it and to"
5821    echo "provide a build host for our continuous integration setup."
5822    echo "configure has succeeded and you can continue to build, but"
5823    echo "if you care about QEMU on this platform you should contact"
5824    echo "us upstream at qemu-devel@nongnu.org."
5825fi
5826
5827if test "$supported_os" = "no"; then
5828    echo
5829    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5830    echo
5831    echo "Host OS $targetos support is not currently maintained."
5832    echo "The QEMU project intends to remove support for this host OS in"
5833    echo "a future release if nobody volunteers to maintain it and to"
5834    echo "provide a build host for our continuous integration setup."
5835    echo "configure has succeeded and you can continue to build, but"
5836    echo "if you care about QEMU on this platform you should contact"
5837    echo "us upstream at qemu-devel@nongnu.org."
5838fi
5839
5840config_host_mak="config-host.mak"
5841
5842echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5843
5844echo "# Automatically generated by configure - do not modify" > $config_host_mak
5845echo >> $config_host_mak
5846
5847echo all: >> $config_host_mak
5848echo "prefix=$prefix" >> $config_host_mak
5849echo "bindir=$bindir" >> $config_host_mak
5850echo "libdir=$libdir" >> $config_host_mak
5851echo "libexecdir=$libexecdir" >> $config_host_mak
5852echo "includedir=$includedir" >> $config_host_mak
5853echo "mandir=$mandir" >> $config_host_mak
5854echo "sysconfdir=$sysconfdir" >> $config_host_mak
5855echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5856echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5857echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5858echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5859echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5860if test "$mingw32" = "no" ; then
5861  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5862fi
5863echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5864echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5865echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5866echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5867echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5868echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5869echo "GIT=$git" >> $config_host_mak
5870echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5871echo "GIT_UPDATE=$git_update" >> $config_host_mak
5872
5873echo "ARCH=$ARCH" >> $config_host_mak
5874
5875if test "$debug_tcg" = "yes" ; then
5876  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5877fi
5878if test "$strip_opt" = "yes" ; then
5879  echo "STRIP=${strip}" >> $config_host_mak
5880fi
5881if test "$bigendian" = "yes" ; then
5882  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5883fi
5884if test "$mingw32" = "yes" ; then
5885  echo "CONFIG_WIN32=y" >> $config_host_mak
5886  rc_version=$(cat $source_path/VERSION)
5887  version_major=${rc_version%%.*}
5888  rc_version=${rc_version#*.}
5889  version_minor=${rc_version%%.*}
5890  rc_version=${rc_version#*.}
5891  version_subminor=${rc_version%%.*}
5892  version_micro=0
5893  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5894  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5895  if test "$guest_agent_with_vss" = "yes" ; then
5896    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5897    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5898    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5899  fi
5900  if test "$guest_agent_ntddscsi" = "yes" ; then
5901    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5902  fi
5903  if test "$guest_agent_msi" = "yes"; then
5904    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5905    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5906    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5907    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5908    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5909    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5910    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5911  fi
5912else
5913  echo "CONFIG_POSIX=y" >> $config_host_mak
5914fi
5915
5916if test "$linux" = "yes" ; then
5917  echo "CONFIG_LINUX=y" >> $config_host_mak
5918fi
5919
5920if test "$darwin" = "yes" ; then
5921  echo "CONFIG_DARWIN=y" >> $config_host_mak
5922fi
5923
5924if test "$solaris" = "yes" ; then
5925  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5926fi
5927if test "$haiku" = "yes" ; then
5928  echo "CONFIG_HAIKU=y" >> $config_host_mak
5929fi
5930if test "$static" = "yes" ; then
5931  echo "CONFIG_STATIC=y" >> $config_host_mak
5932fi
5933if test "$profiler" = "yes" ; then
5934  echo "CONFIG_PROFILER=y" >> $config_host_mak
5935fi
5936if test "$slirp" = "yes" ; then
5937  echo "CONFIG_SLIRP=y" >> $config_host_mak
5938  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5939fi
5940if test "$vde" = "yes" ; then
5941  echo "CONFIG_VDE=y" >> $config_host_mak
5942  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5943fi
5944if test "$netmap" = "yes" ; then
5945  echo "CONFIG_NETMAP=y" >> $config_host_mak
5946fi
5947if test "$l2tpv3" = "yes" ; then
5948  echo "CONFIG_L2TPV3=y" >> $config_host_mak
5949fi
5950if test "$cap_ng" = "yes" ; then
5951  echo "CONFIG_LIBCAP=y" >> $config_host_mak
5952fi
5953echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5954for drv in $audio_drv_list; do
5955    def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5956    echo "$def=y" >> $config_host_mak
5957done
5958echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5959echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5960echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5961echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5962echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5963if test "$audio_pt_int" = "yes" ; then
5964  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5965fi
5966if test "$audio_win_int" = "yes" ; then
5967  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5968fi
5969echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5970echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5971if test "$vnc" = "yes" ; then
5972  echo "CONFIG_VNC=y" >> $config_host_mak
5973fi
5974if test "$vnc_sasl" = "yes" ; then
5975  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5976fi
5977if test "$vnc_jpeg" = "yes" ; then
5978  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5979fi
5980if test "$vnc_png" = "yes" ; then
5981  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5982fi
5983if test "$xkbcommon" = "yes" ; then
5984  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5985  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5986fi
5987if test "$fnmatch" = "yes" ; then
5988  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5989fi
5990if test "$xfs" = "yes" ; then
5991  echo "CONFIG_XFS=y" >> $config_host_mak
5992fi
5993qemu_version=$(head $source_path/VERSION)
5994echo "VERSION=$qemu_version" >>$config_host_mak
5995echo "PKGVERSION=$pkgversion" >>$config_host_mak
5996echo "SRC_PATH=$source_path" >> $config_host_mak
5997echo "TARGET_DIRS=$target_list" >> $config_host_mak
5998if [ "$docs" = "yes" ] ; then
5999  echo "BUILD_DOCS=yes" >> $config_host_mak
6000fi
6001if test "$modules" = "yes"; then
6002  # $shacmd can generate a hash started with digit, which the compiler doesn't
6003  # like as an symbol. So prefix it with an underscore
6004  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6005  echo "CONFIG_MODULES=y" >> $config_host_mak
6006fi
6007if test "$sdl" = "yes" ; then
6008  echo "CONFIG_SDL=y" >> $config_host_mak
6009  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6010  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6011  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6012fi
6013if test "$cocoa" = "yes" ; then
6014  echo "CONFIG_COCOA=y" >> $config_host_mak
6015fi
6016if test "$curses" = "yes" ; then
6017  echo "CONFIG_CURSES=y" >> $config_host_mak
6018fi
6019if test "$pipe2" = "yes" ; then
6020  echo "CONFIG_PIPE2=y" >> $config_host_mak
6021fi
6022if test "$accept4" = "yes" ; then
6023  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6024fi
6025if test "$splice" = "yes" ; then
6026  echo "CONFIG_SPLICE=y" >> $config_host_mak
6027fi
6028if test "$eventfd" = "yes" ; then
6029  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6030fi
6031if test "$memfd" = "yes" ; then
6032  echo "CONFIG_MEMFD=y" >> $config_host_mak
6033fi
6034if test "$fallocate" = "yes" ; then
6035  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6036fi
6037if test "$fallocate_punch_hole" = "yes" ; then
6038  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6039fi
6040if test "$fallocate_zero_range" = "yes" ; then
6041  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6042fi
6043if test "$posix_fallocate" = "yes" ; then
6044  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6045fi
6046if test "$sync_file_range" = "yes" ; then
6047  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6048fi
6049if test "$fiemap" = "yes" ; then
6050  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6051fi
6052if test "$dup3" = "yes" ; then
6053  echo "CONFIG_DUP3=y" >> $config_host_mak
6054fi
6055if test "$ppoll" = "yes" ; then
6056  echo "CONFIG_PPOLL=y" >> $config_host_mak
6057fi
6058if test "$prctl_pr_set_timerslack" = "yes" ; then
6059  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6060fi
6061if test "$epoll" = "yes" ; then
6062  echo "CONFIG_EPOLL=y" >> $config_host_mak
6063fi
6064if test "$epoll_create1" = "yes" ; then
6065  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6066fi
6067if test "$sendfile" = "yes" ; then
6068  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6069fi
6070if test "$timerfd" = "yes" ; then
6071  echo "CONFIG_TIMERFD=y" >> $config_host_mak
6072fi
6073if test "$setns" = "yes" ; then
6074  echo "CONFIG_SETNS=y" >> $config_host_mak
6075fi
6076if test "$clock_adjtime" = "yes" ; then
6077  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6078fi
6079if test "$syncfs" = "yes" ; then
6080  echo "CONFIG_SYNCFS=y" >> $config_host_mak
6081fi
6082if test "$inotify" = "yes" ; then
6083  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6084fi
6085if test "$inotify1" = "yes" ; then
6086  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6087fi
6088if test "$sem_timedwait" = "yes" ; then
6089  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6090fi
6091if test "$byteswap_h" = "yes" ; then
6092  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6093fi
6094if test "$bswap_h" = "yes" ; then
6095  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6096fi
6097if test "$curl" = "yes" ; then
6098  echo "CONFIG_CURL=m" >> $config_host_mak
6099  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6100  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6101fi
6102if test "$brlapi" = "yes" ; then
6103  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6104  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6105fi
6106if test "$bluez" = "yes" ; then
6107  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6108  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6109fi
6110if test "$glib_subprocess" = "yes" ; then
6111  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6112fi
6113if test "$gtk" = "yes" ; then
6114  echo "CONFIG_GTK=y" >> $config_host_mak
6115  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
6116  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6117  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6118  if test "$gtk_gl" = "yes" ; then
6119    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6120  fi
6121fi
6122echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6123if test "$gnutls" = "yes" ; then
6124  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6125fi
6126if test "$gnutls_rnd" = "yes" ; then
6127  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6128fi
6129if test "$gcrypt" = "yes" ; then
6130  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6131  if test "$gcrypt_hmac" = "yes" ; then
6132    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6133  fi
6134  if test "$gcrypt_kdf" = "yes" ; then
6135    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6136  fi
6137fi
6138if test "$nettle" = "yes" ; then
6139  echo "CONFIG_NETTLE=y" >> $config_host_mak
6140  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6141  if test "$nettle_kdf" = "yes" ; then
6142    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6143  fi
6144fi
6145if test "$tasn1" = "yes" ; then
6146  echo "CONFIG_TASN1=y" >> $config_host_mak
6147fi
6148if test "$have_ifaddrs_h" = "yes" ; then
6149    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6150fi
6151if test "$have_broken_size_max" = "yes" ; then
6152    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6153fi
6154
6155# Work around a system header bug with some kernel/XFS header
6156# versions where they both try to define 'struct fsxattr':
6157# xfs headers will not try to redefine structs from linux headers
6158# if this macro is set.
6159if test "$have_fsxattr" = "yes" ; then
6160    echo "HAVE_FSXATTR=y" >> $config_host_mak
6161fi
6162if test "$vte" = "yes" ; then
6163  echo "CONFIG_VTE=y" >> $config_host_mak
6164  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6165fi
6166if test "$virglrenderer" = "yes" ; then
6167  echo "CONFIG_VIRGL=y" >> $config_host_mak
6168  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6169  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6170fi
6171if test "$xen" = "yes" ; then
6172  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6173  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6174  if test "$xen_pv_domain_build" = "yes" ; then
6175    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6176  fi
6177fi
6178if test "$linux_aio" = "yes" ; then
6179  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6180fi
6181if test "$attr" = "yes" ; then
6182  echo "CONFIG_ATTR=y" >> $config_host_mak
6183fi
6184if test "$libattr" = "yes" ; then
6185  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6186fi
6187if test "$virtfs" = "yes" ; then
6188  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6189fi
6190if test "$mpath" = "yes" ; then
6191  echo "CONFIG_MPATH=y" >> $config_host_mak
6192fi
6193if test "$vhost_scsi" = "yes" ; then
6194  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6195fi
6196if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6197  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6198fi
6199if test "$vhost_vsock" = "yes" ; then
6200  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6201fi
6202if test "$vhost_user" = "yes" ; then
6203  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6204fi
6205if test "$blobs" = "yes" ; then
6206  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6207fi
6208if test "$iovec" = "yes" ; then
6209  echo "CONFIG_IOVEC=y" >> $config_host_mak
6210fi
6211if test "$preadv" = "yes" ; then
6212  echo "CONFIG_PREADV=y" >> $config_host_mak
6213fi
6214if test "$fdt" = "yes" ; then
6215  echo "CONFIG_FDT=y" >> $config_host_mak
6216fi
6217if test "$signalfd" = "yes" ; then
6218  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6219fi
6220if test "$tcg" = "yes"; then
6221  echo "CONFIG_TCG=y" >> $config_host_mak
6222  if test "$tcg_interpreter" = "yes" ; then
6223    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6224  fi
6225fi
6226if test "$fdatasync" = "yes" ; then
6227  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6228fi
6229if test "$madvise" = "yes" ; then
6230  echo "CONFIG_MADVISE=y" >> $config_host_mak
6231fi
6232if test "$posix_madvise" = "yes" ; then
6233  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6234fi
6235
6236if test "$spice" = "yes" ; then
6237  echo "CONFIG_SPICE=y" >> $config_host_mak
6238fi
6239
6240if test "$smartcard" = "yes" ; then
6241  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6242  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6243  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6244fi
6245
6246if test "$libusb" = "yes" ; then
6247  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6248  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6249  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6250fi
6251
6252if test "$usb_redir" = "yes" ; then
6253  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6254  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6255  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6256fi
6257
6258if test "$opengl" = "yes" ; then
6259  echo "CONFIG_OPENGL=y" >> $config_host_mak
6260  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6261  if test "$opengl_dmabuf" = "yes" ; then
6262    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6263  fi
6264fi
6265
6266if test "$malloc_trim" = "yes" ; then
6267  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6268fi
6269
6270if test "$avx2_opt" = "yes" ; then
6271  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6272fi
6273
6274if test "$lzo" = "yes" ; then
6275  echo "CONFIG_LZO=y" >> $config_host_mak
6276fi
6277
6278if test "$snappy" = "yes" ; then
6279  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6280fi
6281
6282if test "$bzip2" = "yes" ; then
6283  echo "CONFIG_BZIP2=y" >> $config_host_mak
6284  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6285fi
6286
6287if test "$libiscsi" = "yes" ; then
6288  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6289  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6290  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6291fi
6292
6293if test "$libnfs" = "yes" ; then
6294  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6295  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6296fi
6297
6298if test "$seccomp" = "yes"; then
6299  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6300  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6301  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6302fi
6303
6304# XXX: suppress that
6305if [ "$bsd" = "yes" ] ; then
6306  echo "CONFIG_BSD=y" >> $config_host_mak
6307fi
6308
6309if test "$localtime_r" = "yes" ; then
6310  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6311fi
6312if test "$qom_cast_debug" = "yes" ; then
6313  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6314fi
6315if test "$rbd" = "yes" ; then
6316  echo "CONFIG_RBD=m" >> $config_host_mak
6317  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6318  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6319fi
6320
6321echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6322if test "$coroutine_pool" = "yes" ; then
6323  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6324else
6325  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6326fi
6327
6328if test "$debug_stack_usage" = "yes" ; then
6329  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6330fi
6331
6332if test "$crypto_afalg" = "yes" ; then
6333  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6334fi
6335
6336if test "$open_by_handle_at" = "yes" ; then
6337  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6338fi
6339
6340if test "$linux_magic_h" = "yes" ; then
6341  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6342fi
6343
6344if test "$pragma_diagnostic_available" = "yes" ; then
6345  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6346fi
6347
6348if test "$valgrind_h" = "yes" ; then
6349  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6350fi
6351
6352if test "$have_asan_iface_fiber" = "yes" ; then
6353    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6354fi
6355
6356if test "$has_environ" = "yes" ; then
6357  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6358fi
6359
6360if test "$cpuid_h" = "yes" ; then
6361  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6362fi
6363
6364if test "$int128" = "yes" ; then
6365  echo "CONFIG_INT128=y" >> $config_host_mak
6366fi
6367
6368if test "$atomic128" = "yes" ; then
6369  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6370fi
6371
6372if test "$atomic64" = "yes" ; then
6373  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6374fi
6375
6376if test "$vector16" = "yes" ; then
6377  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6378fi
6379
6380if test "$getauxval" = "yes" ; then
6381  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6382fi
6383
6384if test "$glusterfs" = "yes" ; then
6385  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6386  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6387  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6388fi
6389
6390if test "$glusterfs_xlator_opt" = "yes" ; then
6391  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6392fi
6393
6394if test "$glusterfs_discard" = "yes" ; then
6395  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6396fi
6397
6398if test "$glusterfs_fallocate" = "yes" ; then
6399  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6400fi
6401
6402if test "$glusterfs_zerofill" = "yes" ; then
6403  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6404fi
6405
6406if test "$libssh2" = "yes" ; then
6407  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6408  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6409  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6410fi
6411
6412if test "$live_block_migration" = "yes" ; then
6413  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6414fi
6415
6416if test "$tpm" = "yes"; then
6417  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6418  # TPM passthrough support?
6419  if test "$tpm_passthrough" = "yes"; then
6420    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6421  fi
6422  # TPM emulator support?
6423  if test "$tpm_emulator" = "yes"; then
6424    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6425  fi
6426fi
6427
6428echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6429if have_backend "nop"; then
6430  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6431fi
6432if have_backend "simple"; then
6433  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6434  # Set the appropriate trace file.
6435  trace_file="\"$trace_file-\" FMT_pid"
6436fi
6437if have_backend "log"; then
6438  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6439fi
6440if have_backend "ust"; then
6441  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6442fi
6443if have_backend "dtrace"; then
6444  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6445  if test "$trace_backend_stap" = "yes" ; then
6446    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6447  fi
6448fi
6449if have_backend "ftrace"; then
6450  if test "$linux" = "yes" ; then
6451    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6452  else
6453    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6454  fi
6455fi
6456if have_backend "syslog"; then
6457  if test "$posix_syslog" = "yes" ; then
6458    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6459  else
6460    feature_not_found "syslog(trace backend)" "syslog not available"
6461  fi
6462fi
6463echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6464
6465if test "$rdma" = "yes" ; then
6466  echo "CONFIG_RDMA=y" >> $config_host_mak
6467  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6468fi
6469
6470if test "$have_rtnetlink" = "yes" ; then
6471  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6472fi
6473
6474if test "$libxml2" = "yes" ; then
6475  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6476  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6477  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6478fi
6479
6480if test "$replication" = "yes" ; then
6481  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6482fi
6483
6484if test "$have_af_vsock" = "yes" ; then
6485  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6486fi
6487
6488if test "$have_sysmacros" = "yes" ; then
6489  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6490fi
6491
6492if test "$have_static_assert" = "yes" ; then
6493  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6494fi
6495
6496if test "$have_utmpx" = "yes" ; then
6497  echo "HAVE_UTMPX=y" >> $config_host_mak
6498fi
6499
6500if test "$ivshmem" = "yes" ; then
6501  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6502fi
6503if test "$capstone" != "no" ; then
6504  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6505fi
6506
6507# Hold two types of flag:
6508#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6509#                                     a thread we have a handle to
6510#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6511#                                     platform
6512if test "$pthread_setname_np" = "yes" ; then
6513  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6514  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6515fi
6516
6517if test "$vxhs" = "yes" ; then
6518  echo "CONFIG_VXHS=y" >> $config_host_mak
6519  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6520fi
6521
6522if test "$tcg_interpreter" = "yes"; then
6523  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6524elif test "$ARCH" = "sparc64" ; then
6525  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6526elif test "$ARCH" = "s390x" ; then
6527  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6528elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6529  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6530elif test "$ARCH" = "ppc64" ; then
6531  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6532else
6533  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6534fi
6535QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6536
6537echo "TOOLS=$tools" >> $config_host_mak
6538echo "ROMS=$roms" >> $config_host_mak
6539echo "MAKE=$make" >> $config_host_mak
6540echo "INSTALL=$install" >> $config_host_mak
6541echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6542echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6543echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6544echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6545echo "PYTHON=$python" >> $config_host_mak
6546echo "CC=$cc" >> $config_host_mak
6547if $iasl -h > /dev/null 2>&1; then
6548  echo "IASL=$iasl" >> $config_host_mak
6549fi
6550echo "CC_I386=$cc_i386" >> $config_host_mak
6551echo "HOST_CC=$host_cc" >> $config_host_mak
6552echo "CXX=$cxx" >> $config_host_mak
6553echo "OBJCC=$objcc" >> $config_host_mak
6554echo "AR=$ar" >> $config_host_mak
6555echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6556echo "AS=$as" >> $config_host_mak
6557echo "CCAS=$ccas" >> $config_host_mak
6558echo "CPP=$cpp" >> $config_host_mak
6559echo "OBJCOPY=$objcopy" >> $config_host_mak
6560echo "LD=$ld" >> $config_host_mak
6561echo "RANLIB=$ranlib" >> $config_host_mak
6562echo "NM=$nm" >> $config_host_mak
6563echo "WINDRES=$windres" >> $config_host_mak
6564echo "CFLAGS=$CFLAGS" >> $config_host_mak
6565echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6566echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6567echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6568echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6569if test "$sparse" = "yes" ; then
6570  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6571  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6572  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6573  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6574  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6575fi
6576if test "$cross_prefix" != ""; then
6577  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6578else
6579  echo "AUTOCONF_HOST := "                             >> $config_host_mak
6580fi
6581echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6582echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6583echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6584echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6585echo "LIBS+=$LIBS" >> $config_host_mak
6586echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6587echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6588echo "EXESUF=$EXESUF" >> $config_host_mak
6589echo "DSOSUF=$DSOSUF" >> $config_host_mak
6590echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6591echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6592echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6593echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6594echo "POD2MAN=$POD2MAN" >> $config_host_mak
6595echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6596if test "$gcov" = "yes" ; then
6597  echo "CONFIG_GCOV=y" >> $config_host_mak
6598  echo "GCOV=$gcov_tool" >> $config_host_mak
6599fi
6600
6601# use included Linux headers
6602if test "$linux" = "yes" ; then
6603  mkdir -p linux-headers
6604  case "$cpu" in
6605  i386|x86_64|x32)
6606    linux_arch=x86
6607    ;;
6608  ppcemb|ppc|ppc64)
6609    linux_arch=powerpc
6610    ;;
6611  s390x)
6612    linux_arch=s390
6613    ;;
6614  aarch64)
6615    linux_arch=arm64
6616    ;;
6617  mips64)
6618    linux_arch=mips
6619    ;;
6620  *)
6621    # For most CPUs the kernel architecture name and QEMU CPU name match.
6622    linux_arch="$cpu"
6623    ;;
6624  esac
6625    # For non-KVM architectures we will not have asm headers
6626    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6627      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6628    fi
6629fi
6630
6631for target in $target_list; do
6632target_dir="$target"
6633config_target_mak=$target_dir/config-target.mak
6634target_name=$(echo $target | cut -d '-' -f 1)
6635target_bigendian="no"
6636
6637case "$target_name" in
6638  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6639  target_bigendian=yes
6640  ;;
6641esac
6642target_softmmu="no"
6643target_user_only="no"
6644target_linux_user="no"
6645target_bsd_user="no"
6646case "$target" in
6647  ${target_name}-softmmu)
6648    target_softmmu="yes"
6649    ;;
6650  ${target_name}-linux-user)
6651    target_user_only="yes"
6652    target_linux_user="yes"
6653    ;;
6654  ${target_name}-bsd-user)
6655    target_user_only="yes"
6656    target_bsd_user="yes"
6657    ;;
6658  *)
6659    error_exit "Target '$target' not recognised"
6660    exit 1
6661    ;;
6662esac
6663
6664mkdir -p $target_dir
6665echo "# Automatically generated by configure - do not modify" > $config_target_mak
6666
6667bflt="no"
6668mttcg="no"
6669interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6670gdb_xml_files=""
6671
6672TARGET_ARCH="$target_name"
6673TARGET_BASE_ARCH=""
6674TARGET_ABI_DIR=""
6675
6676case "$target_name" in
6677  i386)
6678    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6679  ;;
6680  x86_64)
6681    TARGET_BASE_ARCH=i386
6682    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6683  ;;
6684  alpha)
6685    mttcg="yes"
6686  ;;
6687  arm|armeb)
6688    TARGET_ARCH=arm
6689    bflt="yes"
6690    mttcg="yes"
6691    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6692  ;;
6693  aarch64|aarch64_be)
6694    TARGET_ARCH=aarch64
6695    TARGET_BASE_ARCH=arm
6696    bflt="yes"
6697    mttcg="yes"
6698    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6699  ;;
6700  cris)
6701  ;;
6702  hppa)
6703    mttcg="yes"
6704  ;;
6705  lm32)
6706  ;;
6707  m68k)
6708    bflt="yes"
6709    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6710  ;;
6711  microblaze|microblazeel)
6712    TARGET_ARCH=microblaze
6713    bflt="yes"
6714  ;;
6715  mips|mipsel)
6716    TARGET_ARCH=mips
6717    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6718  ;;
6719  mipsn32|mipsn32el)
6720    TARGET_ARCH=mips64
6721    TARGET_BASE_ARCH=mips
6722    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6723    echo "TARGET_ABI32=y" >> $config_target_mak
6724  ;;
6725  mips64|mips64el)
6726    TARGET_ARCH=mips64
6727    TARGET_BASE_ARCH=mips
6728    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6729  ;;
6730  moxie)
6731  ;;
6732  nios2)
6733  ;;
6734  or1k)
6735    TARGET_ARCH=openrisc
6736    TARGET_BASE_ARCH=openrisc
6737  ;;
6738  ppc)
6739    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6740  ;;
6741  ppcemb)
6742    TARGET_BASE_ARCH=ppc
6743    TARGET_ABI_DIR=ppc
6744    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6745  ;;
6746  ppc64)
6747    TARGET_BASE_ARCH=ppc
6748    TARGET_ABI_DIR=ppc
6749    mttcg=yes
6750    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6751  ;;
6752  ppc64le)
6753    TARGET_ARCH=ppc64
6754    TARGET_BASE_ARCH=ppc
6755    TARGET_ABI_DIR=ppc
6756    mttcg=yes
6757    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6758  ;;
6759  ppc64abi32)
6760    TARGET_ARCH=ppc64
6761    TARGET_BASE_ARCH=ppc
6762    TARGET_ABI_DIR=ppc
6763    echo "TARGET_ABI32=y" >> $config_target_mak
6764    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6765  ;;
6766  sh4|sh4eb)
6767    TARGET_ARCH=sh4
6768    bflt="yes"
6769  ;;
6770  sparc)
6771  ;;
6772  sparc64)
6773    TARGET_BASE_ARCH=sparc
6774  ;;
6775  sparc32plus)
6776    TARGET_ARCH=sparc64
6777    TARGET_BASE_ARCH=sparc
6778    TARGET_ABI_DIR=sparc
6779    echo "TARGET_ABI32=y" >> $config_target_mak
6780  ;;
6781  s390x)
6782    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6783  ;;
6784  tilegx)
6785  ;;
6786  tricore)
6787  ;;
6788  unicore32)
6789  ;;
6790  xtensa|xtensaeb)
6791    TARGET_ARCH=xtensa
6792  ;;
6793  *)
6794    error_exit "Unsupported target CPU"
6795  ;;
6796esac
6797# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6798if [ "$TARGET_BASE_ARCH" = "" ]; then
6799  TARGET_BASE_ARCH=$TARGET_ARCH
6800fi
6801
6802symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6803
6804upper() {
6805    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6806}
6807
6808target_arch_name="$(upper $TARGET_ARCH)"
6809echo "TARGET_$target_arch_name=y" >> $config_target_mak
6810echo "TARGET_NAME=$target_name" >> $config_target_mak
6811echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6812if [ "$TARGET_ABI_DIR" = "" ]; then
6813  TARGET_ABI_DIR=$TARGET_ARCH
6814fi
6815echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6816if [ "$HOST_VARIANT_DIR" != "" ]; then
6817    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6818fi
6819
6820if supported_xen_target $target; then
6821    echo "CONFIG_XEN=y" >> $config_target_mak
6822    if test "$xen_pci_passthrough" = yes; then
6823        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6824    fi
6825fi
6826if supported_kvm_target $target; then
6827    echo "CONFIG_KVM=y" >> $config_target_mak
6828    if test "$vhost_net" = "yes" ; then
6829        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6830        if test "$vhost_user" = "yes" ; then
6831            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6832        fi
6833    fi
6834fi
6835if supported_hax_target $target; then
6836    echo "CONFIG_HAX=y" >> $config_target_mak
6837fi
6838if supported_hvf_target $target; then
6839    echo "CONFIG_HVF=y" >> $config_target_mak
6840fi
6841if supported_whpx_target $target; then
6842    echo "CONFIG_WHPX=y" >> $config_target_mak
6843fi
6844if test "$target_bigendian" = "yes" ; then
6845  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6846fi
6847if test "$target_softmmu" = "yes" ; then
6848  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6849  if test "$mttcg" = "yes" ; then
6850    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6851  fi
6852fi
6853if test "$target_user_only" = "yes" ; then
6854  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6855  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6856fi
6857if test "$target_linux_user" = "yes" ; then
6858  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6859fi
6860list=""
6861if test ! -z "$gdb_xml_files" ; then
6862  for x in $gdb_xml_files; do
6863    list="$list $source_path/gdb-xml/$x"
6864  done
6865  echo "TARGET_XML_FILES=$list" >> $config_target_mak
6866fi
6867
6868if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6869  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6870fi
6871if test "$target_bsd_user" = "yes" ; then
6872  echo "CONFIG_BSD_USER=y" >> $config_target_mak
6873fi
6874
6875# generate QEMU_CFLAGS/LDFLAGS for targets
6876
6877cflags=""
6878ldflags=""
6879
6880disas_config() {
6881  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6882  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6883}
6884
6885for i in $ARCH $TARGET_BASE_ARCH ; do
6886  case "$i" in
6887  alpha)
6888    disas_config "ALPHA"
6889  ;;
6890  aarch64)
6891    if test -n "${cxx}"; then
6892      disas_config "ARM_A64"
6893    fi
6894  ;;
6895  arm)
6896    disas_config "ARM"
6897    if test -n "${cxx}"; then
6898      disas_config "ARM_A64"
6899    fi
6900  ;;
6901  cris)
6902    disas_config "CRIS"
6903  ;;
6904  hppa)
6905    disas_config "HPPA"
6906  ;;
6907  i386|x86_64|x32)
6908    disas_config "I386"
6909  ;;
6910  lm32)
6911    disas_config "LM32"
6912  ;;
6913  m68k)
6914    disas_config "M68K"
6915  ;;
6916  microblaze*)
6917    disas_config "MICROBLAZE"
6918  ;;
6919  mips*)
6920    disas_config "MIPS"
6921  ;;
6922  moxie*)
6923    disas_config "MOXIE"
6924  ;;
6925  nios2)
6926    disas_config "NIOS2"
6927  ;;
6928  or1k)
6929    disas_config "OPENRISC"
6930  ;;
6931  ppc*)
6932    disas_config "PPC"
6933  ;;
6934  s390*)
6935    disas_config "S390"
6936  ;;
6937  sh4)
6938    disas_config "SH4"
6939  ;;
6940  sparc*)
6941    disas_config "SPARC"
6942  ;;
6943  xtensa*)
6944    disas_config "XTENSA"
6945  ;;
6946  esac
6947done
6948if test "$tcg_interpreter" = "yes" ; then
6949  disas_config "TCI"
6950fi
6951
6952case "$ARCH" in
6953alpha)
6954  # Ensure there's only a single GP
6955  cflags="-msmall-data $cflags"
6956;;
6957esac
6958
6959if test "$gprof" = "yes" ; then
6960  echo "TARGET_GPROF=yes" >> $config_target_mak
6961  if test "$target_linux_user" = "yes" ; then
6962    cflags="-p $cflags"
6963    ldflags="-p $ldflags"
6964  fi
6965  if test "$target_softmmu" = "yes" ; then
6966    ldflags="-p $ldflags"
6967    echo "GPROF_CFLAGS=-p" >> $config_target_mak
6968  fi
6969fi
6970
6971if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6972  ldflags="$ldflags $textseg_ldflags"
6973fi
6974
6975# Newer kernels on s390 check for an S390_PGSTE program header and
6976# enable the pgste page table extensions in that case. This makes
6977# the vm.allocate_pgste sysctl unnecessary. We enable this program
6978# header if
6979#  - we build on s390x
6980#  - we build the system emulation for s390x (qemu-system-s390x)
6981#  - KVM is enabled
6982#  - the linker supports --s390-pgste
6983if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6984    if ld_has --s390-pgste ; then
6985        ldflags="-Wl,--s390-pgste $ldflags"
6986    fi
6987fi
6988
6989echo "LDFLAGS+=$ldflags" >> $config_target_mak
6990echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6991
6992done # for target in $targets
6993
6994if [ "$dtc_internal" = "yes" ]; then
6995  echo "config-host.h: subdir-dtc" >> $config_host_mak
6996fi
6997if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6998  echo "config-host.h: subdir-capstone" >> $config_host_mak
6999fi
7000if test -n "$LIBCAPSTONE"; then
7001  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7002fi
7003
7004if test "$numa" = "yes"; then
7005  echo "CONFIG_NUMA=y" >> $config_host_mak
7006fi
7007
7008if test "$ccache_cpp2" = "yes"; then
7009  echo "export CCACHE_CPP2=y" >> $config_host_mak
7010fi
7011
7012# build tree in object directory in case the source is not in the current directory
7013DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7014DIRS="$DIRS docs docs/interop fsdev scsi"
7015DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7016DIRS="$DIRS roms/seabios roms/vgabios"
7017DIRS="$DIRS qapi-generated"
7018FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7019FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7020FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7021FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7022FILES="$FILES pc-bios/spapr-rtas/Makefile"
7023FILES="$FILES pc-bios/s390-ccw/Makefile"
7024FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7025FILES="$FILES pc-bios/qemu-icon.bmp"
7026FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7027for bios_file in \
7028    $source_path/pc-bios/*.bin \
7029    $source_path/pc-bios/*.lid \
7030    $source_path/pc-bios/*.aml \
7031    $source_path/pc-bios/*.rom \
7032    $source_path/pc-bios/*.dtb \
7033    $source_path/pc-bios/*.img \
7034    $source_path/pc-bios/openbios-* \
7035    $source_path/pc-bios/u-boot.* \
7036    $source_path/pc-bios/palcode-*
7037do
7038    FILES="$FILES pc-bios/$(basename $bios_file)"
7039done
7040for test_file in $(find $source_path/tests/acpi-test-data -type f)
7041do
7042    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7043done
7044mkdir -p $DIRS
7045for f in $FILES ; do
7046    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7047        symlink "$source_path/$f" "$f"
7048    fi
7049done
7050
7051# temporary config to build submodules
7052for rom in seabios vgabios ; do
7053    config_mak=roms/$rom/config.mak
7054    echo "# Automatically generated by configure - do not modify" > $config_mak
7055    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7056    echo "AS=$as" >> $config_mak
7057    echo "CCAS=$ccas" >> $config_mak
7058    echo "CC=$cc" >> $config_mak
7059    echo "BCC=bcc" >> $config_mak
7060    echo "CPP=$cpp" >> $config_mak
7061    echo "OBJCOPY=objcopy" >> $config_mak
7062    echo "IASL=$iasl" >> $config_mak
7063    echo "LD=$ld" >> $config_mak
7064    echo "RANLIB=$ranlib" >> $config_mak
7065done
7066
7067# set up tests data directory
7068if [ ! -e tests/data ]; then
7069    symlink "$source_path/tests/data" tests/data
7070fi
7071
7072# set up qemu-iotests in this build directory
7073iotests_common_env="tests/qemu-iotests/common.env"
7074iotests_check="tests/qemu-iotests/check"
7075
7076echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7077echo >> "$iotests_common_env"
7078echo "export PYTHON='$python'" >> "$iotests_common_env"
7079
7080if [ ! -e "$iotests_check" ]; then
7081    symlink "$source_path/$iotests_check" "$iotests_check"
7082fi
7083
7084# Save the configure command line for later reuse.
7085cat <<EOD >config.status
7086#!/bin/sh
7087# Generated by configure.
7088# Run this file to recreate the current configuration.
7089# Compiler output produced by configure, useful for debugging
7090# configure, is in config.log if it exists.
7091EOD
7092printf "exec" >>config.status
7093printf " '%s'" "$0" "$@" >>config.status
7094echo ' "$@"' >>config.status
7095chmod +x config.status
7096
7097rm -r "$TMPDIR1"
7098