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