vl: support -plugin option
[qemu/ar7.git] / configure
blobeabe84af6edcd8319bf1c27b2ed1c440e714d694
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"
33 TMPTXT="${TMPDIR1}/${TMPB}.txt"
35 rm -f config.log
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
41 echo >> config.log
42 echo "#" >> config.log
44 print_error() {
45 (echo
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
51 echo) >&2
54 error_exit() {
55 print_error "$@"
56 exit 1
59 do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
64 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66 funcs: ${FUNCNAME[*]}
67 lines: ${BASH_LINENO[*]}"
68 '; fi
69 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
71 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
83 esac
84 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
86 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
92 do_cc() {
93 do_compiler "$cc" "$@"
96 do_cxx() {
97 do_compiler "$cxx" "$@"
100 update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
117 esac
118 done
121 compile_object() {
122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
126 compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
132 # symbolically link $1 to $2. Portable version of "ln -sf".
133 symlink() {
134 rm -rf "$2"
135 mkdir -p "$(dirname "$2")"
136 ln -s "$1" "$2"
139 # check whether a command is available to this shell (may be either an
140 # executable or a builtin)
141 has() {
142 type "$1" >/dev/null 2>&1
145 # search for an executable in PATH
146 path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
158 if [ -z "$local_command" ]; then
159 return 1
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
175 have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
179 glob() {
180 eval test -z '"${1#'"$2"'}"'
183 supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
190 esac
191 return 1
194 supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
203 s390x:s390x)
204 return 0
206 esac
207 return 1
210 supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
216 return 0
218 esac
219 return 1
222 supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
229 esac
230 return 1
233 supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
240 esac
241 return 1
244 supported_target() {
245 case "$1" in
246 *-softmmu)
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
261 print_error "Invalid target name '$target'"
262 return 1
264 esac
265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
269 supported_hvf_target "$1" && return 0
270 supported_whpx_target "$1" && return 0
271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
276 ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
280 # make source path absolute
281 source_path=$(cd "$(dirname -- "$0")"; pwd)
283 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284 then
285 error_exit "main directory cannot contain spaces nor colons"
288 # default parameters
289 cpu=""
290 iasl="iasl"
291 interp_prefix="/usr/gnemul/qemu-%M"
292 static="no"
293 cross_prefix=""
294 audio_drv_list=""
295 block_drv_rw_whitelist=""
296 block_drv_ro_whitelist=""
297 host_cc="cc"
298 libs_cpu=""
299 libs_softmmu=""
300 libs_tools=""
301 audio_win_int=""
302 libs_qga=""
303 debug_info="yes"
304 stack_protector=""
306 if test -e "$source_path/.git"
307 then
308 git_update=yes
309 git_submodules="ui/keycodemapdb"
310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
312 else
313 git_update=no
314 git_submodules=""
316 if ! test -f "$source_path/ui/keycodemapdb/README"
317 then
318 echo
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
320 echo
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
325 echo
326 echo " https://www.qemu.org/download/#source"
327 echo
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
330 echo
331 exit 1
334 git="git"
336 # Don't accept a target_list environment variable.
337 unset target_list
338 unset target_list_exclude
340 # Default value for a variable defining feature "foo".
341 # * foo="no" feature will only be used if --enable-foo arg is given
342 # * foo="" feature will be searched for, and if found, will be used
343 # unless --disable-foo is given
344 # * foo="yes" this value will only be set by --enable-foo flag.
345 # feature will searched for,
346 # if not found, configure exits with error
348 # Always add --enable-foo and --disable-foo command line args.
349 # Distributions want to ensure that several features are compiled in, and it
350 # is impossible without a --enable-foo that exits if a feature is not found.
352 bluez=""
353 brlapi=""
354 curl=""
355 curses=""
356 docs=""
357 fdt=""
358 netmap="no"
359 sdl=""
360 sdl_image=""
361 virtfs=""
362 mpath=""
363 vnc="yes"
364 sparse="no"
365 vde=""
366 vnc_sasl=""
367 vnc_jpeg=""
368 vnc_png=""
369 xkbcommon=""
370 xen=""
371 xen_ctrl_version=""
372 xen_pci_passthrough=""
373 linux_aio=""
374 cap_ng=""
375 attr=""
376 libattr=""
377 xfs=""
378 tcg="yes"
379 membarrier=""
380 vhost_net=""
381 vhost_crypto=""
382 vhost_scsi=""
383 vhost_vsock=""
384 vhost_user=""
385 vhost_user_fs=""
386 kvm="no"
387 hax="no"
388 hvf="no"
389 whpx="no"
390 rdma=""
391 pvrdma=""
392 gprof="no"
393 debug_tcg="no"
394 debug="no"
395 sanitizers="no"
396 fortify_source=""
397 strip_opt="yes"
398 tcg_interpreter="no"
399 bigendian="no"
400 mingw32="no"
401 gcov="no"
402 gcov_tool="gcov"
403 EXESUF=""
404 DSOSUF=".so"
405 LDFLAGS_SHARED="-shared"
406 modules="no"
407 prefix="/usr/local"
408 mandir="\${prefix}/share/man"
409 datadir="\${prefix}/share"
410 firmwarepath="\${prefix}/share/qemu-firmware"
411 qemu_docdir="\${prefix}/share/doc/qemu"
412 bindir="\${prefix}/bin"
413 libdir="\${prefix}/lib"
414 libexecdir="\${prefix}/libexec"
415 includedir="\${prefix}/include"
416 sysconfdir="\${prefix}/etc"
417 local_statedir="\${prefix}/var"
418 confsuffix="/qemu"
419 slirp=""
420 oss_lib=""
421 bsd="no"
422 linux="no"
423 solaris="no"
424 profiler="no"
425 cocoa="no"
426 softmmu="yes"
427 linux_user="no"
428 bsd_user="no"
429 blobs="yes"
430 pkgversion=""
431 pie=""
432 qom_cast_debug="yes"
433 trace_backends="log"
434 trace_file="trace"
435 spice=""
436 rbd=""
437 smartcard=""
438 libusb=""
439 usb_redir=""
440 opengl=""
441 opengl_dmabuf="no"
442 cpuid_h="no"
443 avx2_opt=""
444 zlib="yes"
445 capstone=""
446 lzo=""
447 snappy=""
448 bzip2=""
449 lzfse=""
450 guest_agent=""
451 guest_agent_with_vss="no"
452 guest_agent_ntddscsi="no"
453 guest_agent_msi=""
454 vss_win32_sdk=""
455 win_sdk="no"
456 want_tools="yes"
457 libiscsi=""
458 libnfs=""
459 coroutine=""
460 coroutine_pool=""
461 debug_stack_usage="no"
462 crypto_afalg="no"
463 seccomp=""
464 glusterfs=""
465 glusterfs_xlator_opt="no"
466 glusterfs_discard="no"
467 glusterfs_fallocate="no"
468 glusterfs_zerofill="no"
469 glusterfs_ftruncate_has_stat="no"
470 glusterfs_iocb_has_stat="no"
471 gtk=""
472 gtk_gl="no"
473 tls_priority="NORMAL"
474 gnutls=""
475 nettle=""
476 gcrypt=""
477 gcrypt_hmac="no"
478 auth_pam=""
479 vte=""
480 virglrenderer=""
481 tpm=""
482 libssh=""
483 live_block_migration="yes"
484 numa=""
485 tcmalloc="no"
486 jemalloc="no"
487 replication="yes"
488 vxhs=""
489 bochs="yes"
490 cloop="yes"
491 dmg="yes"
492 qcow1="yes"
493 vdi="yes"
494 vvfat="yes"
495 qed="yes"
496 parallels="yes"
497 sheepdog="yes"
498 libxml2=""
499 debug_mutex="no"
500 libpmem=""
501 default_devices="yes"
502 plugins="no"
504 supported_cpu="no"
505 supported_os="no"
506 bogus_os="no"
507 malloc_trim=""
509 # parse CC options first
510 for opt do
511 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
512 case "$opt" in
513 --cross-prefix=*) cross_prefix="$optarg"
515 --cc=*) CC="$optarg"
517 --cxx=*) CXX="$optarg"
519 --cpu=*) cpu="$optarg"
521 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
523 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
525 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
526 EXTRA_LDFLAGS="$optarg"
528 --enable-debug-info) debug_info="yes"
530 --disable-debug-info) debug_info="no"
532 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
534 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
535 eval "cross_cc_cflags_${cc_arch}=\$optarg"
536 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
538 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
539 cc_archs="$cc_archs $cc_arch"
540 eval "cross_cc_${cc_arch}=\$optarg"
541 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
543 esac
544 done
545 # OS specific
546 # Using uname is really, really broken. Once we have the right set of checks
547 # we can eliminate its usage altogether.
549 # Preferred compiler:
550 # ${CC} (if set)
551 # ${cross_prefix}gcc (if cross-prefix specified)
552 # system compiler
553 if test -z "${CC}${cross_prefix}"; then
554 cc="$host_cc"
555 else
556 cc="${CC-${cross_prefix}gcc}"
559 if test -z "${CXX}${cross_prefix}"; then
560 cxx="c++"
561 else
562 cxx="${CXX-${cross_prefix}g++}"
565 ar="${AR-${cross_prefix}ar}"
566 as="${AS-${cross_prefix}as}"
567 ccas="${CCAS-$cc}"
568 cpp="${CPP-$cc -E}"
569 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
570 ld="${LD-${cross_prefix}ld}"
571 ranlib="${RANLIB-${cross_prefix}ranlib}"
572 nm="${NM-${cross_prefix}nm}"
573 strip="${STRIP-${cross_prefix}strip}"
574 windres="${WINDRES-${cross_prefix}windres}"
575 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
576 query_pkg_config() {
577 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
579 pkg_config=query_pkg_config
580 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
582 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
583 ARFLAGS="${ARFLAGS-rv}"
585 # default flags for all hosts
586 # We use -fwrapv to tell the compiler that we require a C dialect where
587 # left shift of signed integers is well defined and has the expected
588 # 2s-complement style results. (Both clang and gcc agree that it
589 # provides these semantics.)
590 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
591 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
592 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
593 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
594 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
595 if test "$debug_info" = "yes"; then
596 CFLAGS="-g $CFLAGS"
597 LDFLAGS="-g $LDFLAGS"
600 # running configure in the source tree?
601 # we know that's the case if configure is there.
602 if test -f "./configure"; then
603 pwd_is_source_path="y"
604 else
605 pwd_is_source_path="n"
608 check_define() {
609 cat > $TMPC <<EOF
610 #if !defined($1)
611 #error $1 not defined
612 #endif
613 int main(void) { return 0; }
615 compile_object
618 check_include() {
619 cat > $TMPC <<EOF
620 #include <$1>
621 int main(void) { return 0; }
623 compile_object
626 write_c_skeleton() {
627 cat > $TMPC <<EOF
628 int main(void) { return 0; }
632 if check_define __linux__ ; then
633 targetos="Linux"
634 elif check_define _WIN32 ; then
635 targetos='MINGW32'
636 elif check_define __OpenBSD__ ; then
637 targetos='OpenBSD'
638 elif check_define __sun__ ; then
639 targetos='SunOS'
640 elif check_define __HAIKU__ ; then
641 targetos='Haiku'
642 elif check_define __FreeBSD__ ; then
643 targetos='FreeBSD'
644 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
645 targetos='GNU/kFreeBSD'
646 elif check_define __DragonFly__ ; then
647 targetos='DragonFly'
648 elif check_define __NetBSD__; then
649 targetos='NetBSD'
650 elif check_define __APPLE__; then
651 targetos='Darwin'
652 else
653 # This is a fatal error, but don't report it yet, because we
654 # might be going to just print the --help text, or it might
655 # be the result of a missing compiler.
656 targetos='bogus'
657 bogus_os='yes'
660 # Some host OSes need non-standard checks for which CPU to use.
661 # Note that these checks are broken for cross-compilation: if you're
662 # cross-compiling to one of these OSes then you'll need to specify
663 # the correct CPU with the --cpu option.
664 case $targetos in
665 Darwin)
666 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
667 # run 64-bit userspace code.
668 # If the user didn't specify a CPU explicitly and the kernel says this is
669 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
670 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
671 cpu="x86_64"
674 SunOS)
675 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
676 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
677 cpu="x86_64"
679 esac
681 if test ! -z "$cpu" ; then
682 # command line argument
684 elif check_define __i386__ ; then
685 cpu="i386"
686 elif check_define __x86_64__ ; then
687 if check_define __ILP32__ ; then
688 cpu="x32"
689 else
690 cpu="x86_64"
692 elif check_define __sparc__ ; then
693 if check_define __arch64__ ; then
694 cpu="sparc64"
695 else
696 cpu="sparc"
698 elif check_define _ARCH_PPC ; then
699 if check_define _ARCH_PPC64 ; then
700 if check_define _LITTLE_ENDIAN ; then
701 cpu="ppc64le"
702 else
703 cpu="ppc64"
705 else
706 cpu="ppc"
708 elif check_define __mips__ ; then
709 cpu="mips"
710 elif check_define __s390__ ; then
711 if check_define __s390x__ ; then
712 cpu="s390x"
713 else
714 cpu="s390"
716 elif check_define __riscv ; then
717 if check_define _LP64 ; then
718 cpu="riscv64"
719 else
720 cpu="riscv32"
722 elif check_define __arm__ ; then
723 cpu="arm"
724 elif check_define __aarch64__ ; then
725 cpu="aarch64"
726 else
727 cpu=$(uname -m)
730 ARCH=
731 # Normalise host CPU name and set ARCH.
732 # Note that this case should only have supported host CPUs, not guests.
733 case "$cpu" in
734 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
735 supported_cpu="yes"
737 ppc64le)
738 ARCH="ppc64"
739 supported_cpu="yes"
741 i386|i486|i586|i686|i86pc|BePC)
742 cpu="i386"
743 supported_cpu="yes"
745 x86_64|amd64)
746 cpu="x86_64"
747 supported_cpu="yes"
749 armv*b|armv*l|arm)
750 cpu="arm"
751 supported_cpu="yes"
753 aarch64)
754 cpu="aarch64"
755 supported_cpu="yes"
757 mips*)
758 cpu="mips"
759 supported_cpu="yes"
761 sparc|sun4[cdmuv])
762 cpu="sparc"
763 supported_cpu="yes"
766 # This will result in either an error or falling back to TCI later
767 ARCH=unknown
769 esac
770 if test -z "$ARCH"; then
771 ARCH="$cpu"
774 # OS specific
776 # host *BSD for user mode
777 HOST_VARIANT_DIR=""
779 case $targetos in
780 MINGW32*)
781 mingw32="yes"
782 hax="yes"
783 vhost_user="no"
784 audio_possible_drivers="dsound sdl"
785 if check_include dsound.h; then
786 audio_drv_list="dsound"
787 else
788 audio_drv_list=""
790 supported_os="yes"
792 GNU/kFreeBSD)
793 bsd="yes"
794 audio_drv_list="oss try-sdl"
795 audio_possible_drivers="oss sdl pa"
797 FreeBSD)
798 bsd="yes"
799 make="${MAKE-gmake}"
800 audio_drv_list="oss try-sdl"
801 audio_possible_drivers="oss sdl pa"
802 # needed for kinfo_getvmmap(3) in libutil.h
803 LIBS="-lutil $LIBS"
804 # needed for kinfo_getproc
805 libs_qga="-lutil $libs_qga"
806 netmap="" # enable netmap autodetect
807 HOST_VARIANT_DIR="freebsd"
808 supported_os="yes"
810 DragonFly)
811 bsd="yes"
812 make="${MAKE-gmake}"
813 audio_drv_list="oss try-sdl"
814 audio_possible_drivers="oss sdl pa"
815 HOST_VARIANT_DIR="dragonfly"
817 NetBSD)
818 bsd="yes"
819 hax="yes"
820 make="${MAKE-gmake}"
821 audio_drv_list="oss try-sdl"
822 audio_possible_drivers="oss sdl"
823 oss_lib="-lossaudio"
824 HOST_VARIANT_DIR="netbsd"
825 supported_os="yes"
827 OpenBSD)
828 bsd="yes"
829 make="${MAKE-gmake}"
830 audio_drv_list="try-sdl"
831 audio_possible_drivers="sdl"
832 HOST_VARIANT_DIR="openbsd"
833 supported_os="yes"
835 Darwin)
836 bsd="yes"
837 darwin="yes"
838 hax="yes"
839 hvf="yes"
840 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
841 if [ "$cpu" = "x86_64" ] ; then
842 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
843 LDFLAGS="-arch x86_64 $LDFLAGS"
845 cocoa="yes"
846 audio_drv_list="coreaudio try-sdl"
847 audio_possible_drivers="coreaudio sdl"
848 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
849 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
850 # Disable attempts to use ObjectiveC features in os/object.h since they
851 # won't work when we're compiling with gcc as a C compiler.
852 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
853 HOST_VARIANT_DIR="darwin"
854 supported_os="yes"
856 SunOS)
857 solaris="yes"
858 make="${MAKE-gmake}"
859 install="${INSTALL-ginstall}"
860 smbd="${SMBD-/usr/sfw/sbin/smbd}"
861 if test -f /usr/include/sys/soundcard.h ; then
862 audio_drv_list="oss try-sdl"
864 audio_possible_drivers="oss sdl"
865 # needed for CMSG_ macros in sys/socket.h
866 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
867 # needed for TIOCWIN* defines in termios.h
868 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
869 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
870 solarisnetlibs="-lsocket -lnsl -lresolv"
871 LIBS="$solarisnetlibs $LIBS"
872 libs_qga="$solarisnetlibs $libs_qga"
874 Haiku)
875 haiku="yes"
876 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
877 LIBS="-lposix_error_mapper -lnetwork $LIBS"
879 Linux)
880 audio_drv_list="try-pa oss"
881 audio_possible_drivers="oss alsa sdl pa"
882 linux="yes"
883 linux_user="yes"
884 kvm="yes"
885 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
886 supported_os="yes"
887 libudev="yes"
889 esac
891 if [ "$bsd" = "yes" ] ; then
892 if [ "$darwin" != "yes" ] ; then
893 bsd_user="yes"
897 : ${make=${MAKE-make}}
898 : ${install=${INSTALL-install}}
899 # We prefer python 3.x. A bare 'python' is traditionally
900 # python 2.x, but some distros have it as python 3.x, so
901 # we check that before python2
902 python=
903 for binary in "${PYTHON-python3}" python python2
905 if has "$binary"
906 then
907 python="$binary"
908 break
910 done
911 : ${smbd=${SMBD-/usr/sbin/smbd}}
913 # Default objcc to clang if available, otherwise use CC
914 if has clang; then
915 objcc=clang
916 else
917 objcc="$cc"
920 if test "$mingw32" = "yes" ; then
921 EXESUF=".exe"
922 DSOSUF=".dll"
923 # MinGW needs -mthreads for TLS and macro _MT.
924 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
925 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
926 write_c_skeleton;
927 if compile_prog "" "-liberty" ; then
928 LIBS="-liberty $LIBS"
930 prefix="c:/Program Files/QEMU"
931 mandir="\${prefix}"
932 datadir="\${prefix}"
933 qemu_docdir="\${prefix}"
934 bindir="\${prefix}"
935 sysconfdir="\${prefix}"
936 local_statedir=
937 confsuffix=""
938 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
941 werror=""
943 for opt do
944 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
945 case "$opt" in
946 --help|-h) show_help=yes
948 --version|-V) exec cat $source_path/VERSION
950 --prefix=*) prefix="$optarg"
952 --interp-prefix=*) interp_prefix="$optarg"
954 --cross-prefix=*)
956 --cc=*)
958 --host-cc=*) host_cc="$optarg"
960 --cxx=*)
962 --iasl=*) iasl="$optarg"
964 --objcc=*) objcc="$optarg"
966 --make=*) make="$optarg"
968 --install=*) install="$optarg"
970 --python=*) python="$optarg"
972 --gcov=*) gcov_tool="$optarg"
974 --smbd=*) smbd="$optarg"
976 --extra-cflags=*)
978 --extra-cxxflags=*)
980 --extra-ldflags=*)
982 --enable-debug-info)
984 --disable-debug-info)
986 --cross-cc-*)
988 --enable-modules)
989 modules="yes"
991 --disable-modules)
992 modules="no"
994 --cpu=*)
996 --target-list=*) target_list="$optarg"
997 if test "$target_list_exclude"; then
998 error_exit "Can't mix --target-list with --target-list-exclude"
1001 --target-list-exclude=*) target_list_exclude="$optarg"
1002 if test "$target_list"; then
1003 error_exit "Can't mix --target-list-exclude with --target-list"
1006 --enable-trace-backends=*) trace_backends="$optarg"
1008 # XXX: backwards compatibility
1009 --enable-trace-backend=*) trace_backends="$optarg"
1011 --with-trace-file=*) trace_file="$optarg"
1013 --with-default-devices) default_devices="yes"
1015 --without-default-devices) default_devices="no"
1017 --enable-gprof) gprof="yes"
1019 --enable-gcov) gcov="yes"
1021 --static)
1022 static="yes"
1023 LDFLAGS="-static $LDFLAGS"
1024 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1026 --mandir=*) mandir="$optarg"
1028 --bindir=*) bindir="$optarg"
1030 --libdir=*) libdir="$optarg"
1032 --libexecdir=*) libexecdir="$optarg"
1034 --includedir=*) includedir="$optarg"
1036 --datadir=*) datadir="$optarg"
1038 --with-confsuffix=*) confsuffix="$optarg"
1040 --docdir=*) qemu_docdir="$optarg"
1042 --sysconfdir=*) sysconfdir="$optarg"
1044 --localstatedir=*) local_statedir="$optarg"
1046 --firmwarepath=*) firmwarepath="$optarg"
1048 --host=*|--build=*|\
1049 --disable-dependency-tracking|\
1050 --sbindir=*|--sharedstatedir=*|\
1051 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1052 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1053 # These switches are silently ignored, for compatibility with
1054 # autoconf-generated configure scripts. This allows QEMU's
1055 # configure to be used by RPM and similar macros that set
1056 # lots of directory switches by default.
1058 --disable-sdl) sdl="no"
1060 --enable-sdl) sdl="yes"
1062 --disable-sdl-image) sdl_image="no"
1064 --enable-sdl-image) sdl_image="yes"
1066 --disable-qom-cast-debug) qom_cast_debug="no"
1068 --enable-qom-cast-debug) qom_cast_debug="yes"
1070 --disable-virtfs) virtfs="no"
1072 --enable-virtfs) virtfs="yes"
1074 --disable-mpath) mpath="no"
1076 --enable-mpath) mpath="yes"
1078 --disable-vnc) vnc="no"
1080 --enable-vnc) vnc="yes"
1082 --oss-lib=*) oss_lib="$optarg"
1084 --audio-drv-list=*) audio_drv_list="$optarg"
1086 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1088 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1090 --enable-debug-tcg) debug_tcg="yes"
1092 --disable-debug-tcg) debug_tcg="no"
1094 --enable-debug)
1095 # Enable debugging options that aren't excessively noisy
1096 debug_tcg="yes"
1097 debug_mutex="yes"
1098 debug="yes"
1099 strip_opt="no"
1100 fortify_source="no"
1102 --enable-sanitizers) sanitizers="yes"
1104 --disable-sanitizers) sanitizers="no"
1106 --enable-sparse) sparse="yes"
1108 --disable-sparse) sparse="no"
1110 --disable-strip) strip_opt="no"
1112 --disable-vnc-sasl) vnc_sasl="no"
1114 --enable-vnc-sasl) vnc_sasl="yes"
1116 --disable-vnc-jpeg) vnc_jpeg="no"
1118 --enable-vnc-jpeg) vnc_jpeg="yes"
1120 --disable-vnc-png) vnc_png="no"
1122 --enable-vnc-png) vnc_png="yes"
1124 --disable-slirp) slirp="no"
1126 --enable-slirp=git) slirp="git"
1128 --enable-slirp=system) slirp="system"
1130 --disable-vde) vde="no"
1132 --enable-vde) vde="yes"
1134 --disable-netmap) netmap="no"
1136 --enable-netmap) netmap="yes"
1138 --disable-xen) xen="no"
1140 --enable-xen) xen="yes"
1142 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1144 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1146 --disable-brlapi) brlapi="no"
1148 --enable-brlapi) brlapi="yes"
1150 --disable-bluez) bluez="no"
1152 --enable-bluez) bluez="yes"
1154 --disable-kvm) kvm="no"
1156 --enable-kvm) kvm="yes"
1158 --disable-hax) hax="no"
1160 --enable-hax) hax="yes"
1162 --disable-hvf) hvf="no"
1164 --enable-hvf) hvf="yes"
1166 --disable-whpx) whpx="no"
1168 --enable-whpx) whpx="yes"
1170 --disable-tcg-interpreter) tcg_interpreter="no"
1172 --enable-tcg-interpreter) tcg_interpreter="yes"
1174 --disable-cap-ng) cap_ng="no"
1176 --enable-cap-ng) cap_ng="yes"
1178 --disable-tcg) tcg="no"
1180 --enable-tcg) tcg="yes"
1182 --disable-malloc-trim) malloc_trim="no"
1184 --enable-malloc-trim) malloc_trim="yes"
1186 --disable-spice) spice="no"
1188 --enable-spice) spice="yes"
1190 --disable-libiscsi) libiscsi="no"
1192 --enable-libiscsi) libiscsi="yes"
1194 --disable-libnfs) libnfs="no"
1196 --enable-libnfs) libnfs="yes"
1198 --enable-profiler) profiler="yes"
1200 --disable-cocoa) cocoa="no"
1202 --enable-cocoa)
1203 cocoa="yes" ;
1204 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1206 --disable-system) softmmu="no"
1208 --enable-system) softmmu="yes"
1210 --disable-user)
1211 linux_user="no" ;
1212 bsd_user="no" ;
1214 --enable-user) ;;
1215 --disable-linux-user) linux_user="no"
1217 --enable-linux-user) linux_user="yes"
1219 --disable-bsd-user) bsd_user="no"
1221 --enable-bsd-user) bsd_user="yes"
1223 --enable-pie) pie="yes"
1225 --disable-pie) pie="no"
1227 --enable-werror) werror="yes"
1229 --disable-werror) werror="no"
1231 --enable-stack-protector) stack_protector="yes"
1233 --disable-stack-protector) stack_protector="no"
1235 --disable-curses) curses="no"
1237 --enable-curses) curses="yes"
1239 --disable-iconv) iconv="no"
1241 --enable-iconv) iconv="yes"
1243 --disable-curl) curl="no"
1245 --enable-curl) curl="yes"
1247 --disable-fdt) fdt="no"
1249 --enable-fdt) fdt="yes"
1251 --disable-linux-aio) linux_aio="no"
1253 --enable-linux-aio) linux_aio="yes"
1255 --disable-attr) attr="no"
1257 --enable-attr) attr="yes"
1259 --disable-membarrier) membarrier="no"
1261 --enable-membarrier) membarrier="yes"
1263 --disable-blobs) blobs="no"
1265 --with-pkgversion=*) pkgversion="$optarg"
1267 --with-coroutine=*) coroutine="$optarg"
1269 --disable-coroutine-pool) coroutine_pool="no"
1271 --enable-coroutine-pool) coroutine_pool="yes"
1273 --enable-debug-stack-usage) debug_stack_usage="yes"
1275 --enable-crypto-afalg) crypto_afalg="yes"
1277 --disable-crypto-afalg) crypto_afalg="no"
1279 --disable-docs) docs="no"
1281 --enable-docs) docs="yes"
1283 --disable-vhost-net) vhost_net="no"
1285 --enable-vhost-net) vhost_net="yes"
1287 --disable-vhost-crypto) vhost_crypto="no"
1289 --enable-vhost-crypto) vhost_crypto="yes"
1291 --disable-vhost-scsi) vhost_scsi="no"
1293 --enable-vhost-scsi) vhost_scsi="yes"
1295 --disable-vhost-vsock) vhost_vsock="no"
1297 --enable-vhost-vsock) vhost_vsock="yes"
1299 --disable-vhost-user-fs) vhost_user_fs="no"
1301 --enable-vhost-user-fs) vhost_user_fs="yes"
1303 --disable-opengl) opengl="no"
1305 --enable-opengl) opengl="yes"
1307 --disable-rbd) rbd="no"
1309 --enable-rbd) rbd="yes"
1311 --disable-xfsctl) xfs="no"
1313 --enable-xfsctl) xfs="yes"
1315 --disable-smartcard) smartcard="no"
1317 --enable-smartcard) smartcard="yes"
1319 --disable-libusb) libusb="no"
1321 --enable-libusb) libusb="yes"
1323 --disable-usb-redir) usb_redir="no"
1325 --enable-usb-redir) usb_redir="yes"
1327 --disable-zlib-test) zlib="no"
1329 --disable-lzo) lzo="no"
1331 --enable-lzo) lzo="yes"
1333 --disable-snappy) snappy="no"
1335 --enable-snappy) snappy="yes"
1337 --disable-bzip2) bzip2="no"
1339 --enable-bzip2) bzip2="yes"
1341 --enable-lzfse) lzfse="yes"
1343 --disable-lzfse) lzfse="no"
1345 --enable-guest-agent) guest_agent="yes"
1347 --disable-guest-agent) guest_agent="no"
1349 --enable-guest-agent-msi) guest_agent_msi="yes"
1351 --disable-guest-agent-msi) guest_agent_msi="no"
1353 --with-vss-sdk) vss_win32_sdk=""
1355 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1357 --without-vss-sdk) vss_win32_sdk="no"
1359 --with-win-sdk) win_sdk=""
1361 --with-win-sdk=*) win_sdk="$optarg"
1363 --without-win-sdk) win_sdk="no"
1365 --enable-tools) want_tools="yes"
1367 --disable-tools) want_tools="no"
1369 --enable-seccomp) seccomp="yes"
1371 --disable-seccomp) seccomp="no"
1373 --disable-glusterfs) glusterfs="no"
1375 --disable-avx2) avx2_opt="no"
1377 --enable-avx2) avx2_opt="yes"
1379 --enable-glusterfs) glusterfs="yes"
1381 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1382 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1384 --enable-vhdx|--disable-vhdx)
1385 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1387 --enable-uuid|--disable-uuid)
1388 echo "$0: $opt is obsolete, UUID support is always built" >&2
1390 --disable-gtk) gtk="no"
1392 --enable-gtk) gtk="yes"
1394 --tls-priority=*) tls_priority="$optarg"
1396 --disable-gnutls) gnutls="no"
1398 --enable-gnutls) gnutls="yes"
1400 --disable-nettle) nettle="no"
1402 --enable-nettle) nettle="yes"
1404 --disable-gcrypt) gcrypt="no"
1406 --enable-gcrypt) gcrypt="yes"
1408 --disable-auth-pam) auth_pam="no"
1410 --enable-auth-pam) auth_pam="yes"
1412 --enable-rdma) rdma="yes"
1414 --disable-rdma) rdma="no"
1416 --enable-pvrdma) pvrdma="yes"
1418 --disable-pvrdma) pvrdma="no"
1420 --disable-vte) vte="no"
1422 --enable-vte) vte="yes"
1424 --disable-virglrenderer) virglrenderer="no"
1426 --enable-virglrenderer) virglrenderer="yes"
1428 --disable-tpm) tpm="no"
1430 --enable-tpm) tpm="yes"
1432 --disable-libssh) libssh="no"
1434 --enable-libssh) libssh="yes"
1436 --disable-live-block-migration) live_block_migration="no"
1438 --enable-live-block-migration) live_block_migration="yes"
1440 --disable-numa) numa="no"
1442 --enable-numa) numa="yes"
1444 --disable-libxml2) libxml2="no"
1446 --enable-libxml2) libxml2="yes"
1448 --disable-tcmalloc) tcmalloc="no"
1450 --enable-tcmalloc) tcmalloc="yes"
1452 --disable-jemalloc) jemalloc="no"
1454 --enable-jemalloc) jemalloc="yes"
1456 --disable-replication) replication="no"
1458 --enable-replication) replication="yes"
1460 --disable-vxhs) vxhs="no"
1462 --enable-vxhs) vxhs="yes"
1464 --disable-bochs) bochs="no"
1466 --enable-bochs) bochs="yes"
1468 --disable-cloop) cloop="no"
1470 --enable-cloop) cloop="yes"
1472 --disable-dmg) dmg="no"
1474 --enable-dmg) dmg="yes"
1476 --disable-qcow1) qcow1="no"
1478 --enable-qcow1) qcow1="yes"
1480 --disable-vdi) vdi="no"
1482 --enable-vdi) vdi="yes"
1484 --disable-vvfat) vvfat="no"
1486 --enable-vvfat) vvfat="yes"
1488 --disable-qed) qed="no"
1490 --enable-qed) qed="yes"
1492 --disable-parallels) parallels="no"
1494 --enable-parallels) parallels="yes"
1496 --disable-sheepdog) sheepdog="no"
1498 --enable-sheepdog) sheepdog="yes"
1500 --disable-vhost-user) vhost_user="no"
1502 --enable-vhost-user) vhost_user="yes"
1504 --disable-vhost-kernel) vhost_kernel="no"
1506 --enable-vhost-kernel) vhost_kernel="yes"
1508 --disable-capstone) capstone="no"
1510 --enable-capstone) capstone="yes"
1512 --enable-capstone=git) capstone="git"
1514 --enable-capstone=system) capstone="system"
1516 --with-git=*) git="$optarg"
1518 --enable-git-update) git_update=yes
1520 --disable-git-update) git_update=no
1522 --enable-debug-mutex) debug_mutex=yes
1524 --disable-debug-mutex) debug_mutex=no
1526 --enable-libpmem) libpmem=yes
1528 --disable-libpmem) libpmem=no
1530 --enable-xkbcommon) xkbcommon=yes
1532 --disable-xkbcommon) xkbcommon=no
1534 --enable-plugins) plugins="yes"
1536 --disable-plugins) plugins="no"
1539 echo "ERROR: unknown option $opt"
1540 echo "Try '$0 --help' for more information"
1541 exit 1
1543 esac
1544 done
1546 case "$cpu" in
1547 ppc)
1548 CPU_CFLAGS="-m32"
1549 LDFLAGS="-m32 $LDFLAGS"
1551 ppc64)
1552 CPU_CFLAGS="-m64"
1553 LDFLAGS="-m64 $LDFLAGS"
1555 sparc)
1556 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1557 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1559 sparc64)
1560 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1561 LDFLAGS="-m64 $LDFLAGS"
1563 s390)
1564 CPU_CFLAGS="-m31"
1565 LDFLAGS="-m31 $LDFLAGS"
1567 s390x)
1568 CPU_CFLAGS="-m64"
1569 LDFLAGS="-m64 $LDFLAGS"
1571 i386)
1572 CPU_CFLAGS="-m32"
1573 LDFLAGS="-m32 $LDFLAGS"
1575 x86_64)
1576 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1577 # If we truly care, we should simply detect this case at
1578 # runtime and generate the fallback to serial emulation.
1579 CPU_CFLAGS="-m64 -mcx16"
1580 LDFLAGS="-m64 $LDFLAGS"
1582 x32)
1583 CPU_CFLAGS="-mx32"
1584 LDFLAGS="-mx32 $LDFLAGS"
1586 # No special flags required for other host CPUs
1587 esac
1589 eval "cross_cc_${cpu}=\$host_cc"
1590 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1591 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1593 # For user-mode emulation the host arch has to be one we explicitly
1594 # support, even if we're using TCI.
1595 if [ "$ARCH" = "unknown" ]; then
1596 bsd_user="no"
1597 linux_user="no"
1600 default_target_list=""
1602 mak_wilds=""
1604 if [ "$softmmu" = "yes" ]; then
1605 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1607 if [ "$linux_user" = "yes" ]; then
1608 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1610 if [ "$bsd_user" = "yes" ]; then
1611 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1614 if test -z "$target_list_exclude"; then
1615 for config in $mak_wilds; do
1616 default_target_list="${default_target_list} $(basename "$config" .mak)"
1617 done
1618 else
1619 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1620 for config in $mak_wilds; do
1621 target="$(basename "$config" .mak)"
1622 exclude="no"
1623 for excl in $exclude_list; do
1624 if test "$excl" = "$target"; then
1625 exclude="yes"
1626 break;
1628 done
1629 if test "$exclude" = "no"; then
1630 default_target_list="${default_target_list} $target"
1632 done
1635 # Enumerate public trace backends for --help output
1636 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1638 if test x"$show_help" = x"yes" ; then
1639 cat << EOF
1641 Usage: configure [options]
1642 Options: [defaults in brackets after descriptions]
1644 Standard options:
1645 --help print this message
1646 --prefix=PREFIX install in PREFIX [$prefix]
1647 --interp-prefix=PREFIX where to find shared libraries, etc.
1648 use %M for cpu name [$interp_prefix]
1649 --target-list=LIST set target list (default: build everything)
1650 $(echo Available targets: $default_target_list | \
1651 fold -s -w 53 | sed -e 's/^/ /')
1652 --target-list-exclude=LIST exclude a set of targets from the default target-list
1654 Advanced options (experts only):
1655 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1656 --cc=CC use C compiler CC [$cc]
1657 --iasl=IASL use ACPI compiler IASL [$iasl]
1658 --host-cc=CC use C compiler CC [$host_cc] for code run at
1659 build time
1660 --cxx=CXX use C++ compiler CXX [$cxx]
1661 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1662 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1663 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1664 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1665 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1666 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1667 --make=MAKE use specified make [$make]
1668 --install=INSTALL use specified install [$install]
1669 --python=PYTHON use specified python [$python]
1670 --smbd=SMBD use specified smbd [$smbd]
1671 --with-git=GIT use specified git [$git]
1672 --static enable static build [$static]
1673 --mandir=PATH install man pages in PATH
1674 --datadir=PATH install firmware in PATH$confsuffix
1675 --docdir=PATH install documentation in PATH$confsuffix
1676 --bindir=PATH install binaries in PATH
1677 --libdir=PATH install libraries in PATH
1678 --libexecdir=PATH install helper binaries in PATH
1679 --sysconfdir=PATH install config in PATH$confsuffix
1680 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1681 --firmwarepath=PATH search PATH for firmware files
1682 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1683 --with-pkgversion=VERS use specified string as sub-version of the package
1684 --enable-debug enable common debug build options
1685 --enable-sanitizers enable default sanitizers
1686 --disable-strip disable stripping binaries
1687 --disable-werror disable compilation abort on warning
1688 --disable-stack-protector disable compiler-provided stack protection
1689 --audio-drv-list=LIST set audio drivers list:
1690 Available drivers: $audio_possible_drivers
1691 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1692 --block-drv-rw-whitelist=L
1693 set block driver read-write whitelist
1694 (affects only QEMU, not qemu-img)
1695 --block-drv-ro-whitelist=L
1696 set block driver read-only whitelist
1697 (affects only QEMU, not qemu-img)
1698 --enable-trace-backends=B Set trace backend
1699 Available backends: $trace_backend_list
1700 --with-trace-file=NAME Full PATH,NAME of file to store traces
1701 Default:trace-<pid>
1702 --disable-slirp disable SLIRP userspace network connectivity
1703 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1704 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1705 --oss-lib path to OSS library
1706 --cpu=CPU Build for host CPU [$cpu]
1707 --with-coroutine=BACKEND coroutine backend. Supported options:
1708 ucontext, sigaltstack, windows
1709 --enable-gcov enable test coverage analysis with gcov
1710 --gcov=GCOV use specified gcov [$gcov_tool]
1711 --disable-blobs disable installing provided firmware blobs
1712 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1713 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1714 --tls-priority default TLS protocol/cipher priority string
1715 --enable-gprof QEMU profiling with gprof
1716 --enable-profiler profiler support
1717 --enable-debug-stack-usage
1718 track the maximum stack usage of stacks created by qemu_alloc_stack
1719 --enable-plugins
1720 enable plugins via shared library loading
1722 Optional features, enabled with --enable-FEATURE and
1723 disabled with --disable-FEATURE, default is enabled if available:
1725 system all system emulation targets
1726 user supported user emulation targets
1727 linux-user all linux usermode emulation targets
1728 bsd-user all BSD usermode emulation targets
1729 docs build documentation
1730 guest-agent build the QEMU Guest Agent
1731 guest-agent-msi build guest agent Windows MSI installation package
1732 pie Position Independent Executables
1733 modules modules support (non-Windows)
1734 debug-tcg TCG debugging (default is disabled)
1735 debug-info debugging information
1736 sparse sparse checker
1738 gnutls GNUTLS cryptography support
1739 nettle nettle cryptography support
1740 gcrypt libgcrypt cryptography support
1741 auth-pam PAM access control
1742 sdl SDL UI
1743 sdl-image SDL Image support for icons
1744 gtk gtk UI
1745 vte vte support for the gtk UI
1746 curses curses UI
1747 iconv font glyph conversion support
1748 vnc VNC UI support
1749 vnc-sasl SASL encryption for VNC server
1750 vnc-jpeg JPEG lossy compression for VNC server
1751 vnc-png PNG compression for VNC server
1752 cocoa Cocoa UI (Mac OS X only)
1753 virtfs VirtFS
1754 mpath Multipath persistent reservation passthrough
1755 xen xen backend driver support
1756 xen-pci-passthrough PCI passthrough support for Xen
1757 brlapi BrlAPI (Braile)
1758 curl curl connectivity
1759 membarrier membarrier system call (for Linux 4.14+ or Windows)
1760 fdt fdt device tree
1761 bluez bluez stack connectivity
1762 kvm KVM acceleration support
1763 hax HAX acceleration support
1764 hvf Hypervisor.framework acceleration support
1765 whpx Windows Hypervisor Platform acceleration support
1766 rdma Enable RDMA-based migration
1767 pvrdma Enable PVRDMA support
1768 vde support for vde network
1769 netmap support for netmap network
1770 linux-aio Linux AIO support
1771 cap-ng libcap-ng support
1772 attr attr and xattr support
1773 vhost-net vhost-net kernel acceleration support
1774 vhost-vsock virtio sockets device support
1775 vhost-scsi vhost-scsi kernel target support
1776 vhost-crypto vhost-user-crypto backend support
1777 vhost-kernel vhost kernel backend support
1778 vhost-user vhost-user backend support
1779 spice spice
1780 rbd rados block device (rbd)
1781 libiscsi iscsi support
1782 libnfs nfs support
1783 smartcard smartcard support (libcacard)
1784 libusb libusb (for usb passthrough)
1785 live-block-migration Block migration in the main migration stream
1786 usb-redir usb network redirection support
1787 lzo support of lzo compression library
1788 snappy support of snappy compression library
1789 bzip2 support of bzip2 compression library
1790 (for reading bzip2-compressed dmg images)
1791 lzfse support of lzfse compression library
1792 (for reading lzfse-compressed dmg images)
1793 seccomp seccomp support
1794 coroutine-pool coroutine freelist (better performance)
1795 glusterfs GlusterFS backend
1796 tpm TPM support
1797 libssh ssh block device support
1798 numa libnuma support
1799 libxml2 for Parallels image format
1800 tcmalloc tcmalloc support
1801 jemalloc jemalloc support
1802 avx2 AVX2 optimization support
1803 replication replication support
1804 opengl opengl support
1805 virglrenderer virgl rendering support
1806 xfsctl xfsctl support
1807 qom-cast-debug cast debugging support
1808 tools build qemu-io, qemu-nbd and qemu-img tools
1809 vxhs Veritas HyperScale vDisk backend support
1810 bochs bochs image format support
1811 cloop cloop image format support
1812 dmg dmg image format support
1813 qcow1 qcow v1 image format support
1814 vdi vdi image format support
1815 vvfat vvfat image format support
1816 qed qed image format support
1817 parallels parallels image format support
1818 sheepdog sheepdog block driver support
1819 crypto-afalg Linux AF_ALG crypto backend driver
1820 capstone capstone disassembler support
1821 debug-mutex mutex debugging support
1822 libpmem libpmem support
1823 xkbcommon xkbcommon support
1825 NOTE: The object files are built at the place where configure is launched
1827 exit 0
1830 # Remove old dependency files to make sure that they get properly regenerated
1831 rm -f */config-devices.mak.d
1833 if test -z "$python"
1834 then
1835 error_exit "Python not found. Use --python=/path/to/python"
1838 # Note that if the Python conditional here evaluates True we will exit
1839 # with status 1 which is a shell 'false' value.
1840 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1841 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1842 "Use --python=/path/to/python to specify a supported Python."
1845 # Preserve python version since some functionality is dependent on it
1846 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1848 # Suppress writing compiled files
1849 python="$python -B"
1851 # Check that the C compiler works. Doing this here before testing
1852 # the host CPU ensures that we had a valid CC to autodetect the
1853 # $cpu var (and we should bail right here if that's not the case).
1854 # It also allows the help message to be printed without a CC.
1855 write_c_skeleton;
1856 if compile_object ; then
1857 : C compiler works ok
1858 else
1859 error_exit "\"$cc\" either does not exist or does not work"
1861 if ! compile_prog ; then
1862 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1865 # Now we have handled --enable-tcg-interpreter and know we're not just
1866 # printing the help message, bail out if the host CPU isn't supported.
1867 if test "$ARCH" = "unknown"; then
1868 if test "$tcg_interpreter" = "yes" ; then
1869 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1870 else
1871 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1875 # Consult white-list to determine whether to enable werror
1876 # by default. Only enable by default for git builds
1877 if test -z "$werror" ; then
1878 if test -e "$source_path/.git" && \
1879 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1880 werror="yes"
1881 else
1882 werror="no"
1886 if test "$bogus_os" = "yes"; then
1887 # Now that we know that we're not printing the help and that
1888 # the compiler works (so the results of the check_defines we used
1889 # to identify the OS are reliable), if we didn't recognize the
1890 # host OS we should stop now.
1891 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1894 # Check whether the compiler matches our minimum requirements:
1895 cat > $TMPC << EOF
1896 #if defined(__clang_major__) && defined(__clang_minor__)
1897 # ifdef __apple_build_version__
1898 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1899 # error You need at least XCode Clang v5.1 to compile QEMU
1900 # endif
1901 # else
1902 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1903 # error You need at least Clang v3.4 to compile QEMU
1904 # endif
1905 # endif
1906 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1907 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1908 # error You need at least GCC v4.8 to compile QEMU
1909 # endif
1910 #else
1911 # error You either need GCC or Clang to compiler QEMU
1912 #endif
1913 int main (void) { return 0; }
1915 if ! compile_prog "" "" ; then
1916 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1919 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1920 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1921 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1922 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1923 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1924 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1925 # Note that we do not add -Werror to gcc_flags here, because that would
1926 # enable it for all configure tests. If a configure test failed due
1927 # to -Werror this would just silently disable some features,
1928 # so it's too error prone.
1930 cc_has_warning_flag() {
1931 write_c_skeleton;
1933 # Use the positive sense of the flag when testing for -Wno-wombat
1934 # support (gcc will happily accept the -Wno- form of unknown
1935 # warning options).
1936 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1937 compile_prog "-Werror $optflag" ""
1940 for flag in $gcc_flags; do
1941 if cc_has_warning_flag $flag ; then
1942 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1944 done
1946 if test "$stack_protector" != "no"; then
1947 cat > $TMPC << EOF
1948 int main(int argc, char *argv[])
1950 char arr[64], *p = arr, *c = argv[0];
1951 while (*c) {
1952 *p++ = *c++;
1954 return 0;
1957 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1958 sp_on=0
1959 for flag in $gcc_flags; do
1960 # We need to check both a compile and a link, since some compiler
1961 # setups fail only on a .c->.o compile and some only at link time
1962 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1963 compile_prog "-Werror $flag" ""; then
1964 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1965 sp_on=1
1966 break
1968 done
1969 if test "$stack_protector" = yes; then
1970 if test $sp_on = 0; then
1971 error_exit "Stack protector not supported"
1976 # Disable -Wmissing-braces on older compilers that warn even for
1977 # the "universal" C zero initializer {0}.
1978 cat > $TMPC << EOF
1979 struct {
1980 int a[2];
1981 } x = {0};
1983 if compile_object "-Werror" "" ; then
1985 else
1986 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1989 # Our module code doesn't support Windows
1990 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1991 error_exit "Modules are not available for Windows"
1994 # Static linking is not possible with modules or PIE
1995 if test "$static" = "yes" ; then
1996 if test "$modules" = "yes" ; then
1997 error_exit "static and modules are mutually incompatible"
1999 if test "$pie" = "yes" ; then
2000 error_exit "static and pie are mutually incompatible"
2001 else
2002 pie="no"
2006 # Unconditional check for compiler __thread support
2007 cat > $TMPC << EOF
2008 static __thread int tls_var;
2009 int main(void) { return tls_var; }
2012 if ! compile_prog "-Werror" "" ; then
2013 error_exit "Your compiler does not support the __thread specifier for " \
2014 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2017 if test "$pie" = ""; then
2018 case "$cpu-$targetos" in
2019 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2022 pie="no"
2024 esac
2027 if test "$pie" != "no" ; then
2028 cat > $TMPC << EOF
2030 #ifdef __linux__
2031 # define THREAD __thread
2032 #else
2033 # define THREAD
2034 #endif
2036 static THREAD int tls_var;
2038 int main(void) { return tls_var; }
2041 # check we support --no-pie first...
2042 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2043 CFLAGS_NOPIE="-fno-pie"
2044 LDFLAGS_NOPIE="-nopie"
2047 if compile_prog "-fPIE -DPIE" "-pie"; then
2048 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2049 LDFLAGS="-pie $LDFLAGS"
2050 pie="yes"
2051 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2052 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2054 else
2055 if test "$pie" = "yes"; then
2056 error_exit "PIE not available due to missing toolchain support"
2057 else
2058 echo "Disabling PIE due to missing toolchain support"
2059 pie="no"
2064 ##########################################
2065 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2066 # use i686 as default anyway, but for those that don't, an explicit
2067 # specification is necessary
2069 if test "$cpu" = "i386"; then
2070 cat > $TMPC << EOF
2071 static int sfaa(int *ptr)
2073 return __sync_fetch_and_and(ptr, 0);
2076 int main(void)
2078 int val = 42;
2079 val = __sync_val_compare_and_swap(&val, 0, 1);
2080 sfaa(&val);
2081 return val;
2084 if ! compile_prog "" "" ; then
2085 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2089 #########################################
2090 # Solaris specific configure tool chain decisions
2092 if test "$solaris" = "yes" ; then
2093 if has $install; then
2095 else
2096 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2097 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2098 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2100 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2101 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2102 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2103 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2105 if has ar; then
2107 else
2108 if test -f /usr/ccs/bin/ar ; then
2109 error_exit "No path includes ar" \
2110 "Add /usr/ccs/bin to your path and rerun configure"
2112 error_exit "No path includes ar"
2116 if test -z "${target_list+xxx}" ; then
2117 for target in $default_target_list; do
2118 supported_target $target 2>/dev/null && \
2119 target_list="$target_list $target"
2120 done
2121 target_list="${target_list# }"
2122 else
2123 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2124 for target in $target_list; do
2125 # Check that we recognised the target name; this allows a more
2126 # friendly error message than if we let it fall through.
2127 case " $default_target_list " in
2128 *" $target "*)
2131 error_exit "Unknown target name '$target'"
2133 esac
2134 supported_target $target || exit 1
2135 done
2138 # see if system emulation was really requested
2139 case " $target_list " in
2140 *"-softmmu "*) softmmu=yes
2142 *) softmmu=no
2144 esac
2146 feature_not_found() {
2147 feature=$1
2148 remedy=$2
2150 error_exit "User requested feature $feature" \
2151 "configure was not able to find it." \
2152 "$remedy"
2155 # ---
2156 # big/little endian test
2157 cat > $TMPC << EOF
2158 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2159 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2160 extern int foo(short *, short *);
2161 int main(int argc, char *argv[]) {
2162 return foo(big_endian, little_endian);
2166 if compile_object ; then
2167 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2168 bigendian="yes"
2169 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2170 bigendian="no"
2171 else
2172 echo big/little test failed
2174 else
2175 echo big/little test failed
2178 ##########################################
2179 # cocoa implies not SDL or GTK
2180 # (the cocoa UI code currently assumes it is always the active UI
2181 # and doesn't interact well with other UI frontend code)
2182 if test "$cocoa" = "yes"; then
2183 if test "$sdl" = "yes"; then
2184 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2186 if test "$gtk" = "yes"; then
2187 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2189 gtk=no
2190 sdl=no
2193 # Some versions of Mac OS X incorrectly define SIZE_MAX
2194 cat > $TMPC << EOF
2195 #include <stdint.h>
2196 #include <stdio.h>
2197 int main(int argc, char *argv[]) {
2198 return printf("%zu", SIZE_MAX);
2201 have_broken_size_max=no
2202 if ! compile_object -Werror ; then
2203 have_broken_size_max=yes
2206 ##########################################
2207 # L2TPV3 probe
2209 cat > $TMPC <<EOF
2210 #include <sys/socket.h>
2211 #include <linux/ip.h>
2212 int main(void) { return sizeof(struct mmsghdr); }
2214 if compile_prog "" "" ; then
2215 l2tpv3=yes
2216 else
2217 l2tpv3=no
2220 #########################################
2221 # vhost interdependencies and host support
2223 # vhost backends
2224 test "$vhost_user" = "" && vhost_user=yes
2225 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2226 error_exit "vhost-user isn't available on win32"
2228 test "$vhost_kernel" = "" && vhost_kernel=$linux
2229 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2230 error_exit "vhost-kernel is only available on Linux"
2233 # vhost-kernel devices
2234 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2235 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2236 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2238 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2239 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2240 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2243 # vhost-user backends
2244 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2245 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2246 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2248 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2249 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2250 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2252 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2253 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2254 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2257 # OR the vhost-kernel and vhost-user values for simplicity
2258 if test "$vhost_net" = ""; then
2259 test "$vhost_net_user" = "yes" && vhost_net=yes
2260 test "$vhost_kernel" = "yes" && vhost_net=yes
2263 ##########################################
2264 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2266 if test "$mingw32" = "yes"; then
2267 # Some versions of MinGW / Mingw-w64 lack localtime_r
2268 # and gmtime_r entirely.
2270 # Some versions of Mingw-w64 define a macro for
2271 # localtime_r/gmtime_r.
2273 # Some versions of Mingw-w64 will define functions
2274 # for localtime_r/gmtime_r, but only if you have
2275 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2276 # though, unistd.h and pthread.h both define
2277 # that for you.
2279 # So this #undef localtime_r and #include <unistd.h>
2280 # are not in fact redundant.
2281 cat > $TMPC << EOF
2282 #include <unistd.h>
2283 #include <time.h>
2284 #undef localtime_r
2285 int main(void) { localtime_r(NULL, NULL); return 0; }
2287 if compile_prog "" "" ; then
2288 localtime_r="yes"
2289 else
2290 localtime_r="no"
2294 ##########################################
2295 # pkg-config probe
2297 if ! has "$pkg_config_exe"; then
2298 error_exit "pkg-config binary '$pkg_config_exe' not found"
2301 ##########################################
2302 # NPTL probe
2304 if test "$linux_user" = "yes"; then
2305 cat > $TMPC <<EOF
2306 #include <sched.h>
2307 #include <linux/futex.h>
2308 int main(void) {
2309 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2310 #error bork
2311 #endif
2312 return 0;
2315 if ! compile_object ; then
2316 feature_not_found "nptl" "Install glibc and linux kernel headers."
2320 ##########################################
2321 # lzo check
2323 if test "$lzo" != "no" ; then
2324 cat > $TMPC << EOF
2325 #include <lzo/lzo1x.h>
2326 int main(void) { lzo_version(); return 0; }
2328 if compile_prog "" "-llzo2" ; then
2329 libs_softmmu="$libs_softmmu -llzo2"
2330 lzo="yes"
2331 else
2332 if test "$lzo" = "yes"; then
2333 feature_not_found "liblzo2" "Install liblzo2 devel"
2335 lzo="no"
2339 ##########################################
2340 # snappy check
2342 if test "$snappy" != "no" ; then
2343 cat > $TMPC << EOF
2344 #include <snappy-c.h>
2345 int main(void) { snappy_max_compressed_length(4096); return 0; }
2347 if compile_prog "" "-lsnappy" ; then
2348 libs_softmmu="$libs_softmmu -lsnappy"
2349 snappy="yes"
2350 else
2351 if test "$snappy" = "yes"; then
2352 feature_not_found "libsnappy" "Install libsnappy devel"
2354 snappy="no"
2358 ##########################################
2359 # bzip2 check
2361 if test "$bzip2" != "no" ; then
2362 cat > $TMPC << EOF
2363 #include <bzlib.h>
2364 int main(void) { BZ2_bzlibVersion(); return 0; }
2366 if compile_prog "" "-lbz2" ; then
2367 bzip2="yes"
2368 else
2369 if test "$bzip2" = "yes"; then
2370 feature_not_found "libbzip2" "Install libbzip2 devel"
2372 bzip2="no"
2376 ##########################################
2377 # lzfse check
2379 if test "$lzfse" != "no" ; then
2380 cat > $TMPC << EOF
2381 #include <lzfse.h>
2382 int main(void) { lzfse_decode_scratch_size(); return 0; }
2384 if compile_prog "" "-llzfse" ; then
2385 lzfse="yes"
2386 else
2387 if test "$lzfse" = "yes"; then
2388 feature_not_found "lzfse" "Install lzfse devel"
2390 lzfse="no"
2394 ##########################################
2395 # libseccomp check
2397 if test "$seccomp" != "no" ; then
2398 libseccomp_minver="2.3.0"
2399 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2400 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2401 seccomp_libs="$($pkg_config --libs libseccomp)"
2402 seccomp="yes"
2403 else
2404 if test "$seccomp" = "yes" ; then
2405 feature_not_found "libseccomp" \
2406 "Install libseccomp devel >= $libseccomp_minver"
2408 seccomp="no"
2411 ##########################################
2412 # xen probe
2414 if test "$xen" != "no" ; then
2415 # Check whether Xen library path is specified via --extra-ldflags to avoid
2416 # overriding this setting with pkg-config output. If not, try pkg-config
2417 # to obtain all needed flags.
2419 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2420 $pkg_config --exists xencontrol ; then
2421 xen_ctrl_version="$(printf '%d%02d%02d' \
2422 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2423 xen=yes
2424 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2425 xen_pc="$xen_pc xenevtchn xendevicemodel"
2426 if $pkg_config --exists xentoolcore; then
2427 xen_pc="$xen_pc xentoolcore"
2429 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2430 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2431 else
2433 xen_libs="-lxenstore -lxenctrl -lxenguest"
2434 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2436 # First we test whether Xen headers and libraries are available.
2437 # If no, we are done and there is no Xen support.
2438 # If yes, more tests are run to detect the Xen version.
2440 # Xen (any)
2441 cat > $TMPC <<EOF
2442 #include <xenctrl.h>
2443 int main(void) {
2444 return 0;
2447 if ! compile_prog "" "$xen_libs" ; then
2448 # Xen not found
2449 if test "$xen" = "yes" ; then
2450 feature_not_found "xen" "Install xen devel"
2452 xen=no
2454 # Xen unstable
2455 elif
2456 cat > $TMPC <<EOF &&
2457 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2458 #define __XEN_TOOLS__
2459 #include <xendevicemodel.h>
2460 #include <xenforeignmemory.h>
2461 int main(void) {
2462 xendevicemodel_handle *xd;
2463 xenforeignmemory_handle *xfmem;
2465 xd = xendevicemodel_open(0, 0);
2466 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2468 xfmem = xenforeignmemory_open(0, 0);
2469 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2471 return 0;
2474 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2475 then
2476 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2477 xen_ctrl_version=41100
2478 xen=yes
2479 elif
2480 cat > $TMPC <<EOF &&
2481 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2482 #include <xenforeignmemory.h>
2483 #include <xentoolcore.h>
2484 int main(void) {
2485 xenforeignmemory_handle *xfmem;
2487 xfmem = xenforeignmemory_open(0, 0);
2488 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2489 xentoolcore_restrict_all(0);
2491 return 0;
2494 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2495 then
2496 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2497 xen_ctrl_version=41000
2498 xen=yes
2499 elif
2500 cat > $TMPC <<EOF &&
2501 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2502 #define __XEN_TOOLS__
2503 #include <xendevicemodel.h>
2504 int main(void) {
2505 xendevicemodel_handle *xd;
2507 xd = xendevicemodel_open(0, 0);
2508 xendevicemodel_close(xd);
2510 return 0;
2513 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2514 then
2515 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2516 xen_ctrl_version=40900
2517 xen=yes
2518 elif
2519 cat > $TMPC <<EOF &&
2521 * If we have stable libs the we don't want the libxc compat
2522 * layers, regardless of what CFLAGS we may have been given.
2524 * Also, check if xengnttab_grant_copy_segment_t is defined and
2525 * grant copy operation is implemented.
2527 #undef XC_WANT_COMPAT_EVTCHN_API
2528 #undef XC_WANT_COMPAT_GNTTAB_API
2529 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2530 #include <xenctrl.h>
2531 #include <xenstore.h>
2532 #include <xenevtchn.h>
2533 #include <xengnttab.h>
2534 #include <xenforeignmemory.h>
2535 #include <stdint.h>
2536 #include <xen/hvm/hvm_info_table.h>
2537 #if !defined(HVM_MAX_VCPUS)
2538 # error HVM_MAX_VCPUS not defined
2539 #endif
2540 int main(void) {
2541 xc_interface *xc = NULL;
2542 xenforeignmemory_handle *xfmem;
2543 xenevtchn_handle *xe;
2544 xengnttab_handle *xg;
2545 xengnttab_grant_copy_segment_t* seg = NULL;
2547 xs_daemon_open();
2549 xc = xc_interface_open(0, 0, 0);
2550 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2551 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2552 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2553 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2555 xfmem = xenforeignmemory_open(0, 0);
2556 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2558 xe = xenevtchn_open(0, 0);
2559 xenevtchn_fd(xe);
2561 xg = xengnttab_open(0, 0);
2562 xengnttab_grant_copy(xg, 0, seg);
2564 return 0;
2567 compile_prog "" "$xen_libs $xen_stable_libs"
2568 then
2569 xen_ctrl_version=40800
2570 xen=yes
2571 elif
2572 cat > $TMPC <<EOF &&
2574 * If we have stable libs the we don't want the libxc compat
2575 * layers, regardless of what CFLAGS we may have been given.
2577 #undef XC_WANT_COMPAT_EVTCHN_API
2578 #undef XC_WANT_COMPAT_GNTTAB_API
2579 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2580 #include <xenctrl.h>
2581 #include <xenstore.h>
2582 #include <xenevtchn.h>
2583 #include <xengnttab.h>
2584 #include <xenforeignmemory.h>
2585 #include <stdint.h>
2586 #include <xen/hvm/hvm_info_table.h>
2587 #if !defined(HVM_MAX_VCPUS)
2588 # error HVM_MAX_VCPUS not defined
2589 #endif
2590 int main(void) {
2591 xc_interface *xc = NULL;
2592 xenforeignmemory_handle *xfmem;
2593 xenevtchn_handle *xe;
2594 xengnttab_handle *xg;
2596 xs_daemon_open();
2598 xc = xc_interface_open(0, 0, 0);
2599 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2600 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2601 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2602 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2604 xfmem = xenforeignmemory_open(0, 0);
2605 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2607 xe = xenevtchn_open(0, 0);
2608 xenevtchn_fd(xe);
2610 xg = xengnttab_open(0, 0);
2611 xengnttab_map_grant_ref(xg, 0, 0, 0);
2613 return 0;
2616 compile_prog "" "$xen_libs $xen_stable_libs"
2617 then
2618 xen_ctrl_version=40701
2619 xen=yes
2621 # Xen 4.6
2622 elif
2623 cat > $TMPC <<EOF &&
2624 #include <xenctrl.h>
2625 #include <xenstore.h>
2626 #include <stdint.h>
2627 #include <xen/hvm/hvm_info_table.h>
2628 #if !defined(HVM_MAX_VCPUS)
2629 # error HVM_MAX_VCPUS not defined
2630 #endif
2631 int main(void) {
2632 xc_interface *xc;
2633 xs_daemon_open();
2634 xc = xc_interface_open(0, 0, 0);
2635 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2636 xc_gnttab_open(NULL, 0);
2637 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2638 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2639 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2640 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2641 return 0;
2644 compile_prog "" "$xen_libs"
2645 then
2646 xen_ctrl_version=40600
2647 xen=yes
2649 # Xen 4.5
2650 elif
2651 cat > $TMPC <<EOF &&
2652 #include <xenctrl.h>
2653 #include <xenstore.h>
2654 #include <stdint.h>
2655 #include <xen/hvm/hvm_info_table.h>
2656 #if !defined(HVM_MAX_VCPUS)
2657 # error HVM_MAX_VCPUS not defined
2658 #endif
2659 int main(void) {
2660 xc_interface *xc;
2661 xs_daemon_open();
2662 xc = xc_interface_open(0, 0, 0);
2663 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2664 xc_gnttab_open(NULL, 0);
2665 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2666 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2667 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2668 return 0;
2671 compile_prog "" "$xen_libs"
2672 then
2673 xen_ctrl_version=40500
2674 xen=yes
2676 elif
2677 cat > $TMPC <<EOF &&
2678 #include <xenctrl.h>
2679 #include <xenstore.h>
2680 #include <stdint.h>
2681 #include <xen/hvm/hvm_info_table.h>
2682 #if !defined(HVM_MAX_VCPUS)
2683 # error HVM_MAX_VCPUS not defined
2684 #endif
2685 int main(void) {
2686 xc_interface *xc;
2687 xs_daemon_open();
2688 xc = xc_interface_open(0, 0, 0);
2689 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2690 xc_gnttab_open(NULL, 0);
2691 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2692 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2693 return 0;
2696 compile_prog "" "$xen_libs"
2697 then
2698 xen_ctrl_version=40200
2699 xen=yes
2701 else
2702 if test "$xen" = "yes" ; then
2703 feature_not_found "xen (unsupported version)" \
2704 "Install a supported xen (xen 4.2 or newer)"
2706 xen=no
2709 if test "$xen" = yes; then
2710 if test $xen_ctrl_version -ge 40701 ; then
2711 libs_softmmu="$xen_stable_libs $libs_softmmu"
2713 libs_softmmu="$xen_libs $libs_softmmu"
2718 if test "$xen_pci_passthrough" != "no"; then
2719 if test "$xen" = "yes" && test "$linux" = "yes"; then
2720 xen_pci_passthrough=yes
2721 else
2722 if test "$xen_pci_passthrough" = "yes"; then
2723 error_exit "User requested feature Xen PCI Passthrough" \
2724 " but this feature requires /sys from Linux"
2726 xen_pci_passthrough=no
2730 ##########################################
2731 # Windows Hypervisor Platform accelerator (WHPX) check
2732 if test "$whpx" != "no" ; then
2733 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2734 whpx="yes"
2735 else
2736 if test "$whpx" = "yes"; then
2737 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2739 whpx="no"
2743 ##########################################
2744 # Sparse probe
2745 if test "$sparse" != "no" ; then
2746 if has cgcc; then
2747 sparse=yes
2748 else
2749 if test "$sparse" = "yes" ; then
2750 feature_not_found "sparse" "Install sparse binary"
2752 sparse=no
2756 ##########################################
2757 # X11 probe
2758 if $pkg_config --exists "x11"; then
2759 have_x11=yes
2760 x11_cflags=$($pkg_config --cflags x11)
2761 x11_libs=$($pkg_config --libs x11)
2764 ##########################################
2765 # GTK probe
2767 if test "$gtk" != "no"; then
2768 gtkpackage="gtk+-3.0"
2769 gtkx11package="gtk+-x11-3.0"
2770 gtkversion="3.14.0"
2771 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2772 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2773 gtk_libs=$($pkg_config --libs $gtkpackage)
2774 gtk_version=$($pkg_config --modversion $gtkpackage)
2775 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2776 need_x11=yes
2777 gtk_cflags="$gtk_cflags $x11_cflags"
2778 gtk_libs="$gtk_libs $x11_libs"
2780 gtk="yes"
2781 elif test "$gtk" = "yes"; then
2782 feature_not_found "gtk" "Install gtk3-devel"
2783 else
2784 gtk="no"
2789 ##########################################
2790 # GNUTLS probe
2792 if test "$gnutls" != "no"; then
2793 pass="no"
2794 if $pkg_config --exists "gnutls >= 3.1.18"; then
2795 gnutls_cflags=$($pkg_config --cflags gnutls)
2796 gnutls_libs=$($pkg_config --libs gnutls)
2797 # Packaging for the static libraries is not always correct.
2798 # At least ubuntu 18.04 ships only shared libraries.
2799 write_c_skeleton
2800 if compile_prog "" "$gnutls_libs" ; then
2801 LIBS="$gnutls_libs $LIBS"
2802 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2803 pass="yes"
2806 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2807 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2808 else
2809 gnutls="$pass"
2814 # If user didn't give a --disable/enable-gcrypt flag,
2815 # then mark as disabled if user requested nettle
2816 # explicitly
2817 if test -z "$gcrypt"
2818 then
2819 if test "$nettle" = "yes"
2820 then
2821 gcrypt="no"
2825 # If user didn't give a --disable/enable-nettle flag,
2826 # then mark as disabled if user requested gcrypt
2827 # explicitly
2828 if test -z "$nettle"
2829 then
2830 if test "$gcrypt" = "yes"
2831 then
2832 nettle="no"
2836 has_libgcrypt() {
2837 if ! has "libgcrypt-config"
2838 then
2839 return 1
2842 if test -n "$cross_prefix"
2843 then
2844 host=$(libgcrypt-config --host)
2845 if test "$host-" != $cross_prefix
2846 then
2847 return 1
2851 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2852 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2854 if test $maj != 1 || test $min -lt 5
2855 then
2856 return 1
2859 return 0
2863 if test "$nettle" != "no"; then
2864 pass="no"
2865 if $pkg_config --exists "nettle >= 2.7.1"; then
2866 nettle_cflags=$($pkg_config --cflags nettle)
2867 nettle_libs=$($pkg_config --libs nettle)
2868 nettle_version=$($pkg_config --modversion nettle)
2869 # Link test to make sure the given libraries work (e.g for static).
2870 write_c_skeleton
2871 if compile_prog "" "$nettle_libs" ; then
2872 LIBS="$nettle_libs $LIBS"
2873 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2874 if test -z "$gcrypt"; then
2875 gcrypt="no"
2877 pass="yes"
2880 if test "$pass" = "no" && test "$nettle" = "yes"; then
2881 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2882 else
2883 nettle="$pass"
2887 if test "$gcrypt" != "no"; then
2888 pass="no"
2889 if has_libgcrypt; then
2890 gcrypt_cflags=$(libgcrypt-config --cflags)
2891 gcrypt_libs=$(libgcrypt-config --libs)
2892 # Debian has removed -lgpg-error from libgcrypt-config
2893 # as it "spreads unnecessary dependencies" which in
2894 # turn breaks static builds...
2895 if test "$static" = "yes"
2896 then
2897 gcrypt_libs="$gcrypt_libs -lgpg-error"
2900 # Link test to make sure the given libraries work (e.g for static).
2901 write_c_skeleton
2902 if compile_prog "" "$gcrypt_libs" ; then
2903 LIBS="$gcrypt_libs $LIBS"
2904 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2905 pass="yes"
2908 if test "$pass" = "yes"; then
2909 gcrypt="yes"
2910 cat > $TMPC << EOF
2911 #include <gcrypt.h>
2912 int main(void) {
2913 gcry_mac_hd_t handle;
2914 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2915 GCRY_MAC_FLAG_SECURE, NULL);
2916 return 0;
2919 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2920 gcrypt_hmac=yes
2922 elif test "$gcrypt" = "yes"; then
2923 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2924 else
2925 gcrypt="no"
2930 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2931 then
2932 error_exit "Only one of gcrypt & nettle can be enabled"
2935 ##########################################
2936 # libtasn1 - only for the TLS creds/session test suite
2938 tasn1=yes
2939 tasn1_cflags=""
2940 tasn1_libs=""
2941 if $pkg_config --exists "libtasn1"; then
2942 tasn1_cflags=$($pkg_config --cflags libtasn1)
2943 tasn1_libs=$($pkg_config --libs libtasn1)
2944 else
2945 tasn1=no
2949 ##########################################
2950 # PAM probe
2952 if test "$auth_pam" != "no"; then
2953 cat > $TMPC <<EOF
2954 #include <security/pam_appl.h>
2955 #include <stdio.h>
2956 int main(void) {
2957 const char *service_name = "qemu";
2958 const char *user = "frank";
2959 const struct pam_conv pam_conv = { 0 };
2960 pam_handle_t *pamh = NULL;
2961 pam_start(service_name, user, &pam_conv, &pamh);
2962 return 0;
2965 if compile_prog "" "-lpam" ; then
2966 auth_pam=yes
2967 else
2968 if test "$auth_pam" = "yes"; then
2969 feature_not_found "PAM" "Install PAM development package"
2970 else
2971 auth_pam=no
2976 ##########################################
2977 # getifaddrs (for tests/test-io-channel-socket )
2979 have_ifaddrs_h=yes
2980 if ! check_include "ifaddrs.h" ; then
2981 have_ifaddrs_h=no
2984 ##########################################
2985 # VTE probe
2987 if test "$vte" != "no"; then
2988 vteminversion="0.32.0"
2989 if $pkg_config --exists "vte-2.91"; then
2990 vtepackage="vte-2.91"
2991 else
2992 vtepackage="vte-2.90"
2994 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2995 vte_cflags=$($pkg_config --cflags $vtepackage)
2996 vte_libs=$($pkg_config --libs $vtepackage)
2997 vteversion=$($pkg_config --modversion $vtepackage)
2998 vte="yes"
2999 elif test "$vte" = "yes"; then
3000 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3001 else
3002 vte="no"
3006 ##########################################
3007 # SDL probe
3009 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3010 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3012 sdl_probe ()
3014 if $pkg_config sdl2 --exists; then
3015 sdlconfig="$pkg_config sdl2"
3016 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3017 elif has "$sdl2_config"; then
3018 sdlconfig="$sdl2_config"
3019 sdlversion=$($sdlconfig --version)
3020 else
3021 if test "$sdl" = "yes" ; then
3022 feature_not_found "sdl" "Install SDL2-devel"
3024 sdl=no
3025 # no need to do the rest
3026 return
3028 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3029 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3032 cat > $TMPC << EOF
3033 #include <SDL.h>
3034 #undef main /* We don't want SDL to override our main() */
3035 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3037 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3038 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3039 if test "$static" = "yes" ; then
3040 if $pkg_config sdl2 --exists; then
3041 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3042 else
3043 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3045 else
3046 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3048 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3049 sdl=yes
3051 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3052 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3053 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3054 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3055 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3057 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3059 else
3060 sdl=no
3062 fi # static link
3063 else # sdl not found
3064 if test "$sdl" = "yes" ; then
3065 feature_not_found "sdl" "Install SDL2 devel"
3067 sdl=no
3068 fi # sdl compile test
3071 sdl_image_probe ()
3073 if test "$sdl_image" != "no" ; then
3074 if $pkg_config SDL2_image --exists; then
3075 if test "$static" = "yes"; then
3076 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3077 else
3078 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3080 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3081 sdl_image=yes
3083 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3084 sdl_libs="$sdl_libs $sdl_image_libs"
3085 else
3086 if test "$sdl_image" = "yes" ; then
3087 feature_not_found "sdl_image" "Install SDL Image devel"
3088 else
3089 sdl_image=no
3095 if test "$sdl" != "no" ; then
3096 sdl_probe
3099 if test "$sdl" = "yes" ; then
3100 sdl_image_probe
3101 else
3102 if test "$sdl_image" = "yes"; then
3103 echo "warning: SDL Image requested, but SDL is not available, disabling"
3105 sdl_image=no
3108 if test "$sdl" = "yes" ; then
3109 cat > $TMPC <<EOF
3110 #include <SDL.h>
3111 #if defined(SDL_VIDEO_DRIVER_X11)
3112 #include <X11/XKBlib.h>
3113 #else
3114 #error No x11 support
3115 #endif
3116 int main(void) { return 0; }
3118 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3119 need_x11=yes
3120 sdl_cflags="$sdl_cflags $x11_cflags"
3121 sdl_libs="$sdl_libs $x11_libs"
3125 ##########################################
3126 # RDMA needs OpenFabrics libraries
3127 if test "$rdma" != "no" ; then
3128 cat > $TMPC <<EOF
3129 #include <rdma/rdma_cma.h>
3130 int main(void) { return 0; }
3132 rdma_libs="-lrdmacm -libverbs -libumad"
3133 if compile_prog "" "$rdma_libs" ; then
3134 rdma="yes"
3135 libs_softmmu="$libs_softmmu $rdma_libs"
3136 else
3137 if test "$rdma" = "yes" ; then
3138 error_exit \
3139 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3140 " Your options:" \
3141 " (1) Fast: Install infiniband packages (devel) from your distro." \
3142 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3143 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3145 rdma="no"
3149 ##########################################
3150 # PVRDMA detection
3152 cat > $TMPC <<EOF &&
3153 #include <sys/mman.h>
3156 main(void)
3158 char buf = 0;
3159 void *addr = &buf;
3160 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3162 return 0;
3166 if test "$rdma" = "yes" ; then
3167 case "$pvrdma" in
3169 if compile_prog "" ""; then
3170 pvrdma="yes"
3171 else
3172 pvrdma="no"
3175 "yes")
3176 if ! compile_prog "" ""; then
3177 error_exit "PVRDMA is not supported since mremap is not implemented"
3179 pvrdma="yes"
3181 "no")
3182 pvrdma="no"
3184 esac
3185 else
3186 if test "$pvrdma" = "yes" ; then
3187 error_exit "PVRDMA requires rdma suppport"
3189 pvrdma="no"
3192 ##########################################
3193 # VNC SASL detection
3194 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3195 cat > $TMPC <<EOF
3196 #include <sasl/sasl.h>
3197 #include <stdio.h>
3198 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3200 # Assuming Cyrus-SASL installed in /usr prefix
3201 vnc_sasl_cflags=""
3202 vnc_sasl_libs="-lsasl2"
3203 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3204 vnc_sasl=yes
3205 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3206 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3207 else
3208 if test "$vnc_sasl" = "yes" ; then
3209 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3211 vnc_sasl=no
3215 ##########################################
3216 # VNC JPEG detection
3217 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3218 cat > $TMPC <<EOF
3219 #include <stdio.h>
3220 #include <jpeglib.h>
3221 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3223 vnc_jpeg_cflags=""
3224 vnc_jpeg_libs="-ljpeg"
3225 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3226 vnc_jpeg=yes
3227 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3228 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3229 else
3230 if test "$vnc_jpeg" = "yes" ; then
3231 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3233 vnc_jpeg=no
3237 ##########################################
3238 # VNC PNG detection
3239 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3240 cat > $TMPC <<EOF
3241 //#include <stdio.h>
3242 #include <png.h>
3243 #include <stddef.h>
3244 int main(void) {
3245 png_structp png_ptr;
3246 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3247 return png_ptr != 0;
3250 if $pkg_config libpng --exists; then
3251 vnc_png_cflags=$($pkg_config libpng --cflags)
3252 vnc_png_libs=$($pkg_config libpng --libs)
3253 else
3254 vnc_png_cflags=""
3255 vnc_png_libs="-lpng"
3257 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3258 vnc_png=yes
3259 libs_softmmu="$vnc_png_libs $libs_softmmu"
3260 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3261 else
3262 if test "$vnc_png" = "yes" ; then
3263 feature_not_found "vnc-png" "Install libpng devel"
3265 vnc_png=no
3269 ##########################################
3270 # xkbcommon probe
3271 if test "$xkbcommon" != "no" ; then
3272 if $pkg_config xkbcommon --exists; then
3273 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3274 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3275 xkbcommon=yes
3276 else
3277 if test "$xkbcommon" = "yes" ; then
3278 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3280 xkbcommon=no
3285 ##########################################
3286 # xfsctl() probe, used for file-posix.c
3287 if test "$xfs" != "no" ; then
3288 cat > $TMPC << EOF
3289 #include <stddef.h> /* NULL */
3290 #include <xfs/xfs.h>
3291 int main(void)
3293 xfsctl(NULL, 0, 0, NULL);
3294 return 0;
3297 if compile_prog "" "" ; then
3298 xfs="yes"
3299 else
3300 if test "$xfs" = "yes" ; then
3301 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3303 xfs=no
3307 ##########################################
3308 # vde libraries probe
3309 if test "$vde" != "no" ; then
3310 vde_libs="-lvdeplug"
3311 cat > $TMPC << EOF
3312 #include <libvdeplug.h>
3313 int main(void)
3315 struct vde_open_args a = {0, 0, 0};
3316 char s[] = "";
3317 vde_open(s, s, &a);
3318 return 0;
3321 if compile_prog "" "$vde_libs" ; then
3322 vde=yes
3323 else
3324 if test "$vde" = "yes" ; then
3325 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3327 vde=no
3331 ##########################################
3332 # netmap support probe
3333 # Apart from looking for netmap headers, we make sure that the host API version
3334 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3335 # a minor/major version number. Minor new features will be marked with values up
3336 # to 15, and if something happens that requires a change to the backend we will
3337 # move above 15, submit the backend fixes and modify this two bounds.
3338 if test "$netmap" != "no" ; then
3339 cat > $TMPC << EOF
3340 #include <inttypes.h>
3341 #include <net/if.h>
3342 #include <net/netmap.h>
3343 #include <net/netmap_user.h>
3344 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3345 #error
3346 #endif
3347 int main(void) { return 0; }
3349 if compile_prog "" "" ; then
3350 netmap=yes
3351 else
3352 if test "$netmap" = "yes" ; then
3353 feature_not_found "netmap"
3355 netmap=no
3359 ##########################################
3360 # libcap-ng library probe
3361 if test "$cap_ng" != "no" ; then
3362 cap_libs="-lcap-ng"
3363 cat > $TMPC << EOF
3364 #include <cap-ng.h>
3365 int main(void)
3367 capng_capability_to_name(CAPNG_EFFECTIVE);
3368 return 0;
3371 if compile_prog "" "$cap_libs" ; then
3372 cap_ng=yes
3373 libs_tools="$cap_libs $libs_tools"
3374 else
3375 if test "$cap_ng" = "yes" ; then
3376 feature_not_found "cap_ng" "Install libcap-ng devel"
3378 cap_ng=no
3382 ##########################################
3383 # Sound support libraries probe
3385 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3386 for drv in $audio_drv_list; do
3387 case $drv in
3388 alsa | try-alsa)
3389 if $pkg_config alsa --exists; then
3390 alsa_libs=$($pkg_config alsa --libs)
3391 if test "$drv" = "try-alsa"; then
3392 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3394 else
3395 if test "$drv" = "try-alsa"; then
3396 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3397 else
3398 error_exit "$drv check failed" \
3399 "Make sure to have the $drv libs and headers installed."
3404 pa | try-pa)
3405 if $pkg_config libpulse --exists; then
3406 pulse_libs=$($pkg_config libpulse --libs)
3407 if test "$drv" = "try-pa"; then
3408 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3410 else
3411 if test "$drv" = "try-pa"; then
3412 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3413 else
3414 error_exit "$drv check failed" \
3415 "Make sure to have the $drv libs and headers installed."
3420 sdl)
3421 if test "$sdl" = "no"; then
3422 error_exit "sdl not found or disabled, can not use sdl audio driver"
3426 try-sdl)
3427 if test "$sdl" = "no"; then
3428 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3429 else
3430 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3434 coreaudio)
3435 coreaudio_libs="-framework CoreAudio"
3438 dsound)
3439 dsound_libs="-lole32 -ldxguid"
3440 audio_win_int="yes"
3443 oss)
3444 oss_libs="$oss_lib"
3448 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3449 error_exit "Unknown driver '$drv' selected" \
3450 "Possible drivers are: $audio_possible_drivers"
3453 esac
3454 done
3456 ##########################################
3457 # BrlAPI probe
3459 if test "$brlapi" != "no" ; then
3460 brlapi_libs="-lbrlapi"
3461 cat > $TMPC << EOF
3462 #include <brlapi.h>
3463 #include <stddef.h>
3464 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3466 if compile_prog "" "$brlapi_libs" ; then
3467 brlapi=yes
3468 else
3469 if test "$brlapi" = "yes" ; then
3470 feature_not_found "brlapi" "Install brlapi devel"
3472 brlapi=no
3476 ##########################################
3477 # iconv probe
3478 if test "$iconv" != "no" ; then
3479 cat > $TMPC << EOF
3480 #include <iconv.h>
3481 int main(void) {
3482 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3483 return conv != (iconv_t) -1;
3486 iconv_prefix_list="/usr/local:/usr"
3487 iconv_lib_list=":-liconv"
3488 IFS=:
3489 for iconv_prefix in $iconv_prefix_list; do
3490 IFS=:
3491 iconv_cflags="-I$iconv_prefix/include"
3492 iconv_ldflags="-L$iconv_prefix/lib"
3493 for iconv_link in $iconv_lib_list; do
3494 unset IFS
3495 iconv_lib="$iconv_ldflags $iconv_link"
3496 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3497 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3498 iconv_found=yes
3499 break
3501 done
3502 if test "$iconv_found" = yes ; then
3503 break
3505 done
3506 if test "$iconv_found" = "yes" ; then
3507 iconv=yes
3508 else
3509 if test "$iconv" = "yes" ; then
3510 feature_not_found "iconv" "Install iconv devel"
3512 iconv=no
3516 ##########################################
3517 # curses probe
3518 if test "$iconv" = "no" ; then
3519 # curses will need iconv
3520 curses=no
3522 if test "$curses" != "no" ; then
3523 if test "$mingw32" = "yes" ; then
3524 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3525 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3526 else
3527 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3528 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3530 curses_found=no
3531 cat > $TMPC << EOF
3532 #include <locale.h>
3533 #include <curses.h>
3534 #include <wchar.h>
3535 #include <langinfo.h>
3536 int main(void) {
3537 const char *codeset;
3538 wchar_t wch = L'w';
3539 setlocale(LC_ALL, "");
3540 resize_term(0, 0);
3541 addwstr(L"wide chars\n");
3542 addnwstr(&wch, 1);
3543 add_wch(WACS_DEGREE);
3544 codeset = nl_langinfo(CODESET);
3545 return codeset != 0;
3548 IFS=:
3549 for curses_inc in $curses_inc_list; do
3550 # Make sure we get the wide character prototypes
3551 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3552 IFS=:
3553 for curses_lib in $curses_lib_list; do
3554 unset IFS
3555 if compile_prog "$curses_inc" "$curses_lib" ; then
3556 curses_found=yes
3557 break
3559 done
3560 if test "$curses_found" = yes ; then
3561 break
3563 done
3564 unset IFS
3565 if test "$curses_found" = "yes" ; then
3566 curses=yes
3567 else
3568 if test "$curses" = "yes" ; then
3569 feature_not_found "curses" "Install ncurses devel"
3571 curses=no
3575 ##########################################
3576 # curl probe
3577 if test "$curl" != "no" ; then
3578 if $pkg_config libcurl --exists; then
3579 curlconfig="$pkg_config libcurl"
3580 else
3581 curlconfig=curl-config
3583 cat > $TMPC << EOF
3584 #include <curl/curl.h>
3585 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3587 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3588 curl_libs=$($curlconfig --libs 2>/dev/null)
3589 if compile_prog "$curl_cflags" "$curl_libs" ; then
3590 curl=yes
3591 else
3592 if test "$curl" = "yes" ; then
3593 feature_not_found "curl" "Install libcurl devel"
3595 curl=no
3597 fi # test "$curl"
3599 ##########################################
3600 # bluez support probe
3601 if test "$bluez" != "no" ; then
3602 cat > $TMPC << EOF
3603 #include <bluetooth/bluetooth.h>
3604 int main(void) { return bt_error(0); }
3606 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3607 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3608 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3609 bluez=yes
3610 libs_softmmu="$bluez_libs $libs_softmmu"
3611 else
3612 if test "$bluez" = "yes" ; then
3613 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3615 bluez="no"
3619 ##########################################
3620 # glib support probe
3622 glib_req_ver=2.48
3623 glib_modules=gthread-2.0
3624 if test "$modules" = yes; then
3625 glib_modules="$glib_modules gmodule-export-2.0"
3627 if test "$plugins" = yes; then
3628 glib_modules="$glib_modules gmodule-2.0"
3631 # This workaround is required due to a bug in pkg-config file for glib as it
3632 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3634 if test "$static" = yes && test "$mingw32" = yes; then
3635 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3638 for i in $glib_modules; do
3639 if $pkg_config --atleast-version=$glib_req_ver $i; then
3640 glib_cflags=$($pkg_config --cflags $i)
3641 glib_libs=$($pkg_config --libs $i)
3642 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3643 LIBS="$glib_libs $LIBS"
3644 libs_qga="$glib_libs $libs_qga"
3645 else
3646 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3648 done
3650 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3651 gio=yes
3652 gio_cflags=$($pkg_config --cflags gio-2.0)
3653 gio_libs=$($pkg_config --libs gio-2.0)
3654 else
3655 gio=no
3658 # Sanity check that the current size_t matches the
3659 # size that glib thinks it should be. This catches
3660 # problems on multi-arch where people try to build
3661 # 32-bit QEMU while pointing at 64-bit glib headers
3662 cat > $TMPC <<EOF
3663 #include <glib.h>
3664 #include <unistd.h>
3666 #define QEMU_BUILD_BUG_ON(x) \
3667 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3669 int main(void) {
3670 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3671 return 0;
3675 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3676 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3677 "You probably need to set PKG_CONFIG_LIBDIR"\
3678 "to point to the right pkg-config files for your"\
3679 "build target"
3682 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3683 cat > $TMPC << EOF
3684 #include <glib.h>
3685 int main(void) { return 0; }
3687 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3688 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3689 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3690 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3694 #########################################
3695 # zlib check
3697 if test "$zlib" != "no" ; then
3698 if $pkg_config --exists zlib; then
3699 zlib_cflags=$($pkg_config --cflags zlib)
3700 zlib_libs=$($pkg_config --libs zlib)
3701 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3702 LIBS="$zlib_libs $LIBS"
3703 else
3704 cat > $TMPC << EOF
3705 #include <zlib.h>
3706 int main(void) { zlibVersion(); return 0; }
3708 if compile_prog "" "-lz" ; then
3709 LIBS="$LIBS -lz"
3710 else
3711 error_exit "zlib check failed" \
3712 "Make sure to have the zlib libs and headers installed."
3717 ##########################################
3718 # SHA command probe for modules
3719 if test "$modules" = yes; then
3720 shacmd_probe="sha1sum sha1 shasum"
3721 for c in $shacmd_probe; do
3722 if has $c; then
3723 shacmd="$c"
3724 break
3726 done
3727 if test "$shacmd" = ""; then
3728 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3732 ##########################################
3733 # pixman support probe
3735 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3736 pixman_cflags=
3737 pixman_libs=
3738 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3739 pixman_cflags=$($pkg_config --cflags pixman-1)
3740 pixman_libs=$($pkg_config --libs pixman-1)
3741 else
3742 error_exit "pixman >= 0.21.8 not present." \
3743 "Please install the pixman devel package."
3746 ##########################################
3747 # libmpathpersist probe
3749 if test "$mpath" != "no" ; then
3750 # probe for the new API
3751 cat > $TMPC <<EOF
3752 #include <libudev.h>
3753 #include <mpath_persist.h>
3754 unsigned mpath_mx_alloc_len = 1024;
3755 int logsink;
3756 static struct config *multipath_conf;
3757 extern struct udev *udev;
3758 extern struct config *get_multipath_config(void);
3759 extern void put_multipath_config(struct config *conf);
3760 struct udev *udev;
3761 struct config *get_multipath_config(void) { return multipath_conf; }
3762 void put_multipath_config(struct config *conf) { }
3764 int main(void) {
3765 udev = udev_new();
3766 multipath_conf = mpath_lib_init();
3767 return 0;
3770 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3771 mpathpersist=yes
3772 mpathpersist_new_api=yes
3773 else
3774 # probe for the old API
3775 cat > $TMPC <<EOF
3776 #include <libudev.h>
3777 #include <mpath_persist.h>
3778 unsigned mpath_mx_alloc_len = 1024;
3779 int logsink;
3780 int main(void) {
3781 struct udev *udev = udev_new();
3782 mpath_lib_init(udev);
3783 return 0;
3786 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3787 mpathpersist=yes
3788 mpathpersist_new_api=no
3789 else
3790 mpathpersist=no
3793 else
3794 mpathpersist=no
3797 ##########################################
3798 # libcap probe
3800 if test "$cap" != "no" ; then
3801 cat > $TMPC <<EOF
3802 #include <stdio.h>
3803 #include <sys/capability.h>
3804 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3806 if compile_prog "" "-lcap" ; then
3807 cap=yes
3808 else
3809 cap=no
3813 ##########################################
3814 # pthread probe
3815 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3817 pthread=no
3818 cat > $TMPC << EOF
3819 #include <pthread.h>
3820 static void *f(void *p) { return NULL; }
3821 int main(void) {
3822 pthread_t thread;
3823 pthread_create(&thread, 0, f, 0);
3824 return 0;
3827 if compile_prog "" "" ; then
3828 pthread=yes
3829 else
3830 for pthread_lib in $PTHREADLIBS_LIST; do
3831 if compile_prog "" "$pthread_lib" ; then
3832 pthread=yes
3833 found=no
3834 for lib_entry in $LIBS; do
3835 if test "$lib_entry" = "$pthread_lib"; then
3836 found=yes
3837 break
3839 done
3840 if test "$found" = "no"; then
3841 LIBS="$pthread_lib $LIBS"
3842 libs_qga="$pthread_lib $libs_qga"
3844 PTHREAD_LIB="$pthread_lib"
3845 break
3847 done
3850 if test "$mingw32" != yes && test "$pthread" = no; then
3851 error_exit "pthread check failed" \
3852 "Make sure to have the pthread libs and headers installed."
3855 # check for pthread_setname_np with thread id
3856 pthread_setname_np_w_tid=no
3857 cat > $TMPC << EOF
3858 #include <pthread.h>
3860 static void *f(void *p) { return NULL; }
3861 int main(void)
3863 pthread_t thread;
3864 pthread_create(&thread, 0, f, 0);
3865 pthread_setname_np(thread, "QEMU");
3866 return 0;
3869 if compile_prog "" "$pthread_lib" ; then
3870 pthread_setname_np_w_tid=yes
3873 # check for pthread_setname_np without thread id
3874 pthread_setname_np_wo_tid=no
3875 cat > $TMPC << EOF
3876 #include <pthread.h>
3878 static void *f(void *p) { pthread_setname_np("QEMU"); }
3879 int main(void)
3881 pthread_t thread;
3882 pthread_create(&thread, 0, f, 0);
3883 return 0;
3886 if compile_prog "" "$pthread_lib" ; then
3887 pthread_setname_np_wo_tid=yes
3890 ##########################################
3891 # rbd probe
3892 if test "$rbd" != "no" ; then
3893 cat > $TMPC <<EOF
3894 #include <stdio.h>
3895 #include <rbd/librbd.h>
3896 int main(void) {
3897 rados_t cluster;
3898 rados_create(&cluster, NULL);
3899 return 0;
3902 rbd_libs="-lrbd -lrados"
3903 if compile_prog "" "$rbd_libs" ; then
3904 rbd=yes
3905 else
3906 if test "$rbd" = "yes" ; then
3907 feature_not_found "rados block device" "Install librbd/ceph devel"
3909 rbd=no
3913 ##########################################
3914 # libssh probe
3915 if test "$libssh" != "no" ; then
3916 if $pkg_config --exists libssh; then
3917 libssh_cflags=$($pkg_config libssh --cflags)
3918 libssh_libs=$($pkg_config libssh --libs)
3919 libssh=yes
3920 else
3921 if test "$libssh" = "yes" ; then
3922 error_exit "libssh required for --enable-libssh"
3924 libssh=no
3928 ##########################################
3929 # Check for libssh 0.8
3930 # This is done like this instead of using the LIBSSH_VERSION_* and
3931 # SSH_VERSION_* macros because some distributions in the past shipped
3932 # snapshots of the future 0.8 from Git, and those snapshots did not
3933 # have updated version numbers (still referring to 0.7.0).
3935 if test "$libssh" = "yes"; then
3936 cat > $TMPC <<EOF
3937 #include <libssh/libssh.h>
3938 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3940 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3941 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3945 ##########################################
3946 # linux-aio probe
3948 if test "$linux_aio" != "no" ; then
3949 cat > $TMPC <<EOF
3950 #include <libaio.h>
3951 #include <sys/eventfd.h>
3952 #include <stddef.h>
3953 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3955 if compile_prog "" "-laio" ; then
3956 linux_aio=yes
3957 else
3958 if test "$linux_aio" = "yes" ; then
3959 feature_not_found "linux AIO" "Install libaio devel"
3961 linux_aio=no
3965 ##########################################
3966 # TPM emulation is only on POSIX
3968 if test "$tpm" = ""; then
3969 if test "$mingw32" = "yes"; then
3970 tpm=no
3971 else
3972 tpm=yes
3974 elif test "$tpm" = "yes"; then
3975 if test "$mingw32" = "yes" ; then
3976 error_exit "TPM emulation only available on POSIX systems"
3980 ##########################################
3981 # attr probe
3983 if test "$attr" != "no" ; then
3984 cat > $TMPC <<EOF
3985 #include <stdio.h>
3986 #include <sys/types.h>
3987 #ifdef CONFIG_LIBATTR
3988 #include <attr/xattr.h>
3989 #else
3990 #include <sys/xattr.h>
3991 #endif
3992 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3994 if compile_prog "" "" ; then
3995 attr=yes
3996 # Older distros have <attr/xattr.h>, and need -lattr:
3997 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3998 attr=yes
3999 LIBS="-lattr $LIBS"
4000 libattr=yes
4001 else
4002 if test "$attr" = "yes" ; then
4003 feature_not_found "ATTR" "Install libc6 or libattr devel"
4005 attr=no
4009 ##########################################
4010 # iovec probe
4011 cat > $TMPC <<EOF
4012 #include <sys/types.h>
4013 #include <sys/uio.h>
4014 #include <unistd.h>
4015 int main(void) { return sizeof(struct iovec); }
4017 iovec=no
4018 if compile_prog "" "" ; then
4019 iovec=yes
4022 ##########################################
4023 # preadv probe
4024 cat > $TMPC <<EOF
4025 #include <sys/types.h>
4026 #include <sys/uio.h>
4027 #include <unistd.h>
4028 int main(void) { return preadv(0, 0, 0, 0); }
4030 preadv=no
4031 if compile_prog "" "" ; then
4032 preadv=yes
4035 ##########################################
4036 # fdt probe
4037 # fdt support is mandatory for at least some target architectures,
4038 # so insist on it if we're building those system emulators.
4039 fdt_required=no
4040 for target in $target_list; do
4041 case $target in
4042 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4043 fdt_required=yes
4045 esac
4046 done
4048 if test "$fdt_required" = "yes"; then
4049 if test "$fdt" = "no"; then
4050 error_exit "fdt disabled but some requested targets require it." \
4051 "You can turn off fdt only if you also disable all the system emulation" \
4052 "targets which need it (by specifying a cut down --target-list)."
4054 fdt=yes
4057 if test "$fdt" != "no" ; then
4058 fdt_libs="-lfdt"
4059 # explicitly check for libfdt_env.h as it is missing in some stable installs
4060 # and test for required functions to make sure we are on a version >= 1.4.2
4061 cat > $TMPC << EOF
4062 #include <libfdt.h>
4063 #include <libfdt_env.h>
4064 int main(void) { fdt_check_full(NULL, 0); return 0; }
4066 if compile_prog "" "$fdt_libs" ; then
4067 # system DTC is good - use it
4068 fdt=system
4069 else
4070 # have GIT checkout, so activate dtc submodule
4071 if test -e "${source_path}/.git" ; then
4072 git_submodules="${git_submodules} dtc"
4074 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4075 fdt=git
4076 mkdir -p dtc
4077 if [ "$pwd_is_source_path" != "y" ] ; then
4078 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4079 symlink "$source_path/dtc/scripts" "dtc/scripts"
4081 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4082 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4083 fdt_libs="$fdt_libs"
4084 elif test "$fdt" = "yes" ; then
4085 # Not a git build & no libfdt found, prompt for system install
4086 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4087 "Please install the DTC (libfdt) devel package"
4088 else
4089 # don't have and don't want
4090 fdt_libs=
4091 fdt=no
4096 libs_softmmu="$libs_softmmu $fdt_libs"
4098 ##########################################
4099 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4101 gbm="no"
4102 if $pkg_config gbm; then
4103 gbm_cflags="$($pkg_config --cflags gbm)"
4104 gbm_libs="$($pkg_config --libs gbm)"
4105 gbm="yes"
4108 if test "$opengl" != "no" ; then
4109 opengl_pkgs="epoxy gbm"
4110 if $pkg_config $opengl_pkgs; then
4111 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4112 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4113 opengl=yes
4114 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4115 gtk_gl="yes"
4117 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4118 else
4119 if test "$opengl" = "yes" ; then
4120 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4122 opengl_cflags=""
4123 opengl_libs=""
4124 opengl=no
4128 if test "$opengl" = "yes"; then
4129 cat > $TMPC << EOF
4130 #include <epoxy/egl.h>
4131 #ifndef EGL_MESA_image_dma_buf_export
4132 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4133 #endif
4134 int main(void) { return 0; }
4136 if compile_prog "" "" ; then
4137 opengl_dmabuf=yes
4141 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4142 for target in $target_list; do
4143 case $target in
4144 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4145 need_x11=yes
4147 esac
4148 done
4151 ##########################################
4152 # libxml2 probe
4153 if test "$libxml2" != "no" ; then
4154 if $pkg_config --exists libxml-2.0; then
4155 libxml2="yes"
4156 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4157 libxml2_libs=$($pkg_config --libs libxml-2.0)
4158 else
4159 if test "$libxml2" = "yes"; then
4160 feature_not_found "libxml2" "Install libxml2 devel"
4162 libxml2="no"
4166 ##########################################
4167 # glusterfs probe
4168 if test "$glusterfs" != "no" ; then
4169 if $pkg_config --atleast-version=3 glusterfs-api; then
4170 glusterfs="yes"
4171 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4172 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4173 if $pkg_config --atleast-version=4 glusterfs-api; then
4174 glusterfs_xlator_opt="yes"
4176 if $pkg_config --atleast-version=5 glusterfs-api; then
4177 glusterfs_discard="yes"
4179 if $pkg_config --atleast-version=6 glusterfs-api; then
4180 glusterfs_fallocate="yes"
4181 glusterfs_zerofill="yes"
4183 cat > $TMPC << EOF
4184 #include <glusterfs/api/glfs.h>
4187 main(void)
4189 /* new glfs_ftruncate() passes two additional args */
4190 return glfs_ftruncate(NULL, 0, NULL, NULL);
4193 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4194 glusterfs_ftruncate_has_stat="yes"
4196 cat > $TMPC << EOF
4197 #include <glusterfs/api/glfs.h>
4199 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4200 static void
4201 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4205 main(void)
4207 glfs_io_cbk iocb = &glusterfs_iocb;
4208 iocb(NULL, 0 , NULL, NULL, NULL);
4209 return 0;
4212 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4213 glusterfs_iocb_has_stat="yes"
4215 else
4216 if test "$glusterfs" = "yes" ; then
4217 feature_not_found "GlusterFS backend support" \
4218 "Install glusterfs-api devel >= 3"
4220 glusterfs="no"
4224 # Check for inotify functions when we are building linux-user
4225 # emulator. This is done because older glibc versions don't
4226 # have syscall stubs for these implemented. In that case we
4227 # don't provide them even if kernel supports them.
4229 inotify=no
4230 cat > $TMPC << EOF
4231 #include <sys/inotify.h>
4234 main(void)
4236 /* try to start inotify */
4237 return inotify_init();
4240 if compile_prog "" "" ; then
4241 inotify=yes
4244 inotify1=no
4245 cat > $TMPC << EOF
4246 #include <sys/inotify.h>
4249 main(void)
4251 /* try to start inotify */
4252 return inotify_init1(0);
4255 if compile_prog "" "" ; then
4256 inotify1=yes
4259 # check if pipe2 is there
4260 pipe2=no
4261 cat > $TMPC << EOF
4262 #include <unistd.h>
4263 #include <fcntl.h>
4265 int main(void)
4267 int pipefd[2];
4268 return pipe2(pipefd, O_CLOEXEC);
4271 if compile_prog "" "" ; then
4272 pipe2=yes
4275 # check if accept4 is there
4276 accept4=no
4277 cat > $TMPC << EOF
4278 #include <sys/socket.h>
4279 #include <stddef.h>
4281 int main(void)
4283 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4284 return 0;
4287 if compile_prog "" "" ; then
4288 accept4=yes
4291 # check if tee/splice is there. vmsplice was added same time.
4292 splice=no
4293 cat > $TMPC << EOF
4294 #include <unistd.h>
4295 #include <fcntl.h>
4296 #include <limits.h>
4298 int main(void)
4300 int len, fd = 0;
4301 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4302 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4303 return 0;
4306 if compile_prog "" "" ; then
4307 splice=yes
4310 ##########################################
4311 # libnuma probe
4313 if test "$numa" != "no" ; then
4314 cat > $TMPC << EOF
4315 #include <numa.h>
4316 int main(void) { return numa_available(); }
4319 if compile_prog "" "-lnuma" ; then
4320 numa=yes
4321 libs_softmmu="-lnuma $libs_softmmu"
4322 else
4323 if test "$numa" = "yes" ; then
4324 feature_not_found "numa" "install numactl devel"
4326 numa=no
4330 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4331 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4332 exit 1
4335 # Even if malloc_trim() is available, these non-libc memory allocators
4336 # do not support it.
4337 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4338 if test "$malloc_trim" = "yes" ; then
4339 echo "Disabling malloc_trim with non-libc memory allocator"
4341 malloc_trim="no"
4344 #######################################
4345 # malloc_trim
4347 if test "$malloc_trim" != "no" ; then
4348 cat > $TMPC << EOF
4349 #include <malloc.h>
4350 int main(void) { malloc_trim(0); return 0; }
4352 if compile_prog "" "" ; then
4353 malloc_trim="yes"
4354 else
4355 malloc_trim="no"
4359 ##########################################
4360 # tcmalloc probe
4362 if test "$tcmalloc" = "yes" ; then
4363 cat > $TMPC << EOF
4364 #include <stdlib.h>
4365 int main(void) { malloc(1); return 0; }
4368 if compile_prog "" "-ltcmalloc" ; then
4369 LIBS="-ltcmalloc $LIBS"
4370 else
4371 feature_not_found "tcmalloc" "install gperftools devel"
4375 ##########################################
4376 # jemalloc probe
4378 if test "$jemalloc" = "yes" ; then
4379 cat > $TMPC << EOF
4380 #include <stdlib.h>
4381 int main(void) { malloc(1); return 0; }
4384 if compile_prog "" "-ljemalloc" ; then
4385 LIBS="-ljemalloc $LIBS"
4386 else
4387 feature_not_found "jemalloc" "install jemalloc devel"
4391 ##########################################
4392 # signalfd probe
4393 signalfd="no"
4394 cat > $TMPC << EOF
4395 #include <unistd.h>
4396 #include <sys/syscall.h>
4397 #include <signal.h>
4398 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4401 if compile_prog "" "" ; then
4402 signalfd=yes
4405 # check if optreset global is declared by <getopt.h>
4406 optreset="no"
4407 cat > $TMPC << EOF
4408 #include <getopt.h>
4409 int main(void) { return optreset; }
4412 if compile_prog "" "" ; then
4413 optreset=yes
4416 # check if eventfd is supported
4417 eventfd=no
4418 cat > $TMPC << EOF
4419 #include <sys/eventfd.h>
4421 int main(void)
4423 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4426 if compile_prog "" "" ; then
4427 eventfd=yes
4430 # check if memfd is supported
4431 memfd=no
4432 cat > $TMPC << EOF
4433 #include <sys/mman.h>
4435 int main(void)
4437 return memfd_create("foo", MFD_ALLOW_SEALING);
4440 if compile_prog "" "" ; then
4441 memfd=yes
4444 # check for usbfs
4445 have_usbfs=no
4446 if test "$linux_user" = "yes"; then
4447 cat > $TMPC << EOF
4448 #include <linux/usbdevice_fs.h>
4450 #ifndef USBDEVFS_GET_CAPABILITIES
4451 #error "USBDEVFS_GET_CAPABILITIES undefined"
4452 #endif
4454 #ifndef USBDEVFS_DISCONNECT_CLAIM
4455 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4456 #endif
4458 int main(void)
4460 return 0;
4463 if compile_prog "" ""; then
4464 have_usbfs=yes
4468 # check for fallocate
4469 fallocate=no
4470 cat > $TMPC << EOF
4471 #include <fcntl.h>
4473 int main(void)
4475 fallocate(0, 0, 0, 0);
4476 return 0;
4479 if compile_prog "" "" ; then
4480 fallocate=yes
4483 # check for fallocate hole punching
4484 fallocate_punch_hole=no
4485 cat > $TMPC << EOF
4486 #include <fcntl.h>
4487 #include <linux/falloc.h>
4489 int main(void)
4491 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4492 return 0;
4495 if compile_prog "" "" ; then
4496 fallocate_punch_hole=yes
4499 # check that fallocate supports range zeroing inside the file
4500 fallocate_zero_range=no
4501 cat > $TMPC << EOF
4502 #include <fcntl.h>
4503 #include <linux/falloc.h>
4505 int main(void)
4507 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4508 return 0;
4511 if compile_prog "" "" ; then
4512 fallocate_zero_range=yes
4515 # check for posix_fallocate
4516 posix_fallocate=no
4517 cat > $TMPC << EOF
4518 #include <fcntl.h>
4520 int main(void)
4522 posix_fallocate(0, 0, 0);
4523 return 0;
4526 if compile_prog "" "" ; then
4527 posix_fallocate=yes
4530 # check for sync_file_range
4531 sync_file_range=no
4532 cat > $TMPC << EOF
4533 #include <fcntl.h>
4535 int main(void)
4537 sync_file_range(0, 0, 0, 0);
4538 return 0;
4541 if compile_prog "" "" ; then
4542 sync_file_range=yes
4545 # check for linux/fiemap.h and FS_IOC_FIEMAP
4546 fiemap=no
4547 cat > $TMPC << EOF
4548 #include <sys/ioctl.h>
4549 #include <linux/fs.h>
4550 #include <linux/fiemap.h>
4552 int main(void)
4554 ioctl(0, FS_IOC_FIEMAP, 0);
4555 return 0;
4558 if compile_prog "" "" ; then
4559 fiemap=yes
4562 # check for dup3
4563 dup3=no
4564 cat > $TMPC << EOF
4565 #include <unistd.h>
4567 int main(void)
4569 dup3(0, 0, 0);
4570 return 0;
4573 if compile_prog "" "" ; then
4574 dup3=yes
4577 # check for ppoll support
4578 ppoll=no
4579 cat > $TMPC << EOF
4580 #include <poll.h>
4582 int main(void)
4584 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4585 ppoll(&pfd, 1, 0, 0);
4586 return 0;
4589 if compile_prog "" "" ; then
4590 ppoll=yes
4593 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4594 prctl_pr_set_timerslack=no
4595 cat > $TMPC << EOF
4596 #include <sys/prctl.h>
4598 int main(void)
4600 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4601 return 0;
4604 if compile_prog "" "" ; then
4605 prctl_pr_set_timerslack=yes
4608 # check for epoll support
4609 epoll=no
4610 cat > $TMPC << EOF
4611 #include <sys/epoll.h>
4613 int main(void)
4615 epoll_create(0);
4616 return 0;
4619 if compile_prog "" "" ; then
4620 epoll=yes
4623 # epoll_create1 is a later addition
4624 # so we must check separately for its presence
4625 epoll_create1=no
4626 cat > $TMPC << EOF
4627 #include <sys/epoll.h>
4629 int main(void)
4631 /* Note that we use epoll_create1 as a value, not as
4632 * a function being called. This is necessary so that on
4633 * old SPARC glibc versions where the function was present in
4634 * the library but not declared in the header file we will
4635 * fail the configure check. (Otherwise we will get a compiler
4636 * warning but not an error, and will proceed to fail the
4637 * qemu compile where we compile with -Werror.)
4639 return (int)(uintptr_t)&epoll_create1;
4642 if compile_prog "" "" ; then
4643 epoll_create1=yes
4646 # check for sendfile support
4647 sendfile=no
4648 cat > $TMPC << EOF
4649 #include <sys/sendfile.h>
4651 int main(void)
4653 return sendfile(0, 0, 0, 0);
4656 if compile_prog "" "" ; then
4657 sendfile=yes
4660 # check for timerfd support (glibc 2.8 and newer)
4661 timerfd=no
4662 cat > $TMPC << EOF
4663 #include <sys/timerfd.h>
4665 int main(void)
4667 return(timerfd_create(CLOCK_REALTIME, 0));
4670 if compile_prog "" "" ; then
4671 timerfd=yes
4674 # check for setns and unshare support
4675 setns=no
4676 cat > $TMPC << EOF
4677 #include <sched.h>
4679 int main(void)
4681 int ret;
4682 ret = setns(0, 0);
4683 ret = unshare(0);
4684 return ret;
4687 if compile_prog "" "" ; then
4688 setns=yes
4691 # clock_adjtime probe
4692 clock_adjtime=no
4693 cat > $TMPC <<EOF
4694 #include <time.h>
4696 int main(void)
4698 return clock_adjtime(0, 0);
4701 clock_adjtime=no
4702 if compile_prog "" "" ; then
4703 clock_adjtime=yes
4706 # syncfs probe
4707 syncfs=no
4708 cat > $TMPC <<EOF
4709 #include <unistd.h>
4711 int main(void)
4713 return syncfs(0);
4716 syncfs=no
4717 if compile_prog "" "" ; then
4718 syncfs=yes
4721 # Check we have a new enough version of sphinx-build
4722 has_sphinx_build() {
4723 # This is a bit awkward but works: create a trivial document and
4724 # try to run it with our configuration file (which enforces a
4725 # version requirement). This will fail if either
4726 # sphinx-build doesn't exist at all or if it is too old.
4727 mkdir -p "$TMPDIR1/sphinx"
4728 touch "$TMPDIR1/sphinx/index.rst"
4729 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4732 # Check if tools are available to build documentation.
4733 if test "$docs" != "no" ; then
4734 if has makeinfo && has pod2man && has_sphinx_build; then
4735 docs=yes
4736 else
4737 if test "$docs" = "yes" ; then
4738 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4740 docs=no
4744 # Search for bswap_32 function
4745 byteswap_h=no
4746 cat > $TMPC << EOF
4747 #include <byteswap.h>
4748 int main(void) { return bswap_32(0); }
4750 if compile_prog "" "" ; then
4751 byteswap_h=yes
4754 # Search for bswap32 function
4755 bswap_h=no
4756 cat > $TMPC << EOF
4757 #include <sys/endian.h>
4758 #include <sys/types.h>
4759 #include <machine/bswap.h>
4760 int main(void) { return bswap32(0); }
4762 if compile_prog "" "" ; then
4763 bswap_h=yes
4766 ##########################################
4767 # Do we have libiscsi >= 1.9.0
4768 if test "$libiscsi" != "no" ; then
4769 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4770 libiscsi="yes"
4771 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4772 libiscsi_libs=$($pkg_config --libs libiscsi)
4773 else
4774 if test "$libiscsi" = "yes" ; then
4775 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4777 libiscsi="no"
4781 ##########################################
4782 # Do we need libm
4783 cat > $TMPC << EOF
4784 #include <math.h>
4785 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4787 if compile_prog "" "" ; then
4789 elif compile_prog "" "-lm" ; then
4790 LIBS="-lm $LIBS"
4791 libs_qga="-lm $libs_qga"
4792 else
4793 error_exit "libm check failed"
4796 ##########################################
4797 # Do we need librt
4798 # uClibc provides 2 versions of clock_gettime(), one with realtime
4799 # support and one without. This means that the clock_gettime() don't
4800 # need -lrt. We still need it for timer_create() so we check for this
4801 # function in addition.
4802 cat > $TMPC <<EOF
4803 #include <signal.h>
4804 #include <time.h>
4805 int main(void) {
4806 timer_create(CLOCK_REALTIME, NULL, NULL);
4807 return clock_gettime(CLOCK_REALTIME, NULL);
4811 if compile_prog "" "" ; then
4813 # we need pthread for static linking. use previous pthread test result
4814 elif compile_prog "" "$pthread_lib -lrt" ; then
4815 LIBS="$LIBS -lrt"
4816 libs_qga="$libs_qga -lrt"
4819 # Check whether we need to link libutil for openpty()
4820 cat > $TMPC << EOF
4821 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4822 int main(void) { return openpty(0, 0, 0, 0, 0); }
4825 if ! compile_prog "" "" ; then
4826 if compile_prog "" "-lutil" ; then
4827 libs_softmmu="-lutil $libs_softmmu"
4828 libs_tools="-lutil $libs_tools"
4832 ##########################################
4833 # spice probe
4834 if test "$spice" != "no" ; then
4835 cat > $TMPC << EOF
4836 #include <spice.h>
4837 int main(void) { spice_server_new(); return 0; }
4839 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4840 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4841 if $pkg_config --atleast-version=0.12.5 spice-server && \
4842 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4843 compile_prog "$spice_cflags" "$spice_libs" ; then
4844 spice="yes"
4845 libs_softmmu="$libs_softmmu $spice_libs"
4846 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4847 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4848 spice_server_version=$($pkg_config --modversion spice-server)
4849 else
4850 if test "$spice" = "yes" ; then
4851 feature_not_found "spice" \
4852 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4854 spice="no"
4858 # check for smartcard support
4859 if test "$smartcard" != "no"; then
4860 if $pkg_config --atleast-version=2.5.1 libcacard; then
4861 libcacard_cflags=$($pkg_config --cflags libcacard)
4862 libcacard_libs=$($pkg_config --libs libcacard)
4863 smartcard="yes"
4864 else
4865 if test "$smartcard" = "yes"; then
4866 feature_not_found "smartcard" "Install libcacard devel"
4868 smartcard="no"
4872 # check for libusb
4873 if test "$libusb" != "no" ; then
4874 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4875 libusb="yes"
4876 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4877 libusb_libs=$($pkg_config --libs libusb-1.0)
4878 else
4879 if test "$libusb" = "yes"; then
4880 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4882 libusb="no"
4886 # check for usbredirparser for usb network redirection support
4887 if test "$usb_redir" != "no" ; then
4888 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4889 usb_redir="yes"
4890 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4891 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4892 else
4893 if test "$usb_redir" = "yes"; then
4894 feature_not_found "usb-redir" "Install usbredir devel"
4896 usb_redir="no"
4900 ##########################################
4901 # check if we have VSS SDK headers for win
4903 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4904 test "$vss_win32_sdk" != "no" ; then
4905 case "$vss_win32_sdk" in
4906 "") vss_win32_include="-isystem $source_path" ;;
4907 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4908 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4909 vss_win32_include="-isystem $source_path/.sdk/vss"
4910 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4912 *) vss_win32_include="-isystem $vss_win32_sdk"
4913 esac
4914 cat > $TMPC << EOF
4915 #define __MIDL_user_allocate_free_DEFINED__
4916 #include <inc/win2003/vss.h>
4917 int main(void) { return VSS_CTX_BACKUP; }
4919 if compile_prog "$vss_win32_include" "" ; then
4920 guest_agent_with_vss="yes"
4921 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4922 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4923 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4924 else
4925 if test "$vss_win32_sdk" != "" ; then
4926 echo "ERROR: Please download and install Microsoft VSS SDK:"
4927 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4928 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4929 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4930 echo "ERROR: The headers are extracted in the directory \`inc'."
4931 feature_not_found "VSS support"
4933 guest_agent_with_vss="no"
4937 ##########################################
4938 # lookup Windows platform SDK (if not specified)
4939 # The SDK is needed only to build .tlb (type library) file of guest agent
4940 # VSS provider from the source. It is usually unnecessary because the
4941 # pre-compiled .tlb file is included.
4943 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4944 test "$guest_agent_with_vss" = "yes" ; then
4945 if test -z "$win_sdk"; then
4946 programfiles="$PROGRAMFILES"
4947 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4948 if test -n "$programfiles"; then
4949 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4950 else
4951 feature_not_found "Windows SDK"
4953 elif test "$win_sdk" = "no"; then
4954 win_sdk=""
4958 ##########################################
4959 # check if mingw environment provides a recent ntddscsi.h
4960 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4961 cat > $TMPC << EOF
4962 #include <windows.h>
4963 #include <ntddscsi.h>
4964 int main(void) {
4965 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4966 #error Missing required ioctl definitions
4967 #endif
4968 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4969 return addr.Lun;
4972 if compile_prog "" "" ; then
4973 guest_agent_ntddscsi=yes
4974 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4978 ##########################################
4979 # virgl renderer probe
4981 if test "$virglrenderer" != "no" ; then
4982 cat > $TMPC << EOF
4983 #include <virglrenderer.h>
4984 int main(void) { virgl_renderer_poll(); return 0; }
4986 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4987 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4988 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4989 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4990 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4991 virglrenderer="yes"
4992 else
4993 if test "$virglrenderer" = "yes" ; then
4994 feature_not_found "virglrenderer"
4996 virglrenderer="no"
5000 ##########################################
5001 # capstone
5003 case "$capstone" in
5004 "" | yes)
5005 if $pkg_config capstone; then
5006 capstone=system
5007 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5008 capstone=git
5009 elif test -e "${source_path}/capstone/Makefile" ; then
5010 capstone=internal
5011 elif test -z "$capstone" ; then
5012 capstone=no
5013 else
5014 feature_not_found "capstone" "Install capstone devel or git submodule"
5018 system)
5019 if ! $pkg_config capstone; then
5020 feature_not_found "capstone" "Install capstone devel"
5023 esac
5025 case "$capstone" in
5026 git | internal)
5027 if test "$capstone" = git; then
5028 git_submodules="${git_submodules} capstone"
5030 mkdir -p capstone
5031 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5032 if test "$mingw32" = "yes"; then
5033 LIBCAPSTONE=capstone.lib
5034 else
5035 LIBCAPSTONE=libcapstone.a
5037 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5040 system)
5041 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5042 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5048 error_exit "Unknown state for capstone: $capstone"
5050 esac
5052 ##########################################
5053 # check if we have fdatasync
5055 fdatasync=no
5056 cat > $TMPC << EOF
5057 #include <unistd.h>
5058 int main(void) {
5059 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5060 return fdatasync(0);
5061 #else
5062 #error Not supported
5063 #endif
5066 if compile_prog "" "" ; then
5067 fdatasync=yes
5070 ##########################################
5071 # check if we have madvise
5073 madvise=no
5074 cat > $TMPC << EOF
5075 #include <sys/types.h>
5076 #include <sys/mman.h>
5077 #include <stddef.h>
5078 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5080 if compile_prog "" "" ; then
5081 madvise=yes
5084 ##########################################
5085 # check if we have posix_madvise
5087 posix_madvise=no
5088 cat > $TMPC << EOF
5089 #include <sys/mman.h>
5090 #include <stddef.h>
5091 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5093 if compile_prog "" "" ; then
5094 posix_madvise=yes
5097 ##########################################
5098 # check if we have posix_memalign()
5100 posix_memalign=no
5101 cat > $TMPC << EOF
5102 #include <stdlib.h>
5103 int main(void) {
5104 void *p;
5105 return posix_memalign(&p, 8, 8);
5108 if compile_prog "" "" ; then
5109 posix_memalign=yes
5112 ##########################################
5113 # check if we have posix_syslog
5115 posix_syslog=no
5116 cat > $TMPC << EOF
5117 #include <syslog.h>
5118 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5120 if compile_prog "" "" ; then
5121 posix_syslog=yes
5124 ##########################################
5125 # check if we have sem_timedwait
5127 sem_timedwait=no
5128 cat > $TMPC << EOF
5129 #include <semaphore.h>
5130 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5132 if compile_prog "" "" ; then
5133 sem_timedwait=yes
5136 ##########################################
5137 # check if we have strchrnul
5139 strchrnul=no
5140 cat > $TMPC << EOF
5141 #include <string.h>
5142 int main(void);
5143 // Use a haystack that the compiler shouldn't be able to constant fold
5144 char *haystack = (char*)&main;
5145 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5147 if compile_prog "" "" ; then
5148 strchrnul=yes
5151 ##########################################
5152 # check if trace backend exists
5154 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5155 if test "$?" -ne 0 ; then
5156 error_exit "invalid trace backends" \
5157 "Please choose supported trace backends."
5160 ##########################################
5161 # For 'ust' backend, test if ust headers are present
5162 if have_backend "ust"; then
5163 cat > $TMPC << EOF
5164 #include <lttng/tracepoint.h>
5165 int main(void) { return 0; }
5167 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5168 if $pkg_config lttng-ust --exists; then
5169 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5170 else
5171 lttng_ust_libs="-llttng-ust -ldl"
5173 if $pkg_config liburcu-bp --exists; then
5174 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5175 else
5176 urcu_bp_libs="-lurcu-bp"
5179 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5180 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5181 else
5182 error_exit "Trace backend 'ust' missing lttng-ust header files"
5186 ##########################################
5187 # For 'dtrace' backend, test if 'dtrace' command is present
5188 if have_backend "dtrace"; then
5189 if ! has 'dtrace' ; then
5190 error_exit "dtrace command is not found in PATH $PATH"
5192 trace_backend_stap="no"
5193 if has 'stap' ; then
5194 trace_backend_stap="yes"
5198 ##########################################
5199 # check and set a backend for coroutine
5201 # We prefer ucontext, but it's not always possible. The fallback
5202 # is sigcontext. On Windows the only valid backend is the Windows
5203 # specific one.
5205 ucontext_works=no
5206 if test "$darwin" != "yes"; then
5207 cat > $TMPC << EOF
5208 #include <ucontext.h>
5209 #ifdef __stub_makecontext
5210 #error Ignoring glibc stub makecontext which will always fail
5211 #endif
5212 int main(void) { makecontext(0, 0, 0); return 0; }
5214 if compile_prog "" "" ; then
5215 ucontext_works=yes
5219 if test "$coroutine" = ""; then
5220 if test "$mingw32" = "yes"; then
5221 coroutine=win32
5222 elif test "$ucontext_works" = "yes"; then
5223 coroutine=ucontext
5224 else
5225 coroutine=sigaltstack
5227 else
5228 case $coroutine in
5229 windows)
5230 if test "$mingw32" != "yes"; then
5231 error_exit "'windows' coroutine backend only valid for Windows"
5233 # Unfortunately the user visible backend name doesn't match the
5234 # coroutine-*.c filename for this case, so we have to adjust it here.
5235 coroutine=win32
5237 ucontext)
5238 if test "$ucontext_works" != "yes"; then
5239 feature_not_found "ucontext"
5242 sigaltstack)
5243 if test "$mingw32" = "yes"; then
5244 error_exit "only the 'windows' coroutine backend is valid for Windows"
5248 error_exit "unknown coroutine backend $coroutine"
5250 esac
5253 if test "$coroutine_pool" = ""; then
5254 coroutine_pool=yes
5257 if test "$debug_stack_usage" = "yes"; then
5258 if test "$coroutine_pool" = "yes"; then
5259 echo "WARN: disabling coroutine pool for stack usage debugging"
5260 coroutine_pool=no
5265 ##########################################
5266 # check if we have open_by_handle_at
5268 open_by_handle_at=no
5269 cat > $TMPC << EOF
5270 #include <fcntl.h>
5271 #if !defined(AT_EMPTY_PATH)
5272 # error missing definition
5273 #else
5274 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5275 #endif
5277 if compile_prog "" "" ; then
5278 open_by_handle_at=yes
5281 ########################################
5282 # check if we have linux/magic.h
5284 linux_magic_h=no
5285 cat > $TMPC << EOF
5286 #include <linux/magic.h>
5287 int main(void) {
5288 return 0;
5291 if compile_prog "" "" ; then
5292 linux_magic_h=yes
5295 ########################################
5296 # check whether we can disable warning option with a pragma (this is needed
5297 # to silence warnings in the headers of some versions of external libraries).
5298 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5299 # only a warning.
5301 # If we can't selectively disable warning in the code, disable -Werror so that
5302 # the build doesn't fail anyway.
5304 pragma_disable_unused_but_set=no
5305 cat > $TMPC << EOF
5306 #pragma GCC diagnostic push
5307 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5308 #pragma GCC diagnostic pop
5310 int main(void) {
5311 return 0;
5314 if compile_prog "-Werror" "" ; then
5315 pragma_diagnostic_available=yes
5316 else
5317 werror=no
5320 ########################################
5321 # check if we have valgrind/valgrind.h
5323 valgrind_h=no
5324 cat > $TMPC << EOF
5325 #include <valgrind/valgrind.h>
5326 int main(void) {
5327 return 0;
5330 if compile_prog "" "" ; then
5331 valgrind_h=yes
5334 ########################################
5335 # check if environ is declared
5337 has_environ=no
5338 cat > $TMPC << EOF
5339 #include <unistd.h>
5340 int main(void) {
5341 environ = 0;
5342 return 0;
5345 if compile_prog "" "" ; then
5346 has_environ=yes
5349 ########################################
5350 # check if cpuid.h is usable.
5352 cat > $TMPC << EOF
5353 #include <cpuid.h>
5354 int main(void) {
5355 unsigned a, b, c, d;
5356 int max = __get_cpuid_max(0, 0);
5358 if (max >= 1) {
5359 __cpuid(1, a, b, c, d);
5362 if (max >= 7) {
5363 __cpuid_count(7, 0, a, b, c, d);
5366 return 0;
5369 if compile_prog "" "" ; then
5370 cpuid_h=yes
5373 ##########################################
5374 # avx2 optimization requirement check
5376 # There is no point enabling this if cpuid.h is not usable,
5377 # since we won't be able to select the new routines.
5379 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5380 cat > $TMPC << EOF
5381 #pragma GCC push_options
5382 #pragma GCC target("avx2")
5383 #include <cpuid.h>
5384 #include <immintrin.h>
5385 static int bar(void *a) {
5386 __m256i x = *(__m256i *)a;
5387 return _mm256_testz_si256(x, x);
5389 int main(int argc, char *argv[]) { return bar(argv[0]); }
5391 if compile_object "" ; then
5392 avx2_opt="yes"
5393 else
5394 avx2_opt="no"
5398 ########################################
5399 # check if __[u]int128_t is usable.
5401 int128=no
5402 cat > $TMPC << EOF
5403 __int128_t a;
5404 __uint128_t b;
5405 int main (void) {
5406 a = a + b;
5407 b = a * b;
5408 a = a * a;
5409 return 0;
5412 if compile_prog "" "" ; then
5413 int128=yes
5416 #########################################
5417 # See if 128-bit atomic operations are supported.
5419 atomic128=no
5420 if test "$int128" = "yes"; then
5421 cat > $TMPC << EOF
5422 int main(void)
5424 unsigned __int128 x = 0, y = 0;
5425 y = __atomic_load_16(&x, 0);
5426 __atomic_store_16(&x, y, 0);
5427 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5428 return 0;
5431 if compile_prog "" "" ; then
5432 atomic128=yes
5436 cmpxchg128=no
5437 if test "$int128" = yes && test "$atomic128" = no; then
5438 cat > $TMPC << EOF
5439 int main(void)
5441 unsigned __int128 x = 0, y = 0;
5442 __sync_val_compare_and_swap_16(&x, y, x);
5443 return 0;
5446 if compile_prog "" "" ; then
5447 cmpxchg128=yes
5451 #########################################
5452 # See if 64-bit atomic operations are supported.
5453 # Note that without __atomic builtins, we can only
5454 # assume atomic loads/stores max at pointer size.
5456 cat > $TMPC << EOF
5457 #include <stdint.h>
5458 int main(void)
5460 uint64_t x = 0, y = 0;
5461 #ifdef __ATOMIC_RELAXED
5462 y = __atomic_load_8(&x, 0);
5463 __atomic_store_8(&x, y, 0);
5464 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5465 __atomic_exchange_8(&x, y, 0);
5466 __atomic_fetch_add_8(&x, y, 0);
5467 #else
5468 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5469 __sync_lock_test_and_set(&x, y);
5470 __sync_val_compare_and_swap(&x, y, 0);
5471 __sync_fetch_and_add(&x, y);
5472 #endif
5473 return 0;
5476 if compile_prog "" "" ; then
5477 atomic64=yes
5480 #########################################
5481 # See if --dynamic-list is supported by the linker
5482 ld_dynamic_list="no"
5483 if test "$static" = "no" ; then
5484 cat > $TMPTXT <<EOF
5486 foo;
5490 cat > $TMPC <<EOF
5491 #include <stdio.h>
5492 void foo(void);
5494 void foo(void)
5496 printf("foo\n");
5499 int main(void)
5501 foo();
5502 return 0;
5506 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5507 ld_dynamic_list="yes"
5511 #########################################
5512 # See if -exported_symbols_list is supported by the linker
5514 ld_exported_symbols_list="no"
5515 if test "$static" = "no" ; then
5516 cat > $TMPTXT <<EOF
5517 _foo
5520 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5521 ld_exported_symbols_list="yes"
5525 if test "$plugins" = "yes" &&
5526 test "$ld_dynamic_list" = "no" &&
5527 test "$ld_exported_symbols_list" = "no" ; then
5528 error_exit \
5529 "Plugin support requires dynamic linking and specifying a set of symbols " \
5530 "that are exported to plugins. Unfortunately your linker doesn't " \
5531 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5532 "for this purpose. You can't build with --static."
5535 ########################################
5536 # See if 16-byte vector operations are supported.
5537 # Even without a vector unit the compiler may expand these.
5538 # There is a bug in old GCC for PPC that crashes here.
5539 # Unfortunately it's the system compiler for Centos 7.
5541 cat > $TMPC << EOF
5542 typedef unsigned char U1 __attribute__((vector_size(16)));
5543 typedef unsigned short U2 __attribute__((vector_size(16)));
5544 typedef unsigned int U4 __attribute__((vector_size(16)));
5545 typedef unsigned long long U8 __attribute__((vector_size(16)));
5546 typedef signed char S1 __attribute__((vector_size(16)));
5547 typedef signed short S2 __attribute__((vector_size(16)));
5548 typedef signed int S4 __attribute__((vector_size(16)));
5549 typedef signed long long S8 __attribute__((vector_size(16)));
5550 static U1 a1, b1;
5551 static U2 a2, b2;
5552 static U4 a4, b4;
5553 static U8 a8, b8;
5554 static S1 c1;
5555 static S2 c2;
5556 static S4 c4;
5557 static S8 c8;
5558 static int i;
5559 void helper(void *d, void *a, int shift, int i);
5560 void helper(void *d, void *a, int shift, int i)
5562 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5563 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5564 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5565 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5567 int main(void)
5569 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5570 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5571 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5572 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5573 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5574 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5575 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5576 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5577 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5578 return 0;
5582 vector16=no
5583 if compile_prog "" "" ; then
5584 vector16=yes
5587 ########################################
5588 # check if getauxval is available.
5590 getauxval=no
5591 cat > $TMPC << EOF
5592 #include <sys/auxv.h>
5593 int main(void) {
5594 return getauxval(AT_HWCAP) == 0;
5597 if compile_prog "" "" ; then
5598 getauxval=yes
5601 ########################################
5602 # check if ccache is interfering with
5603 # semantic analysis of macros
5605 unset CCACHE_CPP2
5606 ccache_cpp2=no
5607 cat > $TMPC << EOF
5608 static const int Z = 1;
5609 #define fn() ({ Z; })
5610 #define TAUT(X) ((X) == Z)
5611 #define PAREN(X, Y) (X == Y)
5612 #define ID(X) (X)
5613 int main(int argc, char *argv[])
5615 int x = 0, y = 0;
5616 x = ID(x);
5617 x = fn();
5618 fn();
5619 if (PAREN(x, y)) return 0;
5620 if (TAUT(Z)) return 0;
5621 return 0;
5625 if ! compile_object "-Werror"; then
5626 ccache_cpp2=yes
5629 #################################################
5630 # clang does not support glibc + FORTIFY_SOURCE.
5632 if test "$fortify_source" != "no"; then
5633 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5634 fortify_source="no";
5635 elif test -n "$cxx" && has $cxx &&
5636 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5637 fortify_source="no";
5638 else
5639 fortify_source="yes"
5643 ###############################################
5644 # Check if copy_file_range is provided by glibc
5645 have_copy_file_range=no
5646 cat > $TMPC << EOF
5647 #include <unistd.h>
5648 int main(void) {
5649 copy_file_range(0, NULL, 0, NULL, 0, 0);
5650 return 0;
5653 if compile_prog "" "" ; then
5654 have_copy_file_range=yes
5657 ##########################################
5658 # check if struct fsxattr is available via linux/fs.h
5660 have_fsxattr=no
5661 cat > $TMPC << EOF
5662 #include <linux/fs.h>
5663 struct fsxattr foo;
5664 int main(void) {
5665 return 0;
5668 if compile_prog "" "" ; then
5669 have_fsxattr=yes
5672 ##########################################
5673 # check for usable membarrier system call
5674 if test "$membarrier" = "yes"; then
5675 have_membarrier=no
5676 if test "$mingw32" = "yes" ; then
5677 have_membarrier=yes
5678 elif test "$linux" = "yes" ; then
5679 cat > $TMPC << EOF
5680 #include <linux/membarrier.h>
5681 #include <sys/syscall.h>
5682 #include <unistd.h>
5683 #include <stdlib.h>
5684 int main(void) {
5685 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5686 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5687 exit(0);
5690 if compile_prog "" "" ; then
5691 have_membarrier=yes
5694 if test "$have_membarrier" = "no"; then
5695 feature_not_found "membarrier" "membarrier system call not available"
5697 else
5698 # Do not enable it by default even for Mingw32, because it doesn't
5699 # work on Wine.
5700 membarrier=no
5703 ##########################################
5704 # check if rtnetlink.h exists and is useful
5705 have_rtnetlink=no
5706 cat > $TMPC << EOF
5707 #include <linux/rtnetlink.h>
5708 int main(void) {
5709 return IFLA_PROTO_DOWN;
5712 if compile_prog "" "" ; then
5713 have_rtnetlink=yes
5716 ##########################################
5717 # check for usable AF_VSOCK environment
5718 have_af_vsock=no
5719 cat > $TMPC << EOF
5720 #include <errno.h>
5721 #include <sys/types.h>
5722 #include <sys/socket.h>
5723 #if !defined(AF_VSOCK)
5724 # error missing AF_VSOCK flag
5725 #endif
5726 #include <linux/vm_sockets.h>
5727 int main(void) {
5728 int sock, ret;
5729 struct sockaddr_vm svm;
5730 socklen_t len = sizeof(svm);
5731 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5732 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5733 if ((ret == -1) && (errno == ENOTCONN)) {
5734 return 0;
5736 return -1;
5739 if compile_prog "" "" ; then
5740 have_af_vsock=yes
5743 ##########################################
5744 # check for usable AF_ALG environment
5745 hava_afalg=no
5746 cat > $TMPC << EOF
5747 #include <errno.h>
5748 #include <sys/types.h>
5749 #include <sys/socket.h>
5750 #include <linux/if_alg.h>
5751 int main(void) {
5752 int sock;
5753 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5754 return sock;
5757 if compile_prog "" "" ; then
5758 have_afalg=yes
5760 if test "$crypto_afalg" = "yes"
5761 then
5762 if test "$have_afalg" != "yes"
5763 then
5764 error_exit "AF_ALG requested but could not be detected"
5769 #################################################
5770 # Check to see if we have the Hypervisor framework
5771 if [ "$darwin" = "yes" ] ; then
5772 cat > $TMPC << EOF
5773 #include <Hypervisor/hv.h>
5774 int main() { return 0;}
5776 if ! compile_object ""; then
5777 hvf='no'
5778 else
5779 hvf='yes'
5780 LDFLAGS="-framework Hypervisor $LDFLAGS"
5784 #################################################
5785 # Sparc implicitly links with --relax, which is
5786 # incompatible with -r, so --no-relax should be
5787 # given. It does no harm to give it on other
5788 # platforms too.
5790 # Note: the prototype is needed since QEMU_CFLAGS
5791 # contains -Wmissing-prototypes
5792 cat > $TMPC << EOF
5793 extern int foo(void);
5794 int foo(void) { return 0; }
5796 if ! compile_object ""; then
5797 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5799 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5800 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5801 LD_REL_FLAGS=$i
5802 break
5804 done
5805 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5806 feature_not_found "modules" "Cannot find how to build relocatable objects"
5809 ##########################################
5810 # check for sysmacros.h
5812 have_sysmacros=no
5813 cat > $TMPC << EOF
5814 #include <sys/sysmacros.h>
5815 int main(void) {
5816 return makedev(0, 0);
5819 if compile_prog "" "" ; then
5820 have_sysmacros=yes
5823 ##########################################
5824 # Veritas HyperScale block driver VxHS
5825 # Check if libvxhs is installed
5827 if test "$vxhs" != "no" ; then
5828 cat > $TMPC <<EOF
5829 #include <stdint.h>
5830 #include <qnio/qnio_api.h>
5832 void *vxhs_callback;
5834 int main(void) {
5835 iio_init(QNIO_VERSION, vxhs_callback);
5836 return 0;
5839 vxhs_libs="-lvxhs -lssl"
5840 if compile_prog "" "$vxhs_libs" ; then
5841 vxhs=yes
5842 else
5843 if test "$vxhs" = "yes" ; then
5844 feature_not_found "vxhs block device" "Install libvxhs See github"
5846 vxhs=no
5850 ##########################################
5851 # check for _Static_assert()
5853 have_static_assert=no
5854 cat > $TMPC << EOF
5855 _Static_assert(1, "success");
5856 int main(void) {
5857 return 0;
5860 if compile_prog "" "" ; then
5861 have_static_assert=yes
5864 ##########################################
5865 # check for utmpx.h, it is missing e.g. on OpenBSD
5867 have_utmpx=no
5868 cat > $TMPC << EOF
5869 #include <utmpx.h>
5870 struct utmpx user_info;
5871 int main(void) {
5872 return 0;
5875 if compile_prog "" "" ; then
5876 have_utmpx=yes
5879 ##########################################
5880 # check for getrandom()
5882 have_getrandom=no
5883 cat > $TMPC << EOF
5884 #include <sys/random.h>
5885 int main(void) {
5886 return getrandom(0, 0, GRND_NONBLOCK);
5889 if compile_prog "" "" ; then
5890 have_getrandom=yes
5893 ##########################################
5894 # checks for sanitizers
5896 have_asan=no
5897 have_ubsan=no
5898 have_asan_iface_h=no
5899 have_asan_iface_fiber=no
5901 if test "$sanitizers" = "yes" ; then
5902 write_c_skeleton
5903 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5904 have_asan=yes
5907 # we could use a simple skeleton for flags checks, but this also
5908 # detect the static linking issue of ubsan, see also:
5909 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5910 cat > $TMPC << EOF
5911 #include <stdlib.h>
5912 int main(void) {
5913 void *tmp = malloc(10);
5914 return *(int *)(tmp + 2);
5917 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5918 have_ubsan=yes
5921 if check_include "sanitizer/asan_interface.h" ; then
5922 have_asan_iface_h=yes
5925 cat > $TMPC << EOF
5926 #include <sanitizer/asan_interface.h>
5927 int main(void) {
5928 __sanitizer_start_switch_fiber(0, 0, 0);
5929 return 0;
5932 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5933 have_asan_iface_fiber=yes
5937 ##########################################
5938 # check for libpmem
5940 if test "$libpmem" != "no"; then
5941 if $pkg_config --exists "libpmem"; then
5942 libpmem="yes"
5943 libpmem_libs=$($pkg_config --libs libpmem)
5944 libpmem_cflags=$($pkg_config --cflags libpmem)
5945 libs_softmmu="$libs_softmmu $libpmem_libs"
5946 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5947 else
5948 if test "$libpmem" = "yes" ; then
5949 feature_not_found "libpmem" "Install nvml or pmdk"
5951 libpmem="no"
5955 ##########################################
5956 # check for slirp
5958 case "$slirp" in
5959 "" | yes)
5960 if $pkg_config slirp; then
5961 slirp=system
5962 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5963 slirp=git
5964 elif test -e "${source_path}/slirp/Makefile" ; then
5965 slirp=internal
5966 elif test -z "$slirp" ; then
5967 slirp=no
5968 else
5969 feature_not_found "slirp" "Install slirp devel or git submodule"
5973 system)
5974 if ! $pkg_config slirp; then
5975 feature_not_found "slirp" "Install slirp devel"
5978 esac
5980 case "$slirp" in
5981 git | internal)
5982 if test "$slirp" = git; then
5983 git_submodules="${git_submodules} slirp"
5985 mkdir -p slirp
5986 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5987 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5990 system)
5991 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5992 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5993 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5999 error_exit "Unknown state for slirp: $slirp"
6001 esac
6004 ##########################################
6005 # End of CC checks
6006 # After here, no more $cc or $ld runs
6008 write_c_skeleton
6010 if test "$gcov" = "yes" ; then
6011 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
6012 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
6013 elif test "$fortify_source" = "yes" ; then
6014 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
6015 elif test "$debug" = "no"; then
6016 CFLAGS="-O2 $CFLAGS"
6019 if test "$have_asan" = "yes"; then
6020 CFLAGS="-fsanitize=address $CFLAGS"
6021 if test "$have_asan_iface_h" = "no" ; then
6022 echo "ASAN build enabled, but ASAN header missing." \
6023 "Without code annotation, the report may be inferior."
6024 elif test "$have_asan_iface_fiber" = "no" ; then
6025 echo "ASAN build enabled, but ASAN header is too old." \
6026 "Without code annotation, the report may be inferior."
6029 if test "$have_ubsan" = "yes"; then
6030 CFLAGS="-fsanitize=undefined $CFLAGS"
6033 ##########################################
6034 # Do we have libnfs
6035 if test "$libnfs" != "no" ; then
6036 if $pkg_config --atleast-version=1.9.3 libnfs; then
6037 libnfs="yes"
6038 libnfs_libs=$($pkg_config --libs libnfs)
6039 else
6040 if test "$libnfs" = "yes" ; then
6041 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6043 libnfs="no"
6047 ##########################################
6048 # Do we have libudev
6049 if test "$libudev" != "no" ; then
6050 if $pkg_config libudev && test "$static" != "yes"; then
6051 libudev="yes"
6052 libudev_libs=$($pkg_config --libs libudev)
6053 else
6054 libudev="no"
6058 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6059 if test "$werror" = "yes"; then
6060 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6063 if test "$solaris" = "no" ; then
6064 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6065 LDFLAGS="-Wl,--warn-common $LDFLAGS"
6069 # test if pod2man has --utf8 option
6070 if pod2man --help | grep -q utf8; then
6071 POD2MAN="pod2man --utf8"
6072 else
6073 POD2MAN="pod2man"
6076 # Use ASLR, no-SEH and DEP if available
6077 if test "$mingw32" = "yes" ; then
6078 for flag in --dynamicbase --no-seh --nxcompat; do
6079 if ld_has $flag ; then
6080 LDFLAGS="-Wl,$flag $LDFLAGS"
6082 done
6085 # Disable OpenBSD W^X if available
6086 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6087 cat > $TMPC <<EOF
6088 int main(void) { return 0; }
6090 wx_ldflags="-Wl,-z,wxneeded"
6091 if compile_prog "" "$wx_ldflags"; then
6092 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6096 qemu_confdir=$sysconfdir$confsuffix
6097 qemu_moddir=$libdir$confsuffix
6098 qemu_datadir=$datadir$confsuffix
6099 qemu_localedir="$datadir/locale"
6100 qemu_icondir="$datadir/icons"
6101 qemu_desktopdir="$datadir/applications"
6103 # We can only support ivshmem if we have eventfd
6104 if [ "$eventfd" = "yes" ]; then
6105 ivshmem=yes
6108 tools=""
6109 if test "$want_tools" = "yes" ; then
6110 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6111 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6112 tools="qemu-nbd\$(EXESUF) $tools"
6114 if [ "$ivshmem" = "yes" ]; then
6115 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6117 if [ "$curl" = "yes" ]; then
6118 tools="elf2dmp\$(EXESUF) $tools"
6121 if test "$softmmu" = yes ; then
6122 if test "$linux" = yes; then
6123 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6124 virtfs=yes
6125 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6126 else
6127 if test "$virtfs" = yes; then
6128 error_exit "VirtFS requires libcap devel and libattr devel"
6130 virtfs=no
6132 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6133 mpath=yes
6134 else
6135 if test "$mpath" = yes; then
6136 error_exit "Multipath requires libmpathpersist devel"
6138 mpath=no
6140 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6141 else
6142 if test "$virtfs" = yes; then
6143 error_exit "VirtFS is supported only on Linux"
6145 virtfs=no
6146 if test "$mpath" = yes; then
6147 error_exit "Multipath is supported only on Linux"
6149 mpath=no
6151 if test "$xkbcommon" = "yes"; then
6152 tools="qemu-keymap\$(EXESUF) $tools"
6156 # Probe for guest agent support/options
6158 if [ "$guest_agent" != "no" ]; then
6159 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6160 guest_agent=no
6161 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6162 tools="qemu-ga\$(EXESUF) $tools"
6163 guest_agent=yes
6164 elif [ "$guest_agent" != yes ]; then
6165 guest_agent=no
6166 else
6167 error_exit "Guest agent is not supported on this platform"
6171 # Guest agent Window MSI package
6173 if test "$guest_agent" != yes; then
6174 if test "$guest_agent_msi" = yes; then
6175 error_exit "MSI guest agent package requires guest agent enabled"
6177 guest_agent_msi=no
6178 elif test "$mingw32" != "yes"; then
6179 if test "$guest_agent_msi" = "yes"; then
6180 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6182 guest_agent_msi=no
6183 elif ! has wixl; then
6184 if test "$guest_agent_msi" = "yes"; then
6185 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6187 guest_agent_msi=no
6188 else
6189 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6190 # disabled explicitly
6191 if test "$guest_agent_msi" != "no"; then
6192 guest_agent_msi=yes
6196 if test "$guest_agent_msi" = "yes"; then
6197 if test "$guest_agent_with_vss" = "yes"; then
6198 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6201 if test "$QEMU_GA_MANUFACTURER" = ""; then
6202 QEMU_GA_MANUFACTURER=QEMU
6205 if test "$QEMU_GA_DISTRO" = ""; then
6206 QEMU_GA_DISTRO=Linux
6209 if test "$QEMU_GA_VERSION" = ""; then
6210 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6213 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6215 case "$cpu" in
6216 x86_64)
6217 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6219 i386)
6220 QEMU_GA_MSI_ARCH="-D Arch=32"
6223 error_exit "CPU $cpu not supported for building installation package"
6225 esac
6228 # Mac OS X ships with a broken assembler
6229 roms=
6230 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6231 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6232 test "$softmmu" = yes ; then
6233 # Different host OS linkers have different ideas about the name of the ELF
6234 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6235 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6236 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6237 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6238 ld_i386_emulation="$emu"
6239 roms="optionrom"
6240 break
6242 done
6245 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6246 if test "$cpu" = "s390x" ; then
6247 write_c_skeleton
6248 if compile_prog "-march=z900" ""; then
6249 roms="$roms s390-ccw"
6253 # Probe for the need for relocating the user-only binary.
6254 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6255 textseg_addr=
6256 case "$cpu" in
6257 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6258 # ??? Rationale for choosing this address
6259 textseg_addr=0x60000000
6261 mips)
6262 # A 256M aligned address, high in the address space, with enough
6263 # room for the code_gen_buffer above it before the stack.
6264 textseg_addr=0x60000000
6266 esac
6267 if [ -n "$textseg_addr" ]; then
6268 cat > $TMPC <<EOF
6269 int main(void) { return 0; }
6271 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6272 if ! compile_prog "" "$textseg_ldflags"; then
6273 # In case ld does not support -Ttext-segment, edit the default linker
6274 # script via sed to set the .text start addr. This is needed on FreeBSD
6275 # at least.
6276 if ! $ld --verbose >/dev/null 2>&1; then
6277 error_exit \
6278 "We need to link the QEMU user mode binaries at a" \
6279 "specific text address. Unfortunately your linker" \
6280 "doesn't support either the -Ttext-segment option or" \
6281 "printing the default linker script with --verbose." \
6282 "If you don't want the user mode binaries, pass the" \
6283 "--disable-user option to configure."
6286 $ld --verbose | sed \
6287 -e '1,/==================================================/d' \
6288 -e '/==================================================/,$d' \
6289 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6290 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6291 textseg_ldflags="-Wl,-T../config-host.ld"
6296 # Check that the C++ compiler exists and works with the C compiler.
6297 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6298 if has $cxx; then
6299 cat > $TMPC <<EOF
6300 int c_function(void);
6301 int main(void) { return c_function(); }
6304 compile_object
6306 cat > $TMPCXX <<EOF
6307 extern "C" {
6308 int c_function(void);
6310 int c_function(void) { return 42; }
6313 update_cxxflags
6315 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6316 # C++ compiler $cxx works ok with C compiler $cc
6318 else
6319 echo "C++ compiler $cxx does not work with C compiler $cc"
6320 echo "Disabling C++ specific optional code"
6321 cxx=
6323 else
6324 echo "No C++ compiler available; disabling C++ specific optional code"
6325 cxx=
6328 echo_version() {
6329 if test "$1" = "yes" ; then
6330 echo "($2)"
6334 # prepend pixman and ftd flags after all config tests are done
6335 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6336 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6337 libs_softmmu="$pixman_libs $libs_softmmu"
6339 echo "Install prefix $prefix"
6340 echo "BIOS directory $(eval echo $qemu_datadir)"
6341 echo "firmware path $(eval echo $firmwarepath)"
6342 echo "binary directory $(eval echo $bindir)"
6343 echo "library directory $(eval echo $libdir)"
6344 echo "module directory $(eval echo $qemu_moddir)"
6345 echo "libexec directory $(eval echo $libexecdir)"
6346 echo "include directory $(eval echo $includedir)"
6347 echo "config directory $(eval echo $sysconfdir)"
6348 if test "$mingw32" = "no" ; then
6349 echo "local state directory $(eval echo $local_statedir)"
6350 echo "Manual directory $(eval echo $mandir)"
6351 echo "ELF interp prefix $interp_prefix"
6352 else
6353 echo "local state directory queried at runtime"
6354 echo "Windows SDK $win_sdk"
6356 echo "Source path $source_path"
6357 echo "GIT binary $git"
6358 echo "GIT submodules $git_submodules"
6359 echo "C compiler $cc"
6360 echo "Host C compiler $host_cc"
6361 echo "C++ compiler $cxx"
6362 echo "Objective-C compiler $objcc"
6363 echo "ARFLAGS $ARFLAGS"
6364 echo "CFLAGS $CFLAGS"
6365 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6366 echo "LDFLAGS $LDFLAGS"
6367 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6368 echo "make $make"
6369 echo "install $install"
6370 echo "python $python ($python_version)"
6371 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6372 if test "$slirp" != "no" ; then
6373 echo "smbd $smbd"
6375 echo "module support $modules"
6376 echo "host CPU $cpu"
6377 echo "host big endian $bigendian"
6378 echo "target list $target_list"
6379 echo "gprof enabled $gprof"
6380 echo "sparse enabled $sparse"
6381 echo "strip binaries $strip_opt"
6382 echo "profiler $profiler"
6383 echo "static build $static"
6384 if test "$darwin" = "yes" ; then
6385 echo "Cocoa support $cocoa"
6387 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6388 echo "SDL image support $sdl_image"
6389 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6390 echo "GTK GL support $gtk_gl"
6391 echo "VTE support $vte $(echo_version $vte $vteversion)"
6392 echo "TLS priority $tls_priority"
6393 echo "GNUTLS support $gnutls"
6394 echo "libgcrypt $gcrypt"
6395 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6396 echo "libtasn1 $tasn1"
6397 echo "PAM $auth_pam"
6398 echo "iconv support $iconv"
6399 echo "curses support $curses"
6400 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6401 echo "curl support $curl"
6402 echo "mingw32 support $mingw32"
6403 echo "Audio drivers $audio_drv_list"
6404 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6405 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6406 echo "VirtFS support $virtfs"
6407 echo "Multipath support $mpath"
6408 echo "VNC support $vnc"
6409 if test "$vnc" = "yes" ; then
6410 echo "VNC SASL support $vnc_sasl"
6411 echo "VNC JPEG support $vnc_jpeg"
6412 echo "VNC PNG support $vnc_png"
6414 echo "xen support $xen"
6415 if test "$xen" = "yes" ; then
6416 echo "xen ctrl version $xen_ctrl_version"
6418 echo "brlapi support $brlapi"
6419 echo "bluez support $bluez"
6420 echo "Documentation $docs"
6421 echo "PIE $pie"
6422 echo "vde support $vde"
6423 echo "netmap support $netmap"
6424 echo "Linux AIO support $linux_aio"
6425 echo "ATTR/XATTR support $attr"
6426 echo "Install blobs $blobs"
6427 echo "KVM support $kvm"
6428 echo "HAX support $hax"
6429 echo "HVF support $hvf"
6430 echo "WHPX support $whpx"
6431 echo "TCG support $tcg"
6432 if test "$tcg" = "yes" ; then
6433 echo "TCG debug enabled $debug_tcg"
6434 echo "TCG interpreter $tcg_interpreter"
6436 echo "malloc trim support $malloc_trim"
6437 echo "RDMA support $rdma"
6438 echo "PVRDMA support $pvrdma"
6439 echo "fdt support $fdt"
6440 echo "membarrier $membarrier"
6441 echo "preadv support $preadv"
6442 echo "fdatasync $fdatasync"
6443 echo "madvise $madvise"
6444 echo "posix_madvise $posix_madvise"
6445 echo "posix_memalign $posix_memalign"
6446 echo "libcap-ng support $cap_ng"
6447 echo "vhost-net support $vhost_net"
6448 echo "vhost-crypto support $vhost_crypto"
6449 echo "vhost-scsi support $vhost_scsi"
6450 echo "vhost-vsock support $vhost_vsock"
6451 echo "vhost-user support $vhost_user"
6452 echo "vhost-user-fs support $vhost_user_fs"
6453 echo "Trace backends $trace_backends"
6454 if have_backend "simple"; then
6455 echo "Trace output file $trace_file-<pid>"
6457 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6458 echo "rbd support $rbd"
6459 echo "xfsctl support $xfs"
6460 echo "smartcard support $smartcard"
6461 echo "libusb $libusb"
6462 echo "usb net redir $usb_redir"
6463 echo "OpenGL support $opengl"
6464 echo "OpenGL dmabufs $opengl_dmabuf"
6465 echo "libiscsi support $libiscsi"
6466 echo "libnfs support $libnfs"
6467 echo "build guest agent $guest_agent"
6468 echo "QGA VSS support $guest_agent_with_vss"
6469 echo "QGA w32 disk info $guest_agent_ntddscsi"
6470 echo "QGA MSI support $guest_agent_msi"
6471 echo "seccomp support $seccomp"
6472 echo "coroutine backend $coroutine"
6473 echo "coroutine pool $coroutine_pool"
6474 echo "debug stack usage $debug_stack_usage"
6475 echo "mutex debugging $debug_mutex"
6476 echo "crypto afalg $crypto_afalg"
6477 echo "GlusterFS support $glusterfs"
6478 echo "gcov $gcov_tool"
6479 echo "gcov enabled $gcov"
6480 echo "TPM support $tpm"
6481 echo "libssh support $libssh"
6482 echo "QOM debugging $qom_cast_debug"
6483 echo "Live block migration $live_block_migration"
6484 echo "lzo support $lzo"
6485 echo "snappy support $snappy"
6486 echo "bzip2 support $bzip2"
6487 echo "lzfse support $lzfse"
6488 echo "NUMA host support $numa"
6489 echo "libxml2 $libxml2"
6490 echo "tcmalloc support $tcmalloc"
6491 echo "jemalloc support $jemalloc"
6492 echo "avx2 optimization $avx2_opt"
6493 echo "replication support $replication"
6494 echo "VxHS block device $vxhs"
6495 echo "bochs support $bochs"
6496 echo "cloop support $cloop"
6497 echo "dmg support $dmg"
6498 echo "qcow v1 support $qcow1"
6499 echo "vdi support $vdi"
6500 echo "vvfat support $vvfat"
6501 echo "qed support $qed"
6502 echo "parallels support $parallels"
6503 echo "sheepdog support $sheepdog"
6504 echo "capstone $capstone"
6505 echo "libpmem support $libpmem"
6506 echo "libudev $libudev"
6507 echo "default devices $default_devices"
6508 echo "plugin support $plugins"
6510 if test "$supported_cpu" = "no"; then
6511 echo
6512 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6513 echo
6514 echo "CPU host architecture $cpu support is not currently maintained."
6515 echo "The QEMU project intends to remove support for this host CPU in"
6516 echo "a future release if nobody volunteers to maintain it and to"
6517 echo "provide a build host for our continuous integration setup."
6518 echo "configure has succeeded and you can continue to build, but"
6519 echo "if you care about QEMU on this platform you should contact"
6520 echo "us upstream at qemu-devel@nongnu.org."
6523 if test "$supported_os" = "no"; then
6524 echo
6525 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6526 echo
6527 echo "Host OS $targetos support is not currently maintained."
6528 echo "The QEMU project intends to remove support for this host OS in"
6529 echo "a future release if nobody volunteers to maintain it and to"
6530 echo "provide a build host for our continuous integration setup."
6531 echo "configure has succeeded and you can continue to build, but"
6532 echo "if you care about QEMU on this platform you should contact"
6533 echo "us upstream at qemu-devel@nongnu.org."
6536 # Note that if the Python conditional here evaluates True we will exit
6537 # with status 1 which is a shell 'false' value.
6538 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6539 echo
6540 echo "warning: Python 2 support is deprecated" >&2
6541 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6542 python2="y"
6545 config_host_mak="config-host.mak"
6547 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6549 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6550 echo >> $config_host_mak
6552 echo all: >> $config_host_mak
6553 echo "prefix=$prefix" >> $config_host_mak
6554 echo "bindir=$bindir" >> $config_host_mak
6555 echo "libdir=$libdir" >> $config_host_mak
6556 echo "libexecdir=$libexecdir" >> $config_host_mak
6557 echo "includedir=$includedir" >> $config_host_mak
6558 echo "mandir=$mandir" >> $config_host_mak
6559 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6560 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6561 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6562 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6563 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6564 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6565 if test "$mingw32" = "no" ; then
6566 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6568 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6569 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6570 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6571 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6572 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6573 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6574 echo "GIT=$git" >> $config_host_mak
6575 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6576 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6578 echo "ARCH=$ARCH" >> $config_host_mak
6580 if test "$default_devices" = "yes" ; then
6581 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6582 else
6583 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6585 if test "$debug_tcg" = "yes" ; then
6586 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6588 if test "$strip_opt" = "yes" ; then
6589 echo "STRIP=${strip}" >> $config_host_mak
6591 if test "$bigendian" = "yes" ; then
6592 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6594 if test "$mingw32" = "yes" ; then
6595 echo "CONFIG_WIN32=y" >> $config_host_mak
6596 rc_version=$(cat $source_path/VERSION)
6597 version_major=${rc_version%%.*}
6598 rc_version=${rc_version#*.}
6599 version_minor=${rc_version%%.*}
6600 rc_version=${rc_version#*.}
6601 version_subminor=${rc_version%%.*}
6602 version_micro=0
6603 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6604 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6605 if test "$guest_agent_with_vss" = "yes" ; then
6606 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6607 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6608 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6610 if test "$guest_agent_ntddscsi" = "yes" ; then
6611 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6613 if test "$guest_agent_msi" = "yes"; then
6614 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6615 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6616 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6617 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6618 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6619 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6620 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6622 else
6623 echo "CONFIG_POSIX=y" >> $config_host_mak
6626 if test "$linux" = "yes" ; then
6627 echo "CONFIG_LINUX=y" >> $config_host_mak
6630 if test "$darwin" = "yes" ; then
6631 echo "CONFIG_DARWIN=y" >> $config_host_mak
6634 if test "$solaris" = "yes" ; then
6635 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6637 if test "$haiku" = "yes" ; then
6638 echo "CONFIG_HAIKU=y" >> $config_host_mak
6640 if test "$static" = "yes" ; then
6641 echo "CONFIG_STATIC=y" >> $config_host_mak
6643 if test "$profiler" = "yes" ; then
6644 echo "CONFIG_PROFILER=y" >> $config_host_mak
6646 if test "$want_tools" = "yes" ; then
6647 echo "CONFIG_TOOLS=y" >> $config_host_mak
6649 if test "$slirp" != "no"; then
6650 echo "CONFIG_SLIRP=y" >> $config_host_mak
6651 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6652 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6653 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6655 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6656 echo "config-host.h: slirp/all" >> $config_host_mak
6658 if test "$vde" = "yes" ; then
6659 echo "CONFIG_VDE=y" >> $config_host_mak
6660 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6662 if test "$netmap" = "yes" ; then
6663 echo "CONFIG_NETMAP=y" >> $config_host_mak
6665 if test "$l2tpv3" = "yes" ; then
6666 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6668 if test "$cap_ng" = "yes" ; then
6669 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6671 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6672 for drv in $audio_drv_list; do
6673 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6674 case "$drv" in
6675 alsa | oss | pa | sdl)
6676 echo "$def=m" >> $config_host_mak ;;
6678 echo "$def=y" >> $config_host_mak ;;
6679 esac
6680 done
6681 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6682 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6683 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6684 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6685 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6686 if test "$audio_win_int" = "yes" ; then
6687 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6689 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6690 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6691 if test "$vnc" = "yes" ; then
6692 echo "CONFIG_VNC=y" >> $config_host_mak
6694 if test "$vnc_sasl" = "yes" ; then
6695 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6697 if test "$vnc_jpeg" = "yes" ; then
6698 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6700 if test "$vnc_png" = "yes" ; then
6701 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6703 if test "$xkbcommon" = "yes" ; then
6704 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6705 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6707 if test "$xfs" = "yes" ; then
6708 echo "CONFIG_XFS=y" >> $config_host_mak
6710 qemu_version=$(head $source_path/VERSION)
6711 echo "VERSION=$qemu_version" >>$config_host_mak
6712 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6713 echo "SRC_PATH=$source_path" >> $config_host_mak
6714 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6715 if [ "$docs" = "yes" ] ; then
6716 echo "BUILD_DOCS=yes" >> $config_host_mak
6718 if test "$modules" = "yes"; then
6719 # $shacmd can generate a hash started with digit, which the compiler doesn't
6720 # like as an symbol. So prefix it with an underscore
6721 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6722 echo "CONFIG_MODULES=y" >> $config_host_mak
6724 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6725 echo "CONFIG_X11=y" >> $config_host_mak
6726 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6727 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6729 if test "$sdl" = "yes" ; then
6730 echo "CONFIG_SDL=m" >> $config_host_mak
6731 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6732 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6733 if test "$sdl_image" = "yes" ; then
6734 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6737 if test "$cocoa" = "yes" ; then
6738 echo "CONFIG_COCOA=y" >> $config_host_mak
6740 if test "$iconv" = "yes" ; then
6741 echo "CONFIG_ICONV=y" >> $config_host_mak
6742 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6743 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6745 if test "$curses" = "yes" ; then
6746 echo "CONFIG_CURSES=m" >> $config_host_mak
6747 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6748 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6750 if test "$pipe2" = "yes" ; then
6751 echo "CONFIG_PIPE2=y" >> $config_host_mak
6753 if test "$accept4" = "yes" ; then
6754 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6756 if test "$splice" = "yes" ; then
6757 echo "CONFIG_SPLICE=y" >> $config_host_mak
6759 if test "$eventfd" = "yes" ; then
6760 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6762 if test "$memfd" = "yes" ; then
6763 echo "CONFIG_MEMFD=y" >> $config_host_mak
6765 if test "$have_usbfs" = "yes" ; then
6766 echo "CONFIG_USBFS=y" >> $config_host_mak
6768 if test "$fallocate" = "yes" ; then
6769 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6771 if test "$fallocate_punch_hole" = "yes" ; then
6772 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6774 if test "$fallocate_zero_range" = "yes" ; then
6775 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6777 if test "$posix_fallocate" = "yes" ; then
6778 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6780 if test "$sync_file_range" = "yes" ; then
6781 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6783 if test "$fiemap" = "yes" ; then
6784 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6786 if test "$dup3" = "yes" ; then
6787 echo "CONFIG_DUP3=y" >> $config_host_mak
6789 if test "$ppoll" = "yes" ; then
6790 echo "CONFIG_PPOLL=y" >> $config_host_mak
6792 if test "$prctl_pr_set_timerslack" = "yes" ; then
6793 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6795 if test "$epoll" = "yes" ; then
6796 echo "CONFIG_EPOLL=y" >> $config_host_mak
6798 if test "$epoll_create1" = "yes" ; then
6799 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6801 if test "$sendfile" = "yes" ; then
6802 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6804 if test "$timerfd" = "yes" ; then
6805 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6807 if test "$setns" = "yes" ; then
6808 echo "CONFIG_SETNS=y" >> $config_host_mak
6810 if test "$clock_adjtime" = "yes" ; then
6811 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6813 if test "$syncfs" = "yes" ; then
6814 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6816 if test "$inotify" = "yes" ; then
6817 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6819 if test "$inotify1" = "yes" ; then
6820 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6822 if test "$sem_timedwait" = "yes" ; then
6823 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6825 if test "$strchrnul" = "yes" ; then
6826 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6828 if test "$byteswap_h" = "yes" ; then
6829 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6831 if test "$bswap_h" = "yes" ; then
6832 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6834 if test "$curl" = "yes" ; then
6835 echo "CONFIG_CURL=m" >> $config_host_mak
6836 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6837 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6839 if test "$brlapi" = "yes" ; then
6840 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6841 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6843 if test "$bluez" = "yes" ; then
6844 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6845 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6847 if test "$gtk" = "yes" ; then
6848 echo "CONFIG_GTK=m" >> $config_host_mak
6849 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6850 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6851 if test "$gtk_gl" = "yes" ; then
6852 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6855 if test "$gio" = "yes" ; then
6856 echo "CONFIG_GIO=y" >> $config_host_mak
6857 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6858 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6860 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6861 if test "$gnutls" = "yes" ; then
6862 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6864 if test "$gcrypt" = "yes" ; then
6865 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6866 if test "$gcrypt_hmac" = "yes" ; then
6867 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6870 if test "$nettle" = "yes" ; then
6871 echo "CONFIG_NETTLE=y" >> $config_host_mak
6872 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6874 if test "$tasn1" = "yes" ; then
6875 echo "CONFIG_TASN1=y" >> $config_host_mak
6877 if test "$auth_pam" = "yes" ; then
6878 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6880 if test "$have_ifaddrs_h" = "yes" ; then
6881 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6883 if test "$have_broken_size_max" = "yes" ; then
6884 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6887 # Work around a system header bug with some kernel/XFS header
6888 # versions where they both try to define 'struct fsxattr':
6889 # xfs headers will not try to redefine structs from linux headers
6890 # if this macro is set.
6891 if test "$have_fsxattr" = "yes" ; then
6892 echo "HAVE_FSXATTR=y" >> $config_host_mak
6894 if test "$have_copy_file_range" = "yes" ; then
6895 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6897 if test "$vte" = "yes" ; then
6898 echo "CONFIG_VTE=y" >> $config_host_mak
6899 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6900 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6902 if test "$virglrenderer" = "yes" ; then
6903 echo "CONFIG_VIRGL=y" >> $config_host_mak
6904 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6905 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6907 if test "$xen" = "yes" ; then
6908 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6909 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6911 if test "$linux_aio" = "yes" ; then
6912 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6914 if test "$attr" = "yes" ; then
6915 echo "CONFIG_ATTR=y" >> $config_host_mak
6917 if test "$libattr" = "yes" ; then
6918 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6920 if test "$virtfs" = "yes" ; then
6921 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6923 if test "$mpath" = "yes" ; then
6924 echo "CONFIG_MPATH=y" >> $config_host_mak
6925 if test "$mpathpersist_new_api" = "yes"; then
6926 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6929 if test "$vhost_scsi" = "yes" ; then
6930 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6932 if test "$vhost_net" = "yes" ; then
6933 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6935 if test "$vhost_net_user" = "yes" ; then
6936 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6938 if test "$vhost_crypto" = "yes" ; then
6939 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6941 if test "$vhost_vsock" = "yes" ; then
6942 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6944 if test "$vhost_kernel" = "yes" ; then
6945 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6947 if test "$vhost_user" = "yes" ; then
6948 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6950 if test "$vhost_user_fs" = "yes" ; then
6951 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6953 if test "$blobs" = "yes" ; then
6954 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6956 if test "$iovec" = "yes" ; then
6957 echo "CONFIG_IOVEC=y" >> $config_host_mak
6959 if test "$preadv" = "yes" ; then
6960 echo "CONFIG_PREADV=y" >> $config_host_mak
6962 if test "$fdt" != "no" ; then
6963 echo "CONFIG_FDT=y" >> $config_host_mak
6965 if test "$membarrier" = "yes" ; then
6966 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6968 if test "$signalfd" = "yes" ; then
6969 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6971 if test "$optreset" = "yes" ; then
6972 echo "HAVE_OPTRESET=y" >> $config_host_mak
6974 if test "$tcg" = "yes"; then
6975 echo "CONFIG_TCG=y" >> $config_host_mak
6976 if test "$tcg_interpreter" = "yes" ; then
6977 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6980 if test "$fdatasync" = "yes" ; then
6981 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6983 if test "$madvise" = "yes" ; then
6984 echo "CONFIG_MADVISE=y" >> $config_host_mak
6986 if test "$posix_madvise" = "yes" ; then
6987 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6989 if test "$posix_memalign" = "yes" ; then
6990 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6993 if test "$spice" = "yes" ; then
6994 echo "CONFIG_SPICE=y" >> $config_host_mak
6997 if test "$smartcard" = "yes" ; then
6998 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6999 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7000 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7003 if test "$libusb" = "yes" ; then
7004 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7005 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7006 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7009 if test "$usb_redir" = "yes" ; then
7010 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7011 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7012 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7015 if test "$opengl" = "yes" ; then
7016 echo "CONFIG_OPENGL=y" >> $config_host_mak
7017 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7018 if test "$opengl_dmabuf" = "yes" ; then
7019 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7023 if test "$gbm" = "yes" ; then
7024 echo "CONFIG_GBM=y" >> $config_host_mak
7025 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7026 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7030 if test "$malloc_trim" = "yes" ; then
7031 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7034 if test "$avx2_opt" = "yes" ; then
7035 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7038 if test "$lzo" = "yes" ; then
7039 echo "CONFIG_LZO=y" >> $config_host_mak
7042 if test "$snappy" = "yes" ; then
7043 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7046 if test "$bzip2" = "yes" ; then
7047 echo "CONFIG_BZIP2=y" >> $config_host_mak
7048 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7051 if test "$lzfse" = "yes" ; then
7052 echo "CONFIG_LZFSE=y" >> $config_host_mak
7053 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7056 if test "$libiscsi" = "yes" ; then
7057 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7058 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7059 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7062 if test "$libnfs" = "yes" ; then
7063 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7064 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7067 if test "$seccomp" = "yes"; then
7068 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7069 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7070 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7073 # XXX: suppress that
7074 if [ "$bsd" = "yes" ] ; then
7075 echo "CONFIG_BSD=y" >> $config_host_mak
7078 if test "$localtime_r" = "yes" ; then
7079 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7081 if test "$qom_cast_debug" = "yes" ; then
7082 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7084 if test "$rbd" = "yes" ; then
7085 echo "CONFIG_RBD=m" >> $config_host_mak
7086 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7087 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7090 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7091 if test "$coroutine_pool" = "yes" ; then
7092 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7093 else
7094 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7097 if test "$debug_stack_usage" = "yes" ; then
7098 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7101 if test "$crypto_afalg" = "yes" ; then
7102 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7105 if test "$open_by_handle_at" = "yes" ; then
7106 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7109 if test "$linux_magic_h" = "yes" ; then
7110 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7113 if test "$pragma_diagnostic_available" = "yes" ; then
7114 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7117 if test "$valgrind_h" = "yes" ; then
7118 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7121 if test "$have_asan_iface_fiber" = "yes" ; then
7122 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7125 if test "$has_environ" = "yes" ; then
7126 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7129 if test "$cpuid_h" = "yes" ; then
7130 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7133 if test "$int128" = "yes" ; then
7134 echo "CONFIG_INT128=y" >> $config_host_mak
7137 if test "$atomic128" = "yes" ; then
7138 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7141 if test "$cmpxchg128" = "yes" ; then
7142 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7145 if test "$atomic64" = "yes" ; then
7146 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7149 if test "$vector16" = "yes" ; then
7150 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7153 if test "$getauxval" = "yes" ; then
7154 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7157 if test "$glusterfs" = "yes" ; then
7158 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7159 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7160 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7163 if test "$glusterfs_xlator_opt" = "yes" ; then
7164 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7167 if test "$glusterfs_discard" = "yes" ; then
7168 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7171 if test "$glusterfs_fallocate" = "yes" ; then
7172 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7175 if test "$glusterfs_zerofill" = "yes" ; then
7176 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7179 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7180 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7183 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7184 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7187 if test "$libssh" = "yes" ; then
7188 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7189 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7190 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7193 if test "$live_block_migration" = "yes" ; then
7194 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7197 if test "$tpm" = "yes"; then
7198 echo 'CONFIG_TPM=y' >> $config_host_mak
7201 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7202 if have_backend "nop"; then
7203 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7205 if have_backend "simple"; then
7206 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7207 # Set the appropriate trace file.
7208 trace_file="\"$trace_file-\" FMT_pid"
7210 if have_backend "log"; then
7211 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7213 if have_backend "ust"; then
7214 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7216 if have_backend "dtrace"; then
7217 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7218 if test "$trace_backend_stap" = "yes" ; then
7219 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7222 if have_backend "ftrace"; then
7223 if test "$linux" = "yes" ; then
7224 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7225 else
7226 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7229 if have_backend "syslog"; then
7230 if test "$posix_syslog" = "yes" ; then
7231 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7232 else
7233 feature_not_found "syslog(trace backend)" "syslog not available"
7236 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7238 if test "$rdma" = "yes" ; then
7239 echo "CONFIG_RDMA=y" >> $config_host_mak
7240 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7243 if test "$pvrdma" = "yes" ; then
7244 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7247 if test "$have_rtnetlink" = "yes" ; then
7248 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7251 if test "$libxml2" = "yes" ; then
7252 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7253 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7254 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7257 if test "$replication" = "yes" ; then
7258 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7261 if test "$have_af_vsock" = "yes" ; then
7262 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7265 if test "$have_sysmacros" = "yes" ; then
7266 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7269 if test "$have_static_assert" = "yes" ; then
7270 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7273 if test "$have_utmpx" = "yes" ; then
7274 echo "HAVE_UTMPX=y" >> $config_host_mak
7276 if test "$have_getrandom" = "yes" ; then
7277 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7279 if test "$ivshmem" = "yes" ; then
7280 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7282 if test "$capstone" != "no" ; then
7283 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7285 if test "$debug_mutex" = "yes" ; then
7286 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7289 # Hold two types of flag:
7290 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7291 # a thread we have a handle to
7292 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7293 # platform
7294 if test "$pthread_setname_np_w_tid" = "yes" ; then
7295 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7296 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7297 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7298 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7299 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7302 if test "$vxhs" = "yes" ; then
7303 echo "CONFIG_VXHS=y" >> $config_host_mak
7304 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7307 if test "$libpmem" = "yes" ; then
7308 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7311 if test "$bochs" = "yes" ; then
7312 echo "CONFIG_BOCHS=y" >> $config_host_mak
7314 if test "$cloop" = "yes" ; then
7315 echo "CONFIG_CLOOP=y" >> $config_host_mak
7317 if test "$dmg" = "yes" ; then
7318 echo "CONFIG_DMG=y" >> $config_host_mak
7320 if test "$qcow1" = "yes" ; then
7321 echo "CONFIG_QCOW1=y" >> $config_host_mak
7323 if test "$vdi" = "yes" ; then
7324 echo "CONFIG_VDI=y" >> $config_host_mak
7326 if test "$vvfat" = "yes" ; then
7327 echo "CONFIG_VVFAT=y" >> $config_host_mak
7329 if test "$qed" = "yes" ; then
7330 echo "CONFIG_QED=y" >> $config_host_mak
7332 if test "$parallels" = "yes" ; then
7333 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7335 if test "$sheepdog" = "yes" ; then
7336 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7339 if test "$plugins" = "yes" ; then
7340 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7341 LIBS="-ldl $LIBS"
7342 # Copy the export object list to the build dir
7343 if test "$ld_dynamic_list" = "yes" ; then
7344 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7345 ld_symbols=qemu-plugins-ld.symbols
7346 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7347 elif test "$ld_exported_symbols_list" = "yes" ; then
7348 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7349 ld64_symbols=qemu-plugins-ld64.symbols
7350 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7351 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7352 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7353 else
7354 error_exit \
7355 "If \$plugins=yes, either \$ld_dynamic_list or " \
7356 "\$ld_exported_symbols_list should have been set to 'yes'."
7360 if test "$tcg_interpreter" = "yes"; then
7361 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7362 elif test "$ARCH" = "sparc64" ; then
7363 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7364 elif test "$ARCH" = "s390x" ; then
7365 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7366 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7367 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7368 elif test "$ARCH" = "ppc64" ; then
7369 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7370 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7371 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7372 else
7373 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7375 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7377 echo "TOOLS=$tools" >> $config_host_mak
7378 echo "ROMS=$roms" >> $config_host_mak
7379 echo "MAKE=$make" >> $config_host_mak
7380 echo "INSTALL=$install" >> $config_host_mak
7381 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7382 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7383 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7384 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7385 echo "PYTHON=$python" >> $config_host_mak
7386 echo "PYTHON2=$python2" >> $config_host_mak
7387 echo "CC=$cc" >> $config_host_mak
7388 if $iasl -h > /dev/null 2>&1; then
7389 echo "IASL=$iasl" >> $config_host_mak
7391 echo "HOST_CC=$host_cc" >> $config_host_mak
7392 echo "CXX=$cxx" >> $config_host_mak
7393 echo "OBJCC=$objcc" >> $config_host_mak
7394 echo "AR=$ar" >> $config_host_mak
7395 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7396 echo "AS=$as" >> $config_host_mak
7397 echo "CCAS=$ccas" >> $config_host_mak
7398 echo "CPP=$cpp" >> $config_host_mak
7399 echo "OBJCOPY=$objcopy" >> $config_host_mak
7400 echo "LD=$ld" >> $config_host_mak
7401 echo "RANLIB=$ranlib" >> $config_host_mak
7402 echo "NM=$nm" >> $config_host_mak
7403 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7404 echo "WINDRES=$windres" >> $config_host_mak
7405 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7406 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7407 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7408 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7409 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7410 if test "$sparse" = "yes" ; then
7411 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7412 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7413 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7414 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7415 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7417 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7418 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7419 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7420 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7421 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7422 echo "LIBS+=$LIBS" >> $config_host_mak
7423 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7424 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7425 echo "EXESUF=$EXESUF" >> $config_host_mak
7426 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7427 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7428 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7429 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7430 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7431 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7432 if test "$gcov" = "yes" ; then
7433 echo "CONFIG_GCOV=y" >> $config_host_mak
7434 echo "GCOV=$gcov_tool" >> $config_host_mak
7437 if test "$libudev" != "no"; then
7438 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7439 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7442 # use included Linux headers
7443 if test "$linux" = "yes" ; then
7444 mkdir -p linux-headers
7445 case "$cpu" in
7446 i386|x86_64|x32)
7447 linux_arch=x86
7449 ppc|ppc64|ppc64le)
7450 linux_arch=powerpc
7452 s390x)
7453 linux_arch=s390
7455 aarch64)
7456 linux_arch=arm64
7458 mips64)
7459 linux_arch=mips
7462 # For most CPUs the kernel architecture name and QEMU CPU name match.
7463 linux_arch="$cpu"
7465 esac
7466 # For non-KVM architectures we will not have asm headers
7467 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7468 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7472 for target in $target_list; do
7473 target_dir="$target"
7474 config_target_mak=$target_dir/config-target.mak
7475 target_name=$(echo $target | cut -d '-' -f 1)
7476 target_aligned_only="no"
7477 case "$target_name" in
7478 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7479 target_aligned_only="yes"
7481 esac
7482 target_bigendian="no"
7483 case "$target_name" in
7484 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7485 target_bigendian="yes"
7487 esac
7488 target_softmmu="no"
7489 target_user_only="no"
7490 target_linux_user="no"
7491 target_bsd_user="no"
7492 case "$target" in
7493 ${target_name}-softmmu)
7494 target_softmmu="yes"
7496 ${target_name}-linux-user)
7497 target_user_only="yes"
7498 target_linux_user="yes"
7500 ${target_name}-bsd-user)
7501 target_user_only="yes"
7502 target_bsd_user="yes"
7505 error_exit "Target '$target' not recognised"
7506 exit 1
7508 esac
7510 mkdir -p $target_dir
7511 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7513 bflt="no"
7514 mttcg="no"
7515 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7516 gdb_xml_files=""
7518 TARGET_ARCH="$target_name"
7519 TARGET_BASE_ARCH=""
7520 TARGET_ABI_DIR=""
7522 case "$target_name" in
7523 i386)
7524 mttcg="yes"
7525 gdb_xml_files="i386-32bit.xml"
7527 x86_64)
7528 TARGET_BASE_ARCH=i386
7529 mttcg="yes"
7530 gdb_xml_files="i386-64bit.xml"
7532 alpha)
7533 mttcg="yes"
7535 arm|armeb)
7536 TARGET_ARCH=arm
7537 bflt="yes"
7538 mttcg="yes"
7539 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7541 aarch64|aarch64_be)
7542 TARGET_ARCH=aarch64
7543 TARGET_BASE_ARCH=arm
7544 bflt="yes"
7545 mttcg="yes"
7546 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7548 cris)
7550 hppa)
7551 mttcg="yes"
7553 lm32)
7555 m68k)
7556 bflt="yes"
7557 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7559 microblaze|microblazeel)
7560 TARGET_ARCH=microblaze
7561 bflt="yes"
7562 echo "TARGET_ABI32=y" >> $config_target_mak
7564 mips|mipsel)
7565 mttcg="yes"
7566 TARGET_ARCH=mips
7567 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7569 mipsn32|mipsn32el)
7570 mttcg="yes"
7571 TARGET_ARCH=mips64
7572 TARGET_BASE_ARCH=mips
7573 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7574 echo "TARGET_ABI32=y" >> $config_target_mak
7576 mips64|mips64el)
7577 mttcg="yes"
7578 TARGET_ARCH=mips64
7579 TARGET_BASE_ARCH=mips
7580 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7582 moxie)
7584 nios2)
7586 or1k)
7587 TARGET_ARCH=openrisc
7588 TARGET_BASE_ARCH=openrisc
7590 ppc)
7591 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7593 ppc64)
7594 TARGET_BASE_ARCH=ppc
7595 TARGET_ABI_DIR=ppc
7596 mttcg=yes
7597 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7599 ppc64le)
7600 TARGET_ARCH=ppc64
7601 TARGET_BASE_ARCH=ppc
7602 TARGET_ABI_DIR=ppc
7603 mttcg=yes
7604 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7606 ppc64abi32)
7607 TARGET_ARCH=ppc64
7608 TARGET_BASE_ARCH=ppc
7609 TARGET_ABI_DIR=ppc
7610 echo "TARGET_ABI32=y" >> $config_target_mak
7611 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7613 riscv32)
7614 TARGET_BASE_ARCH=riscv
7615 TARGET_ABI_DIR=riscv
7616 mttcg=yes
7617 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7619 riscv64)
7620 TARGET_BASE_ARCH=riscv
7621 TARGET_ABI_DIR=riscv
7622 mttcg=yes
7623 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7625 sh4|sh4eb)
7626 TARGET_ARCH=sh4
7627 bflt="yes"
7629 sparc)
7631 sparc64)
7632 TARGET_BASE_ARCH=sparc
7634 sparc32plus)
7635 TARGET_ARCH=sparc64
7636 TARGET_BASE_ARCH=sparc
7637 TARGET_ABI_DIR=sparc
7638 echo "TARGET_ABI32=y" >> $config_target_mak
7640 s390x)
7641 mttcg=yes
7642 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7644 tilegx)
7646 tricore)
7648 unicore32)
7650 xtensa|xtensaeb)
7651 TARGET_ARCH=xtensa
7652 bflt="yes"
7653 mttcg="yes"
7656 error_exit "Unsupported target CPU"
7658 esac
7659 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7660 if [ "$TARGET_BASE_ARCH" = "" ]; then
7661 TARGET_BASE_ARCH=$TARGET_ARCH
7664 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7666 upper() {
7667 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7670 target_arch_name="$(upper $TARGET_ARCH)"
7671 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7672 echo "TARGET_NAME=$target_name" >> $config_target_mak
7673 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7674 if [ "$TARGET_ABI_DIR" = "" ]; then
7675 TARGET_ABI_DIR=$TARGET_ARCH
7677 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7678 if [ "$HOST_VARIANT_DIR" != "" ]; then
7679 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7682 if supported_xen_target $target; then
7683 echo "CONFIG_XEN=y" >> $config_target_mak
7684 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7685 if test "$xen_pci_passthrough" = yes; then
7686 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7688 else
7689 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7691 if supported_kvm_target $target; then
7692 echo "CONFIG_KVM=y" >> $config_target_mak
7693 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7694 else
7695 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7697 if supported_hax_target $target; then
7698 echo "CONFIG_HAX=y" >> $config_target_mak
7700 if supported_hvf_target $target; then
7701 echo "CONFIG_HVF=y" >> $config_target_mak
7703 if supported_whpx_target $target; then
7704 echo "CONFIG_WHPX=y" >> $config_target_mak
7706 if test "$target_aligned_only" = "yes" ; then
7707 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7709 if test "$target_bigendian" = "yes" ; then
7710 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7712 if test "$target_softmmu" = "yes" ; then
7713 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7714 if test "$mttcg" = "yes" ; then
7715 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7718 if test "$target_user_only" = "yes" ; then
7719 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7720 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7722 if test "$target_linux_user" = "yes" ; then
7723 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7725 list=""
7726 if test ! -z "$gdb_xml_files" ; then
7727 for x in $gdb_xml_files; do
7728 list="$list $source_path/gdb-xml/$x"
7729 done
7730 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7733 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7734 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7736 if test "$target_bsd_user" = "yes" ; then
7737 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7741 # generate QEMU_CFLAGS/LDFLAGS for targets
7743 cflags=""
7744 ldflags=""
7746 disas_config() {
7747 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7748 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7751 for i in $ARCH $TARGET_BASE_ARCH ; do
7752 case "$i" in
7753 alpha)
7754 disas_config "ALPHA"
7756 aarch64)
7757 if test -n "${cxx}"; then
7758 disas_config "ARM_A64"
7761 arm)
7762 disas_config "ARM"
7763 if test -n "${cxx}"; then
7764 disas_config "ARM_A64"
7767 cris)
7768 disas_config "CRIS"
7770 hppa)
7771 disas_config "HPPA"
7773 i386|x86_64|x32)
7774 disas_config "I386"
7776 lm32)
7777 disas_config "LM32"
7779 m68k)
7780 disas_config "M68K"
7782 microblaze*)
7783 disas_config "MICROBLAZE"
7785 mips*)
7786 disas_config "MIPS"
7787 if test -n "${cxx}"; then
7788 disas_config "NANOMIPS"
7791 moxie*)
7792 disas_config "MOXIE"
7794 nios2)
7795 disas_config "NIOS2"
7797 or1k)
7798 disas_config "OPENRISC"
7800 ppc*)
7801 disas_config "PPC"
7803 riscv*)
7804 disas_config "RISCV"
7806 s390*)
7807 disas_config "S390"
7809 sh4)
7810 disas_config "SH4"
7812 sparc*)
7813 disas_config "SPARC"
7815 xtensa*)
7816 disas_config "XTENSA"
7818 esac
7819 done
7820 if test "$tcg_interpreter" = "yes" ; then
7821 disas_config "TCI"
7824 case "$ARCH" in
7825 alpha)
7826 # Ensure there's only a single GP
7827 cflags="-msmall-data $cflags"
7829 esac
7831 if test "$gprof" = "yes" ; then
7832 echo "TARGET_GPROF=y" >> $config_target_mak
7833 if test "$target_linux_user" = "yes" ; then
7834 cflags="-p $cflags"
7835 ldflags="-p $ldflags"
7837 if test "$target_softmmu" = "yes" ; then
7838 ldflags="-p $ldflags"
7839 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7843 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7844 ldflags="$ldflags $textseg_ldflags"
7847 # Newer kernels on s390 check for an S390_PGSTE program header and
7848 # enable the pgste page table extensions in that case. This makes
7849 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7850 # header if
7851 # - we build on s390x
7852 # - we build the system emulation for s390x (qemu-system-s390x)
7853 # - KVM is enabled
7854 # - the linker supports --s390-pgste
7855 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7856 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7857 if ld_has --s390-pgste ; then
7858 ldflags="-Wl,--s390-pgste $ldflags"
7862 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7863 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7865 done # for target in $targets
7867 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7868 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7870 if [ "$fdt" = "git" ]; then
7871 echo "config-host.h: dtc/all" >> $config_host_mak
7873 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7874 echo "config-host.h: capstone/all" >> $config_host_mak
7876 if test -n "$LIBCAPSTONE"; then
7877 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7880 if test "$numa" = "yes"; then
7881 echo "CONFIG_NUMA=y" >> $config_host_mak
7884 if test "$ccache_cpp2" = "yes"; then
7885 echo "export CCACHE_CPP2=y" >> $config_host_mak
7888 # If we're using a separate build tree, set it up now.
7889 # DIRS are directories which we simply mkdir in the build tree;
7890 # LINKS are things to symlink back into the source tree
7891 # (these can be both files and directories).
7892 # Caution: do not add files or directories here using wildcards. This
7893 # will result in problems later if a new file matching the wildcard is
7894 # added to the source tree -- nothing will cause configure to be rerun
7895 # so the build tree will be missing the link back to the new file, and
7896 # tests might fail. Prefer to keep the relevant files in their own
7897 # directory and symlink the directory instead.
7898 DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
7899 DIRS="$DIRS tests/fp tests/qgraph"
7900 DIRS="$DIRS docs docs/interop fsdev scsi"
7901 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
7902 DIRS="$DIRS roms/seabios roms/vgabios"
7903 LINKS="Makefile"
7904 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7905 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
7906 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7907 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7908 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7909 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7910 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7911 LINKS="$LINKS tests/acceptance tests/data"
7912 LINKS="$LINKS tests/qemu-iotests/check"
7913 LINKS="$LINKS python"
7914 for bios_file in \
7915 $source_path/pc-bios/*.bin \
7916 $source_path/pc-bios/*.lid \
7917 $source_path/pc-bios/*.rom \
7918 $source_path/pc-bios/*.dtb \
7919 $source_path/pc-bios/*.img \
7920 $source_path/pc-bios/openbios-* \
7921 $source_path/pc-bios/u-boot.* \
7922 $source_path/pc-bios/edk2-*.fd.bz2 \
7923 $source_path/pc-bios/palcode-*
7925 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7926 done
7927 mkdir -p $DIRS
7928 for f in $LINKS ; do
7929 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7930 symlink "$source_path/$f" "$f"
7932 done
7934 (for i in $cross_cc_vars; do
7935 export $i
7936 done
7937 export target_list source_path
7938 $source_path/tests/tcg/configure.sh)
7940 # temporary config to build submodules
7941 for rom in seabios vgabios ; do
7942 config_mak=roms/$rom/config.mak
7943 echo "# Automatically generated by configure - do not modify" > $config_mak
7944 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7945 echo "AS=$as" >> $config_mak
7946 echo "CCAS=$ccas" >> $config_mak
7947 echo "CC=$cc" >> $config_mak
7948 echo "BCC=bcc" >> $config_mak
7949 echo "CPP=$cpp" >> $config_mak
7950 echo "OBJCOPY=objcopy" >> $config_mak
7951 echo "IASL=$iasl" >> $config_mak
7952 echo "LD=$ld" >> $config_mak
7953 echo "RANLIB=$ranlib" >> $config_mak
7954 done
7956 # set up qemu-iotests in this build directory
7957 iotests_common_env="tests/qemu-iotests/common.env"
7959 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7960 echo >> "$iotests_common_env"
7961 echo "export PYTHON='$python'" >> "$iotests_common_env"
7963 # Save the configure command line for later reuse.
7964 cat <<EOD >config.status
7965 #!/bin/sh
7966 # Generated by configure.
7967 # Run this file to recreate the current configuration.
7968 # Compiler output produced by configure, useful for debugging
7969 # configure, is in config.log if it exists.
7972 preserve_env() {
7973 envname=$1
7975 eval envval=\$$envname
7977 if test -n "$envval"
7978 then
7979 echo "$envname='$envval'" >> config.status
7980 echo "export $envname" >> config.status
7981 else
7982 echo "unset $envname" >> config.status
7986 # Preserve various env variables that influence what
7987 # features/build target configure will detect
7988 preserve_env AR
7989 preserve_env AS
7990 preserve_env CC
7991 preserve_env CPP
7992 preserve_env CXX
7993 preserve_env INSTALL
7994 preserve_env LD
7995 preserve_env LD_LIBRARY_PATH
7996 preserve_env LIBTOOL
7997 preserve_env MAKE
7998 preserve_env NM
7999 preserve_env OBJCOPY
8000 preserve_env PATH
8001 preserve_env PKG_CONFIG
8002 preserve_env PKG_CONFIG_LIBDIR
8003 preserve_env PKG_CONFIG_PATH
8004 preserve_env PYTHON
8005 preserve_env SDL2_CONFIG
8006 preserve_env SMBD
8007 preserve_env STRIP
8008 preserve_env WINDRES
8010 printf "exec" >>config.status
8011 printf " '%s'" "$0" "$@" >>config.status
8012 echo ' "$@"' >>config.status
8013 chmod +x config.status
8015 rm -r "$TMPDIR1"