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