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