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