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