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