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