Merge tag 'v3.1.0-rc4'
[qemu/ar7.git] / configure
blob0242df9467ce2c1d5e4c9d09a10624ba09d0d15f
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 | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
200 s390x:s390x)
201 return 0
203 esac
204 return 1
207 supported_xen_target() {
208 test "$xen" = "yes" || return 1
209 glob "$1" "*-softmmu" || return 1
210 # Only i386 and x86_64 provide the xenpv machine.
211 case "${1%-softmmu}" in
212 i386|x86_64)
213 return 0
215 esac
216 return 1
219 supported_hvf_target() {
220 test "$hvf" = "yes" || return 1
221 glob "$1" "*-softmmu" || return 1
222 case "${1%-softmmu}" in
223 x86_64)
224 return 0
226 esac
227 return 1
230 supported_whpx_target() {
231 test "$whpx" = "yes" || return 1
232 glob "$1" "*-softmmu" || return 1
233 case "${1%-softmmu}" in
234 i386|x86_64)
235 return 0
237 esac
238 return 1
241 supported_target() {
242 case "$1" in
243 *-softmmu)
245 *-linux-user)
246 if test "$linux" != "yes"; then
247 print_error "Target '$target' is only available on a Linux host"
248 return 1
251 *-bsd-user)
252 if test "$bsd" != "yes"; then
253 print_error "Target '$target' is only available on a BSD host"
254 return 1
258 print_error "Invalid target name '$target'"
259 return 1
261 esac
262 test "$tcg" = "yes" && return 0
263 supported_kvm_target "$1" && return 0
264 supported_xen_target "$1" && return 0
265 supported_hax_target "$1" && return 0
266 supported_hvf_target "$1" && return 0
267 supported_whpx_target "$1" && return 0
268 print_error "TCG disabled, but hardware accelerator not available for '$target'"
269 return 1
273 ld_has() {
274 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
277 # default parameters
278 source_path=$(dirname "$0")
279 cpu=""
280 iasl="iasl"
281 interp_prefix="/usr/gnemul/qemu-%M"
282 static="no"
283 cross_prefix=""
284 audio_drv_list=""
285 block_drv_rw_whitelist=""
286 block_drv_ro_whitelist=""
287 host_cc="cc"
288 libs_softmmu=""
289 libs_tools=""
290 audio_pt_int=""
291 audio_win_int=""
292 libs_qga=""
293 debug_info="yes"
294 stack_protector=""
296 if test -e "$source_path/.git"
297 then
298 git_update=yes
299 git_submodules="ui/keycodemapdb"
300 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
301 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
302 else
303 git_update=no
304 git_submodules=""
306 if ! test -f "$source_path/ui/keycodemapdb/README"
307 then
308 echo
309 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
310 echo
311 echo "This is not a GIT checkout but module content appears to"
312 echo "be missing. Do not use 'git archive' or GitHub download links"
313 echo "to acquire QEMU source archives. Non-GIT builds are only"
314 echo "supported with source archives linked from:"
315 echo
316 echo " https://www.qemu.org/download/"
317 echo
318 echo "Developers working with GIT can use scripts/archive-source.sh"
319 echo "if they need to create valid source archives."
320 echo
321 exit 1
324 git="git"
326 # Don't accept a target_list environment variable.
327 unset target_list
329 # Default value for a variable defining feature "foo".
330 # * foo="no" feature will only be used if --enable-foo arg is given
331 # * foo="" feature will be searched for, and if found, will be used
332 # unless --disable-foo is given
333 # * foo="yes" this value will only be set by --enable-foo flag.
334 # feature will searched for,
335 # if not found, configure exits with error
337 # Always add --enable-foo and --disable-foo command line args.
338 # Distributions want to ensure that several features are compiled in, and it
339 # is impossible without a --enable-foo that exits if a feature is not found.
341 bluez=""
342 brlapi=""
343 curl=""
344 curses=""
345 docs=""
346 fdt=""
347 netmap="no"
348 sdl=""
349 sdlabi=""
350 virtfs=""
351 mpath=""
352 vnc="yes"
353 sparse="no"
354 vde=""
355 vnc_sasl=""
356 vnc_jpeg=""
357 vnc_png=""
358 xkbcommon=""
359 xen=""
360 xen_ctrl_version=""
361 xen_pv_domain_build="no"
362 xen_pci_passthrough=""
363 linux_aio=""
364 cap_ng=""
365 attr=""
366 libattr=""
367 xfs=""
368 tcg="yes"
369 membarrier=""
370 vhost_net="no"
371 vhost_crypto="no"
372 vhost_scsi="no"
373 vhost_vsock="no"
374 vhost_user=""
375 kvm="no"
376 hax="no"
377 hvf="no"
378 whpx="no"
379 rdma=""
380 pvrdma=""
381 gprof="no"
382 debug_tcg="no"
383 debug="no"
384 sanitizers="no"
385 fortify_source=""
386 strip_opt="yes"
387 tcg_interpreter="no"
388 bigendian="no"
389 mingw32="no"
390 gcov="no"
391 gcov_tool="gcov"
392 EXESUF=""
393 DSOSUF=".so"
394 LDFLAGS_SHARED="-shared"
395 modules="no"
396 prefix="/usr/local"
397 mandir="\${prefix}/share/man"
398 datadir="\${prefix}/share"
399 firmwarepath="\${prefix}/share/qemu-firmware"
400 qemu_docdir="\${prefix}/share/doc/qemu"
401 bindir="\${prefix}/bin"
402 libdir="\${prefix}/lib"
403 libexecdir="\${prefix}/libexec"
404 includedir="\${prefix}/include"
405 sysconfdir="\${prefix}/etc"
406 local_statedir="\${prefix}/var"
407 confsuffix="/qemu"
408 slirp="yes"
409 oss_lib=""
410 bsd="no"
411 haiku="no"
412 linux="no"
413 solaris="no"
414 profiler="no"
415 cocoa="no"
416 softmmu="yes"
417 linux_user="no"
418 bsd_user="no"
419 blobs="yes"
420 pkgversion=""
421 pie=""
422 qom_cast_debug="yes"
423 trace_backends="log"
424 trace_file="trace"
425 spice=""
426 rbd=""
427 smartcard=""
428 libusb=""
429 usb_redir=""
430 opengl=""
431 opengl_dmabuf="no"
432 cpuid_h="no"
433 avx2_opt=""
434 zlib="yes"
435 capstone=""
436 lzo=""
437 snappy=""
438 bzip2=""
439 guest_agent=""
440 guest_agent_with_vss="no"
441 guest_agent_ntddscsi="no"
442 guest_agent_msi=""
443 vss_win32_sdk=""
444 win_sdk="no"
445 want_tools="yes"
446 libiscsi=""
447 libnfs=""
448 coroutine=""
449 coroutine_pool=""
450 debug_stack_usage="no"
451 crypto_afalg="no"
452 seccomp=""
453 glusterfs=""
454 glusterfs_xlator_opt="no"
455 glusterfs_discard="no"
456 glusterfs_fallocate="no"
457 glusterfs_zerofill="no"
458 gtk=""
459 gtk_gl="no"
460 tls_priority="NORMAL"
461 gnutls=""
462 nettle=""
463 gcrypt=""
464 gcrypt_hmac="no"
465 vte=""
466 virglrenderer=""
467 tpm="yes"
468 libssh2=""
469 live_block_migration="yes"
470 numa=""
471 tcmalloc="no"
472 jemalloc="no"
473 replication="yes"
474 vxhs=""
475 bochs="yes"
476 cloop="yes"
477 dmg="yes"
478 qcow1="yes"
479 vdi="yes"
480 vvfat="yes"
481 qed="yes"
482 parallels="yes"
483 sheepdog="yes"
484 libxml2=""
485 docker="no"
486 debug_mutex="no"
487 libpmem=""
488 libudev="no"
490 # cross compilers defaults, can be overridden with --cross-cc-ARCH
491 cross_cc_aarch64="aarch64-linux-gnu-gcc"
492 cross_cc_aarch64_be="$cross_cc_aarch64"
493 cross_cc_cflags_aarch64_be="-mbig-endian"
494 cross_cc_arm="arm-linux-gnueabihf-gcc"
495 cross_cc_cflags_armeb="-mbig-endian"
496 cross_cc_i386="i386-pc-linux-gnu-gcc"
497 cross_cc_cflags_i386=""
498 cross_cc_powerpc="powerpc-linux-gnu-gcc"
499 cross_cc_powerpc="powerpc-linux-gnu-gcc"
501 enabled_cross_compilers=""
503 supported_cpu="no"
504 supported_os="no"
505 bogus_os="no"
506 malloc_trim=""
508 # parse CC options first
509 for opt do
510 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
511 case "$opt" in
512 --cross-prefix=*) cross_prefix="$optarg"
514 --cc=*) CC="$optarg"
516 --cxx=*) CXX="$optarg"
518 --source-path=*) source_path="$optarg"
520 --cpu=*) cpu="$optarg"
522 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
524 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
526 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
527 EXTRA_LDFLAGS="$optarg"
529 --enable-debug-info) debug_info="yes"
531 --disable-debug-info) debug_info="no"
533 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
535 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
536 eval "cross_cc_cflags_${cc_arch}=\$optarg"
538 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
539 eval "cross_cc_${cc_arch}=\$optarg"
541 esac
542 done
543 # OS specific
544 # Using uname is really, really broken. Once we have the right set of checks
545 # we can eliminate its usage altogether.
547 # Preferred compiler:
548 # ${CC} (if set)
549 # ${cross_prefix}gcc (if cross-prefix specified)
550 # system compiler
551 if test -z "${CC}${cross_prefix}"; then
552 cc="$host_cc"
553 else
554 cc="${CC-${cross_prefix}gcc}"
557 if test -z "${CXX}${cross_prefix}"; then
558 cxx="c++"
559 else
560 cxx="${CXX-${cross_prefix}g++}"
563 ar="${AR-${cross_prefix}ar}"
564 as="${AS-${cross_prefix}as}"
565 ccas="${CCAS-$cc}"
566 cpp="${CPP-$cc -E}"
567 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
568 ld="${LD-${cross_prefix}ld}"
569 ranlib="${RANLIB-${cross_prefix}ranlib}"
570 nm="${NM-${cross_prefix}nm}"
571 strip="${STRIP-${cross_prefix}strip}"
572 windres="${WINDRES-${cross_prefix}windres}"
573 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
574 query_pkg_config() {
575 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
577 pkg_config=query_pkg_config
578 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
579 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
581 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
582 ARFLAGS="${ARFLAGS-rv}"
584 # default flags for all hosts
585 # We use -fwrapv to tell the compiler that we require a C dialect where
586 # left shift of signed integers is well defined and has the expected
587 # 2s-complement style results. (Both clang and gcc agree that it
588 # provides these semantics.)
589 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
590 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
591 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
592 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
593 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
594 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
595 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
596 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
597 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
598 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
599 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
600 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
601 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
602 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
603 if test "$debug_info" = "yes"; then
604 CFLAGS="-g $CFLAGS"
605 LDFLAGS="-g $LDFLAGS"
608 # make source path absolute
609 source_path=$(cd "$source_path"; pwd)
611 cc_macros=$($cc $QEMU_CFLAGS -E -dD - </dev/null)
613 # running configure in the source tree?
614 # we know that's the case if configure is there.
615 if test -f "./configure"; then
616 pwd_is_source_path="y"
617 else
618 pwd_is_source_path="n"
621 check_define() {
622 rm -f $TMPC
623 cat > $TMPC <<EOF
624 #if !defined($1)
625 #error $1 not defined
626 #endif
627 int main(void) { return 0; }
629 compile_object
632 check_include() {
633 cat > $TMPC <<EOF
634 #include <$1>
635 int main(void) { return 0; }
637 compile_object
640 write_c_skeleton() {
641 cat > $TMPC <<EOF
642 int main(void) { return 0; }
646 if check_define __linux__ ; then
647 targetos="Linux"
648 elif check_define _WIN32 ; then
649 targetos='MINGW32'
650 elif check_define __OpenBSD__ ; then
651 targetos='OpenBSD'
652 elif check_define __sun__ ; then
653 targetos='SunOS'
654 elif check_define __HAIKU__ ; then
655 targetos='Haiku'
656 elif check_define __FreeBSD__ ; then
657 targetos='FreeBSD'
658 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
659 targetos='GNU/kFreeBSD'
660 elif check_define __DragonFly__ ; then
661 targetos='DragonFly'
662 elif check_define __NetBSD__; then
663 targetos='NetBSD'
664 elif check_define __APPLE__; then
665 targetos='Darwin'
666 else
667 # This is a fatal error, but don't report it yet, because we
668 # might be going to just print the --help text, or it might
669 # be the result of a missing compiler.
670 targetos='bogus'
671 bogus_os='yes'
674 # Some host OSes need non-standard checks for which CPU to use.
675 # Note that these checks are broken for cross-compilation: if you're
676 # cross-compiling to one of these OSes then you'll need to specify
677 # the correct CPU with the --cpu option.
678 case $targetos in
679 Darwin)
680 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
681 # run 64-bit userspace code.
682 # If the user didn't specify a CPU explicitly and the kernel says this is
683 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
684 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
685 cpu="x86_64"
688 SunOS)
689 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
690 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
691 cpu="x86_64"
693 esac
695 if test ! -z "$cpu" ; then
696 # command line argument
698 elif check_define __i386__ ; then
699 cpu="i386"
700 elif check_define __x86_64__ ; then
701 if check_define __ILP32__ ; then
702 cpu="x32"
703 else
704 cpu="x86_64"
706 elif check_define __sparc__ ; then
707 if check_define __arch64__ ; then
708 cpu="sparc64"
709 else
710 cpu="sparc"
712 elif check_define _ARCH_PPC ; then
713 if check_define _ARCH_PPC64 ; then
714 cpu="ppc64"
715 else
716 cpu="ppc"
718 elif check_define __mips__ ; then
719 if check_define __mips64 ; then
720 cpu="mips64"
721 else
722 cpu="mips"
724 elif check_define __s390__ ; then
725 if check_define __s390x__ ; then
726 cpu="s390x"
727 else
728 cpu="s390"
730 elif check_define __arm__ ; then
731 cpu="arm"
732 elif check_define __aarch64__ ; then
733 cpu="aarch64"
734 else
735 cpu=$(uname -m)
738 ARCH=
739 # Normalise host CPU name and set ARCH.
740 # Note that this case should only have supported host CPUs, not guests.
741 case "$cpu" in
742 ppc|ppc64|s390|s390x|sparc64|x32)
743 cpu="$cpu"
744 supported_cpu="yes"
745 eval "cross_cc_${cpu}=\$host_cc"
747 i386|i486|i586|i686|i86pc|BePC)
748 cpu="i386"
749 supported_cpu="yes"
750 cross_cc_i386=$host_cc
752 x86_64|amd64)
753 cpu="x86_64"
754 supported_cpu="yes"
755 cross_cc_x86_64=$host_cc
757 armv*b|armv*l|arm)
758 cpu="arm"
759 supported_cpu="yes"
760 cross_cc_arm=$host_cc
762 aarch64)
763 cpu="aarch64"
764 supported_cpu="yes"
765 cross_cc_aarch64=$host_cc
767 mips*)
768 cpu="mips"
769 if check_define __MIPSEL__ ; then
770 cpu="${cpu}el"
772 supported_cpu="yes"
773 cross_cc_mips=$host_cc
775 sparc|sun4[cdmuv])
776 cpu="sparc"
777 supported_cpu="yes"
778 cross_cc_sparc=$host_cc
780 sh4)
781 cpu="sh4"
784 # This will result in either an error or falling back to TCI later
785 ARCH=unknown
787 esac
788 if test -z "$ARCH"; then
789 ARCH="$cpu"
792 # OS specific
794 # host *BSD for user mode
795 HOST_VARIANT_DIR=""
797 case $targetos in
798 MINGW32*)
799 mingw32="yes"
800 hax="yes"
801 audio_possible_drivers="dsound sdl"
802 if check_include dsound.h; then
803 audio_drv_list="dsound"
804 else
805 audio_drv_list=""
807 supported_os="yes"
809 GNU/kFreeBSD)
810 bsd="yes"
811 audio_drv_list="oss"
812 audio_possible_drivers="oss sdl pa"
814 FreeBSD)
815 bsd="yes"
816 make="${MAKE-gmake}"
817 audio_drv_list="oss"
818 audio_possible_drivers="oss sdl pa"
819 # needed for kinfo_getvmmap(3) in libutil.h
820 LIBS="-lutil $LIBS"
821 # needed for kinfo_getproc
822 libs_qga="-lutil $libs_qga"
823 netmap="" # enable netmap autodetect
824 HOST_VARIANT_DIR="freebsd"
825 supported_os="yes"
827 DragonFly)
828 bsd="yes"
829 make="${MAKE-gmake}"
830 audio_drv_list="oss"
831 audio_possible_drivers="oss sdl pa"
832 HOST_VARIANT_DIR="dragonfly"
834 NetBSD)
835 bsd="yes"
836 make="${MAKE-gmake}"
837 audio_drv_list="oss"
838 audio_possible_drivers="oss sdl"
839 oss_lib="-lossaudio"
840 HOST_VARIANT_DIR="netbsd"
841 supported_os="yes"
843 OpenBSD)
844 bsd="yes"
845 make="${MAKE-gmake}"
846 audio_drv_list="sdl"
847 audio_possible_drivers="sdl"
848 HOST_VARIANT_DIR="openbsd"
849 supported_os="yes"
851 Darwin)
852 bsd="yes"
853 darwin="yes"
854 hax="yes"
855 hvf="yes"
856 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
857 if [ "$cpu" = "x86_64" ] ; then
858 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
859 LDFLAGS="-arch x86_64 $LDFLAGS"
861 cocoa="yes"
862 audio_drv_list="coreaudio"
863 audio_possible_drivers="coreaudio sdl"
864 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
865 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
866 # Disable attempts to use ObjectiveC features in os/object.h since they
867 # won't work when we're compiling with gcc as a C compiler.
868 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
869 HOST_VARIANT_DIR="darwin"
870 supported_os="yes"
872 SunOS)
873 solaris="yes"
874 make="${MAKE-gmake}"
875 install="${INSTALL-ginstall}"
876 smbd="${SMBD-/usr/sfw/sbin/smbd}"
877 if test -f /usr/include/sys/soundcard.h ; then
878 audio_drv_list="oss"
880 audio_possible_drivers="oss sdl"
881 # needed for CMSG_ macros in sys/socket.h
882 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
883 # needed for TIOCWIN* defines in termios.h
884 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
885 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
886 solarisnetlibs="-lsocket -lnsl -lresolv"
887 LIBS="$solarisnetlibs $LIBS"
888 libs_qga="$solarisnetlibs $libs_qga"
890 Haiku)
891 haiku="yes"
892 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
893 LIBS="-lposix_error_mapper -lnetwork $LIBS"
895 Linux)
896 audio_drv_list="oss"
897 audio_possible_drivers="oss alsa sdl pa"
898 linux="yes"
899 linux_user="yes"
900 kvm="yes"
901 vhost_net="yes"
902 vhost_crypto="yes"
903 vhost_scsi="yes"
904 vhost_vsock="yes"
905 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
906 supported_os="yes"
907 libudev="yes"
909 esac
911 if [ "$bsd" = "yes" ] ; then
912 if [ "$darwin" != "yes" ] ; then
913 bsd_user="yes"
917 : ${make=${MAKE-make}}
918 : ${install=${INSTALL-install}}
919 : ${python=${PYTHON-python}}
920 : ${smbd=${SMBD-/usr/sbin/smbd}}
922 # Default objcc to clang if available, otherwise use CC
923 if has clang; then
924 objcc=clang
925 else
926 objcc="$cc"
929 if test "$mingw32" = "yes" ; then
930 EXESUF=".exe"
931 DSOSUF=".dll"
932 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
933 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
934 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
935 # MinGW-w64 needs _POSIX defined.
936 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
937 # MinGW needs -mthreads for TLS and macro _MT.
938 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
939 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
940 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
941 write_c_skeleton;
942 if compile_prog "" "-liberty" ; then
943 LIBS="-liberty $LIBS"
945 prefix="c:/Program Files/QEMU"
946 mandir="\${prefix}"
947 datadir="\${prefix}"
948 qemu_docdir="\${prefix}"
949 bindir="\${prefix}"
950 sysconfdir="\${prefix}"
951 local_statedir=
952 confsuffix=""
953 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
956 werror=""
958 for opt do
959 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
960 case "$opt" in
961 --help|-h) show_help=yes
963 --version|-V) exec cat $source_path/VERSION
965 --prefix=*) prefix="$optarg"
967 --interp-prefix=*) interp_prefix="$optarg"
969 --source-path=*)
971 --cross-prefix=*)
973 --cc=*)
975 --host-cc=*) host_cc="$optarg"
977 --cxx=*)
979 --iasl=*) iasl="$optarg"
981 --objcc=*) objcc="$optarg"
983 --make=*) make="$optarg"
985 --install=*) install="$optarg"
987 --python=*) python="$optarg"
989 --gcov=*) gcov_tool="$optarg"
991 --smbd=*) smbd="$optarg"
993 --extra-cflags=*)
995 --extra-cxxflags=*)
997 --extra-ldflags=*)
999 --enable-debug-info)
1001 --disable-debug-info)
1003 --cross-cc-*)
1005 --enable-modules)
1006 modules="yes"
1008 --disable-modules)
1009 modules="no"
1011 --cpu=*)
1013 --target-list=*) target_list="$optarg"
1015 --enable-trace-backends=*) trace_backends="$optarg"
1017 # XXX: backwards compatibility
1018 --enable-trace-backend=*) trace_backends="$optarg"
1020 --with-trace-file=*) trace_file="$optarg"
1022 --enable-gprof) gprof="yes"
1024 --enable-gcov) gcov="yes"
1026 --static)
1027 static="yes"
1028 LDFLAGS="-static $LDFLAGS"
1029 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1031 --mandir=*) mandir="$optarg"
1033 --bindir=*) bindir="$optarg"
1035 --libdir=*) libdir="$optarg"
1037 --libexecdir=*) libexecdir="$optarg"
1039 --includedir=*) includedir="$optarg"
1041 --datadir=*) datadir="$optarg"
1043 --with-confsuffix=*) confsuffix="$optarg"
1045 --docdir=*) qemu_docdir="$optarg"
1047 --sysconfdir=*) sysconfdir="$optarg"
1049 --localstatedir=*) local_statedir="$optarg"
1051 --firmwarepath=*) firmwarepath="$optarg"
1053 --host=*|--build=*|\
1054 --disable-dependency-tracking|\
1055 --sbindir=*|--sharedstatedir=*|\
1056 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1057 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1058 # These switches are silently ignored, for compatibility with
1059 # autoconf-generated configure scripts. This allows QEMU's
1060 # configure to be used by RPM and similar macros that set
1061 # lots of directory switches by default.
1063 --disable-sdl) sdl="no"
1065 --enable-sdl) sdl="yes"
1067 --with-sdlabi=*) sdlabi="$optarg"
1069 --disable-qom-cast-debug) qom_cast_debug="no"
1071 --enable-qom-cast-debug) qom_cast_debug="yes"
1073 --disable-virtfs) virtfs="no"
1075 --enable-virtfs) virtfs="yes"
1077 --disable-mpath) mpath="no"
1079 --enable-mpath) mpath="yes"
1081 --disable-vnc) vnc="no"
1083 --enable-vnc) vnc="yes"
1085 --oss-lib=*) oss_lib="$optarg"
1087 --audio-drv-list=*) audio_drv_list="$optarg"
1089 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1091 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1093 --enable-debug-tcg) debug_tcg="yes"
1095 --disable-debug-tcg) debug_tcg="no"
1097 --enable-debug)
1098 # Enable debugging options that aren't excessively noisy
1099 debug_tcg="yes"
1100 debug_mutex="yes"
1101 debug="yes"
1102 strip_opt="no"
1103 fortify_source="no"
1105 --enable-sanitizers) sanitizers="yes"
1107 --disable-sanitizers) sanitizers="no"
1109 --enable-sparse) sparse="yes"
1111 --disable-sparse) sparse="no"
1113 --disable-strip) strip_opt="no"
1115 --disable-vnc-sasl) vnc_sasl="no"
1117 --enable-vnc-sasl) vnc_sasl="yes"
1119 --disable-vnc-jpeg) vnc_jpeg="no"
1121 --enable-vnc-jpeg) vnc_jpeg="yes"
1123 --disable-vnc-png) vnc_png="no"
1125 --enable-vnc-png) vnc_png="yes"
1127 --disable-slirp) slirp="no"
1129 --disable-vde) vde="no"
1131 --enable-vde) vde="yes"
1133 --disable-netmap) netmap="no"
1135 --enable-netmap) netmap="yes"
1137 --disable-xen) xen="no"
1139 --enable-xen) xen="yes"
1141 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1143 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1145 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1147 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1149 --disable-brlapi) brlapi="no"
1151 --enable-brlapi) brlapi="yes"
1153 --disable-bluez) bluez="no"
1155 --enable-bluez) bluez="yes"
1157 --disable-kvm) kvm="no"
1159 --enable-kvm) kvm="yes"
1161 --disable-hax) hax="no"
1163 --enable-hax) hax="yes"
1165 --disable-hvf) hvf="no"
1167 --enable-hvf) hvf="yes"
1169 --disable-whpx) whpx="no"
1171 --enable-whpx) whpx="yes"
1173 --disable-tcg-interpreter) tcg_interpreter="no"
1175 --enable-tcg-interpreter) tcg_interpreter="yes"
1177 --disable-cap-ng) cap_ng="no"
1179 --enable-cap-ng) cap_ng="yes"
1181 --disable-tcg) tcg="no"
1183 --enable-tcg) tcg="yes"
1185 --disable-malloc-trim) malloc_trim="no"
1187 --enable-malloc-trim) malloc_trim="yes"
1189 --disable-spice) spice="no"
1191 --enable-spice) spice="yes"
1193 --disable-libiscsi) libiscsi="no"
1195 --enable-libiscsi) libiscsi="yes"
1197 --disable-libnfs) libnfs="no"
1199 --enable-libnfs) libnfs="yes"
1201 --enable-profiler) profiler="yes"
1203 --disable-cocoa) cocoa="no"
1205 --enable-cocoa)
1206 cocoa="yes" ;
1207 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1209 --disable-system) softmmu="no"
1211 --enable-system) softmmu="yes"
1213 --disable-user)
1214 linux_user="no" ;
1215 bsd_user="no" ;
1217 --enable-user) ;;
1218 --disable-linux-user) linux_user="no"
1220 --enable-linux-user) linux_user="yes"
1222 --disable-bsd-user) bsd_user="no"
1224 --enable-bsd-user) bsd_user="yes"
1226 --enable-pie) pie="yes"
1228 --disable-pie) pie="no"
1230 --enable-werror) werror="yes"
1232 --disable-werror) werror="no"
1234 --enable-stack-protector) stack_protector="yes"
1236 --disable-stack-protector) stack_protector="no"
1238 --disable-curses) curses="no"
1240 --enable-curses) curses="yes"
1242 --disable-curl) curl="no"
1244 --enable-curl) curl="yes"
1246 --disable-fdt) fdt="no"
1248 --enable-fdt) fdt="yes"
1250 --disable-linux-aio) linux_aio="no"
1252 --enable-linux-aio) linux_aio="yes"
1254 --disable-attr) attr="no"
1256 --enable-attr) attr="yes"
1258 --disable-membarrier) membarrier="no"
1260 --enable-membarrier) membarrier="yes"
1262 --disable-blobs) blobs="no"
1264 --with-pkgversion=*) pkgversion="$optarg"
1266 --with-coroutine=*) coroutine="$optarg"
1268 --disable-coroutine-pool) coroutine_pool="no"
1270 --enable-coroutine-pool) coroutine_pool="yes"
1272 --enable-debug-stack-usage) debug_stack_usage="yes"
1274 --enable-crypto-afalg) crypto_afalg="yes"
1276 --disable-crypto-afalg) crypto_afalg="no"
1278 --disable-docs) docs="no"
1280 --enable-docs) docs="yes"
1282 --disable-vhost-net) vhost_net="no"
1284 --enable-vhost-net) vhost_net="yes"
1286 --disable-vhost-crypto) vhost_crypto="no"
1288 --enable-vhost-crypto)
1289 vhost_crypto="yes"
1290 if test "$mingw32" = "yes"; then
1291 error_exit "vhost-crypto isn't available on win32"
1294 --disable-vhost-scsi) vhost_scsi="no"
1296 --enable-vhost-scsi) vhost_scsi="yes"
1298 --disable-vhost-vsock) vhost_vsock="no"
1300 --enable-vhost-vsock) vhost_vsock="yes"
1302 --disable-opengl) opengl="no"
1304 --enable-opengl) opengl="yes"
1306 --disable-rbd) rbd="no"
1308 --enable-rbd) rbd="yes"
1310 --disable-xfsctl) xfs="no"
1312 --enable-xfsctl) xfs="yes"
1314 --disable-smartcard) smartcard="no"
1316 --enable-smartcard) smartcard="yes"
1318 --disable-libusb) libusb="no"
1320 --enable-libusb) libusb="yes"
1322 --disable-usb-redir) usb_redir="no"
1324 --enable-usb-redir) usb_redir="yes"
1326 --disable-zlib-test) zlib="no"
1328 --disable-lzo) lzo="no"
1330 --enable-lzo) lzo="yes"
1332 --disable-snappy) snappy="no"
1334 --enable-snappy) snappy="yes"
1336 --disable-bzip2) bzip2="no"
1338 --enable-bzip2) bzip2="yes"
1340 --enable-guest-agent) guest_agent="yes"
1342 --disable-guest-agent) guest_agent="no"
1344 --enable-guest-agent-msi) guest_agent_msi="yes"
1346 --disable-guest-agent-msi) guest_agent_msi="no"
1348 --with-vss-sdk) vss_win32_sdk=""
1350 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1352 --without-vss-sdk) vss_win32_sdk="no"
1354 --with-win-sdk) win_sdk=""
1356 --with-win-sdk=*) win_sdk="$optarg"
1358 --without-win-sdk) win_sdk="no"
1360 --enable-tools) want_tools="yes"
1362 --disable-tools) want_tools="no"
1364 --enable-seccomp) seccomp="yes"
1366 --disable-seccomp) seccomp="no"
1368 --disable-glusterfs) glusterfs="no"
1370 --disable-avx2) avx2_opt="no"
1372 --enable-avx2) avx2_opt="yes"
1374 --enable-glusterfs) glusterfs="yes"
1376 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1377 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1379 --enable-vhdx|--disable-vhdx)
1380 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1382 --enable-uuid|--disable-uuid)
1383 echo "$0: $opt is obsolete, UUID support is always built" >&2
1385 --disable-gtk) gtk="no"
1387 --enable-gtk) gtk="yes"
1389 --tls-priority=*) tls_priority="$optarg"
1391 --disable-gnutls) gnutls="no"
1393 --enable-gnutls) gnutls="yes"
1395 --disable-nettle) nettle="no"
1397 --enable-nettle) nettle="yes"
1399 --disable-gcrypt) gcrypt="no"
1401 --enable-gcrypt) gcrypt="yes"
1403 --enable-rdma) rdma="yes"
1405 --disable-rdma) rdma="no"
1407 --enable-pvrdma) pvrdma="yes"
1409 --disable-pvrdma) pvrdma="no"
1411 --disable-vte) vte="no"
1413 --enable-vte) vte="yes"
1415 --disable-virglrenderer) virglrenderer="no"
1417 --enable-virglrenderer) virglrenderer="yes"
1419 --disable-tpm) tpm="no"
1421 --enable-tpm) tpm="yes"
1423 --disable-libssh2) libssh2="no"
1425 --enable-libssh2) libssh2="yes"
1427 --disable-live-block-migration) live_block_migration="no"
1429 --enable-live-block-migration) live_block_migration="yes"
1431 --disable-numa) numa="no"
1433 --enable-numa) numa="yes"
1435 --disable-libxml2) libxml2="no"
1437 --enable-libxml2) libxml2="yes"
1439 --disable-tcmalloc) tcmalloc="no"
1441 --enable-tcmalloc) tcmalloc="yes"
1443 --disable-jemalloc) jemalloc="no"
1445 --enable-jemalloc) jemalloc="yes"
1447 --disable-replication) replication="no"
1449 --enable-replication) replication="yes"
1451 --disable-vxhs) vxhs="no"
1453 --enable-vxhs) vxhs="yes"
1455 --disable-bochs) bochs="no"
1457 --enable-bochs) bochs="yes"
1459 --disable-cloop) cloop="no"
1461 --enable-cloop) cloop="yes"
1463 --disable-dmg) dmg="no"
1465 --enable-dmg) dmg="yes"
1467 --disable-qcow1) qcow1="no"
1469 --enable-qcow1) qcow1="yes"
1471 --disable-vdi) vdi="no"
1473 --enable-vdi) vdi="yes"
1475 --disable-vvfat) vvfat="no"
1477 --enable-vvfat) vvfat="yes"
1479 --disable-qed) qed="no"
1481 --enable-qed) qed="yes"
1483 --disable-parallels) parallels="no"
1485 --enable-parallels) parallels="yes"
1487 --disable-sheepdog) sheepdog="no"
1489 --enable-sheepdog) sheepdog="yes"
1491 --disable-vhost-user) vhost_user="no"
1493 --enable-vhost-user)
1494 vhost_user="yes"
1495 if test "$mingw32" = "yes"; then
1496 error_exit "vhost-user isn't available on win32"
1499 --disable-capstone) capstone="no"
1501 --enable-capstone) capstone="yes"
1503 --enable-capstone=git) capstone="git"
1505 --enable-capstone=system) capstone="system"
1507 --with-git=*) git="$optarg"
1509 --enable-git-update) git_update=yes
1511 --disable-git-update) git_update=no
1513 --enable-debug-mutex) debug_mutex=yes
1515 --disable-debug-mutex) debug_mutex=no
1517 --enable-libpmem) libpmem=yes
1519 --disable-libpmem) libpmem=no
1522 echo "ERROR: unknown option $opt"
1523 echo "Try '$0 --help' for more information"
1524 exit 1
1526 esac
1527 done
1529 if test "$vhost_user" = ""; then
1530 if test "$mingw32" = "yes"; then
1531 vhost_user="no"
1532 else
1533 vhost_user="yes"
1537 case "$cpu" in
1538 ppc)
1539 CPU_CFLAGS="-m32"
1540 LDFLAGS="-m32 $LDFLAGS"
1541 cross_cc_powerpc=$cc
1542 cross_cc_cflags_powerpc=$CPU_CFLAGS
1544 ppc64)
1545 CPU_CFLAGS="-m64"
1546 LDFLAGS="-m64 $LDFLAGS"
1547 cross_cc_ppc64=$cc
1548 cross_cc_cflags_ppc64=$CPU_CFLAGS
1550 sparc)
1551 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1552 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1553 cross_cc_sparc=$cc
1554 cross_cc_cflags_sparc=$CPU_CFLAGS
1556 sparc64)
1557 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1558 LDFLAGS="-m64 $LDFLAGS"
1559 cross_cc_sparc64=$cc
1560 cross_cc_cflags_sparc64=$CPU_CFLAGS
1562 s390)
1563 CPU_CFLAGS="-m31"
1564 LDFLAGS="-m31 $LDFLAGS"
1565 cross_cc_s390=$cc
1566 cross_cc_cflags_s390=$CPU_CFLAGS
1568 s390x)
1569 CPU_CFLAGS="-m64"
1570 LDFLAGS="-m64 $LDFLAGS"
1571 cross_cc_s390x=$cc
1572 cross_cc_cflags_s390x=$CPU_CFLAGS
1574 i386)
1575 CPU_CFLAGS="-m32"
1576 LDFLAGS="-m32 $LDFLAGS"
1577 cross_cc_i386=$cc
1578 cross_cc_cflags_i386=$CPU_CFLAGS
1580 x86_64)
1581 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1582 # If we truly care, we should simply detect this case at
1583 # runtime and generate the fallback to serial emulation.
1584 CPU_CFLAGS="-m64 -mcx16"
1585 LDFLAGS="-m64 $LDFLAGS"
1586 cross_cc_x86_64=$cc
1587 cross_cc_cflags_x86_64=$CPU_CFLAGS
1589 x32)
1590 CPU_CFLAGS="-mx32"
1591 LDFLAGS="-mx32 $LDFLAGS"
1592 cross_cc_i386=$cc
1593 cross_cc_cflags_i386=$CPU_CFLAGS
1595 # No special flags required for other host CPUs
1596 esac
1598 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1600 # For user-mode emulation the host arch has to be one we explicitly
1601 # support, even if we're using TCI.
1602 if [ "$ARCH" = "unknown" ]; then
1603 bsd_user="no"
1604 linux_user="no"
1607 default_target_list=""
1609 mak_wilds=""
1611 if [ "$softmmu" = "yes" ]; then
1612 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1614 if [ "$linux_user" = "yes" ]; then
1615 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1617 if [ "$bsd_user" = "yes" ]; then
1618 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1621 for config in $mak_wilds; do
1622 default_target_list="${default_target_list} $(basename "$config" .mak)"
1623 done
1625 # Enumerate public trace backends for --help output
1626 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1628 if test x"$show_help" = x"yes" ; then
1629 cat << EOF
1631 Usage: configure [options]
1632 Options: [defaults in brackets after descriptions]
1634 Standard options:
1635 --help print this message
1636 --prefix=PREFIX install in PREFIX [$prefix]
1637 --interp-prefix=PREFIX where to find shared libraries, etc.
1638 use %M for cpu name [$interp_prefix]
1639 --target-list=LIST set target list (default: build everything)
1640 $(echo Available targets: $default_target_list | \
1641 fold -s -w 53 | sed -e 's/^/ /')
1643 Advanced options (experts only):
1644 --source-path=PATH path of source code [$source_path]
1645 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1646 --cc=CC use C compiler CC [$cc]
1647 --iasl=IASL use ACPI compiler IASL [$iasl]
1648 --host-cc=CC use C compiler CC [$host_cc] for code run at
1649 build time
1650 --cxx=CXX use C++ compiler CXX [$cxx]
1651 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1652 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1653 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1654 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1655 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1656 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1657 --make=MAKE use specified make [$make]
1658 --install=INSTALL use specified install [$install]
1659 --python=PYTHON use specified python [$python]
1660 --smbd=SMBD use specified smbd [$smbd]
1661 --with-git=GIT use specified git [$git]
1662 --static enable static build [$static]
1663 --mandir=PATH install man pages in PATH
1664 --datadir=PATH install firmware in PATH$confsuffix
1665 --docdir=PATH install documentation in PATH$confsuffix
1666 --bindir=PATH install binaries in PATH
1667 --libdir=PATH install libraries in PATH
1668 --libexecdir=PATH install helper binaries in PATH
1669 --sysconfdir=PATH install config in PATH$confsuffix
1670 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1671 --firmwarepath=PATH search PATH for firmware files
1672 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1673 --with-pkgversion=VERS use specified string as sub-version of the package
1674 --enable-debug enable common debug build options
1675 --enable-sanitizers enable default sanitizers
1676 --disable-strip disable stripping binaries
1677 --disable-werror disable compilation abort on warning
1678 --disable-stack-protector disable compiler-provided stack protection
1679 --audio-drv-list=LIST set audio drivers list:
1680 Available drivers: $audio_possible_drivers
1681 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1682 --block-drv-rw-whitelist=L
1683 set block driver read-write whitelist
1684 (affects only QEMU, not qemu-img)
1685 --block-drv-ro-whitelist=L
1686 set block driver read-only whitelist
1687 (affects only QEMU, not qemu-img)
1688 --enable-trace-backends=B Set trace backend
1689 Available backends: $trace_backend_list
1690 --with-trace-file=NAME Full PATH,NAME of file to store traces
1691 Default:trace-<pid>
1692 --disable-slirp disable SLIRP userspace network connectivity
1693 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1694 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1695 --oss-lib path to OSS library
1696 --cpu=CPU Build for host CPU [$cpu]
1697 --with-coroutine=BACKEND coroutine backend. Supported options:
1698 ucontext, sigaltstack, windows
1699 --enable-gcov enable test coverage analysis with gcov
1700 --gcov=GCOV use specified gcov [$gcov_tool]
1701 --disable-blobs disable installing provided firmware blobs
1702 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1703 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1704 --tls-priority default TLS protocol/cipher priority string
1705 --enable-gprof QEMU profiling with gprof
1706 --enable-profiler profiler support
1707 --enable-xen-pv-domain-build
1708 xen pv domain builder
1709 --enable-debug-stack-usage
1710 track the maximum stack usage of stacks created by qemu_alloc_stack
1712 Optional features, enabled with --enable-FEATURE and
1713 disabled with --disable-FEATURE, default is enabled if available:
1715 system all system emulation targets
1716 user supported user emulation targets
1717 linux-user all linux usermode emulation targets
1718 bsd-user all BSD usermode emulation targets
1719 docs build documentation
1720 guest-agent build the QEMU Guest Agent
1721 guest-agent-msi build guest agent Windows MSI installation package
1722 pie Position Independent Executables
1723 modules modules support
1724 debug-tcg TCG debugging (default is disabled)
1725 debug-info debugging information
1726 sparse sparse checker
1728 gnutls GNUTLS cryptography support
1729 nettle nettle cryptography support
1730 gcrypt libgcrypt cryptography support
1731 sdl SDL UI
1732 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1733 gtk gtk UI
1734 vte vte support for the gtk UI
1735 curses curses UI
1736 vnc VNC UI support
1737 vnc-sasl SASL encryption for VNC server
1738 vnc-jpeg JPEG lossy compression for VNC server
1739 vnc-png PNG compression for VNC server
1740 cocoa Cocoa UI (Mac OS X only)
1741 virtfs VirtFS
1742 mpath Multipath persistent reservation passthrough
1743 xen xen backend driver support
1744 xen-pci-passthrough PCI passthrough support for Xen
1745 brlapi BrlAPI (Braile)
1746 curl curl connectivity
1747 membarrier membarrier system call (for Linux 4.14+ or Windows)
1748 fdt fdt device tree
1749 bluez bluez stack connectivity
1750 kvm KVM acceleration support
1751 hax HAX acceleration support
1752 hvf Hypervisor.framework acceleration support
1753 whpx Windows Hypervisor Platform acceleration support
1754 rdma Enable RDMA-based migration
1755 pvrdma Enable PVRDMA support
1756 vde support for vde network
1757 netmap support for netmap network
1758 linux-aio Linux AIO support
1759 cap-ng libcap-ng support
1760 attr attr and xattr support
1761 vhost-net vhost-net acceleration support
1762 vhost-crypto vhost-crypto acceleration support
1763 spice spice
1764 rbd rados block device (rbd)
1765 libiscsi iscsi support
1766 libnfs nfs support
1767 smartcard smartcard support (libcacard)
1768 libusb libusb (for usb passthrough)
1769 live-block-migration Block migration in the main migration stream
1770 usb-redir usb network redirection support
1771 lzo support of lzo compression library
1772 snappy support of snappy compression library
1773 bzip2 support of bzip2 compression library
1774 (for reading bzip2-compressed dmg images)
1775 seccomp seccomp support
1776 coroutine-pool coroutine freelist (better performance)
1777 glusterfs GlusterFS backend
1778 tpm TPM support
1779 libssh2 ssh block device support
1780 numa libnuma support
1781 libxml2 for Parallels image format
1782 tcmalloc tcmalloc support
1783 jemalloc jemalloc support
1784 avx2 AVX2 optimization support
1785 replication replication support
1786 vhost-vsock virtio sockets device support
1787 opengl opengl support
1788 virglrenderer virgl rendering support
1789 xfsctl xfsctl support
1790 qom-cast-debug cast debugging support
1791 tools build qemu-io, qemu-nbd and qemu-image tools
1792 vxhs Veritas HyperScale vDisk backend support
1793 bochs bochs image format support
1794 cloop cloop image format support
1795 dmg dmg image format support
1796 qcow1 qcow v1 image format support
1797 vdi vdi image format support
1798 vvfat vvfat image format support
1799 qed qed image format support
1800 parallels parallels image format support
1801 sheepdog sheepdog block driver support
1802 crypto-afalg Linux AF_ALG crypto backend driver
1803 vhost-user vhost-user support
1804 capstone capstone disassembler support
1805 debug-mutex mutex debugging support
1806 libpmem libpmem support
1808 NOTE: The object files are built at the place where configure is launched
1810 exit 0
1813 if ! has $python; then
1814 error_exit "Python not found. Use --python=/path/to/python"
1817 # Note that if the Python conditional here evaluates True we will exit
1818 # with status 1 which is a shell 'false' value.
1819 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1820 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1821 "Use --python=/path/to/python to specify a supported Python."
1824 # Suppress writing compiled files
1825 python="$python -B"
1827 # Check that the C compiler works. Doing this here before testing
1828 # the host CPU ensures that we had a valid CC to autodetect the
1829 # $cpu var (and we should bail right here if that's not the case).
1830 # It also allows the help message to be printed without a CC.
1831 write_c_skeleton;
1832 if compile_object ; then
1833 : C compiler works ok
1834 else
1835 error_exit "\"$cc\" either does not exist or does not work"
1837 if ! compile_prog ; then
1838 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1841 # Now we have handled --enable-tcg-interpreter and know we're not just
1842 # printing the help message, bail out if the host CPU isn't supported.
1843 if test "$ARCH" = "unknown"; then
1844 if test "$tcg_interpreter" = "yes" ; then
1845 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1846 else
1847 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1851 # Consult white-list to determine whether to enable werror
1852 # by default. Only enable by default for git builds
1853 if test -z "$werror" ; then
1854 if test -d "$source_path/.git" -a \
1855 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1856 werror="yes"
1857 else
1858 werror="no"
1862 if test "$bogus_os" = "yes"; then
1863 # Now that we know that we're not printing the help and that
1864 # the compiler works (so the results of the check_defines we used
1865 # to identify the OS are reliable), if we didn't recognize the
1866 # host OS we should stop now.
1867 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1870 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1871 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1872 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1873 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1874 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1875 gcc_flags="-Wno-string-plus-int $gcc_flags"
1876 gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
1877 # Note that we do not add -Werror to gcc_flags here, because that would
1878 # enable it for all configure tests. If a configure test failed due
1879 # to -Werror this would just silently disable some features,
1880 # so it's too error prone.
1882 cc_has_warning_flag() {
1883 write_c_skeleton;
1885 # Use the positive sense of the flag when testing for -Wno-wombat
1886 # support (gcc will happily accept the -Wno- form of unknown
1887 # warning options).
1888 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1889 compile_prog "-Werror $optflag" ""
1892 for flag in $gcc_flags; do
1893 if cc_has_warning_flag $flag ; then
1894 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1896 done
1898 if test "$mingw32" = "yes"; then
1899 stack_protector="no"
1901 if test "$stack_protector" != "no"; then
1902 cat > $TMPC << EOF
1903 int main(int argc, char *argv[])
1905 char arr[64], *p = arr, *c = argv[0];
1906 while (*c) {
1907 *p++ = *c++;
1909 return 0;
1912 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1913 sp_on=0
1914 for flag in $gcc_flags; do
1915 # We need to check both a compile and a link, since some compiler
1916 # setups fail only on a .c->.o compile and some only at link time
1917 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1918 compile_prog "-Werror $flag" ""; then
1919 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1920 sp_on=1
1921 break
1923 done
1924 if test "$stack_protector" = yes; then
1925 if test $sp_on = 0; then
1926 error_exit "Stack protector not supported"
1931 # Disable -Wmissing-braces on older compilers that warn even for
1932 # the "universal" C zero initializer {0}.
1933 cat > $TMPC << EOF
1934 struct {
1935 int a[2];
1936 } x = {0};
1938 if compile_object "-Werror" "" ; then
1940 else
1941 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1944 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1945 # large functions that use global variables. The bug is in all releases of
1946 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1947 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1948 cat > $TMPC << EOF
1949 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1950 int main(void) { return 0; }
1951 #else
1952 #error No bug in this compiler.
1953 #endif
1955 if compile_prog "-Werror -fno-gcse" "" ; then
1956 TRANSLATE_OPT_CFLAGS=-fno-gcse
1959 if test "$static" = "yes" ; then
1960 if test "$modules" = "yes" ; then
1961 error_exit "static and modules are mutually incompatible"
1963 if test "$pie" = "yes" ; then
1964 error_exit "static and pie are mutually incompatible"
1965 else
1966 pie="no"
1970 # Unconditional check for compiler __thread support
1971 cat > $TMPC << EOF
1972 static __thread int tls_var;
1973 int main(void) { return tls_var; }
1976 if ! compile_prog "-Werror" "" ; then
1977 error_exit "Your compiler does not support the __thread specifier for " \
1978 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1981 if test "$pie" = ""; then
1982 case "$cpu-$targetos" in
1983 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1986 pie="no"
1988 esac
1991 if test "$pie" != "no" ; then
1992 cat > $TMPC << EOF
1994 #ifdef __linux__
1995 # define THREAD __thread
1996 #else
1997 # define THREAD
1998 #endif
2000 static THREAD int tls_var;
2002 int main(void) { return tls_var; }
2005 if compile_prog "-fPIE -DPIE" "-pie"; then
2006 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2007 LDFLAGS="-pie $LDFLAGS"
2008 pie="yes"
2009 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2010 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2012 else
2013 if test "$pie" = "yes"; then
2014 error_exit "PIE not available due to missing toolchain support"
2015 else
2016 echo "Disabling PIE due to missing toolchain support"
2017 pie="no"
2021 if compile_prog "-Werror -fno-pie" "-nopie"; then
2022 CFLAGS_NOPIE="-fno-pie"
2023 LDFLAGS_NOPIE="-nopie"
2027 ##########################################
2028 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2029 # use i686 as default anyway, but for those that don't, an explicit
2030 # specification is necessary
2032 if test "$cpu" = "i386"; then
2033 cat > $TMPC << EOF
2034 static int sfaa(int *ptr)
2036 return __sync_fetch_and_and(ptr, 0);
2039 int main(void)
2041 int val = 42;
2042 val = __sync_val_compare_and_swap(&val, 0, 1);
2043 sfaa(&val);
2044 return val;
2047 if ! compile_prog "" "" ; then
2048 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2052 #########################################
2053 # Solaris specific configure tool chain decisions
2055 if test "$solaris" = "yes" ; then
2056 if has $install; then
2058 else
2059 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2060 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2061 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2063 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2064 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2065 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2066 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2068 if has ar; then
2070 else
2071 if test -f /usr/ccs/bin/ar ; then
2072 error_exit "No path includes ar" \
2073 "Add /usr/ccs/bin to your path and rerun configure"
2075 error_exit "No path includes ar"
2079 if test -z "${target_list+xxx}" ; then
2080 for target in $default_target_list; do
2081 supported_target $target 2>/dev/null && \
2082 target_list="$target_list $target"
2083 done
2084 target_list="${target_list# }"
2085 else
2086 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2087 for target in $target_list; do
2088 # Check that we recognised the target name; this allows a more
2089 # friendly error message than if we let it fall through.
2090 case " $default_target_list " in
2091 *" $target "*)
2094 error_exit "Unknown target name '$target'"
2096 esac
2097 supported_target $target || exit 1
2098 done
2101 # see if system emulation was really requested
2102 case " $target_list " in
2103 *"-softmmu "*) softmmu=yes
2105 *) softmmu=no
2107 esac
2109 feature_not_found() {
2110 feature=$1
2111 remedy=$2
2113 error_exit "User requested feature $feature" \
2114 "configure was not able to find it." \
2115 "$remedy"
2118 # ---
2119 # big/little endian test
2120 cat > $TMPC << EOF
2121 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2122 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2123 extern int foo(short *, short *);
2124 int main(int argc, char *argv[]) {
2125 return foo(big_endian, little_endian);
2129 if compile_object ; then
2130 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2131 bigendian="yes"
2132 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2133 bigendian="no"
2134 else
2135 echo big/little test failed
2137 else
2138 echo big/little test failed
2141 ##########################################
2142 # cocoa implies not SDL or GTK
2143 # (the cocoa UI code currently assumes it is always the active UI
2144 # and doesn't interact well with other UI frontend code)
2145 if test "$cocoa" = "yes"; then
2146 if test "$sdl" = "yes"; then
2147 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2149 if test "$gtk" = "yes"; then
2150 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2152 gtk=no
2153 sdl=no
2156 # Some versions of Mac OS X incorrectly define SIZE_MAX
2157 cat > $TMPC << EOF
2158 #include <stdint.h>
2159 #include <stdio.h>
2160 int main(int argc, char *argv[]) {
2161 return printf("%zu", SIZE_MAX);
2164 have_broken_size_max=no
2165 if ! compile_object -Werror ; then
2166 have_broken_size_max=yes
2169 ##########################################
2170 # L2TPV3 probe
2172 cat > $TMPC <<EOF
2173 #include <sys/socket.h>
2174 #include <linux/ip.h>
2175 int main(void) { return sizeof(struct mmsghdr); }
2177 if compile_prog "" "" ; then
2178 l2tpv3=yes
2179 else
2180 l2tpv3=no
2183 ##########################################
2184 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2186 if test "$mingw32" = "yes"; then
2187 # Some versions of MinGW / Mingw-w64 lack localtime_r
2188 # and gmtime_r entirely.
2190 # Some versions of Mingw-w64 define a macro for
2191 # localtime_r/gmtime_r.
2193 # Some versions of Mingw-w64 will define functions
2194 # for localtime_r/gmtime_r, but only if you have
2195 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2196 # though, unistd.h and pthread.h both define
2197 # that for you.
2199 # So this #undef localtime_r and #include <unistd.h>
2200 # are not in fact redundant.
2201 cat > $TMPC << EOF
2202 #include <unistd.h>
2203 #include <time.h>
2204 #undef localtime_r
2205 int main(void) { localtime_r(NULL, NULL); return 0; }
2207 if compile_prog "" "" ; then
2208 localtime_r="yes"
2209 else
2210 localtime_r="no"
2214 ##########################################
2215 # pkg-config probe
2217 if ! has "$pkg_config_exe"; then
2218 error_exit "pkg-config binary '$pkg_config_exe' not found"
2221 ##########################################
2222 # NPTL probe
2224 if test "$linux_user" = "yes"; then
2225 cat > $TMPC <<EOF
2226 #include <sched.h>
2227 #include <linux/futex.h>
2228 int main(void) {
2229 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2230 #error bork
2231 #endif
2232 return 0;
2235 if ! compile_object ; then
2236 feature_not_found "nptl" "Install glibc and linux kernel headers."
2240 ##########################################
2241 # lzo check
2243 if test "$lzo" != "no" ; then
2244 cat > $TMPC << EOF
2245 #include <lzo/lzo1x.h>
2246 int main(void) { lzo_version(); return 0; }
2248 if compile_prog "" "-llzo2" ; then
2249 libs_softmmu="$libs_softmmu -llzo2"
2250 lzo="yes"
2251 else
2252 if test "$lzo" = "yes"; then
2253 feature_not_found "liblzo2" "Install liblzo2 devel"
2255 lzo="no"
2259 ##########################################
2260 # snappy check
2262 if test "$snappy" != "no" ; then
2263 cat > $TMPC << EOF
2264 #include <snappy-c.h>
2265 int main(void) { snappy_max_compressed_length(4096); return 0; }
2267 if compile_prog "" "-lsnappy" ; then
2268 libs_softmmu="$libs_softmmu -lsnappy"
2269 snappy="yes"
2270 else
2271 if test "$snappy" = "yes"; then
2272 feature_not_found "libsnappy" "Install libsnappy devel"
2274 snappy="no"
2278 ##########################################
2279 # bzip2 check
2281 if test "$bzip2" != "no" ; then
2282 cat > $TMPC << EOF
2283 #include <bzlib.h>
2284 int main(void) { BZ2_bzlibVersion(); return 0; }
2286 if compile_prog "" "-lbz2" ; then
2287 bzip2="yes"
2288 else
2289 if test "$bzip2" = "yes"; then
2290 feature_not_found "libbzip2" "Install libbzip2 devel"
2292 bzip2="no"
2296 ##########################################
2297 # libseccomp check
2299 libseccomp_minver="2.2.0"
2300 if test "$seccomp" != "no" ; then
2301 case "$cpu" in
2302 i386|x86_64|mips)
2304 arm|aarch64)
2305 libseccomp_minver="2.2.3"
2307 ppc|ppc64|s390x)
2308 libseccomp_minver="2.3.0"
2311 libseccomp_minver=""
2313 esac
2315 if test "$libseccomp_minver" != "" &&
2316 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2317 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2318 seccomp_libs="$($pkg_config --libs libseccomp)"
2319 seccomp="yes"
2320 else
2321 if test "$seccomp" = "yes" ; then
2322 if test "$libseccomp_minver" != "" ; then
2323 feature_not_found "libseccomp" \
2324 "Install libseccomp devel >= $libseccomp_minver"
2325 else
2326 feature_not_found "libseccomp" \
2327 "libseccomp is not supported for host cpu $cpu"
2330 seccomp="no"
2333 ##########################################
2334 # xen probe
2336 if test "$xen" != "no" ; then
2337 # Check whether Xen library path is specified via --extra-ldflags to avoid
2338 # overriding this setting with pkg-config output. If not, try pkg-config
2339 # to obtain all needed flags.
2341 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2342 $pkg_config --exists xencontrol ; then
2343 xen_ctrl_version="$(printf '%d%02d%02d' \
2344 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2345 xen=yes
2346 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2347 xen_pc="$xen_pc xenevtchn xendevicemodel"
2348 if $pkg_config --exists xentoolcore; then
2349 xen_pc="$xen_pc xentoolcore"
2351 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2352 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2353 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2354 else
2356 xen_libs="-lxenstore -lxenctrl -lxenguest"
2357 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2359 # First we test whether Xen headers and libraries are available.
2360 # If no, we are done and there is no Xen support.
2361 # If yes, more tests are run to detect the Xen version.
2363 # Xen (any)
2364 cat > $TMPC <<EOF
2365 #include <xenctrl.h>
2366 int main(void) {
2367 return 0;
2370 if ! compile_prog "" "$xen_libs" ; then
2371 # Xen not found
2372 if test "$xen" = "yes" ; then
2373 feature_not_found "xen" "Install xen devel"
2375 xen=no
2377 # Xen unstable
2378 elif
2379 cat > $TMPC <<EOF &&
2380 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2381 #define __XEN_TOOLS__
2382 #include <xendevicemodel.h>
2383 #include <xenforeignmemory.h>
2384 int main(void) {
2385 xendevicemodel_handle *xd;
2386 xenforeignmemory_handle *xfmem;
2388 xd = xendevicemodel_open(0, 0);
2389 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2391 xfmem = xenforeignmemory_open(0, 0);
2392 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2394 return 0;
2397 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2398 then
2399 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2400 xen_ctrl_version=41100
2401 xen=yes
2402 elif
2403 cat > $TMPC <<EOF &&
2404 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2405 #include <xenforeignmemory.h>
2406 #include <xentoolcore.h>
2407 int main(void) {
2408 xenforeignmemory_handle *xfmem;
2410 xfmem = xenforeignmemory_open(0, 0);
2411 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2412 xentoolcore_restrict_all(0);
2414 return 0;
2417 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2418 then
2419 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2420 xen_ctrl_version=41000
2421 xen=yes
2422 elif
2423 cat > $TMPC <<EOF &&
2424 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2425 #define __XEN_TOOLS__
2426 #include <xendevicemodel.h>
2427 int main(void) {
2428 xendevicemodel_handle *xd;
2430 xd = xendevicemodel_open(0, 0);
2431 xendevicemodel_close(xd);
2433 return 0;
2436 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2437 then
2438 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2439 xen_ctrl_version=40900
2440 xen=yes
2441 elif
2442 cat > $TMPC <<EOF &&
2444 * If we have stable libs the we don't want the libxc compat
2445 * layers, regardless of what CFLAGS we may have been given.
2447 * Also, check if xengnttab_grant_copy_segment_t is defined and
2448 * grant copy operation is implemented.
2450 #undef XC_WANT_COMPAT_EVTCHN_API
2451 #undef XC_WANT_COMPAT_GNTTAB_API
2452 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2453 #include <xenctrl.h>
2454 #include <xenstore.h>
2455 #include <xenevtchn.h>
2456 #include <xengnttab.h>
2457 #include <xenforeignmemory.h>
2458 #include <stdint.h>
2459 #include <xen/hvm/hvm_info_table.h>
2460 #if !defined(HVM_MAX_VCPUS)
2461 # error HVM_MAX_VCPUS not defined
2462 #endif
2463 int main(void) {
2464 xc_interface *xc = NULL;
2465 xenforeignmemory_handle *xfmem;
2466 xenevtchn_handle *xe;
2467 xengnttab_handle *xg;
2468 xen_domain_handle_t handle;
2469 xengnttab_grant_copy_segment_t* seg = NULL;
2471 xs_daemon_open();
2473 xc = xc_interface_open(0, 0, 0);
2474 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2475 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2476 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2477 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2478 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2480 xfmem = xenforeignmemory_open(0, 0);
2481 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2483 xe = xenevtchn_open(0, 0);
2484 xenevtchn_fd(xe);
2486 xg = xengnttab_open(0, 0);
2487 xengnttab_grant_copy(xg, 0, seg);
2489 return 0;
2492 compile_prog "" "$xen_libs $xen_stable_libs"
2493 then
2494 xen_ctrl_version=40800
2495 xen=yes
2496 elif
2497 cat > $TMPC <<EOF &&
2499 * If we have stable libs the we don't want the libxc compat
2500 * layers, regardless of what CFLAGS we may have been given.
2502 #undef XC_WANT_COMPAT_EVTCHN_API
2503 #undef XC_WANT_COMPAT_GNTTAB_API
2504 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2505 #include <xenctrl.h>
2506 #include <xenstore.h>
2507 #include <xenevtchn.h>
2508 #include <xengnttab.h>
2509 #include <xenforeignmemory.h>
2510 #include <stdint.h>
2511 #include <xen/hvm/hvm_info_table.h>
2512 #if !defined(HVM_MAX_VCPUS)
2513 # error HVM_MAX_VCPUS not defined
2514 #endif
2515 int main(void) {
2516 xc_interface *xc = NULL;
2517 xenforeignmemory_handle *xfmem;
2518 xenevtchn_handle *xe;
2519 xengnttab_handle *xg;
2520 xen_domain_handle_t handle;
2522 xs_daemon_open();
2524 xc = xc_interface_open(0, 0, 0);
2525 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2526 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2527 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2528 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2529 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2531 xfmem = xenforeignmemory_open(0, 0);
2532 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2534 xe = xenevtchn_open(0, 0);
2535 xenevtchn_fd(xe);
2537 xg = xengnttab_open(0, 0);
2538 xengnttab_map_grant_ref(xg, 0, 0, 0);
2540 return 0;
2543 compile_prog "" "$xen_libs $xen_stable_libs"
2544 then
2545 xen_ctrl_version=40701
2546 xen=yes
2547 elif
2548 cat > $TMPC <<EOF &&
2549 #include <xenctrl.h>
2550 #include <stdint.h>
2551 int main(void) {
2552 xc_interface *xc = NULL;
2553 xen_domain_handle_t handle;
2554 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2555 return 0;
2558 compile_prog "" "$xen_libs"
2559 then
2560 xen_ctrl_version=40700
2561 xen=yes
2563 # Xen 4.6
2564 elif
2565 cat > $TMPC <<EOF &&
2566 #include <xenctrl.h>
2567 #include <xenstore.h>
2568 #include <stdint.h>
2569 #include <xen/hvm/hvm_info_table.h>
2570 #if !defined(HVM_MAX_VCPUS)
2571 # error HVM_MAX_VCPUS not defined
2572 #endif
2573 int main(void) {
2574 xc_interface *xc;
2575 xs_daemon_open();
2576 xc = xc_interface_open(0, 0, 0);
2577 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2578 xc_gnttab_open(NULL, 0);
2579 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2580 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2581 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2582 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2583 return 0;
2586 compile_prog "" "$xen_libs"
2587 then
2588 xen_ctrl_version=40600
2589 xen=yes
2591 # Xen 4.5
2592 elif
2593 cat > $TMPC <<EOF &&
2594 #include <xenctrl.h>
2595 #include <xenstore.h>
2596 #include <stdint.h>
2597 #include <xen/hvm/hvm_info_table.h>
2598 #if !defined(HVM_MAX_VCPUS)
2599 # error HVM_MAX_VCPUS not defined
2600 #endif
2601 int main(void) {
2602 xc_interface *xc;
2603 xs_daemon_open();
2604 xc = xc_interface_open(0, 0, 0);
2605 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2606 xc_gnttab_open(NULL, 0);
2607 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2608 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2609 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2610 return 0;
2613 compile_prog "" "$xen_libs"
2614 then
2615 xen_ctrl_version=40500
2616 xen=yes
2618 elif
2619 cat > $TMPC <<EOF &&
2620 #include <xenctrl.h>
2621 #include <xenstore.h>
2622 #include <stdint.h>
2623 #include <xen/hvm/hvm_info_table.h>
2624 #if !defined(HVM_MAX_VCPUS)
2625 # error HVM_MAX_VCPUS not defined
2626 #endif
2627 int main(void) {
2628 xc_interface *xc;
2629 xs_daemon_open();
2630 xc = xc_interface_open(0, 0, 0);
2631 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2632 xc_gnttab_open(NULL, 0);
2633 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2634 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2635 return 0;
2638 compile_prog "" "$xen_libs"
2639 then
2640 xen_ctrl_version=40200
2641 xen=yes
2643 else
2644 if test "$xen" = "yes" ; then
2645 feature_not_found "xen (unsupported version)" \
2646 "Install a supported xen (xen 4.2 or newer)"
2648 xen=no
2651 if test "$xen" = yes; then
2652 if test $xen_ctrl_version -ge 40701 ; then
2653 libs_softmmu="$xen_stable_libs $libs_softmmu"
2655 libs_softmmu="$xen_libs $libs_softmmu"
2660 if test "$xen_pci_passthrough" != "no"; then
2661 if test "$xen" = "yes" && test "$linux" = "yes"; then
2662 xen_pci_passthrough=yes
2663 else
2664 if test "$xen_pci_passthrough" = "yes"; then
2665 error_exit "User requested feature Xen PCI Passthrough" \
2666 " but this feature requires /sys from Linux"
2668 xen_pci_passthrough=no
2672 if test "$xen_pv_domain_build" = "yes" &&
2673 test "$xen" != "yes"; then
2674 error_exit "User requested Xen PV domain builder support" \
2675 "which requires Xen support."
2678 ##########################################
2679 # Windows Hypervisor Platform accelerator (WHPX) check
2680 if test "$whpx" != "no" ; then
2681 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2682 whpx="yes"
2683 else
2684 if test "$whpx" = "yes"; then
2685 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2687 whpx="no"
2691 ##########################################
2692 # Sparse probe
2693 if test "$sparse" != "no" ; then
2694 if has cgcc; then
2695 sparse=yes
2696 else
2697 if test "$sparse" = "yes" ; then
2698 feature_not_found "sparse" "Install sparse binary"
2700 sparse=no
2704 ##########################################
2705 # X11 probe
2706 if $pkg_config --exists "x11"; then
2707 have_x11=yes
2708 x11_cflags=$($pkg_config --cflags x11)
2709 x11_libs=$($pkg_config --libs x11)
2712 ##########################################
2713 # GTK probe
2715 if test "$gtk" != "no"; then
2716 gtkpackage="gtk+-3.0"
2717 gtkx11package="gtk+-x11-3.0"
2718 gtkversion="3.14.0"
2719 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2720 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2721 gtk_libs=$($pkg_config --libs $gtkpackage)
2722 gtk_version=$($pkg_config --modversion $gtkpackage)
2723 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2724 need_x11=yes
2725 gtk_cflags="$gtk_cflags $x11_cflags"
2726 gtk_libs="$gtk_libs $x11_libs"
2728 gtk="yes"
2729 elif test "$gtk" = "yes"; then
2730 feature_not_found "gtk" "Install gtk3-devel"
2731 else
2732 gtk="no"
2737 ##########################################
2738 # GNUTLS probe
2740 if test "$gnutls" != "no"; then
2741 if $pkg_config --exists "gnutls >= 3.1.18"; then
2742 gnutls_cflags=$($pkg_config --cflags gnutls)
2743 gnutls_libs=$($pkg_config --libs gnutls)
2744 libs_softmmu="$gnutls_libs $libs_softmmu"
2745 libs_tools="$gnutls_libs $libs_tools"
2746 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2747 gnutls="yes"
2748 elif test "$gnutls" = "yes"; then
2749 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2750 else
2751 gnutls="no"
2756 # If user didn't give a --disable/enable-gcrypt flag,
2757 # then mark as disabled if user requested nettle
2758 # explicitly
2759 if test -z "$gcrypt"
2760 then
2761 if test "$nettle" = "yes"
2762 then
2763 gcrypt="no"
2767 # If user didn't give a --disable/enable-nettle flag,
2768 # then mark as disabled if user requested gcrypt
2769 # explicitly
2770 if test -z "$nettle"
2771 then
2772 if test "$gcrypt" = "yes"
2773 then
2774 nettle="no"
2778 has_libgcrypt() {
2779 if ! has "libgcrypt-config"
2780 then
2781 return 1
2784 if test -n "$cross_prefix"
2785 then
2786 host=$(libgcrypt-config --host)
2787 if test "$host-" != $cross_prefix
2788 then
2789 return 1
2793 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2794 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2796 if test $maj != 1 || test $min -lt 5
2797 then
2798 return 1
2801 return 0
2805 if test "$nettle" != "no"; then
2806 if $pkg_config --exists "nettle >= 2.7.1"; then
2807 nettle_cflags=$($pkg_config --cflags nettle)
2808 nettle_libs=$($pkg_config --libs nettle)
2809 nettle_version=$($pkg_config --modversion nettle)
2810 libs_softmmu="$nettle_libs $libs_softmmu"
2811 libs_tools="$nettle_libs $libs_tools"
2812 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2813 nettle="yes"
2815 if test -z "$gcrypt"; then
2816 gcrypt="no"
2818 else
2819 if test "$nettle" = "yes"; then
2820 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2821 else
2822 nettle="no"
2827 if test "$gcrypt" != "no"; then
2828 if has_libgcrypt; then
2829 gcrypt_cflags=$(libgcrypt-config --cflags)
2830 gcrypt_libs=$(libgcrypt-config --libs)
2831 # Debian has remove -lgpg-error from libgcrypt-config
2832 # as it "spreads unnecessary dependencies" which in
2833 # turn breaks static builds...
2834 if test "$static" = "yes"
2835 then
2836 gcrypt_libs="$gcrypt_libs -lgpg-error"
2838 libs_softmmu="$gcrypt_libs $libs_softmmu"
2839 libs_tools="$gcrypt_libs $libs_tools"
2840 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2841 gcrypt="yes"
2843 cat > $TMPC << EOF
2844 #include <gcrypt.h>
2845 int main(void) {
2846 gcry_mac_hd_t handle;
2847 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2848 GCRY_MAC_FLAG_SECURE, NULL);
2849 return 0;
2852 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2853 gcrypt_hmac=yes
2855 else
2856 if test "$gcrypt" = "yes"; then
2857 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2858 else
2859 gcrypt="no"
2865 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2866 then
2867 error_exit "Only one of gcrypt & nettle can be enabled"
2870 ##########################################
2871 # libtasn1 - only for the TLS creds/session test suite
2873 tasn1=yes
2874 tasn1_cflags=""
2875 tasn1_libs=""
2876 if $pkg_config --exists "libtasn1"; then
2877 tasn1_cflags=$($pkg_config --cflags libtasn1)
2878 tasn1_libs=$($pkg_config --libs libtasn1)
2879 else
2880 tasn1=no
2884 ##########################################
2885 # getifaddrs (for tests/test-io-channel-socket )
2887 have_ifaddrs_h=yes
2888 if ! check_include "ifaddrs.h" ; then
2889 have_ifaddrs_h=no
2892 ##########################################
2893 # VTE probe
2895 if test "$vte" != "no"; then
2896 vteminversion="0.32.0"
2897 if $pkg_config --exists "vte-2.91"; then
2898 vtepackage="vte-2.91"
2899 else
2900 vtepackage="vte-2.90"
2902 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2903 vte_cflags=$($pkg_config --cflags $vtepackage)
2904 vte_libs=$($pkg_config --libs $vtepackage)
2905 vteversion=$($pkg_config --modversion $vtepackage)
2906 vte="yes"
2907 elif test "$vte" = "yes"; then
2908 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2909 else
2910 vte="no"
2914 ##########################################
2915 # SDL probe
2917 # Look for sdl configuration program (pkg-config or sdl-config). Try
2918 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2920 sdl_probe ()
2922 sdl_too_old=no
2923 if test "$sdlabi" = ""; then
2924 if $pkg_config --exists "sdl2"; then
2925 sdlabi=2.0
2926 elif $pkg_config --exists "sdl"; then
2927 sdlabi=1.2
2928 else
2929 sdlabi=2.0
2933 if test $sdlabi = "2.0"; then
2934 sdl_config=$sdl2_config
2935 sdlname=sdl2
2936 sdlconfigname=sdl2_config
2937 elif test $sdlabi = "1.2"; then
2938 sdlname=sdl
2939 sdlconfigname=sdl_config
2940 else
2941 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2944 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2945 sdl_config=$sdlconfigname
2948 if $pkg_config $sdlname --exists; then
2949 sdlconfig="$pkg_config $sdlname"
2950 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2951 elif has ${sdl_config}; then
2952 sdlconfig="$sdl_config"
2953 sdlversion=$($sdlconfig --version)
2954 else
2955 if test "$sdl" = "yes" ; then
2956 feature_not_found "sdl" "Install SDL2-devel"
2958 sdl=no
2959 # no need to do the rest
2960 return
2962 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2963 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2966 cat > $TMPC << EOF
2967 #include <SDL.h>
2968 #undef main /* We don't want SDL to override our main() */
2969 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2971 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2972 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
2973 if test "$static" = "yes" ; then
2974 if $pkg_config $sdlname --exists; then
2975 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2976 else
2977 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2979 else
2980 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2982 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2983 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2984 sdl_too_old=yes
2985 else
2986 sdl=yes
2989 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2990 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2991 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2992 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2993 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2995 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2997 else
2998 sdl=no
3000 fi # static link
3001 else # sdl not found
3002 if test "$sdl" = "yes" ; then
3003 feature_not_found "sdl" "Install SDL devel"
3005 sdl=no
3006 fi # sdl compile test
3009 if test "$sdl" != "no" ; then
3010 sdl_probe
3013 if test "$sdl" = "yes" ; then
3014 cat > $TMPC <<EOF
3015 #include <SDL.h>
3016 #if defined(SDL_VIDEO_DRIVER_X11)
3017 #include <X11/XKBlib.h>
3018 #else
3019 #error No x11 support
3020 #endif
3021 int main(void) { return 0; }
3023 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3024 need_x11=yes
3025 sdl_cflags="$sdl_cflags $x11_cflags"
3026 sdl_libs="$sdl_libs $x11_libs"
3030 ##########################################
3031 # RDMA needs OpenFabrics libraries
3032 if test "$rdma" != "no" ; then
3033 cat > $TMPC <<EOF
3034 #include <rdma/rdma_cma.h>
3035 int main(void) { return 0; }
3037 rdma_libs="-lrdmacm -libverbs -libumad"
3038 if compile_prog "" "$rdma_libs" ; then
3039 rdma="yes"
3040 libs_softmmu="$libs_softmmu $rdma_libs"
3041 else
3042 if test "$rdma" = "yes" ; then
3043 error_exit \
3044 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3045 " Your options:" \
3046 " (1) Fast: Install infiniband packages (devel) from your distro." \
3047 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3048 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3050 rdma="no"
3054 ##########################################
3055 # PVRDMA detection
3057 cat > $TMPC <<EOF &&
3058 #include <sys/mman.h>
3061 main(void)
3063 char buf = 0;
3064 void *addr = &buf;
3065 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3067 return 0;
3071 if test "$rdma" = "yes" ; then
3072 case "$pvrdma" in
3074 if compile_prog "" ""; then
3075 pvrdma="yes"
3076 else
3077 pvrdma="no"
3080 "yes")
3081 if ! compile_prog "" ""; then
3082 error_exit "PVRDMA is not supported since mremap is not implemented"
3084 pvrdma="yes"
3086 "no")
3087 pvrdma="no"
3089 esac
3090 else
3091 if test "$pvrdma" = "yes" ; then
3092 error_exit "PVRDMA requires rdma suppport"
3094 pvrdma="no"
3097 ##########################################
3098 # VNC SASL detection
3099 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3100 cat > $TMPC <<EOF
3101 #include <sasl/sasl.h>
3102 #include <stdio.h>
3103 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3105 # Assuming Cyrus-SASL installed in /usr prefix
3106 vnc_sasl_cflags=""
3107 vnc_sasl_libs="-lsasl2"
3108 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3109 vnc_sasl=yes
3110 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3111 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3112 else
3113 if test "$vnc_sasl" = "yes" ; then
3114 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3116 vnc_sasl=no
3120 ##########################################
3121 # VNC JPEG detection
3122 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3123 if $pkg_config --exists libjpeg; then
3124 vnc_jpeg=yes
3125 libs_softmmu="$libs_softmmu $($pkg_config --libs libjpeg)"
3126 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libjpeg)"
3127 else
3128 cat > $TMPC <<EOF
3129 #include <stdio.h>
3130 #include <jpeglib.h>
3131 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3133 vnc_jpeg_cflags=""
3134 vnc_jpeg_libs="-ljpeg"
3135 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3136 vnc_jpeg=yes
3137 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3138 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3139 else
3140 if test "$vnc_jpeg" = "yes" ; then
3141 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3143 vnc_jpeg=no
3148 ##########################################
3149 # VNC PNG detection
3150 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3151 cat > $TMPC <<EOF
3152 //#include <stdio.h>
3153 #include <png.h>
3154 #include <stddef.h>
3155 int main(void) {
3156 png_structp png_ptr;
3157 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3158 return png_ptr != 0;
3161 if $pkg_config libpng --exists; then
3162 vnc_png_cflags=$($pkg_config libpng --cflags)
3163 vnc_png_libs=$($pkg_config libpng --libs)
3164 else
3165 vnc_png_cflags=""
3166 vnc_png_libs="-lpng"
3168 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3169 vnc_png=yes
3170 libs_softmmu="$vnc_png_libs $libs_softmmu"
3171 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3172 else
3173 if test "$vnc_png" = "yes" ; then
3174 feature_not_found "vnc-png" "Install libpng devel"
3176 vnc_png=no
3180 ##########################################
3181 # xkbcommon probe
3182 if test "$xkbcommon" != "no" ; then
3183 if $pkg_config xkbcommon --exists; then
3184 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3185 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3186 xkbcommon=yes
3187 else
3188 if test "$xkbcommon" = "yes" ; then
3189 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3191 xkbcommon=no
3195 ##########################################
3196 # fnmatch() probe, used for ACL routines
3197 fnmatch="no"
3198 cat > $TMPC << EOF
3199 #include <fnmatch.h>
3200 int main(void)
3202 fnmatch("foo", "foo", 0);
3203 return 0;
3206 if compile_prog "" "" ; then
3207 fnmatch="yes"
3210 ##########################################
3211 # xfsctl() probe, used for file-posix.c
3212 if test "$xfs" != "no" ; then
3213 cat > $TMPC << EOF
3214 #include <stddef.h> /* NULL */
3215 #include <xfs/xfs.h>
3216 int main(void)
3218 xfsctl(NULL, 0, 0, NULL);
3219 return 0;
3222 if compile_prog "" "" ; then
3223 xfs="yes"
3224 else
3225 if test "$xfs" = "yes" ; then
3226 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3228 xfs=no
3232 ##########################################
3233 # vde libraries probe
3234 if test "$vde" != "no" ; then
3235 vde_libs="-lvdeplug"
3236 cat > $TMPC << EOF
3237 #include <stddef.h>
3238 #include <libvdeplug.h>
3239 int main(void)
3241 struct vde_open_args a = {0, 0, 0};
3242 char s[] = "";
3243 vde_open(s, s, &a);
3244 return 0;
3247 if compile_prog "" "$vde_libs" ; then
3248 vde=yes
3249 else
3250 if test "$vde" = "yes" ; then
3251 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3253 vde=no
3257 ##########################################
3258 # netmap support probe
3259 # Apart from looking for netmap headers, we make sure that the host API version
3260 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3261 # a minor/major version number. Minor new features will be marked with values up
3262 # to 15, and if something happens that requires a change to the backend we will
3263 # move above 15, submit the backend fixes and modify this two bounds.
3264 if test "$netmap" != "no" ; then
3265 cat > $TMPC << EOF
3266 #include <inttypes.h>
3267 #include <net/if.h>
3268 #include <net/netmap.h>
3269 #include <net/netmap_user.h>
3270 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3271 #error
3272 #endif
3273 int main(void) { return 0; }
3275 if compile_prog "" "" ; then
3276 netmap=yes
3277 else
3278 if test "$netmap" = "yes" ; then
3279 feature_not_found "netmap"
3281 netmap=no
3285 ##########################################
3286 # libcap-ng library probe
3287 if test "$cap_ng" != "no" ; then
3288 cap_libs="-lcap-ng"
3289 cat > $TMPC << EOF
3290 #include <cap-ng.h>
3291 int main(void)
3293 capng_capability_to_name(CAPNG_EFFECTIVE);
3294 return 0;
3297 if compile_prog "" "$cap_libs" ; then
3298 cap_ng=yes
3299 libs_tools="$cap_libs $libs_tools"
3300 else
3301 if test "$cap_ng" = "yes" ; then
3302 feature_not_found "cap_ng" "Install libcap-ng devel"
3304 cap_ng=no
3308 ##########################################
3309 # Sound support libraries probe
3311 audio_drv_probe()
3313 drv=$1
3314 hdr=$2
3315 lib=$3
3316 exp=$4
3317 cfl=$5
3318 cat > $TMPC << EOF
3319 #include <$hdr>
3320 int main(void) { $exp }
3322 if compile_prog "$cfl" "$lib" ; then
3324 else
3325 error_exit "$drv check failed" \
3326 "Make sure to have the $drv libs and headers installed."
3330 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3331 for drv in $audio_drv_list; do
3332 case $drv in
3333 alsa)
3334 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3335 "return snd_pcm_close((snd_pcm_t *)0);"
3336 alsa_libs="-lasound"
3340 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3341 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3342 pulse_libs="-lpulse"
3343 audio_pt_int="yes"
3346 sdl)
3347 if test "$sdl" = "no"; then
3348 error_exit "sdl not found or disabled, can not use sdl audio driver"
3352 coreaudio)
3353 coreaudio_libs="-framework CoreAudio"
3356 dsound)
3357 dsound_libs="-lole32 -ldxguid"
3358 audio_win_int="yes"
3361 oss)
3362 oss_libs="$oss_lib"
3365 wav)
3366 # XXX: Probes for CoreAudio, DirectSound
3370 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3371 error_exit "Unknown driver '$drv' selected" \
3372 "Possible drivers are: $audio_possible_drivers"
3375 esac
3376 done
3378 ##########################################
3379 # BrlAPI probe
3381 if test "$brlapi" != "no" ; then
3382 brlapi_libs="-lbrlapi"
3383 cat > $TMPC << EOF
3384 #include <brlapi.h>
3385 #include <stddef.h>
3386 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3388 if compile_prog "" "$brlapi_libs" ; then
3389 brlapi=yes
3390 else
3391 if test "$brlapi" = "yes" ; then
3392 feature_not_found "brlapi" "Install brlapi devel"
3394 brlapi=no
3398 ##########################################
3399 # curses probe
3400 if test "$curses" != "no" ; then
3401 if test "$mingw32" = "yes" ; then
3402 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3403 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3404 else
3405 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3406 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3408 curses_found=no
3409 cat > $TMPC << EOF
3410 #include <locale.h>
3411 #include <curses.h>
3412 #include <wchar.h>
3413 int main(void) {
3414 wchar_t wch = L'w';
3415 setlocale(LC_ALL, "");
3416 resize_term(0, 0);
3417 addwstr(L"wide chars\n");
3418 addnwstr(&wch, 1);
3419 add_wch(WACS_DEGREE);
3420 return 0;
3423 IFS=:
3424 for curses_inc in $curses_inc_list; do
3425 # Make sure we get the wide character prototypes
3426 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3427 IFS=:
3428 for curses_lib in $curses_lib_list; do
3429 unset IFS
3430 if compile_prog "$curses_inc" "$curses_lib" ; then
3431 curses_found=yes
3432 break
3434 done
3435 if test "$curses_found" = yes ; then
3436 break
3438 done
3439 unset IFS
3440 if test "$curses_found" = "yes" ; then
3441 curses=yes
3442 else
3443 if test "$curses" = "yes" ; then
3444 feature_not_found "curses" "Install ncurses devel"
3446 curses=no
3450 ##########################################
3451 # curl probe
3452 if test "$curl" != "no" ; then
3453 if $pkg_config libcurl --exists; then
3454 curlconfig="$pkg_config libcurl"
3455 else
3456 curlconfig=curl-config
3458 cat > $TMPC << EOF
3459 #include <curl/curl.h>
3460 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3462 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3463 curl_libs=$($curlconfig --libs 2>/dev/null)
3464 if compile_prog "$curl_cflags" "$curl_libs" ; then
3465 curl=yes
3466 else
3467 if test "$curl" = "yes" ; then
3468 feature_not_found "curl" "Install libcurl devel"
3470 curl=no
3472 fi # test "$curl"
3474 ##########################################
3475 # bluez support probe
3476 if test "$bluez" != "no" ; then
3477 cat > $TMPC << EOF
3478 #include <bluetooth/bluetooth.h>
3479 int main(void) { return bt_error(0); }
3481 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3482 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3483 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3484 bluez=yes
3485 libs_softmmu="$bluez_libs $libs_softmmu"
3486 else
3487 if test "$bluez" = "yes" ; then
3488 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3490 bluez="no"
3494 ##########################################
3495 # glib support probe
3497 glib_req_ver=2.40
3498 glib_modules=gthread-2.0
3499 if test "$modules" = yes; then
3500 glib_modules="$glib_modules gmodule-export-2.0"
3503 # This workaround is required due to a bug in pkg-config file for glib as it
3504 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3506 if test "$static" = yes -a "$mingw32" = yes; then
3507 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3510 for i in $glib_modules; do
3511 if $pkg_config --atleast-version=$glib_req_ver $i; then
3512 glib_cflags=$($pkg_config --cflags $i)
3513 glib_libs=$($pkg_config --libs $i)
3514 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3515 LIBS="$glib_libs $LIBS"
3516 libs_qga="$glib_libs $libs_qga"
3517 else
3518 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3520 done
3522 # Sanity check that the current size_t matches the
3523 # size that glib thinks it should be. This catches
3524 # problems on multi-arch where people try to build
3525 # 32-bit QEMU while pointing at 64-bit glib headers
3526 cat > $TMPC <<EOF
3527 #include <glib.h>
3528 #include <unistd.h>
3530 #define QEMU_BUILD_BUG_ON(x) \
3531 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3533 int main(void) {
3534 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3535 return 0;
3539 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3540 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3541 "You probably need to set PKG_CONFIG_LIBDIR"\
3542 "to point to the right pkg-config files for your"\
3543 "build target"
3546 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3547 cat > $TMPC << EOF
3548 #include <glib.h>
3549 int main(void) { return 0; }
3551 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3552 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3553 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3554 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3558 #########################################
3559 # zlib check
3561 if test "$zlib" != "no" ; then
3562 if $pkg_config --exists zlib; then
3563 zlib_cflags=$($pkg_config --cflags zlib)
3564 zlib_libs=$($pkg_config --libs zlib)
3565 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3566 LIBS="$zlib_libs $LIBS"
3567 else
3568 cat > $TMPC << EOF
3569 #include <zlib.h>
3570 int main(void) { zlibVersion(); return 0; }
3572 if compile_prog "" "-lz" ; then
3573 LIBS="$LIBS -lz"
3574 else
3575 error_exit "zlib check failed" \
3576 "Make sure to have the zlib libs and headers installed."
3581 ##########################################
3582 # SHA command probe for modules
3583 if test "$modules" = yes; then
3584 shacmd_probe="sha1sum sha1 shasum"
3585 for c in $shacmd_probe; do
3586 if has $c; then
3587 shacmd="$c"
3588 break
3590 done
3591 if test "$shacmd" = ""; then
3592 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3596 ##########################################
3597 # pixman support probe
3599 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3600 pixman_cflags=
3601 pixman_libs=
3602 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3603 pixman_cflags=$($pkg_config --cflags pixman-1)
3604 pixman_libs=$($pkg_config --libs pixman-1)
3605 else
3606 error_exit "pixman >= 0.21.8 not present." \
3607 "Please install the pixman devel package."
3610 ##########################################
3611 # libmpathpersist probe
3613 if test "$mpath" != "no" ; then
3614 # probe for the new API
3615 cat > $TMPC <<EOF
3616 #include <libudev.h>
3617 #include <mpath_persist.h>
3618 unsigned mpath_mx_alloc_len = 1024;
3619 int logsink;
3620 static struct config *multipath_conf;
3621 extern struct udev *udev;
3622 extern struct config *get_multipath_config(void);
3623 extern void put_multipath_config(struct config *conf);
3624 struct udev *udev;
3625 struct config *get_multipath_config(void) { return multipath_conf; }
3626 void put_multipath_config(struct config *conf) { }
3628 int main(void) {
3629 udev = udev_new();
3630 multipath_conf = mpath_lib_init();
3631 return 0;
3634 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3635 mpathpersist=yes
3636 mpathpersist_new_api=yes
3637 else
3638 # probe for the old API
3639 cat > $TMPC <<EOF
3640 #include <libudev.h>
3641 #include <mpath_persist.h>
3642 unsigned mpath_mx_alloc_len = 1024;
3643 int logsink;
3644 int main(void) {
3645 struct udev *udev = udev_new();
3646 mpath_lib_init(udev);
3647 return 0;
3650 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3651 mpathpersist=yes
3652 mpathpersist_new_api=no
3653 else
3654 mpathpersist=no
3657 else
3658 mpathpersist=no
3661 ##########################################
3662 # libcap probe
3664 if test "$cap" != "no" ; then
3665 cat > $TMPC <<EOF
3666 #include <stdio.h>
3667 #include <sys/capability.h>
3668 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3670 if compile_prog "" "-lcap" ; then
3671 cap=yes
3672 else
3673 cap=no
3677 ##########################################
3678 # pthread probe
3679 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3681 pthread=no
3682 cat > $TMPC << EOF
3683 #include <pthread.h>
3684 static void *f(void *p) { return NULL; }
3685 int main(void) {
3686 pthread_t thread;
3687 pthread_create(&thread, 0, f, 0);
3688 return 0;
3691 if compile_prog "" "" ; then
3692 pthread=yes
3693 else
3694 for pthread_lib in $PTHREADLIBS_LIST; do
3695 if compile_prog "" "$pthread_lib" ; then
3696 pthread=yes
3697 found=no
3698 for lib_entry in $LIBS; do
3699 if test "$lib_entry" = "$pthread_lib"; then
3700 found=yes
3701 break
3703 done
3704 if test "$found" = "no"; then
3705 LIBS="$pthread_lib $LIBS"
3706 libs_qga="$pthread_lib $libs_qga"
3708 PTHREAD_LIB="$pthread_lib"
3709 break
3711 done
3714 if test "$mingw32" != yes -a "$pthread" = no; then
3715 error_exit "pthread check failed" \
3716 "Make sure to have the pthread libs and headers installed."
3719 # check for pthread_setname_np
3720 pthread_setname_np=no
3721 cat > $TMPC << EOF
3722 #include <pthread.h>
3724 static void *f(void *p) { return NULL; }
3725 int main(void)
3727 pthread_t thread;
3728 pthread_create(&thread, 0, f, 0);
3729 pthread_setname_np(thread, "QEMU");
3730 return 0;
3733 if compile_prog "" "$pthread_lib" ; then
3734 pthread_setname_np=yes
3737 ##########################################
3738 # rbd probe
3739 if test "$rbd" != "no" ; then
3740 cat > $TMPC <<EOF
3741 #include <stdio.h>
3742 #include <rbd/librbd.h>
3743 int main(void) {
3744 rados_t cluster;
3745 rados_create(&cluster, NULL);
3746 return 0;
3749 rbd_libs="-lrbd -lrados"
3750 if compile_prog "" "$rbd_libs" ; then
3751 rbd=yes
3752 else
3753 if test "$rbd" = "yes" ; then
3754 feature_not_found "rados block device" "Install librbd/ceph devel"
3756 rbd=no
3760 ##########################################
3761 # libssh2 probe
3762 min_libssh2_version=1.2.8
3763 if test "$libssh2" != "no" ; then
3764 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3765 libssh2_cflags=$($pkg_config libssh2 --cflags)
3766 libssh2_libs=$($pkg_config libssh2 --libs)
3767 libssh2=yes
3768 else
3769 if test "$libssh2" = "yes" ; then
3770 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3772 libssh2=no
3776 ##########################################
3777 # libssh2_sftp_fsync probe
3779 if test "$libssh2" = "yes"; then
3780 cat > $TMPC <<EOF
3781 #include <stdio.h>
3782 #include <libssh2.h>
3783 #include <libssh2_sftp.h>
3784 int main(void) {
3785 LIBSSH2_SESSION *session;
3786 LIBSSH2_SFTP *sftp;
3787 LIBSSH2_SFTP_HANDLE *sftp_handle;
3788 session = libssh2_session_init ();
3789 sftp = libssh2_sftp_init (session);
3790 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3791 libssh2_sftp_fsync (sftp_handle);
3792 return 0;
3795 # libssh2_cflags/libssh2_libs defined in previous test.
3796 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3797 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3801 ##########################################
3802 # linux-aio probe
3804 if test "$linux_aio" != "no" ; then
3805 cat > $TMPC <<EOF
3806 #include <libaio.h>
3807 #include <sys/eventfd.h>
3808 #include <stddef.h>
3809 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3811 if compile_prog "" "-laio" ; then
3812 linux_aio=yes
3813 else
3814 if test "$linux_aio" = "yes" ; then
3815 feature_not_found "linux AIO" "Install libaio devel"
3817 linux_aio=no
3821 ##########################################
3822 # TPM passthrough is only on x86 Linux
3824 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3825 tpm_passthrough=$tpm
3826 else
3827 tpm_passthrough=no
3830 # TPM emulator is for all posix systems
3831 if test "$mingw32" != "yes"; then
3832 tpm_emulator=$tpm
3833 else
3834 tpm_emulator=no
3836 ##########################################
3837 # attr probe
3839 if test "$attr" != "no" ; then
3840 cat > $TMPC <<EOF
3841 #include <stdio.h>
3842 #include <sys/types.h>
3843 #ifdef CONFIG_LIBATTR
3844 #include <attr/xattr.h>
3845 #else
3846 #include <sys/xattr.h>
3847 #endif
3848 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3850 if compile_prog "" "" ; then
3851 attr=yes
3852 # Older distros have <attr/xattr.h>, and need -lattr:
3853 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3854 attr=yes
3855 LIBS="-lattr $LIBS"
3856 libattr=yes
3857 else
3858 if test "$attr" = "yes" ; then
3859 feature_not_found "ATTR" "Install libc6 or libattr devel"
3861 attr=no
3865 ##########################################
3866 # iovec probe
3867 cat > $TMPC <<EOF
3868 #include <sys/types.h>
3869 #include <sys/uio.h>
3870 #include <unistd.h>
3871 int main(void) { return sizeof(struct iovec); }
3873 iovec=no
3874 if compile_prog "" "" ; then
3875 iovec=yes
3878 ##########################################
3879 # preadv probe
3880 cat > $TMPC <<EOF
3881 #include <sys/types.h>
3882 #include <sys/uio.h>
3883 #include <unistd.h>
3884 int main(void) { return preadv(0, 0, 0, 0); }
3886 preadv=no
3887 if compile_prog "" "" ; then
3888 preadv=yes
3891 ##########################################
3892 # fdt probe
3893 # fdt support is mandatory for at least some target architectures,
3894 # so insist on it if we're building those system emulators.
3895 fdt_required=no
3896 for target in $target_list; do
3897 case $target in
3898 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3899 fdt_required=yes
3901 esac
3902 done
3904 if test "$fdt_required" = "yes"; then
3905 if test "$fdt" = "no"; then
3906 error_exit "fdt disabled but some requested targets require it." \
3907 "You can turn off fdt only if you also disable all the system emulation" \
3908 "targets which need it (by specifying a cut down --target-list)."
3910 fdt=yes
3913 if test "$fdt" != "no" ; then
3914 fdt_libs="-lfdt"
3915 # explicitly check for libfdt_env.h as it is missing in some stable installs
3916 # and test for required functions to make sure we are on a version >= 1.4.2
3917 cat > $TMPC << EOF
3918 #include <libfdt.h>
3919 #include <libfdt_env.h>
3920 int main(void) { fdt_first_subnode(0, 0); return 0; }
3922 if compile_prog "" "$fdt_libs" ; then
3923 # system DTC is good - use it
3924 fdt=system
3925 else
3926 # have GIT checkout, so activate dtc submodule
3927 if test -e "${source_path}/.git" ; then
3928 git_submodules="${git_submodules} dtc"
3930 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3931 fdt=git
3932 mkdir -p dtc
3933 if [ "$pwd_is_source_path" != "y" ] ; then
3934 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3935 symlink "$source_path/dtc/scripts" "dtc/scripts"
3937 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3938 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3939 fdt_libs="$fdt_libs"
3940 elif test "$fdt" = "yes" ; then
3941 # Not a git build & no libfdt found, prompt for system install
3942 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3943 "Please install the DTC (libfdt) devel package"
3944 else
3945 # don't have and don't want
3946 fdt_libs=
3947 fdt=no
3952 libs_softmmu="$libs_softmmu $fdt_libs"
3954 ##########################################
3955 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3957 if test "$opengl" != "no" ; then
3958 opengl_pkgs="epoxy gbm"
3959 if $pkg_config $opengl_pkgs; then
3960 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3961 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3962 opengl=yes
3963 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3964 gtk_gl="yes"
3966 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3967 else
3968 if test "$opengl" = "yes" ; then
3969 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3971 opengl_cflags=""
3972 opengl_libs=""
3973 opengl=no
3977 if test "$opengl" = "yes"; then
3978 cat > $TMPC << EOF
3979 #include <epoxy/egl.h>
3980 #ifndef EGL_MESA_image_dma_buf_export
3981 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3982 #endif
3983 int main(void) { return 0; }
3985 if compile_prog "" "" ; then
3986 opengl_dmabuf=yes
3990 ##########################################
3991 # libxml2 probe
3992 if test "$libxml2" != "no" ; then
3993 if $pkg_config --exists libxml-2.0; then
3994 libxml2="yes"
3995 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3996 libxml2_libs=$($pkg_config --libs libxml-2.0)
3997 else
3998 if test "$libxml2" = "yes"; then
3999 feature_not_found "libxml2" "Install libxml2 devel"
4001 libxml2="no"
4005 ##########################################
4006 # glusterfs probe
4007 if test "$glusterfs" != "no" ; then
4008 if $pkg_config --atleast-version=3 glusterfs-api; then
4009 glusterfs="yes"
4010 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4011 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4012 if $pkg_config --atleast-version=4 glusterfs-api; then
4013 glusterfs_xlator_opt="yes"
4015 if $pkg_config --atleast-version=5 glusterfs-api; then
4016 glusterfs_discard="yes"
4018 if $pkg_config --atleast-version=6 glusterfs-api; then
4019 glusterfs_fallocate="yes"
4020 glusterfs_zerofill="yes"
4022 else
4023 if test "$glusterfs" = "yes" ; then
4024 feature_not_found "GlusterFS backend support" \
4025 "Install glusterfs-api devel >= 3"
4027 glusterfs="no"
4031 # Check for inotify functions when we are building linux-user
4032 # emulator. This is done because older glibc versions don't
4033 # have syscall stubs for these implemented. In that case we
4034 # don't provide them even if kernel supports them.
4036 inotify=no
4037 cat > $TMPC << EOF
4038 #include <sys/inotify.h>
4041 main(void)
4043 /* try to start inotify */
4044 return inotify_init();
4047 if compile_prog "" "" ; then
4048 inotify=yes
4051 inotify1=no
4052 cat > $TMPC << EOF
4053 #include <sys/inotify.h>
4056 main(void)
4058 /* try to start inotify */
4059 return inotify_init1(0);
4062 if compile_prog "" "" ; then
4063 inotify1=yes
4066 # check if pipe2 is there
4067 pipe2=no
4068 cat > $TMPC << EOF
4069 #include <unistd.h>
4070 #include <fcntl.h>
4072 int main(void)
4074 int pipefd[2];
4075 return pipe2(pipefd, O_CLOEXEC);
4078 if compile_prog "" "" ; then
4079 pipe2=yes
4082 # check if accept4 is there
4083 accept4=no
4084 cat > $TMPC << EOF
4085 #include <sys/socket.h>
4086 #include <stddef.h>
4088 int main(void)
4090 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4091 return 0;
4094 if compile_prog "" "" ; then
4095 accept4=yes
4098 # check if tee/splice is there. vmsplice was added same time.
4099 splice=no
4100 cat > $TMPC << EOF
4101 #include <unistd.h>
4102 #include <fcntl.h>
4103 #include <limits.h>
4105 int main(void)
4107 int len, fd = 0;
4108 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4109 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4110 return 0;
4113 if compile_prog "" "" ; then
4114 splice=yes
4117 ##########################################
4118 # libnuma probe
4120 if test "$numa" != "no" ; then
4121 cat > $TMPC << EOF
4122 #include <numa.h>
4123 int main(void) { return numa_available(); }
4126 if compile_prog "" "-lnuma" ; then
4127 numa=yes
4128 libs_softmmu="-lnuma $libs_softmmu"
4129 else
4130 if test "$numa" = "yes" ; then
4131 feature_not_found "numa" "install numactl devel"
4133 numa=no
4137 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4138 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4139 exit 1
4142 # Even if malloc_trim() is available, these non-libc memory allocators
4143 # do not support it.
4144 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4145 if test "$malloc_trim" = "yes" ; then
4146 echo "Disabling malloc_trim with non-libc memory allocator"
4148 malloc_trim="no"
4151 #######################################
4152 # malloc_trim
4154 if test "$malloc_trim" != "no" ; then
4155 cat > $TMPC << EOF
4156 #include <malloc.h>
4157 int main(void) { malloc_trim(0); return 0; }
4159 if compile_prog "" "" ; then
4160 malloc_trim="yes"
4161 else
4162 malloc_trim="no"
4166 ##########################################
4167 # tcmalloc probe
4169 if test "$tcmalloc" = "yes" ; then
4170 cat > $TMPC << EOF
4171 #include <stdlib.h>
4172 int main(void) { malloc(1); return 0; }
4175 if compile_prog "" "-ltcmalloc" ; then
4176 LIBS="-ltcmalloc $LIBS"
4177 else
4178 feature_not_found "tcmalloc" "install gperftools devel"
4182 ##########################################
4183 # jemalloc probe
4185 if test "$jemalloc" = "yes" ; then
4186 cat > $TMPC << EOF
4187 #include <stdlib.h>
4188 int main(void) { malloc(1); return 0; }
4191 if compile_prog "" "-ljemalloc" ; then
4192 LIBS="-ljemalloc $LIBS"
4193 else
4194 feature_not_found "jemalloc" "install jemalloc devel"
4198 ##########################################
4199 # signalfd probe
4200 signalfd="no"
4201 cat > $TMPC << EOF
4202 #include <unistd.h>
4203 #include <sys/syscall.h>
4204 #include <signal.h>
4205 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4208 if compile_prog "" "" ; then
4209 signalfd=yes
4212 # check if eventfd is supported
4213 eventfd=no
4214 cat > $TMPC << EOF
4215 #include <sys/eventfd.h>
4217 int main(void)
4219 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4222 if compile_prog "" "" ; then
4223 eventfd=yes
4226 # check if memfd is supported
4227 memfd=no
4228 cat > $TMPC << EOF
4229 #include <sys/mman.h>
4231 int main(void)
4233 return memfd_create("foo", MFD_ALLOW_SEALING);
4236 if compile_prog "" "" ; then
4237 memfd=yes
4240 # check for usbfs
4241 have_usbfs=no
4242 if test "$linux_user" = "yes"; then
4243 if check_include linux/usbdevice_fs.h; then
4244 have_usbfs=yes
4246 have_usbfs=yes
4249 # check for fallocate
4250 fallocate=no
4251 cat > $TMPC << EOF
4252 #include <fcntl.h>
4254 int main(void)
4256 fallocate(0, 0, 0, 0);
4257 return 0;
4260 if compile_prog "" "" ; then
4261 fallocate=yes
4264 # check for fallocate hole punching
4265 fallocate_punch_hole=no
4266 cat > $TMPC << EOF
4267 #include <fcntl.h>
4268 #include <linux/falloc.h>
4270 int main(void)
4272 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4273 return 0;
4276 if compile_prog "" "" ; then
4277 fallocate_punch_hole=yes
4280 # check that fallocate supports range zeroing inside the file
4281 fallocate_zero_range=no
4282 cat > $TMPC << EOF
4283 #include <fcntl.h>
4284 #include <linux/falloc.h>
4286 int main(void)
4288 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4289 return 0;
4292 if compile_prog "" "" ; then
4293 fallocate_zero_range=yes
4296 # check for posix_fallocate
4297 posix_fallocate=no
4298 cat > $TMPC << EOF
4299 #include <fcntl.h>
4301 int main(void)
4303 posix_fallocate(0, 0, 0);
4304 return 0;
4307 if compile_prog "" "" ; then
4308 posix_fallocate=yes
4311 # check for sync_file_range
4312 sync_file_range=no
4313 cat > $TMPC << EOF
4314 #include <fcntl.h>
4316 int main(void)
4318 sync_file_range(0, 0, 0, 0);
4319 return 0;
4322 if compile_prog "" "" ; then
4323 sync_file_range=yes
4326 # check for linux/fiemap.h and FS_IOC_FIEMAP
4327 fiemap=no
4328 cat > $TMPC << EOF
4329 #include <sys/ioctl.h>
4330 #include <linux/fs.h>
4331 #include <linux/fiemap.h>
4333 int main(void)
4335 ioctl(0, FS_IOC_FIEMAP, 0);
4336 return 0;
4339 if compile_prog "" "" ; then
4340 fiemap=yes
4343 # check for dup3
4344 dup3=no
4345 cat > $TMPC << EOF
4346 #include <unistd.h>
4348 int main(void)
4350 dup3(0, 0, 0);
4351 return 0;
4354 if compile_prog "" "" ; then
4355 dup3=yes
4358 # check for ppoll support
4359 ppoll=no
4360 cat > $TMPC << EOF
4361 #include <poll.h>
4363 int main(void)
4365 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4366 ppoll(&pfd, 1, 0, 0);
4367 return 0;
4370 if compile_prog "" "" ; then
4371 ppoll=yes
4374 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4375 prctl_pr_set_timerslack=no
4376 cat > $TMPC << EOF
4377 #include <sys/prctl.h>
4379 int main(void)
4381 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4382 return 0;
4385 if compile_prog "" "" ; then
4386 prctl_pr_set_timerslack=yes
4389 # check for epoll support
4390 epoll=no
4391 cat > $TMPC << EOF
4392 #include <sys/epoll.h>
4394 int main(void)
4396 epoll_create(0);
4397 return 0;
4400 if compile_prog "" "" ; then
4401 epoll=yes
4404 # epoll_create1 is a later addition
4405 # so we must check separately for its presence
4406 epoll_create1=no
4407 cat > $TMPC << EOF
4408 #include <sys/epoll.h>
4410 int main(void)
4412 /* Note that we use epoll_create1 as a value, not as
4413 * a function being called. This is necessary so that on
4414 * old SPARC glibc versions where the function was present in
4415 * the library but not declared in the header file we will
4416 * fail the configure check. (Otherwise we will get a compiler
4417 * warning but not an error, and will proceed to fail the
4418 * qemu compile where we compile with -Werror.)
4420 return (int)(uintptr_t)&epoll_create1;
4423 if compile_prog "" "" ; then
4424 epoll_create1=yes
4427 # check for sendfile support
4428 sendfile=no
4429 cat > $TMPC << EOF
4430 #include <sys/sendfile.h>
4432 int main(void)
4434 return sendfile(0, 0, 0, 0);
4437 if compile_prog "" "" ; then
4438 sendfile=yes
4441 # check for timerfd support (glibc 2.8 and newer)
4442 timerfd=no
4443 cat > $TMPC << EOF
4444 #include <sys/timerfd.h>
4446 int main(void)
4448 return(timerfd_create(CLOCK_REALTIME, 0));
4451 if compile_prog "" "" ; then
4452 timerfd=yes
4455 # check for setns and unshare support
4456 setns=no
4457 cat > $TMPC << EOF
4458 #include <sched.h>
4460 int main(void)
4462 int ret;
4463 ret = setns(0, 0);
4464 ret = unshare(0);
4465 return ret;
4468 if compile_prog "" "" ; then
4469 setns=yes
4472 # clock_adjtime probe
4473 clock_adjtime=no
4474 cat > $TMPC <<EOF
4475 #include <time.h>
4477 int main(void)
4479 return clock_adjtime(0, 0);
4482 clock_adjtime=no
4483 if compile_prog "" "" ; then
4484 clock_adjtime=yes
4487 # syncfs probe
4488 syncfs=no
4489 cat > $TMPC <<EOF
4490 #include <unistd.h>
4492 int main(void)
4494 return syncfs(0);
4497 syncfs=no
4498 if compile_prog "" "" ; then
4499 syncfs=yes
4502 # Check if tools are available to build documentation.
4503 if test "$docs" != "no" ; then
4504 if has makeinfo && has pod2man; then
4505 docs=yes
4506 else
4507 if test "$docs" = "yes" ; then
4508 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4510 docs=no
4514 # Search for bswap_32 function
4515 byteswap_h=no
4516 cat > $TMPC << EOF
4517 #include <byteswap.h>
4518 int main(void) { return bswap_32(0); }
4520 if compile_prog "" "" ; then
4521 byteswap_h=yes
4524 # Search for bswap32 function
4525 bswap_h=no
4526 cat > $TMPC << EOF
4527 #include <sys/endian.h>
4528 #include <sys/types.h>
4529 #include <machine/bswap.h>
4530 int main(void) { return bswap32(0); }
4532 if compile_prog "" "" ; then
4533 bswap_h=yes
4536 ##########################################
4537 # Do we have libiscsi >= 1.9.0
4538 if test "$libiscsi" != "no" ; then
4539 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4540 libiscsi="yes"
4541 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4542 libiscsi_libs=$($pkg_config --libs libiscsi)
4543 else
4544 if test "$libiscsi" = "yes" ; then
4545 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4547 libiscsi="no"
4551 ##########################################
4552 # Do we need libm
4553 cat > $TMPC << EOF
4554 #include <math.h>
4555 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4557 if compile_prog "" "" ; then
4559 elif compile_prog "" "-lm" ; then
4560 LIBS="-lm $LIBS"
4561 libs_qga="-lm $libs_qga"
4562 else
4563 error_exit "libm check failed"
4566 ##########################################
4567 # Do we need librt
4568 # uClibc provides 2 versions of clock_gettime(), one with realtime
4569 # support and one without. This means that the clock_gettime() don't
4570 # need -lrt. We still need it for timer_create() so we check for this
4571 # function in addition.
4572 cat > $TMPC <<EOF
4573 #include <signal.h>
4574 #include <time.h>
4575 int main(void) {
4576 timer_create(CLOCK_REALTIME, NULL, NULL);
4577 return clock_gettime(CLOCK_REALTIME, NULL);
4581 if compile_prog "" "" ; then
4583 # we need pthread for static linking. use previous pthread test result
4584 elif compile_prog "" "$pthread_lib -lrt" ; then
4585 LIBS="$LIBS -lrt"
4586 libs_qga="$libs_qga -lrt"
4589 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4590 "$haiku" != "yes" ; then
4591 libs_softmmu="-lutil $libs_softmmu"
4594 ##########################################
4595 # spice probe
4596 if test "$spice" != "no" ; then
4597 cat > $TMPC << EOF
4598 #include <spice.h>
4599 int main(void) { spice_server_new(); return 0; }
4601 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4602 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4603 if $pkg_config --atleast-version=0.12.0 spice-server && \
4604 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4605 compile_prog "$spice_cflags" "$spice_libs" ; then
4606 spice="yes"
4607 libs_softmmu="$libs_softmmu $spice_libs"
4608 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4609 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4610 spice_server_version=$($pkg_config --modversion spice-server)
4611 else
4612 if test "$spice" = "yes" ; then
4613 feature_not_found "spice" \
4614 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4616 spice="no"
4620 # check for smartcard support
4621 if test "$smartcard" != "no"; then
4622 if $pkg_config --atleast-version=2.5.1 libcacard; then
4623 libcacard_cflags=$($pkg_config --cflags libcacard)
4624 libcacard_libs=$($pkg_config --libs libcacard)
4625 smartcard="yes"
4626 else
4627 if test "$smartcard" = "yes"; then
4628 feature_not_found "smartcard" "Install libcacard devel"
4630 smartcard="no"
4634 # check for libusb
4635 if test "$libusb" != "no" ; then
4636 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4637 libusb="yes"
4638 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4639 libusb_libs=$($pkg_config --libs libusb-1.0)
4640 else
4641 if test "$libusb" = "yes"; then
4642 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4644 libusb="no"
4648 # check for usbredirparser for usb network redirection support
4649 if test "$usb_redir" != "no" ; then
4650 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4651 usb_redir="yes"
4652 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4653 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4654 else
4655 if test "$usb_redir" = "yes"; then
4656 feature_not_found "usb-redir" "Install usbredir devel"
4658 usb_redir="no"
4662 ##########################################
4663 # check if we have VSS SDK headers for win
4665 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4666 case "$vss_win32_sdk" in
4667 "") vss_win32_include="-isystem $source_path" ;;
4668 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4669 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4670 vss_win32_include="-isystem $source_path/.sdk/vss"
4671 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4673 *) vss_win32_include="-isystem $vss_win32_sdk"
4674 esac
4675 cat > $TMPC << EOF
4676 #define __MIDL_user_allocate_free_DEFINED__
4677 #include <inc/win2003/vss.h>
4678 int main(void) { return VSS_CTX_BACKUP; }
4680 if compile_prog "$vss_win32_include" "" ; then
4681 guest_agent_with_vss="yes"
4682 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4683 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4684 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4685 else
4686 if test "$vss_win32_sdk" != "" ; then
4687 echo "ERROR: Please download and install Microsoft VSS SDK:"
4688 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4689 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4690 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4691 echo "ERROR: The headers are extracted in the directory \`inc'."
4692 feature_not_found "VSS support"
4694 guest_agent_with_vss="no"
4698 ##########################################
4699 # lookup Windows platform SDK (if not specified)
4700 # The SDK is needed only to build .tlb (type library) file of guest agent
4701 # VSS provider from the source. It is usually unnecessary because the
4702 # pre-compiled .tlb file is included.
4704 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4705 if test -z "$win_sdk"; then
4706 programfiles="$PROGRAMFILES"
4707 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4708 if test -n "$programfiles"; then
4709 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4710 else
4711 feature_not_found "Windows SDK"
4713 elif test "$win_sdk" = "no"; then
4714 win_sdk=""
4718 ##########################################
4719 # check if mingw environment provides a recent ntddscsi.h
4720 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4721 cat > $TMPC << EOF
4722 #include <windows.h>
4723 #include <ntddscsi.h>
4724 int main(void) {
4725 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4726 #error Missing required ioctl definitions
4727 #endif
4728 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4729 return addr.Lun;
4732 if compile_prog "" "" ; then
4733 guest_agent_ntddscsi=yes
4734 libs_qga="-lsetupapi $libs_qga"
4738 ##########################################
4739 # virgl renderer probe
4741 if test "$virglrenderer" != "no" ; then
4742 cat > $TMPC << EOF
4743 #include <virglrenderer.h>
4744 int main(void) { virgl_renderer_poll(); return 0; }
4746 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4747 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4748 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4749 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4750 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4751 virglrenderer="yes"
4752 else
4753 if test "$virglrenderer" = "yes" ; then
4754 feature_not_found "virglrenderer"
4756 virglrenderer="no"
4760 ##########################################
4761 # capstone
4763 case "$capstone" in
4764 "" | yes)
4765 if $pkg_config capstone; then
4766 capstone=system
4767 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4768 capstone=git
4769 elif test -e "${source_path}/capstone/Makefile" ; then
4770 capstone=internal
4771 elif test -z "$capstone" ; then
4772 capstone=no
4773 else
4774 feature_not_found "capstone" "Install capstone devel or git submodule"
4778 system)
4779 if ! $pkg_config capstone; then
4780 feature_not_found "capstone" "Install capstone devel"
4783 esac
4785 case "$capstone" in
4786 git | internal)
4787 if test "$capstone" = git; then
4788 git_submodules="${git_submodules} capstone"
4790 mkdir -p capstone
4791 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4792 if test "$mingw32" = "yes"; then
4793 LIBCAPSTONE=capstone.lib
4794 else
4795 LIBCAPSTONE=libcapstone.a
4797 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4800 system)
4801 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4802 LIBS="$($pkg_config --libs capstone) $LIBS"
4808 error_exit "Unknown state for capstone: $capstone"
4810 esac
4812 ##########################################
4813 # check if we have fdatasync
4815 fdatasync=no
4816 cat > $TMPC << EOF
4817 #include <unistd.h>
4818 int main(void) {
4819 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4820 return fdatasync(0);
4821 #else
4822 #error Not supported
4823 #endif
4826 if compile_prog "" "" ; then
4827 fdatasync=yes
4830 ##########################################
4831 # check if we have madvise
4833 madvise=no
4834 cat > $TMPC << EOF
4835 #include <sys/types.h>
4836 #include <sys/mman.h>
4837 #include <stddef.h>
4838 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4840 if compile_prog "" "" ; then
4841 madvise=yes
4844 ##########################################
4845 # check if we have posix_madvise
4847 posix_madvise=no
4848 cat > $TMPC << EOF
4849 #include <sys/mman.h>
4850 #include <stddef.h>
4851 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4853 if compile_prog "" "" ; then
4854 posix_madvise=yes
4857 ##########################################
4858 # check if we have posix_memalign()
4860 posix_memalign=no
4861 cat > $TMPC << EOF
4862 #include <stdlib.h>
4863 int main(void) {
4864 void *p;
4865 return posix_memalign(&p, 8, 8);
4868 if compile_prog "" "" ; then
4869 posix_memalign=yes
4872 ##########################################
4873 # check if we have posix_syslog
4875 posix_syslog=no
4876 cat > $TMPC << EOF
4877 #include <syslog.h>
4878 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4880 if compile_prog "" "" ; then
4881 posix_syslog=yes
4884 ##########################################
4885 # check if we have sem_timedwait
4887 sem_timedwait=no
4888 cat > $TMPC << EOF
4889 #include <semaphore.h>
4890 int main(void) { return sem_timedwait(0, 0); }
4892 if compile_prog "" "" ; then
4893 sem_timedwait=yes
4896 ##########################################
4897 # check if we have strchrnul
4899 strchrnul=no
4900 cat > $TMPC << EOF
4901 #include <string.h>
4902 int main(void);
4903 // Use a haystack that the compiler shouldn't be able to constant fold
4904 char *haystack = (char*)&main;
4905 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4907 if compile_prog "" "" ; then
4908 strchrnul=yes
4911 ##########################################
4912 # check if trace backend exists
4914 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4915 if test "$?" -ne 0 ; then
4916 error_exit "invalid trace backends" \
4917 "Please choose supported trace backends."
4920 ##########################################
4921 # For 'ust' backend, test if ust headers are present
4922 if have_backend "ust"; then
4923 cat > $TMPC << EOF
4924 #include <lttng/tracepoint.h>
4925 int main(void) { return 0; }
4927 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4928 if $pkg_config lttng-ust --exists; then
4929 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4930 else
4931 lttng_ust_libs="-llttng-ust -ldl"
4933 if $pkg_config liburcu-bp --exists; then
4934 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4935 else
4936 urcu_bp_libs="-lurcu-bp"
4939 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4940 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4941 else
4942 error_exit "Trace backend 'ust' missing lttng-ust header files"
4946 ##########################################
4947 # For 'dtrace' backend, test if 'dtrace' command is present
4948 if have_backend "dtrace"; then
4949 if ! has 'dtrace' ; then
4950 error_exit "dtrace command is not found in PATH $PATH"
4952 trace_backend_stap="no"
4953 if has 'stap' ; then
4954 trace_backend_stap="yes"
4958 ##########################################
4959 # check and set a backend for coroutine
4961 # We prefer ucontext, but it's not always possible. The fallback
4962 # is sigcontext. On Windows the only valid backend is the Windows
4963 # specific one.
4965 ucontext_works=no
4966 if test "$darwin" != "yes"; then
4967 cat > $TMPC << EOF
4968 #include <ucontext.h>
4969 #ifdef __stub_makecontext
4970 #error Ignoring glibc stub makecontext which will always fail
4971 #endif
4972 int main(void) { makecontext(0, 0, 0); return 0; }
4974 if compile_prog "" "" ; then
4975 ucontext_works=yes
4979 if test "$coroutine" = ""; then
4980 if test "$mingw32" = "yes"; then
4981 coroutine=win32
4982 elif test "$ucontext_works" = "yes"; then
4983 coroutine=ucontext
4984 else
4985 coroutine=sigaltstack
4987 else
4988 case $coroutine in
4989 windows)
4990 if test "$mingw32" != "yes"; then
4991 error_exit "'windows' coroutine backend only valid for Windows"
4993 # Unfortunately the user visible backend name doesn't match the
4994 # coroutine-*.c filename for this case, so we have to adjust it here.
4995 coroutine=win32
4997 ucontext)
4998 if test "$ucontext_works" != "yes"; then
4999 feature_not_found "ucontext"
5002 sigaltstack)
5003 if test "$mingw32" = "yes"; then
5004 error_exit "only the 'windows' coroutine backend is valid for Windows"
5008 error_exit "unknown coroutine backend $coroutine"
5010 esac
5013 if test "$coroutine_pool" = ""; then
5014 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
5015 coroutine_pool=no
5016 else
5017 coroutine_pool=yes
5020 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
5021 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
5024 if test "$debug_stack_usage" = "yes"; then
5025 if test "$coroutine_pool" = "yes"; then
5026 echo "WARN: disabling coroutine pool for stack usage debugging"
5027 coroutine_pool=no
5032 ##########################################
5033 # check if we have open_by_handle_at
5035 open_by_handle_at=no
5036 cat > $TMPC << EOF
5037 #include <fcntl.h>
5038 #if !defined(AT_EMPTY_PATH)
5039 # error missing definition
5040 #else
5041 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5042 #endif
5044 if compile_prog "" "" ; then
5045 open_by_handle_at=yes
5048 ########################################
5049 # check if we have linux/magic.h
5051 linux_magic_h=no
5052 cat > $TMPC << EOF
5053 #include <linux/magic.h>
5054 int main(void) {
5055 return 0;
5058 if compile_prog "" "" ; then
5059 linux_magic_h=yes
5062 ########################################
5063 # check whether we can disable warning option with a pragma (this is needed
5064 # to silence warnings in the headers of some versions of external libraries).
5065 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5066 # only a warning.
5068 # If we can't selectively disable warning in the code, disable -Werror so that
5069 # the build doesn't fail anyway.
5071 pragma_disable_unused_but_set=no
5072 cat > $TMPC << EOF
5073 #pragma GCC diagnostic push
5074 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5075 #pragma GCC diagnostic pop
5077 int main(void) {
5078 return 0;
5081 if compile_prog "-Werror" "" ; then
5082 pragma_diagnostic_available=yes
5085 ########################################
5086 # check if we have valgrind/valgrind.h
5088 valgrind_h=no
5089 cat > $TMPC << EOF
5090 #include <valgrind/valgrind.h>
5091 int main(void) {
5092 return 0;
5095 if compile_prog "" "" ; then
5096 valgrind_h=yes
5099 ########################################
5100 # check if environ is declared
5102 has_environ=no
5103 cat > $TMPC << EOF
5104 #include <unistd.h>
5105 int main(void) {
5106 environ = 0;
5107 return 0;
5110 if compile_prog "" "" ; then
5111 has_environ=yes
5114 ########################################
5115 # check if cpuid.h is usable.
5117 cat > $TMPC << EOF
5118 #include <cpuid.h>
5119 int main(void) {
5120 unsigned a, b, c, d;
5121 int max = __get_cpuid_max(0, 0);
5123 if (max >= 1) {
5124 __cpuid(1, a, b, c, d);
5127 if (max >= 7) {
5128 __cpuid_count(7, 0, a, b, c, d);
5131 return 0;
5134 if compile_prog "" "" ; then
5135 cpuid_h=yes
5138 ##########################################
5139 # avx2 optimization requirement check
5141 # There is no point enabling this if cpuid.h is not usable,
5142 # since we won't be able to select the new routines.
5144 if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
5145 cat > $TMPC << EOF
5146 #pragma GCC push_options
5147 #pragma GCC target("avx2")
5148 #include <cpuid.h>
5149 #include <immintrin.h>
5150 static int bar(void *a) {
5151 __m256i x = *(__m256i *)a;
5152 return _mm256_testz_si256(x, x);
5154 int main(int argc, char *argv[]) { return bar(argv[0]); }
5156 if compile_object "" ; then
5157 avx2_opt="yes"
5158 else
5159 avx2_opt="no"
5163 ########################################
5164 # check if __[u]int128_t is usable.
5166 int128=no
5167 cat > $TMPC << EOF
5168 #if defined(__clang_major__) && defined(__clang_minor__)
5169 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5170 # error __int128_t does not work in CLANG before 3.2
5171 # endif
5172 #endif
5173 __int128_t a;
5174 __uint128_t b;
5175 int main (void) {
5176 a = a + b;
5177 b = a * b;
5178 a = a * a;
5179 return 0;
5182 if compile_prog "" "" ; then
5183 int128=yes
5186 #########################################
5187 # See if 128-bit atomic operations are supported.
5189 atomic128=no
5190 if test "$int128" = "yes"; then
5191 cat > $TMPC << EOF
5192 int main(void)
5194 unsigned __int128 x = 0, y = 0;
5195 y = __atomic_load_16(&x, 0);
5196 __atomic_store_16(&x, y, 0);
5197 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5198 return 0;
5201 if compile_prog "" "" ; then
5202 atomic128=yes
5206 cmpxchg128=no
5207 if test "$int128" = yes -a "$atomic128" = no; then
5208 cat > $TMPC << EOF
5209 int main(void)
5211 unsigned __int128 x = 0, y = 0;
5212 __sync_val_compare_and_swap_16(&x, y, x);
5213 return 0;
5216 if compile_prog "" "" ; then
5217 cmpxchg128=yes
5221 #########################################
5222 # See if 64-bit atomic operations are supported.
5223 # Note that without __atomic builtins, we can only
5224 # assume atomic loads/stores max at pointer size.
5226 cat > $TMPC << EOF
5227 #include <stdint.h>
5228 int main(void)
5230 uint64_t x = 0, y = 0;
5231 #ifdef __ATOMIC_RELAXED
5232 y = __atomic_load_8(&x, 0);
5233 __atomic_store_8(&x, y, 0);
5234 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5235 __atomic_exchange_8(&x, y, 0);
5236 __atomic_fetch_add_8(&x, y, 0);
5237 #else
5238 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5239 __sync_lock_test_and_set(&x, y);
5240 __sync_val_compare_and_swap(&x, y, 0);
5241 __sync_fetch_and_add(&x, y);
5242 #endif
5243 return 0;
5246 if compile_prog "" "" ; then
5247 atomic64=yes
5250 ########################################
5251 # See if 16-byte vector operations are supported.
5252 # Even without a vector unit the compiler may expand these.
5253 # There is a bug in old GCC for PPC that crashes here.
5254 # Unfortunately it's the system compiler for Centos 7.
5256 cat > $TMPC << EOF
5257 typedef unsigned char U1 __attribute__((vector_size(16)));
5258 typedef unsigned short U2 __attribute__((vector_size(16)));
5259 typedef unsigned int U4 __attribute__((vector_size(16)));
5260 typedef unsigned long long U8 __attribute__((vector_size(16)));
5261 typedef signed char S1 __attribute__((vector_size(16)));
5262 typedef signed short S2 __attribute__((vector_size(16)));
5263 typedef signed int S4 __attribute__((vector_size(16)));
5264 typedef signed long long S8 __attribute__((vector_size(16)));
5265 static U1 a1, b1;
5266 static U2 a2, b2;
5267 static U4 a4, b4;
5268 static U8 a8, b8;
5269 static S1 c1;
5270 static S2 c2;
5271 static S4 c4;
5272 static S8 c8;
5273 static int i;
5274 void helper(void *d, void *a, int shift, int i);
5275 void helper(void *d, void *a, int shift, int i)
5277 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5278 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5279 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5280 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5282 int main(void)
5284 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5285 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5286 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5287 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5288 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5289 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5290 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5291 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5292 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5293 return 0;
5297 vector16=no
5298 if compile_prog "" "" ; then
5299 vector16=yes
5302 ########################################
5303 # check if getauxval is available.
5305 getauxval=no
5306 cat > $TMPC << EOF
5307 #include <sys/auxv.h>
5308 int main(void) {
5309 return getauxval(AT_HWCAP) == 0;
5312 if compile_prog "" "" ; then
5313 getauxval=yes
5316 ########################################
5317 # check if ccache is interfering with
5318 # semantic analysis of macros
5320 unset CCACHE_CPP2
5321 ccache_cpp2=no
5322 cat > $TMPC << EOF
5323 static const int Z = 1;
5324 #define fn() ({ Z; })
5325 #define TAUT(X) ((X) == Z)
5326 #define PAREN(X, Y) (X == Y)
5327 #define ID(X) (X)
5328 int main(int argc, char *argv[])
5330 int x = 0, y = 0;
5331 x = ID(x);
5332 x = fn();
5333 fn();
5334 if (PAREN(x, y)) return 0;
5335 if (TAUT(Z)) return 0;
5336 return 0;
5340 if ! compile_object "-Werror"; then
5341 ccache_cpp2=yes
5344 #################################################
5345 # clang does not support glibc + FORTIFY_SOURCE.
5347 if test "$fortify_source" != "no"; then
5348 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5349 fortify_source="no";
5350 elif test -n "$cxx" && has $cxx &&
5351 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5352 fortify_source="no";
5353 else
5354 fortify_source="yes"
5358 ###############################################
5359 # Check if copy_file_range is provided by glibc
5360 have_copy_file_range=no
5361 cat > $TMPC << EOF
5362 #include <unistd.h>
5363 int main(void) {
5364 copy_file_range(0, NULL, 0, NULL, 0, 0);
5365 return 0;
5368 if compile_prog "" "" ; then
5369 have_copy_file_range=yes
5372 ##########################################
5373 # check if struct fsxattr is available via linux/fs.h
5375 have_fsxattr=no
5376 cat > $TMPC << EOF
5377 #include <linux/fs.h>
5378 struct fsxattr foo;
5379 int main(void) {
5380 return 0;
5383 if compile_prog "" "" ; then
5384 have_fsxattr=yes
5387 ##########################################
5388 # check for usable membarrier system call
5389 if test "$membarrier" = "yes"; then
5390 have_membarrier=no
5391 if test "$mingw32" = "yes" ; then
5392 have_membarrier=yes
5393 elif test "$linux" = "yes" ; then
5394 cat > $TMPC << EOF
5395 #include <linux/membarrier.h>
5396 #include <sys/syscall.h>
5397 #include <unistd.h>
5398 #include <stdlib.h>
5399 int main(void) {
5400 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5401 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5402 exit(0);
5405 if compile_prog "" "" ; then
5406 have_membarrier=yes
5409 if test "$have_membarrier" = "no"; then
5410 feature_not_found "membarrier" "membarrier system call not available"
5412 else
5413 # Do not enable it by default even for Mingw32, because it doesn't
5414 # work on Wine.
5415 membarrier=no
5418 ##########################################
5419 # check if rtnetlink.h exists and is useful
5420 have_rtnetlink=no
5421 cat > $TMPC << EOF
5422 #include <linux/rtnetlink.h>
5423 int main(void) {
5424 return IFLA_PROTO_DOWN;
5427 if compile_prog "" "" ; then
5428 have_rtnetlink=yes
5431 ##########################################
5432 # check for usable AF_VSOCK environment
5433 have_af_vsock=no
5434 cat > $TMPC << EOF
5435 #include <errno.h>
5436 #include <sys/types.h>
5437 #include <sys/socket.h>
5438 #if !defined(AF_VSOCK)
5439 # error missing AF_VSOCK flag
5440 #endif
5441 #include <linux/vm_sockets.h>
5442 int main(void) {
5443 int sock, ret;
5444 struct sockaddr_vm svm;
5445 socklen_t len = sizeof(svm);
5446 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5447 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5448 if ((ret == -1) && (errno == ENOTCONN)) {
5449 return 0;
5451 return -1;
5454 if compile_prog "" "" ; then
5455 have_af_vsock=yes
5458 ##########################################
5459 # check for usable AF_ALG environment
5460 hava_afalg=no
5461 cat > $TMPC << EOF
5462 #include <errno.h>
5463 #include <sys/types.h>
5464 #include <sys/socket.h>
5465 #include <linux/if_alg.h>
5466 int main(void) {
5467 int sock;
5468 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5469 return sock;
5472 if compile_prog "" "" ; then
5473 have_afalg=yes
5475 if test "$crypto_afalg" = "yes"
5476 then
5477 if test "$have_afalg" != "yes"
5478 then
5479 error_exit "AF_ALG requested but could not be detected"
5484 #################################################
5485 # Check to see if we have the Hypervisor framework
5486 if [ "$darwin" = "yes" ] ; then
5487 cat > $TMPC << EOF
5488 #include <Hypervisor/hv.h>
5489 int main() { return 0;}
5491 if ! compile_object ""; then
5492 hvf='no'
5493 else
5494 hvf='yes'
5495 LDFLAGS="-framework Hypervisor $LDFLAGS"
5499 #################################################
5500 # Sparc implicitly links with --relax, which is
5501 # incompatible with -r, so --no-relax should be
5502 # given. It does no harm to give it on other
5503 # platforms too.
5505 # Note: the prototype is needed since QEMU_CFLAGS
5506 # contains -Wmissing-prototypes
5507 cat > $TMPC << EOF
5508 extern int foo(void);
5509 int foo(void) { return 0; }
5511 if ! compile_object ""; then
5512 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5514 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5515 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5516 LD_REL_FLAGS=$i
5517 break
5519 done
5520 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5521 feature_not_found "modules" "Cannot find how to build relocatable objects"
5524 ##########################################
5525 # check for sysmacros.h
5527 have_sysmacros=no
5528 cat > $TMPC << EOF
5529 #include <sys/sysmacros.h>
5530 int main(void) {
5531 return makedev(0, 0);
5534 if compile_prog "" "" ; then
5535 have_sysmacros=yes
5538 ##########################################
5539 # Veritas HyperScale block driver VxHS
5540 # Check if libvxhs is installed
5542 if test "$vxhs" != "no" ; then
5543 cat > $TMPC <<EOF
5544 #include <stdint.h>
5545 #include <qnio/qnio_api.h>
5547 void *vxhs_callback;
5549 int main(void) {
5550 iio_init(QNIO_VERSION, vxhs_callback);
5551 return 0;
5554 vxhs_libs="-lvxhs -lssl"
5555 if compile_prog "" "$vxhs_libs" ; then
5556 vxhs=yes
5557 else
5558 if test "$vxhs" = "yes" ; then
5559 feature_not_found "vxhs block device" "Install libvxhs See github"
5561 vxhs=no
5565 ##########################################
5566 # check for _Static_assert()
5568 have_static_assert=no
5569 cat > $TMPC << EOF
5570 _Static_assert(1, "success");
5571 int main(void) {
5572 return 0;
5575 if compile_prog "" "" ; then
5576 have_static_assert=yes
5579 ##########################################
5580 # check for utmpx.h, it is missing e.g. on OpenBSD
5582 have_utmpx=no
5583 cat > $TMPC << EOF
5584 #include <utmpx.h>
5585 struct utmpx user_info;
5586 int main(void) {
5587 return 0;
5590 if compile_prog "" "" ; then
5591 have_utmpx=yes
5594 ##########################################
5595 # checks for sanitizers
5597 have_asan=no
5598 have_ubsan=no
5599 have_asan_iface_h=no
5600 have_asan_iface_fiber=no
5602 if test "$sanitizers" = "yes" ; then
5603 write_c_skeleton
5604 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5605 have_asan=yes
5608 # we could use a simple skeleton for flags checks, but this also
5609 # detect the static linking issue of ubsan, see also:
5610 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5611 cat > $TMPC << EOF
5612 #include <stdlib.h>
5613 int main(void) {
5614 void *tmp = malloc(10);
5615 return *(int *)(tmp + 2);
5618 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5619 have_ubsan=yes
5622 if check_include "sanitizer/asan_interface.h" ; then
5623 have_asan_iface_h=yes
5626 cat > $TMPC << EOF
5627 #include <sanitizer/asan_interface.h>
5628 int main(void) {
5629 __sanitizer_start_switch_fiber(0, 0, 0);
5630 return 0;
5633 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5634 have_asan_iface_fiber=yes
5638 ##########################################
5639 # Docker and cross-compiler support
5641 # This is specifically for building test
5642 # cases for foreign architectures, not
5643 # cross-compiling QEMU itself.
5645 if has "docker"; then
5646 docker=$($python $source_path/tests/docker/docker.py probe)
5649 ##########################################
5650 # check for libpmem
5652 if test "$libpmem" != "no"; then
5653 if $pkg_config --exists "libpmem"; then
5654 libpmem="yes"
5655 libpmem_libs=$($pkg_config --libs libpmem)
5656 libpmem_cflags=$($pkg_config --cflags libpmem)
5657 libs_softmmu="$libs_softmmu $libpmem_libs"
5658 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5659 else
5660 if test "$libpmem" = "yes" ; then
5661 feature_not_found "libpmem" "Install nvml or pmdk"
5663 libpmem="no"
5667 ##########################################
5668 # End of CC checks
5669 # After here, no more $cc or $ld runs
5671 write_c_skeleton
5673 if test "$gcov" = "yes" ; then
5674 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5675 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5676 elif test "$fortify_source" = "yes" ; then
5677 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5678 elif test "$debug" = "no"; then
5679 CFLAGS="-O2 $CFLAGS"
5682 if test "$have_asan" = "yes"; then
5683 CFLAGS="-fsanitize=address $CFLAGS"
5684 if test "$have_asan_iface_h" = "no" ; then
5685 echo "ASAN build enabled, but ASAN header missing." \
5686 "Without code annotation, the report may be inferior."
5687 elif test "$have_asan_iface_fiber" = "no" ; then
5688 echo "ASAN build enabled, but ASAN header is too old." \
5689 "Without code annotation, the report may be inferior."
5692 if test "$have_ubsan" = "yes"; then
5693 CFLAGS="-fsanitize=undefined $CFLAGS"
5696 ##########################################
5697 # Do we have libnfs
5698 if test "$libnfs" != "no" ; then
5699 if $pkg_config --atleast-version=1.9.3 libnfs; then
5700 libnfs="yes"
5701 libnfs_libs=$($pkg_config --libs libnfs)
5702 else
5703 if test "$libnfs" = "yes" ; then
5704 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5706 libnfs="no"
5710 ##########################################
5711 # Do we have libudev
5712 if test "$libudev" != "no" ; then
5713 if $pkg_config libudev && test "$static" != "yes"; then
5714 libudev="yes"
5715 libudev_libs=$($pkg_config --libs libudev)
5716 else
5717 libudev="no"
5721 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5722 if test "$werror" = "yes"; then
5723 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5726 if test "$solaris" = "no" ; then
5727 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5728 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5732 # test if pod2man has --utf8 option
5733 if pod2man --help | grep -q utf8; then
5734 POD2MAN="pod2man --utf8"
5735 else
5736 POD2MAN="pod2man"
5739 # Use large addresses, ASLR, no-SEH and DEP if available.
5740 if test "$mingw32" = "yes" ; then
5741 if test "$cpu" = i386; then
5742 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
5744 for flag in --dynamicbase --no-seh --nxcompat; do
5745 if ld_has $flag ; then
5746 LDFLAGS="-Wl,$flag $LDFLAGS"
5748 done
5751 qemu_confdir=$sysconfdir$confsuffix
5752 qemu_moddir=$libdir$confsuffix
5753 qemu_datadir=$datadir$confsuffix
5754 qemu_localedir="$datadir/locale"
5756 # We can only support ivshmem if we have eventfd
5757 if [ "$eventfd" = "yes" ]; then
5758 ivshmem=yes
5761 tools=""
5762 if test "$want_tools" = "yes" ; then
5763 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5764 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5765 tools="qemu-nbd\$(EXESUF) $tools"
5767 if [ "$ivshmem" = "yes" ]; then
5768 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5770 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5771 tools="elf2dmp $tools"
5774 if test "$softmmu" = yes ; then
5775 if test "$linux" = yes; then
5776 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5777 virtfs=yes
5778 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5779 else
5780 if test "$virtfs" = yes; then
5781 error_exit "VirtFS requires libcap devel and libattr devel"
5783 virtfs=no
5785 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5786 mpath=yes
5787 else
5788 if test "$mpath" = yes; then
5789 error_exit "Multipath requires libmpathpersist devel"
5791 mpath=no
5793 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5794 else
5795 if test "$virtfs" = yes; then
5796 error_exit "VirtFS is supported only on Linux"
5798 virtfs=no
5799 if test "$mpath" = yes; then
5800 error_exit "Multipath is supported only on Linux"
5802 mpath=no
5804 if test "$xkbcommon" = "yes"; then
5805 tools="qemu-keymap\$(EXESUF) $tools"
5809 # Probe for guest agent support/options
5811 if [ "$guest_agent" != "no" ]; then
5812 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5813 tools="qemu-ga $tools"
5814 guest_agent=yes
5815 elif [ "$guest_agent" != yes ]; then
5816 guest_agent=no
5817 else
5818 error_exit "Guest agent is not supported on this platform"
5822 # Guest agent Window MSI package
5824 if test "$guest_agent" != yes; then
5825 if test "$guest_agent_msi" = yes; then
5826 error_exit "MSI guest agent package requires guest agent enabled"
5828 guest_agent_msi=no
5829 elif test "$mingw32" != "yes"; then
5830 if test "$guest_agent_msi" = "yes"; then
5831 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5833 guest_agent_msi=no
5834 elif ! has wixl; then
5835 if test "$guest_agent_msi" = "yes"; then
5836 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5838 guest_agent_msi=no
5839 else
5840 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5841 # disabled explicitly
5842 if test "$guest_agent_msi" != "no"; then
5843 guest_agent_msi=yes
5847 if test "$guest_agent_msi" = "yes"; then
5848 if test "$guest_agent_with_vss" = "yes"; then
5849 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5852 if test "$QEMU_GA_MANUFACTURER" = ""; then
5853 QEMU_GA_MANUFACTURER=QEMU
5856 if test "$QEMU_GA_DISTRO" = ""; then
5857 QEMU_GA_DISTRO=Linux
5860 if test "$QEMU_GA_VERSION" = ""; then
5861 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5864 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5866 case "$cpu" in
5867 x86_64)
5868 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5870 i386)
5871 QEMU_GA_MSI_ARCH="-D Arch=32"
5874 error_exit "CPU $cpu not supported for building installation package"
5876 esac
5879 # Mac OS X ships with a broken assembler
5880 roms=
5881 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5882 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5883 "$softmmu" = yes ; then
5884 # Different host OS linkers have different ideas about the name of the ELF
5885 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5886 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5887 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5888 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5889 ld_i386_emulation="$emu"
5890 roms="optionrom"
5891 break
5893 done
5895 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5896 roms="$roms spapr-rtas"
5899 if test "$cpu" = "s390x" ; then
5900 roms="$roms s390-ccw"
5903 # Probe for the need for relocating the user-only binary.
5904 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5905 textseg_addr=
5906 case "$cpu" in
5907 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5908 # ??? Rationale for choosing this address
5909 textseg_addr=0x60000000
5911 mips)
5912 # A 256M aligned address, high in the address space, with enough
5913 # room for the code_gen_buffer above it before the stack.
5914 textseg_addr=0x60000000
5916 esac
5917 if [ -n "$textseg_addr" ]; then
5918 cat > $TMPC <<EOF
5919 int main(void) { return 0; }
5921 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5922 if ! compile_prog "" "$textseg_ldflags"; then
5923 # In case ld does not support -Ttext-segment, edit the default linker
5924 # script via sed to set the .text start addr. This is needed on FreeBSD
5925 # at least.
5926 if ! $ld --verbose >/dev/null 2>&1; then
5927 error_exit \
5928 "We need to link the QEMU user mode binaries at a" \
5929 "specific text address. Unfortunately your linker" \
5930 "doesn't support either the -Ttext-segment option or" \
5931 "printing the default linker script with --verbose." \
5932 "If you don't want the user mode binaries, pass the" \
5933 "--disable-user option to configure."
5936 $ld --verbose | sed \
5937 -e '1,/==================================================/d' \
5938 -e '/==================================================/,$d' \
5939 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5940 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5941 textseg_ldflags="-Wl,-T../config-host.ld"
5946 # Check that the C++ compiler exists and works with the C compiler.
5947 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5948 if has $cxx; then
5949 cat > $TMPC <<EOF
5950 int c_function(void);
5951 int main(void) { return c_function(); }
5954 compile_object
5956 cat > $TMPCXX <<EOF
5957 extern "C" {
5958 int c_function(void);
5960 int c_function(void) { return 42; }
5963 update_cxxflags
5965 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5966 # C++ compiler $cxx works ok with C compiler $cc
5968 else
5969 echo "C++ compiler $cxx does not work with C compiler $cc"
5970 echo "Disabling C++ specific optional code"
5971 cxx=
5973 else
5974 echo "No C++ compiler available; disabling C++ specific optional code"
5975 cxx=
5978 echo_version() {
5979 if test "$1" = "yes" ; then
5980 echo "($2)"
5984 # prepend pixman and ftd flags after all config tests are done
5985 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5986 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5987 libs_softmmu="$pixman_libs $libs_softmmu"
5989 echo "Install prefix $prefix"
5990 echo "BIOS directory $(eval echo $qemu_datadir)"
5991 echo "firmware path $(eval echo $firmwarepath)"
5992 echo "binary directory $(eval echo $bindir)"
5993 echo "library directory $(eval echo $libdir)"
5994 echo "module directory $(eval echo $qemu_moddir)"
5995 echo "libexec directory $(eval echo $libexecdir)"
5996 echo "include directory $(eval echo $includedir)"
5997 echo "config directory $(eval echo $sysconfdir)"
5998 if test "$mingw32" = "no" ; then
5999 echo "local state directory $(eval echo $local_statedir)"
6000 echo "Manual directory $(eval echo $mandir)"
6001 echo "ELF interp prefix $interp_prefix"
6002 else
6003 echo "local state directory queried at runtime"
6004 echo "Windows SDK $win_sdk"
6006 echo "Source path $source_path"
6007 echo "GIT binary $git"
6008 echo "GIT submodules $git_submodules"
6009 echo "C compiler $cc"
6010 echo "Host C compiler $host_cc"
6011 echo "C++ compiler $cxx"
6012 echo "Objective-C compiler $objcc"
6013 echo "ARFLAGS $ARFLAGS"
6014 echo "CFLAGS $CFLAGS"
6015 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6016 echo "LDFLAGS $LDFLAGS"
6017 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6018 echo "make $make"
6019 echo "install $install"
6020 echo "python $python"
6021 if test "$slirp" = "yes" ; then
6022 echo "smbd $smbd"
6024 echo "module support $modules"
6025 echo "host CPU $cpu"
6026 echo "host big endian $bigendian"
6027 echo "target list $target_list"
6028 echo "gprof enabled $gprof"
6029 echo "sparse enabled $sparse"
6030 echo "strip binaries $strip_opt"
6031 echo "profiler $profiler"
6032 echo "static build $static"
6033 if test "$darwin" = "yes" ; then
6034 echo "Cocoa support $cocoa"
6036 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6037 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6038 echo "GTK GL support $gtk_gl"
6039 echo "VTE support $vte $(echo_version $vte $vteversion)"
6040 echo "TLS priority $tls_priority"
6041 echo "GNUTLS support $gnutls"
6042 echo "libgcrypt $gcrypt"
6043 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6044 echo "libtasn1 $tasn1"
6045 echo "curses support $curses"
6046 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6047 echo "curl support $curl"
6048 echo "mingw32 support $mingw32"
6049 echo "Audio drivers $audio_drv_list"
6050 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6051 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6052 echo "VirtFS support $virtfs"
6053 echo "Multipath support $mpath"
6054 echo "VNC support $vnc"
6055 if test "$vnc" = "yes" ; then
6056 echo "VNC SASL support $vnc_sasl"
6057 echo "VNC JPEG support $vnc_jpeg"
6058 echo "VNC PNG support $vnc_png"
6060 if test -n "$sparc_cpu"; then
6061 echo "Target Sparc Arch $sparc_cpu"
6063 echo "xen support $xen"
6064 if test "$xen" = "yes" ; then
6065 echo "xen ctrl version $xen_ctrl_version"
6066 echo "pv dom build $xen_pv_domain_build"
6068 echo "brlapi support $brlapi"
6069 echo "bluez support $bluez"
6070 echo "Documentation $docs"
6071 echo "Tools $tools"
6072 echo "PIE $pie"
6073 echo "vde support $vde"
6074 echo "netmap support $netmap"
6075 echo "Linux AIO support $linux_aio"
6076 echo "(X)ATTR support $attr"
6077 echo "Install blobs $blobs"
6078 echo "KVM support $kvm"
6079 echo "HAX support $hax"
6080 echo "HVF support $hvf"
6081 echo "WHPX support $whpx"
6082 echo "TCG support $tcg"
6083 if test "$tcg" = "yes" ; then
6084 echo "TCG debug enabled $debug_tcg"
6085 echo "TCG interpreter $tcg_interpreter"
6087 echo "malloc trim support $malloc_trim"
6088 echo "RDMA support $rdma"
6089 echo "PVRDMA support $pvrdma"
6090 echo "fdt support $fdt"
6091 echo "membarrier $membarrier"
6092 echo "preadv support $preadv"
6093 echo "fdatasync $fdatasync"
6094 echo "madvise $madvise"
6095 echo "posix_madvise $posix_madvise"
6096 echo "posix_memalign $posix_memalign"
6097 echo "libcap-ng support $cap_ng"
6098 echo "vhost-net support $vhost_net"
6099 echo "vhost-crypto support $vhost_crypto"
6100 echo "vhost-scsi support $vhost_scsi"
6101 echo "vhost-vsock support $vhost_vsock"
6102 echo "vhost-user support $vhost_user"
6103 echo "Trace backends $trace_backends"
6104 if have_backend "simple"; then
6105 echo "Trace output file $trace_file-<pid>"
6107 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6108 echo "rbd support $rbd"
6109 echo "xfsctl support $xfs"
6110 echo "smartcard support $smartcard"
6111 echo "libusb $libusb"
6112 echo "usb net redir $usb_redir"
6113 echo "OpenGL support $opengl"
6114 echo "OpenGL dmabufs $opengl_dmabuf"
6115 echo "libiscsi support $libiscsi"
6116 echo "libnfs support $libnfs"
6117 echo "build guest agent $guest_agent"
6118 echo "QGA VSS support $guest_agent_with_vss"
6119 echo "QGA w32 disk info $guest_agent_ntddscsi"
6120 echo "QGA MSI support $guest_agent_msi"
6121 echo "seccomp support $seccomp"
6122 echo "coroutine backend $coroutine"
6123 echo "coroutine pool $coroutine_pool"
6124 echo "debug stack usage $debug_stack_usage"
6125 echo "mutex debugging $debug_mutex"
6126 echo "crypto afalg $crypto_afalg"
6127 echo "GlusterFS support $glusterfs"
6128 echo "gcov $gcov_tool"
6129 echo "gcov enabled $gcov"
6130 echo "TPM support $tpm"
6131 echo "libssh2 support $libssh2"
6132 echo "TPM passthrough $tpm_passthrough"
6133 echo "TPM emulator $tpm_emulator"
6134 echo "QOM debugging $qom_cast_debug"
6135 echo "Live block migration $live_block_migration"
6136 echo "lzo support $lzo"
6137 echo "snappy support $snappy"
6138 echo "bzip2 support $bzip2"
6139 echo "NUMA host support $numa"
6140 echo "libxml2 $libxml2"
6141 echo "tcmalloc support $tcmalloc"
6142 echo "jemalloc support $jemalloc"
6143 echo "avx2 optimization $avx2_opt"
6144 echo "replication support $replication"
6145 echo "VxHS block device $vxhs"
6146 echo "bochs support $bochs"
6147 echo "cloop support $cloop"
6148 echo "dmg support $dmg"
6149 echo "qcow v1 support $qcow1"
6150 echo "vdi support $vdi"
6151 echo "vvfat support $vvfat"
6152 echo "qed support $qed"
6153 echo "parallels support $parallels"
6154 echo "sheepdog support $sheepdog"
6155 echo "capstone $capstone"
6156 echo "docker $docker"
6157 echo "libpmem support $libpmem"
6158 echo "libudev $libudev"
6160 if test "$sdl_too_old" = "yes"; then
6161 echo "-> Your SDL version is too old - please upgrade to have SDL support"
6164 if test "$sdlabi" = "1.2"; then
6165 echo
6166 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6167 echo "WARNING: future releases. Please switch to using SDL 2.0"
6170 if test "$supported_cpu" = "no"; then
6171 echo
6172 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6173 echo
6174 echo "CPU host architecture $cpu support is not currently maintained."
6175 echo "The QEMU project intends to remove support for this host CPU in"
6176 echo "a future release if nobody volunteers to maintain it and to"
6177 echo "provide a build host for our continuous integration setup."
6178 echo "configure has succeeded and you can continue to build, but"
6179 echo "if you care about QEMU on this platform you should contact"
6180 echo "us upstream at qemu-devel@nongnu.org."
6183 if test "$supported_os" = "no"; then
6184 echo
6185 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6186 echo
6187 echo "Host OS $targetos support is not currently maintained."
6188 echo "The QEMU project intends to remove support for this host OS in"
6189 echo "a future release if nobody volunteers to maintain it and to"
6190 echo "provide a build host for our continuous integration setup."
6191 echo "configure has succeeded and you can continue to build, but"
6192 echo "if you care about QEMU on this platform you should contact"
6193 echo "us upstream at qemu-devel@nongnu.org."
6196 config_host_mak="config-host.mak"
6198 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6200 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6201 echo >> $config_host_mak
6203 echo all: >> $config_host_mak
6204 echo "prefix=$prefix" >> $config_host_mak
6205 echo "bindir=$bindir" >> $config_host_mak
6206 echo "libdir=$libdir" >> $config_host_mak
6207 echo "libexecdir=$libexecdir" >> $config_host_mak
6208 echo "includedir=$includedir" >> $config_host_mak
6209 echo "mandir=$mandir" >> $config_host_mak
6210 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6211 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6212 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6213 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6214 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6215 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6216 if test "$mingw32" = "no" ; then
6217 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6219 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6220 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6221 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6222 echo "GIT=$git" >> $config_host_mak
6223 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6224 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6226 echo "ARCH=$ARCH" >> $config_host_mak
6228 if test "$debug_tcg" = "yes" ; then
6229 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6231 if test "$strip_opt" = "yes" ; then
6232 echo "STRIP=${strip}" >> $config_host_mak
6234 if test "$bigendian" = "yes" ; then
6235 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6237 if test "$mingw32" = "yes" ; then
6238 echo "CONFIG_WIN32=y" >> $config_host_mak
6239 echo "CONFIG_INSTALLER=y" >> $config_host_mak
6240 rc_version=$(cat $source_path/VERSION)
6241 version_major=${rc_version%%.*}
6242 rc_version=${rc_version#*.}
6243 version_minor=${rc_version%%.*}
6244 rc_version=${rc_version#*.}
6245 version_subminor=${rc_version%%.*}
6246 version_micro=0
6247 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6248 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6249 if test "$guest_agent_with_vss" = "yes" ; then
6250 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6251 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6252 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6254 if test "$guest_agent_ntddscsi" = "yes" ; then
6255 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6257 if test "$guest_agent_msi" = "yes"; then
6258 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6259 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6260 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6261 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6262 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6263 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6264 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6266 else
6267 echo "CONFIG_POSIX=y" >> $config_host_mak
6270 if test "$linux" = "yes" ; then
6271 echo "CONFIG_LINUX=y" >> $config_host_mak
6274 if test "$darwin" = "yes" ; then
6275 echo "CONFIG_DARWIN=y" >> $config_host_mak
6278 if test "$solaris" = "yes" ; then
6279 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6281 if test "$haiku" = "yes" ; then
6282 echo "CONFIG_HAIKU=y" >> $config_host_mak
6284 if test "$static" = "yes" ; then
6285 echo "CONFIG_STATIC=y" >> $config_host_mak
6287 if test "$profiler" = "yes" ; then
6288 echo "CONFIG_PROFILER=y" >> $config_host_mak
6290 if test "$slirp" = "yes" ; then
6291 echo "CONFIG_SLIRP=y" >> $config_host_mak
6292 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6294 if test "$vde" = "yes" ; then
6295 echo "CONFIG_VDE=y" >> $config_host_mak
6296 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6298 if test "$netmap" = "yes" ; then
6299 echo "CONFIG_NETMAP=y" >> $config_host_mak
6301 if test "$l2tpv3" = "yes" ; then
6302 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6304 if test "$cap_ng" = "yes" ; then
6305 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6307 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6308 for drv in $audio_drv_list; do
6309 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6310 case "$drv" in
6311 alsa | oss | pa | sdl)
6312 echo "$def=m" >> $config_host_mak ;;
6314 echo "$def=y" >> $config_host_mak ;;
6315 esac
6316 done
6317 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6318 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6319 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6320 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6321 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6322 if test "$audio_pt_int" = "yes" ; then
6323 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6325 if test "$audio_win_int" = "yes" ; then
6326 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6328 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6329 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6330 if test "$vnc" = "yes" ; then
6331 echo "CONFIG_VNC=y" >> $config_host_mak
6333 if test "$vnc_sasl" = "yes" ; then
6334 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6336 if test "$vnc_jpeg" = "yes" ; then
6337 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6339 if test "$vnc_png" = "yes" ; then
6340 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6342 if test "$xkbcommon" = "yes" ; then
6343 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6344 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6346 if test "$fnmatch" = "yes" ; then
6347 echo "CONFIG_FNMATCH=y" >> $config_host_mak
6349 if test "$xfs" = "yes" ; then
6350 echo "CONFIG_XFS=y" >> $config_host_mak
6352 qemu_version=$(head $source_path/VERSION)
6353 echo "VERSION=$qemu_version" >>$config_host_mak
6354 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6355 echo "SRC_PATH=$source_path" >> $config_host_mak
6356 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6357 if [ "$docs" = "yes" ] ; then
6358 echo "BUILD_DOCS=yes" >> $config_host_mak
6360 if [ "$want_tools" = "yes" ] ; then
6361 echo "BUILD_TOOLS=yes" >> $config_host_mak
6363 if test "$modules" = "yes"; then
6364 # $shacmd can generate a hash started with digit, which the compiler doesn't
6365 # like as an symbol. So prefix it with an underscore
6366 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6367 echo "CONFIG_MODULES=y" >> $config_host_mak
6369 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6370 echo "CONFIG_X11=y" >> $config_host_mak
6371 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6372 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6374 if test "$sdl" = "yes" ; then
6375 echo "CONFIG_SDL=m" >> $config_host_mak
6376 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6377 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6378 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6380 if test "$cocoa" = "yes" ; then
6381 echo "CONFIG_COCOA=y" >> $config_host_mak
6383 if test "$curses" = "yes" ; then
6384 echo "CONFIG_CURSES=m" >> $config_host_mak
6385 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6386 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6388 if test "$pipe2" = "yes" ; then
6389 echo "CONFIG_PIPE2=y" >> $config_host_mak
6391 if test "$accept4" = "yes" ; then
6392 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6394 if test "$splice" = "yes" ; then
6395 echo "CONFIG_SPLICE=y" >> $config_host_mak
6397 if test "$eventfd" = "yes" ; then
6398 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6400 if test "$memfd" = "yes" ; then
6401 echo "CONFIG_MEMFD=y" >> $config_host_mak
6403 if test "$have_usbfs" = "yes" ; then
6404 echo "CONFIG_USBFS=y" >> $config_host_mak
6406 if test "$fallocate" = "yes" ; then
6407 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6409 if test "$fallocate_punch_hole" = "yes" ; then
6410 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6412 if test "$fallocate_zero_range" = "yes" ; then
6413 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6415 if test "$posix_fallocate" = "yes" ; then
6416 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6418 if test "$sync_file_range" = "yes" ; then
6419 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6421 if test "$fiemap" = "yes" ; then
6422 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6424 if test "$dup3" = "yes" ; then
6425 echo "CONFIG_DUP3=y" >> $config_host_mak
6427 if test "$ppoll" = "yes" ; then
6428 echo "CONFIG_PPOLL=y" >> $config_host_mak
6430 if test "$prctl_pr_set_timerslack" = "yes" ; then
6431 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6433 if test "$epoll" = "yes" ; then
6434 echo "CONFIG_EPOLL=y" >> $config_host_mak
6436 if test "$epoll_create1" = "yes" ; then
6437 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6439 if test "$sendfile" = "yes" ; then
6440 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6442 if test "$timerfd" = "yes" ; then
6443 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6445 if test "$setns" = "yes" ; then
6446 echo "CONFIG_SETNS=y" >> $config_host_mak
6448 if test "$clock_adjtime" = "yes" ; then
6449 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6451 if test "$syncfs" = "yes" ; then
6452 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6454 if test "$inotify" = "yes" ; then
6455 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6457 if test "$inotify1" = "yes" ; then
6458 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6460 if test "$sem_timedwait" = "yes" ; then
6461 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6463 if test "$strchrnul" = "yes" ; then
6464 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6466 if test "$byteswap_h" = "yes" ; then
6467 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6469 if test "$bswap_h" = "yes" ; then
6470 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6472 if test "$curl" = "yes" ; then
6473 echo "CONFIG_CURL=m" >> $config_host_mak
6474 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6475 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6477 if test "$brlapi" = "yes" ; then
6478 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6479 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6481 if test "$bluez" = "yes" ; then
6482 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6483 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6485 if test "$gtk" = "yes" ; then
6486 echo "CONFIG_GTK=m" >> $config_host_mak
6487 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6488 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6489 if test "$gtk_gl" = "yes" ; then
6490 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6493 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6494 if test "$gnutls" = "yes" ; then
6495 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6497 if test "$gcrypt" = "yes" ; then
6498 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6499 if test "$gcrypt_hmac" = "yes" ; then
6500 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6503 if test "$nettle" = "yes" ; then
6504 echo "CONFIG_NETTLE=y" >> $config_host_mak
6505 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6507 if test "$tasn1" = "yes" ; then
6508 echo "CONFIG_TASN1=y" >> $config_host_mak
6510 if test "$have_ifaddrs_h" = "yes" ; then
6511 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6513 if test "$have_broken_size_max" = "yes" ; then
6514 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6517 # Work around a system header bug with some kernel/XFS header
6518 # versions where they both try to define 'struct fsxattr':
6519 # xfs headers will not try to redefine structs from linux headers
6520 # if this macro is set.
6521 if test "$have_fsxattr" = "yes" ; then
6522 echo "HAVE_FSXATTR=y" >> $config_host_mak
6524 if test "$have_copy_file_range" = "yes" ; then
6525 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6527 if test "$vte" = "yes" ; then
6528 echo "CONFIG_VTE=y" >> $config_host_mak
6529 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6530 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6532 if test "$virglrenderer" = "yes" ; then
6533 echo "CONFIG_VIRGL=y" >> $config_host_mak
6534 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6535 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6537 if test "$xen" = "yes" ; then
6538 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6539 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6540 if test "$xen_pv_domain_build" = "yes" ; then
6541 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6544 if test "$linux_aio" = "yes" ; then
6545 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6547 if test "$attr" = "yes" ; then
6548 echo "CONFIG_ATTR=y" >> $config_host_mak
6550 if test "$libattr" = "yes" ; then
6551 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6553 if test "$virtfs" = "yes" ; then
6554 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6556 if test "$mpath" = "yes" ; then
6557 echo "CONFIG_MPATH=y" >> $config_host_mak
6558 if test "$mpathpersist_new_api" = "yes"; then
6559 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6562 if test "$vhost_scsi" = "yes" ; then
6563 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6565 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6566 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6568 if test "$vhost_crypto" = "yes" ; then
6569 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6571 if test "$vhost_vsock" = "yes" ; then
6572 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6574 if test "$vhost_user" = "yes" ; then
6575 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6577 if test "$blobs" = "yes" ; then
6578 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6580 if test "$iovec" = "yes" ; then
6581 echo "CONFIG_IOVEC=y" >> $config_host_mak
6583 if test "$preadv" = "yes" ; then
6584 echo "CONFIG_PREADV=y" >> $config_host_mak
6586 if test "$fdt" != "no" ; then
6587 echo "CONFIG_FDT=y" >> $config_host_mak
6589 if test "$membarrier" = "yes" ; then
6590 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6592 if test "$signalfd" = "yes" ; then
6593 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6595 if test "$tcg" = "yes"; then
6596 echo "CONFIG_TCG=y" >> $config_host_mak
6597 if test "$tcg_interpreter" = "yes" ; then
6598 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6601 if test "$fdatasync" = "yes" ; then
6602 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6604 if test "$madvise" = "yes" ; then
6605 echo "CONFIG_MADVISE=y" >> $config_host_mak
6607 if test "$posix_madvise" = "yes" ; then
6608 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6610 if test "$posix_memalign" = "yes" ; then
6611 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6614 if test "$spice" = "yes" ; then
6615 echo "CONFIG_SPICE=y" >> $config_host_mak
6618 if test "$smartcard" = "yes" ; then
6619 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6620 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6621 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6624 if test "$libusb" = "yes" ; then
6625 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6626 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6627 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6630 if test "$usb_redir" = "yes" ; then
6631 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6632 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6633 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6636 if test "$opengl" = "yes" ; then
6637 echo "CONFIG_OPENGL=y" >> $config_host_mak
6638 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6639 if test "$opengl_dmabuf" = "yes" ; then
6640 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6644 if test "$malloc_trim" = "yes" ; then
6645 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6648 if test "$avx2_opt" = "yes" ; then
6649 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6652 if test "$lzo" = "yes" ; then
6653 echo "CONFIG_LZO=y" >> $config_host_mak
6656 if test "$snappy" = "yes" ; then
6657 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6660 if test "$bzip2" = "yes" ; then
6661 echo "CONFIG_BZIP2=y" >> $config_host_mak
6662 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6665 if test "$libiscsi" = "yes" ; then
6666 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6667 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6668 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6671 if test "$libnfs" = "yes" ; then
6672 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6673 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6676 if test "$seccomp" = "yes"; then
6677 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6678 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6679 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6682 # XXX: suppress that
6683 if [ "$bsd" = "yes" ] ; then
6684 echo "CONFIG_BSD=y" >> $config_host_mak
6687 if test "$localtime_r" = "yes" ; then
6688 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6690 if test "$qom_cast_debug" = "yes" ; then
6691 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6693 if test "$rbd" = "yes" ; then
6694 echo "CONFIG_RBD=m" >> $config_host_mak
6695 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6696 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6699 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6700 if test "$coroutine_pool" = "yes" ; then
6701 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6702 else
6703 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6706 if test "$debug_stack_usage" = "yes" ; then
6707 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6710 if test "$crypto_afalg" = "yes" ; then
6711 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6714 if test "$open_by_handle_at" = "yes" ; then
6715 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6718 if test "$linux_magic_h" = "yes" ; then
6719 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6722 if test "$pragma_diagnostic_available" = "yes" ; then
6723 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6726 if test "$valgrind_h" = "yes" ; then
6727 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6730 if test "$have_asan_iface_fiber" = "yes" ; then
6731 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6734 if test "$has_environ" = "yes" ; then
6735 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6738 if test "$cpuid_h" = "yes" ; then
6739 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6742 if test "$int128" = "yes" ; then
6743 echo "CONFIG_INT128=y" >> $config_host_mak
6746 if test "$atomic128" = "yes" ; then
6747 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6750 if test "$cmpxchg128" = "yes" ; then
6751 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6754 if test "$atomic64" = "yes" ; then
6755 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6758 if test "$vector16" = "yes" ; then
6759 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6762 if test "$getauxval" = "yes" ; then
6763 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6766 if test "$glusterfs" = "yes" ; then
6767 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6768 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6769 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6772 if test "$glusterfs_xlator_opt" = "yes" ; then
6773 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6776 if test "$glusterfs_discard" = "yes" ; then
6777 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6780 if test "$glusterfs_fallocate" = "yes" ; then
6781 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6784 if test "$glusterfs_zerofill" = "yes" ; then
6785 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6788 if test "$libssh2" = "yes" ; then
6789 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6790 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6791 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6794 if test "$live_block_migration" = "yes" ; then
6795 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6798 if test "$tpm" = "yes"; then
6799 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6800 # TPM passthrough support?
6801 if test "$tpm_passthrough" = "yes"; then
6802 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6804 # TPM emulator support?
6805 if test "$tpm_emulator" = "yes"; then
6806 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6810 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6811 if have_backend "nop"; then
6812 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6814 if have_backend "simple"; then
6815 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6816 # Set the appropriate trace file.
6817 trace_file="\"$trace_file-\" FMT_pid"
6819 if have_backend "log"; then
6820 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6822 if have_backend "ust"; then
6823 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6825 if have_backend "dtrace"; then
6826 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6827 if test "$trace_backend_stap" = "yes" ; then
6828 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6831 if have_backend "ftrace"; then
6832 if test "$linux" = "yes" ; then
6833 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6834 else
6835 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6838 if have_backend "syslog"; then
6839 if test "$posix_syslog" = "yes" ; then
6840 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6841 else
6842 feature_not_found "syslog(trace backend)" "syslog not available"
6845 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6847 if test "$rdma" = "yes" ; then
6848 echo "CONFIG_RDMA=y" >> $config_host_mak
6849 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6852 if test "$pvrdma" = "yes" ; then
6853 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6856 if test "$have_rtnetlink" = "yes" ; then
6857 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6860 if test "$libxml2" = "yes" ; then
6861 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6862 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6863 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6866 if test "$replication" = "yes" ; then
6867 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6870 if test "$have_af_vsock" = "yes" ; then
6871 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6874 if test "$have_sysmacros" = "yes" ; then
6875 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6878 if test "$have_static_assert" = "yes" ; then
6879 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6882 if test "$have_utmpx" = "yes" ; then
6883 echo "HAVE_UTMPX=y" >> $config_host_mak
6886 if test "$ivshmem" = "yes" ; then
6887 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6889 if test "$capstone" != "no" ; then
6890 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6892 if test "$debug_mutex" = "yes" ; then
6893 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6896 # Hold two types of flag:
6897 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6898 # a thread we have a handle to
6899 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6900 # platform
6901 if test "$pthread_setname_np" = "yes" ; then
6902 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6903 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6906 if test "$vxhs" = "yes" ; then
6907 echo "CONFIG_VXHS=y" >> $config_host_mak
6908 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6911 if test "$libpmem" = "yes" ; then
6912 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6915 if test "$bochs" = "yes" ; then
6916 echo "CONFIG_BOCHS=y" >> $config_host_mak
6918 if test "$cloop" = "yes" ; then
6919 echo "CONFIG_CLOOP=y" >> $config_host_mak
6921 if test "$dmg" = "yes" ; then
6922 echo "CONFIG_DMG=y" >> $config_host_mak
6924 if test "$qcow1" = "yes" ; then
6925 echo "CONFIG_QCOW1=y" >> $config_host_mak
6927 if test "$vdi" = "yes" ; then
6928 echo "CONFIG_VDI=y" >> $config_host_mak
6930 if test "$vvfat" = "yes" ; then
6931 echo "CONFIG_VVFAT=y" >> $config_host_mak
6933 if test "$qed" = "yes" ; then
6934 echo "CONFIG_QED=y" >> $config_host_mak
6936 if test "$parallels" = "yes" ; then
6937 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6939 if test "$sheepdog" = "yes" ; then
6940 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6943 if test "$tcg_interpreter" = "yes"; then
6944 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6945 elif test "$ARCH" = "sparc64" ; then
6946 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6947 elif test "$ARCH" = "s390x" ; then
6948 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6949 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6950 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6951 elif test "$ARCH" = "ppc64" ; then
6952 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6953 else
6954 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6956 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6958 echo "TOOLS=$tools" >> $config_host_mak
6959 echo "ROMS=$roms" >> $config_host_mak
6960 echo "MAKE=$make" >> $config_host_mak
6961 echo "INSTALL=$install" >> $config_host_mak
6962 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6963 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6964 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6965 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6966 echo "PYTHON=$python" >> $config_host_mak
6967 echo "CC=$cc" >> $config_host_mak
6968 if $iasl -h > /dev/null 2>&1; then
6969 echo "IASL=$iasl" >> $config_host_mak
6971 echo "HOST_CC=$host_cc" >> $config_host_mak
6972 echo "CXX=$cxx" >> $config_host_mak
6973 echo "OBJCC=$objcc" >> $config_host_mak
6974 echo "AR=$ar" >> $config_host_mak
6975 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6976 echo "AS=$as" >> $config_host_mak
6977 echo "CCAS=$ccas" >> $config_host_mak
6978 echo "CPP=$cpp" >> $config_host_mak
6979 echo "OBJCOPY=$objcopy" >> $config_host_mak
6980 echo "LD=$ld" >> $config_host_mak
6981 echo "RANLIB=$ranlib" >> $config_host_mak
6982 echo "NM=$nm" >> $config_host_mak
6983 echo "WINDRES=$windres" >> $config_host_mak
6984 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6985 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6986 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6987 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6988 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6989 if test "$sparse" = "yes" ; then
6990 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6991 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6992 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6993 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6994 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6996 if test "$cross_prefix" != ""; then
6997 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6998 else
6999 echo "AUTOCONF_HOST := " >> $config_host_mak
7001 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7002 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7003 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7004 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7005 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7006 echo "LIBS+=$LIBS" >> $config_host_mak
7007 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7008 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7009 echo "EXESUF=$EXESUF" >> $config_host_mak
7010 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7011 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7012 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7013 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7014 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7015 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7016 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
7017 if test "$gcov" = "yes" ; then
7018 echo "CONFIG_GCOV=y" >> $config_host_mak
7019 echo "GCOV=$gcov_tool" >> $config_host_mak
7022 if test "$docker" != "no"; then
7023 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7026 if test "$libudev" != "no"; then
7027 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7028 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7031 # use included Linux headers
7032 if test "$linux" = "yes" ; then
7033 mkdir -p linux-headers
7034 case "$cpu" in
7035 i386|x86_64|x32)
7036 linux_arch=x86
7038 ppc|ppc64)
7039 linux_arch=powerpc
7041 s390x)
7042 linux_arch=s390
7044 aarch64)
7045 linux_arch=arm64
7047 mips64)
7048 linux_arch=mips
7051 # For most CPUs the kernel architecture name and QEMU CPU name match.
7052 linux_arch="$cpu"
7054 esac
7055 # For non-KVM architectures we will not have asm headers
7056 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7057 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7061 for target in $target_list; do
7062 target_dir="$target"
7063 config_target_mak=$target_dir/config-target.mak
7064 target_name=$(echo $target | cut -d '-' -f 1)
7065 target_bigendian="no"
7067 case "$target_name" in
7068 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7069 target_bigendian=yes
7071 esac
7072 target_softmmu="no"
7073 target_user_only="no"
7074 target_linux_user="no"
7075 target_bsd_user="no"
7076 case "$target" in
7077 ${target_name}-softmmu)
7078 target_softmmu="yes"
7080 ${target_name}-linux-user)
7081 target_user_only="yes"
7082 target_linux_user="yes"
7084 ${target_name}-bsd-user)
7085 target_user_only="yes"
7086 target_bsd_user="yes"
7089 error_exit "Target '$target' not recognised"
7090 exit 1
7092 esac
7094 target_compiler=""
7095 target_compiler_static=""
7096 target_compiler_cflags=""
7098 mkdir -p $target_dir
7099 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7101 bflt="no"
7102 mttcg="no"
7103 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7104 gdb_xml_files=""
7106 TARGET_ARCH="$target_name"
7107 TARGET_BASE_ARCH=""
7108 TARGET_ABI_DIR=""
7110 case "$target_name" in
7111 i386)
7112 mttcg="yes"
7113 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
7114 target_compiler=$cross_cc_i386
7115 target_compiler_cflags=$cross_cc_ccflags_i386
7117 x86_64)
7118 TARGET_BASE_ARCH=i386
7119 mttcg="yes"
7120 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
7121 target_compiler=$cross_cc_x86_64
7123 alpha)
7124 mttcg="yes"
7125 target_compiler=$cross_cc_alpha
7127 arm|armeb)
7128 TARGET_ARCH=arm
7129 bflt="yes"
7130 mttcg="yes"
7131 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7132 target_compiler=$cross_cc_arm
7133 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7135 aarch64|aarch64_be)
7136 TARGET_ARCH=aarch64
7137 TARGET_BASE_ARCH=arm
7138 bflt="yes"
7139 mttcg="yes"
7140 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7141 target_compiler=$cross_cc_aarch64
7142 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7144 cris)
7145 target_compiler=$cross_cc_cris
7147 hppa)
7148 mttcg="yes"
7149 target_compiler=$cross_cc_hppa
7151 lm32)
7152 target_compiler=$cross_cc_lm32
7154 m68k)
7155 bflt="yes"
7156 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7157 target_compiler=$cross_cc_m68k
7159 microblaze|microblazeel)
7160 TARGET_ARCH=microblaze
7161 bflt="yes"
7162 echo "TARGET_ABI32=y" >> $config_target_mak
7163 target_compiler=$cross_cc_microblaze
7165 mips|mipsel)
7166 TARGET_ARCH=mips
7167 target_compiler=$cross_cc_mips
7168 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7170 mipsn32|mipsn32el)
7171 TARGET_ARCH=mips64
7172 TARGET_BASE_ARCH=mips
7173 target_compiler=$cross_cc_mipsn32
7174 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7175 echo "TARGET_ABI32=y" >> $config_target_mak
7177 mips64|mips64el)
7178 TARGET_ARCH=mips64
7179 TARGET_BASE_ARCH=mips
7180 target_compiler=$cross_cc_mips64
7181 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7183 moxie)
7184 target_compiler=$cross_cc_moxie
7186 nios2)
7187 target_compiler=$cross_cc_nios2
7189 or1k)
7190 target_compiler=$cross_cc_or1k
7191 TARGET_ARCH=openrisc
7192 TARGET_BASE_ARCH=openrisc
7194 ppc)
7195 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7196 target_compiler=$cross_cc_powerpc
7198 ppc64)
7199 TARGET_BASE_ARCH=ppc
7200 TARGET_ABI_DIR=ppc
7201 mttcg=yes
7202 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7203 target_compiler=$cross_cc_ppc64
7205 ppc64le)
7206 TARGET_ARCH=ppc64
7207 TARGET_BASE_ARCH=ppc
7208 TARGET_ABI_DIR=ppc
7209 mttcg=yes
7210 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7211 target_compiler=$cross_cc_ppc64le
7213 ppc64abi32)
7214 TARGET_ARCH=ppc64
7215 TARGET_BASE_ARCH=ppc
7216 TARGET_ABI_DIR=ppc
7217 echo "TARGET_ABI32=y" >> $config_target_mak
7218 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7219 target_compiler=$cross_cc_ppc64abi32
7221 riscv32)
7222 TARGET_BASE_ARCH=riscv
7223 TARGET_ABI_DIR=riscv
7224 mttcg=yes
7225 target_compiler=$cross_cc_riscv32
7227 riscv64)
7228 TARGET_BASE_ARCH=riscv
7229 TARGET_ABI_DIR=riscv
7230 mttcg=yes
7231 target_compiler=$cross_cc_riscv64
7233 sh4|sh4eb)
7234 TARGET_ARCH=sh4
7235 bflt="yes"
7236 target_compiler=$cross_cc_sh4
7238 sparc)
7239 target_compiler=$cross_cc_sparc
7241 sparc64)
7242 TARGET_BASE_ARCH=sparc
7243 target_compiler=$cross_cc_sparc64
7245 sparc32plus)
7246 TARGET_ARCH=sparc64
7247 TARGET_BASE_ARCH=sparc
7248 TARGET_ABI_DIR=sparc
7249 target_compiler=$cross_cc_sparc32plus
7250 echo "TARGET_ABI32=y" >> $config_target_mak
7252 s390x)
7253 mttcg=yes
7254 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7255 target_compiler=$cross_cc_s390x
7257 tilegx)
7258 target_compiler=$cross_cc_tilegx
7260 tricore)
7261 target_compiler=$cross_cc_tricore
7263 unicore32)
7264 target_compiler=$cross_cc_unicore32
7266 xtensa|xtensaeb)
7267 TARGET_ARCH=xtensa
7268 bflt="yes"
7269 mttcg="yes"
7270 target_compiler=$cross_cc_xtensa
7273 error_exit "Unsupported target CPU"
7275 esac
7276 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7277 if [ "$TARGET_BASE_ARCH" = "" ]; then
7278 TARGET_BASE_ARCH=$TARGET_ARCH
7281 # Do we have a cross compiler for this target?
7282 if has $target_compiler; then
7284 write_c_skeleton
7286 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7287 # For host systems we might get away with building without -static
7288 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7289 target_compiler=""
7290 else
7291 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7292 target_compiler_static="n"
7294 else
7295 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7296 target_compiler_static="y"
7298 else
7299 target_compiler=""
7302 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7304 upper() {
7305 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7308 target_arch_name="$(upper $TARGET_ARCH)"
7309 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7310 echo "TARGET_NAME=$target_name" >> $config_target_mak
7311 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7312 if [ "$TARGET_ABI_DIR" = "" ]; then
7313 TARGET_ABI_DIR=$TARGET_ARCH
7315 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7316 if [ "$HOST_VARIANT_DIR" != "" ]; then
7317 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7320 if supported_xen_target $target; then
7321 echo "CONFIG_XEN=y" >> $config_target_mak
7322 if test "$xen_pci_passthrough" = yes; then
7323 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7326 if supported_kvm_target $target; then
7327 echo "CONFIG_KVM=y" >> $config_target_mak
7328 if test "$vhost_net" = "yes" ; then
7329 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7330 if test "$vhost_user" = "yes" ; then
7331 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7335 if supported_hax_target $target; then
7336 echo "CONFIG_HAX=y" >> $config_target_mak
7338 if supported_hvf_target $target; then
7339 echo "CONFIG_HVF=y" >> $config_target_mak
7341 if supported_whpx_target $target; then
7342 echo "CONFIG_WHPX=y" >> $config_target_mak
7344 if test "$target_bigendian" = "yes" ; then
7345 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7347 if test "$target_softmmu" = "yes" ; then
7348 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7349 if test "$mttcg" = "yes" ; then
7350 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7353 if test "$target_user_only" = "yes" ; then
7354 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7355 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7357 if test "$target_linux_user" = "yes" ; then
7358 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7360 list=""
7361 if test ! -z "$gdb_xml_files" ; then
7362 for x in $gdb_xml_files; do
7363 list="$list $source_path/gdb-xml/$x"
7364 done
7365 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7368 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7369 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7371 if test "$target_bsd_user" = "yes" ; then
7372 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7375 if test -n "$target_compiler"; then
7376 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7378 if test -n "$target_compiler_static"; then
7379 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7382 if test -n "$target_compiler_cflags"; then
7383 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7388 # generate QEMU_CFLAGS/LDFLAGS for targets
7390 cflags=""
7391 ldflags=""
7393 disas_config() {
7394 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7395 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7398 for i in $ARCH $TARGET_BASE_ARCH ; do
7399 case "$i" in
7400 alpha)
7401 disas_config "ALPHA"
7403 aarch64)
7404 if test -n "${cxx}"; then
7405 disas_config "ARM_A64"
7408 arm)
7409 disas_config "ARM"
7410 if test -n "${cxx}"; then
7411 disas_config "ARM_A64"
7414 cris)
7415 disas_config "CRIS"
7417 hppa)
7418 disas_config "HPPA"
7420 i386|x86_64|x32)
7421 disas_config "I386"
7423 lm32)
7424 disas_config "LM32"
7426 m68k)
7427 disas_config "M68K"
7429 microblaze*)
7430 disas_config "MICROBLAZE"
7432 mips*)
7433 disas_config "MIPS"
7434 if test -n "${cxx}"; then
7435 disas_config "NANOMIPS"
7438 moxie*)
7439 disas_config "MOXIE"
7441 nios2)
7442 disas_config "NIOS2"
7444 or1k)
7445 disas_config "OPENRISC"
7447 ppc*)
7448 disas_config "PPC"
7450 riscv)
7451 disas_config "RISCV"
7453 s390*)
7454 disas_config "S390"
7456 sh4)
7457 disas_config "SH4"
7459 sparc*)
7460 disas_config "SPARC"
7462 xtensa*)
7463 disas_config "XTENSA"
7465 esac
7466 done
7467 if test "$tcg_interpreter" = "yes" ; then
7468 disas_config "TCI"
7471 case "$ARCH" in
7472 alpha)
7473 # Ensure there's only a single GP
7474 cflags="-msmall-data $cflags"
7476 esac
7478 if test "$gprof" = "yes" ; then
7479 echo "TARGET_GPROF=yes" >> $config_target_mak
7480 if test "$target_linux_user" = "yes" ; then
7481 cflags="-p $cflags"
7482 ldflags="-p $ldflags"
7484 if test "$target_softmmu" = "yes" ; then
7485 ldflags="-p $ldflags"
7486 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7490 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7491 ldflags="$ldflags $textseg_ldflags"
7494 # Newer kernels on s390 check for an S390_PGSTE program header and
7495 # enable the pgste page table extensions in that case. This makes
7496 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7497 # header if
7498 # - we build on s390x
7499 # - we build the system emulation for s390x (qemu-system-s390x)
7500 # - KVM is enabled
7501 # - the linker supports --s390-pgste
7502 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7503 if ld_has --s390-pgste ; then
7504 ldflags="-Wl,--s390-pgste $ldflags"
7508 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7509 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7511 done # for target in $targets
7513 if test -n "$enabled_cross_compilers"; then
7514 echo
7515 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7518 if [ "$fdt" = "git" ]; then
7519 echo "config-host.h: subdir-dtc" >> $config_host_mak
7521 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7522 echo "config-host.h: subdir-capstone" >> $config_host_mak
7524 if test -n "$LIBCAPSTONE"; then
7525 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7528 if test "$numa" = "yes"; then
7529 echo "CONFIG_NUMA=y" >> $config_host_mak
7532 if test "$ccache_cpp2" = "yes"; then
7533 echo "export CCACHE_CPP2=y" >> $config_host_mak
7536 # If we're using a separate build tree, set it up now.
7537 # DIRS are directories which we simply mkdir in the build tree;
7538 # LINKS are things to symlink back into the source tree
7539 # (these can be both files and directories).
7540 # Caution: do not add files or directories here using wildcards. This
7541 # will result in problems later if a new file matching the wildcard is
7542 # added to the source tree -- nothing will cause configure to be rerun
7543 # so the build tree will be missing the link back to the new file, and
7544 # tests might fail. Prefer to keep the relevant files in their own
7545 # directory and symlink the directory instead.
7546 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7547 DIRS="$DIRS tests/fp"
7548 DIRS="$DIRS docs docs/interop fsdev scsi"
7549 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7550 DIRS="$DIRS roms/seabios roms/vgabios"
7551 LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7552 LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7553 LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7554 LINKS="$LINKS tests/fp/Makefile"
7555 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7556 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7557 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7558 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7559 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7560 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7561 LINKS="$LINKS tests/acceptance tests/data"
7562 LINKS="$LINKS tests/qemu-iotests/check"
7563 for bios_file in \
7564 $source_path/pc-bios/*.bin \
7565 $source_path/pc-bios/*.lid \
7566 $source_path/pc-bios/*.rom \
7567 $source_path/pc-bios/*.dtb \
7568 $source_path/pc-bios/*.img \
7569 $source_path/pc-bios/openbios-* \
7570 $source_path/pc-bios/u-boot.* \
7571 $source_path/pc-bios/palcode-*
7573 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7574 done
7575 mkdir -p $DIRS
7576 for f in $LINKS ; do
7577 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7578 symlink "$source_path/$f" "$f"
7580 done
7582 # temporary config to build submodules
7583 for rom in seabios vgabios ; do
7584 config_mak=roms/$rom/config.mak
7585 echo "# Automatically generated by configure - do not modify" > $config_mak
7586 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7587 echo "AS=$as" >> $config_mak
7588 echo "CCAS=$ccas" >> $config_mak
7589 echo "CC=$cc" >> $config_mak
7590 echo "BCC=bcc" >> $config_mak
7591 echo "CPP=$cpp" >> $config_mak
7592 echo "OBJCOPY=objcopy" >> $config_mak
7593 echo "IASL=$iasl" >> $config_mak
7594 echo "LD=$ld" >> $config_mak
7595 echo "RANLIB=$ranlib" >> $config_mak
7596 done
7598 # set up qemu-iotests in this build directory
7599 iotests_common_env="tests/qemu-iotests/common.env"
7601 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7602 echo >> "$iotests_common_env"
7603 echo "export PYTHON='$python'" >> "$iotests_common_env"
7605 # Save the configure command line for later reuse.
7606 cat <<EOD >config.status
7607 #!/bin/sh
7608 # Generated by configure.
7609 # Run this file to recreate the current configuration.
7610 # Compiler output produced by configure, useful for debugging
7611 # configure, is in config.log if it exists.
7614 preserve_env() {
7615 envname=$1
7617 eval envval=\$$envname
7619 if test -n "$envval"
7620 then
7621 echo "$envname='$envval'" >> config.status
7622 echo "export $envname" >> config.status
7623 else
7624 echo "unset $envname" >> config.status
7628 # Preserve various env variables that influence what
7629 # features/build target configure will detect
7630 preserve_env AR
7631 preserve_env AS
7632 preserve_env CC
7633 preserve_env CPP
7634 preserve_env CXX
7635 preserve_env INSTALL
7636 preserve_env LD
7637 preserve_env LD_LIBRARY_PATH
7638 preserve_env LIBTOOL
7639 preserve_env MAKE
7640 preserve_env NM
7641 preserve_env OBJCOPY
7642 preserve_env PATH
7643 preserve_env PKG_CONFIG
7644 preserve_env PKG_CONFIG_LIBDIR
7645 preserve_env PKG_CONFIG_PATH
7646 preserve_env PYTHON
7647 preserve_env SDL_CONFIG
7648 preserve_env SDL2_CONFIG
7649 preserve_env SMBD
7650 preserve_env STRIP
7651 preserve_env WINDRES
7653 printf "exec" >>config.status
7654 printf " '%s'" "$0" "$@" >>config.status
7655 echo ' "$@"' >>config.status
7656 chmod +x config.status
7658 rm -r "$TMPDIR1"