hw/arm: Restore local modifications
[qemu/ar7.git] / configure
blob19e906842628242820f994d4b0368d1fb328e948
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 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65 funcs: ${FUNCNAME[*]}
66 lines: ${BASH_LINENO[*]}"
67 '; fi
68 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
70 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
82 esac
83 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
85 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
91 do_cc() {
92 do_compiler "$cc" "$@"
95 do_cxx() {
96 do_compiler "$cxx" "$@"
99 update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wno-override-init|\
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
114 esac
115 done
118 compile_object() {
119 local_cflags="$1"
120 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
123 compile_prog() {
124 local_cflags="$1"
125 local_ldflags="$2"
126 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
129 # symbolically link $1 to $2. Portable version of "ln -sf".
130 symlink() {
131 rm -rf "$2"
132 mkdir -p "$(dirname "$2")"
133 ln -s "$1" "$2"
136 # check whether a command is available to this shell (may be either an
137 # executable or a builtin)
138 has() {
139 type "$1" >/dev/null 2>&1
142 # search for an executable in PATH
143 path_of() {
144 local_command="$1"
145 local_ifs="$IFS"
146 local_dir=""
148 # pathname has a dir component?
149 if [ "${local_command#*/}" != "$local_command" ]; then
150 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
151 echo "$local_command"
152 return 0
155 if [ -z "$local_command" ]; then
156 return 1
159 IFS=:
160 for local_dir in $PATH; do
161 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
162 echo "$local_dir/$local_command"
163 IFS="${local_ifs:-$(printf ' \t\n')}"
164 return 0
166 done
167 # not found
168 IFS="${local_ifs:-$(printf ' \t\n')}"
169 return 1
172 have_backend () {
173 echo "$trace_backends" | grep "$1" >/dev/null
176 glob() {
177 eval test -z '"${1#'"$2"'}"'
180 supported_hax_target() {
181 test "$hax" = "yes" || return 1
182 glob "$1" "*-softmmu" || return 1
183 case "${1%-softmmu}" in
184 i386|x86_64)
185 return 0
187 esac
188 return 1
191 supported_kvm_target() {
192 test "$kvm" = "yes" || return 1
193 glob "$1" "*-softmmu" || return 1
194 case "${1%-softmmu}:$cpu" in
195 arm:arm | aarch64:aarch64 | \
196 i386:i386 | i386:x86_64 | i386:x32 | \
197 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
198 mips:mips | mipsel:mips | \
199 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
200 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
201 s390x:s390x)
202 return 0
204 esac
205 return 1
208 supported_xen_target() {
209 test "$xen" = "yes" || return 1
210 glob "$1" "*-softmmu" || return 1
211 # Only i386 and x86_64 provide the xenpv machine.
212 case "${1%-softmmu}" in
213 i386|x86_64)
214 return 0
216 esac
217 return 1
220 supported_hvf_target() {
221 test "$hvf" = "yes" || return 1
222 glob "$1" "*-softmmu" || return 1
223 case "${1%-softmmu}" in
224 x86_64)
225 return 0
227 esac
228 return 1
231 supported_whpx_target() {
232 test "$whpx" = "yes" || return 1
233 glob "$1" "*-softmmu" || return 1
234 case "${1%-softmmu}" in
235 i386|x86_64)
236 return 0
238 esac
239 return 1
242 supported_target() {
243 case "$1" in
244 *-softmmu)
246 *-linux-user)
247 if test "$linux" != "yes"; then
248 print_error "Target '$target' is only available on a Linux host"
249 return 1
252 *-bsd-user)
253 if test "$bsd" != "yes"; then
254 print_error "Target '$target' is only available on a BSD host"
255 return 1
259 print_error "Invalid target name '$target'"
260 return 1
262 esac
263 test "$tcg" = "yes" && return 0
264 supported_kvm_target "$1" && return 0
265 supported_xen_target "$1" && return 0
266 supported_hax_target "$1" && return 0
267 supported_hvf_target "$1" && return 0
268 supported_whpx_target "$1" && return 0
269 print_error "TCG disabled, but hardware accelerator not available for '$target'"
270 return 1
274 ld_has() {
275 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278 # default parameters
279 source_path=$(dirname "$0")
280 cpu=""
281 iasl="iasl"
282 interp_prefix="/usr/gnemul/qemu-%M"
283 static="no"
284 cross_prefix=""
285 audio_drv_list=""
286 block_drv_rw_whitelist=""
287 block_drv_ro_whitelist=""
288 host_cc="cc"
289 libs_softmmu=""
290 libs_tools=""
291 audio_pt_int=""
292 audio_win_int=""
293 cc_i386=i386-pc-linux-gnu-gcc
294 libs_qga=""
295 debug_info="yes"
296 stack_protector=""
298 if test -e "$source_path/.git"
299 then
300 git_update=yes
301 git_submodules="ui/keycodemapdb"
302 else
303 git_update=no
304 git_submodules=""
306 git="git"
308 # Don't accept a target_list environment variable.
309 unset target_list
311 # Default value for a variable defining feature "foo".
312 # * foo="no" feature will only be used if --enable-foo arg is given
313 # * foo="" feature will be searched for, and if found, will be used
314 # unless --disable-foo is given
315 # * foo="yes" this value will only be set by --enable-foo flag.
316 # feature will searched for,
317 # if not found, configure exits with error
319 # Always add --enable-foo and --disable-foo command line args.
320 # Distributions want to ensure that several features are compiled in, and it
321 # is impossible without a --enable-foo that exits if a feature is not found.
323 bluez=""
324 brlapi=""
325 curl=""
326 curses=""
327 docs=""
328 fdt=""
329 netmap="no"
330 sdl=""
331 sdlabi=""
332 virtfs=""
333 mpath=""
334 vnc="yes"
335 sparse="no"
336 vde=""
337 vnc_sasl=""
338 vnc_jpeg=""
339 vnc_png=""
340 xkbcommon=""
341 xen=""
342 xen_ctrl_version=""
343 xen_pv_domain_build="no"
344 xen_pci_passthrough=""
345 linux_aio=""
346 cap_ng=""
347 attr=""
348 libattr=""
349 xfs=""
350 tcg="yes"
351 membarrier=""
352 vhost_net="no"
353 vhost_crypto="no"
354 vhost_scsi="no"
355 vhost_vsock="no"
356 vhost_user=""
357 kvm="no"
358 hax="no"
359 hvf="no"
360 whpx="no"
361 rdma=""
362 gprof="no"
363 debug_tcg="no"
364 debug="no"
365 sanitizers="no"
366 fortify_source=""
367 strip_opt="yes"
368 tcg_interpreter="no"
369 bigendian="no"
370 mingw32="no"
371 gcov="no"
372 gcov_tool="gcov"
373 EXESUF=""
374 DSOSUF=".so"
375 LDFLAGS_SHARED="-shared"
376 modules="no"
377 prefix="/usr/local"
378 mandir="\${prefix}/share/man"
379 datadir="\${prefix}/share"
380 firmwarepath="\${prefix}/share/qemu-firmware"
381 qemu_docdir="\${prefix}/share/doc/qemu"
382 bindir="\${prefix}/bin"
383 libdir="\${prefix}/lib"
384 libexecdir="\${prefix}/libexec"
385 includedir="\${prefix}/include"
386 sysconfdir="\${prefix}/etc"
387 local_statedir="\${prefix}/var"
388 confsuffix="/qemu"
389 slirp="yes"
390 oss_lib=""
391 bsd="no"
392 haiku="no"
393 linux="no"
394 solaris="no"
395 profiler="no"
396 cocoa="no"
397 softmmu="yes"
398 linux_user="no"
399 bsd_user="no"
400 blobs="yes"
401 pkgversion=""
402 pie=""
403 qom_cast_debug="yes"
404 trace_backends="log"
405 trace_file="trace"
406 spice=""
407 rbd=""
408 smartcard=""
409 libusb=""
410 usb_redir=""
411 opengl=""
412 opengl_dmabuf="no"
413 cpuid_h="no"
414 avx2_opt="no"
415 zlib="yes"
416 capstone=""
417 lzo=""
418 snappy=""
419 bzip2=""
420 guest_agent=""
421 guest_agent_with_vss="no"
422 guest_agent_ntddscsi="no"
423 guest_agent_msi=""
424 vss_win32_sdk=""
425 win_sdk="no"
426 want_tools="yes"
427 libiscsi=""
428 libnfs=""
429 coroutine=""
430 coroutine_pool=""
431 debug_stack_usage="no"
432 crypto_afalg="no"
433 seccomp=""
434 glusterfs=""
435 glusterfs_xlator_opt="no"
436 glusterfs_discard="no"
437 glusterfs_fallocate="no"
438 glusterfs_zerofill="no"
439 gtk=""
440 gtkabi=""
441 gtk_gl="no"
442 tls_priority="NORMAL"
443 gnutls=""
444 gnutls_rnd=""
445 nettle=""
446 nettle_kdf="no"
447 gcrypt=""
448 gcrypt_hmac="no"
449 gcrypt_kdf="no"
450 vte=""
451 virglrenderer=""
452 tpm="yes"
453 libssh2=""
454 live_block_migration="yes"
455 numa=""
456 tcmalloc="no"
457 jemalloc="no"
458 replication="yes"
459 vxhs=""
460 libxml2=""
462 supported_cpu="no"
463 supported_os="no"
464 bogus_os="no"
465 malloc_trim=""
467 # parse CC options first
468 for opt do
469 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
470 case "$opt" in
471 --cross-prefix=*) cross_prefix="$optarg"
473 --cc=*) CC="$optarg"
475 --cxx=*) CXX="$optarg"
477 --source-path=*) source_path="$optarg"
479 --cpu=*) cpu="$optarg"
481 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
483 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
485 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
486 EXTRA_LDFLAGS="$optarg"
488 --enable-debug-info) debug_info="yes"
490 --disable-debug-info) debug_info="no"
492 esac
493 done
494 # OS specific
495 # Using uname is really, really broken. Once we have the right set of checks
496 # we can eliminate its usage altogether.
498 # Preferred compiler:
499 # ${CC} (if set)
500 # ${cross_prefix}gcc (if cross-prefix specified)
501 # system compiler
502 if test -z "${CC}${cross_prefix}"; then
503 cc="$host_cc"
504 else
505 cc="${CC-${cross_prefix}gcc}"
508 if test -z "${CXX}${cross_prefix}"; then
509 cxx="c++"
510 else
511 cxx="${CXX-${cross_prefix}g++}"
514 ar="${AR-${cross_prefix}ar}"
515 as="${AS-${cross_prefix}as}"
516 ccas="${CCAS-$cc}"
517 cpp="${CPP-$cc -E}"
518 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
519 ld="${LD-${cross_prefix}ld}"
520 ranlib="${RANLIB-${cross_prefix}ranlib}"
521 nm="${NM-${cross_prefix}nm}"
522 strip="${STRIP-${cross_prefix}strip}"
523 windres="${WINDRES-${cross_prefix}windres}"
524 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
525 query_pkg_config() {
526 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
528 pkg_config=query_pkg_config
529 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
530 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
532 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
533 ARFLAGS="${ARFLAGS-rv}"
535 # default flags for all hosts
536 # We use -fwrapv to tell the compiler that we require a C dialect where
537 # left shift of signed integers is well defined and has the expected
538 # 2s-complement style results. (Both clang and gcc agree that it
539 # provides these semantics.)
540 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
541 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
542 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
543 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
544 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
545 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
546 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
547 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
548 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
549 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
550 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
551 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
552 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
553 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
554 if test "$debug_info" = "yes"; then
555 CFLAGS="-g $CFLAGS"
556 LDFLAGS="-g $LDFLAGS"
559 # make source path absolute
560 source_path=$(cd "$source_path"; pwd)
562 cc_macros=$($cc $QEMU_CFLAGS -E -dD - </dev/null)
564 # running configure in the source tree?
565 # we know that's the case if configure is there.
566 if test -f "./configure"; then
567 pwd_is_source_path="y"
568 else
569 pwd_is_source_path="n"
572 check_define() {
573 rm -f $TMPC
574 cat > $TMPC <<EOF
575 #if !defined($1)
576 #error $1 not defined
577 #endif
578 int main(void) { return 0; }
580 compile_object
583 check_include() {
584 cat > $TMPC <<EOF
585 #include <$1>
586 int main(void) { return 0; }
588 compile_object
591 write_c_skeleton() {
592 cat > $TMPC <<EOF
593 int main(void) { return 0; }
597 if check_define __linux__ ; then
598 targetos="Linux"
599 elif check_define _WIN32 ; then
600 targetos='MINGW32'
601 elif check_define __OpenBSD__ ; then
602 targetos='OpenBSD'
603 elif check_define __sun__ ; then
604 targetos='SunOS'
605 elif check_define __HAIKU__ ; then
606 targetos='Haiku'
607 elif check_define __FreeBSD__ ; then
608 targetos='FreeBSD'
609 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
610 targetos='GNU/kFreeBSD'
611 elif check_define __DragonFly__ ; then
612 targetos='DragonFly'
613 elif check_define __NetBSD__; then
614 targetos='NetBSD'
615 elif check_define __APPLE__; then
616 targetos='Darwin'
617 else
618 # This is a fatal error, but don't report it yet, because we
619 # might be going to just print the --help text, or it might
620 # be the result of a missing compiler.
621 targetos='bogus'
622 bogus_os='yes'
625 # Some host OSes need non-standard checks for which CPU to use.
626 # Note that these checks are broken for cross-compilation: if you're
627 # cross-compiling to one of these OSes then you'll need to specify
628 # the correct CPU with the --cpu option.
629 case $targetos in
630 Darwin)
631 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
632 # run 64-bit userspace code.
633 # If the user didn't specify a CPU explicitly and the kernel says this is
634 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
635 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
636 cpu="x86_64"
639 SunOS)
640 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
641 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
642 cpu="x86_64"
644 esac
646 if test ! -z "$cpu" ; then
647 # command line argument
649 elif check_define __i386__ ; then
650 cpu="i386"
651 elif check_define __x86_64__ ; then
652 if check_define __ILP32__ ; then
653 cpu="x32"
654 else
655 cpu="x86_64"
657 elif check_define __sparc__ ; then
658 if check_define __arch64__ ; then
659 cpu="sparc64"
660 else
661 cpu="sparc"
663 elif check_define _ARCH_PPC ; then
664 if check_define _ARCH_PPC64 ; then
665 cpu="ppc64"
666 else
667 cpu="ppc"
669 elif check_define __mips__ ; then
670 if check_define __mips64 ; then
671 cpu="mips64"
672 else
673 cpu="mips"
675 elif check_define __s390__ ; then
676 if check_define __s390x__ ; then
677 cpu="s390x"
678 else
679 cpu="s390"
681 elif check_define __arm__ ; then
682 cpu="arm"
683 elif check_define __aarch64__ ; then
684 cpu="aarch64"
685 else
686 cpu=$(uname -m)
689 ARCH=
690 # Normalise host CPU name and set ARCH.
691 # Note that this case should only have supported host CPUs, not guests.
692 case "$cpu" in
693 ppc|ppc64|s390|s390x|sparc64|x32)
694 cpu="$cpu"
695 supported_cpu="yes"
697 i386|i486|i586|i686|i86pc|BePC)
698 cpu="i386"
699 supported_cpu="yes"
701 x86_64|amd64)
702 cpu="x86_64"
703 supported_cpu="yes"
705 armv*b|armv*l|arm)
706 cpu="arm"
707 supported_cpu="yes"
709 aarch64)
710 cpu="aarch64"
711 supported_cpu="yes"
713 mips*)
714 cpu="mips"
715 if check_define __MIPSEL__ ; then
716 cpu="${cpu}el"
718 supported_cpu="yes"
720 sparc|sun4[cdmuv])
721 cpu="sparc"
722 supported_cpu="yes"
724 sh4)
725 cpu="sh4"
728 # This will result in either an error or falling back to TCI later
729 ARCH=unknown
731 esac
732 if test -z "$ARCH"; then
733 ARCH="$cpu"
736 # OS specific
738 # host *BSD for user mode
739 HOST_VARIANT_DIR=""
741 case $targetos in
742 MINGW32*)
743 mingw32="yes"
744 hax="yes"
745 audio_possible_drivers="dsound sdl"
746 if check_include dsound.h; then
747 audio_drv_list="dsound"
748 else
749 audio_drv_list=""
751 supported_os="yes"
753 GNU/kFreeBSD)
754 bsd="yes"
755 audio_drv_list="oss"
756 audio_possible_drivers="oss sdl pa"
758 FreeBSD)
759 bsd="yes"
760 make="${MAKE-gmake}"
761 audio_drv_list="oss"
762 audio_possible_drivers="oss sdl pa"
763 # needed for kinfo_getvmmap(3) in libutil.h
764 LIBS="-lutil $LIBS"
765 # needed for kinfo_getproc
766 libs_qga="-lutil $libs_qga"
767 netmap="" # enable netmap autodetect
768 HOST_VARIANT_DIR="freebsd"
769 supported_os="yes"
771 DragonFly)
772 bsd="yes"
773 make="${MAKE-gmake}"
774 audio_drv_list="oss"
775 audio_possible_drivers="oss sdl pa"
776 HOST_VARIANT_DIR="dragonfly"
778 NetBSD)
779 bsd="yes"
780 make="${MAKE-gmake}"
781 audio_drv_list="oss"
782 audio_possible_drivers="oss sdl"
783 oss_lib="-lossaudio"
784 HOST_VARIANT_DIR="netbsd"
785 supported_os="yes"
787 OpenBSD)
788 bsd="yes"
789 make="${MAKE-gmake}"
790 audio_drv_list="sdl"
791 audio_possible_drivers="sdl"
792 HOST_VARIANT_DIR="openbsd"
793 supported_os="yes"
795 Darwin)
796 bsd="yes"
797 darwin="yes"
798 hax="yes"
799 hvf="yes"
800 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
801 if [ "$cpu" = "x86_64" ] ; then
802 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
803 LDFLAGS="-arch x86_64 $LDFLAGS"
805 cocoa="yes"
806 audio_drv_list="coreaudio"
807 audio_possible_drivers="coreaudio sdl"
808 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
809 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
810 # Disable attempts to use ObjectiveC features in os/object.h since they
811 # won't work when we're compiling with gcc as a C compiler.
812 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
813 HOST_VARIANT_DIR="darwin"
814 supported_os="yes"
816 SunOS)
817 solaris="yes"
818 make="${MAKE-gmake}"
819 install="${INSTALL-ginstall}"
820 smbd="${SMBD-/usr/sfw/sbin/smbd}"
821 if test -f /usr/include/sys/soundcard.h ; then
822 audio_drv_list="oss"
824 audio_possible_drivers="oss sdl"
825 # needed for CMSG_ macros in sys/socket.h
826 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
827 # needed for TIOCWIN* defines in termios.h
828 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
829 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
830 solarisnetlibs="-lsocket -lnsl -lresolv"
831 LIBS="$solarisnetlibs $LIBS"
832 libs_qga="$solarisnetlibs $libs_qga"
834 Haiku)
835 haiku="yes"
836 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
837 LIBS="-lposix_error_mapper -lnetwork $LIBS"
839 Linux)
840 audio_drv_list="oss"
841 audio_possible_drivers="oss alsa sdl pa"
842 linux="yes"
843 linux_user="yes"
844 kvm="yes"
845 vhost_net="yes"
846 vhost_crypto="yes"
847 vhost_scsi="yes"
848 vhost_vsock="yes"
849 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
850 supported_os="yes"
852 esac
854 if [ "$bsd" = "yes" ] ; then
855 if [ "$darwin" != "yes" ] ; then
856 bsd_user="yes"
860 : ${make=${MAKE-make}}
861 : ${install=${INSTALL-install}}
862 : ${python=${PYTHON-python}}
863 : ${smbd=${SMBD-/usr/sbin/smbd}}
865 # Default objcc to clang if available, otherwise use CC
866 if has clang; then
867 objcc=clang
868 else
869 objcc="$cc"
872 if test "$mingw32" = "yes" ; then
873 EXESUF=".exe"
874 DSOSUF=".dll"
875 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
876 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
877 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
878 # MinGW-w64 needs _POSIX defined.
879 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
880 # MinGW needs -mthreads for TLS and macro _MT.
881 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
882 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
883 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
884 write_c_skeleton;
885 if compile_prog "" "-liberty" ; then
886 LIBS="-liberty $LIBS"
888 prefix="c:/Program Files/QEMU"
889 mandir="\${prefix}"
890 datadir="\${prefix}"
891 qemu_docdir="\${prefix}"
892 bindir="\${prefix}"
893 sysconfdir="\${prefix}"
894 local_statedir=
895 confsuffix=""
896 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
899 werror=""
901 for opt do
902 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
903 case "$opt" in
904 --help|-h) show_help=yes
906 --version|-V) exec cat $source_path/VERSION
908 --prefix=*) prefix="$optarg"
910 --interp-prefix=*) interp_prefix="$optarg"
912 --source-path=*)
914 --cross-prefix=*)
916 --cc=*)
918 --host-cc=*) host_cc="$optarg"
920 --cxx=*)
922 --iasl=*) iasl="$optarg"
924 --objcc=*) objcc="$optarg"
926 --make=*) make="$optarg"
928 --install=*) install="$optarg"
930 --python=*) python="$optarg"
932 --gcov=*) gcov_tool="$optarg"
934 --smbd=*) smbd="$optarg"
936 --extra-cflags=*)
938 --extra-cxxflags=*)
940 --extra-ldflags=*)
942 --enable-debug-info)
944 --disable-debug-info)
946 --enable-modules)
947 modules="yes"
949 --disable-modules)
950 modules="no"
952 --cpu=*)
954 --target-list=*) target_list="$optarg"
956 --enable-trace-backends=*) trace_backends="$optarg"
958 # XXX: backwards compatibility
959 --enable-trace-backend=*) trace_backends="$optarg"
961 --with-trace-file=*) trace_file="$optarg"
963 --enable-gprof) gprof="yes"
965 --enable-gcov) gcov="yes"
967 --static)
968 static="yes"
969 LDFLAGS="-static $LDFLAGS"
970 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
972 --mandir=*) mandir="$optarg"
974 --bindir=*) bindir="$optarg"
976 --libdir=*) libdir="$optarg"
978 --libexecdir=*) libexecdir="$optarg"
980 --includedir=*) includedir="$optarg"
982 --datadir=*) datadir="$optarg"
984 --with-confsuffix=*) confsuffix="$optarg"
986 --docdir=*) qemu_docdir="$optarg"
988 --sysconfdir=*) sysconfdir="$optarg"
990 --localstatedir=*) local_statedir="$optarg"
992 --firmwarepath=*) firmwarepath="$optarg"
994 --host=*|--build=*|\
995 --disable-dependency-tracking|\
996 --sbindir=*|--sharedstatedir=*|\
997 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
998 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
999 # These switches are silently ignored, for compatibility with
1000 # autoconf-generated configure scripts. This allows QEMU's
1001 # configure to be used by RPM and similar macros that set
1002 # lots of directory switches by default.
1004 --disable-sdl) sdl="no"
1006 --enable-sdl) sdl="yes"
1008 --with-sdlabi=*) sdlabi="$optarg"
1010 --disable-qom-cast-debug) qom_cast_debug="no"
1012 --enable-qom-cast-debug) qom_cast_debug="yes"
1014 --disable-virtfs) virtfs="no"
1016 --enable-virtfs) virtfs="yes"
1018 --disable-mpath) mpath="no"
1020 --enable-mpath) mpath="yes"
1022 --disable-vnc) vnc="no"
1024 --enable-vnc) vnc="yes"
1026 --oss-lib=*) oss_lib="$optarg"
1028 --audio-drv-list=*) audio_drv_list="$optarg"
1030 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1032 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1034 --enable-debug-tcg) debug_tcg="yes"
1036 --disable-debug-tcg) debug_tcg="no"
1038 --enable-debug)
1039 # Enable debugging options that aren't excessively noisy
1040 debug_tcg="yes"
1041 debug="yes"
1042 strip_opt="no"
1043 fortify_source="no"
1045 --enable-sanitizers) sanitizers="yes"
1047 --disable-sanitizers) sanitizers="no"
1049 --enable-sparse) sparse="yes"
1051 --disable-sparse) sparse="no"
1053 --disable-strip) strip_opt="no"
1055 --disable-vnc-sasl) vnc_sasl="no"
1057 --enable-vnc-sasl) vnc_sasl="yes"
1059 --disable-vnc-jpeg) vnc_jpeg="no"
1061 --enable-vnc-jpeg) vnc_jpeg="yes"
1063 --disable-vnc-png) vnc_png="no"
1065 --enable-vnc-png) vnc_png="yes"
1067 --disable-slirp) slirp="no"
1069 --disable-vde) vde="no"
1071 --enable-vde) vde="yes"
1073 --disable-netmap) netmap="no"
1075 --enable-netmap) netmap="yes"
1077 --disable-xen) xen="no"
1079 --enable-xen) xen="yes"
1081 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1083 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1085 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1087 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1089 --disable-brlapi) brlapi="no"
1091 --enable-brlapi) brlapi="yes"
1093 --disable-bluez) bluez="no"
1095 --enable-bluez) bluez="yes"
1097 --disable-kvm) kvm="no"
1099 --enable-kvm) kvm="yes"
1101 --disable-hax) hax="no"
1103 --enable-hax) hax="yes"
1105 --disable-hvf) hvf="no"
1107 --enable-hvf) hvf="yes"
1109 --disable-whpx) whpx="no"
1111 --enable-whpx) whpx="yes"
1113 --disable-tcg-interpreter) tcg_interpreter="no"
1115 --enable-tcg-interpreter) tcg_interpreter="yes"
1117 --disable-cap-ng) cap_ng="no"
1119 --enable-cap-ng) cap_ng="yes"
1121 --disable-tcg) tcg="no"
1123 --enable-tcg) tcg="yes"
1125 --disable-malloc-trim) malloc_trim="no"
1127 --enable-malloc-trim) malloc_trim="yes"
1129 --disable-spice) spice="no"
1131 --enable-spice) spice="yes"
1133 --disable-libiscsi) libiscsi="no"
1135 --enable-libiscsi) libiscsi="yes"
1137 --disable-libnfs) libnfs="no"
1139 --enable-libnfs) libnfs="yes"
1141 --enable-profiler) profiler="yes"
1143 --disable-cocoa) cocoa="no"
1145 --enable-cocoa)
1146 cocoa="yes" ;
1147 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1149 --disable-system) softmmu="no"
1151 --enable-system) softmmu="yes"
1153 --disable-user)
1154 linux_user="no" ;
1155 bsd_user="no" ;
1157 --enable-user) ;;
1158 --disable-linux-user) linux_user="no"
1160 --enable-linux-user) linux_user="yes"
1162 --disable-bsd-user) bsd_user="no"
1164 --enable-bsd-user) bsd_user="yes"
1166 --enable-pie) pie="yes"
1168 --disable-pie) pie="no"
1170 --enable-werror) werror="yes"
1172 --disable-werror) werror="no"
1174 --enable-stack-protector) stack_protector="yes"
1176 --disable-stack-protector) stack_protector="no"
1178 --disable-curses) curses="no"
1180 --enable-curses) curses="yes"
1182 --disable-curl) curl="no"
1184 --enable-curl) curl="yes"
1186 --disable-fdt) fdt="no"
1188 --enable-fdt) fdt="yes"
1190 --disable-linux-aio) linux_aio="no"
1192 --enable-linux-aio) linux_aio="yes"
1194 --disable-attr) attr="no"
1196 --enable-attr) attr="yes"
1198 --disable-membarrier) membarrier="no"
1200 --enable-membarrier) membarrier="yes"
1202 --disable-blobs) blobs="no"
1204 --with-pkgversion=*) pkgversion="$optarg"
1206 --with-coroutine=*) coroutine="$optarg"
1208 --disable-coroutine-pool) coroutine_pool="no"
1210 --enable-coroutine-pool) coroutine_pool="yes"
1212 --enable-debug-stack-usage) debug_stack_usage="yes"
1214 --enable-crypto-afalg) crypto_afalg="yes"
1216 --disable-crypto-afalg) crypto_afalg="no"
1218 --disable-docs) docs="no"
1220 --enable-docs) docs="yes"
1222 --disable-vhost-net) vhost_net="no"
1224 --enable-vhost-net) vhost_net="yes"
1226 --disable-vhost-crypto) vhost_crypto="no"
1228 --enable-vhost-crypto)
1229 vhost_crypto="yes"
1230 if test "$mingw32" = "yes"; then
1231 error_exit "vhost-crypto isn't available on win32"
1234 --disable-vhost-scsi) vhost_scsi="no"
1236 --enable-vhost-scsi) vhost_scsi="yes"
1238 --disable-vhost-vsock) vhost_vsock="no"
1240 --enable-vhost-vsock) vhost_vsock="yes"
1242 --disable-opengl) opengl="no"
1244 --enable-opengl) opengl="yes"
1246 --disable-rbd) rbd="no"
1248 --enable-rbd) rbd="yes"
1250 --disable-xfsctl) xfs="no"
1252 --enable-xfsctl) xfs="yes"
1254 --disable-smartcard) smartcard="no"
1256 --enable-smartcard) smartcard="yes"
1258 --disable-libusb) libusb="no"
1260 --enable-libusb) libusb="yes"
1262 --disable-usb-redir) usb_redir="no"
1264 --enable-usb-redir) usb_redir="yes"
1266 --disable-zlib-test) zlib="no"
1268 --disable-lzo) lzo="no"
1270 --enable-lzo) lzo="yes"
1272 --disable-snappy) snappy="no"
1274 --enable-snappy) snappy="yes"
1276 --disable-bzip2) bzip2="no"
1278 --enable-bzip2) bzip2="yes"
1280 --enable-guest-agent) guest_agent="yes"
1282 --disable-guest-agent) guest_agent="no"
1284 --enable-guest-agent-msi) guest_agent_msi="yes"
1286 --disable-guest-agent-msi) guest_agent_msi="no"
1288 --with-vss-sdk) vss_win32_sdk=""
1290 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1292 --without-vss-sdk) vss_win32_sdk="no"
1294 --with-win-sdk) win_sdk=""
1296 --with-win-sdk=*) win_sdk="$optarg"
1298 --without-win-sdk) win_sdk="no"
1300 --enable-tools) want_tools="yes"
1302 --disable-tools) want_tools="no"
1304 --enable-seccomp) seccomp="yes"
1306 --disable-seccomp) seccomp="no"
1308 --disable-glusterfs) glusterfs="no"
1310 --enable-glusterfs) glusterfs="yes"
1312 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1313 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1315 --enable-vhdx|--disable-vhdx)
1316 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1318 --enable-uuid|--disable-uuid)
1319 echo "$0: $opt is obsolete, UUID support is always built" >&2
1321 --disable-gtk) gtk="no"
1323 --enable-gtk) gtk="yes"
1325 --tls-priority=*) tls_priority="$optarg"
1327 --disable-gnutls) gnutls="no"
1329 --enable-gnutls) gnutls="yes"
1331 --disable-nettle) nettle="no"
1333 --enable-nettle) nettle="yes"
1335 --disable-gcrypt) gcrypt="no"
1337 --enable-gcrypt) gcrypt="yes"
1339 --enable-rdma) rdma="yes"
1341 --disable-rdma) rdma="no"
1343 --with-gtkabi=*) gtkabi="$optarg"
1345 --disable-vte) vte="no"
1347 --enable-vte) vte="yes"
1349 --disable-virglrenderer) virglrenderer="no"
1351 --enable-virglrenderer) virglrenderer="yes"
1353 --disable-tpm) tpm="no"
1355 --enable-tpm) tpm="yes"
1357 --disable-libssh2) libssh2="no"
1359 --enable-libssh2) libssh2="yes"
1361 --disable-live-block-migration) live_block_migration="no"
1363 --enable-live-block-migration) live_block_migration="yes"
1365 --disable-numa) numa="no"
1367 --enable-numa) numa="yes"
1369 --disable-libxml2) libxml2="no"
1371 --enable-libxml2) libxml2="yes"
1373 --disable-tcmalloc) tcmalloc="no"
1375 --enable-tcmalloc) tcmalloc="yes"
1377 --disable-jemalloc) jemalloc="no"
1379 --enable-jemalloc) jemalloc="yes"
1381 --disable-replication) replication="no"
1383 --enable-replication) replication="yes"
1385 --disable-vxhs) vxhs="no"
1387 --enable-vxhs) vxhs="yes"
1389 --disable-vhost-user) vhost_user="no"
1391 --enable-vhost-user)
1392 vhost_user="yes"
1393 if test "$mingw32" = "yes"; then
1394 error_exit "vhost-user isn't available on win32"
1397 --disable-capstone) capstone="no"
1399 --enable-capstone) capstone="yes"
1401 --enable-capstone=git) capstone="git"
1403 --enable-capstone=system) capstone="system"
1405 --with-git=*) git="$optarg"
1407 --enable-git-update) git_update=yes
1409 --disable-git-update) git_update=no
1412 echo "ERROR: unknown option $opt"
1413 echo "Try '$0 --help' for more information"
1414 exit 1
1416 esac
1417 done
1419 if test "$vhost_user" = ""; then
1420 if test "$mingw32" = "yes"; then
1421 vhost_user="no"
1422 else
1423 vhost_user="yes"
1427 case "$cpu" in
1428 ppc)
1429 CPU_CFLAGS="-m32"
1430 LDFLAGS="-m32 $LDFLAGS"
1432 ppc64)
1433 CPU_CFLAGS="-m64"
1434 LDFLAGS="-m64 $LDFLAGS"
1436 sparc)
1437 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1438 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1440 sparc64)
1441 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1442 LDFLAGS="-m64 $LDFLAGS"
1444 s390)
1445 CPU_CFLAGS="-m31"
1446 LDFLAGS="-m31 $LDFLAGS"
1448 s390x)
1449 CPU_CFLAGS="-m64"
1450 LDFLAGS="-m64 $LDFLAGS"
1452 i386)
1453 CPU_CFLAGS="-m32"
1454 LDFLAGS="-m32 $LDFLAGS"
1455 cc_i386='$(CC) -m32'
1457 x86_64)
1458 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1459 # If we truly care, we should simply detect this case at
1460 # runtime and generate the fallback to serial emulation.
1461 CPU_CFLAGS="-m64 -mcx16"
1462 LDFLAGS="-m64 $LDFLAGS"
1463 cc_i386='$(CC) -m32'
1465 x32)
1466 CPU_CFLAGS="-mx32"
1467 LDFLAGS="-mx32 $LDFLAGS"
1468 cc_i386='$(CC) -m32'
1470 # No special flags required for other host CPUs
1471 esac
1473 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1475 # For user-mode emulation the host arch has to be one we explicitly
1476 # support, even if we're using TCI.
1477 if [ "$ARCH" = "unknown" ]; then
1478 bsd_user="no"
1479 linux_user="no"
1482 default_target_list=""
1484 mak_wilds=""
1486 if [ "$softmmu" = "yes" ]; then
1487 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1489 if [ "$linux_user" = "yes" ]; then
1490 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1492 if [ "$bsd_user" = "yes" ]; then
1493 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1496 for config in $mak_wilds; do
1497 default_target_list="${default_target_list} $(basename "$config" .mak)"
1498 done
1500 # Enumerate public trace backends for --help output
1501 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1503 if test x"$show_help" = x"yes" ; then
1504 cat << EOF
1506 Usage: configure [options]
1507 Options: [defaults in brackets after descriptions]
1509 Standard options:
1510 --help print this message
1511 --prefix=PREFIX install in PREFIX [$prefix]
1512 --interp-prefix=PREFIX where to find shared libraries, etc.
1513 use %M for cpu name [$interp_prefix]
1514 --target-list=LIST set target list (default: build everything)
1515 $(echo Available targets: $default_target_list | \
1516 fold -s -w 53 | sed -e 's/^/ /')
1518 Advanced options (experts only):
1519 --source-path=PATH path of source code [$source_path]
1520 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1521 --cc=CC use C compiler CC [$cc]
1522 --iasl=IASL use ACPI compiler IASL [$iasl]
1523 --host-cc=CC use C compiler CC [$host_cc] for code run at
1524 build time
1525 --cxx=CXX use C++ compiler CXX [$cxx]
1526 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1527 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1528 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1529 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1530 --make=MAKE use specified make [$make]
1531 --install=INSTALL use specified install [$install]
1532 --python=PYTHON use specified python [$python]
1533 --smbd=SMBD use specified smbd [$smbd]
1534 --with-git=GIT use specified git [$git]
1535 --static enable static build [$static]
1536 --mandir=PATH install man pages in PATH
1537 --datadir=PATH install firmware in PATH$confsuffix
1538 --docdir=PATH install documentation in PATH$confsuffix
1539 --bindir=PATH install binaries in PATH
1540 --libdir=PATH install libraries in PATH
1541 --libexecdir=PATH install helper binaries in PATH
1542 --sysconfdir=PATH install config in PATH$confsuffix
1543 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1544 --firmwarepath=PATH search PATH for firmware files
1545 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1546 --with-pkgversion=VERS use specified string as sub-version of the package
1547 --enable-debug enable common debug build options
1548 --enable-sanitizers enable default sanitizers
1549 --disable-strip disable stripping binaries
1550 --disable-werror disable compilation abort on warning
1551 --disable-stack-protector disable compiler-provided stack protection
1552 --audio-drv-list=LIST set audio drivers list:
1553 Available drivers: $audio_possible_drivers
1554 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1555 --block-drv-rw-whitelist=L
1556 set block driver read-write whitelist
1557 (affects only QEMU, not qemu-img)
1558 --block-drv-ro-whitelist=L
1559 set block driver read-only whitelist
1560 (affects only QEMU, not qemu-img)
1561 --enable-trace-backends=B Set trace backend
1562 Available backends: $trace_backend_list
1563 --with-trace-file=NAME Full PATH,NAME of file to store traces
1564 Default:trace-<pid>
1565 --disable-slirp disable SLIRP userspace network connectivity
1566 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1567 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1568 --oss-lib path to OSS library
1569 --cpu=CPU Build for host CPU [$cpu]
1570 --with-coroutine=BACKEND coroutine backend. Supported options:
1571 ucontext, sigaltstack, windows
1572 --enable-gcov enable test coverage analysis with gcov
1573 --gcov=GCOV use specified gcov [$gcov_tool]
1574 --disable-blobs disable installing provided firmware blobs
1575 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1576 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1577 --tls-priority default TLS protocol/cipher priority string
1578 --enable-gprof QEMU profiling with gprof
1579 --enable-profiler profiler support
1580 --enable-xen-pv-domain-build
1581 xen pv domain builder
1582 --enable-debug-stack-usage
1583 track the maximum stack usage of stacks created by qemu_alloc_stack
1585 Optional features, enabled with --enable-FEATURE and
1586 disabled with --disable-FEATURE, default is enabled if available:
1588 system all system emulation targets
1589 user supported user emulation targets
1590 linux-user all linux usermode emulation targets
1591 bsd-user all BSD usermode emulation targets
1592 docs build documentation
1593 guest-agent build the QEMU Guest Agent
1594 guest-agent-msi build guest agent Windows MSI installation package
1595 pie Position Independent Executables
1596 modules modules support
1597 debug-tcg TCG debugging (default is disabled)
1598 debug-info debugging information
1599 sparse sparse checker
1601 gnutls GNUTLS cryptography support
1602 nettle nettle cryptography support
1603 gcrypt libgcrypt cryptography support
1604 sdl SDL UI
1605 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1606 gtk gtk UI
1607 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1608 vte vte support for the gtk UI
1609 curses curses UI
1610 vnc VNC UI support
1611 vnc-sasl SASL encryption for VNC server
1612 vnc-jpeg JPEG lossy compression for VNC server
1613 vnc-png PNG compression for VNC server
1614 cocoa Cocoa UI (Mac OS X only)
1615 virtfs VirtFS
1616 mpath Multipath persistent reservation passthrough
1617 xen xen backend driver support
1618 xen-pci-passthrough
1619 brlapi BrlAPI (Braile)
1620 curl curl connectivity
1621 membarrier membarrier system call (for Linux 4.14+ or Windows)
1622 fdt fdt device tree
1623 bluez bluez stack connectivity
1624 kvm KVM acceleration support
1625 hax HAX acceleration support
1626 hvf Hypervisor.framework acceleration support
1627 whpx Windows Hypervisor Platform acceleration support
1628 rdma Enable RDMA-based migration and PVRDMA support
1629 vde support for vde network
1630 netmap support for netmap network
1631 linux-aio Linux AIO support
1632 cap-ng libcap-ng support
1633 attr attr and xattr support
1634 vhost-net vhost-net acceleration support
1635 vhost-crypto vhost-crypto acceleration support
1636 spice spice
1637 rbd rados block device (rbd)
1638 libiscsi iscsi support
1639 libnfs nfs support
1640 smartcard smartcard support (libcacard)
1641 libusb libusb (for usb passthrough)
1642 live-block-migration Block migration in the main migration stream
1643 usb-redir usb network redirection support
1644 lzo support of lzo compression library
1645 snappy support of snappy compression library
1646 bzip2 support of bzip2 compression library
1647 (for reading bzip2-compressed dmg images)
1648 seccomp seccomp support
1649 coroutine-pool coroutine freelist (better performance)
1650 glusterfs GlusterFS backend
1651 tpm TPM support
1652 libssh2 ssh block device support
1653 numa libnuma support
1654 libxml2 for Parallels image format
1655 tcmalloc tcmalloc support
1656 jemalloc jemalloc support
1657 replication replication support
1658 vhost-vsock virtio sockets device support
1659 opengl opengl support
1660 virglrenderer virgl rendering support
1661 xfsctl xfsctl support
1662 qom-cast-debug cast debugging support
1663 tools build qemu-io, qemu-nbd and qemu-image tools
1664 vxhs Veritas HyperScale vDisk backend support
1665 crypto-afalg Linux AF_ALG crypto backend driver
1666 vhost-user vhost-user support
1667 capstone capstone disassembler support
1669 NOTE: The object files are built at the place where configure is launched
1671 exit 0
1674 if ! has $python; then
1675 error_exit "Python not found. Use --python=/path/to/python"
1678 # Note that if the Python conditional here evaluates True we will exit
1679 # with status 1 which is a shell 'false' value.
1680 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6))'; then
1681 error_exit "Cannot use '$python', Python 2 >= 2.6 or Python 3 is required." \
1682 "Use --python=/path/to/python to specify a supported Python."
1685 # Suppress writing compiled files
1686 python="$python -B"
1688 # Check that the C compiler works. Doing this here before testing
1689 # the host CPU ensures that we had a valid CC to autodetect the
1690 # $cpu var (and we should bail right here if that's not the case).
1691 # It also allows the help message to be printed without a CC.
1692 write_c_skeleton;
1693 if compile_object ; then
1694 : C compiler works ok
1695 else
1696 error_exit "\"$cc\" either does not exist or does not work"
1698 if ! compile_prog ; then
1699 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1702 # Now we have handled --enable-tcg-interpreter and know we're not just
1703 # printing the help message, bail out if the host CPU isn't supported.
1704 if test "$ARCH" = "unknown"; then
1705 if test "$tcg_interpreter" = "yes" ; then
1706 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1707 else
1708 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1712 # Consult white-list to determine whether to enable werror
1713 # by default. Only enable by default for git builds
1714 if test -z "$werror" ; then
1715 if test -d "$source_path/.git" -a \
1716 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1717 werror="yes"
1718 else
1719 werror="no"
1723 if test "$bogus_os" = "yes"; then
1724 # Now that we know that we're not printing the help and that
1725 # the compiler works (so the results of the check_defines we used
1726 # to identify the OS are reliable), if we didn't recognize the
1727 # host OS we should stop now.
1728 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1731 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1732 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1733 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1734 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1735 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1736 gcc_flags="-Wno-string-plus-int $gcc_flags"
1737 gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
1738 # Note that we do not add -Werror to gcc_flags here, because that would
1739 # enable it for all configure tests. If a configure test failed due
1740 # to -Werror this would just silently disable some features,
1741 # so it's too error prone.
1743 cc_has_warning_flag() {
1744 write_c_skeleton;
1746 # Use the positive sense of the flag when testing for -Wno-wombat
1747 # support (gcc will happily accept the -Wno- form of unknown
1748 # warning options).
1749 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1750 compile_prog "-Werror $optflag" ""
1753 for flag in $gcc_flags; do
1754 if cc_has_warning_flag $flag ; then
1755 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1757 done
1759 if test "$mingw32" = "yes"; then
1760 stack_protector="no"
1762 if test "$stack_protector" != "no"; then
1763 cat > $TMPC << EOF
1764 int main(int argc, char *argv[])
1766 char arr[64], *p = arr, *c = argv[0];
1767 while (*c) {
1768 *p++ = *c++;
1770 return 0;
1773 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1774 sp_on=0
1775 for flag in $gcc_flags; do
1776 # We need to check both a compile and a link, since some compiler
1777 # setups fail only on a .c->.o compile and some only at link time
1778 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1779 compile_prog "-Werror $flag" ""; then
1780 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1781 sp_on=1
1782 break
1784 done
1785 if test "$stack_protector" = yes; then
1786 if test $sp_on = 0; then
1787 error_exit "Stack protector not supported"
1792 # Disable -Wmissing-braces on older compilers that warn even for
1793 # the "universal" C zero initializer {0}.
1794 cat > $TMPC << EOF
1795 struct {
1796 int a[2];
1797 } x = {0};
1799 if compile_object "-Werror" "" ; then
1801 else
1802 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1805 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1806 # large functions that use global variables. The bug is in all releases of
1807 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1808 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1809 cat > $TMPC << EOF
1810 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1811 int main(void) { return 0; }
1812 #else
1813 #error No bug in this compiler.
1814 #endif
1816 if compile_prog "-Werror -fno-gcse" "" ; then
1817 TRANSLATE_OPT_CFLAGS=-fno-gcse
1820 if test "$static" = "yes" ; then
1821 if test "$modules" = "yes" ; then
1822 error_exit "static and modules are mutually incompatible"
1824 if test "$pie" = "yes" ; then
1825 error_exit "static and pie are mutually incompatible"
1826 else
1827 pie="no"
1831 # Unconditional check for compiler __thread support
1832 cat > $TMPC << EOF
1833 static __thread int tls_var;
1834 int main(void) { return tls_var; }
1837 if ! compile_prog "-Werror" "" ; then
1838 error_exit "Your compiler does not support the __thread specifier for " \
1839 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1842 if test "$pie" = ""; then
1843 case "$cpu-$targetos" in
1844 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1847 pie="no"
1849 esac
1852 if test "$pie" != "no" ; then
1853 cat > $TMPC << EOF
1855 #ifdef __linux__
1856 # define THREAD __thread
1857 #else
1858 # define THREAD
1859 #endif
1861 static THREAD int tls_var;
1863 int main(void) { return tls_var; }
1866 if compile_prog "-fPIE -DPIE" "-pie"; then
1867 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1868 LDFLAGS="-pie $LDFLAGS"
1869 pie="yes"
1870 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1871 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1873 else
1874 if test "$pie" = "yes"; then
1875 error_exit "PIE not available due to missing toolchain support"
1876 else
1877 echo "Disabling PIE due to missing toolchain support"
1878 pie="no"
1882 if compile_prog "-Werror -fno-pie" "-nopie"; then
1883 CFLAGS_NOPIE="-fno-pie"
1884 LDFLAGS_NOPIE="-nopie"
1888 ##########################################
1889 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1890 # use i686 as default anyway, but for those that don't, an explicit
1891 # specification is necessary
1893 if test "$cpu" = "i386"; then
1894 cat > $TMPC << EOF
1895 static int sfaa(int *ptr)
1897 return __sync_fetch_and_and(ptr, 0);
1900 int main(void)
1902 int val = 42;
1903 val = __sync_val_compare_and_swap(&val, 0, 1);
1904 sfaa(&val);
1905 return val;
1908 if ! compile_prog "" "" ; then
1909 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1913 #########################################
1914 # Solaris specific configure tool chain decisions
1916 if test "$solaris" = "yes" ; then
1917 if has $install; then
1919 else
1920 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1921 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1922 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1924 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1925 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1926 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1927 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1929 if has ar; then
1931 else
1932 if test -f /usr/ccs/bin/ar ; then
1933 error_exit "No path includes ar" \
1934 "Add /usr/ccs/bin to your path and rerun configure"
1936 error_exit "No path includes ar"
1940 if test -z "${target_list+xxx}" ; then
1941 for target in $default_target_list; do
1942 supported_target $target 2>/dev/null && \
1943 target_list="$target_list $target"
1944 done
1945 target_list="${target_list# }"
1946 else
1947 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1948 for target in $target_list; do
1949 # Check that we recognised the target name; this allows a more
1950 # friendly error message than if we let it fall through.
1951 case " $default_target_list " in
1952 *" $target "*)
1955 error_exit "Unknown target name '$target'"
1957 esac
1958 supported_target $target || exit 1
1959 done
1962 # see if system emulation was really requested
1963 case " $target_list " in
1964 *"-softmmu "*) softmmu=yes
1966 *) softmmu=no
1968 esac
1970 feature_not_found() {
1971 feature=$1
1972 remedy=$2
1974 error_exit "User requested feature $feature" \
1975 "configure was not able to find it." \
1976 "$remedy"
1979 # ---
1980 # big/little endian test
1981 cat > $TMPC << EOF
1982 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1983 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1984 extern int foo(short *, short *);
1985 int main(int argc, char *argv[]) {
1986 return foo(big_endian, little_endian);
1990 if compile_object ; then
1991 if strings -a $TMPO | grep -q BiGeNdIaN ; then
1992 bigendian="yes"
1993 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
1994 bigendian="no"
1995 else
1996 echo big/little test failed
1998 else
1999 echo big/little test failed
2002 ##########################################
2003 # cocoa implies not SDL or GTK
2004 # (the cocoa UI code currently assumes it is always the active UI
2005 # and doesn't interact well with other UI frontend code)
2006 if test "$cocoa" = "yes"; then
2007 if test "$sdl" = "yes"; then
2008 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2010 if test "$gtk" = "yes"; then
2011 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2013 gtk=no
2014 sdl=no
2017 # Some versions of Mac OS X incorrectly define SIZE_MAX
2018 cat > $TMPC << EOF
2019 #include <stdint.h>
2020 #include <stdio.h>
2021 int main(int argc, char *argv[]) {
2022 return printf("%zu", SIZE_MAX);
2025 have_broken_size_max=no
2026 if ! compile_object -Werror ; then
2027 have_broken_size_max=yes
2030 ##########################################
2031 # L2TPV3 probe
2033 cat > $TMPC <<EOF
2034 #include <sys/socket.h>
2035 #include <linux/ip.h>
2036 int main(void) { return sizeof(struct mmsghdr); }
2038 if compile_prog "" "" ; then
2039 l2tpv3=yes
2040 else
2041 l2tpv3=no
2044 ##########################################
2045 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2047 if test "$mingw32" = "yes"; then
2048 # Some versions of MinGW / Mingw-w64 lack localtime_r
2049 # and gmtime_r entirely.
2051 # Some versions of Mingw-w64 define a macro for
2052 # localtime_r/gmtime_r.
2054 # Some versions of Mingw-w64 will define functions
2055 # for localtime_r/gmtime_r, but only if you have
2056 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2057 # though, unistd.h and pthread.h both define
2058 # that for you.
2060 # So this #undef localtime_r and #include <unistd.h>
2061 # are not in fact redundant.
2062 cat > $TMPC << EOF
2063 #include <unistd.h>
2064 #include <time.h>
2065 #undef localtime_r
2066 int main(void) { localtime_r(NULL, NULL); return 0; }
2068 if compile_prog "" "" ; then
2069 localtime_r="yes"
2070 else
2071 localtime_r="no"
2075 ##########################################
2076 # pkg-config probe
2078 if ! has "$pkg_config_exe"; then
2079 error_exit "pkg-config binary '$pkg_config_exe' not found"
2082 ##########################################
2083 # NPTL probe
2085 if test "$linux_user" = "yes"; then
2086 cat > $TMPC <<EOF
2087 #include <sched.h>
2088 #include <linux/futex.h>
2089 int main(void) {
2090 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2091 #error bork
2092 #endif
2093 return 0;
2096 if ! compile_object ; then
2097 feature_not_found "nptl" "Install glibc and linux kernel headers."
2101 ##########################################
2102 # lzo check
2104 if test "$lzo" != "no" ; then
2105 cat > $TMPC << EOF
2106 #include <lzo/lzo1x.h>
2107 int main(void) { lzo_version(); return 0; }
2109 if compile_prog "" "-llzo2" ; then
2110 libs_softmmu="$libs_softmmu -llzo2"
2111 lzo="yes"
2112 else
2113 if test "$lzo" = "yes"; then
2114 feature_not_found "liblzo2" "Install liblzo2 devel"
2116 lzo="no"
2120 ##########################################
2121 # snappy check
2123 if test "$snappy" != "no" ; then
2124 cat > $TMPC << EOF
2125 #include <snappy-c.h>
2126 int main(void) { snappy_max_compressed_length(4096); return 0; }
2128 if compile_prog "" "-lsnappy" ; then
2129 libs_softmmu="$libs_softmmu -lsnappy"
2130 snappy="yes"
2131 else
2132 if test "$snappy" = "yes"; then
2133 feature_not_found "libsnappy" "Install libsnappy devel"
2135 snappy="no"
2139 ##########################################
2140 # bzip2 check
2142 if test "$bzip2" != "no" ; then
2143 cat > $TMPC << EOF
2144 #include <bzlib.h>
2145 int main(void) { BZ2_bzlibVersion(); return 0; }
2147 if compile_prog "" "-lbz2" ; then
2148 bzip2="yes"
2149 else
2150 if test "$bzip2" = "yes"; then
2151 feature_not_found "libbzip2" "Install libbzip2 devel"
2153 bzip2="no"
2157 ##########################################
2158 # libseccomp check
2160 if test "$seccomp" != "no" ; then
2161 case "$cpu" in
2162 i386|x86_64)
2163 libseccomp_minver="2.1.0"
2165 mips)
2166 libseccomp_minver="2.2.0"
2168 arm|aarch64)
2169 libseccomp_minver="2.2.3"
2171 ppc|ppc64|s390x)
2172 libseccomp_minver="2.3.0"
2175 libseccomp_minver=""
2177 esac
2179 if test "$libseccomp_minver" != "" &&
2180 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2181 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2182 seccomp_libs="$($pkg_config --libs libseccomp)"
2183 seccomp="yes"
2184 else
2185 if test "$seccomp" = "yes" ; then
2186 if test "$libseccomp_minver" != "" ; then
2187 feature_not_found "libseccomp" \
2188 "Install libseccomp devel >= $libseccomp_minver"
2189 else
2190 feature_not_found "libseccomp" \
2191 "libseccomp is not supported for host cpu $cpu"
2194 seccomp="no"
2197 ##########################################
2198 # xen probe
2200 if test "$xen" != "no" ; then
2201 # Check whether Xen library path is specified via --extra-ldflags to avoid
2202 # overriding this setting with pkg-config output. If not, try pkg-config
2203 # to obtain all needed flags.
2205 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2206 $pkg_config --exists xencontrol ; then
2207 xen_ctrl_version="$(printf '%d%02d%02d' \
2208 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2209 xen=yes
2210 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2211 xen_pc="$xen_pc xenevtchn xendevicemodel"
2212 if $pkg_config --exists xentoolcore; then
2213 xen_pc="$xen_pc xentoolcore"
2215 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2216 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2217 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2218 else
2220 xen_libs="-lxenstore -lxenctrl -lxenguest"
2221 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2223 # First we test whether Xen headers and libraries are available.
2224 # If no, we are done and there is no Xen support.
2225 # If yes, more tests are run to detect the Xen version.
2227 # Xen (any)
2228 cat > $TMPC <<EOF
2229 #include <xenctrl.h>
2230 int main(void) {
2231 return 0;
2234 if ! compile_prog "" "$xen_libs" ; then
2235 # Xen not found
2236 if test "$xen" = "yes" ; then
2237 feature_not_found "xen" "Install xen devel"
2239 xen=no
2241 # Xen unstable
2242 elif
2243 cat > $TMPC <<EOF &&
2244 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2245 #define __XEN_TOOLS__
2246 #include <xendevicemodel.h>
2247 int main(void) {
2248 xendevicemodel_handle *xd;
2250 xd = xendevicemodel_open(0, 0);
2251 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2253 return 0;
2256 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2257 then
2258 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2259 xen_ctrl_version=41100
2260 xen=yes
2261 elif
2262 cat > $TMPC <<EOF &&
2263 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2264 #include <xenforeignmemory.h>
2265 #include <xentoolcore.h>
2266 int main(void) {
2267 xenforeignmemory_handle *xfmem;
2269 xfmem = xenforeignmemory_open(0, 0);
2270 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2271 xentoolcore_restrict_all(0);
2273 return 0;
2276 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2277 then
2278 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2279 xen_ctrl_version=41000
2280 xen=yes
2281 elif
2282 cat > $TMPC <<EOF &&
2283 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2284 #define __XEN_TOOLS__
2285 #include <xendevicemodel.h>
2286 int main(void) {
2287 xendevicemodel_handle *xd;
2289 xd = xendevicemodel_open(0, 0);
2290 xendevicemodel_close(xd);
2292 return 0;
2295 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2296 then
2297 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2298 xen_ctrl_version=40900
2299 xen=yes
2300 elif
2301 cat > $TMPC <<EOF &&
2303 * If we have stable libs the we don't want the libxc compat
2304 * layers, regardless of what CFLAGS we may have been given.
2306 * Also, check if xengnttab_grant_copy_segment_t is defined and
2307 * grant copy operation is implemented.
2309 #undef XC_WANT_COMPAT_EVTCHN_API
2310 #undef XC_WANT_COMPAT_GNTTAB_API
2311 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2312 #include <xenctrl.h>
2313 #include <xenstore.h>
2314 #include <xenevtchn.h>
2315 #include <xengnttab.h>
2316 #include <xenforeignmemory.h>
2317 #include <stdint.h>
2318 #include <xen/hvm/hvm_info_table.h>
2319 #if !defined(HVM_MAX_VCPUS)
2320 # error HVM_MAX_VCPUS not defined
2321 #endif
2322 int main(void) {
2323 xc_interface *xc = NULL;
2324 xenforeignmemory_handle *xfmem;
2325 xenevtchn_handle *xe;
2326 xengnttab_handle *xg;
2327 xen_domain_handle_t handle;
2328 xengnttab_grant_copy_segment_t* seg = NULL;
2330 xs_daemon_open();
2332 xc = xc_interface_open(0, 0, 0);
2333 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2334 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2335 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2336 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2337 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2339 xfmem = xenforeignmemory_open(0, 0);
2340 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2342 xe = xenevtchn_open(0, 0);
2343 xenevtchn_fd(xe);
2345 xg = xengnttab_open(0, 0);
2346 xengnttab_grant_copy(xg, 0, seg);
2348 return 0;
2351 compile_prog "" "$xen_libs $xen_stable_libs"
2352 then
2353 xen_ctrl_version=40800
2354 xen=yes
2355 elif
2356 cat > $TMPC <<EOF &&
2358 * If we have stable libs the we don't want the libxc compat
2359 * layers, regardless of what CFLAGS we may have been given.
2361 #undef XC_WANT_COMPAT_EVTCHN_API
2362 #undef XC_WANT_COMPAT_GNTTAB_API
2363 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2364 #include <xenctrl.h>
2365 #include <xenstore.h>
2366 #include <xenevtchn.h>
2367 #include <xengnttab.h>
2368 #include <xenforeignmemory.h>
2369 #include <stdint.h>
2370 #include <xen/hvm/hvm_info_table.h>
2371 #if !defined(HVM_MAX_VCPUS)
2372 # error HVM_MAX_VCPUS not defined
2373 #endif
2374 int main(void) {
2375 xc_interface *xc = NULL;
2376 xenforeignmemory_handle *xfmem;
2377 xenevtchn_handle *xe;
2378 xengnttab_handle *xg;
2379 xen_domain_handle_t handle;
2381 xs_daemon_open();
2383 xc = xc_interface_open(0, 0, 0);
2384 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2385 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2386 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2387 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2388 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2390 xfmem = xenforeignmemory_open(0, 0);
2391 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2393 xe = xenevtchn_open(0, 0);
2394 xenevtchn_fd(xe);
2396 xg = xengnttab_open(0, 0);
2397 xengnttab_map_grant_ref(xg, 0, 0, 0);
2399 return 0;
2402 compile_prog "" "$xen_libs $xen_stable_libs"
2403 then
2404 xen_ctrl_version=40701
2405 xen=yes
2406 elif
2407 cat > $TMPC <<EOF &&
2408 #include <xenctrl.h>
2409 #include <stdint.h>
2410 int main(void) {
2411 xc_interface *xc = NULL;
2412 xen_domain_handle_t handle;
2413 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2414 return 0;
2417 compile_prog "" "$xen_libs"
2418 then
2419 xen_ctrl_version=40700
2420 xen=yes
2422 # Xen 4.6
2423 elif
2424 cat > $TMPC <<EOF &&
2425 #include <xenctrl.h>
2426 #include <xenstore.h>
2427 #include <stdint.h>
2428 #include <xen/hvm/hvm_info_table.h>
2429 #if !defined(HVM_MAX_VCPUS)
2430 # error HVM_MAX_VCPUS not defined
2431 #endif
2432 int main(void) {
2433 xc_interface *xc;
2434 xs_daemon_open();
2435 xc = xc_interface_open(0, 0, 0);
2436 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2437 xc_gnttab_open(NULL, 0);
2438 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2439 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2440 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2441 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2442 return 0;
2445 compile_prog "" "$xen_libs"
2446 then
2447 xen_ctrl_version=40600
2448 xen=yes
2450 # Xen 4.5
2451 elif
2452 cat > $TMPC <<EOF &&
2453 #include <xenctrl.h>
2454 #include <xenstore.h>
2455 #include <stdint.h>
2456 #include <xen/hvm/hvm_info_table.h>
2457 #if !defined(HVM_MAX_VCPUS)
2458 # error HVM_MAX_VCPUS not defined
2459 #endif
2460 int main(void) {
2461 xc_interface *xc;
2462 xs_daemon_open();
2463 xc = xc_interface_open(0, 0, 0);
2464 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2465 xc_gnttab_open(NULL, 0);
2466 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2467 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2468 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2469 return 0;
2472 compile_prog "" "$xen_libs"
2473 then
2474 xen_ctrl_version=40500
2475 xen=yes
2477 elif
2478 cat > $TMPC <<EOF &&
2479 #include <xenctrl.h>
2480 #include <xenstore.h>
2481 #include <stdint.h>
2482 #include <xen/hvm/hvm_info_table.h>
2483 #if !defined(HVM_MAX_VCPUS)
2484 # error HVM_MAX_VCPUS not defined
2485 #endif
2486 int main(void) {
2487 xc_interface *xc;
2488 xs_daemon_open();
2489 xc = xc_interface_open(0, 0, 0);
2490 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2491 xc_gnttab_open(NULL, 0);
2492 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2493 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2494 return 0;
2497 compile_prog "" "$xen_libs"
2498 then
2499 xen_ctrl_version=40200
2500 xen=yes
2502 else
2503 if test "$xen" = "yes" ; then
2504 feature_not_found "xen (unsupported version)" \
2505 "Install a supported xen (xen 4.2 or newer)"
2507 xen=no
2510 if test "$xen" = yes; then
2511 if test $xen_ctrl_version -ge 40701 ; then
2512 libs_softmmu="$xen_stable_libs $libs_softmmu"
2514 libs_softmmu="$xen_libs $libs_softmmu"
2519 if test "$xen_pci_passthrough" != "no"; then
2520 if test "$xen" = "yes" && test "$linux" = "yes"; then
2521 xen_pci_passthrough=yes
2522 else
2523 if test "$xen_pci_passthrough" = "yes"; then
2524 error_exit "User requested feature Xen PCI Passthrough" \
2525 " but this feature requires /sys from Linux"
2527 xen_pci_passthrough=no
2531 if test "$xen_pv_domain_build" = "yes" &&
2532 test "$xen" != "yes"; then
2533 error_exit "User requested Xen PV domain builder support" \
2534 "which requires Xen support."
2537 ##########################################
2538 # Windows Hypervisor Platform accelerator (WHPX) check
2539 if test "$whpx" != "no" ; then
2540 cat > $TMPC << EOF
2541 #include <windows.h>
2542 #include <WinHvPlatform.h>
2543 #include <WinHvEmulation.h>
2544 int main(void) {
2545 WHV_CAPABILITY whpx_cap;
2546 UINT32 writtenSize;
2547 WHvGetCapability(WHvCapabilityCodeFeatures, &whpx_cap, sizeof(whpx_cap),
2548 &writtenSize);
2549 return 0;
2552 if compile_prog "" "-lWinHvPlatform -lWinHvEmulation" ; then
2553 libs_softmmu="$libs_softmmu -lWinHvPlatform -lWinHvEmulation"
2554 whpx="yes"
2555 else
2556 if test "$whpx" = "yes"; then
2557 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2559 whpx="no"
2563 ##########################################
2564 # Sparse probe
2565 if test "$sparse" != "no" ; then
2566 if has cgcc; then
2567 sparse=yes
2568 else
2569 if test "$sparse" = "yes" ; then
2570 feature_not_found "sparse" "Install sparse binary"
2572 sparse=no
2576 ##########################################
2577 # X11 probe
2578 if $pkg_config --exists "x11"; then
2579 have_x11=yes
2580 x11_cflags=$($pkg_config --cflags x11)
2581 x11_libs=$($pkg_config --libs x11)
2584 ##########################################
2585 # GTK probe
2587 if test "$gtk" != "no"; then
2588 if test "$gtkabi" = ""; then
2589 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2590 # Use 2.0 as a fallback if that is available.
2591 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2592 gtkabi=3.0
2593 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2594 gtkabi=2.0
2595 else
2596 gtkabi=3.0
2599 gtkpackage="gtk+-$gtkabi"
2600 gtkx11package="gtk+-x11-$gtkabi"
2601 if test "$gtkabi" = "3.0" ; then
2602 gtkversion="3.0.0"
2603 else
2604 gtkversion="2.18.0"
2606 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2607 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2608 gtk_libs=$($pkg_config --libs $gtkpackage)
2609 gtk_version=$($pkg_config --modversion $gtkpackage)
2610 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2611 need_x11=yes
2612 gtk_cflags="$gtk_cflags $x11_cflags"
2613 gtk_libs="$gtk_libs $x11_libs"
2615 gtk="yes"
2616 elif test "$gtk" = "yes"; then
2617 feature_not_found "gtk" "Install gtk3-devel"
2618 else
2619 gtk="no"
2624 ##########################################
2625 # GNUTLS probe
2627 gnutls_works() {
2628 # Unfortunately some distros have bad pkg-config information for gnutls
2629 # such that it claims to exist but you get a compiler error if you try
2630 # to use the options returned by --libs. Specifically, Ubuntu for --static
2631 # builds doesn't work:
2632 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2634 # So sanity check the cflags/libs before assuming gnutls can be used.
2635 if ! $pkg_config --exists "gnutls"; then
2636 return 1
2639 write_c_skeleton
2640 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2643 gnutls_gcrypt=no
2644 gnutls_nettle=no
2645 if test "$gnutls" != "no"; then
2646 if gnutls_works; then
2647 gnutls_cflags=$($pkg_config --cflags gnutls)
2648 gnutls_libs=$($pkg_config --libs gnutls)
2649 libs_softmmu="$gnutls_libs $libs_softmmu"
2650 libs_tools="$gnutls_libs $libs_tools"
2651 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2652 gnutls="yes"
2654 # gnutls_rnd requires >= 2.11.0
2655 if $pkg_config --exists "gnutls >= 2.11.0"; then
2656 gnutls_rnd="yes"
2657 else
2658 gnutls_rnd="no"
2661 if $pkg_config --exists 'gnutls >= 3.0'; then
2662 gnutls_gcrypt=no
2663 gnutls_nettle=yes
2664 elif $pkg_config --exists 'gnutls >= 2.12'; then
2665 case $($pkg_config --libs --static gnutls) in
2666 *gcrypt*)
2667 gnutls_gcrypt=yes
2668 gnutls_nettle=no
2670 *nettle*)
2671 gnutls_gcrypt=no
2672 gnutls_nettle=yes
2675 gnutls_gcrypt=yes
2676 gnutls_nettle=no
2678 esac
2679 else
2680 gnutls_gcrypt=yes
2681 gnutls_nettle=no
2683 elif test "$gnutls" = "yes"; then
2684 feature_not_found "gnutls" "Install gnutls devel"
2685 else
2686 gnutls="no"
2687 gnutls_rnd="no"
2689 else
2690 gnutls_rnd="no"
2694 # If user didn't give a --disable/enable-gcrypt flag,
2695 # then mark as disabled if user requested nettle
2696 # explicitly, or if gnutls links to nettle
2697 if test -z "$gcrypt"
2698 then
2699 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2700 then
2701 gcrypt="no"
2705 # If user didn't give a --disable/enable-nettle flag,
2706 # then mark as disabled if user requested gcrypt
2707 # explicitly, or if gnutls links to gcrypt
2708 if test -z "$nettle"
2709 then
2710 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2711 then
2712 nettle="no"
2716 has_libgcrypt_config() {
2717 if ! has "libgcrypt-config"
2718 then
2719 return 1
2722 if test -n "$cross_prefix"
2723 then
2724 host=$(libgcrypt-config --host)
2725 if test "$host-" != $cross_prefix
2726 then
2727 return 1
2731 return 0
2734 if test "$gcrypt" != "no"; then
2735 if has_libgcrypt_config; then
2736 gcrypt_cflags=$(libgcrypt-config --cflags)
2737 gcrypt_libs=$(libgcrypt-config --libs)
2738 # Debian has remove -lgpg-error from libgcrypt-config
2739 # as it "spreads unnecessary dependencies" which in
2740 # turn breaks static builds...
2741 if test "$static" = "yes"
2742 then
2743 gcrypt_libs="$gcrypt_libs -lgpg-error"
2745 libs_softmmu="$gcrypt_libs $libs_softmmu"
2746 libs_tools="$gcrypt_libs $libs_tools"
2747 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2748 gcrypt="yes"
2749 if test -z "$nettle"; then
2750 nettle="no"
2753 cat > $TMPC << EOF
2754 #include <gcrypt.h>
2755 int main(void) {
2756 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2757 GCRY_MD_SHA256,
2758 NULL, 0, 0, 0, NULL);
2759 return 0;
2762 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2763 gcrypt_kdf=yes
2766 cat > $TMPC << EOF
2767 #include <gcrypt.h>
2768 int main(void) {
2769 gcry_mac_hd_t handle;
2770 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2771 GCRY_MAC_FLAG_SECURE, NULL);
2772 return 0;
2775 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2776 gcrypt_hmac=yes
2778 else
2779 if test "$gcrypt" = "yes"; then
2780 feature_not_found "gcrypt" "Install gcrypt devel"
2781 else
2782 gcrypt="no"
2788 if test "$nettle" != "no"; then
2789 if $pkg_config --exists "nettle"; then
2790 nettle_cflags=$($pkg_config --cflags nettle)
2791 nettle_libs=$($pkg_config --libs nettle)
2792 nettle_version=$($pkg_config --modversion nettle)
2793 libs_softmmu="$nettle_libs $libs_softmmu"
2794 libs_tools="$nettle_libs $libs_tools"
2795 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2796 nettle="yes"
2798 cat > $TMPC << EOF
2799 #include <stddef.h>
2800 #include <nettle/pbkdf2.h>
2801 int main(void) {
2802 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2803 return 0;
2806 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2807 nettle_kdf=yes
2809 else
2810 if test "$nettle" = "yes"; then
2811 feature_not_found "nettle" "Install nettle devel"
2812 else
2813 nettle="no"
2818 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2819 then
2820 error_exit "Only one of gcrypt & nettle can be enabled"
2823 ##########################################
2824 # libtasn1 - only for the TLS creds/session test suite
2826 tasn1=yes
2827 tasn1_cflags=""
2828 tasn1_libs=""
2829 if $pkg_config --exists "libtasn1"; then
2830 tasn1_cflags=$($pkg_config --cflags libtasn1)
2831 tasn1_libs=$($pkg_config --libs libtasn1)
2832 else
2833 tasn1=no
2837 ##########################################
2838 # getifaddrs (for tests/test-io-channel-socket )
2840 have_ifaddrs_h=yes
2841 if ! check_include "ifaddrs.h" ; then
2842 have_ifaddrs_h=no
2845 ##########################################
2846 # VTE probe
2848 if test "$vte" != "no"; then
2849 if test "$gtkabi" = "3.0"; then
2850 vteminversion="0.32.0"
2851 if $pkg_config --exists "vte-2.91"; then
2852 vtepackage="vte-2.91"
2853 else
2854 vtepackage="vte-2.90"
2856 else
2857 vtepackage="vte"
2858 vteminversion="0.24.0"
2860 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2861 vte_cflags=$($pkg_config --cflags $vtepackage)
2862 vte_libs=$($pkg_config --libs $vtepackage)
2863 vteversion=$($pkg_config --modversion $vtepackage)
2864 vte="yes"
2865 elif test "$vte" = "yes"; then
2866 if test "$gtkabi" = "3.0"; then
2867 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2868 else
2869 feature_not_found "vte" "Install libvte devel"
2871 else
2872 vte="no"
2876 ##########################################
2877 # SDL probe
2879 # Look for sdl configuration program (pkg-config or sdl-config). Try
2880 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2882 sdl_probe ()
2884 sdl_too_old=no
2885 if test "$sdlabi" = ""; then
2886 if $pkg_config --exists "sdl2"; then
2887 sdlabi=2.0
2888 elif $pkg_config --exists "sdl"; then
2889 sdlabi=1.2
2890 else
2891 sdlabi=2.0
2895 if test $sdlabi = "2.0"; then
2896 sdl_config=$sdl2_config
2897 sdlname=sdl2
2898 sdlconfigname=sdl2_config
2899 elif test $sdlabi = "1.2"; then
2900 sdlname=sdl
2901 sdlconfigname=sdl_config
2902 else
2903 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2906 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2907 sdl_config=$sdlconfigname
2910 if $pkg_config $sdlname --exists; then
2911 sdlconfig="$pkg_config $sdlname"
2912 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2913 elif has ${sdl_config}; then
2914 sdlconfig="$sdl_config"
2915 sdlversion=$($sdlconfig --version)
2916 else
2917 if test "$sdl" = "yes" ; then
2918 feature_not_found "sdl" "Install SDL2-devel"
2920 sdl=no
2921 # no need to do the rest
2922 return
2924 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2925 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2928 cat > $TMPC << EOF
2929 #include <SDL.h>
2930 #undef main /* We don't want SDL to override our main() */
2931 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2933 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2934 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
2935 if test "$static" = "yes" ; then
2936 if $pkg_config $sdlname --exists; then
2937 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2938 else
2939 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2941 else
2942 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2944 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2945 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2946 sdl_too_old=yes
2947 else
2948 sdl=yes
2951 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2952 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2953 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2954 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2955 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2957 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2959 else
2960 sdl=no
2962 fi # static link
2963 else # sdl not found
2964 if test "$sdl" = "yes" ; then
2965 feature_not_found "sdl" "Install SDL devel"
2967 sdl=no
2968 fi # sdl compile test
2971 if test "$sdl" != "no" ; then
2972 sdl_probe
2975 if test "$sdl" = "yes" ; then
2976 cat > $TMPC <<EOF
2977 #include <SDL.h>
2978 #if defined(SDL_VIDEO_DRIVER_X11)
2979 #include <X11/XKBlib.h>
2980 #else
2981 #error No x11 support
2982 #endif
2983 int main(void) { return 0; }
2985 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2986 need_x11=yes
2987 sdl_cflags="$sdl_cflags $x11_cflags"
2988 sdl_libs="$sdl_libs $x11_libs"
2992 ##########################################
2993 # RDMA needs OpenFabrics libraries
2994 if test "$rdma" != "no" ; then
2995 cat > $TMPC <<EOF
2996 #include <rdma/rdma_cma.h>
2997 int main(void) { return 0; }
2999 rdma_libs="-lrdmacm -libverbs -libumad"
3000 if compile_prog "" "$rdma_libs" ; then
3001 rdma="yes"
3002 libs_softmmu="$libs_softmmu $rdma_libs"
3003 else
3004 if test "$rdma" = "yes" ; then
3005 error_exit \
3006 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3007 " Your options:" \
3008 " (1) Fast: Install infiniband packages (devel) from your distro." \
3009 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3010 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3012 rdma="no"
3016 ##########################################
3017 # VNC SASL detection
3018 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3019 cat > $TMPC <<EOF
3020 #include <sasl/sasl.h>
3021 #include <stdio.h>
3022 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3024 # Assuming Cyrus-SASL installed in /usr prefix
3025 vnc_sasl_cflags=""
3026 vnc_sasl_libs="-lsasl2"
3027 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3028 vnc_sasl=yes
3029 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3030 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3031 else
3032 if test "$vnc_sasl" = "yes" ; then
3033 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3035 vnc_sasl=no
3039 ##########################################
3040 # VNC JPEG detection
3041 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3042 if $pkg_config --exists libjpeg; then
3043 vnc_jpeg=yes
3044 libs_softmmu="$libs_softmmu $($pkg_config --libs libjpeg)"
3045 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libjpeg)"
3046 else
3047 cat > $TMPC <<EOF
3048 #include <stdio.h>
3049 #include <jpeglib.h>
3050 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3052 vnc_jpeg_cflags=""
3053 vnc_jpeg_libs="-ljpeg"
3054 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3055 vnc_jpeg=yes
3056 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3057 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3058 else
3059 if test "$vnc_jpeg" = "yes" ; then
3060 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3062 vnc_jpeg=no
3067 ##########################################
3068 # VNC PNG detection
3069 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3070 cat > $TMPC <<EOF
3071 //#include <stdio.h>
3072 #include <png.h>
3073 #include <stddef.h>
3074 int main(void) {
3075 png_structp png_ptr;
3076 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3077 return png_ptr != 0;
3080 if $pkg_config libpng --exists; then
3081 vnc_png_cflags=$($pkg_config libpng --cflags)
3082 vnc_png_libs=$($pkg_config libpng --libs)
3083 else
3084 vnc_png_cflags=""
3085 vnc_png_libs="-lpng"
3087 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3088 vnc_png=yes
3089 libs_softmmu="$vnc_png_libs $libs_softmmu"
3090 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3091 else
3092 if test "$vnc_png" = "yes" ; then
3093 feature_not_found "vnc-png" "Install libpng devel"
3095 vnc_png=no
3099 ##########################################
3100 # xkbcommon probe
3101 if test "$xkbcommon" != "no" ; then
3102 if $pkg_config xkbcommon --exists; then
3103 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3104 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3105 xkbcommon=yes
3106 else
3107 if test "$xkbcommon" = "yes" ; then
3108 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3110 xkbcommon=no
3114 ##########################################
3115 # fnmatch() probe, used for ACL routines
3116 fnmatch="no"
3117 cat > $TMPC << EOF
3118 #include <fnmatch.h>
3119 int main(void)
3121 fnmatch("foo", "foo", 0);
3122 return 0;
3125 if compile_prog "" "" ; then
3126 fnmatch="yes"
3129 ##########################################
3130 # xfsctl() probe, used for file-posix.c
3131 if test "$xfs" != "no" ; then
3132 cat > $TMPC << EOF
3133 #include <stddef.h> /* NULL */
3134 #include <xfs/xfs.h>
3135 int main(void)
3137 xfsctl(NULL, 0, 0, NULL);
3138 return 0;
3141 if compile_prog "" "" ; then
3142 xfs="yes"
3143 else
3144 if test "$xfs" = "yes" ; then
3145 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3147 xfs=no
3151 ##########################################
3152 # vde libraries probe
3153 if test "$vde" != "no" ; then
3154 vde_libs="-lvdeplug"
3155 cat > $TMPC << EOF
3156 #include <stddef.h>
3157 #include <libvdeplug.h>
3158 int main(void)
3160 struct vde_open_args a = {0, 0, 0};
3161 char s[] = "";
3162 vde_open(s, s, &a);
3163 return 0;
3166 if compile_prog "" "$vde_libs" ; then
3167 vde=yes
3168 else
3169 if test "$vde" = "yes" ; then
3170 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3172 vde=no
3176 ##########################################
3177 # netmap support probe
3178 # Apart from looking for netmap headers, we make sure that the host API version
3179 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3180 # a minor/major version number. Minor new features will be marked with values up
3181 # to 15, and if something happens that requires a change to the backend we will
3182 # move above 15, submit the backend fixes and modify this two bounds.
3183 if test "$netmap" != "no" ; then
3184 cat > $TMPC << EOF
3185 #include <inttypes.h>
3186 #include <net/if.h>
3187 #include <net/netmap.h>
3188 #include <net/netmap_user.h>
3189 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3190 #error
3191 #endif
3192 int main(void) { return 0; }
3194 if compile_prog "" "" ; then
3195 netmap=yes
3196 else
3197 if test "$netmap" = "yes" ; then
3198 feature_not_found "netmap"
3200 netmap=no
3204 ##########################################
3205 # libcap-ng library probe
3206 if test "$cap_ng" != "no" ; then
3207 cap_libs="-lcap-ng"
3208 cat > $TMPC << EOF
3209 #include <cap-ng.h>
3210 int main(void)
3212 capng_capability_to_name(CAPNG_EFFECTIVE);
3213 return 0;
3216 if compile_prog "" "$cap_libs" ; then
3217 cap_ng=yes
3218 libs_tools="$cap_libs $libs_tools"
3219 else
3220 if test "$cap_ng" = "yes" ; then
3221 feature_not_found "cap_ng" "Install libcap-ng devel"
3223 cap_ng=no
3227 ##########################################
3228 # Sound support libraries probe
3230 audio_drv_probe()
3232 drv=$1
3233 hdr=$2
3234 lib=$3
3235 exp=$4
3236 cfl=$5
3237 cat > $TMPC << EOF
3238 #include <$hdr>
3239 int main(void) { $exp }
3241 if compile_prog "$cfl" "$lib" ; then
3243 else
3244 error_exit "$drv check failed" \
3245 "Make sure to have the $drv libs and headers installed."
3249 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3250 for drv in $audio_drv_list; do
3251 case $drv in
3252 alsa)
3253 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3254 "return snd_pcm_close((snd_pcm_t *)0);"
3255 alsa_libs="-lasound"
3259 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3260 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3261 pulse_libs="-lpulse"
3262 audio_pt_int="yes"
3265 sdl)
3266 if test "$sdl" = "no"; then
3267 error_exit "sdl not found or disabled, can not use sdl audio driver"
3271 coreaudio)
3272 coreaudio_libs="-framework CoreAudio"
3275 dsound)
3276 dsound_libs="-lole32 -ldxguid"
3277 audio_win_int="yes"
3280 oss)
3281 oss_libs="$oss_lib"
3284 wav)
3285 # XXX: Probes for CoreAudio, DirectSound
3289 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3290 error_exit "Unknown driver '$drv' selected" \
3291 "Possible drivers are: $audio_possible_drivers"
3294 esac
3295 done
3297 ##########################################
3298 # BrlAPI probe
3300 if test "$brlapi" != "no" ; then
3301 brlapi_libs="-lbrlapi"
3302 cat > $TMPC << EOF
3303 #include <brlapi.h>
3304 #include <stddef.h>
3305 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3307 if compile_prog "" "$brlapi_libs" ; then
3308 brlapi=yes
3309 else
3310 if test "$brlapi" = "yes" ; then
3311 feature_not_found "brlapi" "Install brlapi devel"
3313 brlapi=no
3317 ##########################################
3318 # curses probe
3319 if test "$curses" != "no" ; then
3320 if test "$mingw32" = "yes" ; then
3321 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3322 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3323 else
3324 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3325 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3327 curses_found=no
3328 cat > $TMPC << EOF
3329 #include <locale.h>
3330 #include <curses.h>
3331 #include <wchar.h>
3332 int main(void) {
3333 wchar_t wch = L'w';
3334 setlocale(LC_ALL, "");
3335 resize_term(0, 0);
3336 addwstr(L"wide chars\n");
3337 addnwstr(&wch, 1);
3338 add_wch(WACS_DEGREE);
3339 return 0;
3342 IFS=:
3343 for curses_inc in $curses_inc_list; do
3344 # Make sure we get the wide character prototypes
3345 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3346 IFS=:
3347 for curses_lib in $curses_lib_list; do
3348 unset IFS
3349 if compile_prog "$curses_inc" "$curses_lib" ; then
3350 curses_found=yes
3351 break
3353 done
3354 if test "$curses_found" = yes ; then
3355 break
3357 done
3358 unset IFS
3359 if test "$curses_found" = "yes" ; then
3360 curses=yes
3361 else
3362 if test "$curses" = "yes" ; then
3363 feature_not_found "curses" "Install ncurses devel"
3365 curses=no
3369 ##########################################
3370 # curl probe
3371 if test "$curl" != "no" ; then
3372 if $pkg_config libcurl --exists; then
3373 curlconfig="$pkg_config libcurl"
3374 else
3375 curlconfig=curl-config
3377 cat > $TMPC << EOF
3378 #include <curl/curl.h>
3379 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3381 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3382 curl_libs=$($curlconfig --libs 2>/dev/null)
3383 if compile_prog "$curl_cflags" "$curl_libs" ; then
3384 curl=yes
3385 else
3386 if test "$curl" = "yes" ; then
3387 feature_not_found "curl" "Install libcurl devel"
3389 curl=no
3391 fi # test "$curl"
3393 ##########################################
3394 # bluez support probe
3395 if test "$bluez" != "no" ; then
3396 cat > $TMPC << EOF
3397 #include <bluetooth/bluetooth.h>
3398 int main(void) { return bt_error(0); }
3400 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3401 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3402 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3403 bluez=yes
3404 libs_softmmu="$bluez_libs $libs_softmmu"
3405 else
3406 if test "$bluez" = "yes" ; then
3407 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3409 bluez="no"
3413 ##########################################
3414 # glib support probe
3416 if test "$mingw32" = yes; then
3417 glib_req_ver=2.30
3418 else
3419 glib_req_ver=2.22
3421 glib_modules=gthread-2.0
3422 if test "$modules" = yes; then
3423 glib_modules="$glib_modules gmodule-export-2.0"
3426 # This workaround is required due to a bug in pkg-config file for glib as it
3427 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3429 if test "$static" = yes -a "$mingw32" = yes; then
3430 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3433 for i in $glib_modules; do
3434 if $pkg_config --atleast-version=$glib_req_ver $i; then
3435 glib_cflags=$($pkg_config --cflags $i)
3436 glib_libs=$($pkg_config --libs $i)
3437 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3438 LIBS="$glib_libs $LIBS"
3439 libs_qga="$glib_libs $libs_qga"
3440 else
3441 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3443 done
3445 # Sanity check that the current size_t matches the
3446 # size that glib thinks it should be. This catches
3447 # problems on multi-arch where people try to build
3448 # 32-bit QEMU while pointing at 64-bit glib headers
3449 cat > $TMPC <<EOF
3450 #include <glib.h>
3451 #include <unistd.h>
3453 #define QEMU_BUILD_BUG_ON(x) \
3454 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3456 int main(void) {
3457 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3458 return 0;
3462 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3463 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3464 "You probably need to set PKG_CONFIG_LIBDIR"\
3465 "to point to the right pkg-config files for your"\
3466 "build target"
3469 # g_test_trap_subprocess added in 2.38. Used by some tests.
3470 glib_subprocess=yes
3471 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3472 glib_subprocess=no
3475 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3476 cat > $TMPC << EOF
3477 #include <glib.h>
3478 int main(void) { return 0; }
3480 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3481 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3482 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3483 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3487 #########################################
3488 # zlib check
3490 if test "$zlib" != "no" ; then
3491 if $pkg_config --exists zlib; then
3492 zlib_cflags=$($pkg_config --cflags zlib)
3493 zlib_libs=$($pkg_config --libs zlib)
3494 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3495 LIBS="$zlib_libs $LIBS"
3496 else
3497 cat > $TMPC << EOF
3498 #include <zlib.h>
3499 int main(void) { zlibVersion(); return 0; }
3501 if compile_prog "" "-lz" ; then
3502 LIBS="$LIBS -lz"
3503 else
3504 error_exit "zlib check failed" \
3505 "Make sure to have the zlib libs and headers installed."
3510 ##########################################
3511 # SHA command probe for modules
3512 if test "$modules" = yes; then
3513 shacmd_probe="sha1sum sha1 shasum"
3514 for c in $shacmd_probe; do
3515 if has $c; then
3516 shacmd="$c"
3517 break
3519 done
3520 if test "$shacmd" = ""; then
3521 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3525 ##########################################
3526 # pixman support probe
3528 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3529 pixman_cflags=
3530 pixman_libs=
3531 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3532 pixman_cflags=$($pkg_config --cflags pixman-1)
3533 pixman_libs=$($pkg_config --libs pixman-1)
3534 else
3535 error_exit "pixman >= 0.21.8 not present." \
3536 "Please install the pixman devel package."
3539 ##########################################
3540 # libmpathpersist probe
3542 if test "$mpath" != "no" ; then
3543 cat > $TMPC <<EOF
3544 #include <libudev.h>
3545 #include <mpath_persist.h>
3546 unsigned mpath_mx_alloc_len = 1024;
3547 int logsink;
3548 static struct config *multipath_conf;
3549 extern struct udev *udev;
3550 extern struct config *get_multipath_config(void);
3551 extern void put_multipath_config(struct config *conf);
3552 struct udev *udev;
3553 struct config *get_multipath_config(void) { return multipath_conf; }
3554 void put_multipath_config(struct config *conf) { }
3556 int main(void) {
3557 udev = udev_new();
3558 multipath_conf = mpath_lib_init();
3559 return 0;
3562 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3563 mpathpersist=yes
3564 else
3565 mpathpersist=no
3567 else
3568 mpathpersist=no
3571 ##########################################
3572 # libcap probe
3574 if test "$cap" != "no" ; then
3575 cat > $TMPC <<EOF
3576 #include <stdio.h>
3577 #include <sys/capability.h>
3578 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3580 if compile_prog "" "-lcap" ; then
3581 cap=yes
3582 else
3583 cap=no
3587 ##########################################
3588 # pthread probe
3589 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3591 pthread=no
3592 cat > $TMPC << EOF
3593 #include <pthread.h>
3594 static void *f(void *p) { return NULL; }
3595 int main(void) {
3596 pthread_t thread;
3597 pthread_create(&thread, 0, f, 0);
3598 return 0;
3601 if compile_prog "" "" ; then
3602 pthread=yes
3603 else
3604 for pthread_lib in $PTHREADLIBS_LIST; do
3605 if compile_prog "" "$pthread_lib" ; then
3606 pthread=yes
3607 found=no
3608 for lib_entry in $LIBS; do
3609 if test "$lib_entry" = "$pthread_lib"; then
3610 found=yes
3611 break
3613 done
3614 if test "$found" = "no"; then
3615 LIBS="$pthread_lib $LIBS"
3616 libs_qga="$pthread_lib $libs_qga"
3618 PTHREAD_LIB="$pthread_lib"
3619 break
3621 done
3624 if test "$mingw32" != yes -a "$pthread" = no; then
3625 error_exit "pthread check failed" \
3626 "Make sure to have the pthread libs and headers installed."
3629 # check for pthread_setname_np
3630 pthread_setname_np=no
3631 cat > $TMPC << EOF
3632 #include <pthread.h>
3634 static void *f(void *p) { return NULL; }
3635 int main(void)
3637 pthread_t thread;
3638 pthread_create(&thread, 0, f, 0);
3639 pthread_setname_np(thread, "QEMU");
3640 return 0;
3643 if compile_prog "" "$pthread_lib" ; then
3644 pthread_setname_np=yes
3647 ##########################################
3648 # rbd probe
3649 if test "$rbd" != "no" ; then
3650 cat > $TMPC <<EOF
3651 #include <stdio.h>
3652 #include <rbd/librbd.h>
3653 int main(void) {
3654 rados_t cluster;
3655 rados_create(&cluster, NULL);
3656 return 0;
3659 rbd_libs="-lrbd -lrados"
3660 if compile_prog "" "$rbd_libs" ; then
3661 rbd=yes
3662 else
3663 if test "$rbd" = "yes" ; then
3664 feature_not_found "rados block device" "Install librbd/ceph devel"
3666 rbd=no
3670 ##########################################
3671 # libssh2 probe
3672 min_libssh2_version=1.2.8
3673 if test "$libssh2" != "no" ; then
3674 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3675 libssh2_cflags=$($pkg_config libssh2 --cflags)
3676 libssh2_libs=$($pkg_config libssh2 --libs)
3677 libssh2=yes
3678 else
3679 if test "$libssh2" = "yes" ; then
3680 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3682 libssh2=no
3686 ##########################################
3687 # libssh2_sftp_fsync probe
3689 if test "$libssh2" = "yes"; then
3690 cat > $TMPC <<EOF
3691 #include <stdio.h>
3692 #include <libssh2.h>
3693 #include <libssh2_sftp.h>
3694 int main(void) {
3695 LIBSSH2_SESSION *session;
3696 LIBSSH2_SFTP *sftp;
3697 LIBSSH2_SFTP_HANDLE *sftp_handle;
3698 session = libssh2_session_init ();
3699 sftp = libssh2_sftp_init (session);
3700 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3701 libssh2_sftp_fsync (sftp_handle);
3702 return 0;
3705 # libssh2_cflags/libssh2_libs defined in previous test.
3706 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3707 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3711 ##########################################
3712 # linux-aio probe
3714 if test "$linux_aio" != "no" ; then
3715 cat > $TMPC <<EOF
3716 #include <libaio.h>
3717 #include <sys/eventfd.h>
3718 #include <stddef.h>
3719 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3721 if compile_prog "" "-laio" ; then
3722 linux_aio=yes
3723 else
3724 if test "$linux_aio" = "yes" ; then
3725 feature_not_found "linux AIO" "Install libaio devel"
3727 linux_aio=no
3731 ##########################################
3732 # TPM passthrough is only on x86 Linux
3734 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3735 tpm_passthrough=$tpm
3736 else
3737 tpm_passthrough=no
3740 # TPM emulator is for all posix systems
3741 if test "$mingw32" != "yes"; then
3742 tpm_emulator=$tpm
3743 else
3744 tpm_emulator=no
3746 ##########################################
3747 # attr probe
3749 if test "$attr" != "no" ; then
3750 cat > $TMPC <<EOF
3751 #include <stdio.h>
3752 #include <sys/types.h>
3753 #ifdef CONFIG_LIBATTR
3754 #include <attr/xattr.h>
3755 #else
3756 #include <sys/xattr.h>
3757 #endif
3758 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3760 if compile_prog "" "" ; then
3761 attr=yes
3762 # Older distros have <attr/xattr.h>, and need -lattr:
3763 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3764 attr=yes
3765 LIBS="-lattr $LIBS"
3766 libattr=yes
3767 else
3768 if test "$attr" = "yes" ; then
3769 feature_not_found "ATTR" "Install libc6 or libattr devel"
3771 attr=no
3775 ##########################################
3776 # iovec probe
3777 cat > $TMPC <<EOF
3778 #include <sys/types.h>
3779 #include <sys/uio.h>
3780 #include <unistd.h>
3781 int main(void) { return sizeof(struct iovec); }
3783 iovec=no
3784 if compile_prog "" "" ; then
3785 iovec=yes
3788 ##########################################
3789 # preadv probe
3790 cat > $TMPC <<EOF
3791 #include <sys/types.h>
3792 #include <sys/uio.h>
3793 #include <unistd.h>
3794 int main(void) { return preadv(0, 0, 0, 0); }
3796 preadv=no
3797 if compile_prog "" "" ; then
3798 preadv=yes
3801 ##########################################
3802 # fdt probe
3803 # fdt support is mandatory for at least some target architectures,
3804 # so insist on it if we're building those system emulators.
3805 fdt_required=no
3806 for target in $target_list; do
3807 case $target in
3808 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3809 fdt_required=yes
3811 esac
3812 done
3814 if test "$fdt_required" = "yes"; then
3815 if test "$fdt" = "no"; then
3816 error_exit "fdt disabled but some requested targets require it." \
3817 "You can turn off fdt only if you also disable all the system emulation" \
3818 "targets which need it (by specifying a cut down --target-list)."
3820 fdt=yes
3823 if test "$fdt" != "no" ; then
3824 fdt_libs="-lfdt"
3825 # explicitly check for libfdt_env.h as it is missing in some stable installs
3826 # and test for required functions to make sure we are on a version >= 1.4.2
3827 cat > $TMPC << EOF
3828 #include <libfdt.h>
3829 #include <libfdt_env.h>
3830 int main(void) { fdt_first_subnode(0, 0); return 0; }
3832 if compile_prog "" "$fdt_libs" ; then
3833 # system DTC is good - use it
3834 fdt=system
3835 else
3836 # have GIT checkout, so activate dtc submodule
3837 if test -e "${source_path}/.git" ; then
3838 git_submodules="${git_submodules} dtc"
3840 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3841 fdt=git
3842 mkdir -p dtc
3843 if [ "$pwd_is_source_path" != "y" ] ; then
3844 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3845 symlink "$source_path/dtc/scripts" "dtc/scripts"
3847 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3848 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3849 fdt_libs="$fdt_libs"
3850 elif test "$fdt" = "yes" ; then
3851 # Not a git build & no libfdt found, prompt for system install
3852 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3853 "Please install the DTC (libfdt) devel package"
3854 else
3855 # don't have and don't want
3856 fdt_libs=
3857 fdt=no
3862 libs_softmmu="$libs_softmmu $fdt_libs"
3864 ##########################################
3865 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3867 if test "$opengl" != "no" ; then
3868 opengl_pkgs="epoxy libdrm gbm"
3869 if $pkg_config $opengl_pkgs; then
3870 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3871 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3872 opengl=yes
3873 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3874 gtk_gl="yes"
3876 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3877 else
3878 if test "$opengl" = "yes" ; then
3879 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3881 opengl_cflags=""
3882 opengl_libs=""
3883 opengl=no
3887 if test "$opengl" = "yes"; then
3888 cat > $TMPC << EOF
3889 #include <epoxy/egl.h>
3890 #ifndef EGL_MESA_image_dma_buf_export
3891 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3892 #endif
3893 int main(void) { return 0; }
3895 if compile_prog "" "" ; then
3896 opengl_dmabuf=yes
3900 ##########################################
3901 # libxml2 probe
3902 if test "$libxml2" != "no" ; then
3903 if $pkg_config --exists libxml-2.0; then
3904 libxml2="yes"
3905 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3906 libxml2_libs=$($pkg_config --libs libxml-2.0)
3907 else
3908 if test "$libxml2" = "yes"; then
3909 feature_not_found "libxml2" "Install libxml2 devel"
3911 libxml2="no"
3915 ##########################################
3916 # glusterfs probe
3917 if test "$glusterfs" != "no" ; then
3918 if $pkg_config --atleast-version=3 glusterfs-api; then
3919 glusterfs="yes"
3920 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3921 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3922 if $pkg_config --atleast-version=4 glusterfs-api; then
3923 glusterfs_xlator_opt="yes"
3925 if $pkg_config --atleast-version=5 glusterfs-api; then
3926 glusterfs_discard="yes"
3928 if $pkg_config --atleast-version=6 glusterfs-api; then
3929 glusterfs_fallocate="yes"
3930 glusterfs_zerofill="yes"
3932 else
3933 if test "$glusterfs" = "yes" ; then
3934 feature_not_found "GlusterFS backend support" \
3935 "Install glusterfs-api devel >= 3"
3937 glusterfs="no"
3941 # Check for inotify functions when we are building linux-user
3942 # emulator. This is done because older glibc versions don't
3943 # have syscall stubs for these implemented. In that case we
3944 # don't provide them even if kernel supports them.
3946 inotify=no
3947 cat > $TMPC << EOF
3948 #include <sys/inotify.h>
3951 main(void)
3953 /* try to start inotify */
3954 return inotify_init();
3957 if compile_prog "" "" ; then
3958 inotify=yes
3961 inotify1=no
3962 cat > $TMPC << EOF
3963 #include <sys/inotify.h>
3966 main(void)
3968 /* try to start inotify */
3969 return inotify_init1(0);
3972 if compile_prog "" "" ; then
3973 inotify1=yes
3976 # check if pipe2 is there
3977 pipe2=no
3978 cat > $TMPC << EOF
3979 #include <unistd.h>
3980 #include <fcntl.h>
3982 int main(void)
3984 int pipefd[2];
3985 return pipe2(pipefd, O_CLOEXEC);
3988 if compile_prog "" "" ; then
3989 pipe2=yes
3992 # check if accept4 is there
3993 accept4=no
3994 cat > $TMPC << EOF
3995 #include <sys/socket.h>
3996 #include <stddef.h>
3998 int main(void)
4000 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4001 return 0;
4004 if compile_prog "" "" ; then
4005 accept4=yes
4008 # check if tee/splice is there. vmsplice was added same time.
4009 splice=no
4010 cat > $TMPC << EOF
4011 #include <unistd.h>
4012 #include <fcntl.h>
4013 #include <limits.h>
4015 int main(void)
4017 int len, fd = 0;
4018 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4019 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4020 return 0;
4023 if compile_prog "" "" ; then
4024 splice=yes
4027 ##########################################
4028 # libnuma probe
4030 if test "$numa" != "no" ; then
4031 cat > $TMPC << EOF
4032 #include <numa.h>
4033 int main(void) { return numa_available(); }
4036 if compile_prog "" "-lnuma" ; then
4037 numa=yes
4038 libs_softmmu="-lnuma $libs_softmmu"
4039 else
4040 if test "$numa" = "yes" ; then
4041 feature_not_found "numa" "install numactl devel"
4043 numa=no
4047 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4048 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4049 exit 1
4052 # Even if malloc_trim() is available, these non-libc memory allocators
4053 # do not support it.
4054 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4055 if test "$malloc_trim" = "yes" ; then
4056 echo "Disabling malloc_trim with non-libc memory allocator"
4058 malloc_trim="no"
4061 #######################################
4062 # malloc_trim
4064 if test "$malloc_trim" != "no" ; then
4065 cat > $TMPC << EOF
4066 #include <malloc.h>
4067 int main(void) { malloc_trim(0); return 0; }
4069 if compile_prog "" "" ; then
4070 malloc_trim="yes"
4071 else
4072 malloc_trim="no"
4076 ##########################################
4077 # tcmalloc probe
4079 if test "$tcmalloc" = "yes" ; then
4080 cat > $TMPC << EOF
4081 #include <stdlib.h>
4082 int main(void) { malloc(1); return 0; }
4085 if compile_prog "" "-ltcmalloc" ; then
4086 LIBS="-ltcmalloc $LIBS"
4087 else
4088 feature_not_found "tcmalloc" "install gperftools devel"
4092 ##########################################
4093 # jemalloc probe
4095 if test "$jemalloc" = "yes" ; then
4096 cat > $TMPC << EOF
4097 #include <stdlib.h>
4098 int main(void) { malloc(1); return 0; }
4101 if compile_prog "" "-ljemalloc" ; then
4102 LIBS="-ljemalloc $LIBS"
4103 else
4104 feature_not_found "jemalloc" "install jemalloc devel"
4108 ##########################################
4109 # signalfd probe
4110 signalfd="no"
4111 cat > $TMPC << EOF
4112 #include <unistd.h>
4113 #include <sys/syscall.h>
4114 #include <signal.h>
4115 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4118 if compile_prog "" "" ; then
4119 signalfd=yes
4122 # check if eventfd is supported
4123 eventfd=no
4124 cat > $TMPC << EOF
4125 #include <sys/eventfd.h>
4127 int main(void)
4129 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4132 if compile_prog "" "" ; then
4133 eventfd=yes
4136 # check if memfd is supported
4137 memfd=no
4138 cat > $TMPC << EOF
4139 #include <sys/mman.h>
4141 int main(void)
4143 return memfd_create("foo", MFD_ALLOW_SEALING);
4146 if compile_prog "" "" ; then
4147 memfd=yes
4152 # check for fallocate
4153 fallocate=no
4154 cat > $TMPC << EOF
4155 #include <fcntl.h>
4157 int main(void)
4159 fallocate(0, 0, 0, 0);
4160 return 0;
4163 if compile_prog "" "" ; then
4164 fallocate=yes
4167 # check for fallocate hole punching
4168 fallocate_punch_hole=no
4169 cat > $TMPC << EOF
4170 #include <fcntl.h>
4171 #include <linux/falloc.h>
4173 int main(void)
4175 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4176 return 0;
4179 if compile_prog "" "" ; then
4180 fallocate_punch_hole=yes
4183 # check that fallocate supports range zeroing inside the file
4184 fallocate_zero_range=no
4185 cat > $TMPC << EOF
4186 #include <fcntl.h>
4187 #include <linux/falloc.h>
4189 int main(void)
4191 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4192 return 0;
4195 if compile_prog "" "" ; then
4196 fallocate_zero_range=yes
4199 # check for posix_fallocate
4200 posix_fallocate=no
4201 cat > $TMPC << EOF
4202 #include <fcntl.h>
4204 int main(void)
4206 posix_fallocate(0, 0, 0);
4207 return 0;
4210 if compile_prog "" "" ; then
4211 posix_fallocate=yes
4214 # check for sync_file_range
4215 sync_file_range=no
4216 cat > $TMPC << EOF
4217 #include <fcntl.h>
4219 int main(void)
4221 sync_file_range(0, 0, 0, 0);
4222 return 0;
4225 if compile_prog "" "" ; then
4226 sync_file_range=yes
4229 # check for linux/fiemap.h and FS_IOC_FIEMAP
4230 fiemap=no
4231 cat > $TMPC << EOF
4232 #include <sys/ioctl.h>
4233 #include <linux/fs.h>
4234 #include <linux/fiemap.h>
4236 int main(void)
4238 ioctl(0, FS_IOC_FIEMAP, 0);
4239 return 0;
4242 if compile_prog "" "" ; then
4243 fiemap=yes
4246 # check for dup3
4247 dup3=no
4248 cat > $TMPC << EOF
4249 #include <unistd.h>
4251 int main(void)
4253 dup3(0, 0, 0);
4254 return 0;
4257 if compile_prog "" "" ; then
4258 dup3=yes
4261 # check for ppoll support
4262 ppoll=no
4263 cat > $TMPC << EOF
4264 #include <poll.h>
4266 int main(void)
4268 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4269 ppoll(&pfd, 1, 0, 0);
4270 return 0;
4273 if compile_prog "" "" ; then
4274 ppoll=yes
4277 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4278 prctl_pr_set_timerslack=no
4279 cat > $TMPC << EOF
4280 #include <sys/prctl.h>
4282 int main(void)
4284 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4285 return 0;
4288 if compile_prog "" "" ; then
4289 prctl_pr_set_timerslack=yes
4292 # check for epoll support
4293 epoll=no
4294 cat > $TMPC << EOF
4295 #include <sys/epoll.h>
4297 int main(void)
4299 epoll_create(0);
4300 return 0;
4303 if compile_prog "" "" ; then
4304 epoll=yes
4307 # epoll_create1 is a later addition
4308 # so we must check separately for its presence
4309 epoll_create1=no
4310 cat > $TMPC << EOF
4311 #include <sys/epoll.h>
4313 int main(void)
4315 /* Note that we use epoll_create1 as a value, not as
4316 * a function being called. This is necessary so that on
4317 * old SPARC glibc versions where the function was present in
4318 * the library but not declared in the header file we will
4319 * fail the configure check. (Otherwise we will get a compiler
4320 * warning but not an error, and will proceed to fail the
4321 * qemu compile where we compile with -Werror.)
4323 return (int)(uintptr_t)&epoll_create1;
4326 if compile_prog "" "" ; then
4327 epoll_create1=yes
4330 # check for sendfile support
4331 sendfile=no
4332 cat > $TMPC << EOF
4333 #include <sys/sendfile.h>
4335 int main(void)
4337 return sendfile(0, 0, 0, 0);
4340 if compile_prog "" "" ; then
4341 sendfile=yes
4344 # check for timerfd support (glibc 2.8 and newer)
4345 timerfd=no
4346 cat > $TMPC << EOF
4347 #include <sys/timerfd.h>
4349 int main(void)
4351 return(timerfd_create(CLOCK_REALTIME, 0));
4354 if compile_prog "" "" ; then
4355 timerfd=yes
4358 # check for setns and unshare support
4359 setns=no
4360 cat > $TMPC << EOF
4361 #include <sched.h>
4363 int main(void)
4365 int ret;
4366 ret = setns(0, 0);
4367 ret = unshare(0);
4368 return ret;
4371 if compile_prog "" "" ; then
4372 setns=yes
4375 # clock_adjtime probe
4376 clock_adjtime=no
4377 cat > $TMPC <<EOF
4378 #include <time.h>
4380 int main(void)
4382 return clock_adjtime(0, 0);
4385 clock_adjtime=no
4386 if compile_prog "" "" ; then
4387 clock_adjtime=yes
4390 # syncfs probe
4391 syncfs=no
4392 cat > $TMPC <<EOF
4393 #include <unistd.h>
4395 int main(void)
4397 return syncfs(0);
4400 syncfs=no
4401 if compile_prog "" "" ; then
4402 syncfs=yes
4405 # Check if tools are available to build documentation.
4406 if test "$docs" != "no" ; then
4407 if has makeinfo && has pod2man; then
4408 docs=yes
4409 else
4410 if test "$docs" = "yes" ; then
4411 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4413 docs=no
4417 if test "$want_tools" = ""; then
4418 if test $(expr "$target_list" : ".*softmmu.*") != 0; then
4419 want_tools=yes
4420 else
4421 want_tools=no
4425 # Search for bswap_32 function
4426 byteswap_h=no
4427 cat > $TMPC << EOF
4428 #include <byteswap.h>
4429 int main(void) { return bswap_32(0); }
4431 if compile_prog "" "" ; then
4432 byteswap_h=yes
4435 # Search for bswap32 function
4436 bswap_h=no
4437 cat > $TMPC << EOF
4438 #include <sys/endian.h>
4439 #include <sys/types.h>
4440 #include <machine/bswap.h>
4441 int main(void) { return bswap32(0); }
4443 if compile_prog "" "" ; then
4444 bswap_h=yes
4447 ##########################################
4448 # Do we have libiscsi >= 1.9.0
4449 if test "$libiscsi" != "no" ; then
4450 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4451 libiscsi="yes"
4452 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4453 libiscsi_libs=$($pkg_config --libs libiscsi)
4454 else
4455 if test "$libiscsi" = "yes" ; then
4456 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4458 libiscsi="no"
4462 ##########################################
4463 # Do we need libm
4464 cat > $TMPC << EOF
4465 #include <math.h>
4466 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4468 if compile_prog "" "" ; then
4470 elif compile_prog "" "-lm" ; then
4471 LIBS="-lm $LIBS"
4472 libs_qga="-lm $libs_qga"
4473 else
4474 error_exit "libm check failed"
4477 ##########################################
4478 # Do we need librt
4479 # uClibc provides 2 versions of clock_gettime(), one with realtime
4480 # support and one without. This means that the clock_gettime() don't
4481 # need -lrt. We still need it for timer_create() so we check for this
4482 # function in addition.
4483 cat > $TMPC <<EOF
4484 #include <signal.h>
4485 #include <time.h>
4486 int main(void) {
4487 timer_create(CLOCK_REALTIME, NULL, NULL);
4488 return clock_gettime(CLOCK_REALTIME, NULL);
4492 if compile_prog "" "" ; then
4494 # we need pthread for static linking. use previous pthread test result
4495 elif compile_prog "" "$pthread_lib -lrt" ; then
4496 LIBS="$LIBS -lrt"
4497 libs_qga="$libs_qga -lrt"
4500 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4501 "$haiku" != "yes" ; then
4502 libs_softmmu="-lutil $libs_softmmu"
4505 ##########################################
4506 # spice probe
4507 if test "$spice" != "no" ; then
4508 cat > $TMPC << EOF
4509 #include <spice.h>
4510 int main(void) { spice_server_new(); return 0; }
4512 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4513 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4514 if $pkg_config --atleast-version=0.12.0 spice-server && \
4515 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4516 compile_prog "$spice_cflags" "$spice_libs" ; then
4517 spice="yes"
4518 libs_softmmu="$libs_softmmu $spice_libs"
4519 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4520 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4521 spice_server_version=$($pkg_config --modversion spice-server)
4522 else
4523 if test "$spice" = "yes" ; then
4524 feature_not_found "spice" \
4525 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4527 spice="no"
4531 # check for smartcard support
4532 if test "$smartcard" != "no"; then
4533 if $pkg_config --atleast-version=2.5.1 libcacard; then
4534 libcacard_cflags=$($pkg_config --cflags libcacard)
4535 libcacard_libs=$($pkg_config --libs libcacard)
4536 smartcard="yes"
4537 else
4538 if test "$smartcard" = "yes"; then
4539 feature_not_found "smartcard" "Install libcacard devel"
4541 smartcard="no"
4545 # check for libusb
4546 if test "$libusb" != "no" ; then
4547 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4548 libusb="yes"
4549 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4550 libusb_libs=$($pkg_config --libs libusb-1.0)
4551 else
4552 if test "$libusb" = "yes"; then
4553 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4555 libusb="no"
4559 # check for usbredirparser for usb network redirection support
4560 if test "$usb_redir" != "no" ; then
4561 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4562 usb_redir="yes"
4563 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4564 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4565 else
4566 if test "$usb_redir" = "yes"; then
4567 feature_not_found "usb-redir" "Install usbredir devel"
4569 usb_redir="no"
4573 ##########################################
4574 # check if we have VSS SDK headers for win
4576 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4577 case "$vss_win32_sdk" in
4578 "") vss_win32_include="-isystem $source_path" ;;
4579 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4580 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4581 vss_win32_include="-isystem $source_path/.sdk/vss"
4582 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4584 *) vss_win32_include="-isystem $vss_win32_sdk"
4585 esac
4586 cat > $TMPC << EOF
4587 #define __MIDL_user_allocate_free_DEFINED__
4588 #include <inc/win2003/vss.h>
4589 int main(void) { return VSS_CTX_BACKUP; }
4591 if compile_prog "$vss_win32_include" "" ; then
4592 guest_agent_with_vss="yes"
4593 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4594 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4595 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4596 else
4597 if test "$vss_win32_sdk" != "" ; then
4598 echo "ERROR: Please download and install Microsoft VSS SDK:"
4599 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4600 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4601 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4602 echo "ERROR: The headers are extracted in the directory \`inc'."
4603 feature_not_found "VSS support"
4605 guest_agent_with_vss="no"
4609 ##########################################
4610 # lookup Windows platform SDK (if not specified)
4611 # The SDK is needed only to build .tlb (type library) file of guest agent
4612 # VSS provider from the source. It is usually unnecessary because the
4613 # pre-compiled .tlb file is included.
4615 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4616 if test -z "$win_sdk"; then
4617 programfiles="$PROGRAMFILES"
4618 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4619 if test -n "$programfiles"; then
4620 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4621 else
4622 feature_not_found "Windows SDK"
4624 elif test "$win_sdk" = "no"; then
4625 win_sdk=""
4629 ##########################################
4630 # check if mingw environment provides a recent ntddscsi.h
4631 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4632 cat > $TMPC << EOF
4633 #include <windows.h>
4634 #include <ntddscsi.h>
4635 int main(void) {
4636 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4637 #error Missing required ioctl definitions
4638 #endif
4639 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4640 return addr.Lun;
4643 if compile_prog "" "" ; then
4644 guest_agent_ntddscsi=yes
4645 libs_qga="-lsetupapi $libs_qga"
4649 ##########################################
4650 # virgl renderer probe
4652 if test "$virglrenderer" != "no" ; then
4653 cat > $TMPC << EOF
4654 #include <virglrenderer.h>
4655 int main(void) { virgl_renderer_poll(); return 0; }
4657 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4658 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4659 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4660 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4661 virglrenderer="yes"
4662 else
4663 if test "$virglrenderer" = "yes" ; then
4664 feature_not_found "virglrenderer"
4666 virglrenderer="no"
4670 ##########################################
4671 # capstone
4673 case "$capstone" in
4674 "" | yes)
4675 if $pkg_config capstone; then
4676 capstone=system
4677 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4678 capstone=git
4679 elif test -e "${source_path}/capstone/Makefile" ; then
4680 capstone=internal
4681 elif test -z "$capstone" ; then
4682 capstone=no
4683 else
4684 feature_not_found "capstone" "Install capstone devel or git submodule"
4688 system)
4689 if ! $pkg_config capstone; then
4690 feature_not_found "capstone" "Install capstone devel"
4693 esac
4695 case "$capstone" in
4696 git | internal)
4697 if test "$capstone" = git; then
4698 git_submodules="${git_submodules} capstone"
4700 mkdir -p capstone
4701 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4702 if test "$mingw32" = "yes"; then
4703 LIBCAPSTONE=capstone.lib
4704 else
4705 LIBCAPSTONE=libcapstone.a
4707 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4710 system)
4711 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4712 LIBS="$($pkg_config --libs capstone) $LIBS"
4718 error_exit "Unknown state for capstone: $capstone"
4720 esac
4722 ##########################################
4723 # check if we have fdatasync
4725 fdatasync=no
4726 cat > $TMPC << EOF
4727 #include <unistd.h>
4728 int main(void) {
4729 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4730 return fdatasync(0);
4731 #else
4732 #error Not supported
4733 #endif
4736 if compile_prog "" "" ; then
4737 fdatasync=yes
4740 ##########################################
4741 # check if we have madvise
4743 madvise=no
4744 cat > $TMPC << EOF
4745 #include <sys/types.h>
4746 #include <sys/mman.h>
4747 #include <stddef.h>
4748 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4750 if compile_prog "" "" ; then
4751 madvise=yes
4754 ##########################################
4755 # check if we have posix_madvise
4757 posix_madvise=no
4758 cat > $TMPC << EOF
4759 #include <sys/mman.h>
4760 #include <stddef.h>
4761 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4763 if compile_prog "" "" ; then
4764 posix_madvise=yes
4767 ##########################################
4768 # check if we have posix_memalign()
4770 posix_memalign=no
4771 cat > $TMPC << EOF
4772 #include <stdlib.h>
4773 int main(void) {
4774 void *p;
4775 return posix_memalign(&p, 8, 8);
4778 if compile_prog "" "" ; then
4779 posix_memalign=yes
4782 ##########################################
4783 # check if we have posix_syslog
4785 posix_syslog=no
4786 cat > $TMPC << EOF
4787 #include <syslog.h>
4788 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4790 if compile_prog "" "" ; then
4791 posix_syslog=yes
4794 ##########################################
4795 # check if we have sem_timedwait
4797 sem_timedwait=no
4798 cat > $TMPC << EOF
4799 #include <semaphore.h>
4800 int main(void) { return sem_timedwait(0, 0); }
4802 if compile_prog "" "" ; then
4803 sem_timedwait=yes
4806 ##########################################
4807 # check if trace backend exists
4809 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4810 if test "$?" -ne 0 ; then
4811 error_exit "invalid trace backends" \
4812 "Please choose supported trace backends."
4815 ##########################################
4816 # For 'ust' backend, test if ust headers are present
4817 if have_backend "ust"; then
4818 cat > $TMPC << EOF
4819 #include <lttng/tracepoint.h>
4820 int main(void) { return 0; }
4822 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4823 if $pkg_config lttng-ust --exists; then
4824 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4825 else
4826 lttng_ust_libs="-llttng-ust -ldl"
4828 if $pkg_config liburcu-bp --exists; then
4829 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4830 else
4831 urcu_bp_libs="-lurcu-bp"
4834 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4835 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4836 else
4837 error_exit "Trace backend 'ust' missing lttng-ust header files"
4841 ##########################################
4842 # For 'dtrace' backend, test if 'dtrace' command is present
4843 if have_backend "dtrace"; then
4844 if ! has 'dtrace' ; then
4845 error_exit "dtrace command is not found in PATH $PATH"
4847 trace_backend_stap="no"
4848 if has 'stap' ; then
4849 trace_backend_stap="yes"
4853 ##########################################
4854 # check and set a backend for coroutine
4856 # We prefer ucontext, but it's not always possible. The fallback
4857 # is sigcontext. On Windows the only valid backend is the Windows
4858 # specific one.
4860 ucontext_works=no
4861 if test "$darwin" != "yes"; then
4862 cat > $TMPC << EOF
4863 #include <ucontext.h>
4864 #ifdef __stub_makecontext
4865 #error Ignoring glibc stub makecontext which will always fail
4866 #endif
4867 int main(void) { makecontext(0, 0, 0); return 0; }
4869 if compile_prog "" "" ; then
4870 ucontext_works=yes
4874 if test "$coroutine" = ""; then
4875 if test "$mingw32" = "yes"; then
4876 coroutine=win32
4877 elif test "$ucontext_works" = "yes"; then
4878 coroutine=ucontext
4879 else
4880 coroutine=sigaltstack
4882 else
4883 case $coroutine in
4884 windows)
4885 if test "$mingw32" != "yes"; then
4886 error_exit "'windows' coroutine backend only valid for Windows"
4888 # Unfortunately the user visible backend name doesn't match the
4889 # coroutine-*.c filename for this case, so we have to adjust it here.
4890 coroutine=win32
4892 ucontext)
4893 if test "$ucontext_works" != "yes"; then
4894 feature_not_found "ucontext"
4897 sigaltstack)
4898 if test "$mingw32" = "yes"; then
4899 error_exit "only the 'windows' coroutine backend is valid for Windows"
4903 error_exit "unknown coroutine backend $coroutine"
4905 esac
4908 if test "$coroutine_pool" = ""; then
4909 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4910 coroutine_pool=no
4911 else
4912 coroutine_pool=yes
4915 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4916 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4919 if test "$debug_stack_usage" = "yes"; then
4920 if test "$coroutine_pool" = "yes"; then
4921 echo "WARN: disabling coroutine pool for stack usage debugging"
4922 coroutine_pool=no
4927 ##########################################
4928 # check if we have open_by_handle_at
4930 open_by_handle_at=no
4931 cat > $TMPC << EOF
4932 #include <fcntl.h>
4933 #if !defined(AT_EMPTY_PATH)
4934 # error missing definition
4935 #else
4936 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4937 #endif
4939 if compile_prog "" "" ; then
4940 open_by_handle_at=yes
4943 ########################################
4944 # check if we have linux/magic.h
4946 linux_magic_h=no
4947 cat > $TMPC << EOF
4948 #include <linux/magic.h>
4949 int main(void) {
4950 return 0;
4953 if compile_prog "" "" ; then
4954 linux_magic_h=yes
4957 ########################################
4958 # check whether we can disable warning option with a pragma (this is needed
4959 # to silence warnings in the headers of some versions of external libraries).
4960 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4961 # only a warning.
4963 # If we can't selectively disable warning in the code, disable -Werror so that
4964 # the build doesn't fail anyway.
4966 pragma_disable_unused_but_set=no
4967 cat > $TMPC << EOF
4968 #pragma GCC diagnostic push
4969 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4970 #pragma GCC diagnostic pop
4972 int main(void) {
4973 return 0;
4976 if compile_prog "-Werror" "" ; then
4977 pragma_diagnostic_available=yes
4980 ########################################
4981 # check if we have valgrind/valgrind.h
4983 valgrind_h=no
4984 cat > $TMPC << EOF
4985 #include <valgrind/valgrind.h>
4986 int main(void) {
4987 return 0;
4990 if compile_prog "" "" ; then
4991 valgrind_h=yes
4994 ########################################
4995 # check if environ is declared
4997 has_environ=no
4998 cat > $TMPC << EOF
4999 #include <unistd.h>
5000 int main(void) {
5001 environ = 0;
5002 return 0;
5005 if compile_prog "" "" ; then
5006 has_environ=yes
5009 ########################################
5010 # check if cpuid.h is usable.
5012 cat > $TMPC << EOF
5013 #include <cpuid.h>
5014 int main(void) {
5015 unsigned a, b, c, d;
5016 int max = __get_cpuid_max(0, 0);
5018 if (max >= 1) {
5019 __cpuid(1, a, b, c, d);
5022 if (max >= 7) {
5023 __cpuid_count(7, 0, a, b, c, d);
5026 return 0;
5029 if compile_prog "" "" ; then
5030 cpuid_h=yes
5033 ##########################################
5034 # avx2 optimization requirement check
5036 # There is no point enabling this if cpuid.h is not usable,
5037 # since we won't be able to select the new routines.
5039 if test $cpuid_h = yes; then
5040 cat > $TMPC << EOF
5041 #pragma GCC push_options
5042 #pragma GCC target("avx2")
5043 #include <cpuid.h>
5044 #include <immintrin.h>
5045 static int bar(void *a) {
5046 __m256i x = *(__m256i *)a;
5047 return _mm256_testz_si256(x, x);
5049 int main(int argc, char *argv[]) { return bar(argv[0]); }
5051 if compile_object "" ; then
5052 avx2_opt="yes"
5056 ########################################
5057 # check if __[u]int128_t is usable.
5059 int128=no
5060 cat > $TMPC << EOF
5061 #if defined(__clang_major__) && defined(__clang_minor__)
5062 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5063 # error __int128_t does not work in CLANG before 3.2
5064 # endif
5065 #endif
5066 __int128_t a;
5067 __uint128_t b;
5068 int main (void) {
5069 a = a + b;
5070 b = a * b;
5071 a = a * a;
5072 return 0;
5075 if compile_prog "" "" ; then
5076 int128=yes
5079 #########################################
5080 # See if 128-bit atomic operations are supported.
5082 atomic128=no
5083 if test "$int128" = "yes"; then
5084 cat > $TMPC << EOF
5085 int main(void)
5087 unsigned __int128 x = 0, y = 0;
5088 y = __atomic_load_16(&x, 0);
5089 __atomic_store_16(&x, y, 0);
5090 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5091 return 0;
5094 if compile_prog "" "" ; then
5095 atomic128=yes
5099 #########################################
5100 # See if 64-bit atomic operations are supported.
5101 # Note that without __atomic builtins, we can only
5102 # assume atomic loads/stores max at pointer size.
5104 cat > $TMPC << EOF
5105 #include <stdint.h>
5106 int main(void)
5108 uint64_t x = 0, y = 0;
5109 #ifdef __ATOMIC_RELAXED
5110 y = __atomic_load_8(&x, 0);
5111 __atomic_store_8(&x, y, 0);
5112 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5113 __atomic_exchange_8(&x, y, 0);
5114 __atomic_fetch_add_8(&x, y, 0);
5115 #else
5116 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5117 __sync_lock_test_and_set(&x, y);
5118 __sync_val_compare_and_swap(&x, y, 0);
5119 __sync_fetch_and_add(&x, y);
5120 #endif
5121 return 0;
5124 if compile_prog "" "" ; then
5125 atomic64=yes
5128 ########################################
5129 # See if 16-byte vector operations are supported.
5130 # Even without a vector unit the compiler may expand these.
5131 # There is a bug in old GCC for PPC that crashes here.
5132 # Unfortunately it's the system compiler for Centos 7.
5134 cat > $TMPC << EOF
5135 typedef unsigned char U1 __attribute__((vector_size(16)));
5136 typedef unsigned short U2 __attribute__((vector_size(16)));
5137 typedef unsigned int U4 __attribute__((vector_size(16)));
5138 typedef unsigned long long U8 __attribute__((vector_size(16)));
5139 typedef signed char S1 __attribute__((vector_size(16)));
5140 typedef signed short S2 __attribute__((vector_size(16)));
5141 typedef signed int S4 __attribute__((vector_size(16)));
5142 typedef signed long long S8 __attribute__((vector_size(16)));
5143 static U1 a1, b1;
5144 static U2 a2, b2;
5145 static U4 a4, b4;
5146 static U8 a8, b8;
5147 static S1 c1;
5148 static S2 c2;
5149 static S4 c4;
5150 static S8 c8;
5151 static int i;
5152 void helper(void *d, void *a, int shift, int i);
5153 void helper(void *d, void *a, int shift, int i)
5155 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5156 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5157 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5158 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5160 int main(void)
5162 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5163 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5164 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5165 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5166 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5167 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5168 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5169 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5170 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5171 return 0;
5175 vector16=no
5176 if compile_prog "" "" ; then
5177 vector16=yes
5180 ########################################
5181 # check if getauxval is available.
5183 getauxval=no
5184 cat > $TMPC << EOF
5185 #include <sys/auxv.h>
5186 int main(void) {
5187 return getauxval(AT_HWCAP) == 0;
5190 if compile_prog "" "" ; then
5191 getauxval=yes
5194 ########################################
5195 # check if ccache is interfering with
5196 # semantic analysis of macros
5198 unset CCACHE_CPP2
5199 ccache_cpp2=no
5200 cat > $TMPC << EOF
5201 static const int Z = 1;
5202 #define fn() ({ Z; })
5203 #define TAUT(X) ((X) == Z)
5204 #define PAREN(X, Y) (X == Y)
5205 #define ID(X) (X)
5206 int main(int argc, char *argv[])
5208 int x = 0, y = 0;
5209 x = ID(x);
5210 x = fn();
5211 fn();
5212 if (PAREN(x, y)) return 0;
5213 if (TAUT(Z)) return 0;
5214 return 0;
5218 if ! compile_object "-Werror"; then
5219 ccache_cpp2=yes
5222 #################################################
5223 # clang does not support glibc + FORTIFY_SOURCE.
5225 if test "$fortify_source" != "no"; then
5226 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5227 fortify_source="no";
5228 elif test -n "$cxx" && has $cxx &&
5229 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5230 fortify_source="no";
5231 else
5232 fortify_source="yes"
5236 ##########################################
5237 # check if struct fsxattr is available via linux/fs.h
5239 have_fsxattr=no
5240 cat > $TMPC << EOF
5241 #include <linux/fs.h>
5242 struct fsxattr foo;
5243 int main(void) {
5244 return 0;
5247 if compile_prog "" "" ; then
5248 have_fsxattr=yes
5251 ##########################################
5252 # check for usable membarrier system call
5253 if test "$membarrier" = "yes"; then
5254 have_membarrier=no
5255 if test "$mingw32" = "yes" ; then
5256 have_membarrier=yes
5257 elif test "$linux" = "yes" ; then
5258 cat > $TMPC << EOF
5259 #include <linux/membarrier.h>
5260 #include <sys/syscall.h>
5261 #include <unistd.h>
5262 #include <stdlib.h>
5263 int main(void) {
5264 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5265 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5266 exit(0);
5269 if compile_prog "" "" ; then
5270 have_membarrier=yes
5273 if test "$have_membarrier" = "no"; then
5274 feature_not_found "membarrier" "membarrier system call not available"
5276 else
5277 # Do not enable it by default even for Mingw32, because it doesn't
5278 # work on Wine.
5279 membarrier=no
5282 ##########################################
5283 # check if rtnetlink.h exists and is useful
5284 have_rtnetlink=no
5285 cat > $TMPC << EOF
5286 #include <linux/rtnetlink.h>
5287 int main(void) {
5288 return IFLA_PROTO_DOWN;
5291 if compile_prog "" "" ; then
5292 have_rtnetlink=yes
5295 ##########################################
5296 # check for usable AF_VSOCK environment
5297 have_af_vsock=no
5298 cat > $TMPC << EOF
5299 #include <errno.h>
5300 #include <sys/types.h>
5301 #include <sys/socket.h>
5302 #if !defined(AF_VSOCK)
5303 # error missing AF_VSOCK flag
5304 #endif
5305 #include <linux/vm_sockets.h>
5306 int main(void) {
5307 int sock, ret;
5308 struct sockaddr_vm svm;
5309 socklen_t len = sizeof(svm);
5310 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5311 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5312 if ((ret == -1) && (errno == ENOTCONN)) {
5313 return 0;
5315 return -1;
5318 if compile_prog "" "" ; then
5319 have_af_vsock=yes
5322 ##########################################
5323 # check for usable AF_ALG environment
5324 hava_afalg=no
5325 cat > $TMPC << EOF
5326 #include <errno.h>
5327 #include <sys/types.h>
5328 #include <sys/socket.h>
5329 #include <linux/if_alg.h>
5330 int main(void) {
5331 int sock;
5332 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5333 return sock;
5336 if compile_prog "" "" ; then
5337 have_afalg=yes
5339 if test "$crypto_afalg" = "yes"
5340 then
5341 if test "$have_afalg" != "yes"
5342 then
5343 error_exit "AF_ALG requested but could not be detected"
5348 #################################################
5349 # Check to see if we have the Hypervisor framework
5350 if [ "$darwin" = "yes" ] ; then
5351 cat > $TMPC << EOF
5352 #include <Hypervisor/hv.h>
5353 int main() { return 0;}
5355 if ! compile_object ""; then
5356 hvf='no'
5357 else
5358 hvf='yes'
5359 LDFLAGS="-framework Hypervisor $LDFLAGS"
5363 #################################################
5364 # Sparc implicitly links with --relax, which is
5365 # incompatible with -r, so --no-relax should be
5366 # given. It does no harm to give it on other
5367 # platforms too.
5369 # Note: the prototype is needed since QEMU_CFLAGS
5370 # contains -Wmissing-prototypes
5371 cat > $TMPC << EOF
5372 extern int foo(void);
5373 int foo(void) { return 0; }
5375 if ! compile_object ""; then
5376 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5378 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5379 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5380 LD_REL_FLAGS=$i
5381 break
5383 done
5384 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5385 feature_not_found "modules" "Cannot find how to build relocatable objects"
5388 ##########################################
5389 # check for sysmacros.h
5391 have_sysmacros=no
5392 cat > $TMPC << EOF
5393 #include <sys/sysmacros.h>
5394 int main(void) {
5395 return makedev(0, 0);
5398 if compile_prog "" "" ; then
5399 have_sysmacros=yes
5402 ##########################################
5403 # Veritas HyperScale block driver VxHS
5404 # Check if libvxhs is installed
5406 if test "$vxhs" != "no" ; then
5407 cat > $TMPC <<EOF
5408 #include <stdint.h>
5409 #include <qnio/qnio_api.h>
5411 void *vxhs_callback;
5413 int main(void) {
5414 iio_init(QNIO_VERSION, vxhs_callback);
5415 return 0;
5418 vxhs_libs="-lvxhs -lssl"
5419 if compile_prog "" "$vxhs_libs" ; then
5420 vxhs=yes
5421 else
5422 if test "$vxhs" = "yes" ; then
5423 feature_not_found "vxhs block device" "Install libvxhs See github"
5425 vxhs=no
5429 ##########################################
5430 # check for _Static_assert()
5432 have_static_assert=no
5433 cat > $TMPC << EOF
5434 _Static_assert(1, "success");
5435 int main(void) {
5436 return 0;
5439 if compile_prog "" "" ; then
5440 have_static_assert=yes
5443 ##########################################
5444 # check for utmpx.h, it is missing e.g. on OpenBSD
5446 have_utmpx=no
5447 cat > $TMPC << EOF
5448 #include <utmpx.h>
5449 struct utmpx user_info;
5450 int main(void) {
5451 return 0;
5454 if compile_prog "" "" ; then
5455 have_utmpx=yes
5458 ##########################################
5459 # checks for sanitizers
5461 have_asan=no
5462 have_ubsan=no
5463 have_asan_iface_h=no
5464 have_asan_iface_fiber=no
5466 if test "$sanitizers" = "yes" ; then
5467 write_c_skeleton
5468 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5469 have_asan=yes
5472 # we could use a simple skeleton for flags checks, but this also
5473 # detect the static linking issue of ubsan, see also:
5474 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5475 cat > $TMPC << EOF
5476 #include <stdlib.h>
5477 int main(void) {
5478 void *tmp = malloc(10);
5479 return *(int *)(tmp + 2);
5482 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5483 have_ubsan=yes
5486 if check_include "sanitizer/asan_interface.h" ; then
5487 have_asan_iface_h=yes
5490 cat > $TMPC << EOF
5491 #include <sanitizer/asan_interface.h>
5492 int main(void) {
5493 __sanitizer_start_switch_fiber(0, 0, 0);
5494 return 0;
5497 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5498 have_asan_iface_fiber=yes
5502 ##########################################
5503 # End of CC checks
5504 # After here, no more $cc or $ld runs
5506 write_c_skeleton
5508 if test "$gcov" = "yes" ; then
5509 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5510 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5511 elif test "$fortify_source" = "yes" ; then
5512 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5513 elif test "$debug" = "no"; then
5514 CFLAGS="-O2 $CFLAGS"
5517 if test "$have_asan" = "yes"; then
5518 CFLAGS="-fsanitize=address $CFLAGS"
5519 if test "$have_asan_iface_h" = "no" ; then
5520 echo "ASAN build enabled, but ASAN header missing." \
5521 "Without code annotation, the report may be inferior."
5522 elif test "$have_asan_iface_fiber" = "no" ; then
5523 echo "ASAN build enabled, but ASAN header is too old." \
5524 "Without code annotation, the report may be inferior."
5527 if test "$have_ubsan" = "yes"; then
5528 CFLAGS="-fsanitize=undefined $CFLAGS"
5531 ##########################################
5532 # Do we have libnfs
5533 if test "$libnfs" != "no" ; then
5534 if $pkg_config --atleast-version=1.9.3 libnfs; then
5535 libnfs="yes"
5536 libnfs_libs=$($pkg_config --libs libnfs)
5537 else
5538 if test "$libnfs" = "yes" ; then
5539 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5541 libnfs="no"
5545 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5546 if test "$werror" = "yes"; then
5547 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5550 if test "$solaris" = "no" ; then
5551 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5552 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5556 # test if pod2man has --utf8 option
5557 if pod2man --help | grep -q utf8; then
5558 POD2MAN="pod2man --utf8"
5559 else
5560 POD2MAN="pod2man"
5563 # Use large addresses, ASLR, no-SEH and DEP if available.
5564 if test "$mingw32" = "yes" ; then
5565 if test "$cpu" = i386; then
5566 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
5568 for flag in --dynamicbase --no-seh --nxcompat; do
5569 if ld_has $flag ; then
5570 LDFLAGS="-Wl,$flag $LDFLAGS"
5572 done
5575 qemu_confdir=$sysconfdir$confsuffix
5576 qemu_moddir=$libdir$confsuffix
5577 qemu_datadir=$datadir$confsuffix
5578 qemu_localedir="$datadir/locale"
5580 # We can only support ivshmem if we have eventfd
5581 if [ "$eventfd" = "yes" ]; then
5582 ivshmem=yes
5585 tools=""
5586 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5587 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5588 tools="qemu-nbd\$(EXESUF) $tools"
5590 if [ "$ivshmem" = "yes" ]; then
5591 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5593 if test "$softmmu" = yes ; then
5594 if test "$linux" = yes; then
5595 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5596 virtfs=yes
5597 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5598 else
5599 if test "$virtfs" = yes; then
5600 error_exit "VirtFS requires libcap devel and libattr devel"
5602 virtfs=no
5604 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5605 mpath=yes
5606 else
5607 if test "$mpath" = yes; then
5608 error_exit "Multipath requires libmpathpersist devel"
5610 mpath=no
5612 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5613 else
5614 if test "$virtfs" = yes; then
5615 error_exit "VirtFS is supported only on Linux"
5617 virtfs=no
5618 if test "$mpath" = yes; then
5619 error_exit "Multipath is supported only on Linux"
5621 mpath=no
5623 if test "$xkbcommon" = "yes"; then
5624 tools="qemu-keymap\$(EXESUF) $tools"
5628 # Probe for guest agent support/options
5630 if [ "$guest_agent" != "no" ]; then
5631 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5632 tools="qemu-ga $tools"
5633 guest_agent=yes
5634 elif [ "$guest_agent" != yes ]; then
5635 guest_agent=no
5636 else
5637 error_exit "Guest agent is not supported on this platform"
5641 # Guest agent Window MSI package
5643 if test "$guest_agent" != yes; then
5644 if test "$guest_agent_msi" = yes; then
5645 error_exit "MSI guest agent package requires guest agent enabled"
5647 guest_agent_msi=no
5648 elif test "$mingw32" != "yes"; then
5649 if test "$guest_agent_msi" = "yes"; then
5650 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5652 guest_agent_msi=no
5653 elif ! has wixl; then
5654 if test "$guest_agent_msi" = "yes"; then
5655 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5657 guest_agent_msi=no
5658 else
5659 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5660 # disabled explicitly
5661 if test "$guest_agent_msi" != "no"; then
5662 guest_agent_msi=yes
5666 if test "$guest_agent_msi" = "yes"; then
5667 if test "$guest_agent_with_vss" = "yes"; then
5668 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5671 if test "$QEMU_GA_MANUFACTURER" = ""; then
5672 QEMU_GA_MANUFACTURER=QEMU
5675 if test "$QEMU_GA_DISTRO" = ""; then
5676 QEMU_GA_DISTRO=Linux
5679 if test "$QEMU_GA_VERSION" = ""; then
5680 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5683 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5685 case "$cpu" in
5686 x86_64)
5687 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5689 i386)
5690 QEMU_GA_MSI_ARCH="-D Arch=32"
5693 error_exit "CPU $cpu not supported for building installation package"
5695 esac
5698 # Mac OS X ships with a broken assembler
5699 roms=
5700 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5701 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5702 "$softmmu" = yes ; then
5703 # Different host OS linkers have different ideas about the name of the ELF
5704 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5705 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5706 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5707 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5708 ld_i386_emulation="$emu"
5709 roms="optionrom"
5710 break
5712 done
5714 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5715 roms="$roms spapr-rtas"
5718 if test "$cpu" = "s390x" ; then
5719 roms="$roms s390-ccw"
5722 # Probe for the need for relocating the user-only binary.
5723 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5724 textseg_addr=
5725 case "$cpu" in
5726 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5727 # ??? Rationale for choosing this address
5728 textseg_addr=0x60000000
5730 mips)
5731 # A 256M aligned address, high in the address space, with enough
5732 # room for the code_gen_buffer above it before the stack.
5733 textseg_addr=0x60000000
5735 esac
5736 if [ -n "$textseg_addr" ]; then
5737 cat > $TMPC <<EOF
5738 int main(void) { return 0; }
5740 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5741 if ! compile_prog "" "$textseg_ldflags"; then
5742 # In case ld does not support -Ttext-segment, edit the default linker
5743 # script via sed to set the .text start addr. This is needed on FreeBSD
5744 # at least.
5745 if ! $ld --verbose >/dev/null 2>&1; then
5746 error_exit \
5747 "We need to link the QEMU user mode binaries at a" \
5748 "specific text address. Unfortunately your linker" \
5749 "doesn't support either the -Ttext-segment option or" \
5750 "printing the default linker script with --verbose." \
5751 "If you don't want the user mode binaries, pass the" \
5752 "--disable-user option to configure."
5755 $ld --verbose | sed \
5756 -e '1,/==================================================/d' \
5757 -e '/==================================================/,$d' \
5758 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5759 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5760 textseg_ldflags="-Wl,-T../config-host.ld"
5765 # Check that the C++ compiler exists and works with the C compiler.
5766 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5767 if has $cxx; then
5768 cat > $TMPC <<EOF
5769 int c_function(void);
5770 int main(void) { return c_function(); }
5773 compile_object
5775 cat > $TMPCXX <<EOF
5776 extern "C" {
5777 int c_function(void);
5779 int c_function(void) { return 42; }
5782 update_cxxflags
5784 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5785 # C++ compiler $cxx works ok with C compiler $cc
5787 else
5788 echo "C++ compiler $cxx does not work with C compiler $cc"
5789 echo "Disabling C++ specific optional code"
5790 cxx=
5792 else
5793 echo "No C++ compiler available; disabling C++ specific optional code"
5794 cxx=
5797 echo_version() {
5798 if test "$1" = "yes" ; then
5799 echo "($2)"
5803 # prepend pixman and ftd flags after all config tests are done
5804 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5805 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5806 libs_softmmu="$pixman_libs $libs_softmmu"
5808 echo "Install prefix $prefix"
5809 echo "BIOS directory $(eval echo $qemu_datadir)"
5810 echo "firmware path $(eval echo $firmwarepath)"
5811 echo "binary directory $(eval echo $bindir)"
5812 echo "library directory $(eval echo $libdir)"
5813 echo "module directory $(eval echo $qemu_moddir)"
5814 echo "libexec directory $(eval echo $libexecdir)"
5815 echo "include directory $(eval echo $includedir)"
5816 echo "config directory $(eval echo $sysconfdir)"
5817 if test "$mingw32" = "no" ; then
5818 echo "local state directory $(eval echo $local_statedir)"
5819 echo "Manual directory $(eval echo $mandir)"
5820 echo "ELF interp prefix $interp_prefix"
5821 else
5822 echo "local state directory queried at runtime"
5823 echo "Windows SDK $win_sdk"
5825 echo "Source path $source_path"
5826 echo "GIT binary $git"
5827 echo "GIT submodules $git_submodules"
5828 echo "C compiler $cc"
5829 echo "Host C compiler $host_cc"
5830 echo "C++ compiler $cxx"
5831 echo "Objective-C compiler $objcc"
5832 echo "ARFLAGS $ARFLAGS"
5833 echo "CFLAGS $CFLAGS"
5834 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5835 echo "LDFLAGS $LDFLAGS"
5836 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
5837 echo "make $make"
5838 echo "install $install"
5839 echo "python $python"
5840 if test "$slirp" = "yes" ; then
5841 echo "smbd $smbd"
5843 echo "module support $modules"
5844 echo "host CPU $cpu"
5845 echo "host big endian $bigendian"
5846 echo "target list $target_list"
5847 echo "gprof enabled $gprof"
5848 echo "sparse enabled $sparse"
5849 echo "strip binaries $strip_opt"
5850 echo "profiler $profiler"
5851 echo "static build $static"
5852 if test "$darwin" = "yes" ; then
5853 echo "Cocoa support $cocoa"
5855 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5856 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5857 echo "GTK GL support $gtk_gl"
5858 echo "VTE support $vte $(echo_version $vte $vteversion)"
5859 echo "TLS priority $tls_priority"
5860 echo "GNUTLS support $gnutls"
5861 echo "GNUTLS rnd $gnutls_rnd"
5862 if test "$gcrypt" = "yes"; then
5863 echo "encryption libgcrypt"
5864 echo "libgcrypt kdf $gcrypt_kdf"
5865 elif test "$nettle" = "yes"; then
5866 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5867 else
5868 echo "encryption none"
5870 echo "nettle kdf $nettle_kdf"
5871 echo "libtasn1 $tasn1"
5872 echo "curses support $curses"
5873 echo "virgl support $virglrenderer"
5874 echo "curl support $curl"
5875 echo "mingw32 support $mingw32"
5876 echo "Audio drivers $audio_drv_list"
5877 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5878 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5879 echo "VirtFS support $virtfs"
5880 echo "Multipath support $mpath"
5881 echo "VNC support $vnc"
5882 if test "$vnc" = "yes" ; then
5883 echo "VNC SASL support $vnc_sasl"
5884 echo "VNC JPEG support $vnc_jpeg"
5885 echo "VNC PNG support $vnc_png"
5887 if test -n "$sparc_cpu"; then
5888 echo "Target Sparc Arch $sparc_cpu"
5890 echo "xen support $xen"
5891 if test "$xen" = "yes" ; then
5892 echo "xen ctrl version $xen_ctrl_version"
5893 echo "pv dom build $xen_pv_domain_build"
5895 echo "brlapi support $brlapi"
5896 echo "bluez support $bluez"
5897 echo "Documentation $docs"
5898 echo "Tools $tools"
5899 echo "PIE $pie"
5900 echo "vde support $vde"
5901 echo "netmap support $netmap"
5902 echo "Linux AIO support $linux_aio"
5903 echo "(X)ATTR support $attr"
5904 echo "Install blobs $blobs"
5905 echo "KVM support $kvm"
5906 echo "HAX support $hax"
5907 echo "HVF support $hvf"
5908 echo "WHPX support $whpx"
5909 echo "TCG support $tcg"
5910 if test "$tcg" = "yes" ; then
5911 echo "TCG debug enabled $debug_tcg"
5912 echo "TCG interpreter $tcg_interpreter"
5914 echo "malloc trim support $malloc_trim"
5915 echo "RDMA support $rdma"
5916 echo "fdt support $fdt"
5917 echo "membarrier $membarrier"
5918 echo "preadv support $preadv"
5919 echo "fdatasync $fdatasync"
5920 echo "madvise $madvise"
5921 echo "posix_madvise $posix_madvise"
5922 echo "posix_memalign $posix_memalign"
5923 echo "libcap-ng support $cap_ng"
5924 echo "vhost-net support $vhost_net"
5925 echo "vhost-crypto support $vhost_crypto"
5926 echo "vhost-scsi support $vhost_scsi"
5927 echo "vhost-vsock support $vhost_vsock"
5928 echo "vhost-user support $vhost_user"
5929 echo "Trace backends $trace_backends"
5930 if have_backend "simple"; then
5931 echo "Trace output file $trace_file-<pid>"
5933 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5934 echo "rbd support $rbd"
5935 echo "xfsctl support $xfs"
5936 echo "smartcard support $smartcard"
5937 echo "libusb $libusb"
5938 echo "usb net redir $usb_redir"
5939 echo "OpenGL support $opengl"
5940 echo "OpenGL dmabufs $opengl_dmabuf"
5941 echo "libiscsi support $libiscsi"
5942 echo "libnfs support $libnfs"
5943 echo "build guest agent $guest_agent"
5944 echo "QGA VSS support $guest_agent_with_vss"
5945 echo "QGA w32 disk info $guest_agent_ntddscsi"
5946 echo "QGA MSI support $guest_agent_msi"
5947 echo "seccomp support $seccomp"
5948 echo "coroutine backend $coroutine"
5949 echo "coroutine pool $coroutine_pool"
5950 echo "debug stack usage $debug_stack_usage"
5951 echo "crypto afalg $crypto_afalg"
5952 echo "GlusterFS support $glusterfs"
5953 echo "gcov $gcov_tool"
5954 echo "gcov enabled $gcov"
5955 echo "TPM support $tpm"
5956 echo "libssh2 support $libssh2"
5957 echo "TPM passthrough $tpm_passthrough"
5958 echo "TPM emulator $tpm_emulator"
5959 echo "QOM debugging $qom_cast_debug"
5960 echo "Live block migration $live_block_migration"
5961 echo "lzo support $lzo"
5962 echo "snappy support $snappy"
5963 echo "bzip2 support $bzip2"
5964 echo "NUMA host support $numa"
5965 echo "libxml2 $libxml2"
5966 echo "tcmalloc support $tcmalloc"
5967 echo "jemalloc support $jemalloc"
5968 echo "avx2 optimization $avx2_opt"
5969 echo "replication support $replication"
5970 echo "VxHS block device $vxhs"
5971 echo "capstone $capstone"
5973 if test "$sdl_too_old" = "yes"; then
5974 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5977 if test "$gtkabi" = "2.0"; then
5978 echo
5979 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5980 echo "WARNING: future releases. Please switch to using GTK 3.0"
5983 if test "$sdlabi" = "1.2"; then
5984 echo
5985 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5986 echo "WARNING: future releases. Please switch to using SDL 2.0"
5989 if test "$supported_cpu" = "no"; then
5990 echo
5991 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5992 echo
5993 echo "CPU host architecture $cpu support is not currently maintained."
5994 echo "The QEMU project intends to remove support for this host CPU in"
5995 echo "a future release if nobody volunteers to maintain it and to"
5996 echo "provide a build host for our continuous integration setup."
5997 echo "configure has succeeded and you can continue to build, but"
5998 echo "if you care about QEMU on this platform you should contact"
5999 echo "us upstream at qemu-devel@nongnu.org."
6002 if test "$supported_os" = "no"; then
6003 echo
6004 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6005 echo
6006 echo "Host OS $targetos support is not currently maintained."
6007 echo "The QEMU project intends to remove support for this host OS in"
6008 echo "a future release if nobody volunteers to maintain it and to"
6009 echo "provide a build host for our continuous integration setup."
6010 echo "configure has succeeded and you can continue to build, but"
6011 echo "if you care about QEMU on this platform you should contact"
6012 echo "us upstream at qemu-devel@nongnu.org."
6015 config_host_mak="config-host.mak"
6017 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6019 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6020 echo >> $config_host_mak
6022 echo all: >> $config_host_mak
6023 echo "prefix=$prefix" >> $config_host_mak
6024 echo "bindir=$bindir" >> $config_host_mak
6025 echo "libdir=$libdir" >> $config_host_mak
6026 echo "libexecdir=$libexecdir" >> $config_host_mak
6027 echo "includedir=$includedir" >> $config_host_mak
6028 echo "mandir=$mandir" >> $config_host_mak
6029 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6030 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6031 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6032 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6033 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6034 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6035 if test "$mingw32" = "no" ; then
6036 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6038 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6039 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6040 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6041 echo "GIT=$git" >> $config_host_mak
6042 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6043 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6045 echo "ARCH=$ARCH" >> $config_host_mak
6047 if test "$debug_tcg" = "yes" ; then
6048 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6050 if test "$strip_opt" = "yes" ; then
6051 echo "STRIP=${strip}" >> $config_host_mak
6053 if test "$bigendian" = "yes" ; then
6054 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6056 if test "$mingw32" = "yes" ; then
6057 echo "CONFIG_WIN32=y" >> $config_host_mak
6058 echo "CONFIG_INSTALLER=y" >> $config_host_mak
6059 rc_version=$(cat $source_path/VERSION)
6060 version_major=${rc_version%%.*}
6061 rc_version=${rc_version#*.}
6062 version_minor=${rc_version%%.*}
6063 rc_version=${rc_version#*.}
6064 version_subminor=${rc_version%%.*}
6065 version_micro=0
6066 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6067 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6068 if test "$guest_agent_with_vss" = "yes" ; then
6069 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6070 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6071 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6073 if test "$guest_agent_ntddscsi" = "yes" ; then
6074 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6076 if test "$guest_agent_msi" = "yes"; then
6077 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6078 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6079 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6080 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6081 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6082 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6083 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6085 else
6086 echo "CONFIG_POSIX=y" >> $config_host_mak
6089 if test "$linux" = "yes" ; then
6090 echo "CONFIG_LINUX=y" >> $config_host_mak
6093 if test "$darwin" = "yes" ; then
6094 echo "CONFIG_DARWIN=y" >> $config_host_mak
6097 if test "$solaris" = "yes" ; then
6098 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6100 if test "$haiku" = "yes" ; then
6101 echo "CONFIG_HAIKU=y" >> $config_host_mak
6103 if test "$static" = "yes" ; then
6104 echo "CONFIG_STATIC=y" >> $config_host_mak
6106 if test "$profiler" = "yes" ; then
6107 echo "CONFIG_PROFILER=y" >> $config_host_mak
6109 if test "$slirp" = "yes" ; then
6110 echo "CONFIG_SLIRP=y" >> $config_host_mak
6111 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6113 if test "$vde" = "yes" ; then
6114 echo "CONFIG_VDE=y" >> $config_host_mak
6115 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6117 if test "$netmap" = "yes" ; then
6118 echo "CONFIG_NETMAP=y" >> $config_host_mak
6120 if test "$l2tpv3" = "yes" ; then
6121 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6123 if test "$cap_ng" = "yes" ; then
6124 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6126 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6127 for drv in $audio_drv_list; do
6128 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6129 case "$drv" in
6130 alsa | oss | pa | sdl)
6131 echo "$def=m" >> $config_host_mak ;;
6133 echo "$def=y" >> $config_host_mak ;;
6134 esac
6135 done
6136 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6137 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6138 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6139 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6140 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6141 if test "$audio_pt_int" = "yes" ; then
6142 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6144 if test "$audio_win_int" = "yes" ; then
6145 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6147 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6148 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6149 if test "$vnc" = "yes" ; then
6150 echo "CONFIG_VNC=y" >> $config_host_mak
6152 if test "$vnc_sasl" = "yes" ; then
6153 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6155 if test "$vnc_jpeg" = "yes" ; then
6156 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6158 if test "$vnc_png" = "yes" ; then
6159 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6161 if test "$xkbcommon" = "yes" ; then
6162 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6163 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6165 if test "$fnmatch" = "yes" ; then
6166 echo "CONFIG_FNMATCH=y" >> $config_host_mak
6168 if test "$xfs" = "yes" ; then
6169 echo "CONFIG_XFS=y" >> $config_host_mak
6171 qemu_version=$(head $source_path/VERSION)
6172 echo "VERSION=$qemu_version" >>$config_host_mak
6173 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6174 echo "SRC_PATH=$source_path" >> $config_host_mak
6175 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6176 if [ "$docs" = "yes" ] ; then
6177 echo "BUILD_DOCS=yes" >> $config_host_mak
6179 if [ "$want_tools" = "yes" ] ; then
6180 echo "BUILD_TOOLS=yes" >> $config_host_mak
6182 if test "$modules" = "yes"; then
6183 # $shacmd can generate a hash started with digit, which the compiler doesn't
6184 # like as an symbol. So prefix it with an underscore
6185 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6186 echo "CONFIG_MODULES=y" >> $config_host_mak
6188 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6189 echo "CONFIG_X11=y" >> $config_host_mak
6190 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6191 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6193 if test "$sdl" = "yes" ; then
6194 echo "CONFIG_SDL=m" >> $config_host_mak
6195 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6196 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6197 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6199 if test "$cocoa" = "yes" ; then
6200 echo "CONFIG_COCOA=y" >> $config_host_mak
6202 if test "$curses" = "yes" ; then
6203 echo "CONFIG_CURSES=m" >> $config_host_mak
6204 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6205 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6207 if test "$pipe2" = "yes" ; then
6208 echo "CONFIG_PIPE2=y" >> $config_host_mak
6210 if test "$accept4" = "yes" ; then
6211 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6213 if test "$splice" = "yes" ; then
6214 echo "CONFIG_SPLICE=y" >> $config_host_mak
6216 if test "$eventfd" = "yes" ; then
6217 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6219 if test "$memfd" = "yes" ; then
6220 echo "CONFIG_MEMFD=y" >> $config_host_mak
6222 if test "$fallocate" = "yes" ; then
6223 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6225 if test "$fallocate_punch_hole" = "yes" ; then
6226 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6228 if test "$fallocate_zero_range" = "yes" ; then
6229 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6231 if test "$posix_fallocate" = "yes" ; then
6232 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6234 if test "$sync_file_range" = "yes" ; then
6235 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6237 if test "$fiemap" = "yes" ; then
6238 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6240 if test "$dup3" = "yes" ; then
6241 echo "CONFIG_DUP3=y" >> $config_host_mak
6243 if test "$ppoll" = "yes" ; then
6244 echo "CONFIG_PPOLL=y" >> $config_host_mak
6246 if test "$prctl_pr_set_timerslack" = "yes" ; then
6247 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6249 if test "$epoll" = "yes" ; then
6250 echo "CONFIG_EPOLL=y" >> $config_host_mak
6252 if test "$epoll_create1" = "yes" ; then
6253 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6255 if test "$sendfile" = "yes" ; then
6256 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6258 if test "$timerfd" = "yes" ; then
6259 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6261 if test "$setns" = "yes" ; then
6262 echo "CONFIG_SETNS=y" >> $config_host_mak
6264 if test "$clock_adjtime" = "yes" ; then
6265 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6267 if test "$syncfs" = "yes" ; then
6268 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6270 if test "$inotify" = "yes" ; then
6271 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6273 if test "$inotify1" = "yes" ; then
6274 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6276 if test "$sem_timedwait" = "yes" ; then
6277 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6279 if test "$byteswap_h" = "yes" ; then
6280 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6282 if test "$bswap_h" = "yes" ; then
6283 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6285 if test "$curl" = "yes" ; then
6286 echo "CONFIG_CURL=m" >> $config_host_mak
6287 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6288 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6290 if test "$brlapi" = "yes" ; then
6291 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6292 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6294 if test "$bluez" = "yes" ; then
6295 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6296 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6298 if test "$glib_subprocess" = "yes" ; then
6299 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6301 if test "$gtk" = "yes" ; then
6302 echo "CONFIG_GTK=m" >> $config_host_mak
6303 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
6304 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6305 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6306 if test "$gtk_gl" = "yes" ; then
6307 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6310 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6311 if test "$gnutls" = "yes" ; then
6312 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6314 if test "$gnutls_rnd" = "yes" ; then
6315 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6317 if test "$gcrypt" = "yes" ; then
6318 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6319 if test "$gcrypt_hmac" = "yes" ; then
6320 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6322 if test "$gcrypt_kdf" = "yes" ; then
6323 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6326 if test "$nettle" = "yes" ; then
6327 echo "CONFIG_NETTLE=y" >> $config_host_mak
6328 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6329 if test "$nettle_kdf" = "yes" ; then
6330 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6333 if test "$tasn1" = "yes" ; then
6334 echo "CONFIG_TASN1=y" >> $config_host_mak
6336 if test "$have_ifaddrs_h" = "yes" ; then
6337 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6339 if test "$have_broken_size_max" = "yes" ; then
6340 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6343 # Work around a system header bug with some kernel/XFS header
6344 # versions where they both try to define 'struct fsxattr':
6345 # xfs headers will not try to redefine structs from linux headers
6346 # if this macro is set.
6347 if test "$have_fsxattr" = "yes" ; then
6348 echo "HAVE_FSXATTR=y" >> $config_host_mak
6350 if test "$vte" = "yes" ; then
6351 echo "CONFIG_VTE=y" >> $config_host_mak
6352 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6353 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6355 if test "$virglrenderer" = "yes" ; then
6356 echo "CONFIG_VIRGL=y" >> $config_host_mak
6357 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6358 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6360 if test "$xen" = "yes" ; then
6361 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6362 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6363 if test "$xen_pv_domain_build" = "yes" ; then
6364 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6367 if test "$linux_aio" = "yes" ; then
6368 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6370 if test "$attr" = "yes" ; then
6371 echo "CONFIG_ATTR=y" >> $config_host_mak
6373 if test "$libattr" = "yes" ; then
6374 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6376 if test "$virtfs" = "yes" ; then
6377 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6379 if test "$mpath" = "yes" ; then
6380 echo "CONFIG_MPATH=y" >> $config_host_mak
6382 if test "$vhost_scsi" = "yes" ; then
6383 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6385 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6386 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6388 if test "$vhost_crypto" = "yes" ; then
6389 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6391 if test "$vhost_vsock" = "yes" ; then
6392 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6394 if test "$vhost_user" = "yes" ; then
6395 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6397 if test "$blobs" = "yes" ; then
6398 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6400 if test "$iovec" = "yes" ; then
6401 echo "CONFIG_IOVEC=y" >> $config_host_mak
6403 if test "$preadv" = "yes" ; then
6404 echo "CONFIG_PREADV=y" >> $config_host_mak
6406 if test "$fdt" != "no" ; then
6407 echo "CONFIG_FDT=y" >> $config_host_mak
6409 if test "$membarrier" = "yes" ; then
6410 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6412 if test "$signalfd" = "yes" ; then
6413 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6415 if test "$tcg" = "yes"; then
6416 echo "CONFIG_TCG=y" >> $config_host_mak
6417 if test "$tcg_interpreter" = "yes" ; then
6418 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6421 if test "$fdatasync" = "yes" ; then
6422 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6424 if test "$madvise" = "yes" ; then
6425 echo "CONFIG_MADVISE=y" >> $config_host_mak
6427 if test "$posix_madvise" = "yes" ; then
6428 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6430 if test "$posix_memalign" = "yes" ; then
6431 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6434 if test "$spice" = "yes" ; then
6435 echo "CONFIG_SPICE=y" >> $config_host_mak
6438 if test "$smartcard" = "yes" ; then
6439 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6440 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6441 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6444 if test "$libusb" = "yes" ; then
6445 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6446 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6447 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6450 if test "$usb_redir" = "yes" ; then
6451 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6452 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6453 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6456 if test "$opengl" = "yes" ; then
6457 echo "CONFIG_OPENGL=y" >> $config_host_mak
6458 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6459 if test "$opengl_dmabuf" = "yes" ; then
6460 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6464 if test "$malloc_trim" = "yes" ; then
6465 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6468 if test "$avx2_opt" = "yes" ; then
6469 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6472 if test "$lzo" = "yes" ; then
6473 echo "CONFIG_LZO=y" >> $config_host_mak
6476 if test "$snappy" = "yes" ; then
6477 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6480 if test "$bzip2" = "yes" ; then
6481 echo "CONFIG_BZIP2=y" >> $config_host_mak
6482 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6485 if test "$libiscsi" = "yes" ; then
6486 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6487 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6488 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6491 if test "$libnfs" = "yes" ; then
6492 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6493 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6496 if test "$seccomp" = "yes"; then
6497 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6498 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6499 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6502 # XXX: suppress that
6503 if [ "$bsd" = "yes" ] ; then
6504 echo "CONFIG_BSD=y" >> $config_host_mak
6507 if test "$localtime_r" = "yes" ; then
6508 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6510 if test "$qom_cast_debug" = "yes" ; then
6511 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6513 if test "$rbd" = "yes" ; then
6514 echo "CONFIG_RBD=m" >> $config_host_mak
6515 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6516 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6519 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6520 if test "$coroutine_pool" = "yes" ; then
6521 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6522 else
6523 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6526 if test "$debug_stack_usage" = "yes" ; then
6527 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6530 if test "$crypto_afalg" = "yes" ; then
6531 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6534 if test "$open_by_handle_at" = "yes" ; then
6535 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6538 if test "$linux_magic_h" = "yes" ; then
6539 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6542 if test "$pragma_diagnostic_available" = "yes" ; then
6543 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6546 if test "$valgrind_h" = "yes" ; then
6547 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6550 if test "$have_asan_iface_fiber" = "yes" ; then
6551 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6554 if test "$has_environ" = "yes" ; then
6555 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6558 if test "$cpuid_h" = "yes" ; then
6559 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6562 if test "$int128" = "yes" ; then
6563 echo "CONFIG_INT128=y" >> $config_host_mak
6566 if test "$atomic128" = "yes" ; then
6567 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6570 if test "$atomic64" = "yes" ; then
6571 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6574 if test "$vector16" = "yes" ; then
6575 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6578 if test "$getauxval" = "yes" ; then
6579 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6582 if test "$glusterfs" = "yes" ; then
6583 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6584 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6585 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6588 if test "$glusterfs_xlator_opt" = "yes" ; then
6589 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6592 if test "$glusterfs_discard" = "yes" ; then
6593 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6596 if test "$glusterfs_fallocate" = "yes" ; then
6597 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6600 if test "$glusterfs_zerofill" = "yes" ; then
6601 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6604 if test "$libssh2" = "yes" ; then
6605 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6606 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6607 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6610 if test "$live_block_migration" = "yes" ; then
6611 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6614 if test "$tpm" = "yes"; then
6615 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6616 # TPM passthrough support?
6617 if test "$tpm_passthrough" = "yes"; then
6618 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6620 # TPM emulator support?
6621 if test "$tpm_emulator" = "yes"; then
6622 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6626 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6627 if have_backend "nop"; then
6628 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6630 if have_backend "simple"; then
6631 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6632 # Set the appropriate trace file.
6633 trace_file="\"$trace_file-\" FMT_pid"
6635 if have_backend "log"; then
6636 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6638 if have_backend "ust"; then
6639 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6641 if have_backend "dtrace"; then
6642 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6643 if test "$trace_backend_stap" = "yes" ; then
6644 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6647 if have_backend "ftrace"; then
6648 if test "$linux" = "yes" ; then
6649 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6650 else
6651 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6654 if have_backend "syslog"; then
6655 if test "$posix_syslog" = "yes" ; then
6656 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6657 else
6658 feature_not_found "syslog(trace backend)" "syslog not available"
6661 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6663 if test "$rdma" = "yes" ; then
6664 echo "CONFIG_RDMA=y" >> $config_host_mak
6665 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6668 if test "$have_rtnetlink" = "yes" ; then
6669 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6672 if test "$libxml2" = "yes" ; then
6673 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6674 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6675 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6678 if test "$replication" = "yes" ; then
6679 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6682 if test "$have_af_vsock" = "yes" ; then
6683 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6686 if test "$have_sysmacros" = "yes" ; then
6687 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6690 if test "$have_static_assert" = "yes" ; then
6691 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6694 if test "$have_utmpx" = "yes" ; then
6695 echo "HAVE_UTMPX=y" >> $config_host_mak
6698 if test "$ivshmem" = "yes" ; then
6699 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6701 if test "$capstone" != "no" ; then
6702 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6705 # Hold two types of flag:
6706 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6707 # a thread we have a handle to
6708 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6709 # platform
6710 if test "$pthread_setname_np" = "yes" ; then
6711 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6712 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6715 if test "$vxhs" = "yes" ; then
6716 echo "CONFIG_VXHS=y" >> $config_host_mak
6717 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6720 if test "$tcg_interpreter" = "yes"; then
6721 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6722 elif test "$ARCH" = "sparc64" ; then
6723 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6724 elif test "$ARCH" = "s390x" ; then
6725 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6726 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6727 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6728 elif test "$ARCH" = "ppc64" ; then
6729 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6730 else
6731 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6733 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6735 echo "TOOLS=$tools" >> $config_host_mak
6736 echo "ROMS=$roms" >> $config_host_mak
6737 echo "MAKE=$make" >> $config_host_mak
6738 echo "INSTALL=$install" >> $config_host_mak
6739 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6740 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6741 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6742 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6743 echo "PYTHON=$python" >> $config_host_mak
6744 echo "CC=$cc" >> $config_host_mak
6745 if $iasl -h > /dev/null 2>&1; then
6746 echo "IASL=$iasl" >> $config_host_mak
6748 echo "CC_I386=$cc_i386" >> $config_host_mak
6749 echo "HOST_CC=$host_cc" >> $config_host_mak
6750 echo "CXX=$cxx" >> $config_host_mak
6751 echo "OBJCC=$objcc" >> $config_host_mak
6752 echo "AR=$ar" >> $config_host_mak
6753 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6754 echo "AS=$as" >> $config_host_mak
6755 echo "CCAS=$ccas" >> $config_host_mak
6756 echo "CPP=$cpp" >> $config_host_mak
6757 echo "OBJCOPY=$objcopy" >> $config_host_mak
6758 echo "LD=$ld" >> $config_host_mak
6759 echo "RANLIB=$ranlib" >> $config_host_mak
6760 echo "NM=$nm" >> $config_host_mak
6761 echo "WINDRES=$windres" >> $config_host_mak
6762 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6763 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6764 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6765 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6766 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6767 if test "$sparse" = "yes" ; then
6768 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6769 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6770 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6771 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6772 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6774 if test "$cross_prefix" != ""; then
6775 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6776 else
6777 echo "AUTOCONF_HOST := " >> $config_host_mak
6779 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6780 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6781 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6782 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6783 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6784 echo "LIBS+=$LIBS" >> $config_host_mak
6785 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6786 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6787 echo "EXESUF=$EXESUF" >> $config_host_mak
6788 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6789 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6790 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6791 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6792 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6793 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6794 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6795 if test "$gcov" = "yes" ; then
6796 echo "CONFIG_GCOV=y" >> $config_host_mak
6797 echo "GCOV=$gcov_tool" >> $config_host_mak
6800 # use included Linux headers
6801 if test "$linux" = "yes" ; then
6802 mkdir -p linux-headers
6803 case "$cpu" in
6804 i386|x86_64|x32)
6805 linux_arch=x86
6807 ppcemb|ppc|ppc64)
6808 linux_arch=powerpc
6810 s390x)
6811 linux_arch=s390
6813 aarch64)
6814 linux_arch=arm64
6816 mips64)
6817 linux_arch=mips
6820 # For most CPUs the kernel architecture name and QEMU CPU name match.
6821 linux_arch="$cpu"
6823 esac
6824 # For non-KVM architectures we will not have asm headers
6825 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6826 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6830 for target in $target_list; do
6831 target_dir="$target"
6832 config_target_mak=$target_dir/config-target.mak
6833 target_name=$(echo $target | cut -d '-' -f 1)
6834 target_bigendian="no"
6836 case "$target_name" in
6837 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6838 target_bigendian=yes
6840 esac
6841 target_softmmu="no"
6842 target_user_only="no"
6843 target_linux_user="no"
6844 target_bsd_user="no"
6845 case "$target" in
6846 ${target_name}-softmmu)
6847 target_softmmu="yes"
6849 ${target_name}-linux-user)
6850 target_user_only="yes"
6851 target_linux_user="yes"
6853 ${target_name}-bsd-user)
6854 target_user_only="yes"
6855 target_bsd_user="yes"
6858 error_exit "Target '$target' not recognised"
6859 exit 1
6861 esac
6863 mkdir -p $target_dir
6864 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6866 bflt="no"
6867 mttcg="no"
6868 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6869 gdb_xml_files=""
6871 TARGET_ARCH="$target_name"
6872 TARGET_BASE_ARCH=""
6873 TARGET_ABI_DIR=""
6875 case "$target_name" in
6876 i386)
6877 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6879 x86_64)
6880 TARGET_BASE_ARCH=i386
6881 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6883 alpha)
6884 mttcg="yes"
6886 arm|armeb)
6887 TARGET_ARCH=arm
6888 bflt="yes"
6889 mttcg="yes"
6890 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6892 aarch64|aarch64_be)
6893 TARGET_ARCH=aarch64
6894 TARGET_BASE_ARCH=arm
6895 bflt="yes"
6896 mttcg="yes"
6897 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6899 cris)
6901 hppa)
6902 mttcg="yes"
6904 lm32)
6906 m68k)
6907 bflt="yes"
6908 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6910 microblaze|microblazeel)
6911 TARGET_ARCH=microblaze
6912 bflt="yes"
6914 mips|mipsel)
6915 TARGET_ARCH=mips
6916 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6918 mipsn32|mipsn32el)
6919 TARGET_ARCH=mips64
6920 TARGET_BASE_ARCH=mips
6921 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6922 echo "TARGET_ABI32=y" >> $config_target_mak
6924 mips64|mips64el)
6925 TARGET_ARCH=mips64
6926 TARGET_BASE_ARCH=mips
6927 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6929 moxie)
6931 nios2)
6933 or1k)
6934 TARGET_ARCH=openrisc
6935 TARGET_BASE_ARCH=openrisc
6937 ppc)
6938 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6940 ppcemb)
6941 TARGET_BASE_ARCH=ppc
6942 TARGET_ABI_DIR=ppc
6943 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6945 ppc64)
6946 TARGET_BASE_ARCH=ppc
6947 TARGET_ABI_DIR=ppc
6948 mttcg=yes
6949 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6951 ppc64le)
6952 TARGET_ARCH=ppc64
6953 TARGET_BASE_ARCH=ppc
6954 TARGET_ABI_DIR=ppc
6955 mttcg=yes
6956 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6958 ppc64abi32)
6959 TARGET_ARCH=ppc64
6960 TARGET_BASE_ARCH=ppc
6961 TARGET_ABI_DIR=ppc
6962 echo "TARGET_ABI32=y" >> $config_target_mak
6963 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6965 riscv32)
6966 TARGET_BASE_ARCH=riscv
6967 TARGET_ABI_DIR=riscv
6968 mttcg=yes
6970 riscv64)
6971 TARGET_BASE_ARCH=riscv
6972 TARGET_ABI_DIR=riscv
6973 mttcg=yes
6975 sh4|sh4eb)
6976 TARGET_ARCH=sh4
6977 bflt="yes"
6979 sparc)
6981 sparc64)
6982 TARGET_BASE_ARCH=sparc
6984 sparc32plus)
6985 TARGET_ARCH=sparc64
6986 TARGET_BASE_ARCH=sparc
6987 TARGET_ABI_DIR=sparc
6988 echo "TARGET_ABI32=y" >> $config_target_mak
6990 s390x)
6991 mttcg=yes
6992 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6994 tilegx)
6996 tricore)
6998 unicore32)
7000 xtensa|xtensaeb)
7001 TARGET_ARCH=xtensa
7002 mttcg="yes"
7005 error_exit "Unsupported target CPU"
7007 esac
7008 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7009 if [ "$TARGET_BASE_ARCH" = "" ]; then
7010 TARGET_BASE_ARCH=$TARGET_ARCH
7013 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7015 upper() {
7016 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7019 target_arch_name="$(upper $TARGET_ARCH)"
7020 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7021 echo "TARGET_NAME=$target_name" >> $config_target_mak
7022 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7023 if [ "$TARGET_ABI_DIR" = "" ]; then
7024 TARGET_ABI_DIR=$TARGET_ARCH
7026 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7027 if [ "$HOST_VARIANT_DIR" != "" ]; then
7028 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7031 if supported_xen_target $target; then
7032 echo "CONFIG_XEN=y" >> $config_target_mak
7033 if test "$xen_pci_passthrough" = yes; then
7034 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7037 if supported_kvm_target $target; then
7038 echo "CONFIG_KVM=y" >> $config_target_mak
7039 if test "$vhost_net" = "yes" ; then
7040 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7041 if test "$vhost_user" = "yes" ; then
7042 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7046 if supported_hax_target $target; then
7047 echo "CONFIG_HAX=y" >> $config_target_mak
7049 if supported_hvf_target $target; then
7050 echo "CONFIG_HVF=y" >> $config_target_mak
7052 if supported_whpx_target $target; then
7053 echo "CONFIG_WHPX=y" >> $config_target_mak
7055 if test "$target_bigendian" = "yes" ; then
7056 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7058 if test "$target_softmmu" = "yes" ; then
7059 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7060 if test "$mttcg" = "yes" ; then
7061 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7064 if test "$target_user_only" = "yes" ; then
7065 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7066 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7068 if test "$target_linux_user" = "yes" ; then
7069 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7071 list=""
7072 if test ! -z "$gdb_xml_files" ; then
7073 for x in $gdb_xml_files; do
7074 list="$list $source_path/gdb-xml/$x"
7075 done
7076 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7079 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7080 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7082 if test "$target_bsd_user" = "yes" ; then
7083 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7086 # generate QEMU_CFLAGS/LDFLAGS for targets
7088 cflags=""
7089 ldflags=""
7091 disas_config() {
7092 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7093 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7096 for i in $ARCH $TARGET_BASE_ARCH ; do
7097 case "$i" in
7098 alpha)
7099 disas_config "ALPHA"
7101 aarch64)
7102 if test -n "${cxx}"; then
7103 disas_config "ARM_A64"
7106 arm)
7107 disas_config "ARM"
7108 if test -n "${cxx}"; then
7109 disas_config "ARM_A64"
7112 cris)
7113 disas_config "CRIS"
7115 hppa)
7116 disas_config "HPPA"
7118 i386|x86_64|x32)
7119 disas_config "I386"
7121 lm32)
7122 disas_config "LM32"
7124 m68k)
7125 disas_config "M68K"
7127 microblaze*)
7128 disas_config "MICROBLAZE"
7130 mips*)
7131 disas_config "MIPS"
7133 moxie*)
7134 disas_config "MOXIE"
7136 nios2)
7137 disas_config "NIOS2"
7139 or1k)
7140 disas_config "OPENRISC"
7142 ppc*)
7143 disas_config "PPC"
7145 riscv)
7146 disas_config "RISCV"
7148 s390*)
7149 disas_config "S390"
7151 sh4)
7152 disas_config "SH4"
7154 sparc*)
7155 disas_config "SPARC"
7157 xtensa*)
7158 disas_config "XTENSA"
7160 esac
7161 done
7162 if test "$tcg_interpreter" = "yes" ; then
7163 disas_config "TCI"
7166 case "$ARCH" in
7167 alpha)
7168 # Ensure there's only a single GP
7169 cflags="-msmall-data $cflags"
7171 esac
7173 if test "$gprof" = "yes" ; then
7174 echo "TARGET_GPROF=yes" >> $config_target_mak
7175 if test "$target_linux_user" = "yes" ; then
7176 cflags="-p $cflags"
7177 ldflags="-p $ldflags"
7179 if test "$target_softmmu" = "yes" ; then
7180 ldflags="-p $ldflags"
7181 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7185 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7186 ldflags="$ldflags $textseg_ldflags"
7189 # Newer kernels on s390 check for an S390_PGSTE program header and
7190 # enable the pgste page table extensions in that case. This makes
7191 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7192 # header if
7193 # - we build on s390x
7194 # - we build the system emulation for s390x (qemu-system-s390x)
7195 # - KVM is enabled
7196 # - the linker supports --s390-pgste
7197 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7198 if ld_has --s390-pgste ; then
7199 ldflags="-Wl,--s390-pgste $ldflags"
7203 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7204 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7206 done # for target in $targets
7208 if [ "$fdt" = "git" ]; then
7209 echo "config-host.h: subdir-dtc" >> $config_host_mak
7211 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7212 echo "config-host.h: subdir-capstone" >> $config_host_mak
7214 if test -n "$LIBCAPSTONE"; then
7215 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7218 if test "$numa" = "yes"; then
7219 echo "CONFIG_NUMA=y" >> $config_host_mak
7222 if test "$ccache_cpp2" = "yes"; then
7223 echo "export CCACHE_CPP2=y" >> $config_host_mak
7226 # build tree in object directory in case the source is not in the current directory
7227 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7228 DIRS="$DIRS docs docs/interop fsdev scsi"
7229 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7230 DIRS="$DIRS roms/seabios roms/vgabios"
7231 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7232 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7233 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7234 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7235 FILES="$FILES pc-bios/spapr-rtas/Makefile"
7236 FILES="$FILES pc-bios/s390-ccw/Makefile"
7237 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7238 FILES="$FILES pc-bios/qemu-icon.bmp"
7239 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7240 for bios_file in \
7241 $source_path/pc-bios/*.bin \
7242 $source_path/pc-bios/*.lid \
7243 $source_path/pc-bios/*.rom \
7244 $source_path/pc-bios/*.dtb \
7245 $source_path/pc-bios/*.img \
7246 $source_path/pc-bios/openbios-* \
7247 $source_path/pc-bios/u-boot.* \
7248 $source_path/pc-bios/palcode-*
7250 FILES="$FILES pc-bios/$(basename $bios_file)"
7251 done
7252 for test_file in $(find $source_path/tests/acpi-test-data -type f)
7254 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7255 done
7256 mkdir -p $DIRS
7257 for f in $FILES ; do
7258 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7259 symlink "$source_path/$f" "$f"
7261 done
7263 # temporary config to build submodules
7264 for rom in seabios vgabios ; do
7265 config_mak=roms/$rom/config.mak
7266 echo "# Automatically generated by configure - do not modify" > $config_mak
7267 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7268 echo "AS=$as" >> $config_mak
7269 echo "CCAS=$ccas" >> $config_mak
7270 echo "CC=$cc" >> $config_mak
7271 echo "BCC=bcc" >> $config_mak
7272 echo "CPP=$cpp" >> $config_mak
7273 echo "OBJCOPY=objcopy" >> $config_mak
7274 echo "IASL=$iasl" >> $config_mak
7275 echo "LD=$ld" >> $config_mak
7276 echo "RANLIB=$ranlib" >> $config_mak
7277 done
7279 # set up tests data directory
7280 if [ ! -e tests/data ]; then
7281 symlink "$source_path/tests/data" tests/data
7284 # set up qemu-iotests in this build directory
7285 iotests_common_env="tests/qemu-iotests/common.env"
7286 iotests_check="tests/qemu-iotests/check"
7288 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7289 echo >> "$iotests_common_env"
7290 echo "export PYTHON='$python'" >> "$iotests_common_env"
7292 if [ ! -e "$iotests_check" ]; then
7293 symlink "$source_path/$iotests_check" "$iotests_check"
7296 # Save the configure command line for later reuse.
7297 cat <<EOD >config.status
7298 #!/bin/sh
7299 # Generated by configure.
7300 # Run this file to recreate the current configuration.
7301 # Compiler output produced by configure, useful for debugging
7302 # configure, is in config.log if it exists.
7304 printf "exec" >>config.status
7305 printf " '%s'" "$0" "$@" >>config.status
7306 echo ' "$@"' >>config.status
7307 chmod +x config.status
7309 rm -r "$TMPDIR1"