hw: add .min_cpus and .default_cpus fields to machine_class
[qemu.git] / configure
blob0e856bbc0475faad397e88e98444413ba71505c8
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
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.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
34 rm -f config.log
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
43 print_error() {
44 (echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo) >&2
53 error_exit() {
54 print_error "$@"
55 exit 1
58 do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
63 echo $compiler "$@" >> config.log
64 $compiler "$@" >> config.log 2>&1 || return $?
65 # Test passed. If this is an --enable-werror build, rerun
66 # the test with -Werror and bail out if it fails. This
67 # makes warning-generating-errors in configure test code
68 # obvious to developers.
69 if test "$werror" != "yes"; then
70 return 0
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
77 esac
78 echo $compiler -Werror "$@" >> config.log
79 $compiler -Werror "$@" >> config.log 2>&1 && return $?
80 error_exit "configure test passed without -Werror but failed with -Werror." \
81 "This is probably a bug in the configure script. The failing command" \
82 "will be at the bottom of config.log." \
83 "You can run configure with --disable-werror to bypass this check."
86 do_cc() {
87 do_compiler "$cc" "$@"
90 do_cxx() {
91 do_compiler "$cxx" "$@"
94 update_cxxflags() {
95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
96 # options which some versions of GCC's C++ compiler complain about
97 # because they only make sense for C programs.
98 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
100 for arg in $QEMU_CFLAGS; do
101 case $arg in
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
108 esac
109 done
112 compile_object() {
113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
117 compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
123 # symbolically link $1 to $2. Portable version of "ln -sf".
124 symlink() {
125 rm -rf "$2"
126 mkdir -p "$(dirname "$2")"
127 ln -s "$1" "$2"
130 # check whether a command is available to this shell (may be either an
131 # executable or a builtin)
132 has() {
133 type "$1" >/dev/null 2>&1
136 # search for an executable in PATH
137 path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
142 # pathname has a dir component?
143 if [ "${local_command#*/}" != "$local_command" ]; then
144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
145 echo "$local_command"
146 return 0
149 if [ -z "$local_command" ]; then
150 return 1
153 IFS=:
154 for local_dir in $PATH; do
155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
156 echo "$local_dir/$local_command"
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 0
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
166 have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
170 glob() {
171 eval test -z '"${1#'"$2"'}"'
174 supported_hax_target() {
175 test "$hax" = "yes" || return 1
176 glob "$1" "*-softmmu" || return 1
177 case "${1%-softmmu}" in
178 i386|x86_64)
179 return 0
181 esac
182 return 1
185 supported_kvm_target() {
186 test "$kvm" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}:$cpu" in
189 arm:arm | aarch64:aarch64 | \
190 i386:i386 | i386:x86_64 | i386:x32 | \
191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
192 mips:mips | mipsel:mips | \
193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
195 s390x:s390x)
196 return 0
198 esac
199 return 1
202 supported_xen_target() {
203 test "$xen" = "yes" || return 1
204 glob "$1" "*-softmmu" || return 1
205 # Only i386 and x86_64 provide the xenpv machine.
206 case "${1%-softmmu}" in
207 i386|x86_64)
208 return 0
210 esac
211 return 1
214 supported_target() {
215 case "$1" in
216 *-softmmu)
218 *-linux-user)
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
221 return 1
224 *-bsd-user)
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
227 return 1
231 print_error "Invalid target name '$target'"
232 return 1
234 esac
235 test "$tcg" = "yes" && return 0
236 supported_kvm_target "$1" && return 0
237 supported_xen_target "$1" && return 0
238 supported_hax_target "$1" && return 0
239 print_error "TCG disabled, but hardware accelerator not available for '$target'"
240 return 1
244 ld_has() {
245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
248 # default parameters
249 source_path=$(dirname "$0")
250 cpu=""
251 iasl="iasl"
252 interp_prefix="/usr/gnemul/qemu-%M"
253 static="no"
254 cross_prefix=""
255 audio_drv_list=""
256 block_drv_rw_whitelist=""
257 block_drv_ro_whitelist=""
258 host_cc="cc"
259 libs_softmmu=""
260 libs_tools=""
261 audio_pt_int=""
262 audio_win_int=""
263 cc_i386=i386-pc-linux-gnu-gcc
264 libs_qga=""
265 debug_info="yes"
266 stack_protector=""
268 if test -e "$source_path/.git"
269 then
270 git_update=yes
271 git_submodules="ui/keycodemapdb"
272 else
273 git_update=no
274 git_submodules=""
276 git="git"
278 # Don't accept a target_list environment variable.
279 unset target_list
281 # Default value for a variable defining feature "foo".
282 # * foo="no" feature will only be used if --enable-foo arg is given
283 # * foo="" feature will be searched for, and if found, will be used
284 # unless --disable-foo is given
285 # * foo="yes" this value will only be set by --enable-foo flag.
286 # feature will searched for,
287 # if not found, configure exits with error
289 # Always add --enable-foo and --disable-foo command line args.
290 # Distributions want to ensure that several features are compiled in, and it
291 # is impossible without a --enable-foo that exits if a feature is not found.
293 bluez=""
294 brlapi=""
295 curl=""
296 curses=""
297 docs=""
298 fdt=""
299 netmap="no"
300 sdl=""
301 sdlabi=""
302 virtfs=""
303 mpath=""
304 vnc="yes"
305 sparse="no"
306 vde=""
307 vnc_sasl=""
308 vnc_jpeg=""
309 vnc_png=""
310 xkbcommon=""
311 xen=""
312 xen_ctrl_version=""
313 xen_pv_domain_build="no"
314 xen_pci_passthrough=""
315 linux_aio=""
316 cap_ng=""
317 attr=""
318 libattr=""
319 xfs=""
320 tcg="yes"
322 vhost_net="no"
323 vhost_scsi="no"
324 vhost_vsock="no"
325 vhost_user=""
326 kvm="no"
327 hax="no"
328 rdma=""
329 gprof="no"
330 debug_tcg="no"
331 debug="no"
332 fortify_source=""
333 strip_opt="yes"
334 tcg_interpreter="no"
335 bigendian="no"
336 mingw32="no"
337 gcov="no"
338 gcov_tool="gcov"
339 EXESUF=""
340 DSOSUF=".so"
341 LDFLAGS_SHARED="-shared"
342 modules="no"
343 prefix="/usr/local"
344 mandir="\${prefix}/share/man"
345 datadir="\${prefix}/share"
346 firmwarepath="\${prefix}/share/qemu-firmware"
347 qemu_docdir="\${prefix}/share/doc/qemu"
348 bindir="\${prefix}/bin"
349 libdir="\${prefix}/lib"
350 libexecdir="\${prefix}/libexec"
351 includedir="\${prefix}/include"
352 sysconfdir="\${prefix}/etc"
353 local_statedir="\${prefix}/var"
354 confsuffix="/qemu"
355 slirp="yes"
356 oss_lib=""
357 bsd="no"
358 linux="no"
359 solaris="no"
360 profiler="no"
361 cocoa="no"
362 softmmu="yes"
363 linux_user="no"
364 bsd_user="no"
365 blobs="yes"
366 pkgversion=""
367 pie=""
368 qom_cast_debug="yes"
369 trace_backends="log"
370 trace_file="trace"
371 spice=""
372 rbd=""
373 smartcard=""
374 libusb=""
375 usb_redir=""
376 opengl=""
377 opengl_dmabuf="no"
378 cpuid_h="no"
379 avx2_opt="no"
380 zlib="yes"
381 capstone=""
382 lzo=""
383 snappy=""
384 bzip2=""
385 guest_agent=""
386 guest_agent_with_vss="no"
387 guest_agent_ntddscsi="no"
388 guest_agent_msi=""
389 vss_win32_sdk=""
390 win_sdk="no"
391 want_tools="yes"
392 libiscsi=""
393 libnfs=""
394 coroutine=""
395 coroutine_pool=""
396 debug_stack_usage="no"
397 crypto_afalg="no"
398 seccomp=""
399 glusterfs=""
400 glusterfs_xlator_opt="no"
401 glusterfs_discard="no"
402 glusterfs_fallocate="no"
403 glusterfs_zerofill="no"
404 gtk=""
405 gtkabi=""
406 gtk_gl="no"
407 tls_priority="NORMAL"
408 gnutls=""
409 gnutls_rnd=""
410 nettle=""
411 nettle_kdf="no"
412 gcrypt=""
413 gcrypt_hmac="no"
414 gcrypt_kdf="no"
415 vte=""
416 virglrenderer=""
417 tpm="yes"
418 libssh2=""
419 live_block_migration="yes"
420 numa=""
421 tcmalloc="no"
422 jemalloc="no"
423 replication="yes"
424 vxhs=""
426 supported_cpu="no"
427 supported_os="no"
428 bogus_os="no"
430 # parse CC options first
431 for opt do
432 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
433 case "$opt" in
434 --cross-prefix=*) cross_prefix="$optarg"
436 --cc=*) CC="$optarg"
438 --cxx=*) CXX="$optarg"
440 --source-path=*) source_path="$optarg"
442 --cpu=*) cpu="$optarg"
444 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
445 EXTRA_CFLAGS="$optarg"
447 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
448 EXTRA_CXXFLAGS="$optarg"
450 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
451 EXTRA_LDFLAGS="$optarg"
453 --enable-debug-info) debug_info="yes"
455 --disable-debug-info) debug_info="no"
457 esac
458 done
459 # OS specific
460 # Using uname is really, really broken. Once we have the right set of checks
461 # we can eliminate its usage altogether.
463 # Preferred compiler:
464 # ${CC} (if set)
465 # ${cross_prefix}gcc (if cross-prefix specified)
466 # system compiler
467 if test -z "${CC}${cross_prefix}"; then
468 cc="$host_cc"
469 else
470 cc="${CC-${cross_prefix}gcc}"
473 if test -z "${CXX}${cross_prefix}"; then
474 cxx="c++"
475 else
476 cxx="${CXX-${cross_prefix}g++}"
479 ar="${AR-${cross_prefix}ar}"
480 as="${AS-${cross_prefix}as}"
481 ccas="${CCAS-$cc}"
482 cpp="${CPP-$cc -E}"
483 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
484 ld="${LD-${cross_prefix}ld}"
485 ranlib="${RANLIB-${cross_prefix}ranlib}"
486 nm="${NM-${cross_prefix}nm}"
487 strip="${STRIP-${cross_prefix}strip}"
488 windres="${WINDRES-${cross_prefix}windres}"
489 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
490 query_pkg_config() {
491 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
493 pkg_config=query_pkg_config
494 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
495 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
497 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
498 ARFLAGS="${ARFLAGS-rv}"
500 # default flags for all hosts
501 # We use -fwrapv to tell the compiler that we require a C dialect where
502 # left shift of signed integers is well defined and has the expected
503 # 2s-complement style results. (Both clang and gcc agree that it
504 # provides these semantics.)
505 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
506 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
507 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
508 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
509 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
510 if test "$debug_info" = "yes"; then
511 CFLAGS="-g $CFLAGS"
512 LDFLAGS="-g $LDFLAGS"
515 # make source path absolute
516 source_path=$(cd "$source_path"; pwd)
518 # running configure in the source tree?
519 # we know that's the case if configure is there.
520 if test -f "./configure"; then
521 pwd_is_source_path="y"
522 else
523 pwd_is_source_path="n"
526 check_define() {
527 cat > $TMPC <<EOF
528 #if !defined($1)
529 #error $1 not defined
530 #endif
531 int main(void) { return 0; }
533 compile_object
536 check_include() {
537 cat > $TMPC <<EOF
538 #include <$1>
539 int main(void) { return 0; }
541 compile_object
544 write_c_skeleton() {
545 cat > $TMPC <<EOF
546 int main(void) { return 0; }
550 if check_define __linux__ ; then
551 targetos="Linux"
552 elif check_define _WIN32 ; then
553 targetos='MINGW32'
554 elif check_define __OpenBSD__ ; then
555 targetos='OpenBSD'
556 elif check_define __sun__ ; then
557 targetos='SunOS'
558 elif check_define __HAIKU__ ; then
559 targetos='Haiku'
560 elif check_define __FreeBSD__ ; then
561 targetos='FreeBSD'
562 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
563 targetos='GNU/kFreeBSD'
564 elif check_define __DragonFly__ ; then
565 targetos='DragonFly'
566 elif check_define __NetBSD__; then
567 targetos='NetBSD'
568 elif check_define __APPLE__; then
569 targetos='Darwin'
570 else
571 # This is a fatal error, but don't report it yet, because we
572 # might be going to just print the --help text, or it might
573 # be the result of a missing compiler.
574 targetos='bogus'
575 bogus_os='yes'
578 # Some host OSes need non-standard checks for which CPU to use.
579 # Note that these checks are broken for cross-compilation: if you're
580 # cross-compiling to one of these OSes then you'll need to specify
581 # the correct CPU with the --cpu option.
582 case $targetos in
583 Darwin)
584 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
585 # run 64-bit userspace code.
586 # If the user didn't specify a CPU explicitly and the kernel says this is
587 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
588 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
589 cpu="x86_64"
592 SunOS)
593 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
594 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
595 cpu="x86_64"
597 esac
599 if test ! -z "$cpu" ; then
600 # command line argument
602 elif check_define __i386__ ; then
603 cpu="i386"
604 elif check_define __x86_64__ ; then
605 if check_define __ILP32__ ; then
606 cpu="x32"
607 else
608 cpu="x86_64"
610 elif check_define __sparc__ ; then
611 if check_define __arch64__ ; then
612 cpu="sparc64"
613 else
614 cpu="sparc"
616 elif check_define _ARCH_PPC ; then
617 if check_define _ARCH_PPC64 ; then
618 cpu="ppc64"
619 else
620 cpu="ppc"
622 elif check_define __mips__ ; then
623 cpu="mips"
624 elif check_define __ia64__ ; then
625 cpu="ia64"
626 elif check_define __s390__ ; then
627 if check_define __s390x__ ; then
628 cpu="s390x"
629 else
630 cpu="s390"
632 elif check_define __arm__ ; then
633 cpu="arm"
634 elif check_define __aarch64__ ; then
635 cpu="aarch64"
636 else
637 cpu=$(uname -m)
640 ARCH=
641 # Normalise host CPU name and set ARCH.
642 # Note that this case should only have supported host CPUs, not guests.
643 case "$cpu" in
644 ppc|ppc64|s390|s390x|sparc64|x32)
645 cpu="$cpu"
646 supported_cpu="yes"
648 i386|i486|i586|i686|i86pc|BePC)
649 cpu="i386"
650 supported_cpu="yes"
652 x86_64|amd64)
653 cpu="x86_64"
654 supported_cpu="yes"
656 armv*b|armv*l|arm)
657 cpu="arm"
658 supported_cpu="yes"
660 aarch64)
661 cpu="aarch64"
662 supported_cpu="yes"
664 mips*)
665 cpu="mips"
666 supported_cpu="yes"
668 sparc|sun4[cdmuv])
669 cpu="sparc"
670 supported_cpu="yes"
673 # This will result in either an error or falling back to TCI later
674 ARCH=unknown
676 esac
677 if test -z "$ARCH"; then
678 ARCH="$cpu"
681 # OS specific
683 # host *BSD for user mode
684 HOST_VARIANT_DIR=""
686 case $targetos in
687 MINGW32*)
688 mingw32="yes"
689 hax="yes"
690 audio_possible_drivers="dsound sdl"
691 if check_include dsound.h; then
692 audio_drv_list="dsound"
693 else
694 audio_drv_list=""
696 supported_os="yes"
698 GNU/kFreeBSD)
699 bsd="yes"
700 audio_drv_list="oss"
701 audio_possible_drivers="oss sdl pa"
703 FreeBSD)
704 bsd="yes"
705 make="${MAKE-gmake}"
706 audio_drv_list="oss"
707 audio_possible_drivers="oss sdl pa"
708 # needed for kinfo_getvmmap(3) in libutil.h
709 LIBS="-lutil $LIBS"
710 # needed for kinfo_getproc
711 libs_qga="-lutil $libs_qga"
712 netmap="" # enable netmap autodetect
713 HOST_VARIANT_DIR="freebsd"
714 supported_os="yes"
716 DragonFly)
717 bsd="yes"
718 make="${MAKE-gmake}"
719 audio_drv_list="oss"
720 audio_possible_drivers="oss sdl pa"
721 HOST_VARIANT_DIR="dragonfly"
723 NetBSD)
724 bsd="yes"
725 make="${MAKE-gmake}"
726 audio_drv_list="oss"
727 audio_possible_drivers="oss sdl"
728 oss_lib="-lossaudio"
729 HOST_VARIANT_DIR="netbsd"
730 supported_os="yes"
732 OpenBSD)
733 bsd="yes"
734 make="${MAKE-gmake}"
735 audio_drv_list="sdl"
736 audio_possible_drivers="sdl"
737 HOST_VARIANT_DIR="openbsd"
739 Darwin)
740 bsd="yes"
741 darwin="yes"
742 hax="yes"
743 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
744 if [ "$cpu" = "x86_64" ] ; then
745 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
746 LDFLAGS="-arch x86_64 $LDFLAGS"
748 cocoa="yes"
749 audio_drv_list="coreaudio"
750 audio_possible_drivers="coreaudio sdl"
751 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
752 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
753 # Disable attempts to use ObjectiveC features in os/object.h since they
754 # won't work when we're compiling with gcc as a C compiler.
755 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
756 HOST_VARIANT_DIR="darwin"
757 supported_os="yes"
759 SunOS)
760 solaris="yes"
761 make="${MAKE-gmake}"
762 install="${INSTALL-ginstall}"
763 smbd="${SMBD-/usr/sfw/sbin/smbd}"
764 if test -f /usr/include/sys/soundcard.h ; then
765 audio_drv_list="oss"
767 audio_possible_drivers="oss sdl"
768 # needed for CMSG_ macros in sys/socket.h
769 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
770 # needed for TIOCWIN* defines in termios.h
771 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
772 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
773 solarisnetlibs="-lsocket -lnsl -lresolv"
774 LIBS="$solarisnetlibs $LIBS"
775 libs_qga="$solarisnetlibs $libs_qga"
777 Haiku)
778 haiku="yes"
779 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
780 LIBS="-lposix_error_mapper -lnetwork $LIBS"
782 Linux)
783 audio_drv_list="oss"
784 audio_possible_drivers="oss alsa sdl pa"
785 linux="yes"
786 linux_user="yes"
787 kvm="yes"
788 vhost_net="yes"
789 vhost_scsi="yes"
790 vhost_vsock="yes"
791 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
792 supported_os="yes"
794 esac
796 if [ "$bsd" = "yes" ] ; then
797 if [ "$darwin" != "yes" ] ; then
798 bsd_user="yes"
802 : ${make=${MAKE-make}}
803 : ${install=${INSTALL-install}}
804 : ${python=${PYTHON-python}}
805 : ${smbd=${SMBD-/usr/sbin/smbd}}
807 # Default objcc to clang if available, otherwise use CC
808 if has clang; then
809 objcc=clang
810 else
811 objcc="$cc"
814 if test "$mingw32" = "yes" ; then
815 EXESUF=".exe"
816 DSOSUF=".dll"
817 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
818 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
819 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
820 # MinGW needs -mthreads for TLS and macro _MT.
821 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
822 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
823 write_c_skeleton;
824 if compile_prog "" "-liberty" ; then
825 LIBS="-liberty $LIBS"
827 prefix="c:/Program Files/QEMU"
828 mandir="\${prefix}"
829 datadir="\${prefix}"
830 qemu_docdir="\${prefix}"
831 bindir="\${prefix}"
832 sysconfdir="\${prefix}"
833 local_statedir=
834 confsuffix=""
835 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
838 werror=""
840 for opt do
841 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
842 case "$opt" in
843 --help|-h) show_help=yes
845 --version|-V) exec cat $source_path/VERSION
847 --prefix=*) prefix="$optarg"
849 --interp-prefix=*) interp_prefix="$optarg"
851 --source-path=*)
853 --cross-prefix=*)
855 --cc=*)
857 --host-cc=*) host_cc="$optarg"
859 --cxx=*)
861 --iasl=*) iasl="$optarg"
863 --objcc=*) objcc="$optarg"
865 --make=*) make="$optarg"
867 --install=*) install="$optarg"
869 --python=*) python="$optarg"
871 --gcov=*) gcov_tool="$optarg"
873 --smbd=*) smbd="$optarg"
875 --extra-cflags=*)
877 --extra-cxxflags=*)
879 --extra-ldflags=*)
881 --enable-debug-info)
883 --disable-debug-info)
885 --enable-modules)
886 modules="yes"
888 --disable-modules)
889 modules="no"
891 --cpu=*)
893 --target-list=*) target_list="$optarg"
895 --enable-trace-backends=*) trace_backends="$optarg"
897 # XXX: backwards compatibility
898 --enable-trace-backend=*) trace_backends="$optarg"
900 --with-trace-file=*) trace_file="$optarg"
902 --enable-gprof) gprof="yes"
904 --enable-gcov) gcov="yes"
906 --static)
907 static="yes"
908 LDFLAGS="-static $LDFLAGS"
909 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
911 --mandir=*) mandir="$optarg"
913 --bindir=*) bindir="$optarg"
915 --libdir=*) libdir="$optarg"
917 --libexecdir=*) libexecdir="$optarg"
919 --includedir=*) includedir="$optarg"
921 --datadir=*) datadir="$optarg"
923 --with-confsuffix=*) confsuffix="$optarg"
925 --docdir=*) qemu_docdir="$optarg"
927 --sysconfdir=*) sysconfdir="$optarg"
929 --localstatedir=*) local_statedir="$optarg"
931 --firmwarepath=*) firmwarepath="$optarg"
933 --sbindir=*|--sharedstatedir=*|\
934 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
935 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
936 # These switches are silently ignored, for compatibility with
937 # autoconf-generated configure scripts. This allows QEMU's
938 # configure to be used by RPM and similar macros that set
939 # lots of directory switches by default.
941 --disable-sdl) sdl="no"
943 --enable-sdl) sdl="yes"
945 --with-sdlabi=*) sdlabi="$optarg"
947 --disable-qom-cast-debug) qom_cast_debug="no"
949 --enable-qom-cast-debug) qom_cast_debug="yes"
951 --disable-virtfs) virtfs="no"
953 --enable-virtfs) virtfs="yes"
955 --disable-mpath) mpath="no"
957 --enable-mpath) mpath="yes"
959 --disable-vnc) vnc="no"
961 --enable-vnc) vnc="yes"
963 --oss-lib=*) oss_lib="$optarg"
965 --audio-drv-list=*) audio_drv_list="$optarg"
967 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
969 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
971 --enable-debug-tcg) debug_tcg="yes"
973 --disable-debug-tcg) debug_tcg="no"
975 --enable-debug)
976 # Enable debugging options that aren't excessively noisy
977 debug_tcg="yes"
978 debug="yes"
979 strip_opt="no"
980 fortify_source="no"
982 --enable-sparse) sparse="yes"
984 --disable-sparse) sparse="no"
986 --disable-strip) strip_opt="no"
988 --disable-vnc-sasl) vnc_sasl="no"
990 --enable-vnc-sasl) vnc_sasl="yes"
992 --disable-vnc-jpeg) vnc_jpeg="no"
994 --enable-vnc-jpeg) vnc_jpeg="yes"
996 --disable-vnc-png) vnc_png="no"
998 --enable-vnc-png) vnc_png="yes"
1000 --disable-slirp) slirp="no"
1002 --disable-vde) vde="no"
1004 --enable-vde) vde="yes"
1006 --disable-netmap) netmap="no"
1008 --enable-netmap) netmap="yes"
1010 --disable-xen) xen="no"
1012 --enable-xen) xen="yes"
1014 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1016 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1018 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1020 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1022 --disable-brlapi) brlapi="no"
1024 --enable-brlapi) brlapi="yes"
1026 --disable-bluez) bluez="no"
1028 --enable-bluez) bluez="yes"
1030 --disable-kvm) kvm="no"
1032 --enable-kvm) kvm="yes"
1034 --disable-hax) hax="no"
1036 --enable-hax) hax="yes"
1038 --disable-tcg-interpreter) tcg_interpreter="no"
1040 --enable-tcg-interpreter) tcg_interpreter="yes"
1042 --disable-cap-ng) cap_ng="no"
1044 --enable-cap-ng) cap_ng="yes"
1046 --disable-tcg) tcg="no"
1048 --enable-tcg) tcg="yes"
1050 --disable-spice) spice="no"
1052 --enable-spice) spice="yes"
1054 --disable-libiscsi) libiscsi="no"
1056 --enable-libiscsi) libiscsi="yes"
1058 --disable-libnfs) libnfs="no"
1060 --enable-libnfs) libnfs="yes"
1062 --enable-profiler) profiler="yes"
1064 --disable-cocoa) cocoa="no"
1066 --enable-cocoa)
1067 cocoa="yes" ;
1068 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1070 --disable-system) softmmu="no"
1072 --enable-system) softmmu="yes"
1074 --disable-user)
1075 linux_user="no" ;
1076 bsd_user="no" ;
1078 --enable-user) ;;
1079 --disable-linux-user) linux_user="no"
1081 --enable-linux-user) linux_user="yes"
1083 --disable-bsd-user) bsd_user="no"
1085 --enable-bsd-user) bsd_user="yes"
1087 --enable-pie) pie="yes"
1089 --disable-pie) pie="no"
1091 --enable-werror) werror="yes"
1093 --disable-werror) werror="no"
1095 --enable-stack-protector) stack_protector="yes"
1097 --disable-stack-protector) stack_protector="no"
1099 --disable-curses) curses="no"
1101 --enable-curses) curses="yes"
1103 --disable-curl) curl="no"
1105 --enable-curl) curl="yes"
1107 --disable-fdt) fdt="no"
1109 --enable-fdt) fdt="yes"
1111 --disable-linux-aio) linux_aio="no"
1113 --enable-linux-aio) linux_aio="yes"
1115 --disable-attr) attr="no"
1117 --enable-attr) attr="yes"
1119 --disable-blobs) blobs="no"
1121 --with-pkgversion=*) pkgversion=" ($optarg)"
1123 --with-coroutine=*) coroutine="$optarg"
1125 --disable-coroutine-pool) coroutine_pool="no"
1127 --enable-coroutine-pool) coroutine_pool="yes"
1129 --enable-debug-stack-usage) debug_stack_usage="yes"
1131 --enable-crypto-afalg) crypto_afalg="yes"
1133 --disable-crypto-afalg) crypto_afalg="no"
1135 --disable-docs) docs="no"
1137 --enable-docs) docs="yes"
1139 --disable-vhost-net) vhost_net="no"
1141 --enable-vhost-net) vhost_net="yes"
1143 --disable-vhost-scsi) vhost_scsi="no"
1145 --enable-vhost-scsi) vhost_scsi="yes"
1147 --disable-vhost-vsock) vhost_vsock="no"
1149 --enable-vhost-vsock) vhost_vsock="yes"
1151 --disable-opengl) opengl="no"
1153 --enable-opengl) opengl="yes"
1155 --disable-rbd) rbd="no"
1157 --enable-rbd) rbd="yes"
1159 --disable-xfsctl) xfs="no"
1161 --enable-xfsctl) xfs="yes"
1163 --disable-smartcard) smartcard="no"
1165 --enable-smartcard) smartcard="yes"
1167 --disable-libusb) libusb="no"
1169 --enable-libusb) libusb="yes"
1171 --disable-usb-redir) usb_redir="no"
1173 --enable-usb-redir) usb_redir="yes"
1175 --disable-zlib-test) zlib="no"
1177 --disable-lzo) lzo="no"
1179 --enable-lzo) lzo="yes"
1181 --disable-snappy) snappy="no"
1183 --enable-snappy) snappy="yes"
1185 --disable-bzip2) bzip2="no"
1187 --enable-bzip2) bzip2="yes"
1189 --enable-guest-agent) guest_agent="yes"
1191 --disable-guest-agent) guest_agent="no"
1193 --enable-guest-agent-msi) guest_agent_msi="yes"
1195 --disable-guest-agent-msi) guest_agent_msi="no"
1197 --with-vss-sdk) vss_win32_sdk=""
1199 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1201 --without-vss-sdk) vss_win32_sdk="no"
1203 --with-win-sdk) win_sdk=""
1205 --with-win-sdk=*) win_sdk="$optarg"
1207 --without-win-sdk) win_sdk="no"
1209 --enable-tools) want_tools="yes"
1211 --disable-tools) want_tools="no"
1213 --enable-seccomp) seccomp="yes"
1215 --disable-seccomp) seccomp="no"
1217 --disable-glusterfs) glusterfs="no"
1219 --enable-glusterfs) glusterfs="yes"
1221 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1222 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1224 --enable-vhdx|--disable-vhdx)
1225 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1227 --enable-uuid|--disable-uuid)
1228 echo "$0: $opt is obsolete, UUID support is always built" >&2
1230 --disable-gtk) gtk="no"
1232 --enable-gtk) gtk="yes"
1234 --tls-priority=*) tls_priority="$optarg"
1236 --disable-gnutls) gnutls="no"
1238 --enable-gnutls) gnutls="yes"
1240 --disable-nettle) nettle="no"
1242 --enable-nettle) nettle="yes"
1244 --disable-gcrypt) gcrypt="no"
1246 --enable-gcrypt) gcrypt="yes"
1248 --enable-rdma) rdma="yes"
1250 --disable-rdma) rdma="no"
1252 --with-gtkabi=*) gtkabi="$optarg"
1254 --disable-vte) vte="no"
1256 --enable-vte) vte="yes"
1258 --disable-virglrenderer) virglrenderer="no"
1260 --enable-virglrenderer) virglrenderer="yes"
1262 --disable-tpm) tpm="no"
1264 --enable-tpm) tpm="yes"
1266 --disable-libssh2) libssh2="no"
1268 --enable-libssh2) libssh2="yes"
1270 --disable-live-block-migration) live_block_migration="no"
1272 --enable-live-block-migration) live_block_migration="yes"
1274 --disable-numa) numa="no"
1276 --enable-numa) numa="yes"
1278 --disable-tcmalloc) tcmalloc="no"
1280 --enable-tcmalloc) tcmalloc="yes"
1282 --disable-jemalloc) jemalloc="no"
1284 --enable-jemalloc) jemalloc="yes"
1286 --disable-replication) replication="no"
1288 --enable-replication) replication="yes"
1290 --disable-vxhs) vxhs="no"
1292 --enable-vxhs) vxhs="yes"
1294 --disable-vhost-user) vhost_user="no"
1296 --enable-vhost-user)
1297 vhost_user="yes"
1298 if test "$mingw32" = "yes"; then
1299 error_exit "vhost-user isn't available on win32"
1302 --disable-capstone) capstone="no"
1304 --enable-capstone) capstone="yes"
1306 --enable-capstone=git) capstone="git"
1308 --enable-capstone=system) capstone="system"
1310 --with-git=*) git="$optarg"
1312 --enable-git-update) git_update=yes
1314 --disable-git-update) git_update=no
1317 echo "ERROR: unknown option $opt"
1318 echo "Try '$0 --help' for more information"
1319 exit 1
1321 esac
1322 done
1324 if test "$vhost_user" = ""; then
1325 if test "$mingw32" = "yes"; then
1326 vhost_user="no"
1327 else
1328 vhost_user="yes"
1332 case "$cpu" in
1333 ppc)
1334 CPU_CFLAGS="-m32"
1335 LDFLAGS="-m32 $LDFLAGS"
1337 ppc64)
1338 CPU_CFLAGS="-m64"
1339 LDFLAGS="-m64 $LDFLAGS"
1341 sparc)
1342 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1343 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1345 sparc64)
1346 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1347 LDFLAGS="-m64 $LDFLAGS"
1349 s390)
1350 CPU_CFLAGS="-m31"
1351 LDFLAGS="-m31 $LDFLAGS"
1353 s390x)
1354 CPU_CFLAGS="-m64"
1355 LDFLAGS="-m64 $LDFLAGS"
1357 i386)
1358 CPU_CFLAGS="-m32"
1359 LDFLAGS="-m32 $LDFLAGS"
1360 cc_i386='$(CC) -m32'
1362 x86_64)
1363 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1364 # If we truly care, we should simply detect this case at
1365 # runtime and generate the fallback to serial emulation.
1366 CPU_CFLAGS="-m64 -mcx16"
1367 LDFLAGS="-m64 $LDFLAGS"
1368 cc_i386='$(CC) -m32'
1370 x32)
1371 CPU_CFLAGS="-mx32"
1372 LDFLAGS="-mx32 $LDFLAGS"
1373 cc_i386='$(CC) -m32'
1375 # No special flags required for other host CPUs
1376 esac
1378 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1379 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1381 # For user-mode emulation the host arch has to be one we explicitly
1382 # support, even if we're using TCI.
1383 if [ "$ARCH" = "unknown" ]; then
1384 bsd_user="no"
1385 linux_user="no"
1388 default_target_list=""
1390 mak_wilds=""
1392 if [ "$softmmu" = "yes" ]; then
1393 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1395 if [ "$linux_user" = "yes" ]; then
1396 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1398 if [ "$bsd_user" = "yes" ]; then
1399 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1402 for config in $mak_wilds; do
1403 default_target_list="${default_target_list} $(basename "$config" .mak)"
1404 done
1406 # Enumerate public trace backends for --help output
1407 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1409 if test x"$show_help" = x"yes" ; then
1410 cat << EOF
1412 Usage: configure [options]
1413 Options: [defaults in brackets after descriptions]
1415 Standard options:
1416 --help print this message
1417 --prefix=PREFIX install in PREFIX [$prefix]
1418 --interp-prefix=PREFIX where to find shared libraries, etc.
1419 use %M for cpu name [$interp_prefix]
1420 --target-list=LIST set target list (default: build everything)
1421 $(echo Available targets: $default_target_list | \
1422 fold -s -w 53 | sed -e 's/^/ /')
1424 Advanced options (experts only):
1425 --source-path=PATH path of source code [$source_path]
1426 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1427 --cc=CC use C compiler CC [$cc]
1428 --iasl=IASL use ACPI compiler IASL [$iasl]
1429 --host-cc=CC use C compiler CC [$host_cc] for code run at
1430 build time
1431 --cxx=CXX use C++ compiler CXX [$cxx]
1432 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1433 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1434 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1435 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1436 --make=MAKE use specified make [$make]
1437 --install=INSTALL use specified install [$install]
1438 --python=PYTHON use specified python [$python]
1439 --smbd=SMBD use specified smbd [$smbd]
1440 --static enable static build [$static]
1441 --mandir=PATH install man pages in PATH
1442 --datadir=PATH install firmware in PATH$confsuffix
1443 --docdir=PATH install documentation in PATH$confsuffix
1444 --bindir=PATH install binaries in PATH
1445 --libdir=PATH install libraries in PATH
1446 --sysconfdir=PATH install config in PATH$confsuffix
1447 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1448 --firmwarepath=PATH search PATH for firmware files
1449 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1450 --enable-debug enable common debug build options
1451 --disable-strip disable stripping binaries
1452 --disable-werror disable compilation abort on warning
1453 --disable-stack-protector disable compiler-provided stack protection
1454 --audio-drv-list=LIST set audio drivers list:
1455 Available drivers: $audio_possible_drivers
1456 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1457 --block-drv-rw-whitelist=L
1458 set block driver read-write whitelist
1459 (affects only QEMU, not qemu-img)
1460 --block-drv-ro-whitelist=L
1461 set block driver read-only whitelist
1462 (affects only QEMU, not qemu-img)
1463 --enable-trace-backends=B Set trace backend
1464 Available backends: $trace_backend_list
1465 --with-trace-file=NAME Full PATH,NAME of file to store traces
1466 Default:trace-<pid>
1467 --disable-slirp disable SLIRP userspace network connectivity
1468 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1469 --oss-lib path to OSS library
1470 --cpu=CPU Build for host CPU [$cpu]
1471 --with-coroutine=BACKEND coroutine backend. Supported options:
1472 ucontext, sigaltstack, windows
1473 --enable-gcov enable test coverage analysis with gcov
1474 --gcov=GCOV use specified gcov [$gcov_tool]
1475 --disable-blobs disable installing provided firmware blobs
1476 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1477 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1478 --tls-priority default TLS protocol/cipher priority string
1479 --enable-gprof QEMU profiling with gprof
1480 --enable-profiler profiler support
1481 --enable-xen-pv-domain-build
1482 xen pv domain builder
1483 --enable-debug-stack-usage
1484 track the maximum stack usage of stacks created by qemu_alloc_stack
1486 Optional features, enabled with --enable-FEATURE and
1487 disabled with --disable-FEATURE, default is enabled if available:
1489 system all system emulation targets
1490 user supported user emulation targets
1491 linux-user all linux usermode emulation targets
1492 bsd-user all BSD usermode emulation targets
1493 docs build documentation
1494 guest-agent build the QEMU Guest Agent
1495 guest-agent-msi build guest agent Windows MSI installation package
1496 pie Position Independent Executables
1497 modules modules support
1498 debug-tcg TCG debugging (default is disabled)
1499 debug-info debugging information
1500 sparse sparse checker
1502 gnutls GNUTLS cryptography support
1503 nettle nettle cryptography support
1504 gcrypt libgcrypt cryptography support
1505 sdl SDL UI
1506 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1507 gtk gtk UI
1508 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1509 vte vte support for the gtk UI
1510 curses curses UI
1511 vnc VNC UI support
1512 vnc-sasl SASL encryption for VNC server
1513 vnc-jpeg JPEG lossy compression for VNC server
1514 vnc-png PNG compression for VNC server
1515 cocoa Cocoa UI (Mac OS X only)
1516 virtfs VirtFS
1517 mpath Multipath persistent reservation passthrough
1518 xen xen backend driver support
1519 xen-pci-passthrough
1520 brlapi BrlAPI (Braile)
1521 curl curl connectivity
1522 fdt fdt device tree
1523 bluez bluez stack connectivity
1524 kvm KVM acceleration support
1525 hax HAX acceleration support
1526 rdma RDMA-based migration support
1527 vde support for vde network
1528 netmap support for netmap network
1529 linux-aio Linux AIO support
1530 cap-ng libcap-ng support
1531 attr attr and xattr support
1532 vhost-net vhost-net acceleration support
1533 spice spice
1534 rbd rados block device (rbd)
1535 libiscsi iscsi support
1536 libnfs nfs support
1537 smartcard smartcard support (libcacard)
1538 libusb libusb (for usb passthrough)
1539 live-block-migration Block migration in the main migration stream
1540 usb-redir usb network redirection support
1541 lzo support of lzo compression library
1542 snappy support of snappy compression library
1543 bzip2 support of bzip2 compression library
1544 (for reading bzip2-compressed dmg images)
1545 seccomp seccomp support
1546 coroutine-pool coroutine freelist (better performance)
1547 glusterfs GlusterFS backend
1548 tpm TPM support
1549 libssh2 ssh block device support
1550 numa libnuma support
1551 tcmalloc tcmalloc support
1552 jemalloc jemalloc support
1553 replication replication support
1554 vhost-vsock virtio sockets device support
1555 opengl opengl support
1556 virglrenderer virgl rendering support
1557 xfsctl xfsctl support
1558 qom-cast-debug cast debugging support
1559 tools build qemu-io, qemu-nbd and qemu-image tools
1560 vxhs Veritas HyperScale vDisk backend support
1561 crypto-afalg Linux AF_ALG crypto backend driver
1562 vhost-user vhost-user support
1563 capstone capstone disassembler support
1565 NOTE: The object files are built at the place where configure is launched
1567 exit 0
1570 if ! has $python; then
1571 error_exit "Python not found. Use --python=/path/to/python"
1574 # Note that if the Python conditional here evaluates True we will exit
1575 # with status 1 which is a shell 'false' value.
1576 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1577 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1578 "Note that Python 3 or later is not yet supported." \
1579 "Use --python=/path/to/python to specify a supported Python."
1582 # Suppress writing compiled files
1583 python="$python -B"
1585 # Now we have handled --enable-tcg-interpreter and know we're not just
1586 # printing the help message, bail out if the host CPU isn't supported.
1587 if test "$ARCH" = "unknown"; then
1588 if test "$tcg_interpreter" = "yes" ; then
1589 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1590 else
1591 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1595 # Consult white-list to determine whether to enable werror
1596 # by default. Only enable by default for git builds
1597 if test -z "$werror" ; then
1598 if test -d "$source_path/.git" -a \
1599 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1600 werror="yes"
1601 else
1602 werror="no"
1606 # check that the C compiler works.
1607 write_c_skeleton;
1608 if compile_object ; then
1609 : C compiler works ok
1610 else
1611 error_exit "\"$cc\" either does not exist or does not work"
1613 if ! compile_prog ; then
1614 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1617 if test "$bogus_os" = "yes"; then
1618 # Now that we know that we're not printing the help and that
1619 # the compiler works (so the results of the check_defines we used
1620 # to identify the OS are reliable), if we didn't recognize the
1621 # host OS we should stop now.
1622 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1625 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1626 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1627 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1628 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1629 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1630 gcc_flags="-Wno-string-plus-int $gcc_flags"
1631 # Note that we do not add -Werror to gcc_flags here, because that would
1632 # enable it for all configure tests. If a configure test failed due
1633 # to -Werror this would just silently disable some features,
1634 # so it's too error prone.
1636 cc_has_warning_flag() {
1637 write_c_skeleton;
1639 # Use the positive sense of the flag when testing for -Wno-wombat
1640 # support (gcc will happily accept the -Wno- form of unknown
1641 # warning options).
1642 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1643 compile_prog "-Werror $optflag" ""
1646 for flag in $gcc_flags; do
1647 if cc_has_warning_flag $flag ; then
1648 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1650 done
1652 if test "$stack_protector" != "no"; then
1653 cat > $TMPC << EOF
1654 int main(int argc, char *argv[])
1656 char arr[64], *p = arr, *c = argv[0];
1657 while (*c) {
1658 *p++ = *c++;
1660 return 0;
1663 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1664 sp_on=0
1665 for flag in $gcc_flags; do
1666 # We need to check both a compile and a link, since some compiler
1667 # setups fail only on a .c->.o compile and some only at link time
1668 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1669 compile_prog "-Werror $flag" ""; then
1670 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1671 sp_on=1
1672 break
1674 done
1675 if test "$stack_protector" = yes; then
1676 if test $sp_on = 0; then
1677 error_exit "Stack protector not supported"
1682 # Disable -Wmissing-braces on older compilers that warn even for
1683 # the "universal" C zero initializer {0}.
1684 cat > $TMPC << EOF
1685 struct {
1686 int a[2];
1687 } x = {0};
1689 if compile_object "-Werror" "" ; then
1691 else
1692 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1695 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1696 # large functions that use global variables. The bug is in all releases of
1697 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1698 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1699 cat > $TMPC << EOF
1700 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1701 int main(void) { return 0; }
1702 #else
1703 #error No bug in this compiler.
1704 #endif
1706 if compile_prog "-Werror -fno-gcse" "" ; then
1707 TRANSLATE_OPT_CFLAGS=-fno-gcse
1710 if test "$static" = "yes" ; then
1711 if test "$modules" = "yes" ; then
1712 error_exit "static and modules are mutually incompatible"
1714 if test "$pie" = "yes" ; then
1715 error_exit "static and pie are mutually incompatible"
1716 else
1717 pie="no"
1721 # Unconditional check for compiler __thread support
1722 cat > $TMPC << EOF
1723 static __thread int tls_var;
1724 int main(void) { return tls_var; }
1727 if ! compile_prog "-Werror" "" ; then
1728 error_exit "Your compiler does not support the __thread specifier for " \
1729 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1732 if test "$pie" = ""; then
1733 case "$cpu-$targetos" in
1734 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1737 pie="no"
1739 esac
1742 if test "$pie" != "no" ; then
1743 cat > $TMPC << EOF
1745 #ifdef __linux__
1746 # define THREAD __thread
1747 #else
1748 # define THREAD
1749 #endif
1751 static THREAD int tls_var;
1753 int main(void) { return tls_var; }
1756 if compile_prog "-fPIE -DPIE" "-pie"; then
1757 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1758 LDFLAGS="-pie $LDFLAGS"
1759 pie="yes"
1760 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1761 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1763 else
1764 if test "$pie" = "yes"; then
1765 error_exit "PIE not available due to missing toolchain support"
1766 else
1767 echo "Disabling PIE due to missing toolchain support"
1768 pie="no"
1772 if compile_prog "-Werror -fno-pie" "-nopie"; then
1773 CFLAGS_NOPIE="-fno-pie"
1774 LDFLAGS_NOPIE="-nopie"
1778 ##########################################
1779 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1780 # use i686 as default anyway, but for those that don't, an explicit
1781 # specification is necessary
1783 if test "$cpu" = "i386"; then
1784 cat > $TMPC << EOF
1785 static int sfaa(int *ptr)
1787 return __sync_fetch_and_and(ptr, 0);
1790 int main(void)
1792 int val = 42;
1793 val = __sync_val_compare_and_swap(&val, 0, 1);
1794 sfaa(&val);
1795 return val;
1798 if ! compile_prog "" "" ; then
1799 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1803 #########################################
1804 # Solaris specific configure tool chain decisions
1806 if test "$solaris" = "yes" ; then
1807 if has $install; then
1809 else
1810 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1811 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1812 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1814 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1815 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1816 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1817 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1819 if has ar; then
1821 else
1822 if test -f /usr/ccs/bin/ar ; then
1823 error_exit "No path includes ar" \
1824 "Add /usr/ccs/bin to your path and rerun configure"
1826 error_exit "No path includes ar"
1830 if test -z "${target_list+xxx}" ; then
1831 for target in $default_target_list; do
1832 supported_target $target 2>/dev/null && \
1833 target_list="$target_list $target"
1834 done
1835 target_list="${target_list# }"
1836 else
1837 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1838 for target in $target_list; do
1839 # Check that we recognised the target name; this allows a more
1840 # friendly error message than if we let it fall through.
1841 case " $default_target_list " in
1842 *" $target "*)
1845 error_exit "Unknown target name '$target'"
1847 esac
1848 supported_target $target || exit 1
1849 done
1852 # see if system emulation was really requested
1853 case " $target_list " in
1854 *"-softmmu "*) softmmu=yes
1856 *) softmmu=no
1858 esac
1860 feature_not_found() {
1861 feature=$1
1862 remedy=$2
1864 error_exit "User requested feature $feature" \
1865 "configure was not able to find it." \
1866 "$remedy"
1869 # ---
1870 # big/little endian test
1871 cat > $TMPC << EOF
1872 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1873 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1874 extern int foo(short *, short *);
1875 int main(int argc, char *argv[]) {
1876 return foo(big_endian, little_endian);
1880 if compile_object ; then
1881 if grep -q BiGeNdIaN $TMPO ; then
1882 bigendian="yes"
1883 elif grep -q LiTtLeEnDiAn $TMPO ; then
1884 bigendian="no"
1885 else
1886 echo big/little test failed
1888 else
1889 echo big/little test failed
1892 ##########################################
1893 # cocoa implies not SDL or GTK
1894 # (the cocoa UI code currently assumes it is always the active UI
1895 # and doesn't interact well with other UI frontend code)
1896 if test "$cocoa" = "yes"; then
1897 if test "$sdl" = "yes"; then
1898 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1900 if test "$gtk" = "yes"; then
1901 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1903 gtk=no
1904 sdl=no
1907 # Some versions of Mac OS X incorrectly define SIZE_MAX
1908 cat > $TMPC << EOF
1909 #include <stdint.h>
1910 #include <stdio.h>
1911 int main(int argc, char *argv[]) {
1912 return printf("%zu", SIZE_MAX);
1915 have_broken_size_max=no
1916 if ! compile_object -Werror ; then
1917 have_broken_size_max=yes
1920 ##########################################
1921 # L2TPV3 probe
1923 cat > $TMPC <<EOF
1924 #include <sys/socket.h>
1925 #include <linux/ip.h>
1926 int main(void) { return sizeof(struct mmsghdr); }
1928 if compile_prog "" "" ; then
1929 l2tpv3=yes
1930 else
1931 l2tpv3=no
1934 ##########################################
1935 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1937 if test "$mingw32" = "yes"; then
1938 # Some versions of MinGW / Mingw-w64 lack localtime_r
1939 # and gmtime_r entirely.
1941 # Some versions of Mingw-w64 define a macro for
1942 # localtime_r/gmtime_r.
1944 # Some versions of Mingw-w64 will define functions
1945 # for localtime_r/gmtime_r, but only if you have
1946 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1947 # though, unistd.h and pthread.h both define
1948 # that for you.
1950 # So this #undef localtime_r and #include <unistd.h>
1951 # are not in fact redundant.
1952 cat > $TMPC << EOF
1953 #include <unistd.h>
1954 #include <time.h>
1955 #undef localtime_r
1956 int main(void) { localtime_r(NULL, NULL); return 0; }
1958 if compile_prog "" "" ; then
1959 localtime_r="yes"
1960 else
1961 localtime_r="no"
1965 ##########################################
1966 # pkg-config probe
1968 if ! has "$pkg_config_exe"; then
1969 error_exit "pkg-config binary '$pkg_config_exe' not found"
1972 ##########################################
1973 # NPTL probe
1975 if test "$linux_user" = "yes"; then
1976 cat > $TMPC <<EOF
1977 #include <sched.h>
1978 #include <linux/futex.h>
1979 int main(void) {
1980 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1981 #error bork
1982 #endif
1983 return 0;
1986 if ! compile_object ; then
1987 feature_not_found "nptl" "Install glibc and linux kernel headers."
1991 #########################################
1992 # zlib check
1994 if test "$zlib" != "no" ; then
1995 cat > $TMPC << EOF
1996 #include <zlib.h>
1997 int main(void) { zlibVersion(); return 0; }
1999 if compile_prog "" "-lz" ; then
2001 else
2002 error_exit "zlib check failed" \
2003 "Make sure to have the zlib libs and headers installed."
2006 LIBS="$LIBS -lz"
2008 ##########################################
2009 # lzo check
2011 if test "$lzo" != "no" ; then
2012 cat > $TMPC << EOF
2013 #include <lzo/lzo1x.h>
2014 int main(void) { lzo_version(); return 0; }
2016 if compile_prog "" "-llzo2" ; then
2017 libs_softmmu="$libs_softmmu -llzo2"
2018 lzo="yes"
2019 else
2020 if test "$lzo" = "yes"; then
2021 feature_not_found "liblzo2" "Install liblzo2 devel"
2023 lzo="no"
2027 ##########################################
2028 # snappy check
2030 if test "$snappy" != "no" ; then
2031 cat > $TMPC << EOF
2032 #include <snappy-c.h>
2033 int main(void) { snappy_max_compressed_length(4096); return 0; }
2035 if compile_prog "" "-lsnappy" ; then
2036 libs_softmmu="$libs_softmmu -lsnappy"
2037 snappy="yes"
2038 else
2039 if test "$snappy" = "yes"; then
2040 feature_not_found "libsnappy" "Install libsnappy devel"
2042 snappy="no"
2046 ##########################################
2047 # bzip2 check
2049 if test "$bzip2" != "no" ; then
2050 cat > $TMPC << EOF
2051 #include <bzlib.h>
2052 int main(void) { BZ2_bzlibVersion(); return 0; }
2054 if compile_prog "" "-lbz2" ; then
2055 bzip2="yes"
2056 else
2057 if test "$bzip2" = "yes"; then
2058 feature_not_found "libbzip2" "Install libbzip2 devel"
2060 bzip2="no"
2064 ##########################################
2065 # libseccomp check
2067 if test "$seccomp" != "no" ; then
2068 case "$cpu" in
2069 i386|x86_64)
2070 libseccomp_minver="2.1.0"
2072 mips)
2073 libseccomp_minver="2.2.0"
2075 arm|aarch64)
2076 libseccomp_minver="2.2.3"
2078 ppc|ppc64|s390x)
2079 libseccomp_minver="2.3.0"
2082 libseccomp_minver=""
2084 esac
2086 if test "$libseccomp_minver" != "" &&
2087 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2088 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2089 seccomp_libs="$($pkg_config --libs libseccomp)"
2090 seccomp="yes"
2091 else
2092 if test "$seccomp" = "yes" ; then
2093 if test "$libseccomp_minver" != "" ; then
2094 feature_not_found "libseccomp" \
2095 "Install libseccomp devel >= $libseccomp_minver"
2096 else
2097 feature_not_found "libseccomp" \
2098 "libseccomp is not supported for host cpu $cpu"
2101 seccomp="no"
2104 ##########################################
2105 # xen probe
2107 if test "$xen" != "no" ; then
2108 # Check whether Xen library path is specified via --extra-ldflags to avoid
2109 # overriding this setting with pkg-config output. If not, try pkg-config
2110 # to obtain all needed flags.
2112 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2113 $pkg_config --exists xencontrol ; then
2114 xen_ctrl_version="$(printf '%d%02d%02d' \
2115 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2116 xen=yes
2117 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2118 xen_pc="$xen_pc xenevtchn xendevicemodel"
2119 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2120 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2121 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2122 else
2124 xen_libs="-lxenstore -lxenctrl -lxenguest"
2125 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2127 # First we test whether Xen headers and libraries are available.
2128 # If no, we are done and there is no Xen support.
2129 # If yes, more tests are run to detect the Xen version.
2131 # Xen (any)
2132 cat > $TMPC <<EOF
2133 #include <xenctrl.h>
2134 int main(void) {
2135 return 0;
2138 if ! compile_prog "" "$xen_libs" ; then
2139 # Xen not found
2140 if test "$xen" = "yes" ; then
2141 feature_not_found "xen" "Install xen devel"
2143 xen=no
2145 # Xen unstable
2146 elif
2147 cat > $TMPC <<EOF &&
2148 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2149 #include <xenforeignmemory.h>
2150 int main(void) {
2151 xenforeignmemory_handle *xfmem;
2153 xfmem = xenforeignmemory_open(0, 0);
2154 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2156 return 0;
2159 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2160 then
2161 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2162 xen_ctrl_version=41000
2163 xen=yes
2164 elif
2165 cat > $TMPC <<EOF &&
2166 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2167 #define __XEN_TOOLS__
2168 #include <xendevicemodel.h>
2169 int main(void) {
2170 xendevicemodel_handle *xd;
2172 xd = xendevicemodel_open(0, 0);
2173 xendevicemodel_close(xd);
2175 return 0;
2178 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2179 then
2180 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2181 xen_ctrl_version=40900
2182 xen=yes
2183 elif
2184 cat > $TMPC <<EOF &&
2186 * If we have stable libs the we don't want the libxc compat
2187 * layers, regardless of what CFLAGS we may have been given.
2189 * Also, check if xengnttab_grant_copy_segment_t is defined and
2190 * grant copy operation is implemented.
2192 #undef XC_WANT_COMPAT_EVTCHN_API
2193 #undef XC_WANT_COMPAT_GNTTAB_API
2194 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2195 #include <xenctrl.h>
2196 #include <xenstore.h>
2197 #include <xenevtchn.h>
2198 #include <xengnttab.h>
2199 #include <xenforeignmemory.h>
2200 #include <stdint.h>
2201 #include <xen/hvm/hvm_info_table.h>
2202 #if !defined(HVM_MAX_VCPUS)
2203 # error HVM_MAX_VCPUS not defined
2204 #endif
2205 int main(void) {
2206 xc_interface *xc = NULL;
2207 xenforeignmemory_handle *xfmem;
2208 xenevtchn_handle *xe;
2209 xengnttab_handle *xg;
2210 xen_domain_handle_t handle;
2211 xengnttab_grant_copy_segment_t* seg = NULL;
2213 xs_daemon_open();
2215 xc = xc_interface_open(0, 0, 0);
2216 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2217 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2218 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2219 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2220 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2222 xfmem = xenforeignmemory_open(0, 0);
2223 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2225 xe = xenevtchn_open(0, 0);
2226 xenevtchn_fd(xe);
2228 xg = xengnttab_open(0, 0);
2229 xengnttab_grant_copy(xg, 0, seg);
2231 return 0;
2234 compile_prog "" "$xen_libs $xen_stable_libs"
2235 then
2236 xen_ctrl_version=40800
2237 xen=yes
2238 elif
2239 cat > $TMPC <<EOF &&
2241 * If we have stable libs the we don't want the libxc compat
2242 * layers, regardless of what CFLAGS we may have been given.
2244 #undef XC_WANT_COMPAT_EVTCHN_API
2245 #undef XC_WANT_COMPAT_GNTTAB_API
2246 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2247 #include <xenctrl.h>
2248 #include <xenstore.h>
2249 #include <xenevtchn.h>
2250 #include <xengnttab.h>
2251 #include <xenforeignmemory.h>
2252 #include <stdint.h>
2253 #include <xen/hvm/hvm_info_table.h>
2254 #if !defined(HVM_MAX_VCPUS)
2255 # error HVM_MAX_VCPUS not defined
2256 #endif
2257 int main(void) {
2258 xc_interface *xc = NULL;
2259 xenforeignmemory_handle *xfmem;
2260 xenevtchn_handle *xe;
2261 xengnttab_handle *xg;
2262 xen_domain_handle_t handle;
2264 xs_daemon_open();
2266 xc = xc_interface_open(0, 0, 0);
2267 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2268 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2269 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2270 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2271 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2273 xfmem = xenforeignmemory_open(0, 0);
2274 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2276 xe = xenevtchn_open(0, 0);
2277 xenevtchn_fd(xe);
2279 xg = xengnttab_open(0, 0);
2280 xengnttab_map_grant_ref(xg, 0, 0, 0);
2282 return 0;
2285 compile_prog "" "$xen_libs $xen_stable_libs"
2286 then
2287 xen_ctrl_version=40701
2288 xen=yes
2289 elif
2290 cat > $TMPC <<EOF &&
2291 #include <xenctrl.h>
2292 #include <stdint.h>
2293 int main(void) {
2294 xc_interface *xc = NULL;
2295 xen_domain_handle_t handle;
2296 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2297 return 0;
2300 compile_prog "" "$xen_libs"
2301 then
2302 xen_ctrl_version=40700
2303 xen=yes
2305 # Xen 4.6
2306 elif
2307 cat > $TMPC <<EOF &&
2308 #include <xenctrl.h>
2309 #include <xenstore.h>
2310 #include <stdint.h>
2311 #include <xen/hvm/hvm_info_table.h>
2312 #if !defined(HVM_MAX_VCPUS)
2313 # error HVM_MAX_VCPUS not defined
2314 #endif
2315 int main(void) {
2316 xc_interface *xc;
2317 xs_daemon_open();
2318 xc = xc_interface_open(0, 0, 0);
2319 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2320 xc_gnttab_open(NULL, 0);
2321 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2322 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2323 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2324 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2325 return 0;
2328 compile_prog "" "$xen_libs"
2329 then
2330 xen_ctrl_version=40600
2331 xen=yes
2333 # Xen 4.5
2334 elif
2335 cat > $TMPC <<EOF &&
2336 #include <xenctrl.h>
2337 #include <xenstore.h>
2338 #include <stdint.h>
2339 #include <xen/hvm/hvm_info_table.h>
2340 #if !defined(HVM_MAX_VCPUS)
2341 # error HVM_MAX_VCPUS not defined
2342 #endif
2343 int main(void) {
2344 xc_interface *xc;
2345 xs_daemon_open();
2346 xc = xc_interface_open(0, 0, 0);
2347 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2348 xc_gnttab_open(NULL, 0);
2349 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2350 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2351 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2352 return 0;
2355 compile_prog "" "$xen_libs"
2356 then
2357 xen_ctrl_version=40500
2358 xen=yes
2360 elif
2361 cat > $TMPC <<EOF &&
2362 #include <xenctrl.h>
2363 #include <xenstore.h>
2364 #include <stdint.h>
2365 #include <xen/hvm/hvm_info_table.h>
2366 #if !defined(HVM_MAX_VCPUS)
2367 # error HVM_MAX_VCPUS not defined
2368 #endif
2369 int main(void) {
2370 xc_interface *xc;
2371 xs_daemon_open();
2372 xc = xc_interface_open(0, 0, 0);
2373 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2374 xc_gnttab_open(NULL, 0);
2375 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2376 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2377 return 0;
2380 compile_prog "" "$xen_libs"
2381 then
2382 xen_ctrl_version=40200
2383 xen=yes
2385 else
2386 if test "$xen" = "yes" ; then
2387 feature_not_found "xen (unsupported version)" \
2388 "Install a supported xen (xen 4.2 or newer)"
2390 xen=no
2393 if test "$xen" = yes; then
2394 if test $xen_ctrl_version -ge 40701 ; then
2395 libs_softmmu="$xen_stable_libs $libs_softmmu"
2397 libs_softmmu="$xen_libs $libs_softmmu"
2402 if test "$xen_pci_passthrough" != "no"; then
2403 if test "$xen" = "yes" && test "$linux" = "yes"; then
2404 xen_pci_passthrough=yes
2405 else
2406 if test "$xen_pci_passthrough" = "yes"; then
2407 error_exit "User requested feature Xen PCI Passthrough" \
2408 " but this feature requires /sys from Linux"
2410 xen_pci_passthrough=no
2414 if test "$xen_pv_domain_build" = "yes" &&
2415 test "$xen" != "yes"; then
2416 error_exit "User requested Xen PV domain builder support" \
2417 "which requires Xen support."
2420 ##########################################
2421 # Sparse probe
2422 if test "$sparse" != "no" ; then
2423 if has cgcc; then
2424 sparse=yes
2425 else
2426 if test "$sparse" = "yes" ; then
2427 feature_not_found "sparse" "Install sparse binary"
2429 sparse=no
2433 ##########################################
2434 # X11 probe
2435 x11_cflags=
2436 x11_libs=-lX11
2437 if $pkg_config --exists "x11"; then
2438 x11_cflags=$($pkg_config --cflags x11)
2439 x11_libs=$($pkg_config --libs x11)
2442 ##########################################
2443 # GTK probe
2445 if test "$gtkabi" = ""; then
2446 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2447 # Use 2.0 as a fallback if that is available.
2448 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2449 gtkabi=3.0
2450 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2451 gtkabi=2.0
2452 else
2453 gtkabi=3.0
2457 if test "$gtk" != "no"; then
2458 gtkpackage="gtk+-$gtkabi"
2459 gtkx11package="gtk+-x11-$gtkabi"
2460 if test "$gtkabi" = "3.0" ; then
2461 gtkversion="3.0.0"
2462 else
2463 gtkversion="2.18.0"
2465 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2466 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2467 gtk_libs=$($pkg_config --libs $gtkpackage)
2468 gtk_version=$($pkg_config --modversion $gtkpackage)
2469 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2470 gtk_cflags="$gtk_cflags $x11_cflags"
2471 gtk_libs="$gtk_libs $x11_libs"
2473 libs_softmmu="$gtk_libs $libs_softmmu"
2474 gtk="yes"
2475 elif test "$gtk" = "yes"; then
2476 feature_not_found "gtk" "Install gtk3-devel"
2477 else
2478 gtk="no"
2483 ##########################################
2484 # GNUTLS probe
2486 gnutls_works() {
2487 # Unfortunately some distros have bad pkg-config information for gnutls
2488 # such that it claims to exist but you get a compiler error if you try
2489 # to use the options returned by --libs. Specifically, Ubuntu for --static
2490 # builds doesn't work:
2491 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2493 # So sanity check the cflags/libs before assuming gnutls can be used.
2494 if ! $pkg_config --exists "gnutls"; then
2495 return 1
2498 write_c_skeleton
2499 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2502 gnutls_gcrypt=no
2503 gnutls_nettle=no
2504 if test "$gnutls" != "no"; then
2505 if gnutls_works; then
2506 gnutls_cflags=$($pkg_config --cflags gnutls)
2507 gnutls_libs=$($pkg_config --libs gnutls)
2508 libs_softmmu="$gnutls_libs $libs_softmmu"
2509 libs_tools="$gnutls_libs $libs_tools"
2510 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2511 gnutls="yes"
2513 # gnutls_rnd requires >= 2.11.0
2514 if $pkg_config --exists "gnutls >= 2.11.0"; then
2515 gnutls_rnd="yes"
2516 else
2517 gnutls_rnd="no"
2520 if $pkg_config --exists 'gnutls >= 3.0'; then
2521 gnutls_gcrypt=no
2522 gnutls_nettle=yes
2523 elif $pkg_config --exists 'gnutls >= 2.12'; then
2524 case $($pkg_config --libs --static gnutls) in
2525 *gcrypt*)
2526 gnutls_gcrypt=yes
2527 gnutls_nettle=no
2529 *nettle*)
2530 gnutls_gcrypt=no
2531 gnutls_nettle=yes
2534 gnutls_gcrypt=yes
2535 gnutls_nettle=no
2537 esac
2538 else
2539 gnutls_gcrypt=yes
2540 gnutls_nettle=no
2542 elif test "$gnutls" = "yes"; then
2543 feature_not_found "gnutls" "Install gnutls devel"
2544 else
2545 gnutls="no"
2546 gnutls_rnd="no"
2548 else
2549 gnutls_rnd="no"
2553 # If user didn't give a --disable/enable-gcrypt flag,
2554 # then mark as disabled if user requested nettle
2555 # explicitly, or if gnutls links to nettle
2556 if test -z "$gcrypt"
2557 then
2558 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2559 then
2560 gcrypt="no"
2564 # If user didn't give a --disable/enable-nettle flag,
2565 # then mark as disabled if user requested gcrypt
2566 # explicitly, or if gnutls links to gcrypt
2567 if test -z "$nettle"
2568 then
2569 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2570 then
2571 nettle="no"
2575 has_libgcrypt_config() {
2576 if ! has "libgcrypt-config"
2577 then
2578 return 1
2581 if test -n "$cross_prefix"
2582 then
2583 host=$(libgcrypt-config --host)
2584 if test "$host-" != $cross_prefix
2585 then
2586 return 1
2590 return 0
2593 if test "$gcrypt" != "no"; then
2594 if has_libgcrypt_config; then
2595 gcrypt_cflags=$(libgcrypt-config --cflags)
2596 gcrypt_libs=$(libgcrypt-config --libs)
2597 # Debian has remove -lgpg-error from libgcrypt-config
2598 # as it "spreads unnecessary dependencies" which in
2599 # turn breaks static builds...
2600 if test "$static" = "yes"
2601 then
2602 gcrypt_libs="$gcrypt_libs -lgpg-error"
2604 libs_softmmu="$gcrypt_libs $libs_softmmu"
2605 libs_tools="$gcrypt_libs $libs_tools"
2606 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2607 gcrypt="yes"
2608 if test -z "$nettle"; then
2609 nettle="no"
2612 cat > $TMPC << EOF
2613 #include <gcrypt.h>
2614 int main(void) {
2615 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2616 GCRY_MD_SHA256,
2617 NULL, 0, 0, 0, NULL);
2618 return 0;
2621 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2622 gcrypt_kdf=yes
2625 cat > $TMPC << EOF
2626 #include <gcrypt.h>
2627 int main(void) {
2628 gcry_mac_hd_t handle;
2629 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2630 GCRY_MAC_FLAG_SECURE, NULL);
2631 return 0;
2634 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2635 gcrypt_hmac=yes
2637 else
2638 if test "$gcrypt" = "yes"; then
2639 feature_not_found "gcrypt" "Install gcrypt devel"
2640 else
2641 gcrypt="no"
2647 if test "$nettle" != "no"; then
2648 if $pkg_config --exists "nettle"; then
2649 nettle_cflags=$($pkg_config --cflags nettle)
2650 nettle_libs=$($pkg_config --libs nettle)
2651 nettle_version=$($pkg_config --modversion nettle)
2652 libs_softmmu="$nettle_libs $libs_softmmu"
2653 libs_tools="$nettle_libs $libs_tools"
2654 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2655 nettle="yes"
2657 cat > $TMPC << EOF
2658 #include <stddef.h>
2659 #include <nettle/pbkdf2.h>
2660 int main(void) {
2661 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2662 return 0;
2665 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2666 nettle_kdf=yes
2668 else
2669 if test "$nettle" = "yes"; then
2670 feature_not_found "nettle" "Install nettle devel"
2671 else
2672 nettle="no"
2677 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2678 then
2679 error_exit "Only one of gcrypt & nettle can be enabled"
2682 ##########################################
2683 # libtasn1 - only for the TLS creds/session test suite
2685 tasn1=yes
2686 tasn1_cflags=""
2687 tasn1_libs=""
2688 if $pkg_config --exists "libtasn1"; then
2689 tasn1_cflags=$($pkg_config --cflags libtasn1)
2690 tasn1_libs=$($pkg_config --libs libtasn1)
2691 else
2692 tasn1=no
2696 ##########################################
2697 # getifaddrs (for tests/test-io-channel-socket )
2699 have_ifaddrs_h=yes
2700 if ! check_include "ifaddrs.h" ; then
2701 have_ifaddrs_h=no
2704 ##########################################
2705 # VTE probe
2707 if test "$vte" != "no"; then
2708 if test "$gtkabi" = "3.0"; then
2709 vteminversion="0.32.0"
2710 if $pkg_config --exists "vte-2.91"; then
2711 vtepackage="vte-2.91"
2712 else
2713 vtepackage="vte-2.90"
2715 else
2716 vtepackage="vte"
2717 vteminversion="0.24.0"
2719 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2720 vte_cflags=$($pkg_config --cflags $vtepackage)
2721 vte_libs=$($pkg_config --libs $vtepackage)
2722 vteversion=$($pkg_config --modversion $vtepackage)
2723 libs_softmmu="$vte_libs $libs_softmmu"
2724 vte="yes"
2725 elif test "$vte" = "yes"; then
2726 if test "$gtkabi" = "3.0"; then
2727 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2728 else
2729 feature_not_found "vte" "Install libvte devel"
2731 else
2732 vte="no"
2736 ##########################################
2737 # SDL probe
2739 # Look for sdl configuration program (pkg-config or sdl-config). Try
2740 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2742 if test "$sdlabi" = ""; then
2743 if $pkg_config --exists "sdl2"; then
2744 sdlabi=2.0
2745 elif $pkg_config --exists "sdl"; then
2746 sdlabi=1.2
2747 else
2748 sdlabi=2.0
2752 if test $sdlabi = "2.0"; then
2753 sdl_config=$sdl2_config
2754 sdlname=sdl2
2755 sdlconfigname=sdl2_config
2756 elif test $sdlabi = "1.2"; then
2757 sdlname=sdl
2758 sdlconfigname=sdl_config
2759 else
2760 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2763 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2764 sdl_config=$sdlconfigname
2767 if $pkg_config $sdlname --exists; then
2768 sdlconfig="$pkg_config $sdlname"
2769 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2770 elif has ${sdl_config}; then
2771 sdlconfig="$sdl_config"
2772 sdlversion=$($sdlconfig --version)
2773 else
2774 if test "$sdl" = "yes" ; then
2775 feature_not_found "sdl" "Install SDL2-devel"
2777 sdl=no
2779 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2780 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2783 sdl_too_old=no
2784 if test "$sdl" != "no" ; then
2785 cat > $TMPC << EOF
2786 #include <SDL.h>
2787 #undef main /* We don't want SDL to override our main() */
2788 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2790 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2791 if test "$static" = "yes" ; then
2792 if $pkg_config $sdlname --exists; then
2793 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2794 else
2795 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2797 else
2798 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2800 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2801 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2802 sdl_too_old=yes
2803 else
2804 sdl=yes
2807 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2808 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2809 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2810 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2811 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2813 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2815 else
2816 sdl=no
2818 fi # static link
2819 else # sdl not found
2820 if test "$sdl" = "yes" ; then
2821 feature_not_found "sdl" "Install SDL devel"
2823 sdl=no
2824 fi # sdl compile test
2827 if test "$sdl" = "yes" ; then
2828 cat > $TMPC <<EOF
2829 #include <SDL.h>
2830 #if defined(SDL_VIDEO_DRIVER_X11)
2831 #include <X11/XKBlib.h>
2832 #else
2833 #error No x11 support
2834 #endif
2835 int main(void) { return 0; }
2837 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2838 sdl_cflags="$sdl_cflags $x11_cflags"
2839 sdl_libs="$sdl_libs $x11_libs"
2843 ##########################################
2844 # RDMA needs OpenFabrics libraries
2845 if test "$rdma" != "no" ; then
2846 cat > $TMPC <<EOF
2847 #include <rdma/rdma_cma.h>
2848 int main(void) { return 0; }
2850 rdma_libs="-lrdmacm -libverbs"
2851 if compile_prog "" "$rdma_libs" ; then
2852 rdma="yes"
2853 else
2854 if test "$rdma" = "yes" ; then
2855 error_exit \
2856 " OpenFabrics librdmacm/libibverbs not present." \
2857 " Your options:" \
2858 " (1) Fast: Install infiniband packages from your distro." \
2859 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2860 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2862 rdma="no"
2867 ##########################################
2868 # VNC SASL detection
2869 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2870 cat > $TMPC <<EOF
2871 #include <sasl/sasl.h>
2872 #include <stdio.h>
2873 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2875 # Assuming Cyrus-SASL installed in /usr prefix
2876 vnc_sasl_cflags=""
2877 vnc_sasl_libs="-lsasl2"
2878 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2879 vnc_sasl=yes
2880 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2881 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2882 else
2883 if test "$vnc_sasl" = "yes" ; then
2884 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2886 vnc_sasl=no
2890 ##########################################
2891 # VNC JPEG detection
2892 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2893 cat > $TMPC <<EOF
2894 #include <stdio.h>
2895 #include <jpeglib.h>
2896 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2898 vnc_jpeg_cflags=""
2899 vnc_jpeg_libs="-ljpeg"
2900 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2901 vnc_jpeg=yes
2902 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2903 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2904 else
2905 if test "$vnc_jpeg" = "yes" ; then
2906 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2908 vnc_jpeg=no
2912 ##########################################
2913 # VNC PNG detection
2914 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2915 cat > $TMPC <<EOF
2916 //#include <stdio.h>
2917 #include <png.h>
2918 #include <stddef.h>
2919 int main(void) {
2920 png_structp png_ptr;
2921 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2922 return png_ptr != 0;
2925 if $pkg_config libpng --exists; then
2926 vnc_png_cflags=$($pkg_config libpng --cflags)
2927 vnc_png_libs=$($pkg_config libpng --libs)
2928 else
2929 vnc_png_cflags=""
2930 vnc_png_libs="-lpng"
2932 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2933 vnc_png=yes
2934 libs_softmmu="$vnc_png_libs $libs_softmmu"
2935 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2936 else
2937 if test "$vnc_png" = "yes" ; then
2938 feature_not_found "vnc-png" "Install libpng devel"
2940 vnc_png=no
2944 ##########################################
2945 # xkbcommon probe
2946 if test "$xkbcommon" != "no" ; then
2947 if $pkg_config xkbcommon --exists; then
2948 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
2949 xkbcommon_libs=$($pkg_config xkbcommon --libs)
2950 xkbcommon=yes
2951 else
2952 if test "$xkbcommon" = "yes" ; then
2953 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
2955 xkbcommon=no
2959 ##########################################
2960 # fnmatch() probe, used for ACL routines
2961 fnmatch="no"
2962 cat > $TMPC << EOF
2963 #include <fnmatch.h>
2964 int main(void)
2966 fnmatch("foo", "foo", 0);
2967 return 0;
2970 if compile_prog "" "" ; then
2971 fnmatch="yes"
2974 ##########################################
2975 # xfsctl() probe, used for file-posix.c
2976 if test "$xfs" != "no" ; then
2977 cat > $TMPC << EOF
2978 #include <stddef.h> /* NULL */
2979 #include <xfs/xfs.h>
2980 int main(void)
2982 xfsctl(NULL, 0, 0, NULL);
2983 return 0;
2986 if compile_prog "" "" ; then
2987 xfs="yes"
2988 else
2989 if test "$xfs" = "yes" ; then
2990 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2992 xfs=no
2996 ##########################################
2997 # vde libraries probe
2998 if test "$vde" != "no" ; then
2999 vde_libs="-lvdeplug"
3000 cat > $TMPC << EOF
3001 #include <libvdeplug.h>
3002 int main(void)
3004 struct vde_open_args a = {0, 0, 0};
3005 char s[] = "";
3006 vde_open(s, s, &a);
3007 return 0;
3010 if compile_prog "" "$vde_libs" ; then
3011 vde=yes
3012 else
3013 if test "$vde" = "yes" ; then
3014 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3016 vde=no
3020 ##########################################
3021 # netmap support probe
3022 # Apart from looking for netmap headers, we make sure that the host API version
3023 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3024 # a minor/major version number. Minor new features will be marked with values up
3025 # to 15, and if something happens that requires a change to the backend we will
3026 # move above 15, submit the backend fixes and modify this two bounds.
3027 if test "$netmap" != "no" ; then
3028 cat > $TMPC << EOF
3029 #include <inttypes.h>
3030 #include <net/if.h>
3031 #include <net/netmap.h>
3032 #include <net/netmap_user.h>
3033 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3034 #error
3035 #endif
3036 int main(void) { return 0; }
3038 if compile_prog "" "" ; then
3039 netmap=yes
3040 else
3041 if test "$netmap" = "yes" ; then
3042 feature_not_found "netmap"
3044 netmap=no
3048 ##########################################
3049 # libcap-ng library probe
3050 if test "$cap_ng" != "no" ; then
3051 cap_libs="-lcap-ng"
3052 cat > $TMPC << EOF
3053 #include <cap-ng.h>
3054 int main(void)
3056 capng_capability_to_name(CAPNG_EFFECTIVE);
3057 return 0;
3060 if compile_prog "" "$cap_libs" ; then
3061 cap_ng=yes
3062 libs_tools="$cap_libs $libs_tools"
3063 else
3064 if test "$cap_ng" = "yes" ; then
3065 feature_not_found "cap_ng" "Install libcap-ng devel"
3067 cap_ng=no
3071 ##########################################
3072 # Sound support libraries probe
3074 audio_drv_probe()
3076 drv=$1
3077 hdr=$2
3078 lib=$3
3079 exp=$4
3080 cfl=$5
3081 cat > $TMPC << EOF
3082 #include <$hdr>
3083 int main(void) { $exp }
3085 if compile_prog "$cfl" "$lib" ; then
3087 else
3088 error_exit "$drv check failed" \
3089 "Make sure to have the $drv libs and headers installed."
3093 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3094 for drv in $audio_drv_list; do
3095 case $drv in
3096 alsa)
3097 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3098 "return snd_pcm_close((snd_pcm_t *)0);"
3099 alsa_libs="-lasound"
3103 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3104 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3105 pulse_libs="-lpulse"
3106 audio_pt_int="yes"
3109 sdl)
3110 if test "$sdl" = "no"; then
3111 error_exit "sdl not found or disabled, can not use sdl audio driver"
3115 coreaudio)
3116 coreaudio_libs="-framework CoreAudio"
3119 dsound)
3120 dsound_libs="-lole32 -ldxguid"
3121 audio_win_int="yes"
3124 oss)
3125 oss_libs="$oss_lib"
3128 wav)
3129 # XXX: Probes for CoreAudio, DirectSound
3133 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3134 error_exit "Unknown driver '$drv' selected" \
3135 "Possible drivers are: $audio_possible_drivers"
3138 esac
3139 done
3141 ##########################################
3142 # BrlAPI probe
3144 if test "$brlapi" != "no" ; then
3145 brlapi_libs="-lbrlapi"
3146 cat > $TMPC << EOF
3147 #include <brlapi.h>
3148 #include <stddef.h>
3149 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3151 if compile_prog "" "$brlapi_libs" ; then
3152 brlapi=yes
3153 else
3154 if test "$brlapi" = "yes" ; then
3155 feature_not_found "brlapi" "Install brlapi devel"
3157 brlapi=no
3161 ##########################################
3162 # curses probe
3163 if test "$curses" != "no" ; then
3164 if test "$mingw32" = "yes" ; then
3165 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3166 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3167 else
3168 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3169 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3171 curses_found=no
3172 cat > $TMPC << EOF
3173 #include <locale.h>
3174 #include <curses.h>
3175 #include <wchar.h>
3176 int main(void) {
3177 wchar_t wch = L'w';
3178 setlocale(LC_ALL, "");
3179 resize_term(0, 0);
3180 addwstr(L"wide chars\n");
3181 addnwstr(&wch, 1);
3182 add_wch(WACS_DEGREE);
3183 return 0;
3186 IFS=:
3187 for curses_inc in $curses_inc_list; do
3188 # Make sure we get the wide character prototypes
3189 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3190 IFS=:
3191 for curses_lib in $curses_lib_list; do
3192 unset IFS
3193 if compile_prog "$curses_inc" "$curses_lib" ; then
3194 curses_found=yes
3195 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3196 libs_softmmu="$curses_lib $libs_softmmu"
3197 break
3199 done
3200 if test "$curses_found" = yes ; then
3201 break
3203 done
3204 unset IFS
3205 if test "$curses_found" = "yes" ; then
3206 curses=yes
3207 else
3208 if test "$curses" = "yes" ; then
3209 feature_not_found "curses" "Install ncurses devel"
3211 curses=no
3215 ##########################################
3216 # curl probe
3217 if test "$curl" != "no" ; then
3218 if $pkg_config libcurl --exists; then
3219 curlconfig="$pkg_config libcurl"
3220 else
3221 curlconfig=curl-config
3223 cat > $TMPC << EOF
3224 #include <curl/curl.h>
3225 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3227 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3228 curl_libs=$($curlconfig --libs 2>/dev/null)
3229 if compile_prog "$curl_cflags" "$curl_libs" ; then
3230 curl=yes
3231 else
3232 if test "$curl" = "yes" ; then
3233 feature_not_found "curl" "Install libcurl devel"
3235 curl=no
3237 fi # test "$curl"
3239 ##########################################
3240 # bluez support probe
3241 if test "$bluez" != "no" ; then
3242 cat > $TMPC << EOF
3243 #include <bluetooth/bluetooth.h>
3244 int main(void) { return bt_error(0); }
3246 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3247 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3248 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3249 bluez=yes
3250 libs_softmmu="$bluez_libs $libs_softmmu"
3251 else
3252 if test "$bluez" = "yes" ; then
3253 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3255 bluez="no"
3259 ##########################################
3260 # glib support probe
3262 if test "$mingw32" = yes; then
3263 glib_req_ver=2.30
3264 else
3265 glib_req_ver=2.22
3267 glib_modules=gthread-2.0
3268 if test "$modules" = yes; then
3269 glib_modules="$glib_modules gmodule-2.0"
3272 # This workaround is required due to a bug in pkg-config file for glib as it
3273 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3275 if test "$static" = yes -a "$mingw32" = yes; then
3276 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3279 for i in $glib_modules; do
3280 if $pkg_config --atleast-version=$glib_req_ver $i; then
3281 glib_cflags=$($pkg_config --cflags $i)
3282 glib_libs=$($pkg_config --libs $i)
3283 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3284 LIBS="$glib_libs $LIBS"
3285 libs_qga="$glib_libs $libs_qga"
3286 else
3287 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3289 done
3291 # Sanity check that the current size_t matches the
3292 # size that glib thinks it should be. This catches
3293 # problems on multi-arch where people try to build
3294 # 32-bit QEMU while pointing at 64-bit glib headers
3295 cat > $TMPC <<EOF
3296 #include <glib.h>
3297 #include <unistd.h>
3299 #define QEMU_BUILD_BUG_ON(x) \
3300 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3302 int main(void) {
3303 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3304 return 0;
3308 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3309 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3310 "You probably need to set PKG_CONFIG_LIBDIR"\
3311 "to point to the right pkg-config files for your"\
3312 "build target"
3315 # g_test_trap_subprocess added in 2.38. Used by some tests.
3316 glib_subprocess=yes
3317 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3318 glib_subprocess=no
3321 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3322 cat > $TMPC << EOF
3323 #include <glib.h>
3324 int main(void) { return 0; }
3326 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3327 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3328 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3329 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3333 ##########################################
3334 # SHA command probe for modules
3335 if test "$modules" = yes; then
3336 shacmd_probe="sha1sum sha1 shasum"
3337 for c in $shacmd_probe; do
3338 if has $c; then
3339 shacmd="$c"
3340 break
3342 done
3343 if test "$shacmd" = ""; then
3344 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3348 ##########################################
3349 # pixman support probe
3351 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3352 pixman_cflags=
3353 pixman_libs=
3354 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3355 pixman_cflags=$($pkg_config --cflags pixman-1)
3356 pixman_libs=$($pkg_config --libs pixman-1)
3357 else
3358 error_exit "pixman >= 0.21.8 not present." \
3359 "Please install the pixman devel package."
3362 ##########################################
3363 # libmpathpersist probe
3365 if test "$mpath" != "no" ; then
3366 cat > $TMPC <<EOF
3367 #include <libudev.h>
3368 #include <mpath_persist.h>
3369 unsigned mpath_mx_alloc_len = 1024;
3370 int logsink;
3371 static struct config *multipath_conf;
3372 extern struct udev *udev;
3373 extern struct config *get_multipath_config(void);
3374 extern void put_multipath_config(struct config *conf);
3375 struct udev *udev;
3376 struct config *get_multipath_config(void) { return multipath_conf; }
3377 void put_multipath_config(struct config *conf) { }
3379 int main(void) {
3380 udev = udev_new();
3381 multipath_conf = mpath_lib_init();
3382 return 0;
3385 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3386 mpathpersist=yes
3387 else
3388 mpathpersist=no
3390 else
3391 mpathpersist=no
3394 ##########################################
3395 # libcap probe
3397 if test "$cap" != "no" ; then
3398 cat > $TMPC <<EOF
3399 #include <stdio.h>
3400 #include <sys/capability.h>
3401 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3403 if compile_prog "" "-lcap" ; then
3404 cap=yes
3405 else
3406 cap=no
3410 ##########################################
3411 # pthread probe
3412 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3414 pthread=no
3415 cat > $TMPC << EOF
3416 #include <pthread.h>
3417 static void *f(void *p) { return NULL; }
3418 int main(void) {
3419 pthread_t thread;
3420 pthread_create(&thread, 0, f, 0);
3421 return 0;
3424 if compile_prog "" "" ; then
3425 pthread=yes
3426 else
3427 for pthread_lib in $PTHREADLIBS_LIST; do
3428 if compile_prog "" "$pthread_lib" ; then
3429 pthread=yes
3430 found=no
3431 for lib_entry in $LIBS; do
3432 if test "$lib_entry" = "$pthread_lib"; then
3433 found=yes
3434 break
3436 done
3437 if test "$found" = "no"; then
3438 LIBS="$pthread_lib $LIBS"
3440 PTHREAD_LIB="$pthread_lib"
3441 break
3443 done
3446 if test "$mingw32" != yes -a "$pthread" = no; then
3447 error_exit "pthread check failed" \
3448 "Make sure to have the pthread libs and headers installed."
3451 # check for pthread_setname_np
3452 pthread_setname_np=no
3453 cat > $TMPC << EOF
3454 #include <pthread.h>
3456 static void *f(void *p) { return NULL; }
3457 int main(void)
3459 pthread_t thread;
3460 pthread_create(&thread, 0, f, 0);
3461 pthread_setname_np(thread, "QEMU");
3462 return 0;
3465 if compile_prog "" "$pthread_lib" ; then
3466 pthread_setname_np=yes
3469 ##########################################
3470 # rbd probe
3471 if test "$rbd" != "no" ; then
3472 cat > $TMPC <<EOF
3473 #include <stdio.h>
3474 #include <rbd/librbd.h>
3475 int main(void) {
3476 rados_t cluster;
3477 rados_create(&cluster, NULL);
3478 return 0;
3481 rbd_libs="-lrbd -lrados"
3482 if compile_prog "" "$rbd_libs" ; then
3483 rbd=yes
3484 else
3485 if test "$rbd" = "yes" ; then
3486 feature_not_found "rados block device" "Install librbd/ceph devel"
3488 rbd=no
3492 ##########################################
3493 # libssh2 probe
3494 min_libssh2_version=1.2.8
3495 if test "$libssh2" != "no" ; then
3496 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3497 libssh2_cflags=$($pkg_config libssh2 --cflags)
3498 libssh2_libs=$($pkg_config libssh2 --libs)
3499 libssh2=yes
3500 else
3501 if test "$libssh2" = "yes" ; then
3502 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3504 libssh2=no
3508 ##########################################
3509 # libssh2_sftp_fsync probe
3511 if test "$libssh2" = "yes"; then
3512 cat > $TMPC <<EOF
3513 #include <stdio.h>
3514 #include <libssh2.h>
3515 #include <libssh2_sftp.h>
3516 int main(void) {
3517 LIBSSH2_SESSION *session;
3518 LIBSSH2_SFTP *sftp;
3519 LIBSSH2_SFTP_HANDLE *sftp_handle;
3520 session = libssh2_session_init ();
3521 sftp = libssh2_sftp_init (session);
3522 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3523 libssh2_sftp_fsync (sftp_handle);
3524 return 0;
3527 # libssh2_cflags/libssh2_libs defined in previous test.
3528 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3529 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3533 ##########################################
3534 # linux-aio probe
3536 if test "$linux_aio" != "no" ; then
3537 cat > $TMPC <<EOF
3538 #include <libaio.h>
3539 #include <sys/eventfd.h>
3540 #include <stddef.h>
3541 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3543 if compile_prog "" "-laio" ; then
3544 linux_aio=yes
3545 else
3546 if test "$linux_aio" = "yes" ; then
3547 feature_not_found "linux AIO" "Install libaio devel"
3549 linux_aio=no
3553 ##########################################
3554 # TPM passthrough is only on x86 Linux
3556 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3557 tpm_passthrough=$tpm
3558 else
3559 tpm_passthrough=no
3562 # TPM emulator is for all posix systems
3563 if test "$mingw32" != "yes"; then
3564 tpm_emulator=$tpm
3565 else
3566 tpm_emulator=no
3568 ##########################################
3569 # attr probe
3571 if test "$attr" != "no" ; then
3572 cat > $TMPC <<EOF
3573 #include <stdio.h>
3574 #include <sys/types.h>
3575 #ifdef CONFIG_LIBATTR
3576 #include <attr/xattr.h>
3577 #else
3578 #include <sys/xattr.h>
3579 #endif
3580 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3582 if compile_prog "" "" ; then
3583 attr=yes
3584 # Older distros have <attr/xattr.h>, and need -lattr:
3585 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3586 attr=yes
3587 LIBS="-lattr $LIBS"
3588 libattr=yes
3589 else
3590 if test "$attr" = "yes" ; then
3591 feature_not_found "ATTR" "Install libc6 or libattr devel"
3593 attr=no
3597 ##########################################
3598 # iovec probe
3599 cat > $TMPC <<EOF
3600 #include <sys/types.h>
3601 #include <sys/uio.h>
3602 #include <unistd.h>
3603 int main(void) { return sizeof(struct iovec); }
3605 iovec=no
3606 if compile_prog "" "" ; then
3607 iovec=yes
3610 ##########################################
3611 # preadv probe
3612 cat > $TMPC <<EOF
3613 #include <sys/types.h>
3614 #include <sys/uio.h>
3615 #include <unistd.h>
3616 int main(void) { return preadv(0, 0, 0, 0); }
3618 preadv=no
3619 if compile_prog "" "" ; then
3620 preadv=yes
3623 ##########################################
3624 # fdt probe
3625 # fdt support is mandatory for at least some target architectures,
3626 # so insist on it if we're building those system emulators.
3627 fdt_required=no
3628 for target in $target_list; do
3629 case $target in
3630 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3631 fdt_required=yes
3633 esac
3634 done
3636 if test "$fdt_required" = "yes"; then
3637 if test "$fdt" = "no"; then
3638 error_exit "fdt disabled but some requested targets require it." \
3639 "You can turn off fdt only if you also disable all the system emulation" \
3640 "targets which need it (by specifying a cut down --target-list)."
3642 fdt=yes
3645 if test "$fdt" != "no" ; then
3646 fdt_libs="-lfdt"
3647 # explicitly check for libfdt_env.h as it is missing in some stable installs
3648 # and test for required functions to make sure we are on a version >= 1.4.2
3649 cat > $TMPC << EOF
3650 #include <libfdt.h>
3651 #include <libfdt_env.h>
3652 int main(void) { fdt_first_subnode(0, 0); return 0; }
3654 if compile_prog "" "$fdt_libs" ; then
3655 # system DTC is good - use it
3656 fdt=yes
3657 else
3658 # have GIT checkout, so activate dtc submodule
3659 if test -e "${source_path}/.git" ; then
3660 git_submodules="${git_submodules} dtc"
3662 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3663 fdt=yes
3664 dtc_internal="yes"
3665 mkdir -p dtc
3666 if [ "$pwd_is_source_path" != "y" ] ; then
3667 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3668 symlink "$source_path/dtc/scripts" "dtc/scripts"
3670 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3671 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3672 elif test "$fdt" = "yes" ; then
3673 # Not a git build & no libfdt found, prompt for system install
3674 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3675 "Please install the DTC (libfdt) devel package"
3676 else
3677 # don't have and don't want
3678 fdt_libs=
3679 fdt=no
3684 libs_softmmu="$libs_softmmu $fdt_libs"
3686 ##########################################
3687 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3689 if test "$opengl" != "no" ; then
3690 opengl_pkgs="epoxy libdrm gbm"
3691 if $pkg_config $opengl_pkgs x11; then
3692 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3693 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3694 opengl=yes
3695 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3696 gtk_gl="yes"
3698 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3699 else
3700 if test "$opengl" = "yes" ; then
3701 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3703 opengl_cflags=""
3704 opengl_libs=""
3705 opengl=no
3709 if test "$opengl" = "yes"; then
3710 cat > $TMPC << EOF
3711 #include <epoxy/egl.h>
3712 #ifndef EGL_MESA_image_dma_buf_export
3713 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3714 #endif
3715 int main(void) { return 0; }
3717 if compile_prog "" "" ; then
3718 opengl_dmabuf=yes
3723 ##########################################
3724 # glusterfs probe
3725 if test "$glusterfs" != "no" ; then
3726 if $pkg_config --atleast-version=3 glusterfs-api; then
3727 glusterfs="yes"
3728 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3729 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3730 if $pkg_config --atleast-version=4 glusterfs-api; then
3731 glusterfs_xlator_opt="yes"
3733 if $pkg_config --atleast-version=5 glusterfs-api; then
3734 glusterfs_discard="yes"
3736 if $pkg_config --atleast-version=6 glusterfs-api; then
3737 glusterfs_fallocate="yes"
3738 glusterfs_zerofill="yes"
3740 else
3741 if test "$glusterfs" = "yes" ; then
3742 feature_not_found "GlusterFS backend support" \
3743 "Install glusterfs-api devel >= 3"
3745 glusterfs="no"
3749 # Check for inotify functions when we are building linux-user
3750 # emulator. This is done because older glibc versions don't
3751 # have syscall stubs for these implemented. In that case we
3752 # don't provide them even if kernel supports them.
3754 inotify=no
3755 cat > $TMPC << EOF
3756 #include <sys/inotify.h>
3759 main(void)
3761 /* try to start inotify */
3762 return inotify_init();
3765 if compile_prog "" "" ; then
3766 inotify=yes
3769 inotify1=no
3770 cat > $TMPC << EOF
3771 #include <sys/inotify.h>
3774 main(void)
3776 /* try to start inotify */
3777 return inotify_init1(0);
3780 if compile_prog "" "" ; then
3781 inotify1=yes
3784 # check if pipe2 is there
3785 pipe2=no
3786 cat > $TMPC << EOF
3787 #include <unistd.h>
3788 #include <fcntl.h>
3790 int main(void)
3792 int pipefd[2];
3793 return pipe2(pipefd, O_CLOEXEC);
3796 if compile_prog "" "" ; then
3797 pipe2=yes
3800 # check if accept4 is there
3801 accept4=no
3802 cat > $TMPC << EOF
3803 #include <sys/socket.h>
3804 #include <stddef.h>
3806 int main(void)
3808 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3809 return 0;
3812 if compile_prog "" "" ; then
3813 accept4=yes
3816 # check if tee/splice is there. vmsplice was added same time.
3817 splice=no
3818 cat > $TMPC << EOF
3819 #include <unistd.h>
3820 #include <fcntl.h>
3821 #include <limits.h>
3823 int main(void)
3825 int len, fd = 0;
3826 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3827 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3828 return 0;
3831 if compile_prog "" "" ; then
3832 splice=yes
3835 ##########################################
3836 # libnuma probe
3838 if test "$numa" != "no" ; then
3839 cat > $TMPC << EOF
3840 #include <numa.h>
3841 int main(void) { return numa_available(); }
3844 if compile_prog "" "-lnuma" ; then
3845 numa=yes
3846 libs_softmmu="-lnuma $libs_softmmu"
3847 else
3848 if test "$numa" = "yes" ; then
3849 feature_not_found "numa" "install numactl devel"
3851 numa=no
3855 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3856 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3857 exit 1
3860 ##########################################
3861 # tcmalloc probe
3863 if test "$tcmalloc" = "yes" ; then
3864 cat > $TMPC << EOF
3865 #include <stdlib.h>
3866 int main(void) { malloc(1); return 0; }
3869 if compile_prog "" "-ltcmalloc" ; then
3870 LIBS="-ltcmalloc $LIBS"
3871 else
3872 feature_not_found "tcmalloc" "install gperftools devel"
3876 ##########################################
3877 # jemalloc probe
3879 if test "$jemalloc" = "yes" ; then
3880 cat > $TMPC << EOF
3881 #include <stdlib.h>
3882 int main(void) { malloc(1); return 0; }
3885 if compile_prog "" "-ljemalloc" ; then
3886 LIBS="-ljemalloc $LIBS"
3887 else
3888 feature_not_found "jemalloc" "install jemalloc devel"
3892 ##########################################
3893 # signalfd probe
3894 signalfd="no"
3895 cat > $TMPC << EOF
3896 #include <unistd.h>
3897 #include <sys/syscall.h>
3898 #include <signal.h>
3899 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3902 if compile_prog "" "" ; then
3903 signalfd=yes
3906 # check if eventfd is supported
3907 eventfd=no
3908 cat > $TMPC << EOF
3909 #include <sys/eventfd.h>
3911 int main(void)
3913 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3916 if compile_prog "" "" ; then
3917 eventfd=yes
3920 # check if memfd is supported
3921 memfd=no
3922 cat > $TMPC << EOF
3923 #include <sys/memfd.h>
3925 int main(void)
3927 return memfd_create("foo", MFD_ALLOW_SEALING);
3930 if compile_prog "" "" ; then
3931 memfd=yes
3936 # check for fallocate
3937 fallocate=no
3938 cat > $TMPC << EOF
3939 #include <fcntl.h>
3941 int main(void)
3943 fallocate(0, 0, 0, 0);
3944 return 0;
3947 if compile_prog "" "" ; then
3948 fallocate=yes
3951 # check for fallocate hole punching
3952 fallocate_punch_hole=no
3953 cat > $TMPC << EOF
3954 #include <fcntl.h>
3955 #include <linux/falloc.h>
3957 int main(void)
3959 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3960 return 0;
3963 if compile_prog "" "" ; then
3964 fallocate_punch_hole=yes
3967 # check that fallocate supports range zeroing inside the file
3968 fallocate_zero_range=no
3969 cat > $TMPC << EOF
3970 #include <fcntl.h>
3971 #include <linux/falloc.h>
3973 int main(void)
3975 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3976 return 0;
3979 if compile_prog "" "" ; then
3980 fallocate_zero_range=yes
3983 # check for posix_fallocate
3984 posix_fallocate=no
3985 cat > $TMPC << EOF
3986 #include <fcntl.h>
3988 int main(void)
3990 posix_fallocate(0, 0, 0);
3991 return 0;
3994 if compile_prog "" "" ; then
3995 posix_fallocate=yes
3998 # check for sync_file_range
3999 sync_file_range=no
4000 cat > $TMPC << EOF
4001 #include <fcntl.h>
4003 int main(void)
4005 sync_file_range(0, 0, 0, 0);
4006 return 0;
4009 if compile_prog "" "" ; then
4010 sync_file_range=yes
4013 # check for linux/fiemap.h and FS_IOC_FIEMAP
4014 fiemap=no
4015 cat > $TMPC << EOF
4016 #include <sys/ioctl.h>
4017 #include <linux/fs.h>
4018 #include <linux/fiemap.h>
4020 int main(void)
4022 ioctl(0, FS_IOC_FIEMAP, 0);
4023 return 0;
4026 if compile_prog "" "" ; then
4027 fiemap=yes
4030 # check for dup3
4031 dup3=no
4032 cat > $TMPC << EOF
4033 #include <unistd.h>
4035 int main(void)
4037 dup3(0, 0, 0);
4038 return 0;
4041 if compile_prog "" "" ; then
4042 dup3=yes
4045 # check for ppoll support
4046 ppoll=no
4047 cat > $TMPC << EOF
4048 #include <poll.h>
4050 int main(void)
4052 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4053 ppoll(&pfd, 1, 0, 0);
4054 return 0;
4057 if compile_prog "" "" ; then
4058 ppoll=yes
4061 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4062 prctl_pr_set_timerslack=no
4063 cat > $TMPC << EOF
4064 #include <sys/prctl.h>
4066 int main(void)
4068 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4069 return 0;
4072 if compile_prog "" "" ; then
4073 prctl_pr_set_timerslack=yes
4076 # check for epoll support
4077 epoll=no
4078 cat > $TMPC << EOF
4079 #include <sys/epoll.h>
4081 int main(void)
4083 epoll_create(0);
4084 return 0;
4087 if compile_prog "" "" ; then
4088 epoll=yes
4091 # epoll_create1 is a later addition
4092 # so we must check separately for its presence
4093 epoll_create1=no
4094 cat > $TMPC << EOF
4095 #include <sys/epoll.h>
4097 int main(void)
4099 /* Note that we use epoll_create1 as a value, not as
4100 * a function being called. This is necessary so that on
4101 * old SPARC glibc versions where the function was present in
4102 * the library but not declared in the header file we will
4103 * fail the configure check. (Otherwise we will get a compiler
4104 * warning but not an error, and will proceed to fail the
4105 * qemu compile where we compile with -Werror.)
4107 return (int)(uintptr_t)&epoll_create1;
4110 if compile_prog "" "" ; then
4111 epoll_create1=yes
4114 # check for sendfile support
4115 sendfile=no
4116 cat > $TMPC << EOF
4117 #include <sys/sendfile.h>
4119 int main(void)
4121 return sendfile(0, 0, 0, 0);
4124 if compile_prog "" "" ; then
4125 sendfile=yes
4128 # check for timerfd support (glibc 2.8 and newer)
4129 timerfd=no
4130 cat > $TMPC << EOF
4131 #include <sys/timerfd.h>
4133 int main(void)
4135 return(timerfd_create(CLOCK_REALTIME, 0));
4138 if compile_prog "" "" ; then
4139 timerfd=yes
4142 # check for setns and unshare support
4143 setns=no
4144 cat > $TMPC << EOF
4145 #include <sched.h>
4147 int main(void)
4149 int ret;
4150 ret = setns(0, 0);
4151 ret = unshare(0);
4152 return ret;
4155 if compile_prog "" "" ; then
4156 setns=yes
4159 # clock_adjtime probe
4160 clock_adjtime=no
4161 cat > $TMPC <<EOF
4162 #include <time.h>
4164 int main(void)
4166 return clock_adjtime(0, 0);
4169 clock_adjtime=no
4170 if compile_prog "" "" ; then
4171 clock_adjtime=yes
4174 # syncfs probe
4175 syncfs=no
4176 cat > $TMPC <<EOF
4177 #include <unistd.h>
4179 int main(void)
4181 return syncfs(0);
4184 syncfs=no
4185 if compile_prog "" "" ; then
4186 syncfs=yes
4189 # Check if tools are available to build documentation.
4190 if test "$docs" != "no" ; then
4191 if has makeinfo && has pod2man; then
4192 docs=yes
4193 else
4194 if test "$docs" = "yes" ; then
4195 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4197 docs=no
4201 # Search for bswap_32 function
4202 byteswap_h=no
4203 cat > $TMPC << EOF
4204 #include <byteswap.h>
4205 int main(void) { return bswap_32(0); }
4207 if compile_prog "" "" ; then
4208 byteswap_h=yes
4211 # Search for bswap32 function
4212 bswap_h=no
4213 cat > $TMPC << EOF
4214 #include <sys/endian.h>
4215 #include <sys/types.h>
4216 #include <machine/bswap.h>
4217 int main(void) { return bswap32(0); }
4219 if compile_prog "" "" ; then
4220 bswap_h=yes
4223 ##########################################
4224 # Do we have libiscsi >= 1.9.0
4225 if test "$libiscsi" != "no" ; then
4226 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4227 libiscsi="yes"
4228 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4229 libiscsi_libs=$($pkg_config --libs libiscsi)
4230 else
4231 if test "$libiscsi" = "yes" ; then
4232 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4234 libiscsi="no"
4238 ##########################################
4239 # Do we need libm
4240 cat > $TMPC << EOF
4241 #include <math.h>
4242 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4244 if compile_prog "" "" ; then
4246 elif compile_prog "" "-lm" ; then
4247 LIBS="-lm $LIBS"
4248 libs_qga="-lm $libs_qga"
4249 else
4250 error_exit "libm check failed"
4253 ##########################################
4254 # Do we need librt
4255 # uClibc provides 2 versions of clock_gettime(), one with realtime
4256 # support and one without. This means that the clock_gettime() don't
4257 # need -lrt. We still need it for timer_create() so we check for this
4258 # function in addition.
4259 cat > $TMPC <<EOF
4260 #include <signal.h>
4261 #include <time.h>
4262 int main(void) {
4263 timer_create(CLOCK_REALTIME, NULL, NULL);
4264 return clock_gettime(CLOCK_REALTIME, NULL);
4268 if compile_prog "" "" ; then
4270 # we need pthread for static linking. use previous pthread test result
4271 elif compile_prog "" "$pthread_lib -lrt" ; then
4272 LIBS="$LIBS -lrt"
4273 libs_qga="$libs_qga -lrt"
4276 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4277 "$haiku" != "yes" ; then
4278 libs_softmmu="-lutil $libs_softmmu"
4281 ##########################################
4282 # spice probe
4283 if test "$spice" != "no" ; then
4284 cat > $TMPC << EOF
4285 #include <spice.h>
4286 int main(void) { spice_server_new(); return 0; }
4288 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4289 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4290 if $pkg_config --atleast-version=0.12.0 spice-server && \
4291 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4292 compile_prog "$spice_cflags" "$spice_libs" ; then
4293 spice="yes"
4294 libs_softmmu="$libs_softmmu $spice_libs"
4295 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4296 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4297 spice_server_version=$($pkg_config --modversion spice-server)
4298 else
4299 if test "$spice" = "yes" ; then
4300 feature_not_found "spice" \
4301 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4303 spice="no"
4307 # check for smartcard support
4308 if test "$smartcard" != "no"; then
4309 if $pkg_config libcacard; then
4310 libcacard_cflags=$($pkg_config --cflags libcacard)
4311 libcacard_libs=$($pkg_config --libs libcacard)
4312 smartcard="yes"
4313 else
4314 if test "$smartcard" = "yes"; then
4315 feature_not_found "smartcard" "Install libcacard devel"
4317 smartcard="no"
4321 # check for libusb
4322 if test "$libusb" != "no" ; then
4323 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4324 libusb="yes"
4325 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4326 libusb_libs=$($pkg_config --libs libusb-1.0)
4327 else
4328 if test "$libusb" = "yes"; then
4329 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4331 libusb="no"
4335 # check for usbredirparser for usb network redirection support
4336 if test "$usb_redir" != "no" ; then
4337 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4338 usb_redir="yes"
4339 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4340 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4341 else
4342 if test "$usb_redir" = "yes"; then
4343 feature_not_found "usb-redir" "Install usbredir devel"
4345 usb_redir="no"
4349 ##########################################
4350 # check if we have VSS SDK headers for win
4352 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4353 case "$vss_win32_sdk" in
4354 "") vss_win32_include="-isystem $source_path" ;;
4355 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4356 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4357 vss_win32_include="-isystem $source_path/.sdk/vss"
4358 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4360 *) vss_win32_include="-isystem $vss_win32_sdk"
4361 esac
4362 cat > $TMPC << EOF
4363 #define __MIDL_user_allocate_free_DEFINED__
4364 #include <inc/win2003/vss.h>
4365 int main(void) { return VSS_CTX_BACKUP; }
4367 if compile_prog "$vss_win32_include" "" ; then
4368 guest_agent_with_vss="yes"
4369 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4370 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4371 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4372 else
4373 if test "$vss_win32_sdk" != "" ; then
4374 echo "ERROR: Please download and install Microsoft VSS SDK:"
4375 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4376 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4377 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4378 echo "ERROR: The headers are extracted in the directory \`inc'."
4379 feature_not_found "VSS support"
4381 guest_agent_with_vss="no"
4385 ##########################################
4386 # lookup Windows platform SDK (if not specified)
4387 # The SDK is needed only to build .tlb (type library) file of guest agent
4388 # VSS provider from the source. It is usually unnecessary because the
4389 # pre-compiled .tlb file is included.
4391 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4392 if test -z "$win_sdk"; then
4393 programfiles="$PROGRAMFILES"
4394 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4395 if test -n "$programfiles"; then
4396 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4397 else
4398 feature_not_found "Windows SDK"
4400 elif test "$win_sdk" = "no"; then
4401 win_sdk=""
4405 ##########################################
4406 # check if mingw environment provides a recent ntddscsi.h
4407 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4408 cat > $TMPC << EOF
4409 #include <windows.h>
4410 #include <ntddscsi.h>
4411 int main(void) {
4412 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4413 #error Missing required ioctl definitions
4414 #endif
4415 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4416 return addr.Lun;
4419 if compile_prog "" "" ; then
4420 guest_agent_ntddscsi=yes
4421 libs_qga="-lsetupapi $libs_qga"
4425 ##########################################
4426 # virgl renderer probe
4428 if test "$virglrenderer" != "no" ; then
4429 cat > $TMPC << EOF
4430 #include <virglrenderer.h>
4431 int main(void) { virgl_renderer_poll(); return 0; }
4433 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4434 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4435 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4436 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4437 virglrenderer="yes"
4438 else
4439 if test "$virglrenderer" = "yes" ; then
4440 feature_not_found "virglrenderer"
4442 virglrenderer="no"
4446 ##########################################
4447 # capstone
4449 case "$capstone" in
4450 "" | yes)
4451 if $pkg_config capstone; then
4452 capstone=system
4453 elif test -e "${source_path}/.git" ; then
4454 capstone=git
4455 elif test -e "${source_path}/capstone/Makefile" ; then
4456 capstone=internal
4457 elif test -z "$capstone" ; then
4458 capstone=no
4459 else
4460 feature_not_found "capstone" "Install capstone devel or git submodule"
4464 system)
4465 if ! $pkg_config capstone; then
4466 feature_not_found "capstone" "Install capstone devel"
4469 esac
4471 case "$capstone" in
4472 git | internal)
4473 if test "$capstone" = git; then
4474 git_submodules="${git_submodules} capstone"
4476 mkdir -p capstone
4477 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4478 if test "$mingw32" = "yes"; then
4479 LIBCAPSTONE=capstone.lib
4480 else
4481 LIBCAPSTONE=libcapstone.a
4483 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4486 system)
4487 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4488 LIBS="$($pkg_config --libs capstone) $LIBS"
4494 error_exit "Unknown state for capstone: $capstone"
4496 esac
4498 ##########################################
4499 # check if we have fdatasync
4501 fdatasync=no
4502 cat > $TMPC << EOF
4503 #include <unistd.h>
4504 int main(void) {
4505 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4506 return fdatasync(0);
4507 #else
4508 #error Not supported
4509 #endif
4512 if compile_prog "" "" ; then
4513 fdatasync=yes
4516 ##########################################
4517 # check if we have madvise
4519 madvise=no
4520 cat > $TMPC << EOF
4521 #include <sys/types.h>
4522 #include <sys/mman.h>
4523 #include <stddef.h>
4524 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4526 if compile_prog "" "" ; then
4527 madvise=yes
4530 ##########################################
4531 # check if we have posix_madvise
4533 posix_madvise=no
4534 cat > $TMPC << EOF
4535 #include <sys/mman.h>
4536 #include <stddef.h>
4537 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4539 if compile_prog "" "" ; then
4540 posix_madvise=yes
4543 ##########################################
4544 # check if we have posix_syslog
4546 posix_syslog=no
4547 cat > $TMPC << EOF
4548 #include <syslog.h>
4549 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4551 if compile_prog "" "" ; then
4552 posix_syslog=yes
4555 ##########################################
4556 # check if we have sem_timedwait
4558 sem_timedwait=no
4559 cat > $TMPC << EOF
4560 #include <semaphore.h>
4561 int main(void) { return sem_timedwait(0, 0); }
4563 if compile_prog "" "" ; then
4564 sem_timedwait=yes
4567 ##########################################
4568 # check if trace backend exists
4570 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4571 if test "$?" -ne 0 ; then
4572 error_exit "invalid trace backends" \
4573 "Please choose supported trace backends."
4576 ##########################################
4577 # For 'ust' backend, test if ust headers are present
4578 if have_backend "ust"; then
4579 cat > $TMPC << EOF
4580 #include <lttng/tracepoint.h>
4581 int main(void) { return 0; }
4583 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4584 if $pkg_config lttng-ust --exists; then
4585 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4586 else
4587 lttng_ust_libs="-llttng-ust -ldl"
4589 if $pkg_config liburcu-bp --exists; then
4590 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4591 else
4592 urcu_bp_libs="-lurcu-bp"
4595 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4596 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4597 else
4598 error_exit "Trace backend 'ust' missing lttng-ust header files"
4602 ##########################################
4603 # For 'dtrace' backend, test if 'dtrace' command is present
4604 if have_backend "dtrace"; then
4605 if ! has 'dtrace' ; then
4606 error_exit "dtrace command is not found in PATH $PATH"
4608 trace_backend_stap="no"
4609 if has 'stap' ; then
4610 trace_backend_stap="yes"
4614 ##########################################
4615 # check and set a backend for coroutine
4617 # We prefer ucontext, but it's not always possible. The fallback
4618 # is sigcontext. On Windows the only valid backend is the Windows
4619 # specific one.
4621 ucontext_works=no
4622 if test "$darwin" != "yes"; then
4623 cat > $TMPC << EOF
4624 #include <ucontext.h>
4625 #ifdef __stub_makecontext
4626 #error Ignoring glibc stub makecontext which will always fail
4627 #endif
4628 int main(void) { makecontext(0, 0, 0); return 0; }
4630 if compile_prog "" "" ; then
4631 ucontext_works=yes
4635 if test "$coroutine" = ""; then
4636 if test "$mingw32" = "yes"; then
4637 coroutine=win32
4638 elif test "$ucontext_works" = "yes"; then
4639 coroutine=ucontext
4640 else
4641 coroutine=sigaltstack
4643 else
4644 case $coroutine in
4645 windows)
4646 if test "$mingw32" != "yes"; then
4647 error_exit "'windows' coroutine backend only valid for Windows"
4649 # Unfortunately the user visible backend name doesn't match the
4650 # coroutine-*.c filename for this case, so we have to adjust it here.
4651 coroutine=win32
4653 ucontext)
4654 if test "$ucontext_works" != "yes"; then
4655 feature_not_found "ucontext"
4658 sigaltstack)
4659 if test "$mingw32" = "yes"; then
4660 error_exit "only the 'windows' coroutine backend is valid for Windows"
4664 error_exit "unknown coroutine backend $coroutine"
4666 esac
4669 if test "$coroutine_pool" = ""; then
4670 coroutine_pool=yes
4673 if test "$debug_stack_usage" = "yes"; then
4674 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4675 error_exit "stack usage debugging is not supported for $cpu"
4677 if test "$coroutine_pool" = "yes"; then
4678 echo "WARN: disabling coroutine pool for stack usage debugging"
4679 coroutine_pool=no
4684 ##########################################
4685 # check if we have open_by_handle_at
4687 open_by_handle_at=no
4688 cat > $TMPC << EOF
4689 #include <fcntl.h>
4690 #if !defined(AT_EMPTY_PATH)
4691 # error missing definition
4692 #else
4693 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4694 #endif
4696 if compile_prog "" "" ; then
4697 open_by_handle_at=yes
4700 ########################################
4701 # check if we have linux/magic.h
4703 linux_magic_h=no
4704 cat > $TMPC << EOF
4705 #include <linux/magic.h>
4706 int main(void) {
4707 return 0;
4710 if compile_prog "" "" ; then
4711 linux_magic_h=yes
4714 ########################################
4715 # check whether we can disable warning option with a pragma (this is needed
4716 # to silence warnings in the headers of some versions of external libraries).
4717 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4718 # only a warning.
4720 # If we can't selectively disable warning in the code, disable -Werror so that
4721 # the build doesn't fail anyway.
4723 pragma_disable_unused_but_set=no
4724 cat > $TMPC << EOF
4725 #pragma GCC diagnostic push
4726 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4727 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4728 #pragma GCC diagnostic pop
4730 int main(void) {
4731 return 0;
4734 if compile_prog "-Werror" "" ; then
4735 pragma_diagnostic_available=yes
4736 else
4737 werror=no
4740 ########################################
4741 # check if we have valgrind/valgrind.h
4743 valgrind_h=no
4744 cat > $TMPC << EOF
4745 #include <valgrind/valgrind.h>
4746 int main(void) {
4747 return 0;
4750 if compile_prog "" "" ; then
4751 valgrind_h=yes
4754 ########################################
4755 # check if environ is declared
4757 has_environ=no
4758 cat > $TMPC << EOF
4759 #include <unistd.h>
4760 int main(void) {
4761 environ = 0;
4762 return 0;
4765 if compile_prog "" "" ; then
4766 has_environ=yes
4769 ########################################
4770 # check if cpuid.h is usable.
4772 cat > $TMPC << EOF
4773 #include <cpuid.h>
4774 int main(void) {
4775 unsigned a, b, c, d;
4776 int max = __get_cpuid_max(0, 0);
4778 if (max >= 1) {
4779 __cpuid(1, a, b, c, d);
4782 if (max >= 7) {
4783 __cpuid_count(7, 0, a, b, c, d);
4786 return 0;
4789 if compile_prog "" "" ; then
4790 cpuid_h=yes
4793 ##########################################
4794 # avx2 optimization requirement check
4796 # There is no point enabling this if cpuid.h is not usable,
4797 # since we won't be able to select the new routines.
4799 if test $cpuid_h = yes; then
4800 cat > $TMPC << EOF
4801 #pragma GCC push_options
4802 #pragma GCC target("avx2")
4803 #include <cpuid.h>
4804 #include <immintrin.h>
4805 static int bar(void *a) {
4806 __m256i x = *(__m256i *)a;
4807 return _mm256_testz_si256(x, x);
4809 int main(int argc, char *argv[]) { return bar(argv[0]); }
4811 if compile_object "" ; then
4812 avx2_opt="yes"
4816 ########################################
4817 # check if __[u]int128_t is usable.
4819 int128=no
4820 cat > $TMPC << EOF
4821 #if defined(__clang_major__) && defined(__clang_minor__)
4822 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4823 # error __int128_t does not work in CLANG before 3.2
4824 # endif
4825 #endif
4826 __int128_t a;
4827 __uint128_t b;
4828 int main (void) {
4829 a = a + b;
4830 b = a * b;
4831 a = a * a;
4832 return 0;
4835 if compile_prog "" "" ; then
4836 int128=yes
4839 #########################################
4840 # See if 128-bit atomic operations are supported.
4842 atomic128=no
4843 if test "$int128" = "yes"; then
4844 cat > $TMPC << EOF
4845 int main(void)
4847 unsigned __int128 x = 0, y = 0;
4848 y = __atomic_load_16(&x, 0);
4849 __atomic_store_16(&x, y, 0);
4850 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4851 return 0;
4854 if compile_prog "" "" ; then
4855 atomic128=yes
4859 #########################################
4860 # See if 64-bit atomic operations are supported.
4861 # Note that without __atomic builtins, we can only
4862 # assume atomic loads/stores max at pointer size.
4864 cat > $TMPC << EOF
4865 #include <stdint.h>
4866 int main(void)
4868 uint64_t x = 0, y = 0;
4869 #ifdef __ATOMIC_RELAXED
4870 y = __atomic_load_8(&x, 0);
4871 __atomic_store_8(&x, y, 0);
4872 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4873 __atomic_exchange_8(&x, y, 0);
4874 __atomic_fetch_add_8(&x, y, 0);
4875 #else
4876 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4877 __sync_lock_test_and_set(&x, y);
4878 __sync_val_compare_and_swap(&x, y, 0);
4879 __sync_fetch_and_add(&x, y);
4880 #endif
4881 return 0;
4884 if compile_prog "" "" ; then
4885 atomic64=yes
4888 ########################################
4889 # check if getauxval is available.
4891 getauxval=no
4892 cat > $TMPC << EOF
4893 #include <sys/auxv.h>
4894 int main(void) {
4895 return getauxval(AT_HWCAP) == 0;
4898 if compile_prog "" "" ; then
4899 getauxval=yes
4902 ########################################
4903 # check if ccache is interfering with
4904 # semantic analysis of macros
4906 unset CCACHE_CPP2
4907 ccache_cpp2=no
4908 cat > $TMPC << EOF
4909 static const int Z = 1;
4910 #define fn() ({ Z; })
4911 #define TAUT(X) ((X) == Z)
4912 #define PAREN(X, Y) (X == Y)
4913 #define ID(X) (X)
4914 int main(int argc, char *argv[])
4916 int x = 0, y = 0;
4917 x = ID(x);
4918 x = fn();
4919 fn();
4920 if (PAREN(x, y)) return 0;
4921 if (TAUT(Z)) return 0;
4922 return 0;
4926 if ! compile_object "-Werror"; then
4927 ccache_cpp2=yes
4930 #################################################
4931 # clang does not support glibc + FORTIFY_SOURCE.
4933 if test "$fortify_source" != "no"; then
4934 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4935 fortify_source="no";
4936 elif test -n "$cxx" && has $cxx &&
4937 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4938 fortify_source="no";
4939 else
4940 fortify_source="yes"
4944 ##########################################
4945 # check if struct fsxattr is available via linux/fs.h
4947 have_fsxattr=no
4948 cat > $TMPC << EOF
4949 #include <linux/fs.h>
4950 struct fsxattr foo;
4951 int main(void) {
4952 return 0;
4955 if compile_prog "" "" ; then
4956 have_fsxattr=yes
4959 ##########################################
4960 # check if rtnetlink.h exists and is useful
4961 have_rtnetlink=no
4962 cat > $TMPC << EOF
4963 #include <linux/rtnetlink.h>
4964 int main(void) {
4965 return IFLA_PROTO_DOWN;
4968 if compile_prog "" "" ; then
4969 have_rtnetlink=yes
4972 ##########################################
4973 # check for usable AF_VSOCK environment
4974 have_af_vsock=no
4975 cat > $TMPC << EOF
4976 #include <errno.h>
4977 #include <sys/types.h>
4978 #include <sys/socket.h>
4979 #if !defined(AF_VSOCK)
4980 # error missing AF_VSOCK flag
4981 #endif
4982 #include <linux/vm_sockets.h>
4983 int main(void) {
4984 int sock, ret;
4985 struct sockaddr_vm svm;
4986 socklen_t len = sizeof(svm);
4987 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4988 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4989 if ((ret == -1) && (errno == ENOTCONN)) {
4990 return 0;
4992 return -1;
4995 if compile_prog "" "" ; then
4996 have_af_vsock=yes
4999 ##########################################
5000 # check for usable AF_ALG environment
5001 hava_afalg=no
5002 cat > $TMPC << EOF
5003 #include <errno.h>
5004 #include <sys/types.h>
5005 #include <sys/socket.h>
5006 #include <linux/if_alg.h>
5007 int main(void) {
5008 int sock;
5009 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5010 return sock;
5013 if compile_prog "" "" ; then
5014 have_afalg=yes
5016 if test "$crypto_afalg" = "yes"
5017 then
5018 if test "$have_afalg" != "yes"
5019 then
5020 error_exit "AF_ALG requested but could not be detected"
5025 #################################################
5026 # Sparc implicitly links with --relax, which is
5027 # incompatible with -r, so --no-relax should be
5028 # given. It does no harm to give it on other
5029 # platforms too.
5031 # Note: the prototype is needed since QEMU_CFLAGS
5032 # contains -Wmissing-prototypes
5033 cat > $TMPC << EOF
5034 extern int foo(void);
5035 int foo(void) { return 0; }
5037 if ! compile_object ""; then
5038 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5040 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5041 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5042 LD_REL_FLAGS=$i
5043 break
5045 done
5046 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5047 feature_not_found "modules" "Cannot find how to build relocatable objects"
5050 ##########################################
5051 # check for sysmacros.h
5053 have_sysmacros=no
5054 cat > $TMPC << EOF
5055 #include <sys/sysmacros.h>
5056 int main(void) {
5057 return makedev(0, 0);
5060 if compile_prog "" "" ; then
5061 have_sysmacros=yes
5064 ##########################################
5065 # Veritas HyperScale block driver VxHS
5066 # Check if libvxhs is installed
5068 if test "$vxhs" != "no" ; then
5069 cat > $TMPC <<EOF
5070 #include <stdint.h>
5071 #include <qnio/qnio_api.h>
5073 void *vxhs_callback;
5075 int main(void) {
5076 iio_init(QNIO_VERSION, vxhs_callback);
5077 return 0;
5080 vxhs_libs="-lvxhs -lssl"
5081 if compile_prog "" "$vxhs_libs" ; then
5082 vxhs=yes
5083 else
5084 if test "$vxhs" = "yes" ; then
5085 feature_not_found "vxhs block device" "Install libvxhs See github"
5087 vxhs=no
5091 ##########################################
5092 # check for _Static_assert()
5094 have_static_assert=no
5095 cat > $TMPC << EOF
5096 _Static_assert(1, "success");
5097 int main(void) {
5098 return 0;
5101 if compile_prog "" "" ; then
5102 have_static_assert=yes
5105 ##########################################
5106 # check for utmpx.h, it is missing e.g. on OpenBSD
5108 have_utmpx=no
5109 cat > $TMPC << EOF
5110 #include <utmpx.h>
5111 struct utmpx user_info;
5112 int main(void) {
5113 return 0;
5116 if compile_prog "" "" ; then
5117 have_utmpx=yes
5120 ##########################################
5121 # End of CC checks
5122 # After here, no more $cc or $ld runs
5124 if test "$gcov" = "yes" ; then
5125 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5126 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5127 elif test "$fortify_source" = "yes" ; then
5128 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5129 elif test "$debug" = "no"; then
5130 CFLAGS="-O2 $CFLAGS"
5133 ##########################################
5134 # Do we have libnfs
5135 if test "$libnfs" != "no" ; then
5136 if $pkg_config --atleast-version=1.9.3 libnfs; then
5137 libnfs="yes"
5138 libnfs_libs=$($pkg_config --libs libnfs)
5139 else
5140 if test "$libnfs" = "yes" ; then
5141 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5143 libnfs="no"
5147 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5148 if test "$werror" = "yes"; then
5149 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5152 if test "$solaris" = "no" ; then
5153 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5154 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5158 # test if pod2man has --utf8 option
5159 if pod2man --help | grep -q utf8; then
5160 POD2MAN="pod2man --utf8"
5161 else
5162 POD2MAN="pod2man"
5165 # Use ASLR, no-SEH and DEP if available
5166 if test "$mingw32" = "yes" ; then
5167 for flag in --dynamicbase --no-seh --nxcompat; do
5168 if ld_has $flag ; then
5169 LDFLAGS="-Wl,$flag $LDFLAGS"
5171 done
5174 qemu_confdir=$sysconfdir$confsuffix
5175 qemu_moddir=$libdir$confsuffix
5176 qemu_datadir=$datadir$confsuffix
5177 qemu_localedir="$datadir/locale"
5179 # We can only support ivshmem if we have eventfd
5180 if [ "$eventfd" = "yes" ]; then
5181 ivshmem=yes
5184 tools=""
5185 if test "$want_tools" = "yes" ; then
5186 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5187 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5188 tools="qemu-nbd\$(EXESUF) $tools"
5190 if [ "$ivshmem" = "yes" ]; then
5191 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5194 if test "$softmmu" = yes ; then
5195 if test "$linux" = yes; then
5196 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5197 virtfs=yes
5198 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5199 else
5200 if test "$virtfs" = yes; then
5201 error_exit "VirtFS requires libcap devel and libattr devel"
5203 virtfs=no
5205 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5206 mpath=yes
5207 else
5208 if test "$mpath" = yes; then
5209 error_exit "Multipath requires libmpathpersist devel"
5211 mpath=no
5213 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5214 else
5215 if test "$virtfs" = yes; then
5216 error_exit "VirtFS is supported only on Linux"
5218 virtfs=no
5219 if test "$mpath" = yes; then
5220 error_exit "Multipath is supported only on Linux"
5222 mpath=no
5224 if test "$xkbcommon" = "yes"; then
5225 tools="qemu-keymap\$(EXESUF) $tools"
5229 # Probe for guest agent support/options
5231 if [ "$guest_agent" != "no" ]; then
5232 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5233 tools="qemu-ga $tools"
5234 guest_agent=yes
5235 elif [ "$guest_agent" != yes ]; then
5236 guest_agent=no
5237 else
5238 error_exit "Guest agent is not supported on this platform"
5242 # Guest agent Window MSI package
5244 if test "$guest_agent" != yes; then
5245 if test "$guest_agent_msi" = yes; then
5246 error_exit "MSI guest agent package requires guest agent enabled"
5248 guest_agent_msi=no
5249 elif test "$mingw32" != "yes"; then
5250 if test "$guest_agent_msi" = "yes"; then
5251 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5253 guest_agent_msi=no
5254 elif ! has wixl; then
5255 if test "$guest_agent_msi" = "yes"; then
5256 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5258 guest_agent_msi=no
5259 else
5260 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5261 # disabled explicitly
5262 if test "$guest_agent_msi" != "no"; then
5263 guest_agent_msi=yes
5267 if test "$guest_agent_msi" = "yes"; then
5268 if test "$guest_agent_with_vss" = "yes"; then
5269 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5272 if test "$QEMU_GA_MANUFACTURER" = ""; then
5273 QEMU_GA_MANUFACTURER=QEMU
5276 if test "$QEMU_GA_DISTRO" = ""; then
5277 QEMU_GA_DISTRO=Linux
5280 if test "$QEMU_GA_VERSION" = ""; then
5281 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5284 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5286 case "$cpu" in
5287 x86_64)
5288 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5290 i386)
5291 QEMU_GA_MSI_ARCH="-D Arch=32"
5294 error_exit "CPU $cpu not supported for building installation package"
5296 esac
5299 # Mac OS X ships with a broken assembler
5300 roms=
5301 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5302 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5303 "$softmmu" = yes ; then
5304 # Different host OS linkers have different ideas about the name of the ELF
5305 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5306 # variant; and Windows uses i386pe.
5307 for emu in elf_i386 elf_i386_fbsd i386pe; do
5308 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5309 ld_i386_emulation="$emu"
5310 roms="optionrom"
5311 break
5313 done
5315 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5316 roms="$roms spapr-rtas"
5319 if test "$cpu" = "s390x" ; then
5320 roms="$roms s390-ccw"
5323 # Probe for the need for relocating the user-only binary.
5324 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5325 textseg_addr=
5326 case "$cpu" in
5327 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5328 # ??? Rationale for choosing this address
5329 textseg_addr=0x60000000
5331 mips)
5332 # A 256M aligned address, high in the address space, with enough
5333 # room for the code_gen_buffer above it before the stack.
5334 textseg_addr=0x60000000
5336 esac
5337 if [ -n "$textseg_addr" ]; then
5338 cat > $TMPC <<EOF
5339 int main(void) { return 0; }
5341 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5342 if ! compile_prog "" "$textseg_ldflags"; then
5343 # In case ld does not support -Ttext-segment, edit the default linker
5344 # script via sed to set the .text start addr. This is needed on FreeBSD
5345 # at least.
5346 if ! $ld --verbose >/dev/null 2>&1; then
5347 error_exit \
5348 "We need to link the QEMU user mode binaries at a" \
5349 "specific text address. Unfortunately your linker" \
5350 "doesn't support either the -Ttext-segment option or" \
5351 "printing the default linker script with --verbose." \
5352 "If you don't want the user mode binaries, pass the" \
5353 "--disable-user option to configure."
5356 $ld --verbose | sed \
5357 -e '1,/==================================================/d' \
5358 -e '/==================================================/,$d' \
5359 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5360 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5361 textseg_ldflags="-Wl,-T../config-host.ld"
5366 # Check that the C++ compiler exists and works with the C compiler.
5367 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5368 if has $cxx; then
5369 cat > $TMPC <<EOF
5370 int c_function(void);
5371 int main(void) { return c_function(); }
5374 compile_object
5376 cat > $TMPCXX <<EOF
5377 extern "C" {
5378 int c_function(void);
5380 int c_function(void) { return 42; }
5383 update_cxxflags
5385 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5386 # C++ compiler $cxx works ok with C compiler $cc
5388 else
5389 echo "C++ compiler $cxx does not work with C compiler $cc"
5390 echo "Disabling C++ specific optional code"
5391 cxx=
5393 else
5394 echo "No C++ compiler available; disabling C++ specific optional code"
5395 cxx=
5398 echo_version() {
5399 if test "$1" = "yes" ; then
5400 echo "($2)"
5404 # prepend pixman and ftd flags after all config tests are done
5405 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5406 libs_softmmu="$pixman_libs $libs_softmmu"
5408 echo "Install prefix $prefix"
5409 echo "BIOS directory $(eval echo $qemu_datadir)"
5410 echo "firmware path $(eval echo $firmwarepath)"
5411 echo "binary directory $(eval echo $bindir)"
5412 echo "library directory $(eval echo $libdir)"
5413 echo "module directory $(eval echo $qemu_moddir)"
5414 echo "libexec directory $(eval echo $libexecdir)"
5415 echo "include directory $(eval echo $includedir)"
5416 echo "config directory $(eval echo $sysconfdir)"
5417 if test "$mingw32" = "no" ; then
5418 echo "local state directory $(eval echo $local_statedir)"
5419 echo "Manual directory $(eval echo $mandir)"
5420 echo "ELF interp prefix $interp_prefix"
5421 else
5422 echo "local state directory queried at runtime"
5423 echo "Windows SDK $win_sdk"
5425 echo "Source path $source_path"
5426 echo "GIT binary $git"
5427 echo "GIT submodules $git_submodules"
5428 echo "C compiler $cc"
5429 echo "Host C compiler $host_cc"
5430 echo "C++ compiler $cxx"
5431 echo "Objective-C compiler $objcc"
5432 echo "ARFLAGS $ARFLAGS"
5433 echo "CFLAGS $CFLAGS"
5434 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5435 echo "LDFLAGS $LDFLAGS"
5436 echo "make $make"
5437 echo "install $install"
5438 echo "python $python"
5439 if test "$slirp" = "yes" ; then
5440 echo "smbd $smbd"
5442 echo "module support $modules"
5443 echo "host CPU $cpu"
5444 echo "host big endian $bigendian"
5445 echo "target list $target_list"
5446 echo "gprof enabled $gprof"
5447 echo "sparse enabled $sparse"
5448 echo "strip binaries $strip_opt"
5449 echo "profiler $profiler"
5450 echo "static build $static"
5451 if test "$darwin" = "yes" ; then
5452 echo "Cocoa support $cocoa"
5454 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5455 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5456 echo "GTK GL support $gtk_gl"
5457 echo "VTE support $vte $(echo_version $vte $vteversion)"
5458 echo "TLS priority $tls_priority"
5459 echo "GNUTLS support $gnutls"
5460 echo "GNUTLS rnd $gnutls_rnd"
5461 echo "libgcrypt $gcrypt"
5462 echo "libgcrypt kdf $gcrypt_kdf"
5463 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5464 echo "nettle kdf $nettle_kdf"
5465 echo "libtasn1 $tasn1"
5466 echo "curses support $curses"
5467 echo "virgl support $virglrenderer"
5468 echo "curl support $curl"
5469 echo "mingw32 support $mingw32"
5470 echo "Audio drivers $audio_drv_list"
5471 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5472 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5473 echo "VirtFS support $virtfs"
5474 echo "Multipath support $mpath"
5475 echo "VNC support $vnc"
5476 if test "$vnc" = "yes" ; then
5477 echo "VNC SASL support $vnc_sasl"
5478 echo "VNC JPEG support $vnc_jpeg"
5479 echo "VNC PNG support $vnc_png"
5481 if test -n "$sparc_cpu"; then
5482 echo "Target Sparc Arch $sparc_cpu"
5484 echo "xen support $xen"
5485 if test "$xen" = "yes" ; then
5486 echo "xen ctrl version $xen_ctrl_version"
5487 echo "pv dom build $xen_pv_domain_build"
5489 echo "brlapi support $brlapi"
5490 echo "bluez support $bluez"
5491 echo "Documentation $docs"
5492 echo "PIE $pie"
5493 echo "vde support $vde"
5494 echo "netmap support $netmap"
5495 echo "Linux AIO support $linux_aio"
5496 echo "ATTR/XATTR support $attr"
5497 echo "Install blobs $blobs"
5498 echo "KVM support $kvm"
5499 echo "HAX support $hax"
5500 echo "TCG support $tcg"
5501 if test "$tcg" = "yes" ; then
5502 echo "TCG debug enabled $debug_tcg"
5503 echo "TCG interpreter $tcg_interpreter"
5505 echo "RDMA support $rdma"
5506 echo "fdt support $fdt"
5507 echo "preadv support $preadv"
5508 echo "fdatasync $fdatasync"
5509 echo "madvise $madvise"
5510 echo "posix_madvise $posix_madvise"
5511 echo "libcap-ng support $cap_ng"
5512 echo "vhost-net support $vhost_net"
5513 echo "vhost-scsi support $vhost_scsi"
5514 echo "vhost-vsock support $vhost_vsock"
5515 echo "vhost-user support $vhost_user"
5516 echo "Trace backends $trace_backends"
5517 if have_backend "simple"; then
5518 echo "Trace output file $trace_file-<pid>"
5520 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5521 echo "rbd support $rbd"
5522 echo "xfsctl support $xfs"
5523 echo "smartcard support $smartcard"
5524 echo "libusb $libusb"
5525 echo "usb net redir $usb_redir"
5526 echo "OpenGL support $opengl"
5527 echo "OpenGL dmabufs $opengl_dmabuf"
5528 echo "libiscsi support $libiscsi"
5529 echo "libnfs support $libnfs"
5530 echo "build guest agent $guest_agent"
5531 echo "QGA VSS support $guest_agent_with_vss"
5532 echo "QGA w32 disk info $guest_agent_ntddscsi"
5533 echo "QGA MSI support $guest_agent_msi"
5534 echo "seccomp support $seccomp"
5535 echo "coroutine backend $coroutine"
5536 echo "coroutine pool $coroutine_pool"
5537 echo "debug stack usage $debug_stack_usage"
5538 echo "crypto afalg $crypto_afalg"
5539 echo "GlusterFS support $glusterfs"
5540 echo "gcov $gcov_tool"
5541 echo "gcov enabled $gcov"
5542 echo "TPM support $tpm"
5543 echo "libssh2 support $libssh2"
5544 echo "TPM passthrough $tpm_passthrough"
5545 echo "TPM emulator $tpm_emulator"
5546 echo "QOM debugging $qom_cast_debug"
5547 echo "Live block migration $live_block_migration"
5548 echo "lzo support $lzo"
5549 echo "snappy support $snappy"
5550 echo "bzip2 support $bzip2"
5551 echo "NUMA host support $numa"
5552 echo "tcmalloc support $tcmalloc"
5553 echo "jemalloc support $jemalloc"
5554 echo "avx2 optimization $avx2_opt"
5555 echo "replication support $replication"
5556 echo "VxHS block device $vxhs"
5557 echo "capstone $capstone"
5559 if test "$sdl_too_old" = "yes"; then
5560 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5563 if test "$supported_cpu" = "no"; then
5564 echo
5565 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5566 echo
5567 echo "CPU host architecture $cpu support is not currently maintained."
5568 echo "The QEMU project intends to remove support for this host CPU in"
5569 echo "a future release if nobody volunteers to maintain it and to"
5570 echo "provide a build host for our continuous integration setup."
5571 echo "configure has succeeded and you can continue to build, but"
5572 echo "if you care about QEMU on this platform you should contact"
5573 echo "us upstream at qemu-devel@nongnu.org."
5576 if test "$supported_os" = "no"; then
5577 echo
5578 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5579 echo
5580 echo "Host OS $targetos support is not currently maintained."
5581 echo "The QEMU project intends to remove support for this host OS in"
5582 echo "a future release if nobody volunteers to maintain it and to"
5583 echo "provide a build host for our continuous integration setup."
5584 echo "configure has succeeded and you can continue to build, but"
5585 echo "if you care about QEMU on this platform you should contact"
5586 echo "us upstream at qemu-devel@nongnu.org."
5589 config_host_mak="config-host.mak"
5591 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5593 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5594 echo >> $config_host_mak
5596 echo all: >> $config_host_mak
5597 echo "prefix=$prefix" >> $config_host_mak
5598 echo "bindir=$bindir" >> $config_host_mak
5599 echo "libdir=$libdir" >> $config_host_mak
5600 echo "libexecdir=$libexecdir" >> $config_host_mak
5601 echo "includedir=$includedir" >> $config_host_mak
5602 echo "mandir=$mandir" >> $config_host_mak
5603 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5604 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5605 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5606 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5607 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5608 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5609 if test "$mingw32" = "no" ; then
5610 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5612 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5613 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5614 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5615 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5616 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5617 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5618 echo "GIT=$git" >> $config_host_mak
5619 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5620 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5622 echo "ARCH=$ARCH" >> $config_host_mak
5624 if test "$debug_tcg" = "yes" ; then
5625 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5627 if test "$strip_opt" = "yes" ; then
5628 echo "STRIP=${strip}" >> $config_host_mak
5630 if test "$bigendian" = "yes" ; then
5631 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5633 if test "$mingw32" = "yes" ; then
5634 echo "CONFIG_WIN32=y" >> $config_host_mak
5635 rc_version=$(cat $source_path/VERSION)
5636 version_major=${rc_version%%.*}
5637 rc_version=${rc_version#*.}
5638 version_minor=${rc_version%%.*}
5639 rc_version=${rc_version#*.}
5640 version_subminor=${rc_version%%.*}
5641 version_micro=0
5642 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5643 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5644 if test "$guest_agent_with_vss" = "yes" ; then
5645 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5646 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5647 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5649 if test "$guest_agent_ntddscsi" = "yes" ; then
5650 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5652 if test "$guest_agent_msi" = "yes"; then
5653 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5654 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5655 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5656 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5657 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5658 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5659 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5661 else
5662 echo "CONFIG_POSIX=y" >> $config_host_mak
5665 if test "$linux" = "yes" ; then
5666 echo "CONFIG_LINUX=y" >> $config_host_mak
5669 if test "$darwin" = "yes" ; then
5670 echo "CONFIG_DARWIN=y" >> $config_host_mak
5673 if test "$solaris" = "yes" ; then
5674 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5676 if test "$haiku" = "yes" ; then
5677 echo "CONFIG_HAIKU=y" >> $config_host_mak
5679 if test "$static" = "yes" ; then
5680 echo "CONFIG_STATIC=y" >> $config_host_mak
5682 if test "$profiler" = "yes" ; then
5683 echo "CONFIG_PROFILER=y" >> $config_host_mak
5685 if test "$slirp" = "yes" ; then
5686 echo "CONFIG_SLIRP=y" >> $config_host_mak
5687 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5689 if test "$vde" = "yes" ; then
5690 echo "CONFIG_VDE=y" >> $config_host_mak
5691 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5693 if test "$netmap" = "yes" ; then
5694 echo "CONFIG_NETMAP=y" >> $config_host_mak
5696 if test "$l2tpv3" = "yes" ; then
5697 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5699 if test "$cap_ng" = "yes" ; then
5700 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5702 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5703 for drv in $audio_drv_list; do
5704 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5705 echo "$def=y" >> $config_host_mak
5706 done
5707 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5708 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5709 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5710 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5711 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5712 if test "$audio_pt_int" = "yes" ; then
5713 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5715 if test "$audio_win_int" = "yes" ; then
5716 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5718 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5719 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5720 if test "$vnc" = "yes" ; then
5721 echo "CONFIG_VNC=y" >> $config_host_mak
5723 if test "$vnc_sasl" = "yes" ; then
5724 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5726 if test "$vnc_jpeg" = "yes" ; then
5727 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5729 if test "$vnc_png" = "yes" ; then
5730 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5732 if test "$xkbcommon" = "yes" ; then
5733 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5734 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5736 if test "$fnmatch" = "yes" ; then
5737 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5739 if test "$xfs" = "yes" ; then
5740 echo "CONFIG_XFS=y" >> $config_host_mak
5742 qemu_version=$(head $source_path/VERSION)
5743 echo "VERSION=$qemu_version" >>$config_host_mak
5744 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5745 echo "SRC_PATH=$source_path" >> $config_host_mak
5746 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5747 if [ "$docs" = "yes" ] ; then
5748 echo "BUILD_DOCS=yes" >> $config_host_mak
5750 if test "$modules" = "yes"; then
5751 # $shacmd can generate a hash started with digit, which the compiler doesn't
5752 # like as an symbol. So prefix it with an underscore
5753 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5754 echo "CONFIG_MODULES=y" >> $config_host_mak
5756 if test "$sdl" = "yes" ; then
5757 echo "CONFIG_SDL=y" >> $config_host_mak
5758 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5759 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5760 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5762 if test "$cocoa" = "yes" ; then
5763 echo "CONFIG_COCOA=y" >> $config_host_mak
5765 if test "$curses" = "yes" ; then
5766 echo "CONFIG_CURSES=y" >> $config_host_mak
5768 if test "$pipe2" = "yes" ; then
5769 echo "CONFIG_PIPE2=y" >> $config_host_mak
5771 if test "$accept4" = "yes" ; then
5772 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5774 if test "$splice" = "yes" ; then
5775 echo "CONFIG_SPLICE=y" >> $config_host_mak
5777 if test "$eventfd" = "yes" ; then
5778 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5780 if test "$memfd" = "yes" ; then
5781 echo "CONFIG_MEMFD=y" >> $config_host_mak
5783 if test "$fallocate" = "yes" ; then
5784 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5786 if test "$fallocate_punch_hole" = "yes" ; then
5787 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5789 if test "$fallocate_zero_range" = "yes" ; then
5790 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5792 if test "$posix_fallocate" = "yes" ; then
5793 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5795 if test "$sync_file_range" = "yes" ; then
5796 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5798 if test "$fiemap" = "yes" ; then
5799 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5801 if test "$dup3" = "yes" ; then
5802 echo "CONFIG_DUP3=y" >> $config_host_mak
5804 if test "$ppoll" = "yes" ; then
5805 echo "CONFIG_PPOLL=y" >> $config_host_mak
5807 if test "$prctl_pr_set_timerslack" = "yes" ; then
5808 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5810 if test "$epoll" = "yes" ; then
5811 echo "CONFIG_EPOLL=y" >> $config_host_mak
5813 if test "$epoll_create1" = "yes" ; then
5814 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5816 if test "$sendfile" = "yes" ; then
5817 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5819 if test "$timerfd" = "yes" ; then
5820 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5822 if test "$setns" = "yes" ; then
5823 echo "CONFIG_SETNS=y" >> $config_host_mak
5825 if test "$clock_adjtime" = "yes" ; then
5826 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5828 if test "$syncfs" = "yes" ; then
5829 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5831 if test "$inotify" = "yes" ; then
5832 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5834 if test "$inotify1" = "yes" ; then
5835 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5837 if test "$sem_timedwait" = "yes" ; then
5838 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5840 if test "$byteswap_h" = "yes" ; then
5841 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5843 if test "$bswap_h" = "yes" ; then
5844 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5846 if test "$curl" = "yes" ; then
5847 echo "CONFIG_CURL=m" >> $config_host_mak
5848 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5849 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5851 if test "$brlapi" = "yes" ; then
5852 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5853 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5855 if test "$bluez" = "yes" ; then
5856 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5857 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5859 if test "$glib_subprocess" = "yes" ; then
5860 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5862 if test "$gtk" = "yes" ; then
5863 echo "CONFIG_GTK=y" >> $config_host_mak
5864 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5865 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5866 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5867 if test "$gtk_gl" = "yes" ; then
5868 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5871 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5872 if test "$gnutls" = "yes" ; then
5873 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5875 if test "$gnutls_rnd" = "yes" ; then
5876 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5878 if test "$gcrypt" = "yes" ; then
5879 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5880 if test "$gcrypt_hmac" = "yes" ; then
5881 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5883 if test "$gcrypt_kdf" = "yes" ; then
5884 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5887 if test "$nettle" = "yes" ; then
5888 echo "CONFIG_NETTLE=y" >> $config_host_mak
5889 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5890 if test "$nettle_kdf" = "yes" ; then
5891 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5894 if test "$tasn1" = "yes" ; then
5895 echo "CONFIG_TASN1=y" >> $config_host_mak
5897 if test "$have_ifaddrs_h" = "yes" ; then
5898 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5900 if test "$have_broken_size_max" = "yes" ; then
5901 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5904 # Work around a system header bug with some kernel/XFS header
5905 # versions where they both try to define 'struct fsxattr':
5906 # xfs headers will not try to redefine structs from linux headers
5907 # if this macro is set.
5908 if test "$have_fsxattr" = "yes" ; then
5909 echo "HAVE_FSXATTR=y" >> $config_host_mak
5911 if test "$vte" = "yes" ; then
5912 echo "CONFIG_VTE=y" >> $config_host_mak
5913 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5915 if test "$virglrenderer" = "yes" ; then
5916 echo "CONFIG_VIRGL=y" >> $config_host_mak
5917 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5918 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5920 if test "$xen" = "yes" ; then
5921 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5922 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5923 if test "$xen_pv_domain_build" = "yes" ; then
5924 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5927 if test "$linux_aio" = "yes" ; then
5928 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5930 if test "$attr" = "yes" ; then
5931 echo "CONFIG_ATTR=y" >> $config_host_mak
5933 if test "$libattr" = "yes" ; then
5934 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5936 if test "$virtfs" = "yes" ; then
5937 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5939 if test "$mpath" = "yes" ; then
5940 echo "CONFIG_MPATH=y" >> $config_host_mak
5942 if test "$vhost_scsi" = "yes" ; then
5943 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5945 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
5946 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5948 if test "$vhost_vsock" = "yes" ; then
5949 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5951 if test "$vhost_user" = "yes" ; then
5952 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5954 if test "$blobs" = "yes" ; then
5955 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5957 if test "$iovec" = "yes" ; then
5958 echo "CONFIG_IOVEC=y" >> $config_host_mak
5960 if test "$preadv" = "yes" ; then
5961 echo "CONFIG_PREADV=y" >> $config_host_mak
5963 if test "$fdt" = "yes" ; then
5964 echo "CONFIG_FDT=y" >> $config_host_mak
5966 if test "$signalfd" = "yes" ; then
5967 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5969 if test "$tcg" = "yes"; then
5970 echo "CONFIG_TCG=y" >> $config_host_mak
5971 if test "$tcg_interpreter" = "yes" ; then
5972 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5975 if test "$fdatasync" = "yes" ; then
5976 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5978 if test "$madvise" = "yes" ; then
5979 echo "CONFIG_MADVISE=y" >> $config_host_mak
5981 if test "$posix_madvise" = "yes" ; then
5982 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5985 if test "$spice" = "yes" ; then
5986 echo "CONFIG_SPICE=y" >> $config_host_mak
5989 if test "$smartcard" = "yes" ; then
5990 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5991 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5992 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5995 if test "$libusb" = "yes" ; then
5996 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5997 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5998 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6001 if test "$usb_redir" = "yes" ; then
6002 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6003 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6004 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6007 if test "$opengl" = "yes" ; then
6008 echo "CONFIG_OPENGL=y" >> $config_host_mak
6009 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6010 if test "$opengl_dmabuf" = "yes" ; then
6011 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6015 if test "$avx2_opt" = "yes" ; then
6016 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6019 if test "$lzo" = "yes" ; then
6020 echo "CONFIG_LZO=y" >> $config_host_mak
6023 if test "$snappy" = "yes" ; then
6024 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6027 if test "$bzip2" = "yes" ; then
6028 echo "CONFIG_BZIP2=y" >> $config_host_mak
6029 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6032 if test "$libiscsi" = "yes" ; then
6033 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6034 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6035 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6038 if test "$libnfs" = "yes" ; then
6039 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6040 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6043 if test "$seccomp" = "yes"; then
6044 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6045 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6046 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6049 # XXX: suppress that
6050 if [ "$bsd" = "yes" ] ; then
6051 echo "CONFIG_BSD=y" >> $config_host_mak
6054 if test "$localtime_r" = "yes" ; then
6055 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6057 if test "$qom_cast_debug" = "yes" ; then
6058 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6060 if test "$rbd" = "yes" ; then
6061 echo "CONFIG_RBD=m" >> $config_host_mak
6062 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6063 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6066 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6067 if test "$coroutine_pool" = "yes" ; then
6068 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6069 else
6070 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6073 if test "$debug_stack_usage" = "yes" ; then
6074 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6077 if test "$crypto_afalg" = "yes" ; then
6078 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6081 if test "$open_by_handle_at" = "yes" ; then
6082 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6085 if test "$linux_magic_h" = "yes" ; then
6086 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6089 if test "$pragma_diagnostic_available" = "yes" ; then
6090 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6093 if test "$valgrind_h" = "yes" ; then
6094 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6097 if test "$has_environ" = "yes" ; then
6098 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6101 if test "$cpuid_h" = "yes" ; then
6102 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6105 if test "$int128" = "yes" ; then
6106 echo "CONFIG_INT128=y" >> $config_host_mak
6109 if test "$atomic128" = "yes" ; then
6110 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6113 if test "$atomic64" = "yes" ; then
6114 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6117 if test "$getauxval" = "yes" ; then
6118 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6121 if test "$glusterfs" = "yes" ; then
6122 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6123 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6124 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6127 if test "$glusterfs_xlator_opt" = "yes" ; then
6128 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6131 if test "$glusterfs_discard" = "yes" ; then
6132 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6135 if test "$glusterfs_fallocate" = "yes" ; then
6136 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6139 if test "$glusterfs_zerofill" = "yes" ; then
6140 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6143 if test "$libssh2" = "yes" ; then
6144 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6145 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6146 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6149 if test "$live_block_migration" = "yes" ; then
6150 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6153 if test "$tpm" = "yes"; then
6154 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6155 # TPM passthrough support?
6156 if test "$tpm_passthrough" = "yes"; then
6157 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6159 # TPM emulator support?
6160 if test "$tpm_emulator" = "yes"; then
6161 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6165 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6166 if have_backend "nop"; then
6167 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6169 if have_backend "simple"; then
6170 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6171 # Set the appropriate trace file.
6172 trace_file="\"$trace_file-\" FMT_pid"
6174 if have_backend "log"; then
6175 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6177 if have_backend "ust"; then
6178 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6180 if have_backend "dtrace"; then
6181 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6182 if test "$trace_backend_stap" = "yes" ; then
6183 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6186 if have_backend "ftrace"; then
6187 if test "$linux" = "yes" ; then
6188 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6189 else
6190 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6193 if have_backend "syslog"; then
6194 if test "$posix_syslog" = "yes" ; then
6195 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6196 else
6197 feature_not_found "syslog(trace backend)" "syslog not available"
6200 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6202 if test "$rdma" = "yes" ; then
6203 echo "CONFIG_RDMA=y" >> $config_host_mak
6204 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6207 if test "$have_rtnetlink" = "yes" ; then
6208 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6211 if test "$replication" = "yes" ; then
6212 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6215 if test "$have_af_vsock" = "yes" ; then
6216 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6219 if test "$have_sysmacros" = "yes" ; then
6220 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6223 if test "$have_static_assert" = "yes" ; then
6224 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6227 if test "$have_utmpx" = "yes" ; then
6228 echo "HAVE_UTMPX=y" >> $config_host_mak
6231 if test "$ivshmem" = "yes" ; then
6232 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6234 if test "$capstone" != "no" ; then
6235 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6238 # Hold two types of flag:
6239 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6240 # a thread we have a handle to
6241 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6242 # platform
6243 if test "$pthread_setname_np" = "yes" ; then
6244 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6245 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6248 if test "$vxhs" = "yes" ; then
6249 echo "CONFIG_VXHS=y" >> $config_host_mak
6250 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6253 if test "$tcg_interpreter" = "yes"; then
6254 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6255 elif test "$ARCH" = "sparc64" ; then
6256 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6257 elif test "$ARCH" = "s390x" ; then
6258 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6259 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6260 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6261 elif test "$ARCH" = "ppc64" ; then
6262 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6263 else
6264 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6266 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6268 echo "TOOLS=$tools" >> $config_host_mak
6269 echo "ROMS=$roms" >> $config_host_mak
6270 echo "MAKE=$make" >> $config_host_mak
6271 echo "INSTALL=$install" >> $config_host_mak
6272 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6273 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6274 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6275 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6276 echo "PYTHON=$python" >> $config_host_mak
6277 echo "CC=$cc" >> $config_host_mak
6278 if $iasl -h > /dev/null 2>&1; then
6279 echo "IASL=$iasl" >> $config_host_mak
6281 echo "CC_I386=$cc_i386" >> $config_host_mak
6282 echo "HOST_CC=$host_cc" >> $config_host_mak
6283 echo "CXX=$cxx" >> $config_host_mak
6284 echo "OBJCC=$objcc" >> $config_host_mak
6285 echo "AR=$ar" >> $config_host_mak
6286 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6287 echo "AS=$as" >> $config_host_mak
6288 echo "CCAS=$ccas" >> $config_host_mak
6289 echo "CPP=$cpp" >> $config_host_mak
6290 echo "OBJCOPY=$objcopy" >> $config_host_mak
6291 echo "LD=$ld" >> $config_host_mak
6292 echo "RANLIB=$ranlib" >> $config_host_mak
6293 echo "NM=$nm" >> $config_host_mak
6294 echo "WINDRES=$windres" >> $config_host_mak
6295 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6296 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6297 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6298 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6299 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6300 if test "$sparse" = "yes" ; then
6301 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6302 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6303 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6304 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6305 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6307 if test "$cross_prefix" != ""; then
6308 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6309 else
6310 echo "AUTOCONF_HOST := " >> $config_host_mak
6312 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6313 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6314 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6315 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6316 echo "LIBS+=$LIBS" >> $config_host_mak
6317 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6318 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6319 echo "EXESUF=$EXESUF" >> $config_host_mak
6320 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6321 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6322 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6323 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6324 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6325 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6326 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6327 if test "$gcov" = "yes" ; then
6328 echo "CONFIG_GCOV=y" >> $config_host_mak
6329 echo "GCOV=$gcov_tool" >> $config_host_mak
6332 # use included Linux headers
6333 if test "$linux" = "yes" ; then
6334 mkdir -p linux-headers
6335 case "$cpu" in
6336 i386|x86_64|x32)
6337 linux_arch=x86
6339 ppcemb|ppc|ppc64)
6340 linux_arch=powerpc
6342 s390x)
6343 linux_arch=s390
6345 aarch64)
6346 linux_arch=arm64
6348 mips64)
6349 linux_arch=mips
6352 # For most CPUs the kernel architecture name and QEMU CPU name match.
6353 linux_arch="$cpu"
6355 esac
6356 # For non-KVM architectures we will not have asm headers
6357 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6358 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6362 for target in $target_list; do
6363 target_dir="$target"
6364 config_target_mak=$target_dir/config-target.mak
6365 target_name=$(echo $target | cut -d '-' -f 1)
6366 target_bigendian="no"
6368 case "$target_name" in
6369 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6370 target_bigendian=yes
6372 esac
6373 target_softmmu="no"
6374 target_user_only="no"
6375 target_linux_user="no"
6376 target_bsd_user="no"
6377 case "$target" in
6378 ${target_name}-softmmu)
6379 target_softmmu="yes"
6381 ${target_name}-linux-user)
6382 target_user_only="yes"
6383 target_linux_user="yes"
6385 ${target_name}-bsd-user)
6386 target_user_only="yes"
6387 target_bsd_user="yes"
6390 error_exit "Target '$target' not recognised"
6391 exit 1
6393 esac
6395 mkdir -p $target_dir
6396 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6398 bflt="no"
6399 mttcg="no"
6400 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6401 gdb_xml_files=""
6403 TARGET_ARCH="$target_name"
6404 TARGET_BASE_ARCH=""
6405 TARGET_ABI_DIR=""
6407 case "$target_name" in
6408 i386)
6409 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6411 x86_64)
6412 TARGET_BASE_ARCH=i386
6413 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6415 alpha)
6416 mttcg="yes"
6418 arm|armeb)
6419 TARGET_ARCH=arm
6420 bflt="yes"
6421 mttcg="yes"
6422 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6424 aarch64)
6425 TARGET_BASE_ARCH=arm
6426 bflt="yes"
6427 mttcg="yes"
6428 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6430 cris)
6432 hppa)
6434 lm32)
6436 m68k)
6437 bflt="yes"
6438 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6440 microblaze|microblazeel)
6441 TARGET_ARCH=microblaze
6442 bflt="yes"
6444 mips|mipsel)
6445 TARGET_ARCH=mips
6446 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6448 mipsn32|mipsn32el)
6449 TARGET_ARCH=mips64
6450 TARGET_BASE_ARCH=mips
6451 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6452 echo "TARGET_ABI32=y" >> $config_target_mak
6454 mips64|mips64el)
6455 TARGET_ARCH=mips64
6456 TARGET_BASE_ARCH=mips
6457 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6459 moxie)
6461 nios2)
6463 or1k)
6464 TARGET_ARCH=openrisc
6465 TARGET_BASE_ARCH=openrisc
6467 ppc)
6468 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6470 ppcemb)
6471 TARGET_BASE_ARCH=ppc
6472 TARGET_ABI_DIR=ppc
6473 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6475 ppc64)
6476 TARGET_BASE_ARCH=ppc
6477 TARGET_ABI_DIR=ppc
6478 mttcg=yes
6479 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6481 ppc64le)
6482 TARGET_ARCH=ppc64
6483 TARGET_BASE_ARCH=ppc
6484 TARGET_ABI_DIR=ppc
6485 mttcg=yes
6486 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6488 ppc64abi32)
6489 TARGET_ARCH=ppc64
6490 TARGET_BASE_ARCH=ppc
6491 TARGET_ABI_DIR=ppc
6492 echo "TARGET_ABI32=y" >> $config_target_mak
6493 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6495 sh4|sh4eb)
6496 TARGET_ARCH=sh4
6497 bflt="yes"
6499 sparc)
6501 sparc64)
6502 TARGET_BASE_ARCH=sparc
6504 sparc32plus)
6505 TARGET_ARCH=sparc64
6506 TARGET_BASE_ARCH=sparc
6507 TARGET_ABI_DIR=sparc
6508 echo "TARGET_ABI32=y" >> $config_target_mak
6510 s390x)
6511 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6513 tilegx)
6515 tricore)
6517 unicore32)
6519 xtensa|xtensaeb)
6520 TARGET_ARCH=xtensa
6523 error_exit "Unsupported target CPU"
6525 esac
6526 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6527 if [ "$TARGET_BASE_ARCH" = "" ]; then
6528 TARGET_BASE_ARCH=$TARGET_ARCH
6531 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6533 upper() {
6534 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6537 target_arch_name="$(upper $TARGET_ARCH)"
6538 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6539 echo "TARGET_NAME=$target_name" >> $config_target_mak
6540 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6541 if [ "$TARGET_ABI_DIR" = "" ]; then
6542 TARGET_ABI_DIR=$TARGET_ARCH
6544 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6545 if [ "$HOST_VARIANT_DIR" != "" ]; then
6546 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6549 if supported_xen_target $target; then
6550 echo "CONFIG_XEN=y" >> $config_target_mak
6551 if test "$xen_pci_passthrough" = yes; then
6552 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6555 if supported_kvm_target $target; then
6556 echo "CONFIG_KVM=y" >> $config_target_mak
6557 if test "$vhost_net" = "yes" ; then
6558 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6559 if test "$vhost_user" = "yes" ; then
6560 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6564 if supported_hax_target $target; then
6565 echo "CONFIG_HAX=y" >> $config_target_mak
6567 if test "$target_bigendian" = "yes" ; then
6568 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6570 if test "$target_softmmu" = "yes" ; then
6571 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6572 if test "$mttcg" = "yes" ; then
6573 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6576 if test "$target_user_only" = "yes" ; then
6577 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6578 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6580 if test "$target_linux_user" = "yes" ; then
6581 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6583 list=""
6584 if test ! -z "$gdb_xml_files" ; then
6585 for x in $gdb_xml_files; do
6586 list="$list $source_path/gdb-xml/$x"
6587 done
6588 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6591 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6592 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6594 if test "$target_bsd_user" = "yes" ; then
6595 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6598 # generate QEMU_CFLAGS/LDFLAGS for targets
6600 cflags=""
6601 ldflags=""
6603 disas_config() {
6604 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6605 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6608 for i in $ARCH $TARGET_BASE_ARCH ; do
6609 case "$i" in
6610 alpha)
6611 disas_config "ALPHA"
6613 aarch64)
6614 if test -n "${cxx}"; then
6615 disas_config "ARM_A64"
6618 arm)
6619 disas_config "ARM"
6620 if test -n "${cxx}"; then
6621 disas_config "ARM_A64"
6624 cris)
6625 disas_config "CRIS"
6627 hppa)
6628 disas_config "HPPA"
6630 i386|x86_64|x32)
6631 disas_config "I386"
6633 lm32)
6634 disas_config "LM32"
6636 m68k)
6637 disas_config "M68K"
6639 microblaze*)
6640 disas_config "MICROBLAZE"
6642 mips*)
6643 disas_config "MIPS"
6645 moxie*)
6646 disas_config "MOXIE"
6648 nios2)
6649 disas_config "NIOS2"
6651 or1k)
6652 disas_config "OPENRISC"
6654 ppc*)
6655 disas_config "PPC"
6657 s390*)
6658 disas_config "S390"
6660 sh4)
6661 disas_config "SH4"
6663 sparc*)
6664 disas_config "SPARC"
6666 xtensa*)
6667 disas_config "XTENSA"
6669 esac
6670 done
6671 if test "$tcg_interpreter" = "yes" ; then
6672 disas_config "TCI"
6675 case "$ARCH" in
6676 alpha)
6677 # Ensure there's only a single GP
6678 cflags="-msmall-data $cflags"
6680 esac
6682 if test "$gprof" = "yes" ; then
6683 echo "TARGET_GPROF=yes" >> $config_target_mak
6684 if test "$target_linux_user" = "yes" ; then
6685 cflags="-p $cflags"
6686 ldflags="-p $ldflags"
6688 if test "$target_softmmu" = "yes" ; then
6689 ldflags="-p $ldflags"
6690 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6694 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6695 ldflags="$ldflags $textseg_ldflags"
6698 # Newer kernels on s390 check for an S390_PGSTE program header and
6699 # enable the pgste page table extensions in that case. This makes
6700 # the vm.allocate_pgste sysctl unnecessary. We enable this program
6701 # header if
6702 # - we build on s390x
6703 # - we build the system emulation for s390x (qemu-system-s390x)
6704 # - KVM is enabled
6705 # - the linker supports --s390-pgste
6706 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6707 if ld_has --s390-pgste ; then
6708 ldflags="-Wl,--s390-pgste $ldflags"
6712 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6713 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6715 done # for target in $targets
6717 if [ "$dtc_internal" = "yes" ]; then
6718 echo "config-host.h: subdir-dtc" >> $config_host_mak
6720 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6721 echo "config-host.h: subdir-capstone" >> $config_host_mak
6723 if test -n "$LIBCAPSTONE"; then
6724 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6727 if test "$numa" = "yes"; then
6728 echo "CONFIG_NUMA=y" >> $config_host_mak
6731 if test "$ccache_cpp2" = "yes"; then
6732 echo "export CCACHE_CPP2=y" >> $config_host_mak
6735 # build tree in object directory in case the source is not in the current directory
6736 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6737 DIRS="$DIRS docs docs/interop fsdev scsi"
6738 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6739 DIRS="$DIRS roms/seabios roms/vgabios"
6740 DIRS="$DIRS qapi-generated"
6741 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6742 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6743 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6744 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6745 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6746 FILES="$FILES pc-bios/s390-ccw/Makefile"
6747 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6748 FILES="$FILES pc-bios/qemu-icon.bmp"
6749 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6750 for bios_file in \
6751 $source_path/pc-bios/*.bin \
6752 $source_path/pc-bios/*.lid \
6753 $source_path/pc-bios/*.aml \
6754 $source_path/pc-bios/*.rom \
6755 $source_path/pc-bios/*.dtb \
6756 $source_path/pc-bios/*.img \
6757 $source_path/pc-bios/openbios-* \
6758 $source_path/pc-bios/u-boot.* \
6759 $source_path/pc-bios/palcode-*
6761 FILES="$FILES pc-bios/$(basename $bios_file)"
6762 done
6763 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6765 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6766 done
6767 mkdir -p $DIRS
6768 for f in $FILES ; do
6769 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6770 symlink "$source_path/$f" "$f"
6772 done
6774 # temporary config to build submodules
6775 for rom in seabios vgabios ; do
6776 config_mak=roms/$rom/config.mak
6777 echo "# Automatically generated by configure - do not modify" > $config_mak
6778 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6779 echo "AS=$as" >> $config_mak
6780 echo "CCAS=$ccas" >> $config_mak
6781 echo "CC=$cc" >> $config_mak
6782 echo "BCC=bcc" >> $config_mak
6783 echo "CPP=$cpp" >> $config_mak
6784 echo "OBJCOPY=objcopy" >> $config_mak
6785 echo "IASL=$iasl" >> $config_mak
6786 echo "LD=$ld" >> $config_mak
6787 echo "RANLIB=$ranlib" >> $config_mak
6788 done
6790 # set up tests data directory
6791 if [ ! -e tests/data ]; then
6792 symlink "$source_path/tests/data" tests/data
6795 # set up qemu-iotests in this build directory
6796 iotests_common_env="tests/qemu-iotests/common.env"
6797 iotests_check="tests/qemu-iotests/check"
6799 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6800 echo >> "$iotests_common_env"
6801 echo "export PYTHON='$python'" >> "$iotests_common_env"
6803 if [ ! -e "$iotests_check" ]; then
6804 symlink "$source_path/$iotests_check" "$iotests_check"
6807 # Save the configure command line for later reuse.
6808 cat <<EOD >config.status
6809 #!/bin/sh
6810 # Generated by configure.
6811 # Run this file to recreate the current configuration.
6812 # Compiler output produced by configure, useful for debugging
6813 # configure, is in config.log if it exists.
6815 printf "exec" >>config.status
6816 printf " '%s'" "$0" "$@" >>config.status
6817 echo ' "$@"' >>config.status
6818 chmod +x config.status
6820 rm -r "$TMPDIR1"