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