xref: /openbmc/qemu/configure (revision 9bca0edb282de0007a4f068d9d20f3e3c3aadef7)
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 "$gtk" != "no"; then
2544    if test "$gtkabi" = ""; then
2545        # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2546        # Use 2.0 as a fallback if that is available.
2547        if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2548            gtkabi=3.0
2549        elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2550            gtkabi=2.0
2551        else
2552            gtkabi=3.0
2553        fi
2554    fi
2555    gtkpackage="gtk+-$gtkabi"
2556    gtkx11package="gtk+-x11-$gtkabi"
2557    if test "$gtkabi" = "3.0" ; then
2558      gtkversion="3.0.0"
2559    else
2560      gtkversion="2.18.0"
2561    fi
2562    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2563        gtk_cflags=$($pkg_config --cflags $gtkpackage)
2564        gtk_libs=$($pkg_config --libs $gtkpackage)
2565        gtk_version=$($pkg_config --modversion $gtkpackage)
2566        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2567            need_x11=yes
2568            gtk_cflags="$gtk_cflags $x11_cflags"
2569            gtk_libs="$gtk_libs $x11_libs"
2570        fi
2571        gtk="yes"
2572    elif test "$gtk" = "yes"; then
2573        feature_not_found "gtk" "Install gtk3-devel"
2574    else
2575        gtk="no"
2576    fi
2577fi
2578
2579
2580##########################################
2581# GNUTLS probe
2582
2583gnutls_works() {
2584    # Unfortunately some distros have bad pkg-config information for gnutls
2585    # such that it claims to exist but you get a compiler error if you try
2586    # to use the options returned by --libs. Specifically, Ubuntu for --static
2587    # builds doesn't work:
2588    # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2589    #
2590    # So sanity check the cflags/libs before assuming gnutls can be used.
2591    if ! $pkg_config --exists "gnutls"; then
2592        return 1
2593    fi
2594
2595    write_c_skeleton
2596    compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2597}
2598
2599gnutls_gcrypt=no
2600gnutls_nettle=no
2601if test "$gnutls" != "no"; then
2602    if gnutls_works; then
2603        gnutls_cflags=$($pkg_config --cflags gnutls)
2604        gnutls_libs=$($pkg_config --libs gnutls)
2605        libs_softmmu="$gnutls_libs $libs_softmmu"
2606        libs_tools="$gnutls_libs $libs_tools"
2607	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2608        gnutls="yes"
2609
2610	# gnutls_rnd requires >= 2.11.0
2611	if $pkg_config --exists "gnutls >= 2.11.0"; then
2612	    gnutls_rnd="yes"
2613	else
2614	    gnutls_rnd="no"
2615	fi
2616
2617	if $pkg_config --exists 'gnutls >= 3.0'; then
2618	    gnutls_gcrypt=no
2619	    gnutls_nettle=yes
2620	elif $pkg_config --exists 'gnutls >= 2.12'; then
2621	    case $($pkg_config --libs --static gnutls) in
2622		*gcrypt*)
2623		    gnutls_gcrypt=yes
2624		    gnutls_nettle=no
2625		    ;;
2626		*nettle*)
2627		    gnutls_gcrypt=no
2628		    gnutls_nettle=yes
2629		    ;;
2630		*)
2631		    gnutls_gcrypt=yes
2632		    gnutls_nettle=no
2633		    ;;
2634	    esac
2635	else
2636	    gnutls_gcrypt=yes
2637	    gnutls_nettle=no
2638	fi
2639    elif test "$gnutls" = "yes"; then
2640	feature_not_found "gnutls" "Install gnutls devel"
2641    else
2642        gnutls="no"
2643        gnutls_rnd="no"
2644    fi
2645else
2646    gnutls_rnd="no"
2647fi
2648
2649
2650# If user didn't give a --disable/enable-gcrypt flag,
2651# then mark as disabled if user requested nettle
2652# explicitly, or if gnutls links to nettle
2653if test -z "$gcrypt"
2654then
2655    if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2656    then
2657        gcrypt="no"
2658    fi
2659fi
2660
2661# If user didn't give a --disable/enable-nettle flag,
2662# then mark as disabled if user requested gcrypt
2663# explicitly, or if gnutls links to gcrypt
2664if test -z "$nettle"
2665then
2666    if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2667    then
2668        nettle="no"
2669    fi
2670fi
2671
2672has_libgcrypt_config() {
2673    if ! has "libgcrypt-config"
2674    then
2675	return 1
2676    fi
2677
2678    if test -n "$cross_prefix"
2679    then
2680	host=$(libgcrypt-config --host)
2681	if test "$host-" != $cross_prefix
2682	then
2683	    return 1
2684	fi
2685    fi
2686
2687    return 0
2688}
2689
2690if test "$gcrypt" != "no"; then
2691    if has_libgcrypt_config; then
2692        gcrypt_cflags=$(libgcrypt-config --cflags)
2693        gcrypt_libs=$(libgcrypt-config --libs)
2694        # Debian has remove -lgpg-error from libgcrypt-config
2695        # as it "spreads unnecessary dependencies" which in
2696        # turn breaks static builds...
2697        if test "$static" = "yes"
2698        then
2699            gcrypt_libs="$gcrypt_libs -lgpg-error"
2700        fi
2701        libs_softmmu="$gcrypt_libs $libs_softmmu"
2702        libs_tools="$gcrypt_libs $libs_tools"
2703        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2704        gcrypt="yes"
2705        if test -z "$nettle"; then
2706           nettle="no"
2707        fi
2708
2709        cat > $TMPC << EOF
2710#include <gcrypt.h>
2711int main(void) {
2712  gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2713                  GCRY_MD_SHA256,
2714                  NULL, 0, 0, 0, NULL);
2715 return 0;
2716}
2717EOF
2718        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2719            gcrypt_kdf=yes
2720        fi
2721
2722        cat > $TMPC << EOF
2723#include <gcrypt.h>
2724int main(void) {
2725  gcry_mac_hd_t handle;
2726  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2727                GCRY_MAC_FLAG_SECURE, NULL);
2728  return 0;
2729}
2730EOF
2731        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2732            gcrypt_hmac=yes
2733        fi
2734    else
2735        if test "$gcrypt" = "yes"; then
2736            feature_not_found "gcrypt" "Install gcrypt devel"
2737        else
2738            gcrypt="no"
2739        fi
2740    fi
2741fi
2742
2743
2744if test "$nettle" != "no"; then
2745    if $pkg_config --exists "nettle"; then
2746        nettle_cflags=$($pkg_config --cflags nettle)
2747        nettle_libs=$($pkg_config --libs nettle)
2748        nettle_version=$($pkg_config --modversion nettle)
2749        libs_softmmu="$nettle_libs $libs_softmmu"
2750        libs_tools="$nettle_libs $libs_tools"
2751        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2752        nettle="yes"
2753
2754        cat > $TMPC << EOF
2755#include <stddef.h>
2756#include <nettle/pbkdf2.h>
2757int main(void) {
2758     pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2759     return 0;
2760}
2761EOF
2762        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2763            nettle_kdf=yes
2764        fi
2765    else
2766        if test "$nettle" = "yes"; then
2767            feature_not_found "nettle" "Install nettle devel"
2768        else
2769            nettle="no"
2770        fi
2771    fi
2772fi
2773
2774if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2775then
2776    error_exit "Only one of gcrypt & nettle can be enabled"
2777fi
2778
2779##########################################
2780# libtasn1 - only for the TLS creds/session test suite
2781
2782tasn1=yes
2783tasn1_cflags=""
2784tasn1_libs=""
2785if $pkg_config --exists "libtasn1"; then
2786    tasn1_cflags=$($pkg_config --cflags libtasn1)
2787    tasn1_libs=$($pkg_config --libs libtasn1)
2788else
2789    tasn1=no
2790fi
2791
2792
2793##########################################
2794# getifaddrs (for tests/test-io-channel-socket )
2795
2796have_ifaddrs_h=yes
2797if ! check_include "ifaddrs.h" ; then
2798  have_ifaddrs_h=no
2799fi
2800
2801##########################################
2802# VTE probe
2803
2804if test "$vte" != "no"; then
2805    if test "$gtkabi" = "3.0"; then
2806      vteminversion="0.32.0"
2807      if $pkg_config --exists "vte-2.91"; then
2808        vtepackage="vte-2.91"
2809      else
2810        vtepackage="vte-2.90"
2811      fi
2812    else
2813      vtepackage="vte"
2814      vteminversion="0.24.0"
2815    fi
2816    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2817        vte_cflags=$($pkg_config --cflags $vtepackage)
2818        vte_libs=$($pkg_config --libs $vtepackage)
2819        vteversion=$($pkg_config --modversion $vtepackage)
2820        vte="yes"
2821    elif test "$vte" = "yes"; then
2822        if test "$gtkabi" = "3.0"; then
2823            feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2824        else
2825            feature_not_found "vte" "Install libvte devel"
2826        fi
2827    else
2828        vte="no"
2829    fi
2830fi
2831
2832##########################################
2833# SDL probe
2834
2835# Look for sdl configuration program (pkg-config or sdl-config).  Try
2836# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2837
2838sdl_probe ()
2839{
2840  sdl_too_old=no
2841  if test "$sdlabi" = ""; then
2842      if $pkg_config --exists "sdl2"; then
2843          sdlabi=2.0
2844      elif $pkg_config --exists "sdl"; then
2845          sdlabi=1.2
2846      else
2847          sdlabi=2.0
2848      fi
2849  fi
2850
2851  if test $sdlabi = "2.0"; then
2852      sdl_config=$sdl2_config
2853      sdlname=sdl2
2854      sdlconfigname=sdl2_config
2855  elif test $sdlabi = "1.2"; then
2856      sdlname=sdl
2857      sdlconfigname=sdl_config
2858  else
2859      error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2860  fi
2861
2862  if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2863    sdl_config=$sdlconfigname
2864  fi
2865
2866  if $pkg_config $sdlname --exists; then
2867    sdlconfig="$pkg_config $sdlname"
2868    sdlversion=$($sdlconfig --modversion 2>/dev/null)
2869  elif has ${sdl_config}; then
2870    sdlconfig="$sdl_config"
2871    sdlversion=$($sdlconfig --version)
2872  else
2873    if test "$sdl" = "yes" ; then
2874      feature_not_found "sdl" "Install SDL2-devel"
2875    fi
2876    sdl=no
2877    # no need to do the rest
2878    return
2879  fi
2880  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2881    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2882  fi
2883
2884  cat > $TMPC << EOF
2885#include <SDL.h>
2886#undef main /* We don't want SDL to override our main() */
2887int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2888EOF
2889  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2890  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
2891  if test "$static" = "yes" ; then
2892    if $pkg_config $sdlname --exists; then
2893      sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2894    else
2895      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2896    fi
2897  else
2898    sdl_libs=$($sdlconfig --libs 2>/dev/null)
2899  fi
2900  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2901    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2902      sdl_too_old=yes
2903    else
2904      sdl=yes
2905    fi
2906
2907    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2908    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2909      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2910         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2911         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2912      fi
2913      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2914	:
2915      else
2916        sdl=no
2917      fi
2918    fi # static link
2919  else # sdl not found
2920    if test "$sdl" = "yes" ; then
2921      feature_not_found "sdl" "Install SDL devel"
2922    fi
2923    sdl=no
2924  fi # sdl compile test
2925}
2926
2927if test "$sdl" != "no" ; then
2928  sdl_probe
2929fi
2930
2931if test "$sdl" = "yes" ; then
2932  cat > $TMPC <<EOF
2933#include <SDL.h>
2934#if defined(SDL_VIDEO_DRIVER_X11)
2935#include <X11/XKBlib.h>
2936#else
2937#error No x11 support
2938#endif
2939int main(void) { return 0; }
2940EOF
2941  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2942    need_x11=yes
2943    sdl_cflags="$sdl_cflags $x11_cflags"
2944    sdl_libs="$sdl_libs $x11_libs"
2945  fi
2946fi
2947
2948##########################################
2949# RDMA needs OpenFabrics libraries
2950if test "$rdma" != "no" ; then
2951  cat > $TMPC <<EOF
2952#include <rdma/rdma_cma.h>
2953int main(void) { return 0; }
2954EOF
2955  rdma_libs="-lrdmacm -libverbs -libumad"
2956  if compile_prog "" "$rdma_libs" ; then
2957    rdma="yes"
2958    libs_softmmu="$libs_softmmu $rdma_libs"
2959  else
2960    if test "$rdma" = "yes" ; then
2961        error_exit \
2962            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2963            " Your options:" \
2964            "  (1) Fast: Install infiniband packages (devel) from your distro." \
2965            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2966            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2967    fi
2968    rdma="no"
2969  fi
2970fi
2971
2972
2973##########################################
2974# VNC SASL detection
2975if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2976  cat > $TMPC <<EOF
2977#include <sasl/sasl.h>
2978#include <stdio.h>
2979int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2980EOF
2981  # Assuming Cyrus-SASL installed in /usr prefix
2982  vnc_sasl_cflags=""
2983  vnc_sasl_libs="-lsasl2"
2984  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2985    vnc_sasl=yes
2986    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2987    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2988  else
2989    if test "$vnc_sasl" = "yes" ; then
2990      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2991    fi
2992    vnc_sasl=no
2993  fi
2994fi
2995
2996##########################################
2997# VNC JPEG detection
2998if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2999cat > $TMPC <<EOF
3000#include <stdio.h>
3001#include <jpeglib.h>
3002int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3003EOF
3004    vnc_jpeg_cflags=""
3005    vnc_jpeg_libs="-ljpeg"
3006  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3007    vnc_jpeg=yes
3008    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3009    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3010  else
3011    if test "$vnc_jpeg" = "yes" ; then
3012      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3013    fi
3014    vnc_jpeg=no
3015  fi
3016fi
3017
3018##########################################
3019# VNC PNG detection
3020if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3021cat > $TMPC <<EOF
3022//#include <stdio.h>
3023#include <png.h>
3024#include <stddef.h>
3025int main(void) {
3026    png_structp png_ptr;
3027    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3028    return png_ptr != 0;
3029}
3030EOF
3031  if $pkg_config libpng --exists; then
3032    vnc_png_cflags=$($pkg_config libpng --cflags)
3033    vnc_png_libs=$($pkg_config libpng --libs)
3034  else
3035    vnc_png_cflags=""
3036    vnc_png_libs="-lpng"
3037  fi
3038  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3039    vnc_png=yes
3040    libs_softmmu="$vnc_png_libs $libs_softmmu"
3041    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3042  else
3043    if test "$vnc_png" = "yes" ; then
3044      feature_not_found "vnc-png" "Install libpng devel"
3045    fi
3046    vnc_png=no
3047  fi
3048fi
3049
3050##########################################
3051# xkbcommon probe
3052if test "$xkbcommon" != "no" ; then
3053  if $pkg_config xkbcommon --exists; then
3054    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3055    xkbcommon_libs=$($pkg_config xkbcommon --libs)
3056    xkbcommon=yes
3057  else
3058    if test "$xkbcommon" = "yes" ; then
3059      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3060    fi
3061    xkbcommon=no
3062  fi
3063fi
3064
3065##########################################
3066# fnmatch() probe, used for ACL routines
3067fnmatch="no"
3068cat > $TMPC << EOF
3069#include <fnmatch.h>
3070int main(void)
3071{
3072    fnmatch("foo", "foo", 0);
3073    return 0;
3074}
3075EOF
3076if compile_prog "" "" ; then
3077   fnmatch="yes"
3078fi
3079
3080##########################################
3081# xfsctl() probe, used for file-posix.c
3082if test "$xfs" != "no" ; then
3083  cat > $TMPC << EOF
3084#include <stddef.h>  /* NULL */
3085#include <xfs/xfs.h>
3086int main(void)
3087{
3088    xfsctl(NULL, 0, 0, NULL);
3089    return 0;
3090}
3091EOF
3092  if compile_prog "" "" ; then
3093    xfs="yes"
3094  else
3095    if test "$xfs" = "yes" ; then
3096      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3097    fi
3098    xfs=no
3099  fi
3100fi
3101
3102##########################################
3103# vde libraries probe
3104if test "$vde" != "no" ; then
3105  vde_libs="-lvdeplug"
3106  cat > $TMPC << EOF
3107#include <libvdeplug.h>
3108int main(void)
3109{
3110    struct vde_open_args a = {0, 0, 0};
3111    char s[] = "";
3112    vde_open(s, s, &a);
3113    return 0;
3114}
3115EOF
3116  if compile_prog "" "$vde_libs" ; then
3117    vde=yes
3118  else
3119    if test "$vde" = "yes" ; then
3120      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3121    fi
3122    vde=no
3123  fi
3124fi
3125
3126##########################################
3127# netmap support probe
3128# Apart from looking for netmap headers, we make sure that the host API version
3129# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3130# a minor/major version number. Minor new features will be marked with values up
3131# to 15, and if something happens that requires a change to the backend we will
3132# move above 15, submit the backend fixes and modify this two bounds.
3133if test "$netmap" != "no" ; then
3134  cat > $TMPC << EOF
3135#include <inttypes.h>
3136#include <net/if.h>
3137#include <net/netmap.h>
3138#include <net/netmap_user.h>
3139#if (NETMAP_API < 11) || (NETMAP_API > 15)
3140#error
3141#endif
3142int main(void) { return 0; }
3143EOF
3144  if compile_prog "" "" ; then
3145    netmap=yes
3146  else
3147    if test "$netmap" = "yes" ; then
3148      feature_not_found "netmap"
3149    fi
3150    netmap=no
3151  fi
3152fi
3153
3154##########################################
3155# libcap-ng library probe
3156if test "$cap_ng" != "no" ; then
3157  cap_libs="-lcap-ng"
3158  cat > $TMPC << EOF
3159#include <cap-ng.h>
3160int main(void)
3161{
3162    capng_capability_to_name(CAPNG_EFFECTIVE);
3163    return 0;
3164}
3165EOF
3166  if compile_prog "" "$cap_libs" ; then
3167    cap_ng=yes
3168    libs_tools="$cap_libs $libs_tools"
3169  else
3170    if test "$cap_ng" = "yes" ; then
3171      feature_not_found "cap_ng" "Install libcap-ng devel"
3172    fi
3173    cap_ng=no
3174  fi
3175fi
3176
3177##########################################
3178# Sound support libraries probe
3179
3180audio_drv_probe()
3181{
3182    drv=$1
3183    hdr=$2
3184    lib=$3
3185    exp=$4
3186    cfl=$5
3187        cat > $TMPC << EOF
3188#include <$hdr>
3189int main(void) { $exp }
3190EOF
3191    if compile_prog "$cfl" "$lib" ; then
3192        :
3193    else
3194        error_exit "$drv check failed" \
3195            "Make sure to have the $drv libs and headers installed."
3196    fi
3197}
3198
3199audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3200for drv in $audio_drv_list; do
3201    case $drv in
3202    alsa)
3203    audio_drv_probe $drv alsa/asoundlib.h -lasound \
3204        "return snd_pcm_close((snd_pcm_t *)0);"
3205    alsa_libs="-lasound"
3206    ;;
3207
3208    pa)
3209    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3210        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3211    pulse_libs="-lpulse"
3212    audio_pt_int="yes"
3213    ;;
3214
3215    sdl)
3216    if test "$sdl" = "no"; then
3217        error_exit "sdl not found or disabled, can not use sdl audio driver"
3218    fi
3219    ;;
3220
3221    coreaudio)
3222      coreaudio_libs="-framework CoreAudio"
3223    ;;
3224
3225    dsound)
3226      dsound_libs="-lole32 -ldxguid"
3227      audio_win_int="yes"
3228    ;;
3229
3230    oss)
3231      oss_libs="$oss_lib"
3232    ;;
3233
3234    wav)
3235    # XXX: Probes for CoreAudio, DirectSound
3236    ;;
3237
3238    *)
3239    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3240        error_exit "Unknown driver '$drv' selected" \
3241            "Possible drivers are: $audio_possible_drivers"
3242    }
3243    ;;
3244    esac
3245done
3246
3247##########################################
3248# BrlAPI probe
3249
3250if test "$brlapi" != "no" ; then
3251  brlapi_libs="-lbrlapi"
3252  cat > $TMPC << EOF
3253#include <brlapi.h>
3254#include <stddef.h>
3255int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3256EOF
3257  if compile_prog "" "$brlapi_libs" ; then
3258    brlapi=yes
3259  else
3260    if test "$brlapi" = "yes" ; then
3261      feature_not_found "brlapi" "Install brlapi devel"
3262    fi
3263    brlapi=no
3264  fi
3265fi
3266
3267##########################################
3268# curses probe
3269if test "$curses" != "no" ; then
3270  if test "$mingw32" = "yes" ; then
3271    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3272    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3273  else
3274    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3275    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3276  fi
3277  curses_found=no
3278  cat > $TMPC << EOF
3279#include <locale.h>
3280#include <curses.h>
3281#include <wchar.h>
3282int main(void) {
3283  wchar_t wch = L'w';
3284  setlocale(LC_ALL, "");
3285  resize_term(0, 0);
3286  addwstr(L"wide chars\n");
3287  addnwstr(&wch, 1);
3288  add_wch(WACS_DEGREE);
3289  return 0;
3290}
3291EOF
3292  IFS=:
3293  for curses_inc in $curses_inc_list; do
3294    # Make sure we get the wide character prototypes
3295    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3296    IFS=:
3297    for curses_lib in $curses_lib_list; do
3298      unset IFS
3299      if compile_prog "$curses_inc" "$curses_lib" ; then
3300        curses_found=yes
3301        break
3302      fi
3303    done
3304    if test "$curses_found" = yes ; then
3305      break
3306    fi
3307  done
3308  unset IFS
3309  if test "$curses_found" = "yes" ; then
3310    curses=yes
3311  else
3312    if test "$curses" = "yes" ; then
3313      feature_not_found "curses" "Install ncurses devel"
3314    fi
3315    curses=no
3316  fi
3317fi
3318
3319##########################################
3320# curl probe
3321if test "$curl" != "no" ; then
3322  if $pkg_config libcurl --exists; then
3323    curlconfig="$pkg_config libcurl"
3324  else
3325    curlconfig=curl-config
3326  fi
3327  cat > $TMPC << EOF
3328#include <curl/curl.h>
3329int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3330EOF
3331  curl_cflags=$($curlconfig --cflags 2>/dev/null)
3332  curl_libs=$($curlconfig --libs 2>/dev/null)
3333  if compile_prog "$curl_cflags" "$curl_libs" ; then
3334    curl=yes
3335  else
3336    if test "$curl" = "yes" ; then
3337      feature_not_found "curl" "Install libcurl devel"
3338    fi
3339    curl=no
3340  fi
3341fi # test "$curl"
3342
3343##########################################
3344# bluez support probe
3345if test "$bluez" != "no" ; then
3346  cat > $TMPC << EOF
3347#include <bluetooth/bluetooth.h>
3348int main(void) { return bt_error(0); }
3349EOF
3350  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3351  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3352  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3353    bluez=yes
3354    libs_softmmu="$bluez_libs $libs_softmmu"
3355  else
3356    if test "$bluez" = "yes" ; then
3357      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3358    fi
3359    bluez="no"
3360  fi
3361fi
3362
3363##########################################
3364# glib support probe
3365
3366if test "$mingw32" = yes; then
3367    glib_req_ver=2.30
3368else
3369    glib_req_ver=2.22
3370fi
3371glib_modules=gthread-2.0
3372if test "$modules" = yes; then
3373    glib_modules="$glib_modules gmodule-export-2.0"
3374fi
3375
3376# This workaround is required due to a bug in pkg-config file for glib as it
3377# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3378
3379if test "$static" = yes -a "$mingw32" = yes; then
3380    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3381fi
3382
3383for i in $glib_modules; do
3384    if $pkg_config --atleast-version=$glib_req_ver $i; then
3385        glib_cflags=$($pkg_config --cflags $i)
3386        glib_libs=$($pkg_config --libs $i)
3387        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3388        LIBS="$glib_libs $LIBS"
3389        libs_qga="$glib_libs $libs_qga"
3390    else
3391        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3392    fi
3393done
3394
3395# Sanity check that the current size_t matches the
3396# size that glib thinks it should be. This catches
3397# problems on multi-arch where people try to build
3398# 32-bit QEMU while pointing at 64-bit glib headers
3399cat > $TMPC <<EOF
3400#include <glib.h>
3401#include <unistd.h>
3402
3403#define QEMU_BUILD_BUG_ON(x) \
3404  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3405
3406int main(void) {
3407   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3408   return 0;
3409}
3410EOF
3411
3412if ! compile_prog "$CFLAGS" "$LIBS" ; then
3413    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3414               "You probably need to set PKG_CONFIG_LIBDIR"\
3415	       "to point to the right pkg-config files for your"\
3416	       "build target"
3417fi
3418
3419# g_test_trap_subprocess added in 2.38. Used by some tests.
3420glib_subprocess=yes
3421if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3422    glib_subprocess=no
3423fi
3424
3425# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3426cat > $TMPC << EOF
3427#include <glib.h>
3428int main(void) { return 0; }
3429EOF
3430if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3431    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3432        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3433        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3434    fi
3435fi
3436
3437##########################################
3438# SHA command probe for modules
3439if test "$modules" = yes; then
3440    shacmd_probe="sha1sum sha1 shasum"
3441    for c in $shacmd_probe; do
3442        if has $c; then
3443            shacmd="$c"
3444            break
3445        fi
3446    done
3447    if test "$shacmd" = ""; then
3448        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3449    fi
3450fi
3451
3452##########################################
3453# pixman support probe
3454
3455if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3456  pixman_cflags=
3457  pixman_libs=
3458elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3459  pixman_cflags=$($pkg_config --cflags pixman-1)
3460  pixman_libs=$($pkg_config --libs pixman-1)
3461else
3462  error_exit "pixman >= 0.21.8 not present." \
3463      "Please install the pixman devel package."
3464fi
3465
3466##########################################
3467# libmpathpersist probe
3468
3469if test "$mpath" != "no" ; then
3470  cat > $TMPC <<EOF
3471#include <libudev.h>
3472#include <mpath_persist.h>
3473unsigned mpath_mx_alloc_len = 1024;
3474int logsink;
3475static struct config *multipath_conf;
3476extern struct udev *udev;
3477extern struct config *get_multipath_config(void);
3478extern void put_multipath_config(struct config *conf);
3479struct udev *udev;
3480struct config *get_multipath_config(void) { return multipath_conf; }
3481void put_multipath_config(struct config *conf) { }
3482
3483int main(void) {
3484    udev = udev_new();
3485    multipath_conf = mpath_lib_init();
3486    return 0;
3487}
3488EOF
3489  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3490    mpathpersist=yes
3491  else
3492    mpathpersist=no
3493  fi
3494else
3495  mpathpersist=no
3496fi
3497
3498##########################################
3499# libcap probe
3500
3501if test "$cap" != "no" ; then
3502  cat > $TMPC <<EOF
3503#include <stdio.h>
3504#include <sys/capability.h>
3505int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3506EOF
3507  if compile_prog "" "-lcap" ; then
3508    cap=yes
3509  else
3510    cap=no
3511  fi
3512fi
3513
3514##########################################
3515# pthread probe
3516PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3517
3518pthread=no
3519cat > $TMPC << EOF
3520#include <pthread.h>
3521static void *f(void *p) { return NULL; }
3522int main(void) {
3523  pthread_t thread;
3524  pthread_create(&thread, 0, f, 0);
3525  return 0;
3526}
3527EOF
3528if compile_prog "" "" ; then
3529  pthread=yes
3530else
3531  for pthread_lib in $PTHREADLIBS_LIST; do
3532    if compile_prog "" "$pthread_lib" ; then
3533      pthread=yes
3534      found=no
3535      for lib_entry in $LIBS; do
3536        if test "$lib_entry" = "$pthread_lib"; then
3537          found=yes
3538          break
3539        fi
3540      done
3541      if test "$found" = "no"; then
3542        LIBS="$pthread_lib $LIBS"
3543        libs_qga="$pthread_lib $libs_qga"
3544      fi
3545      PTHREAD_LIB="$pthread_lib"
3546      break
3547    fi
3548  done
3549fi
3550
3551if test "$mingw32" != yes -a "$pthread" = no; then
3552  error_exit "pthread check failed" \
3553      "Make sure to have the pthread libs and headers installed."
3554fi
3555
3556# check for pthread_setname_np
3557pthread_setname_np=no
3558cat > $TMPC << EOF
3559#include <pthread.h>
3560
3561static void *f(void *p) { return NULL; }
3562int main(void)
3563{
3564    pthread_t thread;
3565    pthread_create(&thread, 0, f, 0);
3566    pthread_setname_np(thread, "QEMU");
3567    return 0;
3568}
3569EOF
3570if compile_prog "" "$pthread_lib" ; then
3571  pthread_setname_np=yes
3572fi
3573
3574##########################################
3575# rbd probe
3576if test "$rbd" != "no" ; then
3577  cat > $TMPC <<EOF
3578#include <stdio.h>
3579#include <rbd/librbd.h>
3580int main(void) {
3581    rados_t cluster;
3582    rados_create(&cluster, NULL);
3583    return 0;
3584}
3585EOF
3586  rbd_libs="-lrbd -lrados"
3587  if compile_prog "" "$rbd_libs" ; then
3588    rbd=yes
3589  else
3590    if test "$rbd" = "yes" ; then
3591      feature_not_found "rados block device" "Install librbd/ceph devel"
3592    fi
3593    rbd=no
3594  fi
3595fi
3596
3597##########################################
3598# libssh2 probe
3599min_libssh2_version=1.2.8
3600if test "$libssh2" != "no" ; then
3601  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3602    libssh2_cflags=$($pkg_config libssh2 --cflags)
3603    libssh2_libs=$($pkg_config libssh2 --libs)
3604    libssh2=yes
3605  else
3606    if test "$libssh2" = "yes" ; then
3607      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3608    fi
3609    libssh2=no
3610  fi
3611fi
3612
3613##########################################
3614# libssh2_sftp_fsync probe
3615
3616if test "$libssh2" = "yes"; then
3617  cat > $TMPC <<EOF
3618#include <stdio.h>
3619#include <libssh2.h>
3620#include <libssh2_sftp.h>
3621int main(void) {
3622    LIBSSH2_SESSION *session;
3623    LIBSSH2_SFTP *sftp;
3624    LIBSSH2_SFTP_HANDLE *sftp_handle;
3625    session = libssh2_session_init ();
3626    sftp = libssh2_sftp_init (session);
3627    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3628    libssh2_sftp_fsync (sftp_handle);
3629    return 0;
3630}
3631EOF
3632  # libssh2_cflags/libssh2_libs defined in previous test.
3633  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3634    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3635  fi
3636fi
3637
3638##########################################
3639# linux-aio probe
3640
3641if test "$linux_aio" != "no" ; then
3642  cat > $TMPC <<EOF
3643#include <libaio.h>
3644#include <sys/eventfd.h>
3645#include <stddef.h>
3646int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3647EOF
3648  if compile_prog "" "-laio" ; then
3649    linux_aio=yes
3650  else
3651    if test "$linux_aio" = "yes" ; then
3652      feature_not_found "linux AIO" "Install libaio devel"
3653    fi
3654    linux_aio=no
3655  fi
3656fi
3657
3658##########################################
3659# TPM passthrough is only on x86 Linux
3660
3661if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3662  tpm_passthrough=$tpm
3663else
3664  tpm_passthrough=no
3665fi
3666
3667# TPM emulator is for all posix systems
3668if test "$mingw32" != "yes"; then
3669  tpm_emulator=$tpm
3670else
3671  tpm_emulator=no
3672fi
3673##########################################
3674# attr probe
3675
3676if test "$attr" != "no" ; then
3677  cat > $TMPC <<EOF
3678#include <stdio.h>
3679#include <sys/types.h>
3680#ifdef CONFIG_LIBATTR
3681#include <attr/xattr.h>
3682#else
3683#include <sys/xattr.h>
3684#endif
3685int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3686EOF
3687  if compile_prog "" "" ; then
3688    attr=yes
3689  # Older distros have <attr/xattr.h>, and need -lattr:
3690  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3691    attr=yes
3692    LIBS="-lattr $LIBS"
3693    libattr=yes
3694  else
3695    if test "$attr" = "yes" ; then
3696      feature_not_found "ATTR" "Install libc6 or libattr devel"
3697    fi
3698    attr=no
3699  fi
3700fi
3701
3702##########################################
3703# iovec probe
3704cat > $TMPC <<EOF
3705#include <sys/types.h>
3706#include <sys/uio.h>
3707#include <unistd.h>
3708int main(void) { return sizeof(struct iovec); }
3709EOF
3710iovec=no
3711if compile_prog "" "" ; then
3712  iovec=yes
3713fi
3714
3715##########################################
3716# preadv probe
3717cat > $TMPC <<EOF
3718#include <sys/types.h>
3719#include <sys/uio.h>
3720#include <unistd.h>
3721int main(void) { return preadv(0, 0, 0, 0); }
3722EOF
3723preadv=no
3724if compile_prog "" "" ; then
3725  preadv=yes
3726fi
3727
3728##########################################
3729# fdt probe
3730# fdt support is mandatory for at least some target architectures,
3731# so insist on it if we're building those system emulators.
3732fdt_required=no
3733for target in $target_list; do
3734  case $target in
3735    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3736      fdt_required=yes
3737    ;;
3738  esac
3739done
3740
3741if test "$fdt_required" = "yes"; then
3742  if test "$fdt" = "no"; then
3743    error_exit "fdt disabled but some requested targets require it." \
3744      "You can turn off fdt only if you also disable all the system emulation" \
3745      "targets which need it (by specifying a cut down --target-list)."
3746  fi
3747  fdt=yes
3748fi
3749
3750if test "$fdt" != "no" ; then
3751  fdt_libs="-lfdt"
3752  # explicitly check for libfdt_env.h as it is missing in some stable installs
3753  # and test for required functions to make sure we are on a version >= 1.4.2
3754  cat > $TMPC << EOF
3755#include <libfdt.h>
3756#include <libfdt_env.h>
3757int main(void) { fdt_first_subnode(0, 0); return 0; }
3758EOF
3759  if compile_prog "" "$fdt_libs" ; then
3760    # system DTC is good - use it
3761    fdt=yes
3762  else
3763      # have GIT checkout, so activate dtc submodule
3764      if test -e "${source_path}/.git" ; then
3765          git_submodules="${git_submodules} dtc"
3766      fi
3767      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3768          fdt=yes
3769          dtc_internal="yes"
3770          mkdir -p dtc
3771          if [ "$pwd_is_source_path" != "y" ] ; then
3772              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3773              symlink "$source_path/dtc/scripts" "dtc/scripts"
3774          fi
3775          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3776          fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3777      elif test "$fdt" = "yes" ; then
3778          # Not a git build & no libfdt found, prompt for system install
3779          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3780                     "Please install the DTC (libfdt) devel package"
3781      else
3782          # don't have and don't want
3783          fdt_libs=
3784          fdt=no
3785      fi
3786  fi
3787fi
3788
3789libs_softmmu="$libs_softmmu $fdt_libs"
3790
3791##########################################
3792# opengl probe (for sdl2, gtk, milkymist-tmu2)
3793
3794if test "$opengl" != "no" ; then
3795  opengl_pkgs="epoxy libdrm gbm"
3796  if $pkg_config $opengl_pkgs; then
3797    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3798    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3799    opengl=yes
3800    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3801        gtk_gl="yes"
3802    fi
3803    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3804  else
3805    if test "$opengl" = "yes" ; then
3806      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3807    fi
3808    opengl_cflags=""
3809    opengl_libs=""
3810    opengl=no
3811  fi
3812fi
3813
3814if test "$opengl" = "yes"; then
3815  cat > $TMPC << EOF
3816#include <epoxy/egl.h>
3817#ifndef EGL_MESA_image_dma_buf_export
3818# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3819#endif
3820int main(void) { return 0; }
3821EOF
3822  if compile_prog "" "" ; then
3823    opengl_dmabuf=yes
3824  fi
3825fi
3826
3827##########################################
3828# libxml2 probe
3829if test "$libxml2" != "no" ; then
3830    if $pkg_config --exists libxml-2.0; then
3831        libxml2="yes"
3832        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3833        libxml2_libs=$($pkg_config --libs libxml-2.0)
3834    else
3835        if test "$libxml2" = "yes"; then
3836            feature_not_found "libxml2" "Install libxml2 devel"
3837        fi
3838        libxml2="no"
3839    fi
3840fi
3841
3842##########################################
3843# glusterfs probe
3844if test "$glusterfs" != "no" ; then
3845  if $pkg_config --atleast-version=3 glusterfs-api; then
3846    glusterfs="yes"
3847    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3848    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3849    if $pkg_config --atleast-version=4 glusterfs-api; then
3850      glusterfs_xlator_opt="yes"
3851    fi
3852    if $pkg_config --atleast-version=5 glusterfs-api; then
3853      glusterfs_discard="yes"
3854    fi
3855    if $pkg_config --atleast-version=6 glusterfs-api; then
3856      glusterfs_fallocate="yes"
3857      glusterfs_zerofill="yes"
3858    fi
3859  else
3860    if test "$glusterfs" = "yes" ; then
3861      feature_not_found "GlusterFS backend support" \
3862          "Install glusterfs-api devel >= 3"
3863    fi
3864    glusterfs="no"
3865  fi
3866fi
3867
3868# Check for inotify functions when we are building linux-user
3869# emulator.  This is done because older glibc versions don't
3870# have syscall stubs for these implemented.  In that case we
3871# don't provide them even if kernel supports them.
3872#
3873inotify=no
3874cat > $TMPC << EOF
3875#include <sys/inotify.h>
3876
3877int
3878main(void)
3879{
3880	/* try to start inotify */
3881	return inotify_init();
3882}
3883EOF
3884if compile_prog "" "" ; then
3885  inotify=yes
3886fi
3887
3888inotify1=no
3889cat > $TMPC << EOF
3890#include <sys/inotify.h>
3891
3892int
3893main(void)
3894{
3895    /* try to start inotify */
3896    return inotify_init1(0);
3897}
3898EOF
3899if compile_prog "" "" ; then
3900  inotify1=yes
3901fi
3902
3903# check if pipe2 is there
3904pipe2=no
3905cat > $TMPC << EOF
3906#include <unistd.h>
3907#include <fcntl.h>
3908
3909int main(void)
3910{
3911    int pipefd[2];
3912    return pipe2(pipefd, O_CLOEXEC);
3913}
3914EOF
3915if compile_prog "" "" ; then
3916  pipe2=yes
3917fi
3918
3919# check if accept4 is there
3920accept4=no
3921cat > $TMPC << EOF
3922#include <sys/socket.h>
3923#include <stddef.h>
3924
3925int main(void)
3926{
3927    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3928    return 0;
3929}
3930EOF
3931if compile_prog "" "" ; then
3932  accept4=yes
3933fi
3934
3935# check if tee/splice is there. vmsplice was added same time.
3936splice=no
3937cat > $TMPC << EOF
3938#include <unistd.h>
3939#include <fcntl.h>
3940#include <limits.h>
3941
3942int main(void)
3943{
3944    int len, fd = 0;
3945    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3946    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3947    return 0;
3948}
3949EOF
3950if compile_prog "" "" ; then
3951  splice=yes
3952fi
3953
3954##########################################
3955# libnuma probe
3956
3957if test "$numa" != "no" ; then
3958  cat > $TMPC << EOF
3959#include <numa.h>
3960int main(void) { return numa_available(); }
3961EOF
3962
3963  if compile_prog "" "-lnuma" ; then
3964    numa=yes
3965    libs_softmmu="-lnuma $libs_softmmu"
3966  else
3967    if test "$numa" = "yes" ; then
3968      feature_not_found "numa" "install numactl devel"
3969    fi
3970    numa=no
3971  fi
3972fi
3973
3974if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3975    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3976    exit 1
3977fi
3978
3979# Even if malloc_trim() is available, these non-libc memory allocators
3980# do not support it.
3981if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3982    if test "$malloc_trim" = "yes" ; then
3983        echo "Disabling malloc_trim with non-libc memory allocator"
3984    fi
3985    malloc_trim="no"
3986fi
3987
3988#######################################
3989# malloc_trim
3990
3991if test "$malloc_trim" != "no" ; then
3992    cat > $TMPC << EOF
3993#include <malloc.h>
3994int main(void) { malloc_trim(0); return 0; }
3995EOF
3996    if compile_prog "" "" ; then
3997        malloc_trim="yes"
3998    else
3999        malloc_trim="no"
4000    fi
4001fi
4002
4003##########################################
4004# tcmalloc probe
4005
4006if test "$tcmalloc" = "yes" ; then
4007  cat > $TMPC << EOF
4008#include <stdlib.h>
4009int main(void) { malloc(1); return 0; }
4010EOF
4011
4012  if compile_prog "" "-ltcmalloc" ; then
4013    LIBS="-ltcmalloc $LIBS"
4014  else
4015    feature_not_found "tcmalloc" "install gperftools devel"
4016  fi
4017fi
4018
4019##########################################
4020# jemalloc probe
4021
4022if test "$jemalloc" = "yes" ; then
4023  cat > $TMPC << EOF
4024#include <stdlib.h>
4025int main(void) { malloc(1); return 0; }
4026EOF
4027
4028  if compile_prog "" "-ljemalloc" ; then
4029    LIBS="-ljemalloc $LIBS"
4030  else
4031    feature_not_found "jemalloc" "install jemalloc devel"
4032  fi
4033fi
4034
4035##########################################
4036# signalfd probe
4037signalfd="no"
4038cat > $TMPC << EOF
4039#include <unistd.h>
4040#include <sys/syscall.h>
4041#include <signal.h>
4042int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4043EOF
4044
4045if compile_prog "" "" ; then
4046  signalfd=yes
4047fi
4048
4049# check if eventfd is supported
4050eventfd=no
4051cat > $TMPC << EOF
4052#include <sys/eventfd.h>
4053
4054int main(void)
4055{
4056    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4057}
4058EOF
4059if compile_prog "" "" ; then
4060  eventfd=yes
4061fi
4062
4063# check if memfd is supported
4064memfd=no
4065cat > $TMPC << EOF
4066#include <sys/mman.h>
4067
4068int main(void)
4069{
4070    return memfd_create("foo", MFD_ALLOW_SEALING);
4071}
4072EOF
4073if compile_prog "" "" ; then
4074  memfd=yes
4075fi
4076
4077
4078
4079# check for fallocate
4080fallocate=no
4081cat > $TMPC << EOF
4082#include <fcntl.h>
4083
4084int main(void)
4085{
4086    fallocate(0, 0, 0, 0);
4087    return 0;
4088}
4089EOF
4090if compile_prog "" "" ; then
4091  fallocate=yes
4092fi
4093
4094# check for fallocate hole punching
4095fallocate_punch_hole=no
4096cat > $TMPC << EOF
4097#include <fcntl.h>
4098#include <linux/falloc.h>
4099
4100int main(void)
4101{
4102    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4103    return 0;
4104}
4105EOF
4106if compile_prog "" "" ; then
4107  fallocate_punch_hole=yes
4108fi
4109
4110# check that fallocate supports range zeroing inside the file
4111fallocate_zero_range=no
4112cat > $TMPC << EOF
4113#include <fcntl.h>
4114#include <linux/falloc.h>
4115
4116int main(void)
4117{
4118    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4119    return 0;
4120}
4121EOF
4122if compile_prog "" "" ; then
4123  fallocate_zero_range=yes
4124fi
4125
4126# check for posix_fallocate
4127posix_fallocate=no
4128cat > $TMPC << EOF
4129#include <fcntl.h>
4130
4131int main(void)
4132{
4133    posix_fallocate(0, 0, 0);
4134    return 0;
4135}
4136EOF
4137if compile_prog "" "" ; then
4138    posix_fallocate=yes
4139fi
4140
4141# check for sync_file_range
4142sync_file_range=no
4143cat > $TMPC << EOF
4144#include <fcntl.h>
4145
4146int main(void)
4147{
4148    sync_file_range(0, 0, 0, 0);
4149    return 0;
4150}
4151EOF
4152if compile_prog "" "" ; then
4153  sync_file_range=yes
4154fi
4155
4156# check for linux/fiemap.h and FS_IOC_FIEMAP
4157fiemap=no
4158cat > $TMPC << EOF
4159#include <sys/ioctl.h>
4160#include <linux/fs.h>
4161#include <linux/fiemap.h>
4162
4163int main(void)
4164{
4165    ioctl(0, FS_IOC_FIEMAP, 0);
4166    return 0;
4167}
4168EOF
4169if compile_prog "" "" ; then
4170  fiemap=yes
4171fi
4172
4173# check for dup3
4174dup3=no
4175cat > $TMPC << EOF
4176#include <unistd.h>
4177
4178int main(void)
4179{
4180    dup3(0, 0, 0);
4181    return 0;
4182}
4183EOF
4184if compile_prog "" "" ; then
4185  dup3=yes
4186fi
4187
4188# check for ppoll support
4189ppoll=no
4190cat > $TMPC << EOF
4191#include <poll.h>
4192
4193int main(void)
4194{
4195    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4196    ppoll(&pfd, 1, 0, 0);
4197    return 0;
4198}
4199EOF
4200if compile_prog "" "" ; then
4201  ppoll=yes
4202fi
4203
4204# check for prctl(PR_SET_TIMERSLACK , ... ) support
4205prctl_pr_set_timerslack=no
4206cat > $TMPC << EOF
4207#include <sys/prctl.h>
4208
4209int main(void)
4210{
4211    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4212    return 0;
4213}
4214EOF
4215if compile_prog "" "" ; then
4216  prctl_pr_set_timerslack=yes
4217fi
4218
4219# check for epoll support
4220epoll=no
4221cat > $TMPC << EOF
4222#include <sys/epoll.h>
4223
4224int main(void)
4225{
4226    epoll_create(0);
4227    return 0;
4228}
4229EOF
4230if compile_prog "" "" ; then
4231  epoll=yes
4232fi
4233
4234# epoll_create1 is a later addition
4235# so we must check separately for its presence
4236epoll_create1=no
4237cat > $TMPC << EOF
4238#include <sys/epoll.h>
4239
4240int main(void)
4241{
4242    /* Note that we use epoll_create1 as a value, not as
4243     * a function being called. This is necessary so that on
4244     * old SPARC glibc versions where the function was present in
4245     * the library but not declared in the header file we will
4246     * fail the configure check. (Otherwise we will get a compiler
4247     * warning but not an error, and will proceed to fail the
4248     * qemu compile where we compile with -Werror.)
4249     */
4250    return (int)(uintptr_t)&epoll_create1;
4251}
4252EOF
4253if compile_prog "" "" ; then
4254  epoll_create1=yes
4255fi
4256
4257# check for sendfile support
4258sendfile=no
4259cat > $TMPC << EOF
4260#include <sys/sendfile.h>
4261
4262int main(void)
4263{
4264    return sendfile(0, 0, 0, 0);
4265}
4266EOF
4267if compile_prog "" "" ; then
4268  sendfile=yes
4269fi
4270
4271# check for timerfd support (glibc 2.8 and newer)
4272timerfd=no
4273cat > $TMPC << EOF
4274#include <sys/timerfd.h>
4275
4276int main(void)
4277{
4278    return(timerfd_create(CLOCK_REALTIME, 0));
4279}
4280EOF
4281if compile_prog "" "" ; then
4282  timerfd=yes
4283fi
4284
4285# check for setns and unshare support
4286setns=no
4287cat > $TMPC << EOF
4288#include <sched.h>
4289
4290int main(void)
4291{
4292    int ret;
4293    ret = setns(0, 0);
4294    ret = unshare(0);
4295    return ret;
4296}
4297EOF
4298if compile_prog "" "" ; then
4299  setns=yes
4300fi
4301
4302# clock_adjtime probe
4303clock_adjtime=no
4304cat > $TMPC <<EOF
4305#include <time.h>
4306
4307int main(void)
4308{
4309    return clock_adjtime(0, 0);
4310}
4311EOF
4312clock_adjtime=no
4313if compile_prog "" "" ; then
4314  clock_adjtime=yes
4315fi
4316
4317# syncfs probe
4318syncfs=no
4319cat > $TMPC <<EOF
4320#include <unistd.h>
4321
4322int main(void)
4323{
4324    return syncfs(0);
4325}
4326EOF
4327syncfs=no
4328if compile_prog "" "" ; then
4329  syncfs=yes
4330fi
4331
4332# Check if tools are available to build documentation.
4333if test "$docs" != "no" ; then
4334  if has makeinfo && has pod2man; then
4335    docs=yes
4336  else
4337    if test "$docs" = "yes" ; then
4338      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4339    fi
4340    docs=no
4341  fi
4342fi
4343
4344# Search for bswap_32 function
4345byteswap_h=no
4346cat > $TMPC << EOF
4347#include <byteswap.h>
4348int main(void) { return bswap_32(0); }
4349EOF
4350if compile_prog "" "" ; then
4351  byteswap_h=yes
4352fi
4353
4354# Search for bswap32 function
4355bswap_h=no
4356cat > $TMPC << EOF
4357#include <sys/endian.h>
4358#include <sys/types.h>
4359#include <machine/bswap.h>
4360int main(void) { return bswap32(0); }
4361EOF
4362if compile_prog "" "" ; then
4363  bswap_h=yes
4364fi
4365
4366##########################################
4367# Do we have libiscsi >= 1.9.0
4368if test "$libiscsi" != "no" ; then
4369  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4370    libiscsi="yes"
4371    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4372    libiscsi_libs=$($pkg_config --libs libiscsi)
4373  else
4374    if test "$libiscsi" = "yes" ; then
4375      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4376    fi
4377    libiscsi="no"
4378  fi
4379fi
4380
4381##########################################
4382# Do we need libm
4383cat > $TMPC << EOF
4384#include <math.h>
4385int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4386EOF
4387if compile_prog "" "" ; then
4388  :
4389elif compile_prog "" "-lm" ; then
4390  LIBS="-lm $LIBS"
4391  libs_qga="-lm $libs_qga"
4392else
4393  error_exit "libm check failed"
4394fi
4395
4396##########################################
4397# Do we need librt
4398# uClibc provides 2 versions of clock_gettime(), one with realtime
4399# support and one without. This means that the clock_gettime() don't
4400# need -lrt. We still need it for timer_create() so we check for this
4401# function in addition.
4402cat > $TMPC <<EOF
4403#include <signal.h>
4404#include <time.h>
4405int main(void) {
4406  timer_create(CLOCK_REALTIME, NULL, NULL);
4407  return clock_gettime(CLOCK_REALTIME, NULL);
4408}
4409EOF
4410
4411if compile_prog "" "" ; then
4412  :
4413# we need pthread for static linking. use previous pthread test result
4414elif compile_prog "" "$pthread_lib -lrt" ; then
4415  LIBS="$LIBS -lrt"
4416  libs_qga="$libs_qga -lrt"
4417fi
4418
4419if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4420        "$haiku" != "yes" ; then
4421    libs_softmmu="-lutil $libs_softmmu"
4422fi
4423
4424##########################################
4425# spice probe
4426if test "$spice" != "no" ; then
4427  cat > $TMPC << EOF
4428#include <spice.h>
4429int main(void) { spice_server_new(); return 0; }
4430EOF
4431  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4432  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4433  if $pkg_config --atleast-version=0.12.0 spice-server && \
4434     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4435     compile_prog "$spice_cflags" "$spice_libs" ; then
4436    spice="yes"
4437    libs_softmmu="$libs_softmmu $spice_libs"
4438    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4439    spice_protocol_version=$($pkg_config --modversion spice-protocol)
4440    spice_server_version=$($pkg_config --modversion spice-server)
4441  else
4442    if test "$spice" = "yes" ; then
4443      feature_not_found "spice" \
4444          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4445    fi
4446    spice="no"
4447  fi
4448fi
4449
4450# check for smartcard support
4451if test "$smartcard" != "no"; then
4452    if $pkg_config libcacard; then
4453        libcacard_cflags=$($pkg_config --cflags libcacard)
4454        libcacard_libs=$($pkg_config --libs libcacard)
4455        smartcard="yes"
4456    else
4457        if test "$smartcard" = "yes"; then
4458            feature_not_found "smartcard" "Install libcacard devel"
4459        fi
4460        smartcard="no"
4461    fi
4462fi
4463
4464# check for libusb
4465if test "$libusb" != "no" ; then
4466    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4467        libusb="yes"
4468        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4469        libusb_libs=$($pkg_config --libs libusb-1.0)
4470    else
4471        if test "$libusb" = "yes"; then
4472            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4473        fi
4474        libusb="no"
4475    fi
4476fi
4477
4478# check for usbredirparser for usb network redirection support
4479if test "$usb_redir" != "no" ; then
4480    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4481        usb_redir="yes"
4482        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4483        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4484    else
4485        if test "$usb_redir" = "yes"; then
4486            feature_not_found "usb-redir" "Install usbredir devel"
4487        fi
4488        usb_redir="no"
4489    fi
4490fi
4491
4492##########################################
4493# check if we have VSS SDK headers for win
4494
4495if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4496  case "$vss_win32_sdk" in
4497    "")   vss_win32_include="-isystem $source_path" ;;
4498    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4499          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4500          vss_win32_include="-isystem $source_path/.sdk/vss"
4501	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4502	  ;;
4503    *)    vss_win32_include="-isystem $vss_win32_sdk"
4504  esac
4505  cat > $TMPC << EOF
4506#define __MIDL_user_allocate_free_DEFINED__
4507#include <inc/win2003/vss.h>
4508int main(void) { return VSS_CTX_BACKUP; }
4509EOF
4510  if compile_prog "$vss_win32_include" "" ; then
4511    guest_agent_with_vss="yes"
4512    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4513    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4514    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4515  else
4516    if test "$vss_win32_sdk" != "" ; then
4517      echo "ERROR: Please download and install Microsoft VSS SDK:"
4518      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4519      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4520      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4521      echo "ERROR: The headers are extracted in the directory \`inc'."
4522      feature_not_found "VSS support"
4523    fi
4524    guest_agent_with_vss="no"
4525  fi
4526fi
4527
4528##########################################
4529# lookup Windows platform SDK (if not specified)
4530# The SDK is needed only to build .tlb (type library) file of guest agent
4531# VSS provider from the source. It is usually unnecessary because the
4532# pre-compiled .tlb file is included.
4533
4534if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4535  if test -z "$win_sdk"; then
4536    programfiles="$PROGRAMFILES"
4537    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4538    if test -n "$programfiles"; then
4539      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4540    else
4541      feature_not_found "Windows SDK"
4542    fi
4543  elif test "$win_sdk" = "no"; then
4544    win_sdk=""
4545  fi
4546fi
4547
4548##########################################
4549# check if mingw environment provides a recent ntddscsi.h
4550if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4551  cat > $TMPC << EOF
4552#include <windows.h>
4553#include <ntddscsi.h>
4554int main(void) {
4555#if !defined(IOCTL_SCSI_GET_ADDRESS)
4556#error Missing required ioctl definitions
4557#endif
4558  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4559  return addr.Lun;
4560}
4561EOF
4562  if compile_prog "" "" ; then
4563    guest_agent_ntddscsi=yes
4564    libs_qga="-lsetupapi $libs_qga"
4565  fi
4566fi
4567
4568##########################################
4569# virgl renderer probe
4570
4571if test "$virglrenderer" != "no" ; then
4572  cat > $TMPC << EOF
4573#include <virglrenderer.h>
4574int main(void) { virgl_renderer_poll(); return 0; }
4575EOF
4576  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4577  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4578  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4579     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4580    virglrenderer="yes"
4581  else
4582    if test "$virglrenderer" = "yes" ; then
4583      feature_not_found "virglrenderer"
4584    fi
4585    virglrenderer="no"
4586  fi
4587fi
4588
4589##########################################
4590# capstone
4591
4592case "$capstone" in
4593  "" | yes)
4594    if $pkg_config capstone; then
4595      capstone=system
4596    elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4597      capstone=git
4598    elif test -e "${source_path}/capstone/Makefile" ; then
4599      capstone=internal
4600    elif test -z "$capstone" ; then
4601      capstone=no
4602    else
4603      feature_not_found "capstone" "Install capstone devel or git submodule"
4604    fi
4605    ;;
4606
4607  system)
4608    if ! $pkg_config capstone; then
4609      feature_not_found "capstone" "Install capstone devel"
4610    fi
4611    ;;
4612esac
4613
4614case "$capstone" in
4615  git | internal)
4616    if test "$capstone" = git; then
4617      git_submodules="${git_submodules} capstone"
4618    fi
4619    mkdir -p capstone
4620    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4621    if test "$mingw32" = "yes"; then
4622      LIBCAPSTONE=capstone.lib
4623    else
4624      LIBCAPSTONE=libcapstone.a
4625    fi
4626    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4627    ;;
4628
4629  system)
4630    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4631    LIBS="$($pkg_config --libs capstone) $LIBS"
4632    ;;
4633
4634  no)
4635    ;;
4636  *)
4637    error_exit "Unknown state for capstone: $capstone"
4638    ;;
4639esac
4640
4641##########################################
4642# check if we have fdatasync
4643
4644fdatasync=no
4645cat > $TMPC << EOF
4646#include <unistd.h>
4647int main(void) {
4648#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4649return fdatasync(0);
4650#else
4651#error Not supported
4652#endif
4653}
4654EOF
4655if compile_prog "" "" ; then
4656    fdatasync=yes
4657fi
4658
4659##########################################
4660# check if we have madvise
4661
4662madvise=no
4663cat > $TMPC << EOF
4664#include <sys/types.h>
4665#include <sys/mman.h>
4666#include <stddef.h>
4667int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4668EOF
4669if compile_prog "" "" ; then
4670    madvise=yes
4671fi
4672
4673##########################################
4674# check if we have posix_madvise
4675
4676posix_madvise=no
4677cat > $TMPC << EOF
4678#include <sys/mman.h>
4679#include <stddef.h>
4680int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4681EOF
4682if compile_prog "" "" ; then
4683    posix_madvise=yes
4684fi
4685
4686##########################################
4687# check if we have posix_memalign()
4688
4689posix_memalign=no
4690cat > $TMPC << EOF
4691#include <stdlib.h>
4692int main(void) {
4693    void *p;
4694    return posix_memalign(&p, 8, 8);
4695}
4696EOF
4697if compile_prog "" "" ; then
4698    posix_memalign=yes
4699fi
4700
4701##########################################
4702# check if we have posix_syslog
4703
4704posix_syslog=no
4705cat > $TMPC << EOF
4706#include <syslog.h>
4707int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4708EOF
4709if compile_prog "" "" ; then
4710    posix_syslog=yes
4711fi
4712
4713##########################################
4714# check if we have sem_timedwait
4715
4716sem_timedwait=no
4717cat > $TMPC << EOF
4718#include <semaphore.h>
4719int main(void) { return sem_timedwait(0, 0); }
4720EOF
4721if compile_prog "" "" ; then
4722    sem_timedwait=yes
4723fi
4724
4725##########################################
4726# check if trace backend exists
4727
4728$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4729if test "$?" -ne 0 ; then
4730  error_exit "invalid trace backends" \
4731      "Please choose supported trace backends."
4732fi
4733
4734##########################################
4735# For 'ust' backend, test if ust headers are present
4736if have_backend "ust"; then
4737  cat > $TMPC << EOF
4738#include <lttng/tracepoint.h>
4739int main(void) { return 0; }
4740EOF
4741  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4742    if $pkg_config lttng-ust --exists; then
4743      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4744    else
4745      lttng_ust_libs="-llttng-ust -ldl"
4746    fi
4747    if $pkg_config liburcu-bp --exists; then
4748      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4749    else
4750      urcu_bp_libs="-lurcu-bp"
4751    fi
4752
4753    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4754    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4755  else
4756    error_exit "Trace backend 'ust' missing lttng-ust header files"
4757  fi
4758fi
4759
4760##########################################
4761# For 'dtrace' backend, test if 'dtrace' command is present
4762if have_backend "dtrace"; then
4763  if ! has 'dtrace' ; then
4764    error_exit "dtrace command is not found in PATH $PATH"
4765  fi
4766  trace_backend_stap="no"
4767  if has 'stap' ; then
4768    trace_backend_stap="yes"
4769  fi
4770fi
4771
4772##########################################
4773# check and set a backend for coroutine
4774
4775# We prefer ucontext, but it's not always possible. The fallback
4776# is sigcontext. On Windows the only valid backend is the Windows
4777# specific one.
4778
4779ucontext_works=no
4780if test "$darwin" != "yes"; then
4781  cat > $TMPC << EOF
4782#include <ucontext.h>
4783#ifdef __stub_makecontext
4784#error Ignoring glibc stub makecontext which will always fail
4785#endif
4786int main(void) { makecontext(0, 0, 0); return 0; }
4787EOF
4788  if compile_prog "" "" ; then
4789    ucontext_works=yes
4790  fi
4791fi
4792
4793if test "$coroutine" = ""; then
4794  if test "$mingw32" = "yes"; then
4795    coroutine=win32
4796  elif test "$ucontext_works" = "yes"; then
4797    coroutine=ucontext
4798  else
4799    coroutine=sigaltstack
4800  fi
4801else
4802  case $coroutine in
4803  windows)
4804    if test "$mingw32" != "yes"; then
4805      error_exit "'windows' coroutine backend only valid for Windows"
4806    fi
4807    # Unfortunately the user visible backend name doesn't match the
4808    # coroutine-*.c filename for this case, so we have to adjust it here.
4809    coroutine=win32
4810    ;;
4811  ucontext)
4812    if test "$ucontext_works" != "yes"; then
4813      feature_not_found "ucontext"
4814    fi
4815    ;;
4816  sigaltstack)
4817    if test "$mingw32" = "yes"; then
4818      error_exit "only the 'windows' coroutine backend is valid for Windows"
4819    fi
4820    ;;
4821  *)
4822    error_exit "unknown coroutine backend $coroutine"
4823    ;;
4824  esac
4825fi
4826
4827if test "$coroutine_pool" = ""; then
4828  coroutine_pool=yes
4829fi
4830
4831if test "$debug_stack_usage" = "yes"; then
4832  if test "$coroutine_pool" = "yes"; then
4833    echo "WARN: disabling coroutine pool for stack usage debugging"
4834    coroutine_pool=no
4835  fi
4836fi
4837
4838
4839##########################################
4840# check if we have open_by_handle_at
4841
4842open_by_handle_at=no
4843cat > $TMPC << EOF
4844#include <fcntl.h>
4845#if !defined(AT_EMPTY_PATH)
4846# error missing definition
4847#else
4848int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4849#endif
4850EOF
4851if compile_prog "" "" ; then
4852    open_by_handle_at=yes
4853fi
4854
4855########################################
4856# check if we have linux/magic.h
4857
4858linux_magic_h=no
4859cat > $TMPC << EOF
4860#include <linux/magic.h>
4861int main(void) {
4862  return 0;
4863}
4864EOF
4865if compile_prog "" "" ; then
4866    linux_magic_h=yes
4867fi
4868
4869########################################
4870# check whether we can disable warning option with a pragma (this is needed
4871# to silence warnings in the headers of some versions of external libraries).
4872# This test has to be compiled with -Werror as otherwise an unknown pragma is
4873# only a warning.
4874#
4875# If we can't selectively disable warning in the code, disable -Werror so that
4876# the build doesn't fail anyway.
4877
4878pragma_disable_unused_but_set=no
4879cat > $TMPC << EOF
4880#pragma GCC diagnostic push
4881#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4882#pragma GCC diagnostic pop
4883
4884int main(void) {
4885    return 0;
4886}
4887EOF
4888if compile_prog "-Werror" "" ; then
4889    pragma_diagnostic_available=yes
4890else
4891    werror=no
4892fi
4893
4894########################################
4895# check if we have valgrind/valgrind.h
4896
4897valgrind_h=no
4898cat > $TMPC << EOF
4899#include <valgrind/valgrind.h>
4900int main(void) {
4901  return 0;
4902}
4903EOF
4904if compile_prog "" "" ; then
4905    valgrind_h=yes
4906fi
4907
4908########################################
4909# check if environ is declared
4910
4911has_environ=no
4912cat > $TMPC << EOF
4913#include <unistd.h>
4914int main(void) {
4915    environ = 0;
4916    return 0;
4917}
4918EOF
4919if compile_prog "" "" ; then
4920    has_environ=yes
4921fi
4922
4923########################################
4924# check if cpuid.h is usable.
4925
4926cat > $TMPC << EOF
4927#include <cpuid.h>
4928int main(void) {
4929    unsigned a, b, c, d;
4930    int max = __get_cpuid_max(0, 0);
4931
4932    if (max >= 1) {
4933        __cpuid(1, a, b, c, d);
4934    }
4935
4936    if (max >= 7) {
4937        __cpuid_count(7, 0, a, b, c, d);
4938    }
4939
4940    return 0;
4941}
4942EOF
4943if compile_prog "" "" ; then
4944    cpuid_h=yes
4945fi
4946
4947##########################################
4948# avx2 optimization requirement check
4949#
4950# There is no point enabling this if cpuid.h is not usable,
4951# since we won't be able to select the new routines.
4952
4953if test $cpuid_h = yes; then
4954  cat > $TMPC << EOF
4955#pragma GCC push_options
4956#pragma GCC target("avx2")
4957#include <cpuid.h>
4958#include <immintrin.h>
4959static int bar(void *a) {
4960    __m256i x = *(__m256i *)a;
4961    return _mm256_testz_si256(x, x);
4962}
4963int main(int argc, char *argv[]) { return bar(argv[0]); }
4964EOF
4965  if compile_object "" ; then
4966    avx2_opt="yes"
4967  fi
4968fi
4969
4970########################################
4971# check if __[u]int128_t is usable.
4972
4973int128=no
4974cat > $TMPC << EOF
4975#if defined(__clang_major__) && defined(__clang_minor__)
4976# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4977#  error __int128_t does not work in CLANG before 3.2
4978# endif
4979#endif
4980__int128_t a;
4981__uint128_t b;
4982int main (void) {
4983  a = a + b;
4984  b = a * b;
4985  a = a * a;
4986  return 0;
4987}
4988EOF
4989if compile_prog "" "" ; then
4990    int128=yes
4991fi
4992
4993#########################################
4994# See if 128-bit atomic operations are supported.
4995
4996atomic128=no
4997if test "$int128" = "yes"; then
4998  cat > $TMPC << EOF
4999int main(void)
5000{
5001  unsigned __int128 x = 0, y = 0;
5002  y = __atomic_load_16(&x, 0);
5003  __atomic_store_16(&x, y, 0);
5004  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5005  return 0;
5006}
5007EOF
5008  if compile_prog "" "" ; then
5009    atomic128=yes
5010  fi
5011fi
5012
5013#########################################
5014# See if 64-bit atomic operations are supported.
5015# Note that without __atomic builtins, we can only
5016# assume atomic loads/stores max at pointer size.
5017
5018cat > $TMPC << EOF
5019#include <stdint.h>
5020int main(void)
5021{
5022  uint64_t x = 0, y = 0;
5023#ifdef __ATOMIC_RELAXED
5024  y = __atomic_load_8(&x, 0);
5025  __atomic_store_8(&x, y, 0);
5026  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5027  __atomic_exchange_8(&x, y, 0);
5028  __atomic_fetch_add_8(&x, y, 0);
5029#else
5030  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5031  __sync_lock_test_and_set(&x, y);
5032  __sync_val_compare_and_swap(&x, y, 0);
5033  __sync_fetch_and_add(&x, y);
5034#endif
5035  return 0;
5036}
5037EOF
5038if compile_prog "" "" ; then
5039  atomic64=yes
5040fi
5041
5042########################################
5043# See if 16-byte vector operations are supported.
5044# Even without a vector unit the compiler may expand these.
5045# There is a bug in old GCC for PPC that crashes here.
5046# Unfortunately it's the system compiler for Centos 7.
5047
5048cat > $TMPC << EOF
5049typedef unsigned char U1 __attribute__((vector_size(16)));
5050typedef unsigned short U2 __attribute__((vector_size(16)));
5051typedef unsigned int U4 __attribute__((vector_size(16)));
5052typedef unsigned long long U8 __attribute__((vector_size(16)));
5053typedef signed char S1 __attribute__((vector_size(16)));
5054typedef signed short S2 __attribute__((vector_size(16)));
5055typedef signed int S4 __attribute__((vector_size(16)));
5056typedef signed long long S8 __attribute__((vector_size(16)));
5057static U1 a1, b1;
5058static U2 a2, b2;
5059static U4 a4, b4;
5060static U8 a8, b8;
5061static S1 c1;
5062static S2 c2;
5063static S4 c4;
5064static S8 c8;
5065static int i;
5066void helper(void *d, void *a, int shift, int i);
5067void helper(void *d, void *a, int shift, int i)
5068{
5069  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5070  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5071  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5072  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5073}
5074int main(void)
5075{
5076  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5077  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5078  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5079  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5080  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5081  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5082  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5083  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5084  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5085  return 0;
5086}
5087EOF
5088
5089vector16=no
5090if compile_prog "" "" ; then
5091  vector16=yes
5092fi
5093
5094########################################
5095# check if getauxval is available.
5096
5097getauxval=no
5098cat > $TMPC << EOF
5099#include <sys/auxv.h>
5100int main(void) {
5101  return getauxval(AT_HWCAP) == 0;
5102}
5103EOF
5104if compile_prog "" "" ; then
5105    getauxval=yes
5106fi
5107
5108########################################
5109# check if ccache is interfering with
5110# semantic analysis of macros
5111
5112unset CCACHE_CPP2
5113ccache_cpp2=no
5114cat > $TMPC << EOF
5115static const int Z = 1;
5116#define fn() ({ Z; })
5117#define TAUT(X) ((X) == Z)
5118#define PAREN(X, Y) (X == Y)
5119#define ID(X) (X)
5120int main(int argc, char *argv[])
5121{
5122    int x = 0, y = 0;
5123    x = ID(x);
5124    x = fn();
5125    fn();
5126    if (PAREN(x, y)) return 0;
5127    if (TAUT(Z)) return 0;
5128    return 0;
5129}
5130EOF
5131
5132if ! compile_object "-Werror"; then
5133    ccache_cpp2=yes
5134fi
5135
5136#################################################
5137# clang does not support glibc + FORTIFY_SOURCE.
5138
5139if test "$fortify_source" != "no"; then
5140  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5141    fortify_source="no";
5142  elif test -n "$cxx" && has $cxx &&
5143       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5144    fortify_source="no";
5145  else
5146    fortify_source="yes"
5147  fi
5148fi
5149
5150##########################################
5151# check if struct fsxattr is available via linux/fs.h
5152
5153have_fsxattr=no
5154cat > $TMPC << EOF
5155#include <linux/fs.h>
5156struct fsxattr foo;
5157int main(void) {
5158  return 0;
5159}
5160EOF
5161if compile_prog "" "" ; then
5162    have_fsxattr=yes
5163fi
5164
5165##########################################
5166# check for usable membarrier system call
5167if test "$membarrier" = "yes"; then
5168    have_membarrier=no
5169    if test "$mingw32" = "yes" ; then
5170        have_membarrier=yes
5171    elif test "$linux" = "yes" ; then
5172        cat > $TMPC << EOF
5173    #include <linux/membarrier.h>
5174    #include <sys/syscall.h>
5175    #include <unistd.h>
5176    #include <stdlib.h>
5177    int main(void) {
5178        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5179        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5180	exit(0);
5181    }
5182EOF
5183        if compile_prog "" "" ; then
5184            have_membarrier=yes
5185        fi
5186    fi
5187    if test "$have_membarrier" = "no"; then
5188      feature_not_found "membarrier" "membarrier system call not available"
5189    fi
5190else
5191    # Do not enable it by default even for Mingw32, because it doesn't
5192    # work on Wine.
5193    membarrier=no
5194fi
5195
5196##########################################
5197# check if rtnetlink.h exists and is useful
5198have_rtnetlink=no
5199cat > $TMPC << EOF
5200#include <linux/rtnetlink.h>
5201int main(void) {
5202  return IFLA_PROTO_DOWN;
5203}
5204EOF
5205if compile_prog "" "" ; then
5206    have_rtnetlink=yes
5207fi
5208
5209##########################################
5210# check for usable AF_VSOCK environment
5211have_af_vsock=no
5212cat > $TMPC << EOF
5213#include <errno.h>
5214#include <sys/types.h>
5215#include <sys/socket.h>
5216#if !defined(AF_VSOCK)
5217# error missing AF_VSOCK flag
5218#endif
5219#include <linux/vm_sockets.h>
5220int main(void) {
5221    int sock, ret;
5222    struct sockaddr_vm svm;
5223    socklen_t len = sizeof(svm);
5224    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5225    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5226    if ((ret == -1) && (errno == ENOTCONN)) {
5227        return 0;
5228    }
5229    return -1;
5230}
5231EOF
5232if compile_prog "" "" ; then
5233    have_af_vsock=yes
5234fi
5235
5236##########################################
5237# check for usable AF_ALG environment
5238hava_afalg=no
5239cat > $TMPC << EOF
5240#include <errno.h>
5241#include <sys/types.h>
5242#include <sys/socket.h>
5243#include <linux/if_alg.h>
5244int main(void) {
5245    int sock;
5246    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5247    return sock;
5248}
5249EOF
5250if compile_prog "" "" ; then
5251    have_afalg=yes
5252fi
5253if test "$crypto_afalg" = "yes"
5254then
5255    if test "$have_afalg" != "yes"
5256    then
5257	error_exit "AF_ALG requested but could not be detected"
5258    fi
5259fi
5260
5261
5262#################################################
5263# Check to see if we have the Hypervisor framework
5264if [ "$darwin" = "yes" ] ; then
5265  cat > $TMPC << EOF
5266#include <Hypervisor/hv.h>
5267int main() { return 0;}
5268EOF
5269  if ! compile_object ""; then
5270    hvf='no'
5271  else
5272    hvf='yes'
5273    LDFLAGS="-framework Hypervisor $LDFLAGS"
5274  fi
5275fi
5276
5277#################################################
5278# Sparc implicitly links with --relax, which is
5279# incompatible with -r, so --no-relax should be
5280# given. It does no harm to give it on other
5281# platforms too.
5282
5283# Note: the prototype is needed since QEMU_CFLAGS
5284#       contains -Wmissing-prototypes
5285cat > $TMPC << EOF
5286extern int foo(void);
5287int foo(void) { return 0; }
5288EOF
5289if ! compile_object ""; then
5290  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5291fi
5292for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5293  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5294    LD_REL_FLAGS=$i
5295    break
5296  fi
5297done
5298if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5299  feature_not_found "modules" "Cannot find how to build relocatable objects"
5300fi
5301
5302##########################################
5303# check for sysmacros.h
5304
5305have_sysmacros=no
5306cat > $TMPC << EOF
5307#include <sys/sysmacros.h>
5308int main(void) {
5309    return makedev(0, 0);
5310}
5311EOF
5312if compile_prog "" "" ; then
5313    have_sysmacros=yes
5314fi
5315
5316##########################################
5317# Veritas HyperScale block driver VxHS
5318# Check if libvxhs is installed
5319
5320if test "$vxhs" != "no" ; then
5321  cat > $TMPC <<EOF
5322#include <stdint.h>
5323#include <qnio/qnio_api.h>
5324
5325void *vxhs_callback;
5326
5327int main(void) {
5328    iio_init(QNIO_VERSION, vxhs_callback);
5329    return 0;
5330}
5331EOF
5332  vxhs_libs="-lvxhs -lssl"
5333  if compile_prog "" "$vxhs_libs" ; then
5334    vxhs=yes
5335  else
5336    if test "$vxhs" = "yes" ; then
5337      feature_not_found "vxhs block device" "Install libvxhs See github"
5338    fi
5339    vxhs=no
5340  fi
5341fi
5342
5343##########################################
5344# check for _Static_assert()
5345
5346have_static_assert=no
5347cat > $TMPC << EOF
5348_Static_assert(1, "success");
5349int main(void) {
5350    return 0;
5351}
5352EOF
5353if compile_prog "" "" ; then
5354    have_static_assert=yes
5355fi
5356
5357##########################################
5358# check for utmpx.h, it is missing e.g. on OpenBSD
5359
5360have_utmpx=no
5361cat > $TMPC << EOF
5362#include <utmpx.h>
5363struct utmpx user_info;
5364int main(void) {
5365    return 0;
5366}
5367EOF
5368if compile_prog "" "" ; then
5369    have_utmpx=yes
5370fi
5371
5372##########################################
5373# checks for sanitizers
5374
5375have_asan=no
5376have_ubsan=no
5377have_asan_iface_h=no
5378have_asan_iface_fiber=no
5379
5380if test "$sanitizers" = "yes" ; then
5381  write_c_skeleton
5382  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5383      have_asan=yes
5384  fi
5385
5386  # we could use a simple skeleton for flags checks, but this also
5387  # detect the static linking issue of ubsan, see also:
5388  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5389  cat > $TMPC << EOF
5390#include <stdlib.h>
5391int main(void) {
5392    void *tmp = malloc(10);
5393    return *(int *)(tmp + 2);
5394}
5395EOF
5396  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5397      have_ubsan=yes
5398  fi
5399
5400  if check_include "sanitizer/asan_interface.h" ; then
5401      have_asan_iface_h=yes
5402  fi
5403
5404  cat > $TMPC << EOF
5405#include <sanitizer/asan_interface.h>
5406int main(void) {
5407  __sanitizer_start_switch_fiber(0, 0, 0);
5408  return 0;
5409}
5410EOF
5411  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5412      have_asan_iface_fiber=yes
5413  fi
5414fi
5415
5416##########################################
5417# End of CC checks
5418# After here, no more $cc or $ld runs
5419
5420write_c_skeleton
5421
5422if test "$gcov" = "yes" ; then
5423  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5424  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5425elif test "$fortify_source" = "yes" ; then
5426  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5427elif test "$debug" = "no"; then
5428  CFLAGS="-O2 $CFLAGS"
5429fi
5430
5431if test "$have_asan" = "yes"; then
5432  CFLAGS="-fsanitize=address $CFLAGS"
5433  if test "$have_asan_iface_h" = "no" ; then
5434      echo "ASAN build enabled, but ASAN header missing." \
5435           "Without code annotation, the report may be inferior."
5436  elif test "$have_asan_iface_fiber" = "no" ; then
5437      echo "ASAN build enabled, but ASAN header is too old." \
5438           "Without code annotation, the report may be inferior."
5439  fi
5440fi
5441if test "$have_ubsan" = "yes"; then
5442  CFLAGS="-fsanitize=undefined $CFLAGS"
5443fi
5444
5445##########################################
5446# Do we have libnfs
5447if test "$libnfs" != "no" ; then
5448  if $pkg_config --atleast-version=1.9.3 libnfs; then
5449    libnfs="yes"
5450    libnfs_libs=$($pkg_config --libs libnfs)
5451  else
5452    if test "$libnfs" = "yes" ; then
5453      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5454    fi
5455    libnfs="no"
5456  fi
5457fi
5458
5459# Now we've finished running tests it's OK to add -Werror to the compiler flags
5460if test "$werror" = "yes"; then
5461    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5462fi
5463
5464if test "$solaris" = "no" ; then
5465    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5466        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5467    fi
5468fi
5469
5470# test if pod2man has --utf8 option
5471if pod2man --help | grep -q utf8; then
5472    POD2MAN="pod2man --utf8"
5473else
5474    POD2MAN="pod2man"
5475fi
5476
5477# Use ASLR, no-SEH and DEP if available
5478if test "$mingw32" = "yes" ; then
5479    for flag in --dynamicbase --no-seh --nxcompat; do
5480        if ld_has $flag ; then
5481            LDFLAGS="-Wl,$flag $LDFLAGS"
5482        fi
5483    done
5484fi
5485
5486qemu_confdir=$sysconfdir$confsuffix
5487qemu_moddir=$libdir$confsuffix
5488qemu_datadir=$datadir$confsuffix
5489qemu_localedir="$datadir/locale"
5490
5491# We can only support ivshmem if we have eventfd
5492if [ "$eventfd" = "yes" ]; then
5493  ivshmem=yes
5494fi
5495
5496tools=""
5497if test "$want_tools" = "yes" ; then
5498  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5499  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5500    tools="qemu-nbd\$(EXESUF) $tools"
5501  fi
5502  if [ "$ivshmem" = "yes" ]; then
5503    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5504  fi
5505fi
5506if test "$softmmu" = yes ; then
5507  if test "$linux" = yes; then
5508    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5509      virtfs=yes
5510      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5511    else
5512      if test "$virtfs" = yes; then
5513        error_exit "VirtFS requires libcap devel and libattr devel"
5514      fi
5515      virtfs=no
5516    fi
5517    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5518      mpath=yes
5519    else
5520      if test "$mpath" = yes; then
5521        error_exit "Multipath requires libmpathpersist devel"
5522      fi
5523      mpath=no
5524    fi
5525    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5526  else
5527    if test "$virtfs" = yes; then
5528      error_exit "VirtFS is supported only on Linux"
5529    fi
5530    virtfs=no
5531    if test "$mpath" = yes; then
5532      error_exit "Multipath is supported only on Linux"
5533    fi
5534    mpath=no
5535  fi
5536  if test "$xkbcommon" = "yes"; then
5537    tools="qemu-keymap\$(EXESUF) $tools"
5538  fi
5539fi
5540
5541# Probe for guest agent support/options
5542
5543if [ "$guest_agent" != "no" ]; then
5544  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5545      tools="qemu-ga $tools"
5546      guest_agent=yes
5547  elif [ "$guest_agent" != yes ]; then
5548      guest_agent=no
5549  else
5550      error_exit "Guest agent is not supported on this platform"
5551  fi
5552fi
5553
5554# Guest agent Window MSI  package
5555
5556if test "$guest_agent" != yes; then
5557  if test "$guest_agent_msi" = yes; then
5558    error_exit "MSI guest agent package requires guest agent enabled"
5559  fi
5560  guest_agent_msi=no
5561elif test "$mingw32" != "yes"; then
5562  if test "$guest_agent_msi" = "yes"; then
5563    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5564  fi
5565  guest_agent_msi=no
5566elif ! has wixl; then
5567  if test "$guest_agent_msi" = "yes"; then
5568    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5569  fi
5570  guest_agent_msi=no
5571else
5572  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5573  # disabled explicitly
5574  if test "$guest_agent_msi" != "no"; then
5575    guest_agent_msi=yes
5576  fi
5577fi
5578
5579if test "$guest_agent_msi" = "yes"; then
5580  if test "$guest_agent_with_vss" = "yes"; then
5581    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5582  fi
5583
5584  if test "$QEMU_GA_MANUFACTURER" = ""; then
5585    QEMU_GA_MANUFACTURER=QEMU
5586  fi
5587
5588  if test "$QEMU_GA_DISTRO" = ""; then
5589    QEMU_GA_DISTRO=Linux
5590  fi
5591
5592  if test "$QEMU_GA_VERSION" = ""; then
5593      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5594  fi
5595
5596  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5597
5598  case "$cpu" in
5599  x86_64)
5600    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5601    ;;
5602  i386)
5603    QEMU_GA_MSI_ARCH="-D Arch=32"
5604    ;;
5605  *)
5606    error_exit "CPU $cpu not supported for building installation package"
5607    ;;
5608  esac
5609fi
5610
5611# Mac OS X ships with a broken assembler
5612roms=
5613if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5614        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5615        "$softmmu" = yes ; then
5616    # Different host OS linkers have different ideas about the name of the ELF
5617    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5618    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5619    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5620        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5621            ld_i386_emulation="$emu"
5622            roms="optionrom"
5623            break
5624        fi
5625    done
5626fi
5627if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5628  roms="$roms spapr-rtas"
5629fi
5630
5631if test "$cpu" = "s390x" ; then
5632  roms="$roms s390-ccw"
5633fi
5634
5635# Probe for the need for relocating the user-only binary.
5636if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5637  textseg_addr=
5638  case "$cpu" in
5639    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5640      # ??? Rationale for choosing this address
5641      textseg_addr=0x60000000
5642      ;;
5643    mips)
5644      # A 256M aligned address, high in the address space, with enough
5645      # room for the code_gen_buffer above it before the stack.
5646      textseg_addr=0x60000000
5647      ;;
5648  esac
5649  if [ -n "$textseg_addr" ]; then
5650    cat > $TMPC <<EOF
5651    int main(void) { return 0; }
5652EOF
5653    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5654    if ! compile_prog "" "$textseg_ldflags"; then
5655      # In case ld does not support -Ttext-segment, edit the default linker
5656      # script via sed to set the .text start addr.  This is needed on FreeBSD
5657      # at least.
5658      if ! $ld --verbose >/dev/null 2>&1; then
5659        error_exit \
5660            "We need to link the QEMU user mode binaries at a" \
5661            "specific text address. Unfortunately your linker" \
5662            "doesn't support either the -Ttext-segment option or" \
5663            "printing the default linker script with --verbose." \
5664            "If you don't want the user mode binaries, pass the" \
5665            "--disable-user option to configure."
5666      fi
5667
5668      $ld --verbose | sed \
5669        -e '1,/==================================================/d' \
5670        -e '/==================================================/,$d' \
5671        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5672        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5673      textseg_ldflags="-Wl,-T../config-host.ld"
5674    fi
5675  fi
5676fi
5677
5678# Check that the C++ compiler exists and works with the C compiler.
5679# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5680if has $cxx; then
5681    cat > $TMPC <<EOF
5682int c_function(void);
5683int main(void) { return c_function(); }
5684EOF
5685
5686    compile_object
5687
5688    cat > $TMPCXX <<EOF
5689extern "C" {
5690   int c_function(void);
5691}
5692int c_function(void) { return 42; }
5693EOF
5694
5695    update_cxxflags
5696
5697    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5698        # C++ compiler $cxx works ok with C compiler $cc
5699        :
5700    else
5701        echo "C++ compiler $cxx does not work with C compiler $cc"
5702        echo "Disabling C++ specific optional code"
5703        cxx=
5704    fi
5705else
5706    echo "No C++ compiler available; disabling C++ specific optional code"
5707    cxx=
5708fi
5709
5710echo_version() {
5711    if test "$1" = "yes" ; then
5712        echo "($2)"
5713    fi
5714}
5715
5716# prepend pixman and ftd flags after all config tests are done
5717QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5718libs_softmmu="$pixman_libs $libs_softmmu"
5719
5720echo "Install prefix    $prefix"
5721echo "BIOS directory    $(eval echo $qemu_datadir)"
5722echo "firmware path     $(eval echo $firmwarepath)"
5723echo "binary directory  $(eval echo $bindir)"
5724echo "library directory $(eval echo $libdir)"
5725echo "module directory  $(eval echo $qemu_moddir)"
5726echo "libexec directory $(eval echo $libexecdir)"
5727echo "include directory $(eval echo $includedir)"
5728echo "config directory  $(eval echo $sysconfdir)"
5729if test "$mingw32" = "no" ; then
5730echo "local state directory   $(eval echo $local_statedir)"
5731echo "Manual directory  $(eval echo $mandir)"
5732echo "ELF interp prefix $interp_prefix"
5733else
5734echo "local state directory   queried at runtime"
5735echo "Windows SDK       $win_sdk"
5736fi
5737echo "Source path       $source_path"
5738echo "GIT binary        $git"
5739echo "GIT submodules    $git_submodules"
5740echo "C compiler        $cc"
5741echo "Host C compiler   $host_cc"
5742echo "C++ compiler      $cxx"
5743echo "Objective-C compiler $objcc"
5744echo "ARFLAGS           $ARFLAGS"
5745echo "CFLAGS            $CFLAGS"
5746echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5747echo "LDFLAGS           $LDFLAGS"
5748echo "make              $make"
5749echo "install           $install"
5750echo "python            $python"
5751if test "$slirp" = "yes" ; then
5752    echo "smbd              $smbd"
5753fi
5754echo "module support    $modules"
5755echo "host CPU          $cpu"
5756echo "host big endian   $bigendian"
5757echo "target list       $target_list"
5758echo "gprof enabled     $gprof"
5759echo "sparse enabled    $sparse"
5760echo "strip binaries    $strip_opt"
5761echo "profiler          $profiler"
5762echo "static build      $static"
5763if test "$darwin" = "yes" ; then
5764    echo "Cocoa support     $cocoa"
5765fi
5766echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5767echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5768echo "GTK GL support    $gtk_gl"
5769echo "VTE support       $vte $(echo_version $vte $vteversion)"
5770echo "TLS priority      $tls_priority"
5771echo "GNUTLS support    $gnutls"
5772echo "GNUTLS rnd        $gnutls_rnd"
5773echo "libgcrypt         $gcrypt"
5774echo "libgcrypt kdf     $gcrypt_kdf"
5775echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5776echo "nettle kdf        $nettle_kdf"
5777echo "libtasn1          $tasn1"
5778echo "curses support    $curses"
5779echo "virgl support     $virglrenderer"
5780echo "curl support      $curl"
5781echo "mingw32 support   $mingw32"
5782echo "Audio drivers     $audio_drv_list"
5783echo "Block whitelist (rw) $block_drv_rw_whitelist"
5784echo "Block whitelist (ro) $block_drv_ro_whitelist"
5785echo "VirtFS support    $virtfs"
5786echo "Multipath support $mpath"
5787echo "VNC support       $vnc"
5788if test "$vnc" = "yes" ; then
5789    echo "VNC SASL support  $vnc_sasl"
5790    echo "VNC JPEG support  $vnc_jpeg"
5791    echo "VNC PNG support   $vnc_png"
5792fi
5793if test -n "$sparc_cpu"; then
5794    echo "Target Sparc Arch $sparc_cpu"
5795fi
5796echo "xen support       $xen"
5797if test "$xen" = "yes" ; then
5798  echo "xen ctrl version  $xen_ctrl_version"
5799  echo "pv dom build      $xen_pv_domain_build"
5800fi
5801echo "brlapi support    $brlapi"
5802echo "bluez  support    $bluez"
5803echo "Documentation     $docs"
5804echo "PIE               $pie"
5805echo "vde support       $vde"
5806echo "netmap support    $netmap"
5807echo "Linux AIO support $linux_aio"
5808echo "ATTR/XATTR support $attr"
5809echo "Install blobs     $blobs"
5810echo "KVM support       $kvm"
5811echo "HAX support       $hax"
5812echo "HVF support       $hvf"
5813echo "WHPX support      $whpx"
5814echo "TCG support       $tcg"
5815if test "$tcg" = "yes" ; then
5816    echo "TCG debug enabled $debug_tcg"
5817    echo "TCG interpreter   $tcg_interpreter"
5818fi
5819echo "malloc trim support $malloc_trim"
5820echo "RDMA support      $rdma"
5821echo "fdt support       $fdt"
5822echo "membarrier        $membarrier"
5823echo "preadv support    $preadv"
5824echo "fdatasync         $fdatasync"
5825echo "madvise           $madvise"
5826echo "posix_madvise     $posix_madvise"
5827echo "posix_memalign    $posix_memalign"
5828echo "libcap-ng support $cap_ng"
5829echo "vhost-net support $vhost_net"
5830echo "vhost-crypto support $vhost_crypto"
5831echo "vhost-scsi support $vhost_scsi"
5832echo "vhost-vsock support $vhost_vsock"
5833echo "vhost-user support $vhost_user"
5834echo "Trace backends    $trace_backends"
5835if have_backend "simple"; then
5836echo "Trace output file $trace_file-<pid>"
5837fi
5838echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5839echo "rbd support       $rbd"
5840echo "xfsctl support    $xfs"
5841echo "smartcard support $smartcard"
5842echo "libusb            $libusb"
5843echo "usb net redir     $usb_redir"
5844echo "OpenGL support    $opengl"
5845echo "OpenGL dmabufs    $opengl_dmabuf"
5846echo "libiscsi support  $libiscsi"
5847echo "libnfs support    $libnfs"
5848echo "build guest agent $guest_agent"
5849echo "QGA VSS support   $guest_agent_with_vss"
5850echo "QGA w32 disk info $guest_agent_ntddscsi"
5851echo "QGA MSI support   $guest_agent_msi"
5852echo "seccomp support   $seccomp"
5853echo "coroutine backend $coroutine"
5854echo "coroutine pool    $coroutine_pool"
5855echo "debug stack usage $debug_stack_usage"
5856echo "crypto afalg      $crypto_afalg"
5857echo "GlusterFS support $glusterfs"
5858echo "gcov              $gcov_tool"
5859echo "gcov enabled      $gcov"
5860echo "TPM support       $tpm"
5861echo "libssh2 support   $libssh2"
5862echo "TPM passthrough   $tpm_passthrough"
5863echo "TPM emulator      $tpm_emulator"
5864echo "QOM debugging     $qom_cast_debug"
5865echo "Live block migration $live_block_migration"
5866echo "lzo support       $lzo"
5867echo "snappy support    $snappy"
5868echo "bzip2 support     $bzip2"
5869echo "NUMA host support $numa"
5870echo "libxml2           $libxml2"
5871echo "tcmalloc support  $tcmalloc"
5872echo "jemalloc support  $jemalloc"
5873echo "avx2 optimization $avx2_opt"
5874echo "replication support $replication"
5875echo "VxHS block device $vxhs"
5876echo "capstone          $capstone"
5877
5878if test "$sdl_too_old" = "yes"; then
5879echo "-> Your SDL version is too old - please upgrade to have SDL support"
5880fi
5881
5882if test "$gtkabi" = "2.0"; then
5883    echo
5884    echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5885    echo "WARNING: future releases. Please switch to using GTK 3.0"
5886fi
5887
5888if test "$sdlabi" = "1.2"; then
5889    echo
5890    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5891    echo "WARNING: future releases. Please switch to using SDL 2.0"
5892fi
5893
5894if test "$supported_cpu" = "no"; then
5895    echo
5896    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5897    echo
5898    echo "CPU host architecture $cpu support is not currently maintained."
5899    echo "The QEMU project intends to remove support for this host CPU in"
5900    echo "a future release if nobody volunteers to maintain it and to"
5901    echo "provide a build host for our continuous integration setup."
5902    echo "configure has succeeded and you can continue to build, but"
5903    echo "if you care about QEMU on this platform you should contact"
5904    echo "us upstream at qemu-devel@nongnu.org."
5905fi
5906
5907if test "$supported_os" = "no"; then
5908    echo
5909    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5910    echo
5911    echo "Host OS $targetos support is not currently maintained."
5912    echo "The QEMU project intends to remove support for this host OS in"
5913    echo "a future release if nobody volunteers to maintain it and to"
5914    echo "provide a build host for our continuous integration setup."
5915    echo "configure has succeeded and you can continue to build, but"
5916    echo "if you care about QEMU on this platform you should contact"
5917    echo "us upstream at qemu-devel@nongnu.org."
5918fi
5919
5920config_host_mak="config-host.mak"
5921
5922echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5923
5924echo "# Automatically generated by configure - do not modify" > $config_host_mak
5925echo >> $config_host_mak
5926
5927echo all: >> $config_host_mak
5928echo "prefix=$prefix" >> $config_host_mak
5929echo "bindir=$bindir" >> $config_host_mak
5930echo "libdir=$libdir" >> $config_host_mak
5931echo "libexecdir=$libexecdir" >> $config_host_mak
5932echo "includedir=$includedir" >> $config_host_mak
5933echo "mandir=$mandir" >> $config_host_mak
5934echo "sysconfdir=$sysconfdir" >> $config_host_mak
5935echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5936echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5937echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5938echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5939echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5940if test "$mingw32" = "no" ; then
5941  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5942fi
5943echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5944echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5945echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5946echo "GIT=$git" >> $config_host_mak
5947echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5948echo "GIT_UPDATE=$git_update" >> $config_host_mak
5949
5950echo "ARCH=$ARCH" >> $config_host_mak
5951
5952if test "$debug_tcg" = "yes" ; then
5953  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5954fi
5955if test "$strip_opt" = "yes" ; then
5956  echo "STRIP=${strip}" >> $config_host_mak
5957fi
5958if test "$bigendian" = "yes" ; then
5959  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5960fi
5961if test "$mingw32" = "yes" ; then
5962  echo "CONFIG_WIN32=y" >> $config_host_mak
5963  rc_version=$(cat $source_path/VERSION)
5964  version_major=${rc_version%%.*}
5965  rc_version=${rc_version#*.}
5966  version_minor=${rc_version%%.*}
5967  rc_version=${rc_version#*.}
5968  version_subminor=${rc_version%%.*}
5969  version_micro=0
5970  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5971  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5972  if test "$guest_agent_with_vss" = "yes" ; then
5973    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5974    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5975    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5976  fi
5977  if test "$guest_agent_ntddscsi" = "yes" ; then
5978    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5979  fi
5980  if test "$guest_agent_msi" = "yes"; then
5981    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5982    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5983    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5984    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5985    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5986    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5987    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5988  fi
5989else
5990  echo "CONFIG_POSIX=y" >> $config_host_mak
5991fi
5992
5993if test "$linux" = "yes" ; then
5994  echo "CONFIG_LINUX=y" >> $config_host_mak
5995fi
5996
5997if test "$darwin" = "yes" ; then
5998  echo "CONFIG_DARWIN=y" >> $config_host_mak
5999fi
6000
6001if test "$solaris" = "yes" ; then
6002  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6003fi
6004if test "$haiku" = "yes" ; then
6005  echo "CONFIG_HAIKU=y" >> $config_host_mak
6006fi
6007if test "$static" = "yes" ; then
6008  echo "CONFIG_STATIC=y" >> $config_host_mak
6009fi
6010if test "$profiler" = "yes" ; then
6011  echo "CONFIG_PROFILER=y" >> $config_host_mak
6012fi
6013if test "$slirp" = "yes" ; then
6014  echo "CONFIG_SLIRP=y" >> $config_host_mak
6015  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6016fi
6017if test "$vde" = "yes" ; then
6018  echo "CONFIG_VDE=y" >> $config_host_mak
6019  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6020fi
6021if test "$netmap" = "yes" ; then
6022  echo "CONFIG_NETMAP=y" >> $config_host_mak
6023fi
6024if test "$l2tpv3" = "yes" ; then
6025  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6026fi
6027if test "$cap_ng" = "yes" ; then
6028  echo "CONFIG_LIBCAP=y" >> $config_host_mak
6029fi
6030echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6031for drv in $audio_drv_list; do
6032    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6033    case "$drv" in
6034	alsa | oss | pa | sdl)
6035	    echo "$def=m" >> $config_host_mak ;;
6036	*)
6037	    echo "$def=y" >> $config_host_mak ;;
6038    esac
6039done
6040echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6041echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6042echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6043echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6044echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6045if test "$audio_pt_int" = "yes" ; then
6046  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6047fi
6048if test "$audio_win_int" = "yes" ; then
6049  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6050fi
6051echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6052echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6053if test "$vnc" = "yes" ; then
6054  echo "CONFIG_VNC=y" >> $config_host_mak
6055fi
6056if test "$vnc_sasl" = "yes" ; then
6057  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6058fi
6059if test "$vnc_jpeg" = "yes" ; then
6060  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6061fi
6062if test "$vnc_png" = "yes" ; then
6063  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6064fi
6065if test "$xkbcommon" = "yes" ; then
6066  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6067  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6068fi
6069if test "$fnmatch" = "yes" ; then
6070  echo "CONFIG_FNMATCH=y" >> $config_host_mak
6071fi
6072if test "$xfs" = "yes" ; then
6073  echo "CONFIG_XFS=y" >> $config_host_mak
6074fi
6075qemu_version=$(head $source_path/VERSION)
6076echo "VERSION=$qemu_version" >>$config_host_mak
6077echo "PKGVERSION=$pkgversion" >>$config_host_mak
6078echo "SRC_PATH=$source_path" >> $config_host_mak
6079echo "TARGET_DIRS=$target_list" >> $config_host_mak
6080if [ "$docs" = "yes" ] ; then
6081  echo "BUILD_DOCS=yes" >> $config_host_mak
6082fi
6083if test "$modules" = "yes"; then
6084  # $shacmd can generate a hash started with digit, which the compiler doesn't
6085  # like as an symbol. So prefix it with an underscore
6086  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6087  echo "CONFIG_MODULES=y" >> $config_host_mak
6088fi
6089if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6090  echo "CONFIG_X11=y" >> $config_host_mak
6091  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6092  echo "X11_LIBS=$x11_libs" >> $config_host_mak
6093fi
6094if test "$sdl" = "yes" ; then
6095  echo "CONFIG_SDL=m" >> $config_host_mak
6096  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6097  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6098  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6099fi
6100if test "$cocoa" = "yes" ; then
6101  echo "CONFIG_COCOA=y" >> $config_host_mak
6102fi
6103if test "$curses" = "yes" ; then
6104  echo "CONFIG_CURSES=m" >> $config_host_mak
6105  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6106  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6107fi
6108if test "$pipe2" = "yes" ; then
6109  echo "CONFIG_PIPE2=y" >> $config_host_mak
6110fi
6111if test "$accept4" = "yes" ; then
6112  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6113fi
6114if test "$splice" = "yes" ; then
6115  echo "CONFIG_SPLICE=y" >> $config_host_mak
6116fi
6117if test "$eventfd" = "yes" ; then
6118  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6119fi
6120if test "$memfd" = "yes" ; then
6121  echo "CONFIG_MEMFD=y" >> $config_host_mak
6122fi
6123if test "$fallocate" = "yes" ; then
6124  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6125fi
6126if test "$fallocate_punch_hole" = "yes" ; then
6127  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6128fi
6129if test "$fallocate_zero_range" = "yes" ; then
6130  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6131fi
6132if test "$posix_fallocate" = "yes" ; then
6133  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6134fi
6135if test "$sync_file_range" = "yes" ; then
6136  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6137fi
6138if test "$fiemap" = "yes" ; then
6139  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6140fi
6141if test "$dup3" = "yes" ; then
6142  echo "CONFIG_DUP3=y" >> $config_host_mak
6143fi
6144if test "$ppoll" = "yes" ; then
6145  echo "CONFIG_PPOLL=y" >> $config_host_mak
6146fi
6147if test "$prctl_pr_set_timerslack" = "yes" ; then
6148  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6149fi
6150if test "$epoll" = "yes" ; then
6151  echo "CONFIG_EPOLL=y" >> $config_host_mak
6152fi
6153if test "$epoll_create1" = "yes" ; then
6154  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6155fi
6156if test "$sendfile" = "yes" ; then
6157  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6158fi
6159if test "$timerfd" = "yes" ; then
6160  echo "CONFIG_TIMERFD=y" >> $config_host_mak
6161fi
6162if test "$setns" = "yes" ; then
6163  echo "CONFIG_SETNS=y" >> $config_host_mak
6164fi
6165if test "$clock_adjtime" = "yes" ; then
6166  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6167fi
6168if test "$syncfs" = "yes" ; then
6169  echo "CONFIG_SYNCFS=y" >> $config_host_mak
6170fi
6171if test "$inotify" = "yes" ; then
6172  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6173fi
6174if test "$inotify1" = "yes" ; then
6175  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6176fi
6177if test "$sem_timedwait" = "yes" ; then
6178  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6179fi
6180if test "$byteswap_h" = "yes" ; then
6181  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6182fi
6183if test "$bswap_h" = "yes" ; then
6184  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6185fi
6186if test "$curl" = "yes" ; then
6187  echo "CONFIG_CURL=m" >> $config_host_mak
6188  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6189  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6190fi
6191if test "$brlapi" = "yes" ; then
6192  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6193  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6194fi
6195if test "$bluez" = "yes" ; then
6196  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6197  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6198fi
6199if test "$glib_subprocess" = "yes" ; then
6200  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6201fi
6202if test "$gtk" = "yes" ; then
6203  echo "CONFIG_GTK=m" >> $config_host_mak
6204  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
6205  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6206  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6207  if test "$gtk_gl" = "yes" ; then
6208    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6209  fi
6210fi
6211echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6212if test "$gnutls" = "yes" ; then
6213  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6214fi
6215if test "$gnutls_rnd" = "yes" ; then
6216  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6217fi
6218if test "$gcrypt" = "yes" ; then
6219  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6220  if test "$gcrypt_hmac" = "yes" ; then
6221    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6222  fi
6223  if test "$gcrypt_kdf" = "yes" ; then
6224    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6225  fi
6226fi
6227if test "$nettle" = "yes" ; then
6228  echo "CONFIG_NETTLE=y" >> $config_host_mak
6229  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6230  if test "$nettle_kdf" = "yes" ; then
6231    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6232  fi
6233fi
6234if test "$tasn1" = "yes" ; then
6235  echo "CONFIG_TASN1=y" >> $config_host_mak
6236fi
6237if test "$have_ifaddrs_h" = "yes" ; then
6238    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6239fi
6240if test "$have_broken_size_max" = "yes" ; then
6241    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6242fi
6243
6244# Work around a system header bug with some kernel/XFS header
6245# versions where they both try to define 'struct fsxattr':
6246# xfs headers will not try to redefine structs from linux headers
6247# if this macro is set.
6248if test "$have_fsxattr" = "yes" ; then
6249    echo "HAVE_FSXATTR=y" >> $config_host_mak
6250fi
6251if test "$vte" = "yes" ; then
6252  echo "CONFIG_VTE=y" >> $config_host_mak
6253  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6254  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6255fi
6256if test "$virglrenderer" = "yes" ; then
6257  echo "CONFIG_VIRGL=y" >> $config_host_mak
6258  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6259  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6260fi
6261if test "$xen" = "yes" ; then
6262  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6263  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6264  if test "$xen_pv_domain_build" = "yes" ; then
6265    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6266  fi
6267fi
6268if test "$linux_aio" = "yes" ; then
6269  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6270fi
6271if test "$attr" = "yes" ; then
6272  echo "CONFIG_ATTR=y" >> $config_host_mak
6273fi
6274if test "$libattr" = "yes" ; then
6275  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6276fi
6277if test "$virtfs" = "yes" ; then
6278  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6279fi
6280if test "$mpath" = "yes" ; then
6281  echo "CONFIG_MPATH=y" >> $config_host_mak
6282fi
6283if test "$vhost_scsi" = "yes" ; then
6284  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6285fi
6286if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6287  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6288fi
6289if test "$vhost_crypto" = "yes" ; then
6290  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6291fi
6292if test "$vhost_vsock" = "yes" ; then
6293  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6294fi
6295if test "$vhost_user" = "yes" ; then
6296  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6297fi
6298if test "$blobs" = "yes" ; then
6299  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6300fi
6301if test "$iovec" = "yes" ; then
6302  echo "CONFIG_IOVEC=y" >> $config_host_mak
6303fi
6304if test "$preadv" = "yes" ; then
6305  echo "CONFIG_PREADV=y" >> $config_host_mak
6306fi
6307if test "$fdt" = "yes" ; then
6308  echo "CONFIG_FDT=y" >> $config_host_mak
6309fi
6310if test "$membarrier" = "yes" ; then
6311  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6312fi
6313if test "$signalfd" = "yes" ; then
6314  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6315fi
6316if test "$tcg" = "yes"; then
6317  echo "CONFIG_TCG=y" >> $config_host_mak
6318  if test "$tcg_interpreter" = "yes" ; then
6319    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6320  fi
6321fi
6322if test "$fdatasync" = "yes" ; then
6323  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6324fi
6325if test "$madvise" = "yes" ; then
6326  echo "CONFIG_MADVISE=y" >> $config_host_mak
6327fi
6328if test "$posix_madvise" = "yes" ; then
6329  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6330fi
6331if test "$posix_memalign" = "yes" ; then
6332  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6333fi
6334
6335if test "$spice" = "yes" ; then
6336  echo "CONFIG_SPICE=y" >> $config_host_mak
6337fi
6338
6339if test "$smartcard" = "yes" ; then
6340  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6341  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6342  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6343fi
6344
6345if test "$libusb" = "yes" ; then
6346  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6347  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6348  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6349fi
6350
6351if test "$usb_redir" = "yes" ; then
6352  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6353  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6354  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6355fi
6356
6357if test "$opengl" = "yes" ; then
6358  echo "CONFIG_OPENGL=y" >> $config_host_mak
6359  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6360  if test "$opengl_dmabuf" = "yes" ; then
6361    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6362  fi
6363fi
6364
6365if test "$malloc_trim" = "yes" ; then
6366  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6367fi
6368
6369if test "$avx2_opt" = "yes" ; then
6370  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6371fi
6372
6373if test "$lzo" = "yes" ; then
6374  echo "CONFIG_LZO=y" >> $config_host_mak
6375fi
6376
6377if test "$snappy" = "yes" ; then
6378  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6379fi
6380
6381if test "$bzip2" = "yes" ; then
6382  echo "CONFIG_BZIP2=y" >> $config_host_mak
6383  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6384fi
6385
6386if test "$libiscsi" = "yes" ; then
6387  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6388  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6389  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6390fi
6391
6392if test "$libnfs" = "yes" ; then
6393  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6394  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6395fi
6396
6397if test "$seccomp" = "yes"; then
6398  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6399  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6400  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6401fi
6402
6403# XXX: suppress that
6404if [ "$bsd" = "yes" ] ; then
6405  echo "CONFIG_BSD=y" >> $config_host_mak
6406fi
6407
6408if test "$localtime_r" = "yes" ; then
6409  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6410fi
6411if test "$qom_cast_debug" = "yes" ; then
6412  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6413fi
6414if test "$rbd" = "yes" ; then
6415  echo "CONFIG_RBD=m" >> $config_host_mak
6416  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6417  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6418fi
6419
6420echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6421if test "$coroutine_pool" = "yes" ; then
6422  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6423else
6424  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6425fi
6426
6427if test "$debug_stack_usage" = "yes" ; then
6428  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6429fi
6430
6431if test "$crypto_afalg" = "yes" ; then
6432  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6433fi
6434
6435if test "$open_by_handle_at" = "yes" ; then
6436  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6437fi
6438
6439if test "$linux_magic_h" = "yes" ; then
6440  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6441fi
6442
6443if test "$pragma_diagnostic_available" = "yes" ; then
6444  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6445fi
6446
6447if test "$valgrind_h" = "yes" ; then
6448  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6449fi
6450
6451if test "$have_asan_iface_fiber" = "yes" ; then
6452    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6453fi
6454
6455if test "$has_environ" = "yes" ; then
6456  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6457fi
6458
6459if test "$cpuid_h" = "yes" ; then
6460  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6461fi
6462
6463if test "$int128" = "yes" ; then
6464  echo "CONFIG_INT128=y" >> $config_host_mak
6465fi
6466
6467if test "$atomic128" = "yes" ; then
6468  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6469fi
6470
6471if test "$atomic64" = "yes" ; then
6472  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6473fi
6474
6475if test "$vector16" = "yes" ; then
6476  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6477fi
6478
6479if test "$getauxval" = "yes" ; then
6480  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6481fi
6482
6483if test "$glusterfs" = "yes" ; then
6484  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6485  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6486  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6487fi
6488
6489if test "$glusterfs_xlator_opt" = "yes" ; then
6490  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6491fi
6492
6493if test "$glusterfs_discard" = "yes" ; then
6494  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6495fi
6496
6497if test "$glusterfs_fallocate" = "yes" ; then
6498  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6499fi
6500
6501if test "$glusterfs_zerofill" = "yes" ; then
6502  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6503fi
6504
6505if test "$libssh2" = "yes" ; then
6506  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6507  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6508  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6509fi
6510
6511if test "$live_block_migration" = "yes" ; then
6512  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6513fi
6514
6515if test "$tpm" = "yes"; then
6516  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6517  # TPM passthrough support?
6518  if test "$tpm_passthrough" = "yes"; then
6519    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6520  fi
6521  # TPM emulator support?
6522  if test "$tpm_emulator" = "yes"; then
6523    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6524  fi
6525fi
6526
6527echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6528if have_backend "nop"; then
6529  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6530fi
6531if have_backend "simple"; then
6532  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6533  # Set the appropriate trace file.
6534  trace_file="\"$trace_file-\" FMT_pid"
6535fi
6536if have_backend "log"; then
6537  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6538fi
6539if have_backend "ust"; then
6540  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6541fi
6542if have_backend "dtrace"; then
6543  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6544  if test "$trace_backend_stap" = "yes" ; then
6545    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6546  fi
6547fi
6548if have_backend "ftrace"; then
6549  if test "$linux" = "yes" ; then
6550    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6551  else
6552    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6553  fi
6554fi
6555if have_backend "syslog"; then
6556  if test "$posix_syslog" = "yes" ; then
6557    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6558  else
6559    feature_not_found "syslog(trace backend)" "syslog not available"
6560  fi
6561fi
6562echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6563
6564if test "$rdma" = "yes" ; then
6565  echo "CONFIG_RDMA=y" >> $config_host_mak
6566  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6567fi
6568
6569if test "$have_rtnetlink" = "yes" ; then
6570  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6571fi
6572
6573if test "$libxml2" = "yes" ; then
6574  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6575  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6576  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6577fi
6578
6579if test "$replication" = "yes" ; then
6580  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6581fi
6582
6583if test "$have_af_vsock" = "yes" ; then
6584  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6585fi
6586
6587if test "$have_sysmacros" = "yes" ; then
6588  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6589fi
6590
6591if test "$have_static_assert" = "yes" ; then
6592  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6593fi
6594
6595if test "$have_utmpx" = "yes" ; then
6596  echo "HAVE_UTMPX=y" >> $config_host_mak
6597fi
6598
6599if test "$ivshmem" = "yes" ; then
6600  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6601fi
6602if test "$capstone" != "no" ; then
6603  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6604fi
6605
6606# Hold two types of flag:
6607#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6608#                                     a thread we have a handle to
6609#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6610#                                     platform
6611if test "$pthread_setname_np" = "yes" ; then
6612  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6613  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6614fi
6615
6616if test "$vxhs" = "yes" ; then
6617  echo "CONFIG_VXHS=y" >> $config_host_mak
6618  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6619fi
6620
6621if test "$tcg_interpreter" = "yes"; then
6622  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6623elif test "$ARCH" = "sparc64" ; then
6624  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6625elif test "$ARCH" = "s390x" ; then
6626  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6627elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6628  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6629elif test "$ARCH" = "ppc64" ; then
6630  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6631else
6632  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6633fi
6634QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6635
6636echo "TOOLS=$tools" >> $config_host_mak
6637echo "ROMS=$roms" >> $config_host_mak
6638echo "MAKE=$make" >> $config_host_mak
6639echo "INSTALL=$install" >> $config_host_mak
6640echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6641echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6642echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6643echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6644echo "PYTHON=$python" >> $config_host_mak
6645echo "CC=$cc" >> $config_host_mak
6646if $iasl -h > /dev/null 2>&1; then
6647  echo "IASL=$iasl" >> $config_host_mak
6648fi
6649echo "CC_I386=$cc_i386" >> $config_host_mak
6650echo "HOST_CC=$host_cc" >> $config_host_mak
6651echo "CXX=$cxx" >> $config_host_mak
6652echo "OBJCC=$objcc" >> $config_host_mak
6653echo "AR=$ar" >> $config_host_mak
6654echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6655echo "AS=$as" >> $config_host_mak
6656echo "CCAS=$ccas" >> $config_host_mak
6657echo "CPP=$cpp" >> $config_host_mak
6658echo "OBJCOPY=$objcopy" >> $config_host_mak
6659echo "LD=$ld" >> $config_host_mak
6660echo "RANLIB=$ranlib" >> $config_host_mak
6661echo "NM=$nm" >> $config_host_mak
6662echo "WINDRES=$windres" >> $config_host_mak
6663echo "CFLAGS=$CFLAGS" >> $config_host_mak
6664echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6665echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6666echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6667echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6668if test "$sparse" = "yes" ; then
6669  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6670  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6671  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6672  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6673  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6674fi
6675if test "$cross_prefix" != ""; then
6676  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6677else
6678  echo "AUTOCONF_HOST := "                             >> $config_host_mak
6679fi
6680echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6681echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6682echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6683echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6684echo "LIBS+=$LIBS" >> $config_host_mak
6685echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6686echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6687echo "EXESUF=$EXESUF" >> $config_host_mak
6688echo "DSOSUF=$DSOSUF" >> $config_host_mak
6689echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6690echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6691echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6692echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6693echo "POD2MAN=$POD2MAN" >> $config_host_mak
6694echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6695if test "$gcov" = "yes" ; then
6696  echo "CONFIG_GCOV=y" >> $config_host_mak
6697  echo "GCOV=$gcov_tool" >> $config_host_mak
6698fi
6699
6700# use included Linux headers
6701if test "$linux" = "yes" ; then
6702  mkdir -p linux-headers
6703  case "$cpu" in
6704  i386|x86_64|x32)
6705    linux_arch=x86
6706    ;;
6707  ppcemb|ppc|ppc64)
6708    linux_arch=powerpc
6709    ;;
6710  s390x)
6711    linux_arch=s390
6712    ;;
6713  aarch64)
6714    linux_arch=arm64
6715    ;;
6716  mips64)
6717    linux_arch=mips
6718    ;;
6719  *)
6720    # For most CPUs the kernel architecture name and QEMU CPU name match.
6721    linux_arch="$cpu"
6722    ;;
6723  esac
6724    # For non-KVM architectures we will not have asm headers
6725    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6726      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6727    fi
6728fi
6729
6730for target in $target_list; do
6731target_dir="$target"
6732config_target_mak=$target_dir/config-target.mak
6733target_name=$(echo $target | cut -d '-' -f 1)
6734target_bigendian="no"
6735
6736case "$target_name" in
6737  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6738  target_bigendian=yes
6739  ;;
6740esac
6741target_softmmu="no"
6742target_user_only="no"
6743target_linux_user="no"
6744target_bsd_user="no"
6745case "$target" in
6746  ${target_name}-softmmu)
6747    target_softmmu="yes"
6748    ;;
6749  ${target_name}-linux-user)
6750    target_user_only="yes"
6751    target_linux_user="yes"
6752    ;;
6753  ${target_name}-bsd-user)
6754    target_user_only="yes"
6755    target_bsd_user="yes"
6756    ;;
6757  *)
6758    error_exit "Target '$target' not recognised"
6759    exit 1
6760    ;;
6761esac
6762
6763mkdir -p $target_dir
6764echo "# Automatically generated by configure - do not modify" > $config_target_mak
6765
6766bflt="no"
6767mttcg="no"
6768interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6769gdb_xml_files=""
6770
6771TARGET_ARCH="$target_name"
6772TARGET_BASE_ARCH=""
6773TARGET_ABI_DIR=""
6774
6775case "$target_name" in
6776  i386)
6777    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6778  ;;
6779  x86_64)
6780    TARGET_BASE_ARCH=i386
6781    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6782  ;;
6783  alpha)
6784    mttcg="yes"
6785  ;;
6786  arm|armeb)
6787    TARGET_ARCH=arm
6788    bflt="yes"
6789    mttcg="yes"
6790    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6791  ;;
6792  aarch64|aarch64_be)
6793    TARGET_ARCH=aarch64
6794    TARGET_BASE_ARCH=arm
6795    bflt="yes"
6796    mttcg="yes"
6797    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6798  ;;
6799  cris)
6800  ;;
6801  hppa)
6802    mttcg="yes"
6803  ;;
6804  lm32)
6805  ;;
6806  m68k)
6807    bflt="yes"
6808    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6809  ;;
6810  microblaze|microblazeel)
6811    TARGET_ARCH=microblaze
6812    bflt="yes"
6813  ;;
6814  mips|mipsel)
6815    TARGET_ARCH=mips
6816    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6817  ;;
6818  mipsn32|mipsn32el)
6819    TARGET_ARCH=mips64
6820    TARGET_BASE_ARCH=mips
6821    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6822    echo "TARGET_ABI32=y" >> $config_target_mak
6823  ;;
6824  mips64|mips64el)
6825    TARGET_ARCH=mips64
6826    TARGET_BASE_ARCH=mips
6827    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6828  ;;
6829  moxie)
6830  ;;
6831  nios2)
6832  ;;
6833  or1k)
6834    TARGET_ARCH=openrisc
6835    TARGET_BASE_ARCH=openrisc
6836  ;;
6837  ppc)
6838    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6839  ;;
6840  ppcemb)
6841    TARGET_BASE_ARCH=ppc
6842    TARGET_ABI_DIR=ppc
6843    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6844  ;;
6845  ppc64)
6846    TARGET_BASE_ARCH=ppc
6847    TARGET_ABI_DIR=ppc
6848    mttcg=yes
6849    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6850  ;;
6851  ppc64le)
6852    TARGET_ARCH=ppc64
6853    TARGET_BASE_ARCH=ppc
6854    TARGET_ABI_DIR=ppc
6855    mttcg=yes
6856    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6857  ;;
6858  ppc64abi32)
6859    TARGET_ARCH=ppc64
6860    TARGET_BASE_ARCH=ppc
6861    TARGET_ABI_DIR=ppc
6862    echo "TARGET_ABI32=y" >> $config_target_mak
6863    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6864  ;;
6865  riscv32)
6866    TARGET_BASE_ARCH=riscv
6867    TARGET_ABI_DIR=riscv
6868    mttcg=yes
6869  ;;
6870  riscv64)
6871    TARGET_BASE_ARCH=riscv
6872    TARGET_ABI_DIR=riscv
6873    mttcg=yes
6874  ;;
6875  sh4|sh4eb)
6876    TARGET_ARCH=sh4
6877    bflt="yes"
6878  ;;
6879  sparc)
6880  ;;
6881  sparc64)
6882    TARGET_BASE_ARCH=sparc
6883  ;;
6884  sparc32plus)
6885    TARGET_ARCH=sparc64
6886    TARGET_BASE_ARCH=sparc
6887    TARGET_ABI_DIR=sparc
6888    echo "TARGET_ABI32=y" >> $config_target_mak
6889  ;;
6890  s390x)
6891    mttcg=yes
6892    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6893  ;;
6894  tilegx)
6895  ;;
6896  tricore)
6897  ;;
6898  unicore32)
6899  ;;
6900  xtensa|xtensaeb)
6901    TARGET_ARCH=xtensa
6902    mttcg="yes"
6903  ;;
6904  *)
6905    error_exit "Unsupported target CPU"
6906  ;;
6907esac
6908# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6909if [ "$TARGET_BASE_ARCH" = "" ]; then
6910  TARGET_BASE_ARCH=$TARGET_ARCH
6911fi
6912
6913symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6914
6915upper() {
6916    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6917}
6918
6919target_arch_name="$(upper $TARGET_ARCH)"
6920echo "TARGET_$target_arch_name=y" >> $config_target_mak
6921echo "TARGET_NAME=$target_name" >> $config_target_mak
6922echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6923if [ "$TARGET_ABI_DIR" = "" ]; then
6924  TARGET_ABI_DIR=$TARGET_ARCH
6925fi
6926echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6927if [ "$HOST_VARIANT_DIR" != "" ]; then
6928    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6929fi
6930
6931if supported_xen_target $target; then
6932    echo "CONFIG_XEN=y" >> $config_target_mak
6933    if test "$xen_pci_passthrough" = yes; then
6934        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6935    fi
6936fi
6937if supported_kvm_target $target; then
6938    echo "CONFIG_KVM=y" >> $config_target_mak
6939    if test "$vhost_net" = "yes" ; then
6940        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6941        if test "$vhost_user" = "yes" ; then
6942            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6943        fi
6944    fi
6945fi
6946if supported_hax_target $target; then
6947    echo "CONFIG_HAX=y" >> $config_target_mak
6948fi
6949if supported_hvf_target $target; then
6950    echo "CONFIG_HVF=y" >> $config_target_mak
6951fi
6952if supported_whpx_target $target; then
6953    echo "CONFIG_WHPX=y" >> $config_target_mak
6954fi
6955if test "$target_bigendian" = "yes" ; then
6956  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6957fi
6958if test "$target_softmmu" = "yes" ; then
6959  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6960  if test "$mttcg" = "yes" ; then
6961    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6962  fi
6963fi
6964if test "$target_user_only" = "yes" ; then
6965  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6966  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6967fi
6968if test "$target_linux_user" = "yes" ; then
6969  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6970fi
6971list=""
6972if test ! -z "$gdb_xml_files" ; then
6973  for x in $gdb_xml_files; do
6974    list="$list $source_path/gdb-xml/$x"
6975  done
6976  echo "TARGET_XML_FILES=$list" >> $config_target_mak
6977fi
6978
6979if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6980  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6981fi
6982if test "$target_bsd_user" = "yes" ; then
6983  echo "CONFIG_BSD_USER=y" >> $config_target_mak
6984fi
6985
6986# generate QEMU_CFLAGS/LDFLAGS for targets
6987
6988cflags=""
6989ldflags=""
6990
6991disas_config() {
6992  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6993  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6994}
6995
6996for i in $ARCH $TARGET_BASE_ARCH ; do
6997  case "$i" in
6998  alpha)
6999    disas_config "ALPHA"
7000  ;;
7001  aarch64)
7002    if test -n "${cxx}"; then
7003      disas_config "ARM_A64"
7004    fi
7005  ;;
7006  arm)
7007    disas_config "ARM"
7008    if test -n "${cxx}"; then
7009      disas_config "ARM_A64"
7010    fi
7011  ;;
7012  cris)
7013    disas_config "CRIS"
7014  ;;
7015  hppa)
7016    disas_config "HPPA"
7017  ;;
7018  i386|x86_64|x32)
7019    disas_config "I386"
7020  ;;
7021  lm32)
7022    disas_config "LM32"
7023  ;;
7024  m68k)
7025    disas_config "M68K"
7026  ;;
7027  microblaze*)
7028    disas_config "MICROBLAZE"
7029  ;;
7030  mips*)
7031    disas_config "MIPS"
7032  ;;
7033  moxie*)
7034    disas_config "MOXIE"
7035  ;;
7036  nios2)
7037    disas_config "NIOS2"
7038  ;;
7039  or1k)
7040    disas_config "OPENRISC"
7041  ;;
7042  ppc*)
7043    disas_config "PPC"
7044  ;;
7045  riscv)
7046    disas_config "RISCV"
7047  ;;
7048  s390*)
7049    disas_config "S390"
7050  ;;
7051  sh4)
7052    disas_config "SH4"
7053  ;;
7054  sparc*)
7055    disas_config "SPARC"
7056  ;;
7057  xtensa*)
7058    disas_config "XTENSA"
7059  ;;
7060  esac
7061done
7062if test "$tcg_interpreter" = "yes" ; then
7063  disas_config "TCI"
7064fi
7065
7066case "$ARCH" in
7067alpha)
7068  # Ensure there's only a single GP
7069  cflags="-msmall-data $cflags"
7070;;
7071esac
7072
7073if test "$gprof" = "yes" ; then
7074  echo "TARGET_GPROF=yes" >> $config_target_mak
7075  if test "$target_linux_user" = "yes" ; then
7076    cflags="-p $cflags"
7077    ldflags="-p $ldflags"
7078  fi
7079  if test "$target_softmmu" = "yes" ; then
7080    ldflags="-p $ldflags"
7081    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7082  fi
7083fi
7084
7085if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7086  ldflags="$ldflags $textseg_ldflags"
7087fi
7088
7089# Newer kernels on s390 check for an S390_PGSTE program header and
7090# enable the pgste page table extensions in that case. This makes
7091# the vm.allocate_pgste sysctl unnecessary. We enable this program
7092# header if
7093#  - we build on s390x
7094#  - we build the system emulation for s390x (qemu-system-s390x)
7095#  - KVM is enabled
7096#  - the linker supports --s390-pgste
7097if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7098    if ld_has --s390-pgste ; then
7099        ldflags="-Wl,--s390-pgste $ldflags"
7100    fi
7101fi
7102
7103echo "LDFLAGS+=$ldflags" >> $config_target_mak
7104echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7105
7106done # for target in $targets
7107
7108if [ "$dtc_internal" = "yes" ]; then
7109  echo "config-host.h: subdir-dtc" >> $config_host_mak
7110fi
7111if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7112  echo "config-host.h: subdir-capstone" >> $config_host_mak
7113fi
7114if test -n "$LIBCAPSTONE"; then
7115  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7116fi
7117
7118if test "$numa" = "yes"; then
7119  echo "CONFIG_NUMA=y" >> $config_host_mak
7120fi
7121
7122if test "$ccache_cpp2" = "yes"; then
7123  echo "export CCACHE_CPP2=y" >> $config_host_mak
7124fi
7125
7126# build tree in object directory in case the source is not in the current directory
7127DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7128DIRS="$DIRS docs docs/interop fsdev scsi"
7129DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7130DIRS="$DIRS roms/seabios roms/vgabios"
7131FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7132FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7133FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7134FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7135FILES="$FILES pc-bios/spapr-rtas/Makefile"
7136FILES="$FILES pc-bios/s390-ccw/Makefile"
7137FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7138FILES="$FILES pc-bios/qemu-icon.bmp"
7139FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7140for bios_file in \
7141    $source_path/pc-bios/*.bin \
7142    $source_path/pc-bios/*.lid \
7143    $source_path/pc-bios/*.aml \
7144    $source_path/pc-bios/*.rom \
7145    $source_path/pc-bios/*.dtb \
7146    $source_path/pc-bios/*.img \
7147    $source_path/pc-bios/openbios-* \
7148    $source_path/pc-bios/u-boot.* \
7149    $source_path/pc-bios/palcode-*
7150do
7151    FILES="$FILES pc-bios/$(basename $bios_file)"
7152done
7153for test_file in $(find $source_path/tests/acpi-test-data -type f)
7154do
7155    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7156done
7157mkdir -p $DIRS
7158for f in $FILES ; do
7159    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7160        symlink "$source_path/$f" "$f"
7161    fi
7162done
7163
7164# temporary config to build submodules
7165for rom in seabios vgabios ; do
7166    config_mak=roms/$rom/config.mak
7167    echo "# Automatically generated by configure - do not modify" > $config_mak
7168    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7169    echo "AS=$as" >> $config_mak
7170    echo "CCAS=$ccas" >> $config_mak
7171    echo "CC=$cc" >> $config_mak
7172    echo "BCC=bcc" >> $config_mak
7173    echo "CPP=$cpp" >> $config_mak
7174    echo "OBJCOPY=objcopy" >> $config_mak
7175    echo "IASL=$iasl" >> $config_mak
7176    echo "LD=$ld" >> $config_mak
7177    echo "RANLIB=$ranlib" >> $config_mak
7178done
7179
7180# set up tests data directory
7181if [ ! -e tests/data ]; then
7182    symlink "$source_path/tests/data" tests/data
7183fi
7184
7185# set up qemu-iotests in this build directory
7186iotests_common_env="tests/qemu-iotests/common.env"
7187iotests_check="tests/qemu-iotests/check"
7188
7189echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7190echo >> "$iotests_common_env"
7191echo "export PYTHON='$python'" >> "$iotests_common_env"
7192
7193if [ ! -e "$iotests_check" ]; then
7194    symlink "$source_path/$iotests_check" "$iotests_check"
7195fi
7196
7197# Save the configure command line for later reuse.
7198cat <<EOD >config.status
7199#!/bin/sh
7200# Generated by configure.
7201# Run this file to recreate the current configuration.
7202# Compiler output produced by configure, useful for debugging
7203# configure, is in config.log if it exists.
7204EOD
7205printf "exec" >>config.status
7206printf " '%s'" "$0" "$@" >>config.status
7207echo ' "$@"' >>config.status
7208chmod +x config.status
7209
7210rm -r "$TMPDIR1"
7211