Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2020-07-28' into staging
[qemu/ar7.git] / configure
blob2acc4d1465f8165ae3a238784231a1c50d3b0d4f
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 # Append $2 to the variable named $1, with space separation
101 add_to() {
102 eval $1=\${$1:+\"\$$1 \"}\$2
105 update_cxxflags() {
106 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
107 # options which some versions of GCC's C++ compiler complain about
108 # because they only make sense for C programs.
109 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
111 for arg in $QEMU_CFLAGS; do
112 case $arg in
113 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
114 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
116 -std=gnu99)
117 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
120 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
122 esac
123 done
126 compile_object() {
127 local_cflags="$1"
128 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
131 compile_prog() {
132 local_cflags="$1"
133 local_ldflags="$2"
134 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
137 # symbolically link $1 to $2. Portable version of "ln -sf".
138 symlink() {
139 rm -rf "$2"
140 mkdir -p "$(dirname "$2")"
141 ln -s "$1" "$2"
144 # check whether a command is available to this shell (may be either an
145 # executable or a builtin)
146 has() {
147 type "$1" >/dev/null 2>&1
150 # search for an executable in PATH
151 path_of() {
152 local_command="$1"
153 local_ifs="$IFS"
154 local_dir=""
156 # pathname has a dir component?
157 if [ "${local_command#*/}" != "$local_command" ]; then
158 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
159 echo "$local_command"
160 return 0
163 if [ -z "$local_command" ]; then
164 return 1
167 IFS=:
168 for local_dir in $PATH; do
169 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
170 echo "$local_dir/$local_command"
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 0
174 done
175 # not found
176 IFS="${local_ifs:-$(printf ' \t\n')}"
177 return 1
180 have_backend () {
181 echo "$trace_backends" | grep "$1" >/dev/null
184 glob() {
185 eval test -z '"${1#'"$2"'}"'
188 supported_hax_target() {
189 test "$hax" = "yes" || return 1
190 glob "$1" "*-softmmu" || return 1
191 case "${1%-softmmu}" in
192 i386|x86_64)
193 return 0
195 esac
196 return 1
199 supported_kvm_target() {
200 test "$kvm" = "yes" || return 1
201 glob "$1" "*-softmmu" || return 1
202 case "${1%-softmmu}:$cpu" in
203 arm:arm | aarch64:aarch64 | \
204 i386:i386 | i386:x86_64 | i386:x32 | \
205 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
206 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
207 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
208 s390x:s390x)
209 return 0
211 esac
212 return 1
215 supported_xen_target() {
216 test "$xen" = "yes" || return 1
217 glob "$1" "*-softmmu" || return 1
218 # Only i386 and x86_64 provide the xenpv machine.
219 case "${1%-softmmu}" in
220 i386|x86_64)
221 return 0
223 esac
224 return 1
227 supported_hvf_target() {
228 test "$hvf" = "yes" || return 1
229 glob "$1" "*-softmmu" || return 1
230 case "${1%-softmmu}" in
231 x86_64)
232 return 0
234 esac
235 return 1
238 supported_whpx_target() {
239 test "$whpx" = "yes" || return 1
240 glob "$1" "*-softmmu" || return 1
241 case "${1%-softmmu}" in
242 i386|x86_64)
243 return 0
245 esac
246 return 1
249 supported_target() {
250 case "$1" in
251 *-softmmu)
253 *-linux-user)
254 if test "$linux" != "yes"; then
255 print_error "Target '$target' is only available on a Linux host"
256 return 1
259 *-bsd-user)
260 if test "$bsd" != "yes"; then
261 print_error "Target '$target' is only available on a BSD host"
262 return 1
266 print_error "Invalid target name '$target'"
267 return 1
269 esac
270 test "$tcg" = "yes" && return 0
271 supported_kvm_target "$1" && return 0
272 supported_xen_target "$1" && return 0
273 supported_hax_target "$1" && return 0
274 supported_hvf_target "$1" && return 0
275 supported_whpx_target "$1" && return 0
276 print_error "TCG disabled, but hardware accelerator not available for '$target'"
277 return 1
281 ld_has() {
282 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
285 # make source path absolute
286 source_path=$(cd "$(dirname -- "$0")"; pwd)
288 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
289 then
290 error_exit "main directory cannot contain spaces nor colons"
293 # default parameters
294 cpu=""
295 iasl="iasl"
296 interp_prefix="/usr/gnemul/qemu-%M"
297 static="no"
298 cross_prefix=""
299 audio_drv_list=""
300 block_drv_rw_whitelist=""
301 block_drv_ro_whitelist=""
302 host_cc="cc"
303 libs_cpu=""
304 libs_softmmu=""
305 libs_tools=""
306 audio_win_int=""
307 libs_qga=""
308 debug_info="yes"
309 stack_protector=""
310 safe_stack=""
311 use_containers="yes"
312 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
314 if test -e "$source_path/.git"
315 then
316 git_update=yes
317 git_submodules="ui/keycodemapdb"
318 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
319 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
320 else
321 git_update=no
322 git_submodules=""
324 if ! test -f "$source_path/ui/keycodemapdb/README"
325 then
326 echo
327 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
328 echo
329 echo "This is not a GIT checkout but module content appears to"
330 echo "be missing. Do not use 'git archive' or GitHub download links"
331 echo "to acquire QEMU source archives. Non-GIT builds are only"
332 echo "supported with source archives linked from:"
333 echo
334 echo " https://www.qemu.org/download/#source"
335 echo
336 echo "Developers working with GIT can use scripts/archive-source.sh"
337 echo "if they need to create valid source archives."
338 echo
339 exit 1
342 git="git"
344 # Don't accept a target_list environment variable.
345 unset target_list
346 unset target_list_exclude
348 # Default value for a variable defining feature "foo".
349 # * foo="no" feature will only be used if --enable-foo arg is given
350 # * foo="" feature will be searched for, and if found, will be used
351 # unless --disable-foo is given
352 # * foo="yes" this value will only be set by --enable-foo flag.
353 # feature will searched for,
354 # if not found, configure exits with error
356 # Always add --enable-foo and --disable-foo command line args.
357 # Distributions want to ensure that several features are compiled in, and it
358 # is impossible without a --enable-foo that exits if a feature is not found.
360 brlapi=""
361 curl=""
362 curses=""
363 docs=""
364 fdt=""
365 netmap="no"
366 sdl=""
367 sdl_image=""
368 virtfs=""
369 mpath=""
370 vnc="yes"
371 sparse="no"
372 vde=""
373 vnc_sasl=""
374 vnc_jpeg=""
375 vnc_png=""
376 xkbcommon=""
377 xen=""
378 xen_ctrl_version=""
379 xen_pci_passthrough=""
380 linux_aio=""
381 linux_io_uring=""
382 cap_ng=""
383 attr=""
384 libattr=""
385 xfs=""
386 tcg="yes"
387 membarrier=""
388 vhost_net=""
389 vhost_crypto=""
390 vhost_scsi=""
391 vhost_vsock=""
392 vhost_user=""
393 vhost_user_fs=""
394 kvm="no"
395 hax="no"
396 hvf="no"
397 whpx="no"
398 rdma=""
399 pvrdma=""
400 gprof="no"
401 debug_tcg="no"
402 debug="no"
403 sanitizers="no"
404 tsan="no"
405 fortify_source=""
406 strip_opt="yes"
407 tcg_interpreter="no"
408 bigendian="no"
409 mingw32="no"
410 gcov="no"
411 gcov_tool="gcov"
412 EXESUF=""
413 DSOSUF=".so"
414 LDFLAGS_SHARED="-shared"
415 modules="no"
416 module_upgrades="no"
417 prefix="/usr/local"
418 mandir="\${prefix}/share/man"
419 datadir="\${prefix}/share"
420 firmwarepath="\${prefix}/share/qemu-firmware"
421 efi_aarch64=""
422 qemu_docdir="\${prefix}/share/doc/qemu"
423 bindir="\${prefix}/bin"
424 libdir="\${prefix}/lib"
425 libexecdir="\${prefix}/libexec"
426 includedir="\${prefix}/include"
427 sysconfdir="\${prefix}/etc"
428 local_statedir="\${prefix}/var"
429 confsuffix="/qemu"
430 slirp=""
431 oss_lib=""
432 bsd="no"
433 linux="no"
434 solaris="no"
435 profiler="no"
436 cocoa="no"
437 softmmu="yes"
438 linux_user="no"
439 bsd_user="no"
440 blobs="yes"
441 edk2_blobs="no"
442 pkgversion=""
443 pie=""
444 qom_cast_debug="yes"
445 trace_backends="log"
446 trace_file="trace"
447 spice=""
448 rbd=""
449 smartcard=""
450 libusb=""
451 usb_redir=""
452 opengl=""
453 opengl_dmabuf="no"
454 cpuid_h="no"
455 avx2_opt=""
456 zlib="yes"
457 capstone=""
458 lzo=""
459 snappy=""
460 bzip2=""
461 lzfse=""
462 zstd=""
463 guest_agent=""
464 guest_agent_with_vss="no"
465 guest_agent_ntddscsi="no"
466 guest_agent_msi=""
467 vss_win32_sdk=""
468 win_sdk="no"
469 want_tools=""
470 libiscsi=""
471 libnfs=""
472 coroutine=""
473 coroutine_pool=""
474 debug_stack_usage="no"
475 crypto_afalg="no"
476 seccomp=""
477 glusterfs=""
478 glusterfs_xlator_opt="no"
479 glusterfs_discard="no"
480 glusterfs_fallocate="no"
481 glusterfs_zerofill="no"
482 glusterfs_ftruncate_has_stat="no"
483 glusterfs_iocb_has_stat="no"
484 gtk=""
485 gtk_gl="no"
486 tls_priority="NORMAL"
487 gnutls=""
488 nettle=""
489 nettle_xts="no"
490 gcrypt=""
491 gcrypt_hmac="no"
492 gcrypt_xts="no"
493 qemu_private_xts="yes"
494 auth_pam=""
495 vte=""
496 virglrenderer=""
497 tpm=""
498 libssh=""
499 live_block_migration="yes"
500 numa=""
501 tcmalloc="no"
502 jemalloc="no"
503 replication="yes"
504 bochs="yes"
505 cloop="yes"
506 dmg="yes"
507 qcow1="yes"
508 vdi="yes"
509 vvfat="yes"
510 qed="yes"
511 parallels="yes"
512 sheepdog="yes"
513 libxml2=""
514 debug_mutex="no"
515 libpmem=""
516 default_devices="yes"
517 plugins="no"
518 fuzzing="no"
519 rng_none="no"
520 secret_keyring=""
521 libdaxctl=""
523 supported_cpu="no"
524 supported_os="no"
525 bogus_os="no"
526 malloc_trim=""
528 # parse CC options first
529 for opt do
530 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
531 case "$opt" in
532 --cross-prefix=*) cross_prefix="$optarg"
534 --cc=*) CC="$optarg"
536 --cxx=*) CXX="$optarg"
538 --cpu=*) cpu="$optarg"
540 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
541 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
543 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
545 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
546 EXTRA_LDFLAGS="$optarg"
548 --enable-debug-info) debug_info="yes"
550 --disable-debug-info) debug_info="no"
552 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
554 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
555 eval "cross_cc_cflags_${cc_arch}=\$optarg"
556 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
558 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
559 cc_archs="$cc_archs $cc_arch"
560 eval "cross_cc_${cc_arch}=\$optarg"
561 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
563 esac
564 done
565 # OS specific
566 # Using uname is really, really broken. Once we have the right set of checks
567 # we can eliminate its usage altogether.
569 # Preferred compiler:
570 # ${CC} (if set)
571 # ${cross_prefix}gcc (if cross-prefix specified)
572 # system compiler
573 if test -z "${CC}${cross_prefix}"; then
574 cc="$host_cc"
575 else
576 cc="${CC-${cross_prefix}gcc}"
579 if test -z "${CXX}${cross_prefix}"; then
580 cxx="c++"
581 else
582 cxx="${CXX-${cross_prefix}g++}"
585 ar="${AR-${cross_prefix}ar}"
586 as="${AS-${cross_prefix}as}"
587 ccas="${CCAS-$cc}"
588 cpp="${CPP-$cc -E}"
589 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
590 ld="${LD-${cross_prefix}ld}"
591 ranlib="${RANLIB-${cross_prefix}ranlib}"
592 nm="${NM-${cross_prefix}nm}"
593 strip="${STRIP-${cross_prefix}strip}"
594 windres="${WINDRES-${cross_prefix}windres}"
595 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
596 query_pkg_config() {
597 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
599 pkg_config=query_pkg_config
600 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
602 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
603 ARFLAGS="${ARFLAGS-rv}"
605 # default flags for all hosts
606 # We use -fwrapv to tell the compiler that we require a C dialect where
607 # left shift of signed integers is well defined and has the expected
608 # 2s-complement style results. (Both clang and gcc agree that it
609 # provides these semantics.)
610 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
611 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
612 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
613 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
614 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
615 QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
616 if test "$debug_info" = "yes"; then
617 CFLAGS="-g $CFLAGS"
620 # running configure in the source tree?
621 # we know that's the case if configure is there.
622 if test -f "./configure"; then
623 pwd_is_source_path="y"
624 else
625 pwd_is_source_path="n"
628 check_define() {
629 cat > $TMPC <<EOF
630 #if !defined($1)
631 #error $1 not defined
632 #endif
633 int main(void) { return 0; }
635 compile_object
638 check_include() {
639 cat > $TMPC <<EOF
640 #include <$1>
641 int main(void) { return 0; }
643 compile_object
646 write_c_skeleton() {
647 cat > $TMPC <<EOF
648 int main(void) { return 0; }
652 write_c_fuzzer_skeleton() {
653 cat > $TMPC <<EOF
654 #include <stdint.h>
655 #include <sys/types.h>
656 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
657 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
661 if check_define __linux__ ; then
662 targetos="Linux"
663 elif check_define _WIN32 ; then
664 targetos='MINGW32'
665 elif check_define __OpenBSD__ ; then
666 targetos='OpenBSD'
667 elif check_define __sun__ ; then
668 targetos='SunOS'
669 elif check_define __HAIKU__ ; then
670 targetos='Haiku'
671 elif check_define __FreeBSD__ ; then
672 targetos='FreeBSD'
673 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
674 targetos='GNU/kFreeBSD'
675 elif check_define __DragonFly__ ; then
676 targetos='DragonFly'
677 elif check_define __NetBSD__; then
678 targetos='NetBSD'
679 elif check_define __APPLE__; then
680 targetos='Darwin'
681 else
682 # This is a fatal error, but don't report it yet, because we
683 # might be going to just print the --help text, or it might
684 # be the result of a missing compiler.
685 targetos='bogus'
686 bogus_os='yes'
689 # Some host OSes need non-standard checks for which CPU to use.
690 # Note that these checks are broken for cross-compilation: if you're
691 # cross-compiling to one of these OSes then you'll need to specify
692 # the correct CPU with the --cpu option.
693 case $targetos in
694 Darwin)
695 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
696 # run 64-bit userspace code.
697 # If the user didn't specify a CPU explicitly and the kernel says this is
698 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
699 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
700 cpu="x86_64"
703 SunOS)
704 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
705 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
706 cpu="x86_64"
708 esac
710 if test ! -z "$cpu" ; then
711 # command line argument
713 elif check_define __i386__ ; then
714 cpu="i386"
715 elif check_define __x86_64__ ; then
716 if check_define __ILP32__ ; then
717 cpu="x32"
718 else
719 cpu="x86_64"
721 elif check_define __sparc__ ; then
722 if check_define __arch64__ ; then
723 cpu="sparc64"
724 else
725 cpu="sparc"
727 elif check_define _ARCH_PPC ; then
728 if check_define _ARCH_PPC64 ; then
729 if check_define _LITTLE_ENDIAN ; then
730 cpu="ppc64le"
731 else
732 cpu="ppc64"
734 else
735 cpu="ppc"
737 elif check_define __mips__ ; then
738 cpu="mips"
739 elif check_define __s390__ ; then
740 if check_define __s390x__ ; then
741 cpu="s390x"
742 else
743 cpu="s390"
745 elif check_define __riscv ; then
746 if check_define _LP64 ; then
747 cpu="riscv64"
748 else
749 cpu="riscv32"
751 elif check_define __arm__ ; then
752 cpu="arm"
753 elif check_define __aarch64__ ; then
754 cpu="aarch64"
755 else
756 cpu=$(uname -m)
759 ARCH=
760 # Normalise host CPU name and set ARCH.
761 # Note that this case should only have supported host CPUs, not guests.
762 case "$cpu" in
763 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
764 supported_cpu="yes"
766 ppc64le)
767 ARCH="ppc64"
768 supported_cpu="yes"
770 i386|i486|i586|i686|i86pc|BePC)
771 cpu="i386"
772 supported_cpu="yes"
774 x86_64|amd64)
775 cpu="x86_64"
776 supported_cpu="yes"
778 armv*b|armv*l|arm)
779 cpu="arm"
780 supported_cpu="yes"
782 aarch64)
783 cpu="aarch64"
784 supported_cpu="yes"
786 mips*)
787 cpu="mips"
788 supported_cpu="yes"
790 sparc|sun4[cdmuv])
791 cpu="sparc"
792 supported_cpu="yes"
795 # This will result in either an error or falling back to TCI later
796 ARCH=unknown
798 esac
799 if test -z "$ARCH"; then
800 ARCH="$cpu"
803 # OS specific
805 # host *BSD for user mode
806 HOST_VARIANT_DIR=""
808 case $targetos in
809 MINGW32*)
810 mingw32="yes"
811 hax="yes"
812 vhost_user="no"
813 audio_possible_drivers="dsound sdl"
814 if check_include dsound.h; then
815 audio_drv_list="dsound"
816 else
817 audio_drv_list=""
819 supported_os="yes"
820 pie="no"
822 GNU/kFreeBSD)
823 bsd="yes"
824 audio_drv_list="oss try-sdl"
825 audio_possible_drivers="oss sdl pa"
827 FreeBSD)
828 bsd="yes"
829 make="${MAKE-gmake}"
830 audio_drv_list="oss try-sdl"
831 audio_possible_drivers="oss sdl pa"
832 # needed for kinfo_getvmmap(3) in libutil.h
833 LIBS="-lutil $LIBS"
834 # needed for kinfo_getproc
835 libs_qga="-lutil $libs_qga"
836 netmap="" # enable netmap autodetect
837 HOST_VARIANT_DIR="freebsd"
838 supported_os="yes"
840 DragonFly)
841 bsd="yes"
842 make="${MAKE-gmake}"
843 audio_drv_list="oss try-sdl"
844 audio_possible_drivers="oss sdl pa"
845 HOST_VARIANT_DIR="dragonfly"
847 NetBSD)
848 bsd="yes"
849 hax="yes"
850 make="${MAKE-gmake}"
851 audio_drv_list="oss try-sdl"
852 audio_possible_drivers="oss sdl"
853 oss_lib="-lossaudio"
854 HOST_VARIANT_DIR="netbsd"
855 supported_os="yes"
857 OpenBSD)
858 bsd="yes"
859 make="${MAKE-gmake}"
860 audio_drv_list="try-sdl"
861 audio_possible_drivers="sdl"
862 HOST_VARIANT_DIR="openbsd"
863 supported_os="yes"
865 Darwin)
866 bsd="yes"
867 darwin="yes"
868 hax="yes"
869 hvf="yes"
870 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
871 if [ "$cpu" = "x86_64" ] ; then
872 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
873 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
875 cocoa="yes"
876 audio_drv_list="coreaudio try-sdl"
877 audio_possible_drivers="coreaudio sdl"
878 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
879 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
880 # Disable attempts to use ObjectiveC features in os/object.h since they
881 # won't work when we're compiling with gcc as a C compiler.
882 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
883 HOST_VARIANT_DIR="darwin"
884 supported_os="yes"
886 SunOS)
887 solaris="yes"
888 make="${MAKE-gmake}"
889 install="${INSTALL-ginstall}"
890 smbd="${SMBD-/usr/sfw/sbin/smbd}"
891 if test -f /usr/include/sys/soundcard.h ; then
892 audio_drv_list="oss try-sdl"
894 audio_possible_drivers="oss sdl"
895 # needed for CMSG_ macros in sys/socket.h
896 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
897 # needed for TIOCWIN* defines in termios.h
898 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
899 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
900 solarisnetlibs="-lsocket -lnsl -lresolv"
901 LIBS="$solarisnetlibs $LIBS"
902 libs_qga="$solarisnetlibs $libs_qga"
904 Haiku)
905 haiku="yes"
906 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
907 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
909 Linux)
910 audio_drv_list="try-pa oss"
911 audio_possible_drivers="oss alsa sdl pa"
912 linux="yes"
913 linux_user="yes"
914 kvm="yes"
915 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
916 supported_os="yes"
917 libudev="yes"
919 esac
921 if [ "$bsd" = "yes" ] ; then
922 if [ "$darwin" != "yes" ] ; then
923 bsd_user="yes"
927 : ${make=${MAKE-make}}
928 : ${install=${INSTALL-install}}
929 # We prefer python 3.x. A bare 'python' is traditionally
930 # python 2.x, but some distros have it as python 3.x, so
931 # we check that too
932 python=
933 for binary in "${PYTHON-python3}" python
935 if has "$binary"
936 then
937 python=$(command -v "$binary")
938 break
940 done
942 sphinx_build=
943 for binary in sphinx-build-3 sphinx-build
945 if has "$binary"
946 then
947 sphinx_build=$(command -v "$binary")
948 break
950 done
952 # Check for ancillary tools used in testing
953 genisoimage=
954 for binary in genisoimage mkisofs
956 if has $binary
957 then
958 genisoimage=$(command -v "$binary")
959 break
961 done
963 # Check for existence of python3 yaml, needed to
964 # import yaml config files into vm-build.
965 python_yaml="no"
966 if $(python3 -c "import yaml" 2> /dev/null); then
967 python_yaml="yes"
970 : ${smbd=${SMBD-/usr/sbin/smbd}}
972 # Default objcc to clang if available, otherwise use CC
973 if has clang; then
974 objcc=clang
975 else
976 objcc="$cc"
979 if test "$mingw32" = "yes" ; then
980 EXESUF=".exe"
981 DSOSUF=".dll"
982 # MinGW needs -mthreads for TLS and macro _MT.
983 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
984 LIBS="-lwinmm -lws2_32 $LIBS"
985 write_c_skeleton;
986 if compile_prog "" "-liberty" ; then
987 LIBS="-liberty $LIBS"
989 prefix="c:/Program Files/QEMU"
990 mandir="\${prefix}"
991 datadir="\${prefix}"
992 qemu_docdir="\${prefix}"
993 bindir="\${prefix}"
994 sysconfdir="\${prefix}"
995 local_statedir=
996 confsuffix=""
997 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1000 werror=""
1002 for opt do
1003 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1004 case "$opt" in
1005 --help|-h) show_help=yes
1007 --version|-V) exec cat $source_path/VERSION
1009 --prefix=*) prefix="$optarg"
1011 --interp-prefix=*) interp_prefix="$optarg"
1013 --cross-prefix=*)
1015 --cc=*)
1017 --host-cc=*) host_cc="$optarg"
1019 --cxx=*)
1021 --iasl=*) iasl="$optarg"
1023 --objcc=*) objcc="$optarg"
1025 --make=*) make="$optarg"
1027 --install=*) install="$optarg"
1029 --python=*) python="$optarg"
1031 --sphinx-build=*) sphinx_build="$optarg"
1033 --gcov=*) gcov_tool="$optarg"
1035 --smbd=*) smbd="$optarg"
1037 --extra-cflags=*)
1039 --extra-cxxflags=*)
1041 --extra-ldflags=*)
1043 --enable-debug-info)
1045 --disable-debug-info)
1047 --cross-cc-*)
1049 --enable-modules)
1050 modules="yes"
1052 --disable-modules)
1053 modules="no"
1055 --disable-module-upgrades) module_upgrades="no"
1057 --enable-module-upgrades) module_upgrades="yes"
1059 --cpu=*)
1061 --target-list=*) target_list="$optarg"
1062 if test "$target_list_exclude"; then
1063 error_exit "Can't mix --target-list with --target-list-exclude"
1066 --target-list-exclude=*) target_list_exclude="$optarg"
1067 if test "$target_list"; then
1068 error_exit "Can't mix --target-list-exclude with --target-list"
1071 --enable-trace-backends=*) trace_backends="$optarg"
1073 # XXX: backwards compatibility
1074 --enable-trace-backend=*) trace_backends="$optarg"
1076 --with-trace-file=*) trace_file="$optarg"
1078 --with-default-devices) default_devices="yes"
1080 --without-default-devices) default_devices="no"
1082 --enable-gprof) gprof="yes"
1084 --enable-gcov) gcov="yes"
1086 --static)
1087 static="yes"
1088 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1090 --mandir=*) mandir="$optarg"
1092 --bindir=*) bindir="$optarg"
1094 --libdir=*) libdir="$optarg"
1096 --libexecdir=*) libexecdir="$optarg"
1098 --includedir=*) includedir="$optarg"
1100 --datadir=*) datadir="$optarg"
1102 --with-confsuffix=*) confsuffix="$optarg"
1104 --docdir=*) qemu_docdir="$optarg"
1106 --sysconfdir=*) sysconfdir="$optarg"
1108 --localstatedir=*) local_statedir="$optarg"
1110 --firmwarepath=*) firmwarepath="$optarg"
1112 --efi-aarch64=*) efi_aarch64="$optarg"
1114 --host=*|--build=*|\
1115 --disable-dependency-tracking|\
1116 --sbindir=*|--sharedstatedir=*|\
1117 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1118 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1119 # These switches are silently ignored, for compatibility with
1120 # autoconf-generated configure scripts. This allows QEMU's
1121 # configure to be used by RPM and similar macros that set
1122 # lots of directory switches by default.
1124 --disable-sdl) sdl="no"
1126 --enable-sdl) sdl="yes"
1128 --disable-sdl-image) sdl_image="no"
1130 --enable-sdl-image) sdl_image="yes"
1132 --disable-qom-cast-debug) qom_cast_debug="no"
1134 --enable-qom-cast-debug) qom_cast_debug="yes"
1136 --disable-virtfs) virtfs="no"
1138 --enable-virtfs) virtfs="yes"
1140 --disable-mpath) mpath="no"
1142 --enable-mpath) mpath="yes"
1144 --disable-vnc) vnc="no"
1146 --enable-vnc) vnc="yes"
1148 --oss-lib=*) oss_lib="$optarg"
1150 --audio-drv-list=*) audio_drv_list="$optarg"
1152 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1154 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1156 --enable-debug-tcg) debug_tcg="yes"
1158 --disable-debug-tcg) debug_tcg="no"
1160 --enable-debug)
1161 # Enable debugging options that aren't excessively noisy
1162 debug_tcg="yes"
1163 debug_mutex="yes"
1164 debug="yes"
1165 strip_opt="no"
1166 fortify_source="no"
1168 --enable-sanitizers) sanitizers="yes"
1170 --disable-sanitizers) sanitizers="no"
1172 --enable-tsan) tsan="yes"
1174 --disable-tsan) tsan="no"
1176 --enable-sparse) sparse="yes"
1178 --disable-sparse) sparse="no"
1180 --disable-strip) strip_opt="no"
1182 --disable-vnc-sasl) vnc_sasl="no"
1184 --enable-vnc-sasl) vnc_sasl="yes"
1186 --disable-vnc-jpeg) vnc_jpeg="no"
1188 --enable-vnc-jpeg) vnc_jpeg="yes"
1190 --disable-vnc-png) vnc_png="no"
1192 --enable-vnc-png) vnc_png="yes"
1194 --disable-slirp) slirp="no"
1196 --enable-slirp=git) slirp="git"
1198 --enable-slirp=system) slirp="system"
1200 --disable-vde) vde="no"
1202 --enable-vde) vde="yes"
1204 --disable-netmap) netmap="no"
1206 --enable-netmap) netmap="yes"
1208 --disable-xen) xen="no"
1210 --enable-xen) xen="yes"
1212 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1214 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1216 --disable-brlapi) brlapi="no"
1218 --enable-brlapi) brlapi="yes"
1220 --disable-kvm) kvm="no"
1222 --enable-kvm) kvm="yes"
1224 --disable-hax) hax="no"
1226 --enable-hax) hax="yes"
1228 --disable-hvf) hvf="no"
1230 --enable-hvf) hvf="yes"
1232 --disable-whpx) whpx="no"
1234 --enable-whpx) whpx="yes"
1236 --disable-tcg-interpreter) tcg_interpreter="no"
1238 --enable-tcg-interpreter) tcg_interpreter="yes"
1240 --disable-cap-ng) cap_ng="no"
1242 --enable-cap-ng) cap_ng="yes"
1244 --disable-tcg) tcg="no"
1246 --enable-tcg) tcg="yes"
1248 --disable-malloc-trim) malloc_trim="no"
1250 --enable-malloc-trim) malloc_trim="yes"
1252 --disable-spice) spice="no"
1254 --enable-spice) spice="yes"
1256 --disable-libiscsi) libiscsi="no"
1258 --enable-libiscsi) libiscsi="yes"
1260 --disable-libnfs) libnfs="no"
1262 --enable-libnfs) libnfs="yes"
1264 --enable-profiler) profiler="yes"
1266 --disable-cocoa) cocoa="no"
1268 --enable-cocoa)
1269 cocoa="yes" ;
1270 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1272 --disable-system) softmmu="no"
1274 --enable-system) softmmu="yes"
1276 --disable-user)
1277 linux_user="no" ;
1278 bsd_user="no" ;
1280 --enable-user) ;;
1281 --disable-linux-user) linux_user="no"
1283 --enable-linux-user) linux_user="yes"
1285 --disable-bsd-user) bsd_user="no"
1287 --enable-bsd-user) bsd_user="yes"
1289 --enable-pie) pie="yes"
1291 --disable-pie) pie="no"
1293 --enable-werror) werror="yes"
1295 --disable-werror) werror="no"
1297 --enable-stack-protector) stack_protector="yes"
1299 --disable-stack-protector) stack_protector="no"
1301 --enable-safe-stack) safe_stack="yes"
1303 --disable-safe-stack) safe_stack="no"
1305 --disable-curses) curses="no"
1307 --enable-curses) curses="yes"
1309 --disable-iconv) iconv="no"
1311 --enable-iconv) iconv="yes"
1313 --disable-curl) curl="no"
1315 --enable-curl) curl="yes"
1317 --disable-fdt) fdt="no"
1319 --enable-fdt) fdt="yes"
1321 --disable-linux-aio) linux_aio="no"
1323 --enable-linux-aio) linux_aio="yes"
1325 --disable-linux-io-uring) linux_io_uring="no"
1327 --enable-linux-io-uring) linux_io_uring="yes"
1329 --disable-attr) attr="no"
1331 --enable-attr) attr="yes"
1333 --disable-membarrier) membarrier="no"
1335 --enable-membarrier) membarrier="yes"
1337 --disable-blobs) blobs="no"
1339 --with-pkgversion=*) pkgversion="$optarg"
1341 --with-coroutine=*) coroutine="$optarg"
1343 --disable-coroutine-pool) coroutine_pool="no"
1345 --enable-coroutine-pool) coroutine_pool="yes"
1347 --enable-debug-stack-usage) debug_stack_usage="yes"
1349 --enable-crypto-afalg) crypto_afalg="yes"
1351 --disable-crypto-afalg) crypto_afalg="no"
1353 --disable-docs) docs="no"
1355 --enable-docs) docs="yes"
1357 --disable-vhost-net) vhost_net="no"
1359 --enable-vhost-net) vhost_net="yes"
1361 --disable-vhost-crypto) vhost_crypto="no"
1363 --enable-vhost-crypto) vhost_crypto="yes"
1365 --disable-vhost-scsi) vhost_scsi="no"
1367 --enable-vhost-scsi) vhost_scsi="yes"
1369 --disable-vhost-vsock) vhost_vsock="no"
1371 --enable-vhost-vsock) vhost_vsock="yes"
1373 --disable-vhost-user-fs) vhost_user_fs="no"
1375 --enable-vhost-user-fs) vhost_user_fs="yes"
1377 --disable-opengl) opengl="no"
1379 --enable-opengl) opengl="yes"
1381 --disable-rbd) rbd="no"
1383 --enable-rbd) rbd="yes"
1385 --disable-xfsctl) xfs="no"
1387 --enable-xfsctl) xfs="yes"
1389 --disable-smartcard) smartcard="no"
1391 --enable-smartcard) smartcard="yes"
1393 --disable-libusb) libusb="no"
1395 --enable-libusb) libusb="yes"
1397 --disable-usb-redir) usb_redir="no"
1399 --enable-usb-redir) usb_redir="yes"
1401 --disable-zlib-test) zlib="no"
1403 --disable-lzo) lzo="no"
1405 --enable-lzo) lzo="yes"
1407 --disable-snappy) snappy="no"
1409 --enable-snappy) snappy="yes"
1411 --disable-bzip2) bzip2="no"
1413 --enable-bzip2) bzip2="yes"
1415 --enable-lzfse) lzfse="yes"
1417 --disable-lzfse) lzfse="no"
1419 --disable-zstd) zstd="no"
1421 --enable-zstd) zstd="yes"
1423 --enable-guest-agent) guest_agent="yes"
1425 --disable-guest-agent) guest_agent="no"
1427 --enable-guest-agent-msi) guest_agent_msi="yes"
1429 --disable-guest-agent-msi) guest_agent_msi="no"
1431 --with-vss-sdk) vss_win32_sdk=""
1433 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1435 --without-vss-sdk) vss_win32_sdk="no"
1437 --with-win-sdk) win_sdk=""
1439 --with-win-sdk=*) win_sdk="$optarg"
1441 --without-win-sdk) win_sdk="no"
1443 --enable-tools) want_tools="yes"
1445 --disable-tools) want_tools="no"
1447 --enable-seccomp) seccomp="yes"
1449 --disable-seccomp) seccomp="no"
1451 --disable-glusterfs) glusterfs="no"
1453 --disable-avx2) avx2_opt="no"
1455 --enable-avx2) avx2_opt="yes"
1457 --disable-avx512f) avx512f_opt="no"
1459 --enable-avx512f) avx512f_opt="yes"
1462 --enable-glusterfs) glusterfs="yes"
1464 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1465 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1467 --enable-vhdx|--disable-vhdx)
1468 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1470 --enable-uuid|--disable-uuid)
1471 echo "$0: $opt is obsolete, UUID support is always built" >&2
1473 --disable-gtk) gtk="no"
1475 --enable-gtk) gtk="yes"
1477 --tls-priority=*) tls_priority="$optarg"
1479 --disable-gnutls) gnutls="no"
1481 --enable-gnutls) gnutls="yes"
1483 --disable-nettle) nettle="no"
1485 --enable-nettle) nettle="yes"
1487 --disable-gcrypt) gcrypt="no"
1489 --enable-gcrypt) gcrypt="yes"
1491 --disable-auth-pam) auth_pam="no"
1493 --enable-auth-pam) auth_pam="yes"
1495 --enable-rdma) rdma="yes"
1497 --disable-rdma) rdma="no"
1499 --enable-pvrdma) pvrdma="yes"
1501 --disable-pvrdma) pvrdma="no"
1503 --disable-vte) vte="no"
1505 --enable-vte) vte="yes"
1507 --disable-virglrenderer) virglrenderer="no"
1509 --enable-virglrenderer) virglrenderer="yes"
1511 --disable-tpm) tpm="no"
1513 --enable-tpm) tpm="yes"
1515 --disable-libssh) libssh="no"
1517 --enable-libssh) libssh="yes"
1519 --disable-live-block-migration) live_block_migration="no"
1521 --enable-live-block-migration) live_block_migration="yes"
1523 --disable-numa) numa="no"
1525 --enable-numa) numa="yes"
1527 --disable-libxml2) libxml2="no"
1529 --enable-libxml2) libxml2="yes"
1531 --disable-tcmalloc) tcmalloc="no"
1533 --enable-tcmalloc) tcmalloc="yes"
1535 --disable-jemalloc) jemalloc="no"
1537 --enable-jemalloc) jemalloc="yes"
1539 --disable-replication) replication="no"
1541 --enable-replication) replication="yes"
1543 --disable-bochs) bochs="no"
1545 --enable-bochs) bochs="yes"
1547 --disable-cloop) cloop="no"
1549 --enable-cloop) cloop="yes"
1551 --disable-dmg) dmg="no"
1553 --enable-dmg) dmg="yes"
1555 --disable-qcow1) qcow1="no"
1557 --enable-qcow1) qcow1="yes"
1559 --disable-vdi) vdi="no"
1561 --enable-vdi) vdi="yes"
1563 --disable-vvfat) vvfat="no"
1565 --enable-vvfat) vvfat="yes"
1567 --disable-qed) qed="no"
1569 --enable-qed) qed="yes"
1571 --disable-parallels) parallels="no"
1573 --enable-parallels) parallels="yes"
1575 --disable-sheepdog) sheepdog="no"
1577 --enable-sheepdog) sheepdog="yes"
1579 --disable-vhost-user) vhost_user="no"
1581 --enable-vhost-user) vhost_user="yes"
1583 --disable-vhost-vdpa) vhost_vdpa="no"
1585 --enable-vhost-vdpa) vhost_vdpa="yes"
1587 --disable-vhost-kernel) vhost_kernel="no"
1589 --enable-vhost-kernel) vhost_kernel="yes"
1591 --disable-capstone) capstone="no"
1593 --enable-capstone) capstone="yes"
1595 --enable-capstone=git) capstone="git"
1597 --enable-capstone=system) capstone="system"
1599 --with-git=*) git="$optarg"
1601 --enable-git-update) git_update=yes
1603 --disable-git-update) git_update=no
1605 --enable-debug-mutex) debug_mutex=yes
1607 --disable-debug-mutex) debug_mutex=no
1609 --enable-libpmem) libpmem=yes
1611 --disable-libpmem) libpmem=no
1613 --enable-xkbcommon) xkbcommon=yes
1615 --disable-xkbcommon) xkbcommon=no
1617 --enable-plugins) plugins="yes"
1619 --disable-plugins) plugins="no"
1621 --enable-containers) use_containers="yes"
1623 --disable-containers) use_containers="no"
1625 --enable-fuzzing) fuzzing=yes
1627 --disable-fuzzing) fuzzing=no
1629 --gdb=*) gdb_bin="$optarg"
1631 --enable-rng-none) rng_none=yes
1633 --disable-rng-none) rng_none=no
1635 --enable-keyring) secret_keyring="yes"
1637 --disable-keyring) secret_keyring="no"
1639 --enable-libdaxctl) libdaxctl=yes
1641 --disable-libdaxctl) libdaxctl=no
1644 echo "ERROR: unknown option $opt"
1645 echo "Try '$0 --help' for more information"
1646 exit 1
1648 esac
1649 done
1651 case "$cpu" in
1652 ppc)
1653 CPU_CFLAGS="-m32"
1654 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1656 ppc64)
1657 CPU_CFLAGS="-m64"
1658 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1660 sparc)
1661 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1662 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1664 sparc64)
1665 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1666 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1668 s390)
1669 CPU_CFLAGS="-m31"
1670 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1672 s390x)
1673 CPU_CFLAGS="-m64"
1674 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1676 i386)
1677 CPU_CFLAGS="-m32"
1678 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1680 x86_64)
1681 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1682 # If we truly care, we should simply detect this case at
1683 # runtime and generate the fallback to serial emulation.
1684 CPU_CFLAGS="-m64 -mcx16"
1685 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1687 x32)
1688 CPU_CFLAGS="-mx32"
1689 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1691 # No special flags required for other host CPUs
1692 esac
1694 eval "cross_cc_${cpu}=\$host_cc"
1695 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1696 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1698 # For user-mode emulation the host arch has to be one we explicitly
1699 # support, even if we're using TCI.
1700 if [ "$ARCH" = "unknown" ]; then
1701 bsd_user="no"
1702 linux_user="no"
1705 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1706 tcg="no"
1709 default_target_list=""
1711 mak_wilds=""
1713 if [ "$softmmu" = "yes" ]; then
1714 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1716 if [ "$linux_user" = "yes" ]; then
1717 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1719 if [ "$bsd_user" = "yes" ]; then
1720 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1723 if test -z "$target_list_exclude"; then
1724 for config in $mak_wilds; do
1725 default_target_list="${default_target_list} $(basename "$config" .mak)"
1726 done
1727 else
1728 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1729 for config in $mak_wilds; do
1730 target="$(basename "$config" .mak)"
1731 exclude="no"
1732 for excl in $exclude_list; do
1733 if test "$excl" = "$target"; then
1734 exclude="yes"
1735 break;
1737 done
1738 if test "$exclude" = "no"; then
1739 default_target_list="${default_target_list} $target"
1741 done
1744 # Enumerate public trace backends for --help output
1745 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1747 if test x"$show_help" = x"yes" ; then
1748 cat << EOF
1750 Usage: configure [options]
1751 Options: [defaults in brackets after descriptions]
1753 Standard options:
1754 --help print this message
1755 --prefix=PREFIX install in PREFIX [$prefix]
1756 --interp-prefix=PREFIX where to find shared libraries, etc.
1757 use %M for cpu name [$interp_prefix]
1758 --target-list=LIST set target list (default: build everything)
1759 $(echo Available targets: $default_target_list | \
1760 fold -s -w 53 | sed -e 's/^/ /')
1761 --target-list-exclude=LIST exclude a set of targets from the default target-list
1763 Advanced options (experts only):
1764 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1765 --cc=CC use C compiler CC [$cc]
1766 --iasl=IASL use ACPI compiler IASL [$iasl]
1767 --host-cc=CC use C compiler CC [$host_cc] for code run at
1768 build time
1769 --cxx=CXX use C++ compiler CXX [$cxx]
1770 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1771 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1772 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1773 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1774 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1775 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1776 --make=MAKE use specified make [$make]
1777 --install=INSTALL use specified install [$install]
1778 --python=PYTHON use specified python [$python]
1779 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1780 --smbd=SMBD use specified smbd [$smbd]
1781 --with-git=GIT use specified git [$git]
1782 --static enable static build [$static]
1783 --mandir=PATH install man pages in PATH
1784 --datadir=PATH install firmware in PATH$confsuffix
1785 --docdir=PATH install documentation in PATH$confsuffix
1786 --bindir=PATH install binaries in PATH
1787 --libdir=PATH install libraries in PATH
1788 --libexecdir=PATH install helper binaries in PATH
1789 --sysconfdir=PATH install config in PATH$confsuffix
1790 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1791 --firmwarepath=PATH search PATH for firmware files
1792 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1793 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1794 --with-pkgversion=VERS use specified string as sub-version of the package
1795 --enable-debug enable common debug build options
1796 --enable-sanitizers enable default sanitizers
1797 --enable-tsan enable thread sanitizer
1798 --disable-strip disable stripping binaries
1799 --disable-werror disable compilation abort on warning
1800 --disable-stack-protector disable compiler-provided stack protection
1801 --audio-drv-list=LIST set audio drivers list:
1802 Available drivers: $audio_possible_drivers
1803 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1804 --block-drv-rw-whitelist=L
1805 set block driver read-write whitelist
1806 (affects only QEMU, not qemu-img)
1807 --block-drv-ro-whitelist=L
1808 set block driver read-only whitelist
1809 (affects only QEMU, not qemu-img)
1810 --enable-trace-backends=B Set trace backend
1811 Available backends: $trace_backend_list
1812 --with-trace-file=NAME Full PATH,NAME of file to store traces
1813 Default:trace-<pid>
1814 --disable-slirp disable SLIRP userspace network connectivity
1815 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1816 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1817 --oss-lib path to OSS library
1818 --cpu=CPU Build for host CPU [$cpu]
1819 --with-coroutine=BACKEND coroutine backend. Supported options:
1820 ucontext, sigaltstack, windows
1821 --enable-gcov enable test coverage analysis with gcov
1822 --gcov=GCOV use specified gcov [$gcov_tool]
1823 --disable-blobs disable installing provided firmware blobs
1824 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1825 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1826 --tls-priority default TLS protocol/cipher priority string
1827 --enable-gprof QEMU profiling with gprof
1828 --enable-profiler profiler support
1829 --enable-debug-stack-usage
1830 track the maximum stack usage of stacks created by qemu_alloc_stack
1831 --enable-plugins
1832 enable plugins via shared library loading
1833 --disable-containers don't use containers for cross-building
1834 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1836 Optional features, enabled with --enable-FEATURE and
1837 disabled with --disable-FEATURE, default is enabled if available:
1839 system all system emulation targets
1840 user supported user emulation targets
1841 linux-user all linux usermode emulation targets
1842 bsd-user all BSD usermode emulation targets
1843 docs build documentation
1844 guest-agent build the QEMU Guest Agent
1845 guest-agent-msi build guest agent Windows MSI installation package
1846 pie Position Independent Executables
1847 modules modules support (non-Windows)
1848 module-upgrades try to load modules from alternate paths for upgrades
1849 debug-tcg TCG debugging (default is disabled)
1850 debug-info debugging information
1851 sparse sparse checker
1852 safe-stack SafeStack Stack Smash Protection. Depends on
1853 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1855 gnutls GNUTLS cryptography support
1856 nettle nettle cryptography support
1857 gcrypt libgcrypt cryptography support
1858 auth-pam PAM access control
1859 sdl SDL UI
1860 sdl-image SDL Image support for icons
1861 gtk gtk UI
1862 vte vte support for the gtk UI
1863 curses curses UI
1864 iconv font glyph conversion support
1865 vnc VNC UI support
1866 vnc-sasl SASL encryption for VNC server
1867 vnc-jpeg JPEG lossy compression for VNC server
1868 vnc-png PNG compression for VNC server
1869 cocoa Cocoa UI (Mac OS X only)
1870 virtfs VirtFS
1871 mpath Multipath persistent reservation passthrough
1872 xen xen backend driver support
1873 xen-pci-passthrough PCI passthrough support for Xen
1874 brlapi BrlAPI (Braile)
1875 curl curl connectivity
1876 membarrier membarrier system call (for Linux 4.14+ or Windows)
1877 fdt fdt device tree
1878 kvm KVM acceleration support
1879 hax HAX acceleration support
1880 hvf Hypervisor.framework acceleration support
1881 whpx Windows Hypervisor Platform acceleration support
1882 rdma Enable RDMA-based migration
1883 pvrdma Enable PVRDMA support
1884 vde support for vde network
1885 netmap support for netmap network
1886 linux-aio Linux AIO support
1887 linux-io-uring Linux io_uring support
1888 cap-ng libcap-ng support
1889 attr attr and xattr support
1890 vhost-net vhost-net kernel acceleration support
1891 vhost-vsock virtio sockets device support
1892 vhost-scsi vhost-scsi kernel target support
1893 vhost-crypto vhost-user-crypto backend support
1894 vhost-kernel vhost kernel backend support
1895 vhost-user vhost-user backend support
1896 vhost-vdpa vhost-vdpa kernel backend support
1897 spice spice
1898 rbd rados block device (rbd)
1899 libiscsi iscsi support
1900 libnfs nfs support
1901 smartcard smartcard support (libcacard)
1902 libusb libusb (for usb passthrough)
1903 live-block-migration Block migration in the main migration stream
1904 usb-redir usb network redirection support
1905 lzo support of lzo compression library
1906 snappy support of snappy compression library
1907 bzip2 support of bzip2 compression library
1908 (for reading bzip2-compressed dmg images)
1909 lzfse support of lzfse compression library
1910 (for reading lzfse-compressed dmg images)
1911 zstd support for zstd compression library
1912 (for migration compression and qcow2 cluster compression)
1913 seccomp seccomp support
1914 coroutine-pool coroutine freelist (better performance)
1915 glusterfs GlusterFS backend
1916 tpm TPM support
1917 libssh ssh block device support
1918 numa libnuma support
1919 libxml2 for Parallels image format
1920 tcmalloc tcmalloc support
1921 jemalloc jemalloc support
1922 avx2 AVX2 optimization support
1923 avx512f AVX512F optimization support
1924 replication replication support
1925 opengl opengl support
1926 virglrenderer virgl rendering support
1927 xfsctl xfsctl support
1928 qom-cast-debug cast debugging support
1929 tools build qemu-io, qemu-nbd and qemu-img tools
1930 bochs bochs image format support
1931 cloop cloop image format support
1932 dmg dmg image format support
1933 qcow1 qcow v1 image format support
1934 vdi vdi image format support
1935 vvfat vvfat image format support
1936 qed qed image format support
1937 parallels parallels image format support
1938 sheepdog sheepdog block driver support
1939 crypto-afalg Linux AF_ALG crypto backend driver
1940 capstone capstone disassembler support
1941 debug-mutex mutex debugging support
1942 libpmem libpmem support
1943 xkbcommon xkbcommon support
1944 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1945 libdaxctl libdaxctl support
1947 NOTE: The object files are built at the place where configure is launched
1949 exit 0
1952 # Remove old dependency files to make sure that they get properly regenerated
1953 rm -f */config-devices.mak.d
1955 # Remove syscall_nr.h to be sure they will be regenerated in the build
1956 # directory, not in the source directory
1957 for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1958 i386 x86_64 mips mips64 ; do
1959 # remove the file if it has been generated in the source directory
1960 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1961 # remove the dependency files
1962 for target in ${arch}*-linux-user ; do
1963 test -d "${target}" && find "${target}" -type f -name "*.d" \
1964 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1965 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1966 done
1967 done
1969 if test -z "$python"
1970 then
1971 error_exit "Python not found. Use --python=/path/to/python"
1974 # Note that if the Python conditional here evaluates True we will exit
1975 # with status 1 which is a shell 'false' value.
1976 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1977 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1978 "Use --python=/path/to/python to specify a supported Python."
1981 # Preserve python version since some functionality is dependent on it
1982 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)
1984 # Suppress writing compiled files
1985 python="$python -B"
1987 # Check that the C compiler works. Doing this here before testing
1988 # the host CPU ensures that we had a valid CC to autodetect the
1989 # $cpu var (and we should bail right here if that's not the case).
1990 # It also allows the help message to be printed without a CC.
1991 write_c_skeleton;
1992 if compile_object ; then
1993 : C compiler works ok
1994 else
1995 error_exit "\"$cc\" either does not exist or does not work"
1997 if ! compile_prog ; then
1998 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2001 # Now we have handled --enable-tcg-interpreter and know we're not just
2002 # printing the help message, bail out if the host CPU isn't supported.
2003 if test "$ARCH" = "unknown"; then
2004 if test "$tcg_interpreter" = "yes" ; then
2005 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2006 else
2007 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2011 # Consult white-list to determine whether to enable werror
2012 # by default. Only enable by default for git builds
2013 if test -z "$werror" ; then
2014 if test -e "$source_path/.git" && \
2015 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2016 werror="yes"
2017 else
2018 werror="no"
2022 if test "$bogus_os" = "yes"; then
2023 # Now that we know that we're not printing the help and that
2024 # the compiler works (so the results of the check_defines we used
2025 # to identify the OS are reliable), if we didn't recognize the
2026 # host OS we should stop now.
2027 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2030 # Check whether the compiler matches our minimum requirements:
2031 cat > $TMPC << EOF
2032 #if defined(__clang_major__) && defined(__clang_minor__)
2033 # ifdef __apple_build_version__
2034 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2035 # error You need at least XCode Clang v5.1 to compile QEMU
2036 # endif
2037 # else
2038 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2039 # error You need at least Clang v3.4 to compile QEMU
2040 # endif
2041 # endif
2042 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2043 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2044 # error You need at least GCC v4.8 to compile QEMU
2045 # endif
2046 #else
2047 # error You either need GCC or Clang to compiler QEMU
2048 #endif
2049 int main (void) { return 0; }
2051 if ! compile_prog "" "" ; then
2052 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2055 # Accumulate -Wfoo and -Wno-bar separately.
2056 # We will list all of the enable flags first, and the disable flags second.
2057 # Note that we do not add -Werror, because that would enable it for all
2058 # configure tests. If a configure test failed due to -Werror this would
2059 # just silently disable some features, so it's too error prone.
2061 warn_flags=
2062 add_to warn_flags -Wold-style-declaration
2063 add_to warn_flags -Wold-style-definition
2064 add_to warn_flags -Wtype-limits
2065 add_to warn_flags -Wformat-security
2066 add_to warn_flags -Wformat-y2k
2067 add_to warn_flags -Winit-self
2068 add_to warn_flags -Wignored-qualifiers
2069 add_to warn_flags -Wempty-body
2070 add_to warn_flags -Wnested-externs
2071 add_to warn_flags -Wendif-labels
2072 add_to warn_flags -Wexpansion-to-defined
2074 nowarn_flags=
2075 add_to nowarn_flags -Wno-initializer-overrides
2076 add_to nowarn_flags -Wno-missing-include-dirs
2077 add_to nowarn_flags -Wno-shift-negative-value
2078 add_to nowarn_flags -Wno-string-plus-int
2079 add_to nowarn_flags -Wno-typedef-redefinition
2080 add_to nowarn_flags -Wno-tautological-type-limit-compare
2081 add_to nowarn_flags -Wno-psabi
2083 gcc_flags="$warn_flags $nowarn_flags"
2085 cc_has_warning_flag() {
2086 write_c_skeleton;
2088 # Use the positive sense of the flag when testing for -Wno-wombat
2089 # support (gcc will happily accept the -Wno- form of unknown
2090 # warning options).
2091 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2092 compile_prog "-Werror $optflag" ""
2095 for flag in $gcc_flags; do
2096 if cc_has_warning_flag $flag ; then
2097 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2099 done
2101 if test "$stack_protector" != "no"; then
2102 cat > $TMPC << EOF
2103 int main(int argc, char *argv[])
2105 char arr[64], *p = arr, *c = argv[0];
2106 while (*c) {
2107 *p++ = *c++;
2109 return 0;
2112 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2113 sp_on=0
2114 for flag in $gcc_flags; do
2115 # We need to check both a compile and a link, since some compiler
2116 # setups fail only on a .c->.o compile and some only at link time
2117 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2118 compile_prog "-Werror $flag" ""; then
2119 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2120 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2121 sp_on=1
2122 break
2124 done
2125 if test "$stack_protector" = yes; then
2126 if test $sp_on = 0; then
2127 error_exit "Stack protector not supported"
2132 # Disable -Wmissing-braces on older compilers that warn even for
2133 # the "universal" C zero initializer {0}.
2134 cat > $TMPC << EOF
2135 struct {
2136 int a[2];
2137 } x = {0};
2139 if compile_object "-Werror" "" ; then
2141 else
2142 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2145 # Our module code doesn't support Windows
2146 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2147 error_exit "Modules are not available for Windows"
2150 # module_upgrades is only reasonable if modules are enabled
2151 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2152 error_exit "Can't enable module-upgrades as Modules are not enabled"
2155 # Static linking is not possible with modules or PIE
2156 if test "$static" = "yes" ; then
2157 if test "$modules" = "yes" ; then
2158 error_exit "static and modules are mutually incompatible"
2162 # Unconditional check for compiler __thread support
2163 cat > $TMPC << EOF
2164 static __thread int tls_var;
2165 int main(void) { return tls_var; }
2168 if ! compile_prog "-Werror" "" ; then
2169 error_exit "Your compiler does not support the __thread specifier for " \
2170 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2173 cat > $TMPC << EOF
2175 #ifdef __linux__
2176 # define THREAD __thread
2177 #else
2178 # define THREAD
2179 #endif
2180 static THREAD int tls_var;
2181 int main(void) { return tls_var; }
2184 # Check we support --no-pie first; we will need this for building ROMs.
2185 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2186 CFLAGS_NOPIE="-fno-pie"
2187 LDFLAGS_NOPIE="-no-pie"
2190 if test "$static" = "yes"; then
2191 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2192 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2193 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2194 pie="yes"
2195 elif test "$pie" = "yes"; then
2196 error_exit "-static-pie not available due to missing toolchain support"
2197 else
2198 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2199 pie="no"
2201 elif test "$pie" = "no"; then
2202 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2203 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
2204 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2205 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2206 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2207 pie="yes"
2208 elif test "$pie" = "yes"; then
2209 error_exit "PIE not available due to missing toolchain support"
2210 else
2211 echo "Disabling PIE due to missing toolchain support"
2212 pie="no"
2215 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2216 # The combination is known as "full relro", because .got.plt is read-only too.
2217 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2218 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2221 ##########################################
2222 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2223 # use i686 as default anyway, but for those that don't, an explicit
2224 # specification is necessary
2226 if test "$cpu" = "i386"; then
2227 cat > $TMPC << EOF
2228 static int sfaa(int *ptr)
2230 return __sync_fetch_and_and(ptr, 0);
2233 int main(void)
2235 int val = 42;
2236 val = __sync_val_compare_and_swap(&val, 0, 1);
2237 sfaa(&val);
2238 return val;
2241 if ! compile_prog "" "" ; then
2242 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2246 #########################################
2247 # Solaris specific configure tool chain decisions
2249 if test "$solaris" = "yes" ; then
2250 if has $install; then
2252 else
2253 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2254 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2255 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2257 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2258 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2259 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2260 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2262 if has ar; then
2264 else
2265 if test -f /usr/ccs/bin/ar ; then
2266 error_exit "No path includes ar" \
2267 "Add /usr/ccs/bin to your path and rerun configure"
2269 error_exit "No path includes ar"
2273 if test -z "${target_list+xxx}" ; then
2274 for target in $default_target_list; do
2275 supported_target $target 2>/dev/null && \
2276 target_list="$target_list $target"
2277 done
2278 target_list="${target_list# }"
2279 else
2280 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2281 for target in $target_list; do
2282 # Check that we recognised the target name; this allows a more
2283 # friendly error message than if we let it fall through.
2284 case " $default_target_list " in
2285 *" $target "*)
2288 error_exit "Unknown target name '$target'"
2290 esac
2291 supported_target $target || exit 1
2292 done
2295 # see if system emulation was really requested
2296 case " $target_list " in
2297 *"-softmmu "*) softmmu=yes
2299 *) softmmu=no
2301 esac
2303 for target in $target_list; do
2304 case "$target" in
2305 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2306 edk2_blobs="yes"
2308 esac
2309 done
2310 # The EDK2 binaries are compressed with bzip2
2311 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2312 error_exit "The bzip2 program is required for building QEMU"
2315 feature_not_found() {
2316 feature=$1
2317 remedy=$2
2319 error_exit "User requested feature $feature" \
2320 "configure was not able to find it." \
2321 "$remedy"
2324 # ---
2325 # big/little endian test
2326 cat > $TMPC << EOF
2327 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2328 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2329 extern int foo(short *, short *);
2330 int main(int argc, char *argv[]) {
2331 return foo(big_endian, little_endian);
2335 if compile_object ; then
2336 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2337 bigendian="yes"
2338 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2339 bigendian="no"
2340 else
2341 echo big/little test failed
2343 else
2344 echo big/little test failed
2347 ##########################################
2348 # system tools
2349 if test -z "$want_tools"; then
2350 if test "$softmmu" = "no"; then
2351 want_tools=no
2352 else
2353 want_tools=yes
2357 ##########################################
2358 # cocoa implies not SDL or GTK
2359 # (the cocoa UI code currently assumes it is always the active UI
2360 # and doesn't interact well with other UI frontend code)
2361 if test "$cocoa" = "yes"; then
2362 if test "$sdl" = "yes"; then
2363 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2365 if test "$gtk" = "yes"; then
2366 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2368 gtk=no
2369 sdl=no
2372 # Some versions of Mac OS X incorrectly define SIZE_MAX
2373 cat > $TMPC << EOF
2374 #include <stdint.h>
2375 #include <stdio.h>
2376 int main(int argc, char *argv[]) {
2377 return printf("%zu", SIZE_MAX);
2380 have_broken_size_max=no
2381 if ! compile_object -Werror ; then
2382 have_broken_size_max=yes
2385 ##########################################
2386 # L2TPV3 probe
2388 cat > $TMPC <<EOF
2389 #include <sys/socket.h>
2390 #include <linux/ip.h>
2391 int main(void) { return sizeof(struct mmsghdr); }
2393 if compile_prog "" "" ; then
2394 l2tpv3=yes
2395 else
2396 l2tpv3=no
2399 if check_include "pty.h" ; then
2400 pty_h=yes
2401 else
2402 pty_h=no
2405 cat > $TMPC <<EOF
2406 #include <sys/mman.h>
2407 int main(int argc, char *argv[]) {
2408 return mlockall(MCL_FUTURE);
2411 if compile_prog "" "" ; then
2412 have_mlockall=yes
2413 else
2414 have_mlockall=no
2417 #########################################
2418 # vhost interdependencies and host support
2420 # vhost backends
2421 test "$vhost_user" = "" && vhost_user=yes
2422 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2423 error_exit "vhost-user isn't available on win32"
2425 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2426 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2427 error_exit "vhost-vdpa is only available on Linux"
2429 test "$vhost_kernel" = "" && vhost_kernel=$linux
2430 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2431 error_exit "vhost-kernel is only available on Linux"
2434 # vhost-kernel devices
2435 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2436 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2437 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2439 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2440 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2441 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2444 # vhost-user backends
2445 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2446 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2447 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2449 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2450 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2451 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2453 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2454 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2455 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2457 #vhost-vdpa backends
2458 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2459 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2460 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2463 # OR the vhost-kernel and vhost-user values for simplicity
2464 if test "$vhost_net" = ""; then
2465 test "$vhost_net_user" = "yes" && vhost_net=yes
2466 test "$vhost_kernel" = "yes" && vhost_net=yes
2469 ##########################################
2470 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2472 if test "$mingw32" = "yes"; then
2473 # Some versions of MinGW / Mingw-w64 lack localtime_r
2474 # and gmtime_r entirely.
2476 # Some versions of Mingw-w64 define a macro for
2477 # localtime_r/gmtime_r.
2479 # Some versions of Mingw-w64 will define functions
2480 # for localtime_r/gmtime_r, but only if you have
2481 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2482 # though, unistd.h and pthread.h both define
2483 # that for you.
2485 # So this #undef localtime_r and #include <unistd.h>
2486 # are not in fact redundant.
2487 cat > $TMPC << EOF
2488 #include <unistd.h>
2489 #include <time.h>
2490 #undef localtime_r
2491 int main(void) { localtime_r(NULL, NULL); return 0; }
2493 if compile_prog "" "" ; then
2494 localtime_r="yes"
2495 else
2496 localtime_r="no"
2500 ##########################################
2501 # pkg-config probe
2503 if ! has "$pkg_config_exe"; then
2504 error_exit "pkg-config binary '$pkg_config_exe' not found"
2507 ##########################################
2508 # NPTL probe
2510 if test "$linux_user" = "yes"; then
2511 cat > $TMPC <<EOF
2512 #include <sched.h>
2513 #include <linux/futex.h>
2514 int main(void) {
2515 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2516 #error bork
2517 #endif
2518 return 0;
2521 if ! compile_object ; then
2522 feature_not_found "nptl" "Install glibc and linux kernel headers."
2526 ##########################################
2527 # lzo check
2529 if test "$lzo" != "no" ; then
2530 cat > $TMPC << EOF
2531 #include <lzo/lzo1x.h>
2532 int main(void) { lzo_version(); return 0; }
2534 if compile_prog "" "-llzo2" ; then
2535 libs_softmmu="$libs_softmmu -llzo2"
2536 lzo="yes"
2537 else
2538 if test "$lzo" = "yes"; then
2539 feature_not_found "liblzo2" "Install liblzo2 devel"
2541 lzo="no"
2545 ##########################################
2546 # snappy check
2548 if test "$snappy" != "no" ; then
2549 cat > $TMPC << EOF
2550 #include <snappy-c.h>
2551 int main(void) { snappy_max_compressed_length(4096); return 0; }
2553 if compile_prog "" "-lsnappy" ; then
2554 libs_softmmu="$libs_softmmu -lsnappy"
2555 snappy="yes"
2556 else
2557 if test "$snappy" = "yes"; then
2558 feature_not_found "libsnappy" "Install libsnappy devel"
2560 snappy="no"
2564 ##########################################
2565 # bzip2 check
2567 if test "$bzip2" != "no" ; then
2568 cat > $TMPC << EOF
2569 #include <bzlib.h>
2570 int main(void) { BZ2_bzlibVersion(); return 0; }
2572 if compile_prog "" "-lbz2" ; then
2573 bzip2="yes"
2574 else
2575 if test "$bzip2" = "yes"; then
2576 feature_not_found "libbzip2" "Install libbzip2 devel"
2578 bzip2="no"
2582 ##########################################
2583 # lzfse check
2585 if test "$lzfse" != "no" ; then
2586 cat > $TMPC << EOF
2587 #include <lzfse.h>
2588 int main(void) { lzfse_decode_scratch_size(); return 0; }
2590 if compile_prog "" "-llzfse" ; then
2591 lzfse="yes"
2592 else
2593 if test "$lzfse" = "yes"; then
2594 feature_not_found "lzfse" "Install lzfse devel"
2596 lzfse="no"
2600 ##########################################
2601 # zstd check
2603 if test "$zstd" != "no" ; then
2604 libzstd_minver="1.4.0"
2605 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2606 zstd_cflags="$($pkg_config --cflags libzstd)"
2607 zstd_libs="$($pkg_config --libs libzstd)"
2608 LIBS="$zstd_libs $LIBS"
2609 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2610 zstd="yes"
2611 else
2612 if test "$zstd" = "yes" ; then
2613 feature_not_found "libzstd" "Install libzstd devel"
2615 zstd="no"
2619 ##########################################
2620 # libseccomp check
2622 if test "$seccomp" != "no" ; then
2623 libseccomp_minver="2.3.0"
2624 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2625 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2626 seccomp_libs="$($pkg_config --libs libseccomp)"
2627 seccomp="yes"
2628 else
2629 if test "$seccomp" = "yes" ; then
2630 feature_not_found "libseccomp" \
2631 "Install libseccomp devel >= $libseccomp_minver"
2633 seccomp="no"
2636 ##########################################
2637 # xen probe
2639 if test "$xen" != "no" ; then
2640 # Check whether Xen library path is specified via --extra-ldflags to avoid
2641 # overriding this setting with pkg-config output. If not, try pkg-config
2642 # to obtain all needed flags.
2644 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2645 $pkg_config --exists xencontrol ; then
2646 xen_ctrl_version="$(printf '%d%02d%02d' \
2647 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2648 xen=yes
2649 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2650 xen_pc="$xen_pc xenevtchn xendevicemodel"
2651 if $pkg_config --exists xentoolcore; then
2652 xen_pc="$xen_pc xentoolcore"
2654 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2655 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2656 else
2658 xen_libs="-lxenstore -lxenctrl -lxenguest"
2659 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2661 # First we test whether Xen headers and libraries are available.
2662 # If no, we are done and there is no Xen support.
2663 # If yes, more tests are run to detect the Xen version.
2665 # Xen (any)
2666 cat > $TMPC <<EOF
2667 #include <xenctrl.h>
2668 int main(void) {
2669 return 0;
2672 if ! compile_prog "" "$xen_libs" ; then
2673 # Xen not found
2674 if test "$xen" = "yes" ; then
2675 feature_not_found "xen" "Install xen devel"
2677 xen=no
2679 # Xen unstable
2680 elif
2681 cat > $TMPC <<EOF &&
2682 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2683 #define __XEN_TOOLS__
2684 #include <xendevicemodel.h>
2685 #include <xenforeignmemory.h>
2686 int main(void) {
2687 xendevicemodel_handle *xd;
2688 xenforeignmemory_handle *xfmem;
2690 xd = xendevicemodel_open(0, 0);
2691 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2693 xfmem = xenforeignmemory_open(0, 0);
2694 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2696 return 0;
2699 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2700 then
2701 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2702 xen_ctrl_version=41100
2703 xen=yes
2704 elif
2705 cat > $TMPC <<EOF &&
2706 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2707 #include <xenforeignmemory.h>
2708 #include <xentoolcore.h>
2709 int main(void) {
2710 xenforeignmemory_handle *xfmem;
2712 xfmem = xenforeignmemory_open(0, 0);
2713 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2714 xentoolcore_restrict_all(0);
2716 return 0;
2719 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2720 then
2721 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2722 xen_ctrl_version=41000
2723 xen=yes
2724 elif
2725 cat > $TMPC <<EOF &&
2726 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2727 #define __XEN_TOOLS__
2728 #include <xendevicemodel.h>
2729 int main(void) {
2730 xendevicemodel_handle *xd;
2732 xd = xendevicemodel_open(0, 0);
2733 xendevicemodel_close(xd);
2735 return 0;
2738 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2739 then
2740 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2741 xen_ctrl_version=40900
2742 xen=yes
2743 elif
2744 cat > $TMPC <<EOF &&
2746 * If we have stable libs the we don't want the libxc compat
2747 * layers, regardless of what CFLAGS we may have been given.
2749 * Also, check if xengnttab_grant_copy_segment_t is defined and
2750 * grant copy operation is implemented.
2752 #undef XC_WANT_COMPAT_EVTCHN_API
2753 #undef XC_WANT_COMPAT_GNTTAB_API
2754 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2755 #include <xenctrl.h>
2756 #include <xenstore.h>
2757 #include <xenevtchn.h>
2758 #include <xengnttab.h>
2759 #include <xenforeignmemory.h>
2760 #include <stdint.h>
2761 #include <xen/hvm/hvm_info_table.h>
2762 #if !defined(HVM_MAX_VCPUS)
2763 # error HVM_MAX_VCPUS not defined
2764 #endif
2765 int main(void) {
2766 xc_interface *xc = NULL;
2767 xenforeignmemory_handle *xfmem;
2768 xenevtchn_handle *xe;
2769 xengnttab_handle *xg;
2770 xengnttab_grant_copy_segment_t* seg = NULL;
2772 xs_daemon_open();
2774 xc = xc_interface_open(0, 0, 0);
2775 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2776 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2777 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2778 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2780 xfmem = xenforeignmemory_open(0, 0);
2781 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2783 xe = xenevtchn_open(0, 0);
2784 xenevtchn_fd(xe);
2786 xg = xengnttab_open(0, 0);
2787 xengnttab_grant_copy(xg, 0, seg);
2789 return 0;
2792 compile_prog "" "$xen_libs $xen_stable_libs"
2793 then
2794 xen_ctrl_version=40800
2795 xen=yes
2796 elif
2797 cat > $TMPC <<EOF &&
2799 * If we have stable libs the we don't want the libxc compat
2800 * layers, regardless of what CFLAGS we may have been given.
2802 #undef XC_WANT_COMPAT_EVTCHN_API
2803 #undef XC_WANT_COMPAT_GNTTAB_API
2804 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2805 #include <xenctrl.h>
2806 #include <xenstore.h>
2807 #include <xenevtchn.h>
2808 #include <xengnttab.h>
2809 #include <xenforeignmemory.h>
2810 #include <stdint.h>
2811 #include <xen/hvm/hvm_info_table.h>
2812 #if !defined(HVM_MAX_VCPUS)
2813 # error HVM_MAX_VCPUS not defined
2814 #endif
2815 int main(void) {
2816 xc_interface *xc = NULL;
2817 xenforeignmemory_handle *xfmem;
2818 xenevtchn_handle *xe;
2819 xengnttab_handle *xg;
2821 xs_daemon_open();
2823 xc = xc_interface_open(0, 0, 0);
2824 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2825 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2826 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2827 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2829 xfmem = xenforeignmemory_open(0, 0);
2830 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2832 xe = xenevtchn_open(0, 0);
2833 xenevtchn_fd(xe);
2835 xg = xengnttab_open(0, 0);
2836 xengnttab_map_grant_ref(xg, 0, 0, 0);
2838 return 0;
2841 compile_prog "" "$xen_libs $xen_stable_libs"
2842 then
2843 xen_ctrl_version=40701
2844 xen=yes
2846 # Xen 4.6
2847 elif
2848 cat > $TMPC <<EOF &&
2849 #include <xenctrl.h>
2850 #include <xenstore.h>
2851 #include <stdint.h>
2852 #include <xen/hvm/hvm_info_table.h>
2853 #if !defined(HVM_MAX_VCPUS)
2854 # error HVM_MAX_VCPUS not defined
2855 #endif
2856 int main(void) {
2857 xc_interface *xc;
2858 xs_daemon_open();
2859 xc = xc_interface_open(0, 0, 0);
2860 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2861 xc_gnttab_open(NULL, 0);
2862 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2863 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2864 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2865 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2866 return 0;
2869 compile_prog "" "$xen_libs"
2870 then
2871 xen_ctrl_version=40600
2872 xen=yes
2874 # Xen 4.5
2875 elif
2876 cat > $TMPC <<EOF &&
2877 #include <xenctrl.h>
2878 #include <xenstore.h>
2879 #include <stdint.h>
2880 #include <xen/hvm/hvm_info_table.h>
2881 #if !defined(HVM_MAX_VCPUS)
2882 # error HVM_MAX_VCPUS not defined
2883 #endif
2884 int main(void) {
2885 xc_interface *xc;
2886 xs_daemon_open();
2887 xc = xc_interface_open(0, 0, 0);
2888 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2889 xc_gnttab_open(NULL, 0);
2890 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2891 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2892 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2893 return 0;
2896 compile_prog "" "$xen_libs"
2897 then
2898 xen_ctrl_version=40500
2899 xen=yes
2901 elif
2902 cat > $TMPC <<EOF &&
2903 #include <xenctrl.h>
2904 #include <xenstore.h>
2905 #include <stdint.h>
2906 #include <xen/hvm/hvm_info_table.h>
2907 #if !defined(HVM_MAX_VCPUS)
2908 # error HVM_MAX_VCPUS not defined
2909 #endif
2910 int main(void) {
2911 xc_interface *xc;
2912 xs_daemon_open();
2913 xc = xc_interface_open(0, 0, 0);
2914 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2915 xc_gnttab_open(NULL, 0);
2916 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2917 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2918 return 0;
2921 compile_prog "" "$xen_libs"
2922 then
2923 xen_ctrl_version=40200
2924 xen=yes
2926 else
2927 if test "$xen" = "yes" ; then
2928 feature_not_found "xen (unsupported version)" \
2929 "Install a supported xen (xen 4.2 or newer)"
2931 xen=no
2934 if test "$xen" = yes; then
2935 if test $xen_ctrl_version -ge 40701 ; then
2936 libs_softmmu="$xen_stable_libs $libs_softmmu"
2938 libs_softmmu="$xen_libs $libs_softmmu"
2943 if test "$xen_pci_passthrough" != "no"; then
2944 if test "$xen" = "yes" && test "$linux" = "yes"; then
2945 xen_pci_passthrough=yes
2946 else
2947 if test "$xen_pci_passthrough" = "yes"; then
2948 error_exit "User requested feature Xen PCI Passthrough" \
2949 " but this feature requires /sys from Linux"
2951 xen_pci_passthrough=no
2955 ##########################################
2956 # Windows Hypervisor Platform accelerator (WHPX) check
2957 if test "$whpx" != "no" ; then
2958 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2959 whpx="yes"
2960 else
2961 if test "$whpx" = "yes"; then
2962 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2964 whpx="no"
2968 ##########################################
2969 # Sparse probe
2970 if test "$sparse" != "no" ; then
2971 if has cgcc; then
2972 sparse=yes
2973 else
2974 if test "$sparse" = "yes" ; then
2975 feature_not_found "sparse" "Install sparse binary"
2977 sparse=no
2981 ##########################################
2982 # X11 probe
2983 if $pkg_config --exists "x11"; then
2984 have_x11=yes
2985 x11_cflags=$($pkg_config --cflags x11)
2986 x11_libs=$($pkg_config --libs x11)
2989 ##########################################
2990 # GTK probe
2992 if test "$gtk" != "no"; then
2993 gtkpackage="gtk+-3.0"
2994 gtkx11package="gtk+-x11-3.0"
2995 gtkversion="3.22.0"
2996 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2997 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2998 gtk_libs=$($pkg_config --libs $gtkpackage)
2999 gtk_version=$($pkg_config --modversion $gtkpackage)
3000 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3001 need_x11=yes
3002 gtk_cflags="$gtk_cflags $x11_cflags"
3003 gtk_libs="$gtk_libs $x11_libs"
3005 gtk="yes"
3006 elif test "$gtk" = "yes"; then
3007 feature_not_found "gtk" "Install gtk3-devel"
3008 else
3009 gtk="no"
3014 ##########################################
3015 # GNUTLS probe
3017 if test "$gnutls" != "no"; then
3018 pass="no"
3019 if $pkg_config --exists "gnutls >= 3.1.18"; then
3020 gnutls_cflags=$($pkg_config --cflags gnutls)
3021 gnutls_libs=$($pkg_config --libs gnutls)
3022 # Packaging for the static libraries is not always correct.
3023 # At least ubuntu 18.04 ships only shared libraries.
3024 write_c_skeleton
3025 if compile_prog "" "$gnutls_libs" ; then
3026 LIBS="$gnutls_libs $LIBS"
3027 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3028 pass="yes"
3031 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3032 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3033 else
3034 gnutls="$pass"
3039 # If user didn't give a --disable/enable-gcrypt flag,
3040 # then mark as disabled if user requested nettle
3041 # explicitly
3042 if test -z "$gcrypt"
3043 then
3044 if test "$nettle" = "yes"
3045 then
3046 gcrypt="no"
3050 # If user didn't give a --disable/enable-nettle flag,
3051 # then mark as disabled if user requested gcrypt
3052 # explicitly
3053 if test -z "$nettle"
3054 then
3055 if test "$gcrypt" = "yes"
3056 then
3057 nettle="no"
3061 has_libgcrypt() {
3062 if ! has "libgcrypt-config"
3063 then
3064 return 1
3067 if test -n "$cross_prefix"
3068 then
3069 host=$(libgcrypt-config --host)
3070 if test "$host-" != $cross_prefix
3071 then
3072 return 1
3076 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3077 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3079 if test $maj != 1 || test $min -lt 5
3080 then
3081 return 1
3084 return 0
3088 if test "$nettle" != "no"; then
3089 pass="no"
3090 if $pkg_config --exists "nettle >= 2.7.1"; then
3091 nettle_cflags=$($pkg_config --cflags nettle)
3092 nettle_libs=$($pkg_config --libs nettle)
3093 nettle_version=$($pkg_config --modversion nettle)
3094 # Link test to make sure the given libraries work (e.g for static).
3095 write_c_skeleton
3096 if compile_prog "" "$nettle_libs" ; then
3097 LIBS="$nettle_libs $LIBS"
3098 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3099 if test -z "$gcrypt"; then
3100 gcrypt="no"
3102 pass="yes"
3105 if test "$pass" = "yes"
3106 then
3107 cat > $TMPC << EOF
3108 #include <nettle/xts.h>
3109 int main(void) {
3110 return 0;
3113 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3114 nettle_xts=yes
3115 qemu_private_xts=no
3118 if test "$pass" = "no" && test "$nettle" = "yes"; then
3119 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3120 else
3121 nettle="$pass"
3125 if test "$gcrypt" != "no"; then
3126 pass="no"
3127 if has_libgcrypt; then
3128 gcrypt_cflags=$(libgcrypt-config --cflags)
3129 gcrypt_libs=$(libgcrypt-config --libs)
3130 # Debian has removed -lgpg-error from libgcrypt-config
3131 # as it "spreads unnecessary dependencies" which in
3132 # turn breaks static builds...
3133 if test "$static" = "yes"
3134 then
3135 gcrypt_libs="$gcrypt_libs -lgpg-error"
3138 # Link test to make sure the given libraries work (e.g for static).
3139 write_c_skeleton
3140 if compile_prog "" "$gcrypt_libs" ; then
3141 LIBS="$gcrypt_libs $LIBS"
3142 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3143 pass="yes"
3146 if test "$pass" = "yes"; then
3147 gcrypt="yes"
3148 cat > $TMPC << EOF
3149 #include <gcrypt.h>
3150 int main(void) {
3151 gcry_mac_hd_t handle;
3152 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3153 GCRY_MAC_FLAG_SECURE, NULL);
3154 return 0;
3157 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3158 gcrypt_hmac=yes
3160 cat > $TMPC << EOF
3161 #include <gcrypt.h>
3162 int main(void) {
3163 gcry_cipher_hd_t handle;
3164 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3165 return 0;
3168 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3169 gcrypt_xts=yes
3170 qemu_private_xts=no
3172 elif test "$gcrypt" = "yes"; then
3173 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3174 else
3175 gcrypt="no"
3180 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3181 then
3182 error_exit "Only one of gcrypt & nettle can be enabled"
3185 ##########################################
3186 # libtasn1 - only for the TLS creds/session test suite
3188 tasn1=yes
3189 tasn1_cflags=""
3190 tasn1_libs=""
3191 if $pkg_config --exists "libtasn1"; then
3192 tasn1_cflags=$($pkg_config --cflags libtasn1)
3193 tasn1_libs=$($pkg_config --libs libtasn1)
3194 else
3195 tasn1=no
3199 ##########################################
3200 # PAM probe
3202 if test "$auth_pam" != "no"; then
3203 cat > $TMPC <<EOF
3204 #include <security/pam_appl.h>
3205 #include <stdio.h>
3206 int main(void) {
3207 const char *service_name = "qemu";
3208 const char *user = "frank";
3209 const struct pam_conv pam_conv = { 0 };
3210 pam_handle_t *pamh = NULL;
3211 pam_start(service_name, user, &pam_conv, &pamh);
3212 return 0;
3215 if compile_prog "" "-lpam" ; then
3216 auth_pam=yes
3217 else
3218 if test "$auth_pam" = "yes"; then
3219 feature_not_found "PAM" "Install PAM development package"
3220 else
3221 auth_pam=no
3226 ##########################################
3227 # getifaddrs (for tests/test-io-channel-socket )
3229 have_ifaddrs_h=yes
3230 if ! check_include "ifaddrs.h" ; then
3231 have_ifaddrs_h=no
3234 #########################################
3235 # libdrm check
3236 have_drm_h=no
3237 if check_include "libdrm/drm.h" ; then
3238 have_drm_h=yes
3241 #########################################
3242 # sys/signal.h check
3243 have_sys_signal_h=no
3244 if check_include "sys/signal.h" ; then
3245 have_sys_signal_h=yes
3248 ##########################################
3249 # VTE probe
3251 if test "$vte" != "no"; then
3252 vteminversion="0.32.0"
3253 if $pkg_config --exists "vte-2.91"; then
3254 vtepackage="vte-2.91"
3255 else
3256 vtepackage="vte-2.90"
3258 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3259 vte_cflags=$($pkg_config --cflags $vtepackage)
3260 vte_libs=$($pkg_config --libs $vtepackage)
3261 vteversion=$($pkg_config --modversion $vtepackage)
3262 vte="yes"
3263 elif test "$vte" = "yes"; then
3264 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3265 else
3266 vte="no"
3270 ##########################################
3271 # SDL probe
3273 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3274 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3276 sdl_probe ()
3278 if $pkg_config sdl2 --exists; then
3279 sdlconfig="$pkg_config sdl2"
3280 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3281 elif has "$sdl2_config"; then
3282 sdlconfig="$sdl2_config"
3283 sdlversion=$($sdlconfig --version)
3284 else
3285 if test "$sdl" = "yes" ; then
3286 feature_not_found "sdl" "Install SDL2-devel"
3288 sdl=no
3289 # no need to do the rest
3290 return
3292 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3293 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3296 cat > $TMPC << EOF
3297 #include <SDL.h>
3298 #undef main /* We don't want SDL to override our main() */
3299 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3301 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3302 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3303 if test "$static" = "yes" ; then
3304 if $pkg_config sdl2 --exists; then
3305 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3306 else
3307 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3309 else
3310 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3312 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3313 sdl=yes
3315 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3316 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3317 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3318 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3319 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3321 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3323 else
3324 sdl=no
3326 fi # static link
3327 else # sdl not found
3328 if test "$sdl" = "yes" ; then
3329 feature_not_found "sdl" "Install SDL2 devel"
3331 sdl=no
3332 fi # sdl compile test
3335 sdl_image_probe ()
3337 if test "$sdl_image" != "no" ; then
3338 if $pkg_config SDL2_image --exists; then
3339 if test "$static" = "yes"; then
3340 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3341 else
3342 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3344 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3345 sdl_image=yes
3347 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3348 sdl_libs="$sdl_libs $sdl_image_libs"
3349 else
3350 if test "$sdl_image" = "yes" ; then
3351 feature_not_found "sdl_image" "Install SDL Image devel"
3352 else
3353 sdl_image=no
3359 if test "$sdl" != "no" ; then
3360 sdl_probe
3363 if test "$sdl" = "yes" ; then
3364 sdl_image_probe
3365 else
3366 if test "$sdl_image" = "yes"; then
3367 echo "warning: SDL Image requested, but SDL is not available, disabling"
3369 sdl_image=no
3372 if test "$sdl" = "yes" ; then
3373 cat > $TMPC <<EOF
3374 #include <SDL.h>
3375 #if defined(SDL_VIDEO_DRIVER_X11)
3376 #include <X11/XKBlib.h>
3377 #else
3378 #error No x11 support
3379 #endif
3380 int main(void) { return 0; }
3382 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3383 need_x11=yes
3384 sdl_cflags="$sdl_cflags $x11_cflags"
3385 sdl_libs="$sdl_libs $x11_libs"
3389 ##########################################
3390 # RDMA needs OpenFabrics libraries
3391 if test "$rdma" != "no" ; then
3392 cat > $TMPC <<EOF
3393 #include <rdma/rdma_cma.h>
3394 int main(void) { return 0; }
3396 rdma_libs="-lrdmacm -libverbs -libumad"
3397 if compile_prog "" "$rdma_libs" ; then
3398 rdma="yes"
3399 libs_softmmu="$libs_softmmu $rdma_libs"
3400 else
3401 if test "$rdma" = "yes" ; then
3402 error_exit \
3403 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3404 " Your options:" \
3405 " (1) Fast: Install infiniband packages (devel) from your distro." \
3406 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3407 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3409 rdma="no"
3413 ##########################################
3414 # PVRDMA detection
3416 cat > $TMPC <<EOF &&
3417 #include <sys/mman.h>
3420 main(void)
3422 char buf = 0;
3423 void *addr = &buf;
3424 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3426 return 0;
3430 if test "$rdma" = "yes" ; then
3431 case "$pvrdma" in
3433 if compile_prog "" ""; then
3434 pvrdma="yes"
3435 else
3436 pvrdma="no"
3439 "yes")
3440 if ! compile_prog "" ""; then
3441 error_exit "PVRDMA is not supported since mremap is not implemented"
3443 pvrdma="yes"
3445 "no")
3446 pvrdma="no"
3448 esac
3449 else
3450 if test "$pvrdma" = "yes" ; then
3451 error_exit "PVRDMA requires rdma suppport"
3453 pvrdma="no"
3456 # Let's see if enhanced reg_mr is supported
3457 if test "$pvrdma" = "yes" ; then
3459 cat > $TMPC <<EOF &&
3460 #include <infiniband/verbs.h>
3463 main(void)
3465 struct ibv_mr *mr;
3466 struct ibv_pd *pd = NULL;
3467 size_t length = 10;
3468 uint64_t iova = 0;
3469 int access = 0;
3470 void *addr = NULL;
3472 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3474 ibv_dereg_mr(mr);
3476 return 0;
3479 if ! compile_prog "" "-libverbs"; then
3480 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3484 ##########################################
3485 # VNC SASL detection
3486 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3487 cat > $TMPC <<EOF
3488 #include <sasl/sasl.h>
3489 #include <stdio.h>
3490 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3492 # Assuming Cyrus-SASL installed in /usr prefix
3493 # QEMU defines struct iovec in "qemu/osdep.h",
3494 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3495 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3496 vnc_sasl_libs="-lsasl2"
3497 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3498 vnc_sasl=yes
3499 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3500 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3501 else
3502 if test "$vnc_sasl" = "yes" ; then
3503 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3505 vnc_sasl=no
3509 ##########################################
3510 # VNC JPEG detection
3511 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3512 cat > $TMPC <<EOF
3513 #include <stdio.h>
3514 #include <jpeglib.h>
3515 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3517 vnc_jpeg_cflags=""
3518 vnc_jpeg_libs="-ljpeg"
3519 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3520 vnc_jpeg=yes
3521 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3522 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3523 else
3524 if test "$vnc_jpeg" = "yes" ; then
3525 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3527 vnc_jpeg=no
3531 ##########################################
3532 # VNC PNG detection
3533 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3534 cat > $TMPC <<EOF
3535 //#include <stdio.h>
3536 #include <png.h>
3537 #include <stddef.h>
3538 int main(void) {
3539 png_structp png_ptr;
3540 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3541 return png_ptr != 0;
3544 if $pkg_config libpng --exists; then
3545 vnc_png_cflags=$($pkg_config libpng --cflags)
3546 vnc_png_libs=$($pkg_config libpng --libs)
3547 else
3548 vnc_png_cflags=""
3549 vnc_png_libs="-lpng"
3551 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3552 vnc_png=yes
3553 libs_softmmu="$vnc_png_libs $libs_softmmu"
3554 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3555 else
3556 if test "$vnc_png" = "yes" ; then
3557 feature_not_found "vnc-png" "Install libpng devel"
3559 vnc_png=no
3563 ##########################################
3564 # xkbcommon probe
3565 if test "$xkbcommon" != "no" ; then
3566 if $pkg_config xkbcommon --exists; then
3567 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3568 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3569 xkbcommon=yes
3570 else
3571 if test "$xkbcommon" = "yes" ; then
3572 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3574 xkbcommon=no
3579 ##########################################
3580 # xfsctl() probe, used for file-posix.c
3581 if test "$xfs" != "no" ; then
3582 cat > $TMPC << EOF
3583 #include <stddef.h> /* NULL */
3584 #include <xfs/xfs.h>
3585 int main(void)
3587 xfsctl(NULL, 0, 0, NULL);
3588 return 0;
3591 if compile_prog "" "" ; then
3592 xfs="yes"
3593 else
3594 if test "$xfs" = "yes" ; then
3595 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3597 xfs=no
3601 ##########################################
3602 # vde libraries probe
3603 if test "$vde" != "no" ; then
3604 vde_libs="-lvdeplug"
3605 cat > $TMPC << EOF
3606 #include <libvdeplug.h>
3607 int main(void)
3609 struct vde_open_args a = {0, 0, 0};
3610 char s[] = "";
3611 vde_open(s, s, &a);
3612 return 0;
3615 if compile_prog "" "$vde_libs" ; then
3616 vde=yes
3617 else
3618 if test "$vde" = "yes" ; then
3619 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3621 vde=no
3625 ##########################################
3626 # netmap support probe
3627 # Apart from looking for netmap headers, we make sure that the host API version
3628 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3629 # a minor/major version number. Minor new features will be marked with values up
3630 # to 15, and if something happens that requires a change to the backend we will
3631 # move above 15, submit the backend fixes and modify this two bounds.
3632 if test "$netmap" != "no" ; then
3633 cat > $TMPC << EOF
3634 #include <inttypes.h>
3635 #include <net/if.h>
3636 #include <net/netmap.h>
3637 #include <net/netmap_user.h>
3638 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3639 #error
3640 #endif
3641 int main(void) { return 0; }
3643 if compile_prog "" "" ; then
3644 netmap=yes
3645 else
3646 if test "$netmap" = "yes" ; then
3647 feature_not_found "netmap"
3649 netmap=no
3653 ############################################
3654 # efi-aarch64 probe
3655 # Check for efi files needed by aarch64 VMs.
3656 # By default we will use the efi included with QEMU.
3657 # Allow user to override the path for efi also.
3658 if ! test -f "$efi_aarch64"; then
3659 if test -f $source_path/pc-bios/edk2-aarch64-code.fd.bz2; then
3660 # valid after build
3661 efi_aarch64=$PWD/pc-bios/edk2-aarch64-code.fd
3662 else
3663 efi_aarch64=""
3667 ##########################################
3668 # libcap-ng library probe
3669 if test "$cap_ng" != "no" ; then
3670 cap_libs="-lcap-ng"
3671 cat > $TMPC << EOF
3672 #include <cap-ng.h>
3673 int main(void)
3675 capng_capability_to_name(CAPNG_EFFECTIVE);
3676 return 0;
3679 if compile_prog "" "$cap_libs" ; then
3680 cap_ng=yes
3681 libs_tools="$cap_libs $libs_tools"
3682 else
3683 if test "$cap_ng" = "yes" ; then
3684 feature_not_found "cap_ng" "Install libcap-ng devel"
3686 cap_ng=no
3690 ##########################################
3691 # Sound support libraries probe
3693 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3694 for drv in $audio_drv_list; do
3695 case $drv in
3696 alsa | try-alsa)
3697 if $pkg_config alsa --exists; then
3698 alsa_libs=$($pkg_config alsa --libs)
3699 if test "$drv" = "try-alsa"; then
3700 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3702 else
3703 if test "$drv" = "try-alsa"; then
3704 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3705 else
3706 error_exit "$drv check failed" \
3707 "Make sure to have the $drv libs and headers installed."
3712 pa | try-pa)
3713 if $pkg_config libpulse --exists; then
3714 pulse_libs=$($pkg_config libpulse --libs)
3715 if test "$drv" = "try-pa"; then
3716 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3718 else
3719 if test "$drv" = "try-pa"; then
3720 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3721 else
3722 error_exit "$drv check failed" \
3723 "Make sure to have the $drv libs and headers installed."
3728 sdl)
3729 if test "$sdl" = "no"; then
3730 error_exit "sdl not found or disabled, can not use sdl audio driver"
3734 try-sdl)
3735 if test "$sdl" = "no"; then
3736 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3737 else
3738 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3742 coreaudio)
3743 coreaudio_libs="-framework CoreAudio"
3746 dsound)
3747 dsound_libs="-lole32 -ldxguid"
3748 audio_win_int="yes"
3751 oss)
3752 oss_libs="$oss_lib"
3755 jack | try-jack)
3756 if $pkg_config jack --exists; then
3757 jack_libs=$($pkg_config jack --libs)
3758 if test "$drv" = "try-jack"; then
3759 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3761 else
3762 if test "$drv" = "try-jack"; then
3763 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3764 else
3765 error_exit "$drv check failed" \
3766 "Make sure to have the $drv libs and headers installed."
3772 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3773 error_exit "Unknown driver '$drv' selected" \
3774 "Possible drivers are: $audio_possible_drivers"
3777 esac
3778 done
3780 ##########################################
3781 # BrlAPI probe
3783 if test "$brlapi" != "no" ; then
3784 brlapi_libs="-lbrlapi"
3785 cat > $TMPC << EOF
3786 #include <brlapi.h>
3787 #include <stddef.h>
3788 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3790 if compile_prog "" "$brlapi_libs" ; then
3791 brlapi=yes
3792 else
3793 if test "$brlapi" = "yes" ; then
3794 feature_not_found "brlapi" "Install brlapi devel"
3796 brlapi=no
3800 ##########################################
3801 # iconv probe
3802 if test "$iconv" != "no" ; then
3803 cat > $TMPC << EOF
3804 #include <iconv.h>
3805 int main(void) {
3806 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3807 return conv != (iconv_t) -1;
3810 iconv_prefix_list="/usr/local:/usr"
3811 iconv_lib_list=":-liconv"
3812 IFS=:
3813 for iconv_prefix in $iconv_prefix_list; do
3814 IFS=:
3815 iconv_cflags="-I$iconv_prefix/include"
3816 iconv_ldflags="-L$iconv_prefix/lib"
3817 for iconv_link in $iconv_lib_list; do
3818 unset IFS
3819 iconv_lib="$iconv_ldflags $iconv_link"
3820 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3821 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3822 iconv_found=yes
3823 break
3825 done
3826 if test "$iconv_found" = yes ; then
3827 break
3829 done
3830 if test "$iconv_found" = "yes" ; then
3831 iconv=yes
3832 else
3833 if test "$iconv" = "yes" ; then
3834 feature_not_found "iconv" "Install iconv devel"
3836 iconv=no
3840 ##########################################
3841 # curses probe
3842 if test "$iconv" = "no" ; then
3843 # curses will need iconv
3844 curses=no
3846 if test "$curses" != "no" ; then
3847 if test "$mingw32" = "yes" ; then
3848 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3849 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3850 else
3851 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3852 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3854 curses_found=no
3855 cat > $TMPC << EOF
3856 #include <locale.h>
3857 #include <curses.h>
3858 #include <wchar.h>
3859 #include <langinfo.h>
3860 int main(void) {
3861 const char *codeset;
3862 wchar_t wch = L'w';
3863 setlocale(LC_ALL, "");
3864 resize_term(0, 0);
3865 addwstr(L"wide chars\n");
3866 addnwstr(&wch, 1);
3867 add_wch(WACS_DEGREE);
3868 codeset = nl_langinfo(CODESET);
3869 return codeset != 0;
3872 IFS=:
3873 for curses_inc in $curses_inc_list; do
3874 # Make sure we get the wide character prototypes
3875 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3876 IFS=:
3877 for curses_lib in $curses_lib_list; do
3878 unset IFS
3879 if compile_prog "$curses_inc" "$curses_lib" ; then
3880 curses_found=yes
3881 break
3883 done
3884 if test "$curses_found" = yes ; then
3885 break
3887 done
3888 unset IFS
3889 if test "$curses_found" = "yes" ; then
3890 curses=yes
3891 else
3892 if test "$curses" = "yes" ; then
3893 feature_not_found "curses" "Install ncurses devel"
3895 curses=no
3899 ##########################################
3900 # curl probe
3901 if test "$curl" != "no" ; then
3902 if $pkg_config libcurl --exists; then
3903 curlconfig="$pkg_config libcurl"
3904 else
3905 curlconfig=curl-config
3907 cat > $TMPC << EOF
3908 #include <curl/curl.h>
3909 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3911 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3912 curl_libs=$($curlconfig --libs 2>/dev/null)
3913 if compile_prog "$curl_cflags" "$curl_libs" ; then
3914 curl=yes
3915 else
3916 if test "$curl" = "yes" ; then
3917 feature_not_found "curl" "Install libcurl devel"
3919 curl=no
3921 fi # test "$curl"
3923 ##########################################
3924 # glib support probe
3926 glib_req_ver=2.48
3927 glib_modules=gthread-2.0
3928 if test "$modules" = yes; then
3929 glib_modules="$glib_modules gmodule-export-2.0"
3931 if test "$plugins" = yes; then
3932 glib_modules="$glib_modules gmodule-2.0"
3935 # This workaround is required due to a bug in pkg-config file for glib as it
3936 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3938 if test "$static" = yes && test "$mingw32" = yes; then
3939 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3942 for i in $glib_modules; do
3943 if $pkg_config --atleast-version=$glib_req_ver $i; then
3944 glib_cflags=$($pkg_config --cflags $i)
3945 glib_libs=$($pkg_config --libs $i)
3946 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3947 LIBS="$glib_libs $LIBS"
3948 libs_qga="$glib_libs $libs_qga"
3949 else
3950 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3952 done
3954 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3955 gio=yes
3956 gio_cflags=$($pkg_config --cflags gio-2.0)
3957 gio_libs=$($pkg_config --libs gio-2.0)
3958 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3959 if [ ! -x "$gdbus_codegen" ]; then
3960 gdbus_codegen=
3962 else
3963 gio=no
3966 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3967 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3968 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3971 # Sanity check that the current size_t matches the
3972 # size that glib thinks it should be. This catches
3973 # problems on multi-arch where people try to build
3974 # 32-bit QEMU while pointing at 64-bit glib headers
3975 cat > $TMPC <<EOF
3976 #include <glib.h>
3977 #include <unistd.h>
3979 #define QEMU_BUILD_BUG_ON(x) \
3980 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3982 int main(void) {
3983 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3984 return 0;
3988 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3989 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3990 "You probably need to set PKG_CONFIG_LIBDIR"\
3991 "to point to the right pkg-config files for your"\
3992 "build target"
3995 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3996 cat > $TMPC << EOF
3997 #include <glib.h>
3998 int main(void) { return 0; }
4000 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4001 if cc_has_warning_flag "-Wno-unknown-attributes"; then
4002 glib_cflags="-Wno-unknown-attributes $glib_cflags"
4003 CFLAGS="-Wno-unknown-attributes $CFLAGS"
4007 # Silence clang warnings triggered by glib < 2.57.2
4008 cat > $TMPC << EOF
4009 #include <glib.h>
4010 typedef struct Foo {
4011 int i;
4012 } Foo;
4013 static void foo_free(Foo *f)
4015 g_free(f);
4017 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
4018 int main(void) { return 0; }
4020 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4021 if cc_has_warning_flag "-Wno-unused-function"; then
4022 glib_cflags="$glib_cflags -Wno-unused-function"
4023 CFLAGS="$CFLAGS -Wno-unused-function"
4027 #########################################
4028 # zlib check
4030 if test "$zlib" != "no" ; then
4031 if $pkg_config --exists zlib; then
4032 zlib_cflags=$($pkg_config --cflags zlib)
4033 zlib_libs=$($pkg_config --libs zlib)
4034 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
4035 LIBS="$zlib_libs $LIBS"
4036 else
4037 cat > $TMPC << EOF
4038 #include <zlib.h>
4039 int main(void) { zlibVersion(); return 0; }
4041 if compile_prog "" "-lz" ; then
4042 LIBS="$LIBS -lz"
4043 else
4044 error_exit "zlib check failed" \
4045 "Make sure to have the zlib libs and headers installed."
4050 ##########################################
4051 # SHA command probe for modules
4052 if test "$modules" = yes; then
4053 shacmd_probe="sha1sum sha1 shasum"
4054 for c in $shacmd_probe; do
4055 if has $c; then
4056 shacmd="$c"
4057 break
4059 done
4060 if test "$shacmd" = ""; then
4061 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4065 ##########################################
4066 # pixman support probe
4068 if test "$softmmu" = "no"; then
4069 pixman_cflags=
4070 pixman_libs=
4071 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4072 pixman_cflags=$($pkg_config --cflags pixman-1)
4073 pixman_libs=$($pkg_config --libs pixman-1)
4074 else
4075 error_exit "pixman >= 0.21.8 not present." \
4076 "Please install the pixman devel package."
4079 ##########################################
4080 # libmpathpersist probe
4082 if test "$mpath" != "no" ; then
4083 # probe for the new API
4084 cat > $TMPC <<EOF
4085 #include <libudev.h>
4086 #include <mpath_persist.h>
4087 unsigned mpath_mx_alloc_len = 1024;
4088 int logsink;
4089 static struct config *multipath_conf;
4090 extern struct udev *udev;
4091 extern struct config *get_multipath_config(void);
4092 extern void put_multipath_config(struct config *conf);
4093 struct udev *udev;
4094 struct config *get_multipath_config(void) { return multipath_conf; }
4095 void put_multipath_config(struct config *conf) { }
4097 int main(void) {
4098 udev = udev_new();
4099 multipath_conf = mpath_lib_init();
4100 return 0;
4103 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4104 mpathpersist=yes
4105 mpathpersist_new_api=yes
4106 else
4107 # probe for the old API
4108 cat > $TMPC <<EOF
4109 #include <libudev.h>
4110 #include <mpath_persist.h>
4111 unsigned mpath_mx_alloc_len = 1024;
4112 int logsink;
4113 int main(void) {
4114 struct udev *udev = udev_new();
4115 mpath_lib_init(udev);
4116 return 0;
4119 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4120 mpathpersist=yes
4121 mpathpersist_new_api=no
4122 else
4123 mpathpersist=no
4126 else
4127 mpathpersist=no
4130 ##########################################
4131 # pthread probe
4132 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4134 pthread=no
4135 cat > $TMPC << EOF
4136 #include <pthread.h>
4137 static void *f(void *p) { return NULL; }
4138 int main(void) {
4139 pthread_t thread;
4140 pthread_create(&thread, 0, f, 0);
4141 return 0;
4144 if compile_prog "" "" ; then
4145 pthread=yes
4146 else
4147 for pthread_lib in $PTHREADLIBS_LIST; do
4148 if compile_prog "" "$pthread_lib" ; then
4149 pthread=yes
4150 found=no
4151 for lib_entry in $LIBS; do
4152 if test "$lib_entry" = "$pthread_lib"; then
4153 found=yes
4154 break
4156 done
4157 if test "$found" = "no"; then
4158 LIBS="$pthread_lib $LIBS"
4159 libs_qga="$pthread_lib $libs_qga"
4161 PTHREAD_LIB="$pthread_lib"
4162 break
4164 done
4167 if test "$mingw32" != yes && test "$pthread" = no; then
4168 error_exit "pthread check failed" \
4169 "Make sure to have the pthread libs and headers installed."
4172 # check for pthread_setname_np with thread id
4173 pthread_setname_np_w_tid=no
4174 cat > $TMPC << EOF
4175 #include <pthread.h>
4177 static void *f(void *p) { return NULL; }
4178 int main(void)
4180 pthread_t thread;
4181 pthread_create(&thread, 0, f, 0);
4182 pthread_setname_np(thread, "QEMU");
4183 return 0;
4186 if compile_prog "" "$pthread_lib" ; then
4187 pthread_setname_np_w_tid=yes
4190 # check for pthread_setname_np without thread id
4191 pthread_setname_np_wo_tid=no
4192 cat > $TMPC << EOF
4193 #include <pthread.h>
4195 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4196 int main(void)
4198 pthread_t thread;
4199 pthread_create(&thread, 0, f, 0);
4200 return 0;
4203 if compile_prog "" "$pthread_lib" ; then
4204 pthread_setname_np_wo_tid=yes
4207 ##########################################
4208 # rbd probe
4209 if test "$rbd" != "no" ; then
4210 cat > $TMPC <<EOF
4211 #include <stdio.h>
4212 #include <rbd/librbd.h>
4213 int main(void) {
4214 rados_t cluster;
4215 rados_create(&cluster, NULL);
4216 return 0;
4219 rbd_libs="-lrbd -lrados"
4220 if compile_prog "" "$rbd_libs" ; then
4221 rbd=yes
4222 else
4223 if test "$rbd" = "yes" ; then
4224 feature_not_found "rados block device" "Install librbd/ceph devel"
4226 rbd=no
4230 ##########################################
4231 # libssh probe
4232 if test "$libssh" != "no" ; then
4233 if $pkg_config --exists libssh; then
4234 libssh_cflags=$($pkg_config libssh --cflags)
4235 libssh_libs=$($pkg_config libssh --libs)
4236 libssh=yes
4237 else
4238 if test "$libssh" = "yes" ; then
4239 error_exit "libssh required for --enable-libssh"
4241 libssh=no
4245 ##########################################
4246 # Check for libssh 0.8
4247 # This is done like this instead of using the LIBSSH_VERSION_* and
4248 # SSH_VERSION_* macros because some distributions in the past shipped
4249 # snapshots of the future 0.8 from Git, and those snapshots did not
4250 # have updated version numbers (still referring to 0.7.0).
4252 if test "$libssh" = "yes"; then
4253 cat > $TMPC <<EOF
4254 #include <libssh/libssh.h>
4255 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4257 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4258 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4262 ##########################################
4263 # linux-aio probe
4265 if test "$linux_aio" != "no" ; then
4266 cat > $TMPC <<EOF
4267 #include <libaio.h>
4268 #include <sys/eventfd.h>
4269 #include <stddef.h>
4270 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4272 if compile_prog "" "-laio" ; then
4273 linux_aio=yes
4274 else
4275 if test "$linux_aio" = "yes" ; then
4276 feature_not_found "linux AIO" "Install libaio devel"
4278 linux_aio=no
4281 ##########################################
4282 # linux-io-uring probe
4284 if test "$linux_io_uring" != "no" ; then
4285 if $pkg_config liburing; then
4286 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4287 linux_io_uring_libs=$($pkg_config --libs liburing)
4288 linux_io_uring=yes
4290 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4291 # seen by programs linking the archive. It's not ideal, but just add the
4292 # library dependency globally.
4293 LIBS="$linux_io_uring_libs $LIBS"
4294 else
4295 if test "$linux_io_uring" = "yes" ; then
4296 feature_not_found "linux io_uring" "Install liburing devel"
4298 linux_io_uring=no
4302 ##########################################
4303 # TPM emulation is only on POSIX
4305 if test "$tpm" = ""; then
4306 if test "$mingw32" = "yes"; then
4307 tpm=no
4308 else
4309 tpm=yes
4311 elif test "$tpm" = "yes"; then
4312 if test "$mingw32" = "yes" ; then
4313 error_exit "TPM emulation only available on POSIX systems"
4317 ##########################################
4318 # attr probe
4320 if test "$attr" != "no" ; then
4321 cat > $TMPC <<EOF
4322 #include <stdio.h>
4323 #include <sys/types.h>
4324 #ifdef CONFIG_LIBATTR
4325 #include <attr/xattr.h>
4326 #else
4327 #include <sys/xattr.h>
4328 #endif
4329 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4331 if compile_prog "" "" ; then
4332 attr=yes
4333 # Older distros have <attr/xattr.h>, and need -lattr:
4334 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4335 attr=yes
4336 LIBS="-lattr $LIBS"
4337 libattr=yes
4338 else
4339 if test "$attr" = "yes" ; then
4340 feature_not_found "ATTR" "Install libc6 or libattr devel"
4342 attr=no
4346 ##########################################
4347 # iovec probe
4348 cat > $TMPC <<EOF
4349 #include <sys/types.h>
4350 #include <sys/uio.h>
4351 #include <unistd.h>
4352 int main(void) { return sizeof(struct iovec); }
4354 iovec=no
4355 if compile_prog "" "" ; then
4356 iovec=yes
4359 ##########################################
4360 # preadv probe
4361 cat > $TMPC <<EOF
4362 #include <sys/types.h>
4363 #include <sys/uio.h>
4364 #include <unistd.h>
4365 int main(void) { return preadv(0, 0, 0, 0); }
4367 preadv=no
4368 if compile_prog "" "" ; then
4369 preadv=yes
4372 ##########################################
4373 # fdt probe
4374 # fdt support is mandatory for at least some target architectures,
4375 # so insist on it if we're building those system emulators.
4376 fdt_required=no
4377 for target in $target_list; do
4378 case $target in
4379 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4380 fdt_required=yes
4382 esac
4383 done
4385 if test "$fdt_required" = "yes"; then
4386 if test "$fdt" = "no"; then
4387 error_exit "fdt disabled but some requested targets require it." \
4388 "You can turn off fdt only if you also disable all the system emulation" \
4389 "targets which need it (by specifying a cut down --target-list)."
4391 fdt=yes
4392 elif test "$fdt" != "yes" ; then
4393 fdt=no
4396 # fdt is only required when building softmmu targets
4397 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4398 fdt="no"
4401 if test "$fdt" != "no" ; then
4402 fdt_libs="-lfdt"
4403 # explicitly check for libfdt_env.h as it is missing in some stable installs
4404 # and test for required functions to make sure we are on a version >= 1.4.2
4405 cat > $TMPC << EOF
4406 #include <libfdt.h>
4407 #include <libfdt_env.h>
4408 int main(void) { fdt_check_full(NULL, 0); return 0; }
4410 if compile_prog "" "$fdt_libs" ; then
4411 # system DTC is good - use it
4412 fdt=system
4413 else
4414 # have GIT checkout, so activate dtc submodule
4415 if test -e "${source_path}/.git" ; then
4416 git_submodules="${git_submodules} dtc"
4418 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4419 fdt=git
4420 mkdir -p dtc
4421 if [ "$pwd_is_source_path" != "y" ] ; then
4422 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4424 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4425 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4426 fdt_libs="$fdt_libs"
4427 elif test "$fdt" = "yes" ; then
4428 # Not a git build & no libfdt found, prompt for system install
4429 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4430 "Please install the DTC (libfdt) devel package"
4431 else
4432 # don't have and don't want
4433 fdt_libs=
4434 fdt=no
4439 libs_softmmu="$libs_softmmu $fdt_libs"
4441 ##########################################
4442 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4444 gbm="no"
4445 if $pkg_config gbm; then
4446 gbm_cflags="$($pkg_config --cflags gbm)"
4447 gbm_libs="$($pkg_config --libs gbm)"
4448 gbm="yes"
4451 if test "$opengl" != "no" ; then
4452 opengl_pkgs="epoxy gbm"
4453 if $pkg_config $opengl_pkgs; then
4454 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4455 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4456 opengl=yes
4457 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4458 gtk_gl="yes"
4460 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4461 else
4462 if test "$opengl" = "yes" ; then
4463 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4465 opengl_cflags=""
4466 opengl_libs=""
4467 opengl=no
4471 if test "$opengl" = "yes"; then
4472 cat > $TMPC << EOF
4473 #include <epoxy/egl.h>
4474 #ifndef EGL_MESA_image_dma_buf_export
4475 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4476 #endif
4477 int main(void) { return 0; }
4479 if compile_prog "" "" ; then
4480 opengl_dmabuf=yes
4484 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4485 for target in $target_list; do
4486 case $target in
4487 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4488 need_x11=yes
4490 esac
4491 done
4494 ##########################################
4495 # libxml2 probe
4496 if test "$libxml2" != "no" ; then
4497 if $pkg_config --exists libxml-2.0; then
4498 libxml2="yes"
4499 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4500 libxml2_libs=$($pkg_config --libs libxml-2.0)
4501 else
4502 if test "$libxml2" = "yes"; then
4503 feature_not_found "libxml2" "Install libxml2 devel"
4505 libxml2="no"
4509 ##########################################
4510 # glusterfs probe
4511 if test "$glusterfs" != "no" ; then
4512 if $pkg_config --atleast-version=3 glusterfs-api; then
4513 glusterfs="yes"
4514 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4515 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4516 if $pkg_config --atleast-version=4 glusterfs-api; then
4517 glusterfs_xlator_opt="yes"
4519 if $pkg_config --atleast-version=5 glusterfs-api; then
4520 glusterfs_discard="yes"
4522 if $pkg_config --atleast-version=6 glusterfs-api; then
4523 glusterfs_fallocate="yes"
4524 glusterfs_zerofill="yes"
4526 cat > $TMPC << EOF
4527 #include <glusterfs/api/glfs.h>
4530 main(void)
4532 /* new glfs_ftruncate() passes two additional args */
4533 return glfs_ftruncate(NULL, 0, NULL, NULL);
4536 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4537 glusterfs_ftruncate_has_stat="yes"
4539 cat > $TMPC << EOF
4540 #include <glusterfs/api/glfs.h>
4542 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4543 static void
4544 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4548 main(void)
4550 glfs_io_cbk iocb = &glusterfs_iocb;
4551 iocb(NULL, 0 , NULL, NULL, NULL);
4552 return 0;
4555 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4556 glusterfs_iocb_has_stat="yes"
4558 else
4559 if test "$glusterfs" = "yes" ; then
4560 feature_not_found "GlusterFS backend support" \
4561 "Install glusterfs-api devel >= 3"
4563 glusterfs="no"
4567 # Check for inotify functions when we are building linux-user
4568 # emulator. This is done because older glibc versions don't
4569 # have syscall stubs for these implemented. In that case we
4570 # don't provide them even if kernel supports them.
4572 inotify=no
4573 cat > $TMPC << EOF
4574 #include <sys/inotify.h>
4577 main(void)
4579 /* try to start inotify */
4580 return inotify_init();
4583 if compile_prog "" "" ; then
4584 inotify=yes
4587 inotify1=no
4588 cat > $TMPC << EOF
4589 #include <sys/inotify.h>
4592 main(void)
4594 /* try to start inotify */
4595 return inotify_init1(0);
4598 if compile_prog "" "" ; then
4599 inotify1=yes
4602 # check if pipe2 is there
4603 pipe2=no
4604 cat > $TMPC << EOF
4605 #include <unistd.h>
4606 #include <fcntl.h>
4608 int main(void)
4610 int pipefd[2];
4611 return pipe2(pipefd, O_CLOEXEC);
4614 if compile_prog "" "" ; then
4615 pipe2=yes
4618 # check if accept4 is there
4619 accept4=no
4620 cat > $TMPC << EOF
4621 #include <sys/socket.h>
4622 #include <stddef.h>
4624 int main(void)
4626 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4627 return 0;
4630 if compile_prog "" "" ; then
4631 accept4=yes
4634 # check if tee/splice is there. vmsplice was added same time.
4635 splice=no
4636 cat > $TMPC << EOF
4637 #include <unistd.h>
4638 #include <fcntl.h>
4639 #include <limits.h>
4641 int main(void)
4643 int len, fd = 0;
4644 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4645 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4646 return 0;
4649 if compile_prog "" "" ; then
4650 splice=yes
4653 ##########################################
4654 # libnuma probe
4656 if test "$numa" != "no" ; then
4657 cat > $TMPC << EOF
4658 #include <numa.h>
4659 int main(void) { return numa_available(); }
4662 if compile_prog "" "-lnuma" ; then
4663 numa=yes
4664 libs_softmmu="-lnuma $libs_softmmu"
4665 else
4666 if test "$numa" = "yes" ; then
4667 feature_not_found "numa" "install numactl devel"
4669 numa=no
4673 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4674 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4675 exit 1
4678 # Even if malloc_trim() is available, these non-libc memory allocators
4679 # do not support it.
4680 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4681 if test "$malloc_trim" = "yes" ; then
4682 echo "Disabling malloc_trim with non-libc memory allocator"
4684 malloc_trim="no"
4687 #######################################
4688 # malloc_trim
4690 if test "$malloc_trim" != "no" ; then
4691 cat > $TMPC << EOF
4692 #include <malloc.h>
4693 int main(void) { malloc_trim(0); return 0; }
4695 if compile_prog "" "" ; then
4696 malloc_trim="yes"
4697 else
4698 malloc_trim="no"
4702 ##########################################
4703 # tcmalloc probe
4705 if test "$tcmalloc" = "yes" ; then
4706 cat > $TMPC << EOF
4707 #include <stdlib.h>
4708 int main(void) {
4709 void *tmp = malloc(1);
4710 if (tmp != NULL) {
4711 return 0;
4713 return 1;
4717 if compile_prog "" "-ltcmalloc" ; then
4718 LIBS="-ltcmalloc $LIBS"
4719 else
4720 feature_not_found "tcmalloc" "install gperftools devel"
4724 ##########################################
4725 # jemalloc probe
4727 if test "$jemalloc" = "yes" ; then
4728 cat > $TMPC << EOF
4729 #include <stdlib.h>
4730 int main(void) {
4731 void *tmp = malloc(1);
4732 if (tmp != NULL) {
4733 return 0;
4735 return 1;
4739 if compile_prog "" "-ljemalloc" ; then
4740 LIBS="-ljemalloc $LIBS"
4741 else
4742 feature_not_found "jemalloc" "install jemalloc devel"
4746 ##########################################
4747 # signalfd probe
4748 signalfd="no"
4749 cat > $TMPC << EOF
4750 #include <unistd.h>
4751 #include <sys/syscall.h>
4752 #include <signal.h>
4753 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4756 if compile_prog "" "" ; then
4757 signalfd=yes
4760 # check if optreset global is declared by <getopt.h>
4761 optreset="no"
4762 cat > $TMPC << EOF
4763 #include <getopt.h>
4764 int main(void) { return optreset; }
4767 if compile_prog "" "" ; then
4768 optreset=yes
4771 # check if eventfd is supported
4772 eventfd=no
4773 cat > $TMPC << EOF
4774 #include <sys/eventfd.h>
4776 int main(void)
4778 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4781 if compile_prog "" "" ; then
4782 eventfd=yes
4785 # check if memfd is supported
4786 memfd=no
4787 cat > $TMPC << EOF
4788 #include <sys/mman.h>
4790 int main(void)
4792 return memfd_create("foo", MFD_ALLOW_SEALING);
4795 if compile_prog "" "" ; then
4796 memfd=yes
4799 # check for usbfs
4800 have_usbfs=no
4801 if test "$linux_user" = "yes"; then
4802 cat > $TMPC << EOF
4803 #include <linux/usbdevice_fs.h>
4805 #ifndef USBDEVFS_GET_CAPABILITIES
4806 #error "USBDEVFS_GET_CAPABILITIES undefined"
4807 #endif
4809 #ifndef USBDEVFS_DISCONNECT_CLAIM
4810 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4811 #endif
4813 int main(void)
4815 return 0;
4818 if compile_prog "" ""; then
4819 have_usbfs=yes
4823 # check for fallocate
4824 fallocate=no
4825 cat > $TMPC << EOF
4826 #include <fcntl.h>
4828 int main(void)
4830 fallocate(0, 0, 0, 0);
4831 return 0;
4834 if compile_prog "" "" ; then
4835 fallocate=yes
4838 # check for fallocate hole punching
4839 fallocate_punch_hole=no
4840 cat > $TMPC << EOF
4841 #include <fcntl.h>
4842 #include <linux/falloc.h>
4844 int main(void)
4846 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4847 return 0;
4850 if compile_prog "" "" ; then
4851 fallocate_punch_hole=yes
4854 # check that fallocate supports range zeroing inside the file
4855 fallocate_zero_range=no
4856 cat > $TMPC << EOF
4857 #include <fcntl.h>
4858 #include <linux/falloc.h>
4860 int main(void)
4862 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4863 return 0;
4866 if compile_prog "" "" ; then
4867 fallocate_zero_range=yes
4870 # check for posix_fallocate
4871 posix_fallocate=no
4872 cat > $TMPC << EOF
4873 #include <fcntl.h>
4875 int main(void)
4877 posix_fallocate(0, 0, 0);
4878 return 0;
4881 if compile_prog "" "" ; then
4882 posix_fallocate=yes
4885 # check for sync_file_range
4886 sync_file_range=no
4887 cat > $TMPC << EOF
4888 #include <fcntl.h>
4890 int main(void)
4892 sync_file_range(0, 0, 0, 0);
4893 return 0;
4896 if compile_prog "" "" ; then
4897 sync_file_range=yes
4900 # check for linux/fiemap.h and FS_IOC_FIEMAP
4901 fiemap=no
4902 cat > $TMPC << EOF
4903 #include <sys/ioctl.h>
4904 #include <linux/fs.h>
4905 #include <linux/fiemap.h>
4907 int main(void)
4909 ioctl(0, FS_IOC_FIEMAP, 0);
4910 return 0;
4913 if compile_prog "" "" ; then
4914 fiemap=yes
4917 # check for dup3
4918 dup3=no
4919 cat > $TMPC << EOF
4920 #include <unistd.h>
4922 int main(void)
4924 dup3(0, 0, 0);
4925 return 0;
4928 if compile_prog "" "" ; then
4929 dup3=yes
4932 # check for ppoll support
4933 ppoll=no
4934 cat > $TMPC << EOF
4935 #include <poll.h>
4937 int main(void)
4939 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4940 ppoll(&pfd, 1, 0, 0);
4941 return 0;
4944 if compile_prog "" "" ; then
4945 ppoll=yes
4948 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4949 prctl_pr_set_timerslack=no
4950 cat > $TMPC << EOF
4951 #include <sys/prctl.h>
4953 int main(void)
4955 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4956 return 0;
4959 if compile_prog "" "" ; then
4960 prctl_pr_set_timerslack=yes
4963 # check for epoll support
4964 epoll=no
4965 cat > $TMPC << EOF
4966 #include <sys/epoll.h>
4968 int main(void)
4970 epoll_create(0);
4971 return 0;
4974 if compile_prog "" "" ; then
4975 epoll=yes
4978 # epoll_create1 is a later addition
4979 # so we must check separately for its presence
4980 epoll_create1=no
4981 cat > $TMPC << EOF
4982 #include <sys/epoll.h>
4984 int main(void)
4986 /* Note that we use epoll_create1 as a value, not as
4987 * a function being called. This is necessary so that on
4988 * old SPARC glibc versions where the function was present in
4989 * the library but not declared in the header file we will
4990 * fail the configure check. (Otherwise we will get a compiler
4991 * warning but not an error, and will proceed to fail the
4992 * qemu compile where we compile with -Werror.)
4994 return (int)(uintptr_t)&epoll_create1;
4997 if compile_prog "" "" ; then
4998 epoll_create1=yes
5001 # check for sendfile support
5002 sendfile=no
5003 cat > $TMPC << EOF
5004 #include <sys/sendfile.h>
5006 int main(void)
5008 return sendfile(0, 0, 0, 0);
5011 if compile_prog "" "" ; then
5012 sendfile=yes
5015 # check for timerfd support (glibc 2.8 and newer)
5016 timerfd=no
5017 cat > $TMPC << EOF
5018 #include <sys/timerfd.h>
5020 int main(void)
5022 return(timerfd_create(CLOCK_REALTIME, 0));
5025 if compile_prog "" "" ; then
5026 timerfd=yes
5029 # check for setns and unshare support
5030 setns=no
5031 cat > $TMPC << EOF
5032 #include <sched.h>
5034 int main(void)
5036 int ret;
5037 ret = setns(0, 0);
5038 ret = unshare(0);
5039 return ret;
5042 if compile_prog "" "" ; then
5043 setns=yes
5046 # clock_adjtime probe
5047 clock_adjtime=no
5048 cat > $TMPC <<EOF
5049 #include <time.h>
5051 int main(void)
5053 return clock_adjtime(0, 0);
5056 clock_adjtime=no
5057 if compile_prog "" "" ; then
5058 clock_adjtime=yes
5061 # syncfs probe
5062 syncfs=no
5063 cat > $TMPC <<EOF
5064 #include <unistd.h>
5066 int main(void)
5068 return syncfs(0);
5071 syncfs=no
5072 if compile_prog "" "" ; then
5073 syncfs=yes
5076 # check for kcov support (kernel must be 4.4+, compiled with certain options)
5077 kcov=no
5078 if check_include sys/kcov.h ; then
5079 kcov=yes
5082 # If we're making warnings fatal, apply this to Sphinx runs as well
5083 sphinx_werror=""
5084 if test "$werror" = "yes"; then
5085 sphinx_werror="-W"
5088 # Check we have a new enough version of sphinx-build
5089 has_sphinx_build() {
5090 # This is a bit awkward but works: create a trivial document and
5091 # try to run it with our configuration file (which enforces a
5092 # version requirement). This will fail if either
5093 # sphinx-build doesn't exist at all or if it is too old.
5094 mkdir -p "$TMPDIR1/sphinx"
5095 touch "$TMPDIR1/sphinx/index.rst"
5096 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5097 -b html "$TMPDIR1/sphinx" \
5098 "$TMPDIR1/sphinx/out" >> config.log 2>&1
5101 # Check if tools are available to build documentation.
5102 if test "$docs" != "no" ; then
5103 if has_sphinx_build; then
5104 sphinx_ok=yes
5105 else
5106 sphinx_ok=no
5108 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5109 docs=yes
5110 else
5111 if test "$docs" = "yes" ; then
5112 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5113 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5115 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5117 docs=no
5121 # Search for bswap_32 function
5122 byteswap_h=no
5123 cat > $TMPC << EOF
5124 #include <byteswap.h>
5125 int main(void) { return bswap_32(0); }
5127 if compile_prog "" "" ; then
5128 byteswap_h=yes
5131 # Search for bswap32 function
5132 bswap_h=no
5133 cat > $TMPC << EOF
5134 #include <sys/endian.h>
5135 #include <sys/types.h>
5136 #include <machine/bswap.h>
5137 int main(void) { return bswap32(0); }
5139 if compile_prog "" "" ; then
5140 bswap_h=yes
5143 ##########################################
5144 # Do we have libiscsi >= 1.9.0
5145 if test "$libiscsi" != "no" ; then
5146 if $pkg_config --atleast-version=1.9.0 libiscsi; then
5147 libiscsi="yes"
5148 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5149 libiscsi_libs=$($pkg_config --libs libiscsi)
5150 else
5151 if test "$libiscsi" = "yes" ; then
5152 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5154 libiscsi="no"
5158 ##########################################
5159 # Do we need libm
5160 cat > $TMPC << EOF
5161 #include <math.h>
5162 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5164 if compile_prog "" "" ; then
5166 elif compile_prog "" "-lm" ; then
5167 LIBS="-lm $LIBS"
5168 libs_qga="-lm $libs_qga"
5169 else
5170 error_exit "libm check failed"
5173 ##########################################
5174 # Do we need librt
5175 # uClibc provides 2 versions of clock_gettime(), one with realtime
5176 # support and one without. This means that the clock_gettime() don't
5177 # need -lrt. We still need it for timer_create() so we check for this
5178 # function in addition.
5179 cat > $TMPC <<EOF
5180 #include <signal.h>
5181 #include <time.h>
5182 int main(void) {
5183 timer_create(CLOCK_REALTIME, NULL, NULL);
5184 return clock_gettime(CLOCK_REALTIME, NULL);
5188 if compile_prog "" "" ; then
5190 # we need pthread for static linking. use previous pthread test result
5191 elif compile_prog "" "$pthread_lib -lrt" ; then
5192 LIBS="$LIBS -lrt"
5193 libs_qga="$libs_qga -lrt"
5196 # Check whether we need to link libutil for openpty()
5197 cat > $TMPC << EOF
5198 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5199 int main(void) { return openpty(0, 0, 0, 0, 0); }
5202 have_openpty="no"
5203 if compile_prog "" "" ; then
5204 have_openpty="yes"
5205 else
5206 if compile_prog "" "-lutil" ; then
5207 libs_softmmu="-lutil $libs_softmmu"
5208 libs_tools="-lutil $libs_tools"
5209 have_openpty="yes"
5213 ##########################################
5214 # spice probe
5215 if test "$spice" != "no" ; then
5216 cat > $TMPC << EOF
5217 #include <spice.h>
5218 int main(void) { spice_server_new(); return 0; }
5220 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5221 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5222 if $pkg_config --atleast-version=0.12.5 spice-server && \
5223 $pkg_config --atleast-version=0.12.3 spice-protocol && \
5224 compile_prog "$spice_cflags" "$spice_libs" ; then
5225 spice="yes"
5226 libs_softmmu="$libs_softmmu $spice_libs"
5227 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5228 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5229 spice_server_version=$($pkg_config --modversion spice-server)
5230 else
5231 if test "$spice" = "yes" ; then
5232 feature_not_found "spice" \
5233 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5235 spice="no"
5239 # check for smartcard support
5240 if test "$smartcard" != "no"; then
5241 if $pkg_config --atleast-version=2.5.1 libcacard; then
5242 libcacard_cflags=$($pkg_config --cflags libcacard)
5243 libcacard_libs=$($pkg_config --libs libcacard)
5244 smartcard="yes"
5245 else
5246 if test "$smartcard" = "yes"; then
5247 feature_not_found "smartcard" "Install libcacard devel"
5249 smartcard="no"
5253 # check for libusb
5254 if test "$libusb" != "no" ; then
5255 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5256 libusb="yes"
5257 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5258 libusb_libs=$($pkg_config --libs libusb-1.0)
5259 else
5260 if test "$libusb" = "yes"; then
5261 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5263 libusb="no"
5267 # check for usbredirparser for usb network redirection support
5268 if test "$usb_redir" != "no" ; then
5269 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5270 usb_redir="yes"
5271 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5272 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5273 else
5274 if test "$usb_redir" = "yes"; then
5275 feature_not_found "usb-redir" "Install usbredir devel"
5277 usb_redir="no"
5281 ##########################################
5282 # check if we have VSS SDK headers for win
5284 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5285 test "$vss_win32_sdk" != "no" ; then
5286 case "$vss_win32_sdk" in
5287 "") vss_win32_include="-isystem $source_path" ;;
5288 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5289 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5290 vss_win32_include="-isystem $source_path/.sdk/vss"
5291 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5293 *) vss_win32_include="-isystem $vss_win32_sdk"
5294 esac
5295 cat > $TMPC << EOF
5296 #define __MIDL_user_allocate_free_DEFINED__
5297 #include <inc/win2003/vss.h>
5298 int main(void) { return VSS_CTX_BACKUP; }
5300 if compile_prog "$vss_win32_include" "" ; then
5301 guest_agent_with_vss="yes"
5302 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5303 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5304 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5305 else
5306 if test "$vss_win32_sdk" != "" ; then
5307 echo "ERROR: Please download and install Microsoft VSS SDK:"
5308 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5309 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5310 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5311 echo "ERROR: The headers are extracted in the directory \`inc'."
5312 feature_not_found "VSS support"
5314 guest_agent_with_vss="no"
5318 ##########################################
5319 # lookup Windows platform SDK (if not specified)
5320 # The SDK is needed only to build .tlb (type library) file of guest agent
5321 # VSS provider from the source. It is usually unnecessary because the
5322 # pre-compiled .tlb file is included.
5324 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5325 test "$guest_agent_with_vss" = "yes" ; then
5326 if test -z "$win_sdk"; then
5327 programfiles="$PROGRAMFILES"
5328 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5329 if test -n "$programfiles"; then
5330 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5331 else
5332 feature_not_found "Windows SDK"
5334 elif test "$win_sdk" = "no"; then
5335 win_sdk=""
5339 ##########################################
5340 # check if mingw environment provides a recent ntddscsi.h
5341 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5342 cat > $TMPC << EOF
5343 #include <windows.h>
5344 #include <ntddscsi.h>
5345 int main(void) {
5346 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5347 #error Missing required ioctl definitions
5348 #endif
5349 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5350 return addr.Lun;
5353 if compile_prog "" "" ; then
5354 guest_agent_ntddscsi=yes
5355 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5359 ##########################################
5360 # virgl renderer probe
5362 if test "$virglrenderer" != "no" ; then
5363 cat > $TMPC << EOF
5364 #include <virglrenderer.h>
5365 int main(void) { virgl_renderer_poll(); return 0; }
5367 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5368 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5369 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5370 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5371 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5372 virglrenderer="yes"
5373 else
5374 if test "$virglrenderer" = "yes" ; then
5375 feature_not_found "virglrenderer"
5377 virglrenderer="no"
5381 ##########################################
5382 # capstone
5384 case "$capstone" in
5385 "" | yes)
5386 if $pkg_config capstone; then
5387 capstone=system
5388 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5389 capstone=git
5390 elif test -e "${source_path}/capstone/Makefile" ; then
5391 capstone=internal
5392 elif test -z "$capstone" ; then
5393 capstone=no
5394 else
5395 feature_not_found "capstone" "Install capstone devel or git submodule"
5399 system)
5400 if ! $pkg_config capstone; then
5401 feature_not_found "capstone" "Install capstone devel"
5404 esac
5406 case "$capstone" in
5407 git | internal)
5408 if test "$capstone" = git; then
5409 git_submodules="${git_submodules} capstone"
5411 mkdir -p capstone
5412 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5413 if test "$mingw32" = "yes"; then
5414 LIBCAPSTONE=capstone.lib
5415 else
5416 LIBCAPSTONE=libcapstone.a
5418 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5421 system)
5422 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5423 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5429 error_exit "Unknown state for capstone: $capstone"
5431 esac
5433 ##########################################
5434 # check if we have fdatasync
5436 fdatasync=no
5437 cat > $TMPC << EOF
5438 #include <unistd.h>
5439 int main(void) {
5440 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5441 return fdatasync(0);
5442 #else
5443 #error Not supported
5444 #endif
5447 if compile_prog "" "" ; then
5448 fdatasync=yes
5451 ##########################################
5452 # check if we have madvise
5454 madvise=no
5455 cat > $TMPC << EOF
5456 #include <sys/types.h>
5457 #include <sys/mman.h>
5458 #include <stddef.h>
5459 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5461 if compile_prog "" "" ; then
5462 madvise=yes
5465 ##########################################
5466 # check if we have posix_madvise
5468 posix_madvise=no
5469 cat > $TMPC << EOF
5470 #include <sys/mman.h>
5471 #include <stddef.h>
5472 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5474 if compile_prog "" "" ; then
5475 posix_madvise=yes
5478 ##########################################
5479 # check if we have posix_memalign()
5481 posix_memalign=no
5482 cat > $TMPC << EOF
5483 #include <stdlib.h>
5484 int main(void) {
5485 void *p;
5486 return posix_memalign(&p, 8, 8);
5489 if compile_prog "" "" ; then
5490 posix_memalign=yes
5493 ##########################################
5494 # check if we have posix_syslog
5496 posix_syslog=no
5497 cat > $TMPC << EOF
5498 #include <syslog.h>
5499 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5501 if compile_prog "" "" ; then
5502 posix_syslog=yes
5505 ##########################################
5506 # check if we have sem_timedwait
5508 sem_timedwait=no
5509 cat > $TMPC << EOF
5510 #include <semaphore.h>
5511 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5513 if compile_prog "" "" ; then
5514 sem_timedwait=yes
5517 ##########################################
5518 # check if we have strchrnul
5520 strchrnul=no
5521 cat > $TMPC << EOF
5522 #include <string.h>
5523 int main(void);
5524 // Use a haystack that the compiler shouldn't be able to constant fold
5525 char *haystack = (char*)&main;
5526 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5528 if compile_prog "" "" ; then
5529 strchrnul=yes
5532 #########################################
5533 # check if we have st_atim
5535 st_atim=no
5536 cat > $TMPC << EOF
5537 #include <sys/stat.h>
5538 #include <stddef.h>
5539 int main(void) { return offsetof(struct stat, st_atim); }
5541 if compile_prog "" "" ; then
5542 st_atim=yes
5545 ##########################################
5546 # check if trace backend exists
5548 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5549 if test "$?" -ne 0 ; then
5550 error_exit "invalid trace backends" \
5551 "Please choose supported trace backends."
5554 ##########################################
5555 # For 'ust' backend, test if ust headers are present
5556 if have_backend "ust"; then
5557 cat > $TMPC << EOF
5558 #include <lttng/tracepoint.h>
5559 int main(void) { return 0; }
5561 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5562 if $pkg_config lttng-ust --exists; then
5563 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5564 else
5565 lttng_ust_libs="-llttng-ust -ldl"
5567 if $pkg_config liburcu-bp --exists; then
5568 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5569 else
5570 urcu_bp_libs="-lurcu-bp"
5573 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5574 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5575 else
5576 error_exit "Trace backend 'ust' missing lttng-ust header files"
5580 ##########################################
5581 # For 'dtrace' backend, test if 'dtrace' command is present
5582 if have_backend "dtrace"; then
5583 if ! has 'dtrace' ; then
5584 error_exit "dtrace command is not found in PATH $PATH"
5586 trace_backend_stap="no"
5587 if has 'stap' ; then
5588 trace_backend_stap="yes"
5592 ##########################################
5593 # check and set a backend for coroutine
5595 # We prefer ucontext, but it's not always possible. The fallback
5596 # is sigcontext. On Windows the only valid backend is the Windows
5597 # specific one.
5599 ucontext_works=no
5600 if test "$darwin" != "yes"; then
5601 cat > $TMPC << EOF
5602 #include <ucontext.h>
5603 #ifdef __stub_makecontext
5604 #error Ignoring glibc stub makecontext which will always fail
5605 #endif
5606 int main(void) { makecontext(0, 0, 0); return 0; }
5608 if compile_prog "" "" ; then
5609 ucontext_works=yes
5613 if test "$coroutine" = ""; then
5614 if test "$mingw32" = "yes"; then
5615 coroutine=win32
5616 elif test "$ucontext_works" = "yes"; then
5617 coroutine=ucontext
5618 else
5619 coroutine=sigaltstack
5621 else
5622 case $coroutine in
5623 windows)
5624 if test "$mingw32" != "yes"; then
5625 error_exit "'windows' coroutine backend only valid for Windows"
5627 # Unfortunately the user visible backend name doesn't match the
5628 # coroutine-*.c filename for this case, so we have to adjust it here.
5629 coroutine=win32
5631 ucontext)
5632 if test "$ucontext_works" != "yes"; then
5633 feature_not_found "ucontext"
5636 sigaltstack)
5637 if test "$mingw32" = "yes"; then
5638 error_exit "only the 'windows' coroutine backend is valid for Windows"
5642 error_exit "unknown coroutine backend $coroutine"
5644 esac
5647 if test "$coroutine_pool" = ""; then
5648 coroutine_pool=yes
5651 if test "$debug_stack_usage" = "yes"; then
5652 if test "$coroutine_pool" = "yes"; then
5653 echo "WARN: disabling coroutine pool for stack usage debugging"
5654 coroutine_pool=no
5658 ##################################################
5659 # SafeStack
5662 if test "$safe_stack" = "yes"; then
5663 cat > $TMPC << EOF
5664 int main(int argc, char *argv[])
5666 #if ! __has_feature(safe_stack)
5667 #error SafeStack Disabled
5668 #endif
5669 return 0;
5672 flag="-fsanitize=safe-stack"
5673 # Check that safe-stack is supported and enabled.
5674 if compile_prog "-Werror $flag" "$flag"; then
5675 # Flag needed both at compilation and at linking
5676 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5677 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5678 else
5679 error_exit "SafeStack not supported by your compiler"
5681 if test "$coroutine" != "ucontext"; then
5682 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5684 else
5685 cat > $TMPC << EOF
5686 int main(int argc, char *argv[])
5688 #if defined(__has_feature)
5689 #if __has_feature(safe_stack)
5690 #error SafeStack Enabled
5691 #endif
5692 #endif
5693 return 0;
5696 if test "$safe_stack" = "no"; then
5697 # Make sure that safe-stack is disabled
5698 if ! compile_prog "-Werror" ""; then
5699 # SafeStack was already enabled, try to explicitly remove the feature
5700 flag="-fno-sanitize=safe-stack"
5701 if ! compile_prog "-Werror $flag" "$flag"; then
5702 error_exit "Configure cannot disable SafeStack"
5704 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5705 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5707 else # "$safe_stack" = ""
5708 # Set safe_stack to yes or no based on pre-existing flags
5709 if compile_prog "-Werror" ""; then
5710 safe_stack="no"
5711 else
5712 safe_stack="yes"
5713 if test "$coroutine" != "ucontext"; then
5714 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5720 ##########################################
5721 # check if we have open_by_handle_at
5723 open_by_handle_at=no
5724 cat > $TMPC << EOF
5725 #include <fcntl.h>
5726 #if !defined(AT_EMPTY_PATH)
5727 # error missing definition
5728 #else
5729 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5730 #endif
5732 if compile_prog "" "" ; then
5733 open_by_handle_at=yes
5736 ########################################
5737 # check if we have linux/magic.h
5739 linux_magic_h=no
5740 cat > $TMPC << EOF
5741 #include <linux/magic.h>
5742 int main(void) {
5743 return 0;
5746 if compile_prog "" "" ; then
5747 linux_magic_h=yes
5750 ########################################
5751 # check if we have valgrind/valgrind.h
5753 valgrind_h=no
5754 cat > $TMPC << EOF
5755 #include <valgrind/valgrind.h>
5756 int main(void) {
5757 return 0;
5760 if compile_prog "" "" ; then
5761 valgrind_h=yes
5764 ########################################
5765 # check if environ is declared
5767 has_environ=no
5768 cat > $TMPC << EOF
5769 #include <unistd.h>
5770 int main(void) {
5771 environ = 0;
5772 return 0;
5775 if compile_prog "" "" ; then
5776 has_environ=yes
5779 ########################################
5780 # check if cpuid.h is usable.
5782 cat > $TMPC << EOF
5783 #include <cpuid.h>
5784 int main(void) {
5785 unsigned a, b, c, d;
5786 int max = __get_cpuid_max(0, 0);
5788 if (max >= 1) {
5789 __cpuid(1, a, b, c, d);
5792 if (max >= 7) {
5793 __cpuid_count(7, 0, a, b, c, d);
5796 return 0;
5799 if compile_prog "" "" ; then
5800 cpuid_h=yes
5803 ##########################################
5804 # avx2 optimization requirement check
5806 # There is no point enabling this if cpuid.h is not usable,
5807 # since we won't be able to select the new routines.
5809 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5810 cat > $TMPC << EOF
5811 #pragma GCC push_options
5812 #pragma GCC target("avx2")
5813 #include <cpuid.h>
5814 #include <immintrin.h>
5815 static int bar(void *a) {
5816 __m256i x = *(__m256i *)a;
5817 return _mm256_testz_si256(x, x);
5819 int main(int argc, char *argv[]) { return bar(argv[0]); }
5821 if compile_object "" ; then
5822 avx2_opt="yes"
5823 else
5824 avx2_opt="no"
5828 ##########################################
5829 # avx512f optimization requirement check
5831 # There is no point enabling this if cpuid.h is not usable,
5832 # since we won't be able to select the new routines.
5833 # by default, it is turned off.
5834 # if user explicitly want to enable it, check environment
5836 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5837 cat > $TMPC << EOF
5838 #pragma GCC push_options
5839 #pragma GCC target("avx512f")
5840 #include <cpuid.h>
5841 #include <immintrin.h>
5842 static int bar(void *a) {
5843 __m512i x = *(__m512i *)a;
5844 return _mm512_test_epi64_mask(x, x);
5846 int main(int argc, char *argv[])
5848 return bar(argv[0]);
5851 if ! compile_object "" ; then
5852 avx512f_opt="no"
5854 else
5855 avx512f_opt="no"
5858 ########################################
5859 # check if __[u]int128_t is usable.
5861 int128=no
5862 cat > $TMPC << EOF
5863 __int128_t a;
5864 __uint128_t b;
5865 int main (void) {
5866 a = a + b;
5867 b = a * b;
5868 a = a * a;
5869 return 0;
5872 if compile_prog "" "" ; then
5873 int128=yes
5876 #########################################
5877 # See if 128-bit atomic operations are supported.
5879 atomic128=no
5880 if test "$int128" = "yes"; then
5881 cat > $TMPC << EOF
5882 int main(void)
5884 unsigned __int128 x = 0, y = 0;
5885 y = __atomic_load_16(&x, 0);
5886 __atomic_store_16(&x, y, 0);
5887 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5888 return 0;
5891 if compile_prog "" "" ; then
5892 atomic128=yes
5896 cmpxchg128=no
5897 if test "$int128" = yes && test "$atomic128" = no; then
5898 cat > $TMPC << EOF
5899 int main(void)
5901 unsigned __int128 x = 0, y = 0;
5902 __sync_val_compare_and_swap_16(&x, y, x);
5903 return 0;
5906 if compile_prog "" "" ; then
5907 cmpxchg128=yes
5911 #########################################
5912 # See if 64-bit atomic operations are supported.
5913 # Note that without __atomic builtins, we can only
5914 # assume atomic loads/stores max at pointer size.
5916 cat > $TMPC << EOF
5917 #include <stdint.h>
5918 int main(void)
5920 uint64_t x = 0, y = 0;
5921 #ifdef __ATOMIC_RELAXED
5922 y = __atomic_load_8(&x, 0);
5923 __atomic_store_8(&x, y, 0);
5924 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5925 __atomic_exchange_8(&x, y, 0);
5926 __atomic_fetch_add_8(&x, y, 0);
5927 #else
5928 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5929 __sync_lock_test_and_set(&x, y);
5930 __sync_val_compare_and_swap(&x, y, 0);
5931 __sync_fetch_and_add(&x, y);
5932 #endif
5933 return 0;
5936 if compile_prog "" "" ; then
5937 atomic64=yes
5940 #########################################
5941 # See if --dynamic-list is supported by the linker
5942 ld_dynamic_list="no"
5943 if test "$static" = "no" ; then
5944 cat > $TMPTXT <<EOF
5946 foo;
5950 cat > $TMPC <<EOF
5951 #include <stdio.h>
5952 void foo(void);
5954 void foo(void)
5956 printf("foo\n");
5959 int main(void)
5961 foo();
5962 return 0;
5966 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5967 ld_dynamic_list="yes"
5971 #########################################
5972 # See if -exported_symbols_list is supported by the linker
5974 ld_exported_symbols_list="no"
5975 if test "$static" = "no" ; then
5976 cat > $TMPTXT <<EOF
5977 _foo
5980 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5981 ld_exported_symbols_list="yes"
5985 if test "$plugins" = "yes" &&
5986 test "$ld_dynamic_list" = "no" &&
5987 test "$ld_exported_symbols_list" = "no" ; then
5988 error_exit \
5989 "Plugin support requires dynamic linking and specifying a set of symbols " \
5990 "that are exported to plugins. Unfortunately your linker doesn't " \
5991 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5992 "for this purpose. You can't build with --static."
5995 ########################################
5996 # See if __attribute__((alias)) is supported.
5997 # This false for Xcode 9, but has been remedied for Xcode 10.
5998 # Unfortunately, travis uses Xcode 9 by default.
6000 attralias=no
6001 cat > $TMPC << EOF
6002 int x = 1;
6003 extern const int y __attribute__((alias("x")));
6004 int main(void) { return 0; }
6006 if compile_prog "" "" ; then
6007 attralias=yes
6010 ########################################
6011 # check if getauxval is available.
6013 getauxval=no
6014 cat > $TMPC << EOF
6015 #include <sys/auxv.h>
6016 int main(void) {
6017 return getauxval(AT_HWCAP) == 0;
6020 if compile_prog "" "" ; then
6021 getauxval=yes
6024 ########################################
6025 # check if ccache is interfering with
6026 # semantic analysis of macros
6028 unset CCACHE_CPP2
6029 ccache_cpp2=no
6030 cat > $TMPC << EOF
6031 static const int Z = 1;
6032 #define fn() ({ Z; })
6033 #define TAUT(X) ((X) == Z)
6034 #define PAREN(X, Y) (X == Y)
6035 #define ID(X) (X)
6036 int main(int argc, char *argv[])
6038 int x = 0, y = 0;
6039 x = ID(x);
6040 x = fn();
6041 fn();
6042 if (PAREN(x, y)) return 0;
6043 if (TAUT(Z)) return 0;
6044 return 0;
6048 if ! compile_object "-Werror"; then
6049 ccache_cpp2=yes
6052 #################################################
6053 # clang does not support glibc + FORTIFY_SOURCE.
6055 if test "$fortify_source" != "no"; then
6056 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6057 fortify_source="no";
6058 elif test -n "$cxx" && has $cxx &&
6059 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6060 fortify_source="no";
6061 else
6062 fortify_source="yes"
6066 ###############################################
6067 # Check if copy_file_range is provided by glibc
6068 have_copy_file_range=no
6069 cat > $TMPC << EOF
6070 #include <unistd.h>
6071 int main(void) {
6072 copy_file_range(0, NULL, 0, NULL, 0, 0);
6073 return 0;
6076 if compile_prog "" "" ; then
6077 have_copy_file_range=yes
6080 ##########################################
6081 # check if struct fsxattr is available via linux/fs.h
6083 have_fsxattr=no
6084 cat > $TMPC << EOF
6085 #include <linux/fs.h>
6086 struct fsxattr foo;
6087 int main(void) {
6088 return 0;
6091 if compile_prog "" "" ; then
6092 have_fsxattr=yes
6095 ##########################################
6096 # check for usable membarrier system call
6097 if test "$membarrier" = "yes"; then
6098 have_membarrier=no
6099 if test "$mingw32" = "yes" ; then
6100 have_membarrier=yes
6101 elif test "$linux" = "yes" ; then
6102 cat > $TMPC << EOF
6103 #include <linux/membarrier.h>
6104 #include <sys/syscall.h>
6105 #include <unistd.h>
6106 #include <stdlib.h>
6107 int main(void) {
6108 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6109 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6110 exit(0);
6113 if compile_prog "" "" ; then
6114 have_membarrier=yes
6117 if test "$have_membarrier" = "no"; then
6118 feature_not_found "membarrier" "membarrier system call not available"
6120 else
6121 # Do not enable it by default even for Mingw32, because it doesn't
6122 # work on Wine.
6123 membarrier=no
6126 ##########################################
6127 # check if rtnetlink.h exists and is useful
6128 have_rtnetlink=no
6129 cat > $TMPC << EOF
6130 #include <linux/rtnetlink.h>
6131 int main(void) {
6132 return IFLA_PROTO_DOWN;
6135 if compile_prog "" "" ; then
6136 have_rtnetlink=yes
6139 ##########################################
6140 # check for usable AF_VSOCK environment
6141 have_af_vsock=no
6142 cat > $TMPC << EOF
6143 #include <errno.h>
6144 #include <sys/types.h>
6145 #include <sys/socket.h>
6146 #if !defined(AF_VSOCK)
6147 # error missing AF_VSOCK flag
6148 #endif
6149 #include <linux/vm_sockets.h>
6150 int main(void) {
6151 int sock, ret;
6152 struct sockaddr_vm svm;
6153 socklen_t len = sizeof(svm);
6154 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6155 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6156 if ((ret == -1) && (errno == ENOTCONN)) {
6157 return 0;
6159 return -1;
6162 if compile_prog "" "" ; then
6163 have_af_vsock=yes
6166 ##########################################
6167 # check for usable AF_ALG environment
6168 have_afalg=no
6169 cat > $TMPC << EOF
6170 #include <errno.h>
6171 #include <sys/types.h>
6172 #include <sys/socket.h>
6173 #include <linux/if_alg.h>
6174 int main(void) {
6175 int sock;
6176 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6177 return sock;
6180 if compile_prog "" "" ; then
6181 have_afalg=yes
6183 if test "$crypto_afalg" = "yes"
6184 then
6185 if test "$have_afalg" != "yes"
6186 then
6187 error_exit "AF_ALG requested but could not be detected"
6192 #################################################
6193 # Check to see if we have the Hypervisor framework
6194 if [ "$darwin" = "yes" ] ; then
6195 cat > $TMPC << EOF
6196 #include <Hypervisor/hv.h>
6197 int main() { return 0;}
6199 if ! compile_object ""; then
6200 hvf='no'
6201 else
6202 hvf='yes'
6203 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6207 #################################################
6208 # Sparc implicitly links with --relax, which is
6209 # incompatible with -r, so --no-relax should be
6210 # given. It does no harm to give it on other
6211 # platforms too.
6213 # Note: the prototype is needed since QEMU_CFLAGS
6214 # contains -Wmissing-prototypes
6215 cat > $TMPC << EOF
6216 extern int foo(void);
6217 int foo(void) { return 0; }
6219 if ! compile_object ""; then
6220 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6222 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6223 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6224 LD_REL_FLAGS=$i
6225 break
6227 done
6228 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6229 feature_not_found "modules" "Cannot find how to build relocatable objects"
6232 ##########################################
6233 # check for sysmacros.h
6235 have_sysmacros=no
6236 cat > $TMPC << EOF
6237 #include <sys/sysmacros.h>
6238 int main(void) {
6239 return makedev(0, 0);
6242 if compile_prog "" "" ; then
6243 have_sysmacros=yes
6246 ##########################################
6247 # check for _Static_assert()
6249 have_static_assert=no
6250 cat > $TMPC << EOF
6251 _Static_assert(1, "success");
6252 int main(void) {
6253 return 0;
6256 if compile_prog "" "" ; then
6257 have_static_assert=yes
6260 ##########################################
6261 # check for utmpx.h, it is missing e.g. on OpenBSD
6263 have_utmpx=no
6264 cat > $TMPC << EOF
6265 #include <utmpx.h>
6266 struct utmpx user_info;
6267 int main(void) {
6268 return 0;
6271 if compile_prog "" "" ; then
6272 have_utmpx=yes
6275 ##########################################
6276 # check for getrandom()
6278 have_getrandom=no
6279 cat > $TMPC << EOF
6280 #include <sys/random.h>
6281 int main(void) {
6282 return getrandom(0, 0, GRND_NONBLOCK);
6285 if compile_prog "" "" ; then
6286 have_getrandom=yes
6289 ##########################################
6290 # checks for sanitizers
6292 have_asan=no
6293 have_ubsan=no
6294 have_asan_iface_h=no
6295 have_asan_iface_fiber=no
6297 if test "$sanitizers" = "yes" ; then
6298 write_c_skeleton
6299 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6300 have_asan=yes
6303 # we could use a simple skeleton for flags checks, but this also
6304 # detect the static linking issue of ubsan, see also:
6305 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6306 cat > $TMPC << EOF
6307 #include <stdlib.h>
6308 int main(void) {
6309 void *tmp = malloc(10);
6310 if (tmp != NULL) {
6311 return *(int *)(tmp + 2);
6313 return 1;
6316 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6317 have_ubsan=yes
6320 if check_include "sanitizer/asan_interface.h" ; then
6321 have_asan_iface_h=yes
6324 cat > $TMPC << EOF
6325 #include <sanitizer/asan_interface.h>
6326 int main(void) {
6327 __sanitizer_start_switch_fiber(0, 0, 0);
6328 return 0;
6331 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6332 have_asan_iface_fiber=yes
6336 ##########################################
6337 # checks for fuzzer
6338 if test "$fuzzing" = "yes" ; then
6339 write_c_fuzzer_skeleton
6340 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6341 have_fuzzer=yes
6345 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6346 # keep it separate until that is not the case.
6347 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6348 error_exit "TSAN is not supported with other sanitiziers."
6350 have_tsan=no
6351 have_tsan_iface_fiber=no
6352 if test "$tsan" = "yes" ; then
6353 write_c_skeleton
6354 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6355 have_tsan=yes
6357 cat > $TMPC << EOF
6358 #include <sanitizer/tsan_interface.h>
6359 int main(void) {
6360 __tsan_create_fiber(0);
6361 return 0;
6364 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6365 have_tsan_iface_fiber=yes
6369 ##########################################
6370 # check for libpmem
6372 if test "$libpmem" != "no"; then
6373 if $pkg_config --exists "libpmem"; then
6374 libpmem="yes"
6375 libpmem_libs=$($pkg_config --libs libpmem)
6376 libpmem_cflags=$($pkg_config --cflags libpmem)
6377 libs_softmmu="$libs_softmmu $libpmem_libs"
6378 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6379 else
6380 if test "$libpmem" = "yes" ; then
6381 feature_not_found "libpmem" "Install nvml or pmdk"
6383 libpmem="no"
6387 ##########################################
6388 # check for libdaxctl
6390 if test "$libdaxctl" != "no"; then
6391 if $pkg_config --atleast-version=57 "libdaxctl"; then
6392 libdaxctl="yes"
6393 libdaxctl_libs=$($pkg_config --libs libdaxctl)
6394 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6395 libs_softmmu="$libs_softmmu $libdaxctl_libs"
6396 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
6397 else
6398 if test "$libdaxctl" = "yes" ; then
6399 feature_not_found "libdaxctl" "Install libdaxctl"
6401 libdaxctl="no"
6405 ##########################################
6406 # check for slirp
6408 # slirp is only required when building softmmu targets
6409 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6410 slirp="no"
6413 case "$slirp" in
6414 "" | yes)
6415 if $pkg_config slirp; then
6416 slirp=system
6417 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6418 slirp=git
6419 elif test -e "${source_path}/slirp/Makefile" ; then
6420 slirp=internal
6421 elif test -z "$slirp" ; then
6422 slirp=no
6423 else
6424 feature_not_found "slirp" "Install slirp devel or git submodule"
6428 system)
6429 if ! $pkg_config slirp; then
6430 feature_not_found "slirp" "Install slirp devel"
6433 esac
6435 case "$slirp" in
6436 git | internal)
6437 if test "$slirp" = git; then
6438 git_submodules="${git_submodules} slirp"
6440 mkdir -p slirp
6441 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6442 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
6443 if test "$mingw32" = "yes" ; then
6444 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6448 system)
6449 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6450 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6451 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6457 error_exit "Unknown state for slirp: $slirp"
6459 esac
6461 ##########################################
6462 # check for usable __NR_keyctl syscall
6464 if test "$linux" = "yes" ; then
6466 have_keyring=no
6467 cat > $TMPC << EOF
6468 #include <errno.h>
6469 #include <asm/unistd.h>
6470 #include <linux/keyctl.h>
6471 #include <unistd.h>
6472 int main(void) {
6473 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6476 if compile_prog "" "" ; then
6477 have_keyring=yes
6480 if test "$secret_keyring" != "no"
6481 then
6482 if test "$have_keyring" = "yes"
6483 then
6484 secret_keyring=yes
6485 else
6486 if test "$secret_keyring" = "yes"
6487 then
6488 error_exit "syscall __NR_keyctl requested, \
6489 but not implemented on your system"
6490 else
6491 secret_keyring=no
6496 ##########################################
6497 # check for usable keyutils.h
6499 if test "$linux" = "yes" ; then
6501 have_keyutils=no
6502 cat > $TMPC << EOF
6503 #include <errno.h>
6504 #include <asm/unistd.h>
6505 #include <unistd.h>
6506 #include <sys/types.h>
6507 #include <keyutils.h>
6508 int main(void) {
6509 return request_key("user", NULL, NULL, 0);
6512 if compile_prog "" "-lkeyutils"; then
6513 have_keyutils=yes
6518 ##########################################
6519 # End of CC checks
6520 # After here, no more $cc or $ld runs
6522 write_c_skeleton
6524 if test "$gcov" = "yes" ; then
6525 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6526 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
6527 elif test "$fortify_source" = "yes" ; then
6528 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
6529 elif test "$debug" = "no"; then
6530 CFLAGS="-O2 $CFLAGS"
6533 if test "$have_asan" = "yes"; then
6534 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6535 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6536 if test "$have_asan_iface_h" = "no" ; then
6537 echo "ASAN build enabled, but ASAN header missing." \
6538 "Without code annotation, the report may be inferior."
6539 elif test "$have_asan_iface_fiber" = "no" ; then
6540 echo "ASAN build enabled, but ASAN header is too old." \
6541 "Without code annotation, the report may be inferior."
6544 if test "$have_tsan" = "yes" ; then
6545 if test "$have_tsan_iface_fiber" = "yes" ; then
6546 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6547 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6548 else
6549 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6551 elif test "$tsan" = "yes" ; then
6552 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6554 if test "$have_ubsan" = "yes"; then
6555 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6556 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6559 ##########################################
6560 # Do we have libnfs
6561 if test "$libnfs" != "no" ; then
6562 if $pkg_config --atleast-version=1.9.3 libnfs; then
6563 libnfs="yes"
6564 libnfs_libs=$($pkg_config --libs libnfs)
6565 else
6566 if test "$libnfs" = "yes" ; then
6567 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6569 libnfs="no"
6573 ##########################################
6574 # Do we have libudev
6575 if test "$libudev" != "no" ; then
6576 if $pkg_config libudev && test "$static" != "yes"; then
6577 libudev="yes"
6578 libudev_libs=$($pkg_config --libs libudev)
6579 else
6580 libudev="no"
6584 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6585 if test "$werror" = "yes"; then
6586 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6589 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6590 if test "$solaris" = "no" && test "$tsan" = "no"; then
6591 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6592 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6596 # test if pod2man has --utf8 option
6597 if pod2man --help | grep -q utf8; then
6598 POD2MAN="pod2man --utf8"
6599 else
6600 POD2MAN="pod2man"
6603 # Use ASLR, no-SEH and DEP if available
6604 if test "$mingw32" = "yes" ; then
6605 for flag in --dynamicbase --no-seh --nxcompat; do
6606 if ld_has $flag ; then
6607 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6609 done
6612 # Disable OpenBSD W^X if available
6613 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6614 cat > $TMPC <<EOF
6615 int main(void) { return 0; }
6617 wx_ldflags="-Wl,-z,wxneeded"
6618 if compile_prog "" "$wx_ldflags"; then
6619 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6623 qemu_confdir=$sysconfdir$confsuffix
6624 qemu_moddir=$libdir$confsuffix
6625 qemu_datadir=$datadir$confsuffix
6626 qemu_localedir="$datadir/locale"
6627 qemu_icondir="$datadir/icons"
6628 qemu_desktopdir="$datadir/applications"
6630 # We can only support ivshmem if we have eventfd
6631 if [ "$eventfd" = "yes" ]; then
6632 ivshmem=yes
6635 tools=""
6636 if test "$want_tools" = "yes" ; then
6637 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6638 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6639 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
6641 if [ "$ivshmem" = "yes" ]; then
6642 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6644 if [ "$curl" = "yes" ]; then
6645 tools="elf2dmp\$(EXESUF) $tools"
6648 if test "$softmmu" = yes ; then
6649 if test "$linux" = yes; then
6650 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6651 virtfs=yes
6652 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)"
6653 else
6654 if test "$virtfs" = yes; then
6655 error_exit "VirtFS requires libcap-ng devel and libattr devel"
6657 virtfs=no
6659 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6660 mpath=yes
6661 else
6662 if test "$mpath" = yes; then
6663 error_exit "Multipath requires libmpathpersist devel"
6665 mpath=no
6667 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
6668 else
6669 if test "$virtfs" = yes; then
6670 error_exit "VirtFS is supported only on Linux"
6672 virtfs=no
6673 if test "$mpath" = yes; then
6674 error_exit "Multipath is supported only on Linux"
6676 mpath=no
6678 if test "$xkbcommon" = "yes"; then
6679 tools="qemu-keymap\$(EXESUF) $tools"
6683 # Probe for guest agent support/options
6685 if [ "$guest_agent" != "no" ]; then
6686 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6687 guest_agent=no
6688 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6689 tools="qemu-ga\$(EXESUF) $tools"
6690 guest_agent=yes
6691 elif [ "$guest_agent" != yes ]; then
6692 guest_agent=no
6693 else
6694 error_exit "Guest agent is not supported on this platform"
6698 # Guest agent Window MSI package
6700 if test "$guest_agent" != yes; then
6701 if test "$guest_agent_msi" = yes; then
6702 error_exit "MSI guest agent package requires guest agent enabled"
6704 guest_agent_msi=no
6705 elif test "$mingw32" != "yes"; then
6706 if test "$guest_agent_msi" = "yes"; then
6707 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6709 guest_agent_msi=no
6710 elif ! has wixl; then
6711 if test "$guest_agent_msi" = "yes"; then
6712 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6714 guest_agent_msi=no
6715 else
6716 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6717 # disabled explicitly
6718 if test "$guest_agent_msi" != "no"; then
6719 guest_agent_msi=yes
6723 if test "$guest_agent_msi" = "yes"; then
6724 if test "$guest_agent_with_vss" = "yes"; then
6725 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6728 if test "$QEMU_GA_MANUFACTURER" = ""; then
6729 QEMU_GA_MANUFACTURER=QEMU
6732 if test "$QEMU_GA_DISTRO" = ""; then
6733 QEMU_GA_DISTRO=Linux
6736 if test "$QEMU_GA_VERSION" = ""; then
6737 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6740 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6742 case "$cpu" in
6743 x86_64)
6744 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6746 i386)
6747 QEMU_GA_MSI_ARCH="-D Arch=32"
6750 error_exit "CPU $cpu not supported for building installation package"
6752 esac
6755 # Mac OS X ships with a broken assembler
6756 roms=
6757 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6758 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6759 test "$softmmu" = yes ; then
6760 # Different host OS linkers have different ideas about the name of the ELF
6761 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6762 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6763 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6764 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6765 ld_i386_emulation="$emu"
6766 roms="optionrom"
6767 break
6769 done
6772 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6773 if test "$cpu" = "s390x" ; then
6774 write_c_skeleton
6775 if compile_prog "-march=z900" ""; then
6776 roms="$roms s390-ccw"
6777 # SLOF is required for building the s390-ccw firmware on s390x,
6778 # since it is using the libnet code from SLOF for network booting.
6779 if test -e "${source_path}/.git" ; then
6780 git_submodules="${git_submodules} roms/SLOF"
6785 # Check that the C++ compiler exists and works with the C compiler.
6786 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6787 if has $cxx; then
6788 cat > $TMPC <<EOF
6789 int c_function(void);
6790 int main(void) { return c_function(); }
6793 compile_object
6795 cat > $TMPCXX <<EOF
6796 extern "C" {
6797 int c_function(void);
6799 int c_function(void) { return 42; }
6802 update_cxxflags
6804 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6805 # C++ compiler $cxx works ok with C compiler $cc
6807 else
6808 echo "C++ compiler $cxx does not work with C compiler $cc"
6809 echo "Disabling C++ specific optional code"
6810 cxx=
6812 else
6813 echo "No C++ compiler available; disabling C++ specific optional code"
6814 cxx=
6817 echo_version() {
6818 if test "$1" = "yes" ; then
6819 echo "($2)"
6823 # prepend pixman and ftd flags after all config tests are done
6824 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6825 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6826 libs_softmmu="$pixman_libs $libs_softmmu"
6828 echo "Install prefix $prefix"
6829 echo "BIOS directory $(eval echo $qemu_datadir)"
6830 echo "firmware path $(eval echo $firmwarepath)"
6831 echo "binary directory $(eval echo $bindir)"
6832 echo "library directory $(eval echo $libdir)"
6833 echo "module directory $(eval echo $qemu_moddir)"
6834 echo "libexec directory $(eval echo $libexecdir)"
6835 echo "include directory $(eval echo $includedir)"
6836 echo "config directory $(eval echo $sysconfdir)"
6837 if test "$mingw32" = "no" ; then
6838 echo "local state directory $(eval echo $local_statedir)"
6839 echo "Manual directory $(eval echo $mandir)"
6840 echo "ELF interp prefix $interp_prefix"
6841 else
6842 echo "local state directory queried at runtime"
6843 echo "Windows SDK $win_sdk"
6845 echo "Build directory $(pwd)"
6846 echo "Source path $source_path"
6847 echo "GIT binary $git"
6848 echo "GIT submodules $git_submodules"
6849 echo "C compiler $cc"
6850 echo "Host C compiler $host_cc"
6851 echo "C++ compiler $cxx"
6852 echo "Objective-C compiler $objcc"
6853 echo "ARFLAGS $ARFLAGS"
6854 echo "CFLAGS $CFLAGS"
6855 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6856 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6857 echo "make $make"
6858 echo "install $install"
6859 echo "python $python ($python_version)"
6860 if test "$docs" != "no"; then
6861 echo "sphinx-build $sphinx_build"
6863 echo "genisoimage $genisoimage"
6864 echo "efi_aarch64 $efi_aarch64"
6865 echo "python_yaml $python_yaml"
6866 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6867 if test "$slirp" != "no" ; then
6868 echo "smbd $smbd"
6870 echo "module support $modules"
6871 echo "alt path mod load $module_upgrades"
6872 echo "host CPU $cpu"
6873 echo "host big endian $bigendian"
6874 echo "target list $target_list"
6875 echo "gprof enabled $gprof"
6876 echo "sparse enabled $sparse"
6877 echo "strip binaries $strip_opt"
6878 echo "profiler $profiler"
6879 echo "static build $static"
6880 echo "safe stack $safe_stack"
6881 if test "$darwin" = "yes" ; then
6882 echo "Cocoa support $cocoa"
6884 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6885 echo "SDL image support $sdl_image"
6886 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6887 echo "GTK GL support $gtk_gl"
6888 echo "VTE support $vte $(echo_version $vte $vteversion)"
6889 echo "TLS priority $tls_priority"
6890 echo "GNUTLS support $gnutls"
6891 echo "libgcrypt $gcrypt"
6892 if test "$gcrypt" = "yes"
6893 then
6894 echo " hmac $gcrypt_hmac"
6895 echo " XTS $gcrypt_xts"
6897 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6898 if test "$nettle" = "yes"
6899 then
6900 echo " XTS $nettle_xts"
6902 echo "libtasn1 $tasn1"
6903 echo "PAM $auth_pam"
6904 echo "iconv support $iconv"
6905 echo "curses support $curses"
6906 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6907 echo "curl support $curl"
6908 echo "mingw32 support $mingw32"
6909 echo "Audio drivers $audio_drv_list"
6910 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6911 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6912 echo "VirtFS support $virtfs"
6913 echo "Multipath support $mpath"
6914 echo "VNC support $vnc"
6915 if test "$vnc" = "yes" ; then
6916 echo "VNC SASL support $vnc_sasl"
6917 echo "VNC JPEG support $vnc_jpeg"
6918 echo "VNC PNG support $vnc_png"
6920 echo "xen support $xen"
6921 if test "$xen" = "yes" ; then
6922 echo "xen ctrl version $xen_ctrl_version"
6924 echo "brlapi support $brlapi"
6925 echo "Documentation $docs"
6926 echo "PIE $pie"
6927 echo "vde support $vde"
6928 echo "netmap support $netmap"
6929 echo "Linux AIO support $linux_aio"
6930 echo "Linux io_uring support $linux_io_uring"
6931 echo "ATTR/XATTR support $attr"
6932 echo "Install blobs $blobs"
6933 echo "KVM support $kvm"
6934 echo "HAX support $hax"
6935 echo "HVF support $hvf"
6936 echo "WHPX support $whpx"
6937 echo "TCG support $tcg"
6938 if test "$tcg" = "yes" ; then
6939 echo "TCG debug enabled $debug_tcg"
6940 echo "TCG interpreter $tcg_interpreter"
6942 echo "malloc trim support $malloc_trim"
6943 echo "RDMA support $rdma"
6944 echo "PVRDMA support $pvrdma"
6945 echo "fdt support $fdt"
6946 echo "membarrier $membarrier"
6947 echo "preadv support $preadv"
6948 echo "fdatasync $fdatasync"
6949 echo "madvise $madvise"
6950 echo "posix_madvise $posix_madvise"
6951 echo "posix_memalign $posix_memalign"
6952 echo "libcap-ng support $cap_ng"
6953 echo "vhost-net support $vhost_net"
6954 echo "vhost-crypto support $vhost_crypto"
6955 echo "vhost-scsi support $vhost_scsi"
6956 echo "vhost-vsock support $vhost_vsock"
6957 echo "vhost-user support $vhost_user"
6958 echo "vhost-user-fs support $vhost_user_fs"
6959 echo "vhost-vdpa support $vhost_vdpa"
6960 echo "Trace backends $trace_backends"
6961 if have_backend "simple"; then
6962 echo "Trace output file $trace_file-<pid>"
6964 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6965 echo "rbd support $rbd"
6966 echo "xfsctl support $xfs"
6967 echo "smartcard support $smartcard"
6968 echo "libusb $libusb"
6969 echo "usb net redir $usb_redir"
6970 echo "OpenGL support $opengl"
6971 echo "OpenGL dmabufs $opengl_dmabuf"
6972 echo "libiscsi support $libiscsi"
6973 echo "libnfs support $libnfs"
6974 echo "build guest agent $guest_agent"
6975 echo "QGA VSS support $guest_agent_with_vss"
6976 echo "QGA w32 disk info $guest_agent_ntddscsi"
6977 echo "QGA MSI support $guest_agent_msi"
6978 echo "seccomp support $seccomp"
6979 echo "coroutine backend $coroutine"
6980 echo "coroutine pool $coroutine_pool"
6981 echo "debug stack usage $debug_stack_usage"
6982 echo "mutex debugging $debug_mutex"
6983 echo "crypto afalg $crypto_afalg"
6984 echo "GlusterFS support $glusterfs"
6985 echo "gcov $gcov_tool"
6986 echo "gcov enabled $gcov"
6987 echo "TPM support $tpm"
6988 echo "libssh support $libssh"
6989 echo "QOM debugging $qom_cast_debug"
6990 echo "Live block migration $live_block_migration"
6991 echo "lzo support $lzo"
6992 echo "snappy support $snappy"
6993 echo "bzip2 support $bzip2"
6994 echo "lzfse support $lzfse"
6995 echo "zstd support $zstd"
6996 echo "NUMA host support $numa"
6997 echo "libxml2 $libxml2"
6998 echo "tcmalloc support $tcmalloc"
6999 echo "jemalloc support $jemalloc"
7000 echo "avx2 optimization $avx2_opt"
7001 echo "avx512f optimization $avx512f_opt"
7002 echo "replication support $replication"
7003 echo "bochs support $bochs"
7004 echo "cloop support $cloop"
7005 echo "dmg support $dmg"
7006 echo "qcow v1 support $qcow1"
7007 echo "vdi support $vdi"
7008 echo "vvfat support $vvfat"
7009 echo "qed support $qed"
7010 echo "parallels support $parallels"
7011 echo "sheepdog support $sheepdog"
7012 echo "capstone $capstone"
7013 echo "libpmem support $libpmem"
7014 echo "libdaxctl support $libdaxctl"
7015 echo "libudev $libudev"
7016 echo "default devices $default_devices"
7017 echo "plugin support $plugins"
7018 echo "fuzzing support $fuzzing"
7019 echo "gdb $gdb_bin"
7020 echo "rng-none $rng_none"
7021 echo "Linux keyring $secret_keyring"
7023 if test "$supported_cpu" = "no"; then
7024 echo
7025 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
7026 echo
7027 echo "CPU host architecture $cpu support is not currently maintained."
7028 echo "The QEMU project intends to remove support for this host CPU in"
7029 echo "a future release if nobody volunteers to maintain it and to"
7030 echo "provide a build host for our continuous integration setup."
7031 echo "configure has succeeded and you can continue to build, but"
7032 echo "if you care about QEMU on this platform you should contact"
7033 echo "us upstream at qemu-devel@nongnu.org."
7036 if test "$supported_os" = "no"; then
7037 echo
7038 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
7039 echo
7040 echo "Host OS $targetos support is not currently maintained."
7041 echo "The QEMU project intends to remove support for this host OS in"
7042 echo "a future release if nobody volunteers to maintain it and to"
7043 echo "provide a build host for our continuous integration setup."
7044 echo "configure has succeeded and you can continue to build, but"
7045 echo "if you care about QEMU on this platform you should contact"
7046 echo "us upstream at qemu-devel@nongnu.org."
7049 config_host_mak="config-host.mak"
7051 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
7053 echo "# Automatically generated by configure - do not modify" > $config_host_mak
7054 echo >> $config_host_mak
7056 echo all: >> $config_host_mak
7057 echo "prefix=$prefix" >> $config_host_mak
7058 echo "bindir=$bindir" >> $config_host_mak
7059 echo "libdir=$libdir" >> $config_host_mak
7060 echo "libexecdir=$libexecdir" >> $config_host_mak
7061 echo "includedir=$includedir" >> $config_host_mak
7062 echo "mandir=$mandir" >> $config_host_mak
7063 echo "sysconfdir=$sysconfdir" >> $config_host_mak
7064 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
7065 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
7066 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
7067 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
7068 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
7069 if test "$mingw32" = "no" ; then
7070 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
7072 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
7073 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
7074 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
7075 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
7076 echo "libs_cpu=$libs_cpu" >> $config_host_mak
7077 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
7078 echo "GIT=$git" >> $config_host_mak
7079 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7080 echo "GIT_UPDATE=$git_update" >> $config_host_mak
7082 echo "ARCH=$ARCH" >> $config_host_mak
7084 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7085 echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
7087 if test "$default_devices" = "yes" ; then
7088 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
7089 else
7090 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
7092 if test "$debug_tcg" = "yes" ; then
7093 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
7095 if test "$strip_opt" = "yes" ; then
7096 echo "STRIP=${strip}" >> $config_host_mak
7098 if test "$bigendian" = "yes" ; then
7099 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
7101 if test "$mingw32" = "yes" ; then
7102 echo "CONFIG_WIN32=y" >> $config_host_mak
7103 rc_version=$(cat $source_path/VERSION)
7104 version_major=${rc_version%%.*}
7105 rc_version=${rc_version#*.}
7106 version_minor=${rc_version%%.*}
7107 rc_version=${rc_version#*.}
7108 version_subminor=${rc_version%%.*}
7109 version_micro=0
7110 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
7111 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
7112 if test "$guest_agent_with_vss" = "yes" ; then
7113 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
7114 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
7115 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
7117 if test "$guest_agent_ntddscsi" = "yes" ; then
7118 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
7120 if test "$guest_agent_msi" = "yes"; then
7121 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
7122 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
7123 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
7124 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
7125 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
7126 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
7127 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
7129 else
7130 echo "CONFIG_POSIX=y" >> $config_host_mak
7133 if test "$linux" = "yes" ; then
7134 echo "CONFIG_LINUX=y" >> $config_host_mak
7137 if test "$darwin" = "yes" ; then
7138 echo "CONFIG_DARWIN=y" >> $config_host_mak
7141 if test "$solaris" = "yes" ; then
7142 echo "CONFIG_SOLARIS=y" >> $config_host_mak
7144 if test "$haiku" = "yes" ; then
7145 echo "CONFIG_HAIKU=y" >> $config_host_mak
7147 if test "$static" = "yes" ; then
7148 echo "CONFIG_STATIC=y" >> $config_host_mak
7150 if test "$profiler" = "yes" ; then
7151 echo "CONFIG_PROFILER=y" >> $config_host_mak
7153 if test "$want_tools" = "yes" ; then
7154 echo "CONFIG_TOOLS=y" >> $config_host_mak
7156 if test "$slirp" != "no"; then
7157 echo "CONFIG_SLIRP=y" >> $config_host_mak
7158 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
7159 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
7160 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
7162 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
7163 echo "config-host.h: slirp/all" >> $config_host_mak
7165 if test "$vde" = "yes" ; then
7166 echo "CONFIG_VDE=y" >> $config_host_mak
7167 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
7169 if test "$netmap" = "yes" ; then
7170 echo "CONFIG_NETMAP=y" >> $config_host_mak
7172 if test "$l2tpv3" = "yes" ; then
7173 echo "CONFIG_L2TPV3=y" >> $config_host_mak
7175 if test "$gprof" = "yes" ; then
7176 echo "CONFIG_GPROF=y" >> $config_host_mak
7178 if test "$cap_ng" = "yes" ; then
7179 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
7181 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
7182 for drv in $audio_drv_list; do
7183 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7184 case "$drv" in
7185 alsa | oss | pa | sdl)
7186 echo "$def=m" >> $config_host_mak ;;
7188 echo "$def=y" >> $config_host_mak ;;
7189 esac
7190 done
7191 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7192 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7193 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7194 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7195 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
7196 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
7197 if test "$audio_win_int" = "yes" ; then
7198 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7200 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7201 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7202 if test "$vnc" = "yes" ; then
7203 echo "CONFIG_VNC=y" >> $config_host_mak
7205 if test "$vnc_sasl" = "yes" ; then
7206 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7208 if test "$vnc_jpeg" = "yes" ; then
7209 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7211 if test "$vnc_png" = "yes" ; then
7212 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7214 if test "$xkbcommon" = "yes" ; then
7215 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7216 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7218 if test "$xfs" = "yes" ; then
7219 echo "CONFIG_XFS=y" >> $config_host_mak
7221 qemu_version=$(head $source_path/VERSION)
7222 echo "VERSION=$qemu_version" >>$config_host_mak
7223 echo "PKGVERSION=$pkgversion" >>$config_host_mak
7224 echo "SRC_PATH=$source_path" >> $config_host_mak
7225 echo "TARGET_DIRS=$target_list" >> $config_host_mak
7226 if [ "$docs" = "yes" ] ; then
7227 echo "BUILD_DOCS=yes" >> $config_host_mak
7229 if test "$modules" = "yes"; then
7230 # $shacmd can generate a hash started with digit, which the compiler doesn't
7231 # like as an symbol. So prefix it with an underscore
7232 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7233 echo "CONFIG_MODULES=y" >> $config_host_mak
7235 if test "$module_upgrades" = "yes"; then
7236 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7238 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7239 echo "CONFIG_X11=y" >> $config_host_mak
7240 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7241 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7243 if test "$sdl" = "yes" ; then
7244 echo "CONFIG_SDL=m" >> $config_host_mak
7245 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7246 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7247 if test "$sdl_image" = "yes" ; then
7248 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7251 if test "$cocoa" = "yes" ; then
7252 echo "CONFIG_COCOA=y" >> $config_host_mak
7254 if test "$iconv" = "yes" ; then
7255 echo "CONFIG_ICONV=y" >> $config_host_mak
7256 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7257 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7259 if test "$curses" = "yes" ; then
7260 echo "CONFIG_CURSES=m" >> $config_host_mak
7261 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7262 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7264 if test "$pipe2" = "yes" ; then
7265 echo "CONFIG_PIPE2=y" >> $config_host_mak
7267 if test "$accept4" = "yes" ; then
7268 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7270 if test "$splice" = "yes" ; then
7271 echo "CONFIG_SPLICE=y" >> $config_host_mak
7273 if test "$eventfd" = "yes" ; then
7274 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7276 if test "$memfd" = "yes" ; then
7277 echo "CONFIG_MEMFD=y" >> $config_host_mak
7279 if test "$have_usbfs" = "yes" ; then
7280 echo "CONFIG_USBFS=y" >> $config_host_mak
7282 if test "$fallocate" = "yes" ; then
7283 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7285 if test "$fallocate_punch_hole" = "yes" ; then
7286 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7288 if test "$fallocate_zero_range" = "yes" ; then
7289 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7291 if test "$posix_fallocate" = "yes" ; then
7292 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7294 if test "$sync_file_range" = "yes" ; then
7295 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7297 if test "$fiemap" = "yes" ; then
7298 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7300 if test "$dup3" = "yes" ; then
7301 echo "CONFIG_DUP3=y" >> $config_host_mak
7303 if test "$ppoll" = "yes" ; then
7304 echo "CONFIG_PPOLL=y" >> $config_host_mak
7306 if test "$prctl_pr_set_timerslack" = "yes" ; then
7307 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7309 if test "$epoll" = "yes" ; then
7310 echo "CONFIG_EPOLL=y" >> $config_host_mak
7312 if test "$epoll_create1" = "yes" ; then
7313 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7315 if test "$sendfile" = "yes" ; then
7316 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7318 if test "$timerfd" = "yes" ; then
7319 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7321 if test "$setns" = "yes" ; then
7322 echo "CONFIG_SETNS=y" >> $config_host_mak
7324 if test "$clock_adjtime" = "yes" ; then
7325 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7327 if test "$syncfs" = "yes" ; then
7328 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7330 if test "$kcov" = "yes" ; then
7331 echo "CONFIG_KCOV=y" >> $config_host_mak
7333 if test "$inotify" = "yes" ; then
7334 echo "CONFIG_INOTIFY=y" >> $config_host_mak
7336 if test "$inotify1" = "yes" ; then
7337 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7339 if test "$sem_timedwait" = "yes" ; then
7340 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7342 if test "$strchrnul" = "yes" ; then
7343 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7345 if test "$st_atim" = "yes" ; then
7346 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7348 if test "$byteswap_h" = "yes" ; then
7349 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7351 if test "$bswap_h" = "yes" ; then
7352 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7354 if test "$curl" = "yes" ; then
7355 echo "CONFIG_CURL=m" >> $config_host_mak
7356 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7357 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7359 if test "$brlapi" = "yes" ; then
7360 echo "CONFIG_BRLAPI=y" >> $config_host_mak
7361 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7363 if test "$gtk" = "yes" ; then
7364 echo "CONFIG_GTK=m" >> $config_host_mak
7365 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7366 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7367 if test "$gtk_gl" = "yes" ; then
7368 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7371 if test "$gio" = "yes" ; then
7372 echo "CONFIG_GIO=y" >> $config_host_mak
7373 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7374 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7375 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7377 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7378 if test "$gnutls" = "yes" ; then
7379 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7381 if test "$gcrypt" = "yes" ; then
7382 echo "CONFIG_GCRYPT=y" >> $config_host_mak
7383 if test "$gcrypt_hmac" = "yes" ; then
7384 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7387 if test "$nettle" = "yes" ; then
7388 echo "CONFIG_NETTLE=y" >> $config_host_mak
7389 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7391 if test "$qemu_private_xts" = "yes" ; then
7392 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7394 if test "$tasn1" = "yes" ; then
7395 echo "CONFIG_TASN1=y" >> $config_host_mak
7397 if test "$auth_pam" = "yes" ; then
7398 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7400 if test "$have_ifaddrs_h" = "yes" ; then
7401 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7403 if test "$have_drm_h" = "yes" ; then
7404 echo "HAVE_DRM_H=y" >> $config_host_mak
7406 if test "$have_broken_size_max" = "yes" ; then
7407 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7409 if test "$have_openpty" = "yes" ; then
7410 echo "HAVE_OPENPTY=y" >> $config_host_mak
7412 if test "$have_sys_signal_h" = "yes" ; then
7413 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7416 # Work around a system header bug with some kernel/XFS header
7417 # versions where they both try to define 'struct fsxattr':
7418 # xfs headers will not try to redefine structs from linux headers
7419 # if this macro is set.
7420 if test "$have_fsxattr" = "yes" ; then
7421 echo "HAVE_FSXATTR=y" >> $config_host_mak
7423 if test "$have_copy_file_range" = "yes" ; then
7424 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7426 if test "$vte" = "yes" ; then
7427 echo "CONFIG_VTE=y" >> $config_host_mak
7428 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7429 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7431 if test "$virglrenderer" = "yes" ; then
7432 echo "CONFIG_VIRGL=y" >> $config_host_mak
7433 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7434 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7436 if test "$xen" = "yes" ; then
7437 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7438 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7440 if test "$linux_aio" = "yes" ; then
7441 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7443 if test "$linux_io_uring" = "yes" ; then
7444 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7445 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7446 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7448 if test "$attr" = "yes" ; then
7449 echo "CONFIG_ATTR=y" >> $config_host_mak
7451 if test "$libattr" = "yes" ; then
7452 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7454 if test "$virtfs" = "yes" ; then
7455 echo "CONFIG_VIRTFS=y" >> $config_host_mak
7457 if test "$mpath" = "yes" ; then
7458 echo "CONFIG_MPATH=y" >> $config_host_mak
7459 if test "$mpathpersist_new_api" = "yes"; then
7460 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7463 if test "$vhost_scsi" = "yes" ; then
7464 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7466 if test "$vhost_net" = "yes" ; then
7467 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7469 if test "$vhost_net_user" = "yes" ; then
7470 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7472 if test "$vhost_net_vdpa" = "yes" ; then
7473 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7475 if test "$vhost_crypto" = "yes" ; then
7476 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7478 if test "$vhost_vsock" = "yes" ; then
7479 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7480 if test "$vhost_user" = "yes" ; then
7481 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7484 if test "$vhost_kernel" = "yes" ; then
7485 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7487 if test "$vhost_user" = "yes" ; then
7488 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7490 if test "$vhost_vdpa" = "yes" ; then
7491 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7493 if test "$vhost_user_fs" = "yes" ; then
7494 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7496 if test "$blobs" = "yes" ; then
7497 echo "INSTALL_BLOBS=yes" >> $config_host_mak
7499 if test "$iovec" = "yes" ; then
7500 echo "CONFIG_IOVEC=y" >> $config_host_mak
7502 if test "$preadv" = "yes" ; then
7503 echo "CONFIG_PREADV=y" >> $config_host_mak
7505 if test "$fdt" != "no" ; then
7506 echo "CONFIG_FDT=y" >> $config_host_mak
7508 if test "$membarrier" = "yes" ; then
7509 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7511 if test "$signalfd" = "yes" ; then
7512 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7514 if test "$optreset" = "yes" ; then
7515 echo "HAVE_OPTRESET=y" >> $config_host_mak
7517 if test "$tcg" = "yes"; then
7518 echo "CONFIG_TCG=y" >> $config_host_mak
7519 if test "$tcg_interpreter" = "yes" ; then
7520 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7523 if test "$fdatasync" = "yes" ; then
7524 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7526 if test "$madvise" = "yes" ; then
7527 echo "CONFIG_MADVISE=y" >> $config_host_mak
7529 if test "$posix_madvise" = "yes" ; then
7530 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7532 if test "$posix_memalign" = "yes" ; then
7533 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7536 if test "$spice" = "yes" ; then
7537 echo "CONFIG_SPICE=y" >> $config_host_mak
7540 if test "$smartcard" = "yes" ; then
7541 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7542 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7543 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7546 if test "$libusb" = "yes" ; then
7547 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7548 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7549 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7552 if test "$usb_redir" = "yes" ; then
7553 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7554 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7555 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7558 if test "$opengl" = "yes" ; then
7559 echo "CONFIG_OPENGL=y" >> $config_host_mak
7560 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7561 if test "$opengl_dmabuf" = "yes" ; then
7562 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7566 if test "$gbm" = "yes" ; then
7567 echo "CONFIG_GBM=y" >> $config_host_mak
7568 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7569 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7573 if test "$malloc_trim" = "yes" ; then
7574 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7577 if test "$avx2_opt" = "yes" ; then
7578 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7581 if test "$avx512f_opt" = "yes" ; then
7582 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7585 if test "$lzo" = "yes" ; then
7586 echo "CONFIG_LZO=y" >> $config_host_mak
7589 if test "$snappy" = "yes" ; then
7590 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7593 if test "$bzip2" = "yes" ; then
7594 echo "CONFIG_BZIP2=y" >> $config_host_mak
7595 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7598 if test "$lzfse" = "yes" ; then
7599 echo "CONFIG_LZFSE=y" >> $config_host_mak
7600 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7603 if test "$zstd" = "yes" ; then
7604 echo "CONFIG_ZSTD=y" >> $config_host_mak
7607 if test "$libiscsi" = "yes" ; then
7608 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7609 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7610 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7613 if test "$libnfs" = "yes" ; then
7614 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7615 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7618 if test "$seccomp" = "yes"; then
7619 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7620 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7621 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7624 # XXX: suppress that
7625 if [ "$bsd" = "yes" ] ; then
7626 echo "CONFIG_BSD=y" >> $config_host_mak
7629 if test "$localtime_r" = "yes" ; then
7630 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7632 if test "$qom_cast_debug" = "yes" ; then
7633 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7635 if test "$rbd" = "yes" ; then
7636 echo "CONFIG_RBD=m" >> $config_host_mak
7637 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7638 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7641 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7642 if test "$coroutine_pool" = "yes" ; then
7643 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7644 else
7645 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7648 if test "$debug_stack_usage" = "yes" ; then
7649 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7652 if test "$crypto_afalg" = "yes" ; then
7653 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7656 if test "$open_by_handle_at" = "yes" ; then
7657 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7660 if test "$linux_magic_h" = "yes" ; then
7661 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7664 if test "$valgrind_h" = "yes" ; then
7665 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7668 if test "$have_asan_iface_fiber" = "yes" ; then
7669 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7672 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7673 echo "CONFIG_TSAN=y" >> $config_host_mak
7676 if test "$has_environ" = "yes" ; then
7677 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7680 if test "$cpuid_h" = "yes" ; then
7681 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7684 if test "$int128" = "yes" ; then
7685 echo "CONFIG_INT128=y" >> $config_host_mak
7688 if test "$atomic128" = "yes" ; then
7689 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7692 if test "$cmpxchg128" = "yes" ; then
7693 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7696 if test "$atomic64" = "yes" ; then
7697 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7700 if test "$attralias" = "yes" ; then
7701 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7704 if test "$getauxval" = "yes" ; then
7705 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7708 if test "$glusterfs" = "yes" ; then
7709 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7710 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7711 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7714 if test "$glusterfs_xlator_opt" = "yes" ; then
7715 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7718 if test "$glusterfs_discard" = "yes" ; then
7719 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7722 if test "$glusterfs_fallocate" = "yes" ; then
7723 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7726 if test "$glusterfs_zerofill" = "yes" ; then
7727 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7730 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7731 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7734 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7735 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7738 if test "$libssh" = "yes" ; then
7739 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7740 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7741 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7744 if test "$live_block_migration" = "yes" ; then
7745 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7748 if test "$tpm" = "yes"; then
7749 echo 'CONFIG_TPM=y' >> $config_host_mak
7752 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7753 if have_backend "nop"; then
7754 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7756 if have_backend "simple"; then
7757 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7758 # Set the appropriate trace file.
7759 trace_file="\"$trace_file-\" FMT_pid"
7761 if have_backend "log"; then
7762 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7764 if have_backend "ust"; then
7765 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7767 if have_backend "dtrace"; then
7768 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7769 if test "$trace_backend_stap" = "yes" ; then
7770 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7773 if have_backend "ftrace"; then
7774 if test "$linux" = "yes" ; then
7775 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7776 else
7777 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7780 if have_backend "syslog"; then
7781 if test "$posix_syslog" = "yes" ; then
7782 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7783 else
7784 feature_not_found "syslog(trace backend)" "syslog not available"
7787 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7789 if test "$rdma" = "yes" ; then
7790 echo "CONFIG_RDMA=y" >> $config_host_mak
7791 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7794 if test "$pvrdma" = "yes" ; then
7795 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7798 if test "$have_rtnetlink" = "yes" ; then
7799 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7802 if test "$libxml2" = "yes" ; then
7803 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7804 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7805 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7808 if test "$replication" = "yes" ; then
7809 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7812 if test "$have_af_vsock" = "yes" ; then
7813 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7816 if test "$have_sysmacros" = "yes" ; then
7817 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7820 if test "$have_static_assert" = "yes" ; then
7821 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7824 if test "$have_utmpx" = "yes" ; then
7825 echo "HAVE_UTMPX=y" >> $config_host_mak
7827 if test "$have_getrandom" = "yes" ; then
7828 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7830 if test "$ivshmem" = "yes" ; then
7831 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7833 if test "$capstone" != "no" ; then
7834 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7836 if test "$debug_mutex" = "yes" ; then
7837 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7840 # Hold two types of flag:
7841 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7842 # a thread we have a handle to
7843 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7844 # platform
7845 if test "$pthread_setname_np_w_tid" = "yes" ; then
7846 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7847 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7848 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7849 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7850 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7853 if test "$libpmem" = "yes" ; then
7854 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7857 if test "$libdaxctl" = "yes" ; then
7858 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7861 if test "$bochs" = "yes" ; then
7862 echo "CONFIG_BOCHS=y" >> $config_host_mak
7864 if test "$cloop" = "yes" ; then
7865 echo "CONFIG_CLOOP=y" >> $config_host_mak
7867 if test "$dmg" = "yes" ; then
7868 echo "CONFIG_DMG=y" >> $config_host_mak
7870 if test "$qcow1" = "yes" ; then
7871 echo "CONFIG_QCOW1=y" >> $config_host_mak
7873 if test "$vdi" = "yes" ; then
7874 echo "CONFIG_VDI=y" >> $config_host_mak
7876 if test "$vvfat" = "yes" ; then
7877 echo "CONFIG_VVFAT=y" >> $config_host_mak
7879 if test "$qed" = "yes" ; then
7880 echo "CONFIG_QED=y" >> $config_host_mak
7882 if test "$parallels" = "yes" ; then
7883 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7885 if test "$sheepdog" = "yes" ; then
7886 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7888 if test "$pty_h" = "yes" ; then
7889 echo "HAVE_PTY_H=y" >> $config_host_mak
7891 if test "$have_mlockall" = "yes" ; then
7892 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7894 if test "$fuzzing" = "yes" ; then
7895 if test "$have_fuzzer" = "yes"; then
7896 FUZZ_LDFLAGS=" -fsanitize=fuzzer"
7897 FUZZ_CFLAGS=" -fsanitize=fuzzer"
7898 CFLAGS="$CFLAGS -fsanitize=fuzzer-no-link"
7899 else
7900 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
7901 exit 1
7905 if test "$plugins" = "yes" ; then
7906 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7907 LIBS="-ldl $LIBS"
7908 # Copy the export object list to the build dir
7909 if test "$ld_dynamic_list" = "yes" ; then
7910 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7911 ld_symbols=qemu-plugins-ld.symbols
7912 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7913 elif test "$ld_exported_symbols_list" = "yes" ; then
7914 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7915 ld64_symbols=qemu-plugins-ld64.symbols
7916 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7917 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7918 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7919 else
7920 error_exit \
7921 "If \$plugins=yes, either \$ld_dynamic_list or " \
7922 "\$ld_exported_symbols_list should have been set to 'yes'."
7926 if test -n "$gdb_bin" ; then
7927 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7930 if test "$secret_keyring" = "yes" ; then
7931 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7932 if test "$have_keyutils" = "yes" ; then
7933 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7937 if test "$tcg_interpreter" = "yes"; then
7938 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7939 elif test "$ARCH" = "sparc64" ; then
7940 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7941 elif test "$ARCH" = "s390x" ; then
7942 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7943 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7944 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7945 elif test "$ARCH" = "ppc64" ; then
7946 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7947 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7948 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7949 else
7950 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7953 echo "HELPERS=$helpers" >> $config_host_mak
7954 echo "TOOLS=$tools" >> $config_host_mak
7955 echo "ROMS=$roms" >> $config_host_mak
7956 echo "MAKE=$make" >> $config_host_mak
7957 echo "INSTALL=$install" >> $config_host_mak
7958 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7959 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7960 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7961 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7962 echo "PYTHON=$python" >> $config_host_mak
7963 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7964 echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7965 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7966 echo "EFI_AARCH64=$efi_aarch64" >> $config_host_mak
7967 echo "PYTHON_YAML=$python_yaml" >> $config_host_mak
7968 echo "CC=$cc" >> $config_host_mak
7969 if $iasl -h > /dev/null 2>&1; then
7970 echo "IASL=$iasl" >> $config_host_mak
7972 echo "HOST_CC=$host_cc" >> $config_host_mak
7973 echo "CXX=$cxx" >> $config_host_mak
7974 echo "OBJCC=$objcc" >> $config_host_mak
7975 echo "AR=$ar" >> $config_host_mak
7976 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7977 echo "AS=$as" >> $config_host_mak
7978 echo "CCAS=$ccas" >> $config_host_mak
7979 echo "CPP=$cpp" >> $config_host_mak
7980 echo "OBJCOPY=$objcopy" >> $config_host_mak
7981 echo "LD=$ld" >> $config_host_mak
7982 echo "RANLIB=$ranlib" >> $config_host_mak
7983 echo "NM=$nm" >> $config_host_mak
7984 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7985 echo "WINDRES=$windres" >> $config_host_mak
7986 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7987 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7988 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7989 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7990 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7991 if test "$sparse" = "yes" ; then
7992 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7993 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7994 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7995 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7996 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7998 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7999 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
8000 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
8001 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
8002 echo "LIBS+=$LIBS" >> $config_host_mak
8003 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
8004 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
8005 echo "EXESUF=$EXESUF" >> $config_host_mak
8006 echo "DSOSUF=$DSOSUF" >> $config_host_mak
8007 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
8008 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
8009 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
8010 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
8011 echo "POD2MAN=$POD2MAN" >> $config_host_mak
8012 if test "$gcov" = "yes" ; then
8013 echo "CONFIG_GCOV=y" >> $config_host_mak
8014 echo "GCOV=$gcov_tool" >> $config_host_mak
8017 if test "$libudev" != "no"; then
8018 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
8019 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
8021 if test "$fuzzing" != "no"; then
8022 echo "CONFIG_FUZZ=y" >> $config_host_mak
8023 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
8024 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
8027 if test "$edk2_blobs" = "yes" ; then
8028 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
8031 if test "$rng_none" = "yes"; then
8032 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
8035 # use included Linux headers
8036 if test "$linux" = "yes" ; then
8037 mkdir -p linux-headers
8038 case "$cpu" in
8039 i386|x86_64|x32)
8040 linux_arch=x86
8042 ppc|ppc64|ppc64le)
8043 linux_arch=powerpc
8045 s390x)
8046 linux_arch=s390
8048 aarch64)
8049 linux_arch=arm64
8051 mips64)
8052 linux_arch=mips
8055 # For most CPUs the kernel architecture name and QEMU CPU name match.
8056 linux_arch="$cpu"
8058 esac
8059 # For non-KVM architectures we will not have asm headers
8060 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
8061 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
8065 for target in $target_list; do
8066 target_dir="$target"
8067 config_target_mak=$target_dir/config-target.mak
8068 target_name=$(echo $target | cut -d '-' -f 1)
8069 target_aligned_only="no"
8070 case "$target_name" in
8071 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
8072 target_aligned_only="yes"
8074 esac
8075 target_bigendian="no"
8076 case "$target_name" in
8077 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
8078 target_bigendian="yes"
8080 esac
8081 target_softmmu="no"
8082 target_user_only="no"
8083 target_linux_user="no"
8084 target_bsd_user="no"
8085 case "$target" in
8086 ${target_name}-softmmu)
8087 target_softmmu="yes"
8089 ${target_name}-linux-user)
8090 target_user_only="yes"
8091 target_linux_user="yes"
8093 ${target_name}-bsd-user)
8094 target_user_only="yes"
8095 target_bsd_user="yes"
8098 error_exit "Target '$target' not recognised"
8099 exit 1
8101 esac
8103 mkdir -p $target_dir
8104 echo "# Automatically generated by configure - do not modify" > $config_target_mak
8106 bflt="no"
8107 mttcg="no"
8108 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
8109 gdb_xml_files=""
8111 TARGET_ARCH="$target_name"
8112 TARGET_BASE_ARCH=""
8113 TARGET_ABI_DIR=""
8115 case "$target_name" in
8116 i386)
8117 mttcg="yes"
8118 gdb_xml_files="i386-32bit.xml"
8119 TARGET_SYSTBL_ABI=i386
8121 x86_64)
8122 TARGET_BASE_ARCH=i386
8123 TARGET_SYSTBL_ABI=common,64
8124 mttcg="yes"
8125 gdb_xml_files="i386-64bit.xml"
8127 alpha)
8128 mttcg="yes"
8129 TARGET_SYSTBL_ABI=common
8131 arm|armeb)
8132 TARGET_ARCH=arm
8133 TARGET_SYSTBL_ABI=common,oabi
8134 bflt="yes"
8135 mttcg="yes"
8136 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8138 aarch64|aarch64_be)
8139 TARGET_ARCH=aarch64
8140 TARGET_BASE_ARCH=arm
8141 bflt="yes"
8142 mttcg="yes"
8143 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8145 avr)
8146 gdb_xml_files="avr-cpu.xml"
8147 target_compiler=$cross_cc_avr
8149 cris)
8151 hppa)
8152 mttcg="yes"
8153 TARGET_SYSTBL_ABI=common,32
8155 lm32)
8157 m68k)
8158 bflt="yes"
8159 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
8160 TARGET_SYSTBL_ABI=common
8162 microblaze|microblazeel)
8163 TARGET_ARCH=microblaze
8164 TARGET_SYSTBL_ABI=common
8165 bflt="yes"
8166 echo "TARGET_ABI32=y" >> $config_target_mak
8168 mips|mipsel)
8169 mttcg="yes"
8170 TARGET_ARCH=mips
8171 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8172 TARGET_SYSTBL_ABI=o32
8174 mipsn32|mipsn32el)
8175 mttcg="yes"
8176 TARGET_ARCH=mips64
8177 TARGET_BASE_ARCH=mips
8178 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8179 echo "TARGET_ABI32=y" >> $config_target_mak
8180 TARGET_SYSTBL_ABI=n32
8182 mips64|mips64el)
8183 mttcg="no"
8184 TARGET_ARCH=mips64
8185 TARGET_BASE_ARCH=mips
8186 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8187 TARGET_SYSTBL_ABI=n64
8189 moxie)
8191 nios2)
8193 or1k)
8194 TARGET_ARCH=openrisc
8195 TARGET_BASE_ARCH=openrisc
8197 ppc)
8198 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
8199 TARGET_SYSTBL_ABI=common,nospu,32
8201 ppc64)
8202 TARGET_BASE_ARCH=ppc
8203 TARGET_ABI_DIR=ppc
8204 TARGET_SYSTBL_ABI=common,nospu,64
8205 mttcg=yes
8206 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8208 ppc64le)
8209 TARGET_ARCH=ppc64
8210 TARGET_BASE_ARCH=ppc
8211 TARGET_ABI_DIR=ppc
8212 TARGET_SYSTBL_ABI=common,nospu,64
8213 mttcg=yes
8214 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8216 ppc64abi32)
8217 TARGET_ARCH=ppc64
8218 TARGET_BASE_ARCH=ppc
8219 TARGET_ABI_DIR=ppc
8220 TARGET_SYSTBL_ABI=common,nospu,32
8221 echo "TARGET_ABI32=y" >> $config_target_mak
8222 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8224 riscv32)
8225 TARGET_BASE_ARCH=riscv
8226 TARGET_ABI_DIR=riscv
8227 mttcg=yes
8228 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
8230 riscv64)
8231 TARGET_BASE_ARCH=riscv
8232 TARGET_ABI_DIR=riscv
8233 mttcg=yes
8234 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
8237 TARGET_ARCH=rx
8238 bflt="yes"
8239 target_compiler=$cross_cc_rx
8240 gdb_xml_files="rx-core.xml"
8242 sh4|sh4eb)
8243 TARGET_ARCH=sh4
8244 TARGET_SYSTBL_ABI=common
8245 bflt="yes"
8247 sparc)
8248 TARGET_SYSTBL_ABI=common,32
8250 sparc64)
8251 TARGET_BASE_ARCH=sparc
8252 TARGET_SYSTBL_ABI=common,64
8254 sparc32plus)
8255 TARGET_ARCH=sparc64
8256 TARGET_BASE_ARCH=sparc
8257 TARGET_ABI_DIR=sparc
8258 TARGET_SYSTBL_ABI=common,32
8259 echo "TARGET_ABI32=y" >> $config_target_mak
8261 s390x)
8262 TARGET_SYSTBL_ABI=common,64
8263 mttcg=yes
8264 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
8266 tilegx)
8268 tricore)
8270 unicore32)
8272 xtensa|xtensaeb)
8273 TARGET_ARCH=xtensa
8274 TARGET_SYSTBL_ABI=common
8275 bflt="yes"
8276 mttcg="yes"
8279 error_exit "Unsupported target CPU"
8281 esac
8282 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8283 if [ "$TARGET_BASE_ARCH" = "" ]; then
8284 TARGET_BASE_ARCH=$TARGET_ARCH
8287 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
8289 upper() {
8290 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8293 target_arch_name="$(upper $TARGET_ARCH)"
8294 echo "TARGET_$target_arch_name=y" >> $config_target_mak
8295 echo "TARGET_NAME=$target_name" >> $config_target_mak
8296 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8297 if [ "$TARGET_ABI_DIR" = "" ]; then
8298 TARGET_ABI_DIR=$TARGET_ARCH
8300 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8301 if [ "$HOST_VARIANT_DIR" != "" ]; then
8302 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8304 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8305 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8308 if supported_xen_target $target; then
8309 echo "CONFIG_XEN=y" >> $config_target_mak
8310 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
8311 if test "$xen_pci_passthrough" = yes; then
8312 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8314 else
8315 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
8317 if supported_kvm_target $target; then
8318 echo "CONFIG_KVM=y" >> $config_target_mak
8319 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8320 else
8321 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
8323 if supported_hax_target $target; then
8324 echo "CONFIG_HAX=y" >> $config_target_mak
8326 if supported_hvf_target $target; then
8327 echo "CONFIG_HVF=y" >> $config_target_mak
8329 if supported_whpx_target $target; then
8330 echo "CONFIG_WHPX=y" >> $config_target_mak
8332 if test "$target_aligned_only" = "yes" ; then
8333 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8335 if test "$target_bigendian" = "yes" ; then
8336 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8338 if test "$target_softmmu" = "yes" ; then
8339 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8340 if test "$mttcg" = "yes" ; then
8341 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8344 if test "$target_user_only" = "yes" ; then
8345 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8346 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8348 if test "$target_linux_user" = "yes" ; then
8349 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8351 list=""
8352 if test ! -z "$gdb_xml_files" ; then
8353 for x in $gdb_xml_files; do
8354 list="$list $source_path/gdb-xml/$x"
8355 done
8356 echo "TARGET_XML_FILES=$list" >> $config_target_mak
8359 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8360 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8362 if test "$target_bsd_user" = "yes" ; then
8363 echo "CONFIG_BSD_USER=y" >> $config_target_mak
8367 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8369 cflags=""
8370 ldflags=""
8372 disas_config() {
8373 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8374 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8377 for i in $ARCH $TARGET_BASE_ARCH ; do
8378 case "$i" in
8379 alpha)
8380 disas_config "ALPHA"
8382 aarch64)
8383 if test -n "${cxx}"; then
8384 disas_config "ARM_A64"
8387 arm)
8388 disas_config "ARM"
8389 if test -n "${cxx}"; then
8390 disas_config "ARM_A64"
8393 avr)
8394 disas_config "AVR"
8396 cris)
8397 disas_config "CRIS"
8399 hppa)
8400 disas_config "HPPA"
8402 i386|x86_64|x32)
8403 disas_config "I386"
8405 lm32)
8406 disas_config "LM32"
8408 m68k)
8409 disas_config "M68K"
8411 microblaze*)
8412 disas_config "MICROBLAZE"
8414 mips*)
8415 disas_config "MIPS"
8416 if test -n "${cxx}"; then
8417 disas_config "NANOMIPS"
8420 moxie*)
8421 disas_config "MOXIE"
8423 nios2)
8424 disas_config "NIOS2"
8426 or1k)
8427 disas_config "OPENRISC"
8429 ppc*)
8430 disas_config "PPC"
8432 riscv*)
8433 disas_config "RISCV"
8436 disas_config "RX"
8438 s390*)
8439 disas_config "S390"
8441 sh4)
8442 disas_config "SH4"
8444 sparc*)
8445 disas_config "SPARC"
8447 xtensa*)
8448 disas_config "XTENSA"
8450 esac
8451 done
8452 if test "$tcg_interpreter" = "yes" ; then
8453 disas_config "TCI"
8456 case "$ARCH" in
8457 alpha)
8458 # Ensure there's only a single GP
8459 cflags="-msmall-data $cflags"
8461 esac
8463 if test "$gprof" = "yes" ; then
8464 if test "$target_linux_user" = "yes" ; then
8465 cflags="-p $cflags"
8466 ldflags="-p $ldflags"
8468 if test "$target_softmmu" = "yes" ; then
8469 ldflags="-p $ldflags"
8470 echo "GPROF_CFLAGS=-p" >> $config_target_mak
8474 # Newer kernels on s390 check for an S390_PGSTE program header and
8475 # enable the pgste page table extensions in that case. This makes
8476 # the vm.allocate_pgste sysctl unnecessary. We enable this program
8477 # header if
8478 # - we build on s390x
8479 # - we build the system emulation for s390x (qemu-system-s390x)
8480 # - KVM is enabled
8481 # - the linker supports --s390-pgste
8482 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8483 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8484 if ld_has --s390-pgste ; then
8485 ldflags="-Wl,--s390-pgste $ldflags"
8489 echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8490 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8492 done # for target in $targets
8494 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8495 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8497 if [ "$fdt" = "git" ]; then
8498 echo "config-host.h: dtc/all" >> $config_host_mak
8500 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8501 echo "config-host.h: capstone/all" >> $config_host_mak
8503 if test -n "$LIBCAPSTONE"; then
8504 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8507 if test "$numa" = "yes"; then
8508 echo "CONFIG_NUMA=y" >> $config_host_mak
8511 if test "$ccache_cpp2" = "yes"; then
8512 echo "export CCACHE_CPP2=y" >> $config_host_mak
8515 if test "$safe_stack" = "yes"; then
8516 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8519 # If we're using a separate build tree, set it up now.
8520 # DIRS are directories which we simply mkdir in the build tree;
8521 # LINKS are things to symlink back into the source tree
8522 # (these can be both files and directories).
8523 # Caution: do not add files or directories here using wildcards. This
8524 # will result in problems later if a new file matching the wildcard is
8525 # added to the source tree -- nothing will cause configure to be rerun
8526 # so the build tree will be missing the link back to the new file, and
8527 # tests might fail. Prefer to keep the relevant files in their own
8528 # directory and symlink the directory instead.
8529 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8530 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8531 DIRS="$DIRS docs docs/interop fsdev scsi"
8532 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8533 DIRS="$DIRS roms/seabios"
8534 LINKS="Makefile"
8535 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8536 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
8537 LINKS="$LINKS tests/plugin/Makefile"
8538 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8539 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8540 LINKS="$LINKS roms/seabios/Makefile"
8541 LINKS="$LINKS pc-bios/qemu-icon.bmp"
8542 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8543 LINKS="$LINKS tests/acceptance tests/data"
8544 LINKS="$LINKS tests/qemu-iotests/check"
8545 LINKS="$LINKS python"
8546 for bios_file in \
8547 $source_path/pc-bios/*.bin \
8548 $source_path/pc-bios/*.lid \
8549 $source_path/pc-bios/*.rom \
8550 $source_path/pc-bios/*.dtb \
8551 $source_path/pc-bios/*.img \
8552 $source_path/pc-bios/openbios-* \
8553 $source_path/pc-bios/u-boot.* \
8554 $source_path/pc-bios/edk2-*.fd.bz2 \
8555 $source_path/pc-bios/palcode-*
8557 LINKS="$LINKS pc-bios/$(basename $bios_file)"
8558 done
8559 mkdir -p $DIRS
8560 for f in $LINKS ; do
8561 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8562 symlink "$source_path/$f" "$f"
8564 done
8566 (for i in $cross_cc_vars; do
8567 export $i
8568 done
8569 export target_list source_path use_containers
8570 $source_path/tests/tcg/configure.sh)
8572 # temporary config to build submodules
8573 for rom in seabios; do
8574 config_mak=roms/$rom/config.mak
8575 echo "# Automatically generated by configure - do not modify" > $config_mak
8576 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8577 echo "AS=$as" >> $config_mak
8578 echo "CCAS=$ccas" >> $config_mak
8579 echo "CC=$cc" >> $config_mak
8580 echo "BCC=bcc" >> $config_mak
8581 echo "CPP=$cpp" >> $config_mak
8582 echo "OBJCOPY=objcopy" >> $config_mak
8583 echo "IASL=$iasl" >> $config_mak
8584 echo "LD=$ld" >> $config_mak
8585 echo "RANLIB=$ranlib" >> $config_mak
8586 done
8588 # set up qemu-iotests in this build directory
8589 iotests_common_env="tests/qemu-iotests/common.env"
8591 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8592 echo >> "$iotests_common_env"
8593 echo "export PYTHON='$python'" >> "$iotests_common_env"
8595 # Save the configure command line for later reuse.
8596 cat <<EOD >config.status
8597 #!/bin/sh
8598 # Generated by configure.
8599 # Run this file to recreate the current configuration.
8600 # Compiler output produced by configure, useful for debugging
8601 # configure, is in config.log if it exists.
8604 preserve_env() {
8605 envname=$1
8607 eval envval=\$$envname
8609 if test -n "$envval"
8610 then
8611 echo "$envname='$envval'" >> config.status
8612 echo "export $envname" >> config.status
8613 else
8614 echo "unset $envname" >> config.status
8618 # Preserve various env variables that influence what
8619 # features/build target configure will detect
8620 preserve_env AR
8621 preserve_env AS
8622 preserve_env CC
8623 preserve_env CPP
8624 preserve_env CXX
8625 preserve_env INSTALL
8626 preserve_env LD
8627 preserve_env LD_LIBRARY_PATH
8628 preserve_env LIBTOOL
8629 preserve_env MAKE
8630 preserve_env NM
8631 preserve_env OBJCOPY
8632 preserve_env PATH
8633 preserve_env PKG_CONFIG
8634 preserve_env PKG_CONFIG_LIBDIR
8635 preserve_env PKG_CONFIG_PATH
8636 preserve_env PYTHON
8637 preserve_env SDL2_CONFIG
8638 preserve_env SMBD
8639 preserve_env STRIP
8640 preserve_env WINDRES
8642 printf "exec" >>config.status
8643 printf " '%s'" "$0" "$@" >>config.status
8644 echo ' "$@"' >>config.status
8645 chmod +x config.status
8647 rm -r "$TMPDIR1"