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