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