xref: /openbmc/qemu/configure (revision 073d9f2c)
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"
798  audio_possible_drivers="oss sdl pa"
799;;
800FreeBSD)
801  bsd="yes"
802  make="${MAKE-gmake}"
803  audio_drv_list="oss"
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"
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"
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="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"
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"
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="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_probe()
3346{
3347    drv=$1
3348    hdr=$2
3349    lib=$3
3350    exp=$4
3351    cfl=$5
3352        cat > $TMPC << EOF
3353#include <$hdr>
3354int main(void) { $exp }
3355EOF
3356    if compile_prog "$cfl" "$lib" ; then
3357        :
3358    else
3359        error_exit "$drv check failed" \
3360            "Make sure to have the $drv libs and headers installed."
3361    fi
3362}
3363
3364audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3365for drv in $audio_drv_list; do
3366    case $drv in
3367    alsa)
3368    audio_drv_probe $drv alsa/asoundlib.h -lasound \
3369        "return snd_pcm_close((snd_pcm_t *)0);"
3370    alsa_libs="-lasound"
3371    ;;
3372
3373    pa)
3374    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3375        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3376    pulse_libs="-lpulse"
3377    audio_pt_int="yes"
3378    ;;
3379
3380    sdl)
3381    if test "$sdl" = "no"; then
3382        error_exit "sdl not found or disabled, can not use sdl audio driver"
3383    fi
3384    ;;
3385
3386    coreaudio)
3387      coreaudio_libs="-framework CoreAudio"
3388    ;;
3389
3390    dsound)
3391      dsound_libs="-lole32 -ldxguid"
3392      audio_win_int="yes"
3393    ;;
3394
3395    oss)
3396      oss_libs="$oss_lib"
3397    ;;
3398
3399    wav)
3400    # XXX: Probes for CoreAudio, DirectSound
3401    ;;
3402
3403    *)
3404    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3405        error_exit "Unknown driver '$drv' selected" \
3406            "Possible drivers are: $audio_possible_drivers"
3407    }
3408    ;;
3409    esac
3410done
3411
3412##########################################
3413# BrlAPI probe
3414
3415if test "$brlapi" != "no" ; then
3416  brlapi_libs="-lbrlapi"
3417  cat > $TMPC << EOF
3418#include <brlapi.h>
3419#include <stddef.h>
3420int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3421EOF
3422  if compile_prog "" "$brlapi_libs" ; then
3423    brlapi=yes
3424  else
3425    if test "$brlapi" = "yes" ; then
3426      feature_not_found "brlapi" "Install brlapi devel"
3427    fi
3428    brlapi=no
3429  fi
3430fi
3431
3432##########################################
3433# curses probe
3434if test "$curses" != "no" ; then
3435  if test "$mingw32" = "yes" ; then
3436    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3437    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3438  else
3439    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3440    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3441  fi
3442  curses_found=no
3443  cat > $TMPC << EOF
3444#include <locale.h>
3445#include <curses.h>
3446#include <wchar.h>
3447int main(void) {
3448  wchar_t wch = L'w';
3449  setlocale(LC_ALL, "");
3450  resize_term(0, 0);
3451  addwstr(L"wide chars\n");
3452  addnwstr(&wch, 1);
3453  add_wch(WACS_DEGREE);
3454  return 0;
3455}
3456EOF
3457  IFS=:
3458  for curses_inc in $curses_inc_list; do
3459    # Make sure we get the wide character prototypes
3460    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3461    IFS=:
3462    for curses_lib in $curses_lib_list; do
3463      unset IFS
3464      if compile_prog "$curses_inc" "$curses_lib" ; then
3465        curses_found=yes
3466        break
3467      fi
3468    done
3469    if test "$curses_found" = yes ; then
3470      break
3471    fi
3472  done
3473  unset IFS
3474  if test "$curses_found" = "yes" ; then
3475    curses=yes
3476  else
3477    if test "$curses" = "yes" ; then
3478      feature_not_found "curses" "Install ncurses devel"
3479    fi
3480    curses=no
3481  fi
3482fi
3483
3484##########################################
3485# curl probe
3486if test "$curl" != "no" ; then
3487  if $pkg_config libcurl --exists; then
3488    curlconfig="$pkg_config libcurl"
3489  else
3490    curlconfig=curl-config
3491  fi
3492  cat > $TMPC << EOF
3493#include <curl/curl.h>
3494int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3495EOF
3496  curl_cflags=$($curlconfig --cflags 2>/dev/null)
3497  curl_libs=$($curlconfig --libs 2>/dev/null)
3498  if compile_prog "$curl_cflags" "$curl_libs" ; then
3499    curl=yes
3500  else
3501    if test "$curl" = "yes" ; then
3502      feature_not_found "curl" "Install libcurl devel"
3503    fi
3504    curl=no
3505  fi
3506fi # test "$curl"
3507
3508##########################################
3509# bluez support probe
3510if test "$bluez" != "no" ; then
3511  cat > $TMPC << EOF
3512#include <bluetooth/bluetooth.h>
3513int main(void) { return bt_error(0); }
3514EOF
3515  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3516  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3517  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3518    bluez=yes
3519    libs_softmmu="$bluez_libs $libs_softmmu"
3520  else
3521    if test "$bluez" = "yes" ; then
3522      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3523    fi
3524    bluez="no"
3525  fi
3526fi
3527
3528##########################################
3529# glib support probe
3530
3531glib_req_ver=2.40
3532glib_modules=gthread-2.0
3533if test "$modules" = yes; then
3534    glib_modules="$glib_modules gmodule-export-2.0"
3535fi
3536
3537# This workaround is required due to a bug in pkg-config file for glib as it
3538# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3539
3540if test "$static" = yes -a "$mingw32" = yes; then
3541    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3542fi
3543
3544for i in $glib_modules; do
3545    if $pkg_config --atleast-version=$glib_req_ver $i; then
3546        glib_cflags=$($pkg_config --cflags $i)
3547        glib_libs=$($pkg_config --libs $i)
3548        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3549        LIBS="$glib_libs $LIBS"
3550        libs_qga="$glib_libs $libs_qga"
3551    else
3552        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3553    fi
3554done
3555
3556# Sanity check that the current size_t matches the
3557# size that glib thinks it should be. This catches
3558# problems on multi-arch where people try to build
3559# 32-bit QEMU while pointing at 64-bit glib headers
3560cat > $TMPC <<EOF
3561#include <glib.h>
3562#include <unistd.h>
3563
3564#define QEMU_BUILD_BUG_ON(x) \
3565  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3566
3567int main(void) {
3568   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3569   return 0;
3570}
3571EOF
3572
3573if ! compile_prog "$CFLAGS" "$LIBS" ; then
3574    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3575               "You probably need to set PKG_CONFIG_LIBDIR"\
3576	       "to point to the right pkg-config files for your"\
3577	       "build target"
3578fi
3579
3580# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3581cat > $TMPC << EOF
3582#include <glib.h>
3583int main(void) { return 0; }
3584EOF
3585if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3586    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3587        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3588        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3589    fi
3590fi
3591
3592#########################################
3593# zlib check
3594
3595if test "$zlib" != "no" ; then
3596    if $pkg_config --exists zlib; then
3597        zlib_cflags=$($pkg_config --cflags zlib)
3598        zlib_libs=$($pkg_config --libs zlib)
3599        QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3600        LIBS="$zlib_libs $LIBS"
3601    else
3602        cat > $TMPC << EOF
3603#include <zlib.h>
3604int main(void) { zlibVersion(); return 0; }
3605EOF
3606        if compile_prog "" "-lz" ; then
3607            LIBS="$LIBS -lz"
3608        else
3609            error_exit "zlib check failed" \
3610                "Make sure to have the zlib libs and headers installed."
3611        fi
3612    fi
3613fi
3614
3615##########################################
3616# SHA command probe for modules
3617if test "$modules" = yes; then
3618    shacmd_probe="sha1sum sha1 shasum"
3619    for c in $shacmd_probe; do
3620        if has $c; then
3621            shacmd="$c"
3622            break
3623        fi
3624    done
3625    if test "$shacmd" = ""; then
3626        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3627    fi
3628fi
3629
3630##########################################
3631# pixman support probe
3632
3633if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3634  pixman_cflags=
3635  pixman_libs=
3636elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3637  pixman_cflags=$($pkg_config --cflags pixman-1)
3638  pixman_libs=$($pkg_config --libs pixman-1)
3639else
3640  error_exit "pixman >= 0.21.8 not present." \
3641      "Please install the pixman devel package."
3642fi
3643
3644##########################################
3645# libmpathpersist probe
3646
3647if test "$mpath" != "no" ; then
3648  # probe for the new API
3649  cat > $TMPC <<EOF
3650#include <libudev.h>
3651#include <mpath_persist.h>
3652unsigned mpath_mx_alloc_len = 1024;
3653int logsink;
3654static struct config *multipath_conf;
3655extern struct udev *udev;
3656extern struct config *get_multipath_config(void);
3657extern void put_multipath_config(struct config *conf);
3658struct udev *udev;
3659struct config *get_multipath_config(void) { return multipath_conf; }
3660void put_multipath_config(struct config *conf) { }
3661
3662int main(void) {
3663    udev = udev_new();
3664    multipath_conf = mpath_lib_init();
3665    return 0;
3666}
3667EOF
3668  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3669    mpathpersist=yes
3670    mpathpersist_new_api=yes
3671  else
3672    # probe for the old API
3673    cat > $TMPC <<EOF
3674#include <libudev.h>
3675#include <mpath_persist.h>
3676unsigned mpath_mx_alloc_len = 1024;
3677int logsink;
3678int main(void) {
3679    struct udev *udev = udev_new();
3680    mpath_lib_init(udev);
3681    return 0;
3682}
3683EOF
3684    if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3685      mpathpersist=yes
3686      mpathpersist_new_api=no
3687    else
3688      mpathpersist=no
3689    fi
3690  fi
3691else
3692  mpathpersist=no
3693fi
3694
3695##########################################
3696# libcap probe
3697
3698if test "$cap" != "no" ; then
3699  cat > $TMPC <<EOF
3700#include <stdio.h>
3701#include <sys/capability.h>
3702int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3703EOF
3704  if compile_prog "" "-lcap" ; then
3705    cap=yes
3706  else
3707    cap=no
3708  fi
3709fi
3710
3711##########################################
3712# pthread probe
3713PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3714
3715pthread=no
3716cat > $TMPC << EOF
3717#include <pthread.h>
3718static void *f(void *p) { return NULL; }
3719int main(void) {
3720  pthread_t thread;
3721  pthread_create(&thread, 0, f, 0);
3722  return 0;
3723}
3724EOF
3725if compile_prog "" "" ; then
3726  pthread=yes
3727else
3728  for pthread_lib in $PTHREADLIBS_LIST; do
3729    if compile_prog "" "$pthread_lib" ; then
3730      pthread=yes
3731      found=no
3732      for lib_entry in $LIBS; do
3733        if test "$lib_entry" = "$pthread_lib"; then
3734          found=yes
3735          break
3736        fi
3737      done
3738      if test "$found" = "no"; then
3739        LIBS="$pthread_lib $LIBS"
3740        libs_qga="$pthread_lib $libs_qga"
3741      fi
3742      PTHREAD_LIB="$pthread_lib"
3743      break
3744    fi
3745  done
3746fi
3747
3748if test "$mingw32" != yes -a "$pthread" = no; then
3749  error_exit "pthread check failed" \
3750      "Make sure to have the pthread libs and headers installed."
3751fi
3752
3753# check for pthread_setname_np with thread id
3754pthread_setname_np_w_tid=no
3755cat > $TMPC << EOF
3756#include <pthread.h>
3757
3758static void *f(void *p) { return NULL; }
3759int main(void)
3760{
3761    pthread_t thread;
3762    pthread_create(&thread, 0, f, 0);
3763    pthread_setname_np(thread, "QEMU");
3764    return 0;
3765}
3766EOF
3767if compile_prog "" "$pthread_lib" ; then
3768  pthread_setname_np_w_tid=yes
3769fi
3770
3771# check for pthread_setname_np without thread id
3772pthread_setname_np_wo_tid=no
3773cat > $TMPC << EOF
3774#include <pthread.h>
3775
3776static void *f(void *p) { pthread_setname_np("QEMU"); }
3777int main(void)
3778{
3779    pthread_t thread;
3780    pthread_create(&thread, 0, f, 0);
3781    return 0;
3782}
3783EOF
3784if compile_prog "" "$pthread_lib" ; then
3785  pthread_setname_np_wo_tid=yes
3786fi
3787
3788##########################################
3789# rbd probe
3790if test "$rbd" != "no" ; then
3791  cat > $TMPC <<EOF
3792#include <stdio.h>
3793#include <rbd/librbd.h>
3794int main(void) {
3795    rados_t cluster;
3796    rados_create(&cluster, NULL);
3797    return 0;
3798}
3799EOF
3800  rbd_libs="-lrbd -lrados"
3801  if compile_prog "" "$rbd_libs" ; then
3802    rbd=yes
3803  else
3804    if test "$rbd" = "yes" ; then
3805      feature_not_found "rados block device" "Install librbd/ceph devel"
3806    fi
3807    rbd=no
3808  fi
3809fi
3810
3811##########################################
3812# libssh2 probe
3813min_libssh2_version=1.2.8
3814if test "$libssh2" != "no" ; then
3815  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3816    libssh2_cflags=$($pkg_config libssh2 --cflags)
3817    libssh2_libs=$($pkg_config libssh2 --libs)
3818    libssh2=yes
3819  else
3820    if test "$libssh2" = "yes" ; then
3821      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3822    fi
3823    libssh2=no
3824  fi
3825fi
3826
3827##########################################
3828# libssh2_sftp_fsync probe
3829
3830if test "$libssh2" = "yes"; then
3831  cat > $TMPC <<EOF
3832#include <stdio.h>
3833#include <libssh2.h>
3834#include <libssh2_sftp.h>
3835int main(void) {
3836    LIBSSH2_SESSION *session;
3837    LIBSSH2_SFTP *sftp;
3838    LIBSSH2_SFTP_HANDLE *sftp_handle;
3839    session = libssh2_session_init ();
3840    sftp = libssh2_sftp_init (session);
3841    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3842    libssh2_sftp_fsync (sftp_handle);
3843    return 0;
3844}
3845EOF
3846  # libssh2_cflags/libssh2_libs defined in previous test.
3847  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3848    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3849  fi
3850fi
3851
3852##########################################
3853# linux-aio probe
3854
3855if test "$linux_aio" != "no" ; then
3856  cat > $TMPC <<EOF
3857#include <libaio.h>
3858#include <sys/eventfd.h>
3859#include <stddef.h>
3860int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3861EOF
3862  if compile_prog "" "-laio" ; then
3863    linux_aio=yes
3864  else
3865    if test "$linux_aio" = "yes" ; then
3866      feature_not_found "linux AIO" "Install libaio devel"
3867    fi
3868    linux_aio=no
3869  fi
3870fi
3871
3872##########################################
3873# TPM passthrough is only on x86 Linux
3874
3875if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3876  tpm_passthrough=$tpm
3877else
3878  tpm_passthrough=no
3879fi
3880
3881# TPM emulator is for all posix systems
3882if test "$mingw32" != "yes"; then
3883  tpm_emulator=$tpm
3884else
3885  tpm_emulator=no
3886fi
3887##########################################
3888# attr probe
3889
3890if test "$attr" != "no" ; then
3891  cat > $TMPC <<EOF
3892#include <stdio.h>
3893#include <sys/types.h>
3894#ifdef CONFIG_LIBATTR
3895#include <attr/xattr.h>
3896#else
3897#include <sys/xattr.h>
3898#endif
3899int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3900EOF
3901  if compile_prog "" "" ; then
3902    attr=yes
3903  # Older distros have <attr/xattr.h>, and need -lattr:
3904  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3905    attr=yes
3906    LIBS="-lattr $LIBS"
3907    libattr=yes
3908  else
3909    if test "$attr" = "yes" ; then
3910      feature_not_found "ATTR" "Install libc6 or libattr devel"
3911    fi
3912    attr=no
3913  fi
3914fi
3915
3916##########################################
3917# iovec probe
3918cat > $TMPC <<EOF
3919#include <sys/types.h>
3920#include <sys/uio.h>
3921#include <unistd.h>
3922int main(void) { return sizeof(struct iovec); }
3923EOF
3924iovec=no
3925if compile_prog "" "" ; then
3926  iovec=yes
3927fi
3928
3929##########################################
3930# preadv probe
3931cat > $TMPC <<EOF
3932#include <sys/types.h>
3933#include <sys/uio.h>
3934#include <unistd.h>
3935int main(void) { return preadv(0, 0, 0, 0); }
3936EOF
3937preadv=no
3938if compile_prog "" "" ; then
3939  preadv=yes
3940fi
3941
3942##########################################
3943# fdt probe
3944# fdt support is mandatory for at least some target architectures,
3945# so insist on it if we're building those system emulators.
3946fdt_required=no
3947for target in $target_list; do
3948  case $target in
3949    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3950      fdt_required=yes
3951    ;;
3952  esac
3953done
3954
3955if test "$fdt_required" = "yes"; then
3956  if test "$fdt" = "no"; then
3957    error_exit "fdt disabled but some requested targets require it." \
3958      "You can turn off fdt only if you also disable all the system emulation" \
3959      "targets which need it (by specifying a cut down --target-list)."
3960  fi
3961  fdt=yes
3962fi
3963
3964if test "$fdt" != "no" ; then
3965  fdt_libs="-lfdt"
3966  # explicitly check for libfdt_env.h as it is missing in some stable installs
3967  # and test for required functions to make sure we are on a version >= 1.4.2
3968  cat > $TMPC << EOF
3969#include <libfdt.h>
3970#include <libfdt_env.h>
3971int main(void) { fdt_check_full(NULL, 0); return 0; }
3972EOF
3973  if compile_prog "" "$fdt_libs" ; then
3974    # system DTC is good - use it
3975    fdt=system
3976  else
3977      # have GIT checkout, so activate dtc submodule
3978      if test -e "${source_path}/.git" ; then
3979          git_submodules="${git_submodules} dtc"
3980      fi
3981      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3982          fdt=git
3983          mkdir -p dtc
3984          if [ "$pwd_is_source_path" != "y" ] ; then
3985              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3986              symlink "$source_path/dtc/scripts" "dtc/scripts"
3987          fi
3988          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3989          fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3990          fdt_libs="$fdt_libs"
3991      elif test "$fdt" = "yes" ; then
3992          # Not a git build & no libfdt found, prompt for system install
3993          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3994                     "Please install the DTC (libfdt) devel package"
3995      else
3996          # don't have and don't want
3997          fdt_libs=
3998          fdt=no
3999      fi
4000  fi
4001fi
4002
4003libs_softmmu="$libs_softmmu $fdt_libs"
4004
4005##########################################
4006# opengl probe (for sdl2, gtk, milkymist-tmu2)
4007
4008if test "$opengl" != "no" ; then
4009  opengl_pkgs="epoxy gbm"
4010  if $pkg_config $opengl_pkgs; then
4011    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4012    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4013    opengl=yes
4014    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4015        gtk_gl="yes"
4016    fi
4017    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4018  else
4019    if test "$opengl" = "yes" ; then
4020      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4021    fi
4022    opengl_cflags=""
4023    opengl_libs=""
4024    opengl=no
4025  fi
4026fi
4027
4028if test "$opengl" = "yes"; then
4029  cat > $TMPC << EOF
4030#include <epoxy/egl.h>
4031#ifndef EGL_MESA_image_dma_buf_export
4032# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4033#endif
4034int main(void) { return 0; }
4035EOF
4036  if compile_prog "" "" ; then
4037    opengl_dmabuf=yes
4038  fi
4039fi
4040
4041##########################################
4042# libxml2 probe
4043if test "$libxml2" != "no" ; then
4044    if $pkg_config --exists libxml-2.0; then
4045        libxml2="yes"
4046        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4047        libxml2_libs=$($pkg_config --libs libxml-2.0)
4048    else
4049        if test "$libxml2" = "yes"; then
4050            feature_not_found "libxml2" "Install libxml2 devel"
4051        fi
4052        libxml2="no"
4053    fi
4054fi
4055
4056##########################################
4057# glusterfs probe
4058if test "$glusterfs" != "no" ; then
4059  if $pkg_config --atleast-version=3 glusterfs-api; then
4060    glusterfs="yes"
4061    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4062    glusterfs_libs=$($pkg_config --libs glusterfs-api)
4063    if $pkg_config --atleast-version=4 glusterfs-api; then
4064      glusterfs_xlator_opt="yes"
4065    fi
4066    if $pkg_config --atleast-version=5 glusterfs-api; then
4067      glusterfs_discard="yes"
4068    fi
4069    if $pkg_config --atleast-version=6 glusterfs-api; then
4070      glusterfs_fallocate="yes"
4071      glusterfs_zerofill="yes"
4072    fi
4073  else
4074    if test "$glusterfs" = "yes" ; then
4075      feature_not_found "GlusterFS backend support" \
4076          "Install glusterfs-api devel >= 3"
4077    fi
4078    glusterfs="no"
4079  fi
4080fi
4081
4082# Check for inotify functions when we are building linux-user
4083# emulator.  This is done because older glibc versions don't
4084# have syscall stubs for these implemented.  In that case we
4085# don't provide them even if kernel supports them.
4086#
4087inotify=no
4088cat > $TMPC << EOF
4089#include <sys/inotify.h>
4090
4091int
4092main(void)
4093{
4094	/* try to start inotify */
4095	return inotify_init();
4096}
4097EOF
4098if compile_prog "" "" ; then
4099  inotify=yes
4100fi
4101
4102inotify1=no
4103cat > $TMPC << EOF
4104#include <sys/inotify.h>
4105
4106int
4107main(void)
4108{
4109    /* try to start inotify */
4110    return inotify_init1(0);
4111}
4112EOF
4113if compile_prog "" "" ; then
4114  inotify1=yes
4115fi
4116
4117# check if pipe2 is there
4118pipe2=no
4119cat > $TMPC << EOF
4120#include <unistd.h>
4121#include <fcntl.h>
4122
4123int main(void)
4124{
4125    int pipefd[2];
4126    return pipe2(pipefd, O_CLOEXEC);
4127}
4128EOF
4129if compile_prog "" "" ; then
4130  pipe2=yes
4131fi
4132
4133# check if accept4 is there
4134accept4=no
4135cat > $TMPC << EOF
4136#include <sys/socket.h>
4137#include <stddef.h>
4138
4139int main(void)
4140{
4141    accept4(0, NULL, NULL, SOCK_CLOEXEC);
4142    return 0;
4143}
4144EOF
4145if compile_prog "" "" ; then
4146  accept4=yes
4147fi
4148
4149# check if tee/splice is there. vmsplice was added same time.
4150splice=no
4151cat > $TMPC << EOF
4152#include <unistd.h>
4153#include <fcntl.h>
4154#include <limits.h>
4155
4156int main(void)
4157{
4158    int len, fd = 0;
4159    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4160    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4161    return 0;
4162}
4163EOF
4164if compile_prog "" "" ; then
4165  splice=yes
4166fi
4167
4168##########################################
4169# libnuma probe
4170
4171if test "$numa" != "no" ; then
4172  cat > $TMPC << EOF
4173#include <numa.h>
4174int main(void) { return numa_available(); }
4175EOF
4176
4177  if compile_prog "" "-lnuma" ; then
4178    numa=yes
4179    libs_softmmu="-lnuma $libs_softmmu"
4180  else
4181    if test "$numa" = "yes" ; then
4182      feature_not_found "numa" "install numactl devel"
4183    fi
4184    numa=no
4185  fi
4186fi
4187
4188if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4189    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4190    exit 1
4191fi
4192
4193# Even if malloc_trim() is available, these non-libc memory allocators
4194# do not support it.
4195if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4196    if test "$malloc_trim" = "yes" ; then
4197        echo "Disabling malloc_trim with non-libc memory allocator"
4198    fi
4199    malloc_trim="no"
4200fi
4201
4202#######################################
4203# malloc_trim
4204
4205if test "$malloc_trim" != "no" ; then
4206    cat > $TMPC << EOF
4207#include <malloc.h>
4208int main(void) { malloc_trim(0); return 0; }
4209EOF
4210    if compile_prog "" "" ; then
4211        malloc_trim="yes"
4212    else
4213        malloc_trim="no"
4214    fi
4215fi
4216
4217##########################################
4218# tcmalloc probe
4219
4220if test "$tcmalloc" = "yes" ; then
4221  cat > $TMPC << EOF
4222#include <stdlib.h>
4223int main(void) { malloc(1); return 0; }
4224EOF
4225
4226  if compile_prog "" "-ltcmalloc" ; then
4227    LIBS="-ltcmalloc $LIBS"
4228  else
4229    feature_not_found "tcmalloc" "install gperftools devel"
4230  fi
4231fi
4232
4233##########################################
4234# jemalloc probe
4235
4236if test "$jemalloc" = "yes" ; then
4237  cat > $TMPC << EOF
4238#include <stdlib.h>
4239int main(void) { malloc(1); return 0; }
4240EOF
4241
4242  if compile_prog "" "-ljemalloc" ; then
4243    LIBS="-ljemalloc $LIBS"
4244  else
4245    feature_not_found "jemalloc" "install jemalloc devel"
4246  fi
4247fi
4248
4249##########################################
4250# signalfd probe
4251signalfd="no"
4252cat > $TMPC << EOF
4253#include <unistd.h>
4254#include <sys/syscall.h>
4255#include <signal.h>
4256int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4257EOF
4258
4259if compile_prog "" "" ; then
4260  signalfd=yes
4261fi
4262
4263# check if eventfd is supported
4264eventfd=no
4265cat > $TMPC << EOF
4266#include <sys/eventfd.h>
4267
4268int main(void)
4269{
4270    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4271}
4272EOF
4273if compile_prog "" "" ; then
4274  eventfd=yes
4275fi
4276
4277# check if memfd is supported
4278memfd=no
4279cat > $TMPC << EOF
4280#include <sys/mman.h>
4281
4282int main(void)
4283{
4284    return memfd_create("foo", MFD_ALLOW_SEALING);
4285}
4286EOF
4287if compile_prog "" "" ; then
4288  memfd=yes
4289fi
4290
4291# check for usbfs
4292have_usbfs=no
4293if test "$linux_user" = "yes"; then
4294  if check_include linux/usbdevice_fs.h; then
4295    have_usbfs=yes
4296  fi
4297  have_usbfs=yes
4298fi
4299
4300# check for fallocate
4301fallocate=no
4302cat > $TMPC << EOF
4303#include <fcntl.h>
4304
4305int main(void)
4306{
4307    fallocate(0, 0, 0, 0);
4308    return 0;
4309}
4310EOF
4311if compile_prog "" "" ; then
4312  fallocate=yes
4313fi
4314
4315# check for fallocate hole punching
4316fallocate_punch_hole=no
4317cat > $TMPC << EOF
4318#include <fcntl.h>
4319#include <linux/falloc.h>
4320
4321int main(void)
4322{
4323    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4324    return 0;
4325}
4326EOF
4327if compile_prog "" "" ; then
4328  fallocate_punch_hole=yes
4329fi
4330
4331# check that fallocate supports range zeroing inside the file
4332fallocate_zero_range=no
4333cat > $TMPC << EOF
4334#include <fcntl.h>
4335#include <linux/falloc.h>
4336
4337int main(void)
4338{
4339    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4340    return 0;
4341}
4342EOF
4343if compile_prog "" "" ; then
4344  fallocate_zero_range=yes
4345fi
4346
4347# check for posix_fallocate
4348posix_fallocate=no
4349cat > $TMPC << EOF
4350#include <fcntl.h>
4351
4352int main(void)
4353{
4354    posix_fallocate(0, 0, 0);
4355    return 0;
4356}
4357EOF
4358if compile_prog "" "" ; then
4359    posix_fallocate=yes
4360fi
4361
4362# check for sync_file_range
4363sync_file_range=no
4364cat > $TMPC << EOF
4365#include <fcntl.h>
4366
4367int main(void)
4368{
4369    sync_file_range(0, 0, 0, 0);
4370    return 0;
4371}
4372EOF
4373if compile_prog "" "" ; then
4374  sync_file_range=yes
4375fi
4376
4377# check for linux/fiemap.h and FS_IOC_FIEMAP
4378fiemap=no
4379cat > $TMPC << EOF
4380#include <sys/ioctl.h>
4381#include <linux/fs.h>
4382#include <linux/fiemap.h>
4383
4384int main(void)
4385{
4386    ioctl(0, FS_IOC_FIEMAP, 0);
4387    return 0;
4388}
4389EOF
4390if compile_prog "" "" ; then
4391  fiemap=yes
4392fi
4393
4394# check for dup3
4395dup3=no
4396cat > $TMPC << EOF
4397#include <unistd.h>
4398
4399int main(void)
4400{
4401    dup3(0, 0, 0);
4402    return 0;
4403}
4404EOF
4405if compile_prog "" "" ; then
4406  dup3=yes
4407fi
4408
4409# check for ppoll support
4410ppoll=no
4411cat > $TMPC << EOF
4412#include <poll.h>
4413
4414int main(void)
4415{
4416    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4417    ppoll(&pfd, 1, 0, 0);
4418    return 0;
4419}
4420EOF
4421if compile_prog "" "" ; then
4422  ppoll=yes
4423fi
4424
4425# check for prctl(PR_SET_TIMERSLACK , ... ) support
4426prctl_pr_set_timerslack=no
4427cat > $TMPC << EOF
4428#include <sys/prctl.h>
4429
4430int main(void)
4431{
4432    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4433    return 0;
4434}
4435EOF
4436if compile_prog "" "" ; then
4437  prctl_pr_set_timerslack=yes
4438fi
4439
4440# check for epoll support
4441epoll=no
4442cat > $TMPC << EOF
4443#include <sys/epoll.h>
4444
4445int main(void)
4446{
4447    epoll_create(0);
4448    return 0;
4449}
4450EOF
4451if compile_prog "" "" ; then
4452  epoll=yes
4453fi
4454
4455# epoll_create1 is a later addition
4456# so we must check separately for its presence
4457epoll_create1=no
4458cat > $TMPC << EOF
4459#include <sys/epoll.h>
4460
4461int main(void)
4462{
4463    /* Note that we use epoll_create1 as a value, not as
4464     * a function being called. This is necessary so that on
4465     * old SPARC glibc versions where the function was present in
4466     * the library but not declared in the header file we will
4467     * fail the configure check. (Otherwise we will get a compiler
4468     * warning but not an error, and will proceed to fail the
4469     * qemu compile where we compile with -Werror.)
4470     */
4471    return (int)(uintptr_t)&epoll_create1;
4472}
4473EOF
4474if compile_prog "" "" ; then
4475  epoll_create1=yes
4476fi
4477
4478# check for sendfile support
4479sendfile=no
4480cat > $TMPC << EOF
4481#include <sys/sendfile.h>
4482
4483int main(void)
4484{
4485    return sendfile(0, 0, 0, 0);
4486}
4487EOF
4488if compile_prog "" "" ; then
4489  sendfile=yes
4490fi
4491
4492# check for timerfd support (glibc 2.8 and newer)
4493timerfd=no
4494cat > $TMPC << EOF
4495#include <sys/timerfd.h>
4496
4497int main(void)
4498{
4499    return(timerfd_create(CLOCK_REALTIME, 0));
4500}
4501EOF
4502if compile_prog "" "" ; then
4503  timerfd=yes
4504fi
4505
4506# check for setns and unshare support
4507setns=no
4508cat > $TMPC << EOF
4509#include <sched.h>
4510
4511int main(void)
4512{
4513    int ret;
4514    ret = setns(0, 0);
4515    ret = unshare(0);
4516    return ret;
4517}
4518EOF
4519if compile_prog "" "" ; then
4520  setns=yes
4521fi
4522
4523# clock_adjtime probe
4524clock_adjtime=no
4525cat > $TMPC <<EOF
4526#include <time.h>
4527
4528int main(void)
4529{
4530    return clock_adjtime(0, 0);
4531}
4532EOF
4533clock_adjtime=no
4534if compile_prog "" "" ; then
4535  clock_adjtime=yes
4536fi
4537
4538# syncfs probe
4539syncfs=no
4540cat > $TMPC <<EOF
4541#include <unistd.h>
4542
4543int main(void)
4544{
4545    return syncfs(0);
4546}
4547EOF
4548syncfs=no
4549if compile_prog "" "" ; then
4550  syncfs=yes
4551fi
4552
4553# Check if tools are available to build documentation.
4554if test "$docs" != "no" ; then
4555  if has makeinfo && has pod2man; then
4556    docs=yes
4557  else
4558    if test "$docs" = "yes" ; then
4559      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4560    fi
4561    docs=no
4562  fi
4563fi
4564
4565# Search for bswap_32 function
4566byteswap_h=no
4567cat > $TMPC << EOF
4568#include <byteswap.h>
4569int main(void) { return bswap_32(0); }
4570EOF
4571if compile_prog "" "" ; then
4572  byteswap_h=yes
4573fi
4574
4575# Search for bswap32 function
4576bswap_h=no
4577cat > $TMPC << EOF
4578#include <sys/endian.h>
4579#include <sys/types.h>
4580#include <machine/bswap.h>
4581int main(void) { return bswap32(0); }
4582EOF
4583if compile_prog "" "" ; then
4584  bswap_h=yes
4585fi
4586
4587##########################################
4588# Do we have libiscsi >= 1.9.0
4589if test "$libiscsi" != "no" ; then
4590  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4591    libiscsi="yes"
4592    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4593    libiscsi_libs=$($pkg_config --libs libiscsi)
4594  else
4595    if test "$libiscsi" = "yes" ; then
4596      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4597    fi
4598    libiscsi="no"
4599  fi
4600fi
4601
4602##########################################
4603# Do we need libm
4604cat > $TMPC << EOF
4605#include <math.h>
4606int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4607EOF
4608if compile_prog "" "" ; then
4609  :
4610elif compile_prog "" "-lm" ; then
4611  LIBS="-lm $LIBS"
4612  libs_qga="-lm $libs_qga"
4613else
4614  error_exit "libm check failed"
4615fi
4616
4617##########################################
4618# Do we need librt
4619# uClibc provides 2 versions of clock_gettime(), one with realtime
4620# support and one without. This means that the clock_gettime() don't
4621# need -lrt. We still need it for timer_create() so we check for this
4622# function in addition.
4623cat > $TMPC <<EOF
4624#include <signal.h>
4625#include <time.h>
4626int main(void) {
4627  timer_create(CLOCK_REALTIME, NULL, NULL);
4628  return clock_gettime(CLOCK_REALTIME, NULL);
4629}
4630EOF
4631
4632if compile_prog "" "" ; then
4633  :
4634# we need pthread for static linking. use previous pthread test result
4635elif compile_prog "" "$pthread_lib -lrt" ; then
4636  LIBS="$LIBS -lrt"
4637  libs_qga="$libs_qga -lrt"
4638fi
4639
4640if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4641        "$haiku" != "yes" ; then
4642    libs_softmmu="-lutil $libs_softmmu"
4643fi
4644
4645##########################################
4646# spice probe
4647if test "$spice" != "no" ; then
4648  cat > $TMPC << EOF
4649#include <spice.h>
4650int main(void) { spice_server_new(); return 0; }
4651EOF
4652  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4653  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4654  if $pkg_config --atleast-version=0.12.5 spice-server && \
4655     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4656     compile_prog "$spice_cflags" "$spice_libs" ; then
4657    spice="yes"
4658    libs_softmmu="$libs_softmmu $spice_libs"
4659    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4660    spice_protocol_version=$($pkg_config --modversion spice-protocol)
4661    spice_server_version=$($pkg_config --modversion spice-server)
4662  else
4663    if test "$spice" = "yes" ; then
4664      feature_not_found "spice" \
4665          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4666    fi
4667    spice="no"
4668  fi
4669fi
4670
4671# check for smartcard support
4672if test "$smartcard" != "no"; then
4673    if $pkg_config --atleast-version=2.5.1 libcacard; then
4674        libcacard_cflags=$($pkg_config --cflags libcacard)
4675        libcacard_libs=$($pkg_config --libs libcacard)
4676        smartcard="yes"
4677    else
4678        if test "$smartcard" = "yes"; then
4679            feature_not_found "smartcard" "Install libcacard devel"
4680        fi
4681        smartcard="no"
4682    fi
4683fi
4684
4685# check for libusb
4686if test "$libusb" != "no" ; then
4687    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4688        libusb="yes"
4689        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4690        libusb_libs=$($pkg_config --libs libusb-1.0)
4691    else
4692        if test "$libusb" = "yes"; then
4693            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4694        fi
4695        libusb="no"
4696    fi
4697fi
4698
4699# check for usbredirparser for usb network redirection support
4700if test "$usb_redir" != "no" ; then
4701    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4702        usb_redir="yes"
4703        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4704        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4705    else
4706        if test "$usb_redir" = "yes"; then
4707            feature_not_found "usb-redir" "Install usbredir devel"
4708        fi
4709        usb_redir="no"
4710    fi
4711fi
4712
4713##########################################
4714# check if we have VSS SDK headers for win
4715
4716if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4717  case "$vss_win32_sdk" in
4718    "")   vss_win32_include="-isystem $source_path" ;;
4719    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4720          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4721          vss_win32_include="-isystem $source_path/.sdk/vss"
4722	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4723	  ;;
4724    *)    vss_win32_include="-isystem $vss_win32_sdk"
4725  esac
4726  cat > $TMPC << EOF
4727#define __MIDL_user_allocate_free_DEFINED__
4728#include <inc/win2003/vss.h>
4729int main(void) { return VSS_CTX_BACKUP; }
4730EOF
4731  if compile_prog "$vss_win32_include" "" ; then
4732    guest_agent_with_vss="yes"
4733    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4734    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4735    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4736  else
4737    if test "$vss_win32_sdk" != "" ; then
4738      echo "ERROR: Please download and install Microsoft VSS SDK:"
4739      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4740      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4741      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4742      echo "ERROR: The headers are extracted in the directory \`inc'."
4743      feature_not_found "VSS support"
4744    fi
4745    guest_agent_with_vss="no"
4746  fi
4747fi
4748
4749##########################################
4750# lookup Windows platform SDK (if not specified)
4751# The SDK is needed only to build .tlb (type library) file of guest agent
4752# VSS provider from the source. It is usually unnecessary because the
4753# pre-compiled .tlb file is included.
4754
4755if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4756  if test -z "$win_sdk"; then
4757    programfiles="$PROGRAMFILES"
4758    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4759    if test -n "$programfiles"; then
4760      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4761    else
4762      feature_not_found "Windows SDK"
4763    fi
4764  elif test "$win_sdk" = "no"; then
4765    win_sdk=""
4766  fi
4767fi
4768
4769##########################################
4770# check if mingw environment provides a recent ntddscsi.h
4771if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4772  cat > $TMPC << EOF
4773#include <windows.h>
4774#include <ntddscsi.h>
4775int main(void) {
4776#if !defined(IOCTL_SCSI_GET_ADDRESS)
4777#error Missing required ioctl definitions
4778#endif
4779  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4780  return addr.Lun;
4781}
4782EOF
4783  if compile_prog "" "" ; then
4784    guest_agent_ntddscsi=yes
4785    libs_qga="-lsetupapi $libs_qga"
4786  fi
4787fi
4788
4789##########################################
4790# virgl renderer probe
4791
4792if test "$virglrenderer" != "no" ; then
4793  cat > $TMPC << EOF
4794#include <virglrenderer.h>
4795int main(void) { virgl_renderer_poll(); return 0; }
4796EOF
4797  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4798  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4799  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4800  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4801     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4802    virglrenderer="yes"
4803  else
4804    if test "$virglrenderer" = "yes" ; then
4805      feature_not_found "virglrenderer"
4806    fi
4807    virglrenderer="no"
4808  fi
4809fi
4810
4811##########################################
4812# capstone
4813
4814case "$capstone" in
4815  "" | yes)
4816    if $pkg_config capstone; then
4817      capstone=system
4818    elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4819      capstone=git
4820    elif test -e "${source_path}/capstone/Makefile" ; then
4821      capstone=internal
4822    elif test -z "$capstone" ; then
4823      capstone=no
4824    else
4825      feature_not_found "capstone" "Install capstone devel or git submodule"
4826    fi
4827    ;;
4828
4829  system)
4830    if ! $pkg_config capstone; then
4831      feature_not_found "capstone" "Install capstone devel"
4832    fi
4833    ;;
4834esac
4835
4836case "$capstone" in
4837  git | internal)
4838    if test "$capstone" = git; then
4839      git_submodules="${git_submodules} capstone"
4840    fi
4841    mkdir -p capstone
4842    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4843    if test "$mingw32" = "yes"; then
4844      LIBCAPSTONE=capstone.lib
4845    else
4846      LIBCAPSTONE=libcapstone.a
4847    fi
4848    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4849    ;;
4850
4851  system)
4852    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4853    LIBS="$($pkg_config --libs capstone) $LIBS"
4854    ;;
4855
4856  no)
4857    ;;
4858  *)
4859    error_exit "Unknown state for capstone: $capstone"
4860    ;;
4861esac
4862
4863##########################################
4864# check if we have fdatasync
4865
4866fdatasync=no
4867cat > $TMPC << EOF
4868#include <unistd.h>
4869int main(void) {
4870#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4871return fdatasync(0);
4872#else
4873#error Not supported
4874#endif
4875}
4876EOF
4877if compile_prog "" "" ; then
4878    fdatasync=yes
4879fi
4880
4881##########################################
4882# check if we have madvise
4883
4884madvise=no
4885cat > $TMPC << EOF
4886#include <sys/types.h>
4887#include <sys/mman.h>
4888#include <stddef.h>
4889int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4890EOF
4891if compile_prog "" "" ; then
4892    madvise=yes
4893fi
4894
4895##########################################
4896# check if we have posix_madvise
4897
4898posix_madvise=no
4899cat > $TMPC << EOF
4900#include <sys/mman.h>
4901#include <stddef.h>
4902int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4903EOF
4904if compile_prog "" "" ; then
4905    posix_madvise=yes
4906fi
4907
4908##########################################
4909# check if we have posix_memalign()
4910
4911posix_memalign=no
4912cat > $TMPC << EOF
4913#include <stdlib.h>
4914int main(void) {
4915    void *p;
4916    return posix_memalign(&p, 8, 8);
4917}
4918EOF
4919if compile_prog "" "" ; then
4920    posix_memalign=yes
4921fi
4922
4923##########################################
4924# check if we have posix_syslog
4925
4926posix_syslog=no
4927cat > $TMPC << EOF
4928#include <syslog.h>
4929int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4930EOF
4931if compile_prog "" "" ; then
4932    posix_syslog=yes
4933fi
4934
4935##########################################
4936# check if we have sem_timedwait
4937
4938sem_timedwait=no
4939cat > $TMPC << EOF
4940#include <semaphore.h>
4941int main(void) { return sem_timedwait(0, 0); }
4942EOF
4943if compile_prog "" "" ; then
4944    sem_timedwait=yes
4945fi
4946
4947##########################################
4948# check if we have strchrnul
4949
4950strchrnul=no
4951cat > $TMPC << EOF
4952#include <string.h>
4953int main(void);
4954// Use a haystack that the compiler shouldn't be able to constant fold
4955char *haystack = (char*)&main;
4956int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4957EOF
4958if compile_prog "" "" ; then
4959    strchrnul=yes
4960fi
4961
4962##########################################
4963# check if trace backend exists
4964
4965$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4966if test "$?" -ne 0 ; then
4967  error_exit "invalid trace backends" \
4968      "Please choose supported trace backends."
4969fi
4970
4971##########################################
4972# For 'ust' backend, test if ust headers are present
4973if have_backend "ust"; then
4974  cat > $TMPC << EOF
4975#include <lttng/tracepoint.h>
4976int main(void) { return 0; }
4977EOF
4978  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4979    if $pkg_config lttng-ust --exists; then
4980      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4981    else
4982      lttng_ust_libs="-llttng-ust -ldl"
4983    fi
4984    if $pkg_config liburcu-bp --exists; then
4985      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4986    else
4987      urcu_bp_libs="-lurcu-bp"
4988    fi
4989
4990    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4991    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4992  else
4993    error_exit "Trace backend 'ust' missing lttng-ust header files"
4994  fi
4995fi
4996
4997##########################################
4998# For 'dtrace' backend, test if 'dtrace' command is present
4999if have_backend "dtrace"; then
5000  if ! has 'dtrace' ; then
5001    error_exit "dtrace command is not found in PATH $PATH"
5002  fi
5003  trace_backend_stap="no"
5004  if has 'stap' ; then
5005    trace_backend_stap="yes"
5006  fi
5007fi
5008
5009##########################################
5010# check and set a backend for coroutine
5011
5012# We prefer ucontext, but it's not always possible. The fallback
5013# is sigcontext. On Windows the only valid backend is the Windows
5014# specific one.
5015
5016ucontext_works=no
5017if test "$darwin" != "yes"; then
5018  cat > $TMPC << EOF
5019#include <ucontext.h>
5020#ifdef __stub_makecontext
5021#error Ignoring glibc stub makecontext which will always fail
5022#endif
5023int main(void) { makecontext(0, 0, 0); return 0; }
5024EOF
5025  if compile_prog "" "" ; then
5026    ucontext_works=yes
5027  fi
5028fi
5029
5030if test "$coroutine" = ""; then
5031  if test "$mingw32" = "yes"; then
5032    coroutine=win32
5033  elif test "$ucontext_works" = "yes"; then
5034    coroutine=ucontext
5035  else
5036    coroutine=sigaltstack
5037  fi
5038else
5039  case $coroutine in
5040  windows)
5041    if test "$mingw32" != "yes"; then
5042      error_exit "'windows' coroutine backend only valid for Windows"
5043    fi
5044    # Unfortunately the user visible backend name doesn't match the
5045    # coroutine-*.c filename for this case, so we have to adjust it here.
5046    coroutine=win32
5047    ;;
5048  ucontext)
5049    if test "$ucontext_works" != "yes"; then
5050      feature_not_found "ucontext"
5051    fi
5052    ;;
5053  sigaltstack)
5054    if test "$mingw32" = "yes"; then
5055      error_exit "only the 'windows' coroutine backend is valid for Windows"
5056    fi
5057    ;;
5058  *)
5059    error_exit "unknown coroutine backend $coroutine"
5060    ;;
5061  esac
5062fi
5063
5064if test "$coroutine_pool" = ""; then
5065  coroutine_pool=yes
5066fi
5067
5068if test "$debug_stack_usage" = "yes"; then
5069  if test "$coroutine_pool" = "yes"; then
5070    echo "WARN: disabling coroutine pool for stack usage debugging"
5071    coroutine_pool=no
5072  fi
5073fi
5074
5075
5076##########################################
5077# check if we have open_by_handle_at
5078
5079open_by_handle_at=no
5080cat > $TMPC << EOF
5081#include <fcntl.h>
5082#if !defined(AT_EMPTY_PATH)
5083# error missing definition
5084#else
5085int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5086#endif
5087EOF
5088if compile_prog "" "" ; then
5089    open_by_handle_at=yes
5090fi
5091
5092########################################
5093# check if we have linux/magic.h
5094
5095linux_magic_h=no
5096cat > $TMPC << EOF
5097#include <linux/magic.h>
5098int main(void) {
5099  return 0;
5100}
5101EOF
5102if compile_prog "" "" ; then
5103    linux_magic_h=yes
5104fi
5105
5106########################################
5107# check whether we can disable warning option with a pragma (this is needed
5108# to silence warnings in the headers of some versions of external libraries).
5109# This test has to be compiled with -Werror as otherwise an unknown pragma is
5110# only a warning.
5111#
5112# If we can't selectively disable warning in the code, disable -Werror so that
5113# the build doesn't fail anyway.
5114
5115pragma_disable_unused_but_set=no
5116cat > $TMPC << EOF
5117#pragma GCC diagnostic push
5118#pragma GCC diagnostic ignored "-Wstrict-prototypes"
5119#pragma GCC diagnostic pop
5120
5121int main(void) {
5122    return 0;
5123}
5124EOF
5125if compile_prog "-Werror" "" ; then
5126    pragma_diagnostic_available=yes
5127else
5128    werror=no
5129fi
5130
5131########################################
5132# check if we have valgrind/valgrind.h
5133
5134valgrind_h=no
5135cat > $TMPC << EOF
5136#include <valgrind/valgrind.h>
5137int main(void) {
5138  return 0;
5139}
5140EOF
5141if compile_prog "" "" ; then
5142    valgrind_h=yes
5143fi
5144
5145########################################
5146# check if environ is declared
5147
5148has_environ=no
5149cat > $TMPC << EOF
5150#include <unistd.h>
5151int main(void) {
5152    environ = 0;
5153    return 0;
5154}
5155EOF
5156if compile_prog "" "" ; then
5157    has_environ=yes
5158fi
5159
5160########################################
5161# check if cpuid.h is usable.
5162
5163cat > $TMPC << EOF
5164#include <cpuid.h>
5165int main(void) {
5166    unsigned a, b, c, d;
5167    int max = __get_cpuid_max(0, 0);
5168
5169    if (max >= 1) {
5170        __cpuid(1, a, b, c, d);
5171    }
5172
5173    if (max >= 7) {
5174        __cpuid_count(7, 0, a, b, c, d);
5175    }
5176
5177    return 0;
5178}
5179EOF
5180if compile_prog "" "" ; then
5181    cpuid_h=yes
5182fi
5183
5184##########################################
5185# avx2 optimization requirement check
5186#
5187# There is no point enabling this if cpuid.h is not usable,
5188# since we won't be able to select the new routines.
5189
5190if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
5191  cat > $TMPC << EOF
5192#pragma GCC push_options
5193#pragma GCC target("avx2")
5194#include <cpuid.h>
5195#include <immintrin.h>
5196static int bar(void *a) {
5197    __m256i x = *(__m256i *)a;
5198    return _mm256_testz_si256(x, x);
5199}
5200int main(int argc, char *argv[]) { return bar(argv[0]); }
5201EOF
5202  if compile_object "" ; then
5203    avx2_opt="yes"
5204  else
5205    avx2_opt="no"
5206  fi
5207fi
5208
5209########################################
5210# check if __[u]int128_t is usable.
5211
5212int128=no
5213cat > $TMPC << EOF
5214__int128_t a;
5215__uint128_t b;
5216int main (void) {
5217  a = a + b;
5218  b = a * b;
5219  a = a * a;
5220  return 0;
5221}
5222EOF
5223if compile_prog "" "" ; then
5224    int128=yes
5225fi
5226
5227#########################################
5228# See if 128-bit atomic operations are supported.
5229
5230atomic128=no
5231if test "$int128" = "yes"; then
5232  cat > $TMPC << EOF
5233int main(void)
5234{
5235  unsigned __int128 x = 0, y = 0;
5236  y = __atomic_load_16(&x, 0);
5237  __atomic_store_16(&x, y, 0);
5238  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5239  return 0;
5240}
5241EOF
5242  if compile_prog "" "" ; then
5243    atomic128=yes
5244  fi
5245fi
5246
5247cmpxchg128=no
5248if test "$int128" = yes -a "$atomic128" = no; then
5249  cat > $TMPC << EOF
5250int main(void)
5251{
5252  unsigned __int128 x = 0, y = 0;
5253  __sync_val_compare_and_swap_16(&x, y, x);
5254  return 0;
5255}
5256EOF
5257  if compile_prog "" "" ; then
5258    cmpxchg128=yes
5259  fi
5260fi
5261
5262#########################################
5263# See if 64-bit atomic operations are supported.
5264# Note that without __atomic builtins, we can only
5265# assume atomic loads/stores max at pointer size.
5266
5267cat > $TMPC << EOF
5268#include <stdint.h>
5269int main(void)
5270{
5271  uint64_t x = 0, y = 0;
5272#ifdef __ATOMIC_RELAXED
5273  y = __atomic_load_8(&x, 0);
5274  __atomic_store_8(&x, y, 0);
5275  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5276  __atomic_exchange_8(&x, y, 0);
5277  __atomic_fetch_add_8(&x, y, 0);
5278#else
5279  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5280  __sync_lock_test_and_set(&x, y);
5281  __sync_val_compare_and_swap(&x, y, 0);
5282  __sync_fetch_and_add(&x, y);
5283#endif
5284  return 0;
5285}
5286EOF
5287if compile_prog "" "" ; then
5288  atomic64=yes
5289fi
5290
5291########################################
5292# See if 16-byte vector operations are supported.
5293# Even without a vector unit the compiler may expand these.
5294# There is a bug in old GCC for PPC that crashes here.
5295# Unfortunately it's the system compiler for Centos 7.
5296
5297cat > $TMPC << EOF
5298typedef unsigned char U1 __attribute__((vector_size(16)));
5299typedef unsigned short U2 __attribute__((vector_size(16)));
5300typedef unsigned int U4 __attribute__((vector_size(16)));
5301typedef unsigned long long U8 __attribute__((vector_size(16)));
5302typedef signed char S1 __attribute__((vector_size(16)));
5303typedef signed short S2 __attribute__((vector_size(16)));
5304typedef signed int S4 __attribute__((vector_size(16)));
5305typedef signed long long S8 __attribute__((vector_size(16)));
5306static U1 a1, b1;
5307static U2 a2, b2;
5308static U4 a4, b4;
5309static U8 a8, b8;
5310static S1 c1;
5311static S2 c2;
5312static S4 c4;
5313static S8 c8;
5314static int i;
5315void helper(void *d, void *a, int shift, int i);
5316void helper(void *d, void *a, int shift, int i)
5317{
5318  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5319  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5320  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5321  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5322}
5323int main(void)
5324{
5325  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5326  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5327  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5328  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5329  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5330  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5331  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5332  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5333  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5334  return 0;
5335}
5336EOF
5337
5338vector16=no
5339if compile_prog "" "" ; then
5340  vector16=yes
5341fi
5342
5343########################################
5344# check if getauxval is available.
5345
5346getauxval=no
5347cat > $TMPC << EOF
5348#include <sys/auxv.h>
5349int main(void) {
5350  return getauxval(AT_HWCAP) == 0;
5351}
5352EOF
5353if compile_prog "" "" ; then
5354    getauxval=yes
5355fi
5356
5357########################################
5358# check if ccache is interfering with
5359# semantic analysis of macros
5360
5361unset CCACHE_CPP2
5362ccache_cpp2=no
5363cat > $TMPC << EOF
5364static const int Z = 1;
5365#define fn() ({ Z; })
5366#define TAUT(X) ((X) == Z)
5367#define PAREN(X, Y) (X == Y)
5368#define ID(X) (X)
5369int main(int argc, char *argv[])
5370{
5371    int x = 0, y = 0;
5372    x = ID(x);
5373    x = fn();
5374    fn();
5375    if (PAREN(x, y)) return 0;
5376    if (TAUT(Z)) return 0;
5377    return 0;
5378}
5379EOF
5380
5381if ! compile_object "-Werror"; then
5382    ccache_cpp2=yes
5383fi
5384
5385#################################################
5386# clang does not support glibc + FORTIFY_SOURCE.
5387
5388if test "$fortify_source" != "no"; then
5389  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5390    fortify_source="no";
5391  elif test -n "$cxx" && has $cxx &&
5392       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5393    fortify_source="no";
5394  else
5395    fortify_source="yes"
5396  fi
5397fi
5398
5399###############################################
5400# Check if copy_file_range is provided by glibc
5401have_copy_file_range=no
5402cat > $TMPC << EOF
5403#include <unistd.h>
5404int main(void) {
5405  copy_file_range(0, NULL, 0, NULL, 0, 0);
5406  return 0;
5407}
5408EOF
5409if compile_prog "" "" ; then
5410    have_copy_file_range=yes
5411fi
5412
5413##########################################
5414# check if struct fsxattr is available via linux/fs.h
5415
5416have_fsxattr=no
5417cat > $TMPC << EOF
5418#include <linux/fs.h>
5419struct fsxattr foo;
5420int main(void) {
5421  return 0;
5422}
5423EOF
5424if compile_prog "" "" ; then
5425    have_fsxattr=yes
5426fi
5427
5428##########################################
5429# check for usable membarrier system call
5430if test "$membarrier" = "yes"; then
5431    have_membarrier=no
5432    if test "$mingw32" = "yes" ; then
5433        have_membarrier=yes
5434    elif test "$linux" = "yes" ; then
5435        cat > $TMPC << EOF
5436    #include <linux/membarrier.h>
5437    #include <sys/syscall.h>
5438    #include <unistd.h>
5439    #include <stdlib.h>
5440    int main(void) {
5441        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5442        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5443	exit(0);
5444    }
5445EOF
5446        if compile_prog "" "" ; then
5447            have_membarrier=yes
5448        fi
5449    fi
5450    if test "$have_membarrier" = "no"; then
5451      feature_not_found "membarrier" "membarrier system call not available"
5452    fi
5453else
5454    # Do not enable it by default even for Mingw32, because it doesn't
5455    # work on Wine.
5456    membarrier=no
5457fi
5458
5459##########################################
5460# check if rtnetlink.h exists and is useful
5461have_rtnetlink=no
5462cat > $TMPC << EOF
5463#include <linux/rtnetlink.h>
5464int main(void) {
5465  return IFLA_PROTO_DOWN;
5466}
5467EOF
5468if compile_prog "" "" ; then
5469    have_rtnetlink=yes
5470fi
5471
5472##########################################
5473# check for usable AF_VSOCK environment
5474have_af_vsock=no
5475cat > $TMPC << EOF
5476#include <errno.h>
5477#include <sys/types.h>
5478#include <sys/socket.h>
5479#if !defined(AF_VSOCK)
5480# error missing AF_VSOCK flag
5481#endif
5482#include <linux/vm_sockets.h>
5483int main(void) {
5484    int sock, ret;
5485    struct sockaddr_vm svm;
5486    socklen_t len = sizeof(svm);
5487    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5488    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5489    if ((ret == -1) && (errno == ENOTCONN)) {
5490        return 0;
5491    }
5492    return -1;
5493}
5494EOF
5495if compile_prog "" "" ; then
5496    have_af_vsock=yes
5497fi
5498
5499##########################################
5500# check for usable AF_ALG environment
5501hava_afalg=no
5502cat > $TMPC << EOF
5503#include <errno.h>
5504#include <sys/types.h>
5505#include <sys/socket.h>
5506#include <linux/if_alg.h>
5507int main(void) {
5508    int sock;
5509    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5510    return sock;
5511}
5512EOF
5513if compile_prog "" "" ; then
5514    have_afalg=yes
5515fi
5516if test "$crypto_afalg" = "yes"
5517then
5518    if test "$have_afalg" != "yes"
5519    then
5520	error_exit "AF_ALG requested but could not be detected"
5521    fi
5522fi
5523
5524
5525#################################################
5526# Check to see if we have the Hypervisor framework
5527if [ "$darwin" = "yes" ] ; then
5528  cat > $TMPC << EOF
5529#include <Hypervisor/hv.h>
5530int main() { return 0;}
5531EOF
5532  if ! compile_object ""; then
5533    hvf='no'
5534  else
5535    hvf='yes'
5536    LDFLAGS="-framework Hypervisor $LDFLAGS"
5537  fi
5538fi
5539
5540#################################################
5541# Sparc implicitly links with --relax, which is
5542# incompatible with -r, so --no-relax should be
5543# given. It does no harm to give it on other
5544# platforms too.
5545
5546# Note: the prototype is needed since QEMU_CFLAGS
5547#       contains -Wmissing-prototypes
5548cat > $TMPC << EOF
5549extern int foo(void);
5550int foo(void) { return 0; }
5551EOF
5552if ! compile_object ""; then
5553  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5554fi
5555for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5556  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5557    LD_REL_FLAGS=$i
5558    break
5559  fi
5560done
5561if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5562  feature_not_found "modules" "Cannot find how to build relocatable objects"
5563fi
5564
5565##########################################
5566# check for sysmacros.h
5567
5568have_sysmacros=no
5569cat > $TMPC << EOF
5570#include <sys/sysmacros.h>
5571int main(void) {
5572    return makedev(0, 0);
5573}
5574EOF
5575if compile_prog "" "" ; then
5576    have_sysmacros=yes
5577fi
5578
5579##########################################
5580# Veritas HyperScale block driver VxHS
5581# Check if libvxhs is installed
5582
5583if test "$vxhs" != "no" ; then
5584  cat > $TMPC <<EOF
5585#include <stdint.h>
5586#include <qnio/qnio_api.h>
5587
5588void *vxhs_callback;
5589
5590int main(void) {
5591    iio_init(QNIO_VERSION, vxhs_callback);
5592    return 0;
5593}
5594EOF
5595  vxhs_libs="-lvxhs -lssl"
5596  if compile_prog "" "$vxhs_libs" ; then
5597    vxhs=yes
5598  else
5599    if test "$vxhs" = "yes" ; then
5600      feature_not_found "vxhs block device" "Install libvxhs See github"
5601    fi
5602    vxhs=no
5603  fi
5604fi
5605
5606##########################################
5607# check for _Static_assert()
5608
5609have_static_assert=no
5610cat > $TMPC << EOF
5611_Static_assert(1, "success");
5612int main(void) {
5613    return 0;
5614}
5615EOF
5616if compile_prog "" "" ; then
5617    have_static_assert=yes
5618fi
5619
5620##########################################
5621# check for utmpx.h, it is missing e.g. on OpenBSD
5622
5623have_utmpx=no
5624cat > $TMPC << EOF
5625#include <utmpx.h>
5626struct utmpx user_info;
5627int main(void) {
5628    return 0;
5629}
5630EOF
5631if compile_prog "" "" ; then
5632    have_utmpx=yes
5633fi
5634
5635##########################################
5636# checks for sanitizers
5637
5638have_asan=no
5639have_ubsan=no
5640have_asan_iface_h=no
5641have_asan_iface_fiber=no
5642
5643if test "$sanitizers" = "yes" ; then
5644  write_c_skeleton
5645  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5646      have_asan=yes
5647  fi
5648
5649  # we could use a simple skeleton for flags checks, but this also
5650  # detect the static linking issue of ubsan, see also:
5651  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5652  cat > $TMPC << EOF
5653#include <stdlib.h>
5654int main(void) {
5655    void *tmp = malloc(10);
5656    return *(int *)(tmp + 2);
5657}
5658EOF
5659  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5660      have_ubsan=yes
5661  fi
5662
5663  if check_include "sanitizer/asan_interface.h" ; then
5664      have_asan_iface_h=yes
5665  fi
5666
5667  cat > $TMPC << EOF
5668#include <sanitizer/asan_interface.h>
5669int main(void) {
5670  __sanitizer_start_switch_fiber(0, 0, 0);
5671  return 0;
5672}
5673EOF
5674  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5675      have_asan_iface_fiber=yes
5676  fi
5677fi
5678
5679##########################################
5680# Docker and cross-compiler support
5681#
5682# This is specifically for building test
5683# cases for foreign architectures, not
5684# cross-compiling QEMU itself.
5685
5686if has "docker"; then
5687    docker=$($python $source_path/tests/docker/docker.py probe)
5688fi
5689
5690##########################################
5691# check for libpmem
5692
5693if test "$libpmem" != "no"; then
5694	if $pkg_config --exists "libpmem"; then
5695		libpmem="yes"
5696		libpmem_libs=$($pkg_config --libs libpmem)
5697		libpmem_cflags=$($pkg_config --cflags libpmem)
5698		libs_softmmu="$libs_softmmu $libpmem_libs"
5699		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5700	else
5701		if test "$libpmem" = "yes" ; then
5702			feature_not_found "libpmem" "Install nvml or pmdk"
5703		fi
5704		libpmem="no"
5705	fi
5706fi
5707
5708##########################################
5709# End of CC checks
5710# After here, no more $cc or $ld runs
5711
5712write_c_skeleton
5713
5714if test "$gcov" = "yes" ; then
5715  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5716  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5717elif test "$fortify_source" = "yes" ; then
5718  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5719elif test "$debug" = "no"; then
5720  CFLAGS="-O2 $CFLAGS"
5721fi
5722
5723if test "$have_asan" = "yes"; then
5724  CFLAGS="-fsanitize=address $CFLAGS"
5725  if test "$have_asan_iface_h" = "no" ; then
5726      echo "ASAN build enabled, but ASAN header missing." \
5727           "Without code annotation, the report may be inferior."
5728  elif test "$have_asan_iface_fiber" = "no" ; then
5729      echo "ASAN build enabled, but ASAN header is too old." \
5730           "Without code annotation, the report may be inferior."
5731  fi
5732fi
5733if test "$have_ubsan" = "yes"; then
5734  CFLAGS="-fsanitize=undefined $CFLAGS"
5735fi
5736
5737##########################################
5738# Do we have libnfs
5739if test "$libnfs" != "no" ; then
5740  if $pkg_config --atleast-version=1.9.3 libnfs; then
5741    libnfs="yes"
5742    libnfs_libs=$($pkg_config --libs libnfs)
5743  else
5744    if test "$libnfs" = "yes" ; then
5745      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5746    fi
5747    libnfs="no"
5748  fi
5749fi
5750
5751##########################################
5752# Do we have libudev
5753if test "$libudev" != "no" ; then
5754  if $pkg_config libudev && test "$static" != "yes"; then
5755    libudev="yes"
5756    libudev_libs=$($pkg_config --libs libudev)
5757  else
5758    libudev="no"
5759  fi
5760fi
5761
5762# Now we've finished running tests it's OK to add -Werror to the compiler flags
5763if test "$werror" = "yes"; then
5764    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5765fi
5766
5767if test "$solaris" = "no" ; then
5768    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5769        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5770    fi
5771fi
5772
5773# test if pod2man has --utf8 option
5774if pod2man --help | grep -q utf8; then
5775    POD2MAN="pod2man --utf8"
5776else
5777    POD2MAN="pod2man"
5778fi
5779
5780# Use ASLR, no-SEH and DEP if available
5781if test "$mingw32" = "yes" ; then
5782    for flag in --dynamicbase --no-seh --nxcompat; do
5783        if ld_has $flag ; then
5784            LDFLAGS="-Wl,$flag $LDFLAGS"
5785        fi
5786    done
5787fi
5788
5789qemu_confdir=$sysconfdir$confsuffix
5790qemu_moddir=$libdir$confsuffix
5791qemu_datadir=$datadir$confsuffix
5792qemu_localedir="$datadir/locale"
5793qemu_icondir="$datadir/icons"
5794qemu_desktopdir="$datadir/applications"
5795
5796# We can only support ivshmem if we have eventfd
5797if [ "$eventfd" = "yes" ]; then
5798  ivshmem=yes
5799fi
5800
5801tools=""
5802if test "$want_tools" = "yes" ; then
5803  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5804  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5805    tools="qemu-nbd\$(EXESUF) $tools"
5806  fi
5807  if [ "$ivshmem" = "yes" ]; then
5808    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5809  fi
5810  if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5811    tools="elf2dmp $tools"
5812  fi
5813fi
5814if test "$softmmu" = yes ; then
5815  if test "$linux" = yes; then
5816    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5817      virtfs=yes
5818      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5819    else
5820      if test "$virtfs" = yes; then
5821        error_exit "VirtFS requires libcap devel and libattr devel"
5822      fi
5823      virtfs=no
5824    fi
5825    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5826      mpath=yes
5827    else
5828      if test "$mpath" = yes; then
5829        error_exit "Multipath requires libmpathpersist devel"
5830      fi
5831      mpath=no
5832    fi
5833    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5834  else
5835    if test "$virtfs" = yes; then
5836      error_exit "VirtFS is supported only on Linux"
5837    fi
5838    virtfs=no
5839    if test "$mpath" = yes; then
5840      error_exit "Multipath is supported only on Linux"
5841    fi
5842    mpath=no
5843  fi
5844  if test "$xkbcommon" = "yes"; then
5845    tools="qemu-keymap\$(EXESUF) $tools"
5846  fi
5847fi
5848
5849# Probe for guest agent support/options
5850
5851if [ "$guest_agent" != "no" ]; then
5852  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5853      tools="qemu-ga $tools"
5854      guest_agent=yes
5855  elif [ "$guest_agent" != yes ]; then
5856      guest_agent=no
5857  else
5858      error_exit "Guest agent is not supported on this platform"
5859  fi
5860fi
5861
5862# Guest agent Window MSI  package
5863
5864if test "$guest_agent" != yes; then
5865  if test "$guest_agent_msi" = yes; then
5866    error_exit "MSI guest agent package requires guest agent enabled"
5867  fi
5868  guest_agent_msi=no
5869elif test "$mingw32" != "yes"; then
5870  if test "$guest_agent_msi" = "yes"; then
5871    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5872  fi
5873  guest_agent_msi=no
5874elif ! has wixl; then
5875  if test "$guest_agent_msi" = "yes"; then
5876    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5877  fi
5878  guest_agent_msi=no
5879else
5880  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5881  # disabled explicitly
5882  if test "$guest_agent_msi" != "no"; then
5883    guest_agent_msi=yes
5884  fi
5885fi
5886
5887if test "$guest_agent_msi" = "yes"; then
5888  if test "$guest_agent_with_vss" = "yes"; then
5889    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5890  fi
5891
5892  if test "$QEMU_GA_MANUFACTURER" = ""; then
5893    QEMU_GA_MANUFACTURER=QEMU
5894  fi
5895
5896  if test "$QEMU_GA_DISTRO" = ""; then
5897    QEMU_GA_DISTRO=Linux
5898  fi
5899
5900  if test "$QEMU_GA_VERSION" = ""; then
5901      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5902  fi
5903
5904  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5905
5906  case "$cpu" in
5907  x86_64)
5908    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5909    ;;
5910  i386)
5911    QEMU_GA_MSI_ARCH="-D Arch=32"
5912    ;;
5913  *)
5914    error_exit "CPU $cpu not supported for building installation package"
5915    ;;
5916  esac
5917fi
5918
5919# Mac OS X ships with a broken assembler
5920roms=
5921if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5922        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5923        "$softmmu" = yes ; then
5924    # Different host OS linkers have different ideas about the name of the ELF
5925    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5926    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5927    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5928        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5929            ld_i386_emulation="$emu"
5930            roms="optionrom"
5931            break
5932        fi
5933    done
5934fi
5935if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5936  roms="$roms spapr-rtas"
5937fi
5938
5939# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5940if test "$cpu" = "s390x" ; then
5941  write_c_skeleton
5942  if compile_prog "-march=z900" ""; then
5943    roms="$roms s390-ccw"
5944  fi
5945fi
5946
5947# Probe for the need for relocating the user-only binary.
5948if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5949  textseg_addr=
5950  case "$cpu" in
5951    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5952      # ??? Rationale for choosing this address
5953      textseg_addr=0x60000000
5954      ;;
5955    mips)
5956      # A 256M aligned address, high in the address space, with enough
5957      # room for the code_gen_buffer above it before the stack.
5958      textseg_addr=0x60000000
5959      ;;
5960  esac
5961  if [ -n "$textseg_addr" ]; then
5962    cat > $TMPC <<EOF
5963    int main(void) { return 0; }
5964EOF
5965    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5966    if ! compile_prog "" "$textseg_ldflags"; then
5967      # In case ld does not support -Ttext-segment, edit the default linker
5968      # script via sed to set the .text start addr.  This is needed on FreeBSD
5969      # at least.
5970      if ! $ld --verbose >/dev/null 2>&1; then
5971        error_exit \
5972            "We need to link the QEMU user mode binaries at a" \
5973            "specific text address. Unfortunately your linker" \
5974            "doesn't support either the -Ttext-segment option or" \
5975            "printing the default linker script with --verbose." \
5976            "If you don't want the user mode binaries, pass the" \
5977            "--disable-user option to configure."
5978      fi
5979
5980      $ld --verbose | sed \
5981        -e '1,/==================================================/d' \
5982        -e '/==================================================/,$d' \
5983        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5984        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5985      textseg_ldflags="-Wl,-T../config-host.ld"
5986    fi
5987  fi
5988fi
5989
5990# Check that the C++ compiler exists and works with the C compiler.
5991# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5992if has $cxx; then
5993    cat > $TMPC <<EOF
5994int c_function(void);
5995int main(void) { return c_function(); }
5996EOF
5997
5998    compile_object
5999
6000    cat > $TMPCXX <<EOF
6001extern "C" {
6002   int c_function(void);
6003}
6004int c_function(void) { return 42; }
6005EOF
6006
6007    update_cxxflags
6008
6009    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6010        # C++ compiler $cxx works ok with C compiler $cc
6011        :
6012    else
6013        echo "C++ compiler $cxx does not work with C compiler $cc"
6014        echo "Disabling C++ specific optional code"
6015        cxx=
6016    fi
6017else
6018    echo "No C++ compiler available; disabling C++ specific optional code"
6019    cxx=
6020fi
6021
6022echo_version() {
6023    if test "$1" = "yes" ; then
6024        echo "($2)"
6025    fi
6026}
6027
6028# prepend pixman and ftd flags after all config tests are done
6029QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6030QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6031libs_softmmu="$pixman_libs $libs_softmmu"
6032
6033echo "Install prefix    $prefix"
6034echo "BIOS directory    $(eval echo $qemu_datadir)"
6035echo "firmware path     $(eval echo $firmwarepath)"
6036echo "binary directory  $(eval echo $bindir)"
6037echo "library directory $(eval echo $libdir)"
6038echo "module directory  $(eval echo $qemu_moddir)"
6039echo "libexec directory $(eval echo $libexecdir)"
6040echo "include directory $(eval echo $includedir)"
6041echo "config directory  $(eval echo $sysconfdir)"
6042if test "$mingw32" = "no" ; then
6043echo "local state directory   $(eval echo $local_statedir)"
6044echo "Manual directory  $(eval echo $mandir)"
6045echo "ELF interp prefix $interp_prefix"
6046else
6047echo "local state directory   queried at runtime"
6048echo "Windows SDK       $win_sdk"
6049fi
6050echo "Source path       $source_path"
6051echo "GIT binary        $git"
6052echo "GIT submodules    $git_submodules"
6053echo "C compiler        $cc"
6054echo "Host C compiler   $host_cc"
6055echo "C++ compiler      $cxx"
6056echo "Objective-C compiler $objcc"
6057echo "ARFLAGS           $ARFLAGS"
6058echo "CFLAGS            $CFLAGS"
6059echo "QEMU_CFLAGS       $QEMU_CFLAGS"
6060echo "LDFLAGS           $LDFLAGS"
6061echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
6062echo "make              $make"
6063echo "install           $install"
6064echo "python            $python ($python_version)"
6065if test "$slirp" = "yes" ; then
6066    echo "smbd              $smbd"
6067fi
6068echo "module support    $modules"
6069echo "host CPU          $cpu"
6070echo "host big endian   $bigendian"
6071echo "target list       $target_list"
6072echo "gprof enabled     $gprof"
6073echo "sparse enabled    $sparse"
6074echo "strip binaries    $strip_opt"
6075echo "profiler          $profiler"
6076echo "static build      $static"
6077if test "$darwin" = "yes" ; then
6078    echo "Cocoa support     $cocoa"
6079fi
6080echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
6081echo "SDL image support $sdl_image"
6082echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
6083echo "GTK GL support    $gtk_gl"
6084echo "VTE support       $vte $(echo_version $vte $vteversion)"
6085echo "TLS priority      $tls_priority"
6086echo "GNUTLS support    $gnutls"
6087echo "libgcrypt         $gcrypt"
6088echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
6089echo "libtasn1          $tasn1"
6090echo "curses support    $curses"
6091echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6092echo "curl support      $curl"
6093echo "mingw32 support   $mingw32"
6094echo "Audio drivers     $audio_drv_list"
6095echo "Block whitelist (rw) $block_drv_rw_whitelist"
6096echo "Block whitelist (ro) $block_drv_ro_whitelist"
6097echo "VirtFS support    $virtfs"
6098echo "Multipath support $mpath"
6099echo "VNC support       $vnc"
6100if test "$vnc" = "yes" ; then
6101    echo "VNC SASL support  $vnc_sasl"
6102    echo "VNC JPEG support  $vnc_jpeg"
6103    echo "VNC PNG support   $vnc_png"
6104fi
6105if test -n "$sparc_cpu"; then
6106    echo "Target Sparc Arch $sparc_cpu"
6107fi
6108echo "xen support       $xen"
6109if test "$xen" = "yes" ; then
6110  echo "xen ctrl version  $xen_ctrl_version"
6111fi
6112echo "brlapi support    $brlapi"
6113echo "bluez  support    $bluez"
6114echo "Documentation     $docs"
6115echo "PIE               $pie"
6116echo "vde support       $vde"
6117echo "netmap support    $netmap"
6118echo "Linux AIO support $linux_aio"
6119echo "ATTR/XATTR support $attr"
6120echo "Install blobs     $blobs"
6121echo "KVM support       $kvm"
6122echo "HAX support       $hax"
6123echo "HVF support       $hvf"
6124echo "WHPX support      $whpx"
6125echo "TCG support       $tcg"
6126if test "$tcg" = "yes" ; then
6127    echo "TCG debug enabled $debug_tcg"
6128    echo "TCG interpreter   $tcg_interpreter"
6129fi
6130echo "malloc trim support $malloc_trim"
6131echo "RDMA support      $rdma"
6132echo "PVRDMA support    $pvrdma"
6133echo "fdt support       $fdt"
6134echo "membarrier        $membarrier"
6135echo "preadv support    $preadv"
6136echo "fdatasync         $fdatasync"
6137echo "madvise           $madvise"
6138echo "posix_madvise     $posix_madvise"
6139echo "posix_memalign    $posix_memalign"
6140echo "libcap-ng support $cap_ng"
6141echo "vhost-net support $vhost_net"
6142echo "vhost-crypto support $vhost_crypto"
6143echo "vhost-scsi support $vhost_scsi"
6144echo "vhost-vsock support $vhost_vsock"
6145echo "vhost-user support $vhost_user"
6146echo "Trace backends    $trace_backends"
6147if have_backend "simple"; then
6148echo "Trace output file $trace_file-<pid>"
6149fi
6150echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6151echo "rbd support       $rbd"
6152echo "xfsctl support    $xfs"
6153echo "smartcard support $smartcard"
6154echo "libusb            $libusb"
6155echo "usb net redir     $usb_redir"
6156echo "OpenGL support    $opengl"
6157echo "OpenGL dmabufs    $opengl_dmabuf"
6158echo "libiscsi support  $libiscsi"
6159echo "libnfs support    $libnfs"
6160echo "build guest agent $guest_agent"
6161echo "QGA VSS support   $guest_agent_with_vss"
6162echo "QGA w32 disk info $guest_agent_ntddscsi"
6163echo "QGA MSI support   $guest_agent_msi"
6164echo "seccomp support   $seccomp"
6165echo "coroutine backend $coroutine"
6166echo "coroutine pool    $coroutine_pool"
6167echo "debug stack usage $debug_stack_usage"
6168echo "mutex debugging   $debug_mutex"
6169echo "crypto afalg      $crypto_afalg"
6170echo "GlusterFS support $glusterfs"
6171echo "gcov              $gcov_tool"
6172echo "gcov enabled      $gcov"
6173echo "TPM support       $tpm"
6174echo "libssh2 support   $libssh2"
6175echo "TPM passthrough   $tpm_passthrough"
6176echo "TPM emulator      $tpm_emulator"
6177echo "QOM debugging     $qom_cast_debug"
6178echo "Live block migration $live_block_migration"
6179echo "lzo support       $lzo"
6180echo "snappy support    $snappy"
6181echo "bzip2 support     $bzip2"
6182echo "lzfse support     $lzfse"
6183echo "NUMA host support $numa"
6184echo "libxml2           $libxml2"
6185echo "tcmalloc support  $tcmalloc"
6186echo "jemalloc support  $jemalloc"
6187echo "avx2 optimization $avx2_opt"
6188echo "replication support $replication"
6189echo "VxHS block device $vxhs"
6190echo "bochs support     $bochs"
6191echo "cloop support     $cloop"
6192echo "dmg support       $dmg"
6193echo "qcow v1 support   $qcow1"
6194echo "vdi support       $vdi"
6195echo "vvfat support     $vvfat"
6196echo "qed support       $qed"
6197echo "parallels support $parallels"
6198echo "sheepdog support  $sheepdog"
6199echo "capstone          $capstone"
6200echo "docker            $docker"
6201echo "libpmem support   $libpmem"
6202echo "libudev           $libudev"
6203
6204if test "$sdl_too_old" = "yes"; then
6205echo "-> Your SDL version is too old - please upgrade to have SDL support"
6206fi
6207
6208if test "$sdlabi" = "1.2"; then
6209    echo
6210    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6211    echo "WARNING: future releases. Please switch to using SDL 2.0"
6212fi
6213
6214if test "$supported_cpu" = "no"; then
6215    echo
6216    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6217    echo
6218    echo "CPU host architecture $cpu support is not currently maintained."
6219    echo "The QEMU project intends to remove support for this host CPU in"
6220    echo "a future release if nobody volunteers to maintain it and to"
6221    echo "provide a build host for our continuous integration setup."
6222    echo "configure has succeeded and you can continue to build, but"
6223    echo "if you care about QEMU on this platform you should contact"
6224    echo "us upstream at qemu-devel@nongnu.org."
6225fi
6226
6227if test "$supported_os" = "no"; then
6228    echo
6229    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6230    echo
6231    echo "Host OS $targetos support is not currently maintained."
6232    echo "The QEMU project intends to remove support for this host OS in"
6233    echo "a future release if nobody volunteers to maintain it and to"
6234    echo "provide a build host for our continuous integration setup."
6235    echo "configure has succeeded and you can continue to build, but"
6236    echo "if you care about QEMU on this platform you should contact"
6237    echo "us upstream at qemu-devel@nongnu.org."
6238fi
6239
6240config_host_mak="config-host.mak"
6241
6242echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6243
6244echo "# Automatically generated by configure - do not modify" > $config_host_mak
6245echo >> $config_host_mak
6246
6247echo all: >> $config_host_mak
6248echo "prefix=$prefix" >> $config_host_mak
6249echo "bindir=$bindir" >> $config_host_mak
6250echo "libdir=$libdir" >> $config_host_mak
6251echo "libexecdir=$libexecdir" >> $config_host_mak
6252echo "includedir=$includedir" >> $config_host_mak
6253echo "mandir=$mandir" >> $config_host_mak
6254echo "sysconfdir=$sysconfdir" >> $config_host_mak
6255echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6256echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6257echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6258echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6259echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6260if test "$mingw32" = "no" ; then
6261  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6262fi
6263echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6264echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6265echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6266echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6267echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6268echo "GIT=$git" >> $config_host_mak
6269echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6270echo "GIT_UPDATE=$git_update" >> $config_host_mak
6271
6272echo "ARCH=$ARCH" >> $config_host_mak
6273
6274if test "$debug_tcg" = "yes" ; then
6275  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6276fi
6277if test "$strip_opt" = "yes" ; then
6278  echo "STRIP=${strip}" >> $config_host_mak
6279fi
6280if test "$bigendian" = "yes" ; then
6281  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6282fi
6283if test "$mingw32" = "yes" ; then
6284  echo "CONFIG_WIN32=y" >> $config_host_mak
6285  rc_version=$(cat $source_path/VERSION)
6286  version_major=${rc_version%%.*}
6287  rc_version=${rc_version#*.}
6288  version_minor=${rc_version%%.*}
6289  rc_version=${rc_version#*.}
6290  version_subminor=${rc_version%%.*}
6291  version_micro=0
6292  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6293  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6294  if test "$guest_agent_with_vss" = "yes" ; then
6295    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6296    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6297    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6298  fi
6299  if test "$guest_agent_ntddscsi" = "yes" ; then
6300    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6301  fi
6302  if test "$guest_agent_msi" = "yes"; then
6303    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6304    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6305    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6306    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6307    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6308    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6309    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6310  fi
6311else
6312  echo "CONFIG_POSIX=y" >> $config_host_mak
6313fi
6314
6315if test "$linux" = "yes" ; then
6316  echo "CONFIG_LINUX=y" >> $config_host_mak
6317fi
6318
6319if test "$darwin" = "yes" ; then
6320  echo "CONFIG_DARWIN=y" >> $config_host_mak
6321fi
6322
6323if test "$solaris" = "yes" ; then
6324  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6325fi
6326if test "$haiku" = "yes" ; then
6327  echo "CONFIG_HAIKU=y" >> $config_host_mak
6328fi
6329if test "$static" = "yes" ; then
6330  echo "CONFIG_STATIC=y" >> $config_host_mak
6331fi
6332if test "$profiler" = "yes" ; then
6333  echo "CONFIG_PROFILER=y" >> $config_host_mak
6334fi
6335if test "$slirp" = "yes" ; then
6336  echo "CONFIG_SLIRP=y" >> $config_host_mak
6337  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6338fi
6339if test "$vde" = "yes" ; then
6340  echo "CONFIG_VDE=y" >> $config_host_mak
6341  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6342fi
6343if test "$netmap" = "yes" ; then
6344  echo "CONFIG_NETMAP=y" >> $config_host_mak
6345fi
6346if test "$l2tpv3" = "yes" ; then
6347  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6348fi
6349if test "$cap_ng" = "yes" ; then
6350  echo "CONFIG_LIBCAP=y" >> $config_host_mak
6351fi
6352echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6353for drv in $audio_drv_list; do
6354    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6355    case "$drv" in
6356	alsa | oss | pa | sdl)
6357	    echo "$def=m" >> $config_host_mak ;;
6358	*)
6359	    echo "$def=y" >> $config_host_mak ;;
6360    esac
6361done
6362echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6363echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6364echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6365echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6366echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6367if test "$audio_pt_int" = "yes" ; then
6368  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6369fi
6370if test "$audio_win_int" = "yes" ; then
6371  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6372fi
6373echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6374echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6375if test "$vnc" = "yes" ; then
6376  echo "CONFIG_VNC=y" >> $config_host_mak
6377fi
6378if test "$vnc_sasl" = "yes" ; then
6379  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6380fi
6381if test "$vnc_jpeg" = "yes" ; then
6382  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6383fi
6384if test "$vnc_png" = "yes" ; then
6385  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6386fi
6387if test "$xkbcommon" = "yes" ; then
6388  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6389  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6390fi
6391if test "$fnmatch" = "yes" ; then
6392  echo "CONFIG_FNMATCH=y" >> $config_host_mak
6393fi
6394if test "$xfs" = "yes" ; then
6395  echo "CONFIG_XFS=y" >> $config_host_mak
6396fi
6397qemu_version=$(head $source_path/VERSION)
6398echo "VERSION=$qemu_version" >>$config_host_mak
6399echo "PKGVERSION=$pkgversion" >>$config_host_mak
6400echo "SRC_PATH=$source_path" >> $config_host_mak
6401echo "TARGET_DIRS=$target_list" >> $config_host_mak
6402if [ "$docs" = "yes" ] ; then
6403  echo "BUILD_DOCS=yes" >> $config_host_mak
6404fi
6405if test "$modules" = "yes"; then
6406  # $shacmd can generate a hash started with digit, which the compiler doesn't
6407  # like as an symbol. So prefix it with an underscore
6408  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6409  echo "CONFIG_MODULES=y" >> $config_host_mak
6410fi
6411if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6412  echo "CONFIG_X11=y" >> $config_host_mak
6413  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6414  echo "X11_LIBS=$x11_libs" >> $config_host_mak
6415fi
6416if test "$sdl" = "yes" ; then
6417  echo "CONFIG_SDL=m" >> $config_host_mak
6418  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6419  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6420  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6421  if test "$sdl_image" = "yes" ; then
6422      echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6423  fi
6424fi
6425if test "$cocoa" = "yes" ; then
6426  echo "CONFIG_COCOA=y" >> $config_host_mak
6427fi
6428if test "$curses" = "yes" ; then
6429  echo "CONFIG_CURSES=m" >> $config_host_mak
6430  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6431  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6432fi
6433if test "$pipe2" = "yes" ; then
6434  echo "CONFIG_PIPE2=y" >> $config_host_mak
6435fi
6436if test "$accept4" = "yes" ; then
6437  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6438fi
6439if test "$splice" = "yes" ; then
6440  echo "CONFIG_SPLICE=y" >> $config_host_mak
6441fi
6442if test "$eventfd" = "yes" ; then
6443  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6444fi
6445if test "$memfd" = "yes" ; then
6446  echo "CONFIG_MEMFD=y" >> $config_host_mak
6447fi
6448if test "$have_usbfs" = "yes" ; then
6449  echo "CONFIG_USBFS=y" >> $config_host_mak
6450fi
6451if test "$fallocate" = "yes" ; then
6452  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6453fi
6454if test "$fallocate_punch_hole" = "yes" ; then
6455  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6456fi
6457if test "$fallocate_zero_range" = "yes" ; then
6458  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6459fi
6460if test "$posix_fallocate" = "yes" ; then
6461  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6462fi
6463if test "$sync_file_range" = "yes" ; then
6464  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6465fi
6466if test "$fiemap" = "yes" ; then
6467  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6468fi
6469if test "$dup3" = "yes" ; then
6470  echo "CONFIG_DUP3=y" >> $config_host_mak
6471fi
6472if test "$ppoll" = "yes" ; then
6473  echo "CONFIG_PPOLL=y" >> $config_host_mak
6474fi
6475if test "$prctl_pr_set_timerslack" = "yes" ; then
6476  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6477fi
6478if test "$epoll" = "yes" ; then
6479  echo "CONFIG_EPOLL=y" >> $config_host_mak
6480fi
6481if test "$epoll_create1" = "yes" ; then
6482  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6483fi
6484if test "$sendfile" = "yes" ; then
6485  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6486fi
6487if test "$timerfd" = "yes" ; then
6488  echo "CONFIG_TIMERFD=y" >> $config_host_mak
6489fi
6490if test "$setns" = "yes" ; then
6491  echo "CONFIG_SETNS=y" >> $config_host_mak
6492fi
6493if test "$clock_adjtime" = "yes" ; then
6494  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6495fi
6496if test "$syncfs" = "yes" ; then
6497  echo "CONFIG_SYNCFS=y" >> $config_host_mak
6498fi
6499if test "$inotify" = "yes" ; then
6500  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6501fi
6502if test "$inotify1" = "yes" ; then
6503  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6504fi
6505if test "$sem_timedwait" = "yes" ; then
6506  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6507fi
6508if test "$strchrnul" = "yes" ; then
6509  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6510fi
6511if test "$byteswap_h" = "yes" ; then
6512  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6513fi
6514if test "$bswap_h" = "yes" ; then
6515  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6516fi
6517if test "$curl" = "yes" ; then
6518  echo "CONFIG_CURL=m" >> $config_host_mak
6519  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6520  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6521fi
6522if test "$brlapi" = "yes" ; then
6523  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6524  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6525fi
6526if test "$bluez" = "yes" ; then
6527  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6528  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6529fi
6530if test "$gtk" = "yes" ; then
6531  echo "CONFIG_GTK=m" >> $config_host_mak
6532  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6533  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6534  if test "$gtk_gl" = "yes" ; then
6535    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6536  fi
6537fi
6538echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6539if test "$gnutls" = "yes" ; then
6540  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6541fi
6542if test "$gcrypt" = "yes" ; then
6543  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6544  if test "$gcrypt_hmac" = "yes" ; then
6545    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6546  fi
6547fi
6548if test "$nettle" = "yes" ; then
6549  echo "CONFIG_NETTLE=y" >> $config_host_mak
6550  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6551fi
6552if test "$tasn1" = "yes" ; then
6553  echo "CONFIG_TASN1=y" >> $config_host_mak
6554fi
6555if test "$have_ifaddrs_h" = "yes" ; then
6556    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6557fi
6558if test "$have_broken_size_max" = "yes" ; then
6559    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6560fi
6561
6562# Work around a system header bug with some kernel/XFS header
6563# versions where they both try to define 'struct fsxattr':
6564# xfs headers will not try to redefine structs from linux headers
6565# if this macro is set.
6566if test "$have_fsxattr" = "yes" ; then
6567    echo "HAVE_FSXATTR=y" >> $config_host_mak
6568fi
6569if test "$have_copy_file_range" = "yes" ; then
6570    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6571fi
6572if test "$vte" = "yes" ; then
6573  echo "CONFIG_VTE=y" >> $config_host_mak
6574  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6575  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6576fi
6577if test "$virglrenderer" = "yes" ; then
6578  echo "CONFIG_VIRGL=y" >> $config_host_mak
6579  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6580  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6581fi
6582if test "$xen" = "yes" ; then
6583  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6584  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6585fi
6586if test "$linux_aio" = "yes" ; then
6587  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6588fi
6589if test "$attr" = "yes" ; then
6590  echo "CONFIG_ATTR=y" >> $config_host_mak
6591fi
6592if test "$libattr" = "yes" ; then
6593  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6594fi
6595if test "$virtfs" = "yes" ; then
6596  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6597fi
6598if test "$mpath" = "yes" ; then
6599  echo "CONFIG_MPATH=y" >> $config_host_mak
6600  if test "$mpathpersist_new_api" = "yes"; then
6601    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6602  fi
6603fi
6604if test "$vhost_scsi" = "yes" ; then
6605  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6606fi
6607if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6608  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6609fi
6610if test "$vhost_crypto" = "yes" ; then
6611  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6612fi
6613if test "$vhost_vsock" = "yes" ; then
6614  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6615fi
6616if test "$vhost_user" = "yes" ; then
6617  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6618fi
6619if test "$blobs" = "yes" ; then
6620  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6621fi
6622if test "$iovec" = "yes" ; then
6623  echo "CONFIG_IOVEC=y" >> $config_host_mak
6624fi
6625if test "$preadv" = "yes" ; then
6626  echo "CONFIG_PREADV=y" >> $config_host_mak
6627fi
6628if test "$fdt" != "no" ; then
6629  echo "CONFIG_FDT=y" >> $config_host_mak
6630fi
6631if test "$membarrier" = "yes" ; then
6632  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6633fi
6634if test "$signalfd" = "yes" ; then
6635  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6636fi
6637if test "$tcg" = "yes"; then
6638  echo "CONFIG_TCG=y" >> $config_host_mak
6639  if test "$tcg_interpreter" = "yes" ; then
6640    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6641  fi
6642fi
6643if test "$fdatasync" = "yes" ; then
6644  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6645fi
6646if test "$madvise" = "yes" ; then
6647  echo "CONFIG_MADVISE=y" >> $config_host_mak
6648fi
6649if test "$posix_madvise" = "yes" ; then
6650  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6651fi
6652if test "$posix_memalign" = "yes" ; then
6653  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6654fi
6655
6656if test "$spice" = "yes" ; then
6657  echo "CONFIG_SPICE=y" >> $config_host_mak
6658fi
6659
6660if test "$smartcard" = "yes" ; then
6661  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6662  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6663  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6664fi
6665
6666if test "$libusb" = "yes" ; then
6667  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6668  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6669  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6670fi
6671
6672if test "$usb_redir" = "yes" ; then
6673  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6674  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6675  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6676fi
6677
6678if test "$opengl" = "yes" ; then
6679  echo "CONFIG_OPENGL=y" >> $config_host_mak
6680  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6681  if test "$opengl_dmabuf" = "yes" ; then
6682    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6683  fi
6684fi
6685
6686if test "$malloc_trim" = "yes" ; then
6687  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6688fi
6689
6690if test "$avx2_opt" = "yes" ; then
6691  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6692fi
6693
6694if test "$lzo" = "yes" ; then
6695  echo "CONFIG_LZO=y" >> $config_host_mak
6696fi
6697
6698if test "$snappy" = "yes" ; then
6699  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6700fi
6701
6702if test "$bzip2" = "yes" ; then
6703  echo "CONFIG_BZIP2=y" >> $config_host_mak
6704  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6705fi
6706
6707if test "$lzfse" = "yes" ; then
6708  echo "CONFIG_LZFSE=y" >> $config_host_mak
6709  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6710fi
6711
6712if test "$libiscsi" = "yes" ; then
6713  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6714  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6715  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6716fi
6717
6718if test "$libnfs" = "yes" ; then
6719  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6720  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6721fi
6722
6723if test "$seccomp" = "yes"; then
6724  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6725  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6726  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6727fi
6728
6729# XXX: suppress that
6730if [ "$bsd" = "yes" ] ; then
6731  echo "CONFIG_BSD=y" >> $config_host_mak
6732fi
6733
6734if test "$localtime_r" = "yes" ; then
6735  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6736fi
6737if test "$qom_cast_debug" = "yes" ; then
6738  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6739fi
6740if test "$rbd" = "yes" ; then
6741  echo "CONFIG_RBD=m" >> $config_host_mak
6742  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6743  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6744fi
6745
6746echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6747if test "$coroutine_pool" = "yes" ; then
6748  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6749else
6750  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6751fi
6752
6753if test "$debug_stack_usage" = "yes" ; then
6754  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6755fi
6756
6757if test "$crypto_afalg" = "yes" ; then
6758  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6759fi
6760
6761if test "$open_by_handle_at" = "yes" ; then
6762  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6763fi
6764
6765if test "$linux_magic_h" = "yes" ; then
6766  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6767fi
6768
6769if test "$pragma_diagnostic_available" = "yes" ; then
6770  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6771fi
6772
6773if test "$valgrind_h" = "yes" ; then
6774  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6775fi
6776
6777if test "$have_asan_iface_fiber" = "yes" ; then
6778    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6779fi
6780
6781if test "$has_environ" = "yes" ; then
6782  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6783fi
6784
6785if test "$cpuid_h" = "yes" ; then
6786  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6787fi
6788
6789if test "$int128" = "yes" ; then
6790  echo "CONFIG_INT128=y" >> $config_host_mak
6791fi
6792
6793if test "$atomic128" = "yes" ; then
6794  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6795fi
6796
6797if test "$cmpxchg128" = "yes" ; then
6798  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6799fi
6800
6801if test "$atomic64" = "yes" ; then
6802  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6803fi
6804
6805if test "$vector16" = "yes" ; then
6806  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6807fi
6808
6809if test "$getauxval" = "yes" ; then
6810  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6811fi
6812
6813if test "$glusterfs" = "yes" ; then
6814  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6815  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6816  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6817fi
6818
6819if test "$glusterfs_xlator_opt" = "yes" ; then
6820  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6821fi
6822
6823if test "$glusterfs_discard" = "yes" ; then
6824  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6825fi
6826
6827if test "$glusterfs_fallocate" = "yes" ; then
6828  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6829fi
6830
6831if test "$glusterfs_zerofill" = "yes" ; then
6832  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6833fi
6834
6835if test "$libssh2" = "yes" ; then
6836  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6837  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6838  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6839fi
6840
6841if test "$live_block_migration" = "yes" ; then
6842  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6843fi
6844
6845if test "$tpm" = "yes"; then
6846  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6847  # TPM passthrough support?
6848  if test "$tpm_passthrough" = "yes"; then
6849    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6850  fi
6851  # TPM emulator support?
6852  if test "$tpm_emulator" = "yes"; then
6853    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6854  fi
6855fi
6856
6857echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6858if have_backend "nop"; then
6859  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6860fi
6861if have_backend "simple"; then
6862  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6863  # Set the appropriate trace file.
6864  trace_file="\"$trace_file-\" FMT_pid"
6865fi
6866if have_backend "log"; then
6867  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6868fi
6869if have_backend "ust"; then
6870  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6871fi
6872if have_backend "dtrace"; then
6873  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6874  if test "$trace_backend_stap" = "yes" ; then
6875    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6876  fi
6877fi
6878if have_backend "ftrace"; then
6879  if test "$linux" = "yes" ; then
6880    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6881  else
6882    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6883  fi
6884fi
6885if have_backend "syslog"; then
6886  if test "$posix_syslog" = "yes" ; then
6887    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6888  else
6889    feature_not_found "syslog(trace backend)" "syslog not available"
6890  fi
6891fi
6892echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6893
6894if test "$rdma" = "yes" ; then
6895  echo "CONFIG_RDMA=y" >> $config_host_mak
6896  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6897fi
6898
6899if test "$pvrdma" = "yes" ; then
6900  echo "CONFIG_PVRDMA=y" >> $config_host_mak
6901fi
6902
6903if test "$have_rtnetlink" = "yes" ; then
6904  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6905fi
6906
6907if test "$libxml2" = "yes" ; then
6908  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6909  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6910  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6911fi
6912
6913if test "$replication" = "yes" ; then
6914  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6915fi
6916
6917if test "$have_af_vsock" = "yes" ; then
6918  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6919fi
6920
6921if test "$have_sysmacros" = "yes" ; then
6922  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6923fi
6924
6925if test "$have_static_assert" = "yes" ; then
6926  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6927fi
6928
6929if test "$have_utmpx" = "yes" ; then
6930  echo "HAVE_UTMPX=y" >> $config_host_mak
6931fi
6932
6933if test "$ivshmem" = "yes" ; then
6934  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6935fi
6936if test "$capstone" != "no" ; then
6937  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6938fi
6939if test "$debug_mutex" = "yes" ; then
6940  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6941fi
6942
6943# Hold two types of flag:
6944#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6945#                                     a thread we have a handle to
6946#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6947#                                     platform
6948if test "$pthread_setname_np_w_tid" = "yes" ; then
6949  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6950  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6951elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6952  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6953  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6954fi
6955
6956if test "$vxhs" = "yes" ; then
6957  echo "CONFIG_VXHS=y" >> $config_host_mak
6958  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6959fi
6960
6961if test "$libpmem" = "yes" ; then
6962  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6963fi
6964
6965if test "$bochs" = "yes" ; then
6966  echo "CONFIG_BOCHS=y" >> $config_host_mak
6967fi
6968if test "$cloop" = "yes" ; then
6969  echo "CONFIG_CLOOP=y" >> $config_host_mak
6970fi
6971if test "$dmg" = "yes" ; then
6972  echo "CONFIG_DMG=y" >> $config_host_mak
6973fi
6974if test "$qcow1" = "yes" ; then
6975  echo "CONFIG_QCOW1=y" >> $config_host_mak
6976fi
6977if test "$vdi" = "yes" ; then
6978  echo "CONFIG_VDI=y" >> $config_host_mak
6979fi
6980if test "$vvfat" = "yes" ; then
6981  echo "CONFIG_VVFAT=y" >> $config_host_mak
6982fi
6983if test "$qed" = "yes" ; then
6984  echo "CONFIG_QED=y" >> $config_host_mak
6985fi
6986if test "$parallels" = "yes" ; then
6987  echo "CONFIG_PARALLELS=y" >> $config_host_mak
6988fi
6989if test "$sheepdog" = "yes" ; then
6990  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6991fi
6992
6993if test "$tcg_interpreter" = "yes"; then
6994  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6995elif test "$ARCH" = "sparc64" ; then
6996  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6997elif test "$ARCH" = "s390x" ; then
6998  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6999elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
7000  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7001elif test "$ARCH" = "ppc64" ; then
7002  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7003elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
7004  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7005else
7006  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7007fi
7008QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7009
7010echo "TOOLS=$tools" >> $config_host_mak
7011echo "ROMS=$roms" >> $config_host_mak
7012echo "MAKE=$make" >> $config_host_mak
7013echo "INSTALL=$install" >> $config_host_mak
7014echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7015echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7016echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7017echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7018echo "PYTHON=$python" >> $config_host_mak
7019echo "PYTHON_VERSION=$python_version" >> $config_host_mak
7020echo "CC=$cc" >> $config_host_mak
7021if $iasl -h > /dev/null 2>&1; then
7022  echo "IASL=$iasl" >> $config_host_mak
7023fi
7024echo "HOST_CC=$host_cc" >> $config_host_mak
7025echo "CXX=$cxx" >> $config_host_mak
7026echo "OBJCC=$objcc" >> $config_host_mak
7027echo "AR=$ar" >> $config_host_mak
7028echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7029echo "AS=$as" >> $config_host_mak
7030echo "CCAS=$ccas" >> $config_host_mak
7031echo "CPP=$cpp" >> $config_host_mak
7032echo "OBJCOPY=$objcopy" >> $config_host_mak
7033echo "LD=$ld" >> $config_host_mak
7034echo "RANLIB=$ranlib" >> $config_host_mak
7035echo "NM=$nm" >> $config_host_mak
7036echo "WINDRES=$windres" >> $config_host_mak
7037echo "CFLAGS=$CFLAGS" >> $config_host_mak
7038echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7039echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7040echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7041echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7042if test "$sparse" = "yes" ; then
7043  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
7044  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
7045  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
7046  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
7047  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7048fi
7049if test "$cross_prefix" != ""; then
7050  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
7051else
7052  echo "AUTOCONF_HOST := "                             >> $config_host_mak
7053fi
7054echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7055echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7056echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7057echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7058echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7059echo "LIBS+=$LIBS" >> $config_host_mak
7060echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7061echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7062echo "EXESUF=$EXESUF" >> $config_host_mak
7063echo "DSOSUF=$DSOSUF" >> $config_host_mak
7064echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7065echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7066echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7067echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7068echo "POD2MAN=$POD2MAN" >> $config_host_mak
7069if test "$gcov" = "yes" ; then
7070  echo "CONFIG_GCOV=y" >> $config_host_mak
7071  echo "GCOV=$gcov_tool" >> $config_host_mak
7072fi
7073
7074if test "$docker" != "no"; then
7075    echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7076fi
7077
7078if test "$libudev" != "no"; then
7079    echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7080    echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7081fi
7082
7083# use included Linux headers
7084if test "$linux" = "yes" ; then
7085  mkdir -p linux-headers
7086  case "$cpu" in
7087  i386|x86_64|x32)
7088    linux_arch=x86
7089    ;;
7090  ppc|ppc64)
7091    linux_arch=powerpc
7092    ;;
7093  s390x)
7094    linux_arch=s390
7095    ;;
7096  aarch64)
7097    linux_arch=arm64
7098    ;;
7099  mips64)
7100    linux_arch=mips
7101    ;;
7102  *)
7103    # For most CPUs the kernel architecture name and QEMU CPU name match.
7104    linux_arch="$cpu"
7105    ;;
7106  esac
7107    # For non-KVM architectures we will not have asm headers
7108    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7109      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7110    fi
7111fi
7112
7113for target in $target_list; do
7114target_dir="$target"
7115config_target_mak=$target_dir/config-target.mak
7116target_name=$(echo $target | cut -d '-' -f 1)
7117target_bigendian="no"
7118
7119case "$target_name" in
7120  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7121  target_bigendian=yes
7122  ;;
7123esac
7124target_softmmu="no"
7125target_user_only="no"
7126target_linux_user="no"
7127target_bsd_user="no"
7128case "$target" in
7129  ${target_name}-softmmu)
7130    target_softmmu="yes"
7131    ;;
7132  ${target_name}-linux-user)
7133    target_user_only="yes"
7134    target_linux_user="yes"
7135    ;;
7136  ${target_name}-bsd-user)
7137    target_user_only="yes"
7138    target_bsd_user="yes"
7139    ;;
7140  *)
7141    error_exit "Target '$target' not recognised"
7142    exit 1
7143    ;;
7144esac
7145
7146target_compiler=""
7147target_compiler_static=""
7148target_compiler_cflags=""
7149
7150mkdir -p $target_dir
7151echo "# Automatically generated by configure - do not modify" > $config_target_mak
7152
7153bflt="no"
7154mttcg="no"
7155interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7156gdb_xml_files=""
7157
7158TARGET_ARCH="$target_name"
7159TARGET_BASE_ARCH=""
7160TARGET_ABI_DIR=""
7161
7162case "$target_name" in
7163  i386)
7164    mttcg="yes"
7165    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
7166    target_compiler=$cross_cc_i386
7167    target_compiler_cflags=$cross_cc_ccflags_i386
7168  ;;
7169  x86_64)
7170    TARGET_BASE_ARCH=i386
7171    mttcg="yes"
7172    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
7173    target_compiler=$cross_cc_x86_64
7174  ;;
7175  alpha)
7176    mttcg="yes"
7177    target_compiler=$cross_cc_alpha
7178  ;;
7179  arm|armeb)
7180    TARGET_ARCH=arm
7181    bflt="yes"
7182    mttcg="yes"
7183    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7184    target_compiler=$cross_cc_arm
7185    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7186  ;;
7187  aarch64|aarch64_be)
7188    TARGET_ARCH=aarch64
7189    TARGET_BASE_ARCH=arm
7190    bflt="yes"
7191    mttcg="yes"
7192    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7193    target_compiler=$cross_cc_aarch64
7194    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7195  ;;
7196  cris)
7197    target_compiler=$cross_cc_cris
7198  ;;
7199  hppa)
7200    mttcg="yes"
7201    target_compiler=$cross_cc_hppa
7202  ;;
7203  lm32)
7204    target_compiler=$cross_cc_lm32
7205  ;;
7206  m68k)
7207    bflt="yes"
7208    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7209    target_compiler=$cross_cc_m68k
7210  ;;
7211  microblaze|microblazeel)
7212    TARGET_ARCH=microblaze
7213    bflt="yes"
7214    echo "TARGET_ABI32=y" >> $config_target_mak
7215    target_compiler=$cross_cc_microblaze
7216  ;;
7217  mips|mipsel)
7218    TARGET_ARCH=mips
7219    target_compiler=$cross_cc_mips
7220    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7221  ;;
7222  mipsn32|mipsn32el)
7223    TARGET_ARCH=mips64
7224    TARGET_BASE_ARCH=mips
7225    target_compiler=$cross_cc_mipsn32
7226    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7227    echo "TARGET_ABI32=y" >> $config_target_mak
7228  ;;
7229  mips64|mips64el)
7230    TARGET_ARCH=mips64
7231    TARGET_BASE_ARCH=mips
7232    target_compiler=$cross_cc_mips64
7233    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7234  ;;
7235  moxie)
7236    target_compiler=$cross_cc_moxie
7237  ;;
7238  nios2)
7239    target_compiler=$cross_cc_nios2
7240  ;;
7241  or1k)
7242    target_compiler=$cross_cc_or1k
7243    TARGET_ARCH=openrisc
7244    TARGET_BASE_ARCH=openrisc
7245  ;;
7246  ppc)
7247    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7248    target_compiler=$cross_cc_powerpc
7249  ;;
7250  ppc64)
7251    TARGET_BASE_ARCH=ppc
7252    TARGET_ABI_DIR=ppc
7253    mttcg=yes
7254    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7255    target_compiler=$cross_cc_ppc64
7256  ;;
7257  ppc64le)
7258    TARGET_ARCH=ppc64
7259    TARGET_BASE_ARCH=ppc
7260    TARGET_ABI_DIR=ppc
7261    mttcg=yes
7262    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7263    target_compiler=$cross_cc_ppc64le
7264  ;;
7265  ppc64abi32)
7266    TARGET_ARCH=ppc64
7267    TARGET_BASE_ARCH=ppc
7268    TARGET_ABI_DIR=ppc
7269    echo "TARGET_ABI32=y" >> $config_target_mak
7270    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7271    target_compiler=$cross_cc_ppc64abi32
7272  ;;
7273  riscv32)
7274    TARGET_BASE_ARCH=riscv
7275    TARGET_ABI_DIR=riscv
7276    mttcg=yes
7277    target_compiler=$cross_cc_riscv32
7278  ;;
7279  riscv64)
7280    TARGET_BASE_ARCH=riscv
7281    TARGET_ABI_DIR=riscv
7282    mttcg=yes
7283    target_compiler=$cross_cc_riscv64
7284  ;;
7285  sh4|sh4eb)
7286    TARGET_ARCH=sh4
7287    bflt="yes"
7288    target_compiler=$cross_cc_sh4
7289  ;;
7290  sparc)
7291    target_compiler=$cross_cc_sparc
7292  ;;
7293  sparc64)
7294    TARGET_BASE_ARCH=sparc
7295    target_compiler=$cross_cc_sparc64
7296  ;;
7297  sparc32plus)
7298    TARGET_ARCH=sparc64
7299    TARGET_BASE_ARCH=sparc
7300    TARGET_ABI_DIR=sparc
7301    target_compiler=$cross_cc_sparc32plus
7302    echo "TARGET_ABI32=y" >> $config_target_mak
7303  ;;
7304  s390x)
7305    mttcg=yes
7306    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7307    target_compiler=$cross_cc_s390x
7308  ;;
7309  tilegx)
7310    target_compiler=$cross_cc_tilegx
7311  ;;
7312  tricore)
7313    target_compiler=$cross_cc_tricore
7314  ;;
7315  unicore32)
7316    target_compiler=$cross_cc_unicore32
7317  ;;
7318  xtensa|xtensaeb)
7319    TARGET_ARCH=xtensa
7320    bflt="yes"
7321    mttcg="yes"
7322    target_compiler=$cross_cc_xtensa
7323  ;;
7324  *)
7325    error_exit "Unsupported target CPU"
7326  ;;
7327esac
7328# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7329if [ "$TARGET_BASE_ARCH" = "" ]; then
7330  TARGET_BASE_ARCH=$TARGET_ARCH
7331fi
7332
7333# Do we have a cross compiler for this target?
7334if has $target_compiler; then
7335
7336    write_c_skeleton
7337
7338    if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7339        # For host systems we might get away with building without -static
7340        if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7341            target_compiler=""
7342        else
7343            enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7344            target_compiler_static="n"
7345        fi
7346    else
7347        enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7348        target_compiler_static="y"
7349    fi
7350else
7351    target_compiler=""
7352fi
7353
7354symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7355
7356upper() {
7357    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7358}
7359
7360target_arch_name="$(upper $TARGET_ARCH)"
7361echo "TARGET_$target_arch_name=y" >> $config_target_mak
7362echo "TARGET_NAME=$target_name" >> $config_target_mak
7363echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7364if [ "$TARGET_ABI_DIR" = "" ]; then
7365  TARGET_ABI_DIR=$TARGET_ARCH
7366fi
7367echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7368if [ "$HOST_VARIANT_DIR" != "" ]; then
7369    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7370fi
7371
7372if supported_xen_target $target; then
7373    echo "CONFIG_XEN=y" >> $config_target_mak
7374    if test "$xen_pci_passthrough" = yes; then
7375        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7376    fi
7377fi
7378if supported_kvm_target $target; then
7379    echo "CONFIG_KVM=y" >> $config_target_mak
7380    if test "$vhost_net" = "yes" ; then
7381        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7382        if test "$vhost_user" = "yes" ; then
7383            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7384        fi
7385    fi
7386fi
7387if supported_hax_target $target; then
7388    echo "CONFIG_HAX=y" >> $config_target_mak
7389fi
7390if supported_hvf_target $target; then
7391    echo "CONFIG_HVF=y" >> $config_target_mak
7392fi
7393if supported_whpx_target $target; then
7394    echo "CONFIG_WHPX=y" >> $config_target_mak
7395fi
7396if test "$target_bigendian" = "yes" ; then
7397  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7398fi
7399if test "$target_softmmu" = "yes" ; then
7400  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7401  if test "$mttcg" = "yes" ; then
7402    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7403  fi
7404fi
7405if test "$target_user_only" = "yes" ; then
7406  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7407  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7408fi
7409if test "$target_linux_user" = "yes" ; then
7410  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7411fi
7412list=""
7413if test ! -z "$gdb_xml_files" ; then
7414  for x in $gdb_xml_files; do
7415    list="$list $source_path/gdb-xml/$x"
7416  done
7417  echo "TARGET_XML_FILES=$list" >> $config_target_mak
7418fi
7419
7420if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7421  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7422fi
7423if test "$target_bsd_user" = "yes" ; then
7424  echo "CONFIG_BSD_USER=y" >> $config_target_mak
7425fi
7426
7427if test -n "$target_compiler"; then
7428  echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7429
7430  if test -n "$target_compiler_static"; then
7431      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7432  fi
7433
7434  if test -n "$target_compiler_cflags"; then
7435      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7436  fi
7437fi
7438
7439
7440# generate QEMU_CFLAGS/LDFLAGS for targets
7441
7442cflags=""
7443ldflags=""
7444
7445disas_config() {
7446  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7447  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7448}
7449
7450for i in $ARCH $TARGET_BASE_ARCH ; do
7451  case "$i" in
7452  alpha)
7453    disas_config "ALPHA"
7454  ;;
7455  aarch64)
7456    if test -n "${cxx}"; then
7457      disas_config "ARM_A64"
7458    fi
7459  ;;
7460  arm)
7461    disas_config "ARM"
7462    if test -n "${cxx}"; then
7463      disas_config "ARM_A64"
7464    fi
7465  ;;
7466  cris)
7467    disas_config "CRIS"
7468  ;;
7469  hppa)
7470    disas_config "HPPA"
7471  ;;
7472  i386|x86_64|x32)
7473    disas_config "I386"
7474  ;;
7475  lm32)
7476    disas_config "LM32"
7477  ;;
7478  m68k)
7479    disas_config "M68K"
7480  ;;
7481  microblaze*)
7482    disas_config "MICROBLAZE"
7483  ;;
7484  mips*)
7485    disas_config "MIPS"
7486    if test -n "${cxx}"; then
7487      disas_config "NANOMIPS"
7488    fi
7489  ;;
7490  moxie*)
7491    disas_config "MOXIE"
7492  ;;
7493  nios2)
7494    disas_config "NIOS2"
7495  ;;
7496  or1k)
7497    disas_config "OPENRISC"
7498  ;;
7499  ppc*)
7500    disas_config "PPC"
7501  ;;
7502  riscv*)
7503    disas_config "RISCV"
7504  ;;
7505  s390*)
7506    disas_config "S390"
7507  ;;
7508  sh4)
7509    disas_config "SH4"
7510  ;;
7511  sparc*)
7512    disas_config "SPARC"
7513  ;;
7514  xtensa*)
7515    disas_config "XTENSA"
7516  ;;
7517  esac
7518done
7519if test "$tcg_interpreter" = "yes" ; then
7520  disas_config "TCI"
7521fi
7522
7523case "$ARCH" in
7524alpha)
7525  # Ensure there's only a single GP
7526  cflags="-msmall-data $cflags"
7527;;
7528esac
7529
7530if test "$gprof" = "yes" ; then
7531  echo "TARGET_GPROF=y" >> $config_target_mak
7532  if test "$target_linux_user" = "yes" ; then
7533    cflags="-p $cflags"
7534    ldflags="-p $ldflags"
7535  fi
7536  if test "$target_softmmu" = "yes" ; then
7537    ldflags="-p $ldflags"
7538    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7539  fi
7540fi
7541
7542if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7543  ldflags="$ldflags $textseg_ldflags"
7544fi
7545
7546# Newer kernels on s390 check for an S390_PGSTE program header and
7547# enable the pgste page table extensions in that case. This makes
7548# the vm.allocate_pgste sysctl unnecessary. We enable this program
7549# header if
7550#  - we build on s390x
7551#  - we build the system emulation for s390x (qemu-system-s390x)
7552#  - KVM is enabled
7553#  - the linker supports --s390-pgste
7554if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7555    if ld_has --s390-pgste ; then
7556        ldflags="-Wl,--s390-pgste $ldflags"
7557    fi
7558fi
7559
7560echo "LDFLAGS+=$ldflags" >> $config_target_mak
7561echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7562
7563done # for target in $targets
7564
7565if test -n "$enabled_cross_compilers"; then
7566    echo
7567    echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7568fi
7569
7570if [ "$fdt" = "git" ]; then
7571  echo "config-host.h: subdir-dtc" >> $config_host_mak
7572fi
7573if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7574  echo "config-host.h: subdir-capstone" >> $config_host_mak
7575fi
7576if test -n "$LIBCAPSTONE"; then
7577  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7578fi
7579
7580if test "$numa" = "yes"; then
7581  echo "CONFIG_NUMA=y" >> $config_host_mak
7582fi
7583
7584if test "$ccache_cpp2" = "yes"; then
7585  echo "export CCACHE_CPP2=y" >> $config_host_mak
7586fi
7587
7588# If we're using a separate build tree, set it up now.
7589# DIRS are directories which we simply mkdir in the build tree;
7590# LINKS are things to symlink back into the source tree
7591# (these can be both files and directories).
7592# Caution: do not add files or directories here using wildcards. This
7593# will result in problems later if a new file matching the wildcard is
7594# added to the source tree -- nothing will cause configure to be rerun
7595# so the build tree will be missing the link back to the new file, and
7596# tests might fail. Prefer to keep the relevant files in their own
7597# directory and symlink the directory instead.
7598DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7599DIRS="$DIRS tests/fp"
7600DIRS="$DIRS docs docs/interop fsdev scsi"
7601DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7602DIRS="$DIRS roms/seabios roms/vgabios"
7603LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7604LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7605LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7606LINKS="$LINKS tests/fp/Makefile"
7607LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7608LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7609LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7610LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7611LINKS="$LINKS pc-bios/qemu-icon.bmp"
7612LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7613LINKS="$LINKS tests/acceptance tests/data"
7614LINKS="$LINKS tests/qemu-iotests/check"
7615for bios_file in \
7616    $source_path/pc-bios/*.bin \
7617    $source_path/pc-bios/*.lid \
7618    $source_path/pc-bios/*.aml \
7619    $source_path/pc-bios/*.rom \
7620    $source_path/pc-bios/*.dtb \
7621    $source_path/pc-bios/*.img \
7622    $source_path/pc-bios/openbios-* \
7623    $source_path/pc-bios/u-boot.* \
7624    $source_path/pc-bios/palcode-*
7625do
7626    LINKS="$LINKS pc-bios/$(basename $bios_file)"
7627done
7628mkdir -p $DIRS
7629for f in $LINKS ; do
7630    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7631        symlink "$source_path/$f" "$f"
7632    fi
7633done
7634
7635# temporary config to build submodules
7636for rom in seabios vgabios ; do
7637    config_mak=roms/$rom/config.mak
7638    echo "# Automatically generated by configure - do not modify" > $config_mak
7639    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7640    echo "AS=$as" >> $config_mak
7641    echo "CCAS=$ccas" >> $config_mak
7642    echo "CC=$cc" >> $config_mak
7643    echo "BCC=bcc" >> $config_mak
7644    echo "CPP=$cpp" >> $config_mak
7645    echo "OBJCOPY=objcopy" >> $config_mak
7646    echo "IASL=$iasl" >> $config_mak
7647    echo "LD=$ld" >> $config_mak
7648    echo "RANLIB=$ranlib" >> $config_mak
7649done
7650
7651# set up qemu-iotests in this build directory
7652iotests_common_env="tests/qemu-iotests/common.env"
7653
7654echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7655echo >> "$iotests_common_env"
7656echo "export PYTHON='$python'" >> "$iotests_common_env"
7657
7658# Save the configure command line for later reuse.
7659cat <<EOD >config.status
7660#!/bin/sh
7661# Generated by configure.
7662# Run this file to recreate the current configuration.
7663# Compiler output produced by configure, useful for debugging
7664# configure, is in config.log if it exists.
7665EOD
7666
7667preserve_env() {
7668    envname=$1
7669
7670    eval envval=\$$envname
7671
7672    if test -n "$envval"
7673    then
7674	echo "$envname='$envval'" >> config.status
7675	echo "export $envname" >> config.status
7676    else
7677	echo "unset $envname" >> config.status
7678    fi
7679}
7680
7681# Preserve various env variables that influence what
7682# features/build target configure will detect
7683preserve_env AR
7684preserve_env AS
7685preserve_env CC
7686preserve_env CPP
7687preserve_env CXX
7688preserve_env INSTALL
7689preserve_env LD
7690preserve_env LD_LIBRARY_PATH
7691preserve_env LIBTOOL
7692preserve_env MAKE
7693preserve_env NM
7694preserve_env OBJCOPY
7695preserve_env PATH
7696preserve_env PKG_CONFIG
7697preserve_env PKG_CONFIG_LIBDIR
7698preserve_env PKG_CONFIG_PATH
7699preserve_env PYTHON
7700preserve_env SDL_CONFIG
7701preserve_env SDL2_CONFIG
7702preserve_env SMBD
7703preserve_env STRIP
7704preserve_env WINDRES
7705
7706printf "exec" >>config.status
7707printf " '%s'" "$0" "$@" >>config.status
7708echo ' "$@"' >>config.status
7709chmod +x config.status
7710
7711rm -r "$TMPDIR1"
7712