meson: keymap-gen
[qemu/kevin.git] / configure
blob5e5923dfd6af790df16837d771a33a7995edd362
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 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
18 then
19 echo "Using './build' as the directory for build output"
21 MARKER=build/auto-created-by-configure
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
34 mkdir build
35 touch $MARKER
37 cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
45 .NOTPARALLEL: %
46 %: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
58 EOF
59 cd build
60 exec $source_path/configure "$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPMO="${TMPDIR1}/${TMPB}.mo"
82 TMPTXT="${TMPDIR1}/${TMPB}.txt"
84 rm -f config.log
86 # Print a helpful header at the top of config.log
87 echo "# QEMU configure log $(date)" >> config.log
88 printf "# Configured with:" >> config.log
89 printf " '%s'" "$0" "$@" >> config.log
90 echo >> config.log
91 echo "#" >> config.log
93 print_error() {
94 (echo
95 echo "ERROR: $1"
96 while test -n "$2"; do
97 echo " $2"
98 shift
99 done
100 echo) >&2
103 error_exit() {
104 print_error "$@"
105 exit 1
108 do_compiler() {
109 # Run the compiler, capturing its output to the log. First argument
110 # is compiler binary to execute.
111 local compiler="$1"
112 shift
113 if test -n "$BASH_VERSION"; then eval '
114 echo >>config.log "
115 funcs: ${FUNCNAME[*]}
116 lines: ${BASH_LINENO[*]}"
117 '; fi
118 echo $compiler "$@" >> config.log
119 $compiler "$@" >> config.log 2>&1 || return $?
120 # Test passed. If this is an --enable-werror build, rerun
121 # the test with -Werror and bail out if it fails. This
122 # makes warning-generating-errors in configure test code
123 # obvious to developers.
124 if test "$werror" != "yes"; then
125 return 0
127 # Don't bother rerunning the compile if we were already using -Werror
128 case "$*" in
129 *-Werror*)
130 return 0
132 esac
133 echo $compiler -Werror "$@" >> config.log
134 $compiler -Werror "$@" >> config.log 2>&1 && return $?
135 error_exit "configure test passed without -Werror but failed with -Werror." \
136 "This is probably a bug in the configure script. The failing command" \
137 "will be at the bottom of config.log." \
138 "You can run configure with --disable-werror to bypass this check."
141 do_cc() {
142 do_compiler "$cc" "$@"
145 do_cxx() {
146 do_compiler "$cxx" "$@"
149 # Append $2 to the variable named $1, with space separation
150 add_to() {
151 eval $1=\${$1:+\"\$$1 \"}\$2
154 update_cxxflags() {
155 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
156 # options which some versions of GCC's C++ compiler complain about
157 # because they only make sense for C programs.
158 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
159 CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
160 for arg in $QEMU_CFLAGS; do
161 case $arg in
162 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
163 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
166 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
168 esac
169 done
172 compile_object() {
173 local_cflags="$1"
174 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
177 compile_prog() {
178 local_cflags="$1"
179 local_ldflags="$2"
180 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
183 # symbolically link $1 to $2. Portable version of "ln -sf".
184 symlink() {
185 rm -rf "$2"
186 mkdir -p "$(dirname "$2")"
187 ln -s "$1" "$2"
190 # check whether a command is available to this shell (may be either an
191 # executable or a builtin)
192 has() {
193 type "$1" >/dev/null 2>&1
196 # search for an executable in PATH
197 path_of() {
198 local_command="$1"
199 local_ifs="$IFS"
200 local_dir=""
202 # pathname has a dir component?
203 if [ "${local_command#*/}" != "$local_command" ]; then
204 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
205 echo "$local_command"
206 return 0
209 if [ -z "$local_command" ]; then
210 return 1
213 IFS=:
214 for local_dir in $PATH; do
215 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
216 echo "$local_dir/$local_command"
217 IFS="${local_ifs:-$(printf ' \t\n')}"
218 return 0
220 done
221 # not found
222 IFS="${local_ifs:-$(printf ' \t\n')}"
223 return 1
226 version_ge () {
227 local_ver1=`echo $1 | tr . ' '`
228 local_ver2=`echo $2 | tr . ' '`
229 while true; do
230 set x $local_ver1
231 local_first=${2-0}
232 # shift 2 does nothing if there are less than 2 arguments
233 shift; shift
234 local_ver1=$*
235 set x $local_ver2
236 # the second argument finished, the first must be greater or equal
237 test $# = 1 && return 0
238 test $local_first -lt $2 && return 1
239 test $local_first -gt $2 && return 0
240 shift; shift
241 local_ver2=$*
242 done
245 have_backend () {
246 echo "$trace_backends" | grep "$1" >/dev/null
249 glob() {
250 eval test -z '"${1#'"$2"'}"'
253 supported_hax_target() {
254 test "$hax" = "yes" || return 1
255 glob "$1" "*-softmmu" || return 1
256 case "${1%-softmmu}" in
257 i386|x86_64)
258 return 0
260 esac
261 return 1
264 supported_kvm_target() {
265 test "$kvm" = "yes" || return 1
266 glob "$1" "*-softmmu" || return 1
267 case "${1%-softmmu}:$cpu" in
268 arm:arm | aarch64:aarch64 | \
269 i386:i386 | i386:x86_64 | i386:x32 | \
270 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
271 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
272 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
273 s390x:s390x)
274 return 0
276 esac
277 return 1
280 supported_xen_target() {
281 test "$xen" = "yes" || return 1
282 glob "$1" "*-softmmu" || return 1
283 # Only i386 and x86_64 provide the xenpv machine.
284 case "${1%-softmmu}" in
285 i386|x86_64)
286 return 0
288 esac
289 return 1
292 supported_hvf_target() {
293 test "$hvf" = "yes" || return 1
294 glob "$1" "*-softmmu" || return 1
295 case "${1%-softmmu}" in
296 x86_64)
297 return 0
299 esac
300 return 1
303 supported_whpx_target() {
304 test "$whpx" = "yes" || return 1
305 glob "$1" "*-softmmu" || return 1
306 case "${1%-softmmu}" in
307 i386|x86_64)
308 return 0
310 esac
311 return 1
314 supported_target() {
315 case "$1" in
316 *-softmmu)
318 *-linux-user)
319 if test "$linux" != "yes"; then
320 print_error "Target '$target' is only available on a Linux host"
321 return 1
324 *-bsd-user)
325 if test "$bsd" != "yes"; then
326 print_error "Target '$target' is only available on a BSD host"
327 return 1
331 print_error "Invalid target name '$target'"
332 return 1
334 esac
335 test "$tcg" = "yes" && return 0
336 supported_kvm_target "$1" && return 0
337 supported_xen_target "$1" && return 0
338 supported_hax_target "$1" && return 0
339 supported_hvf_target "$1" && return 0
340 supported_whpx_target "$1" && return 0
341 print_error "TCG disabled, but hardware accelerator not available for '$target'"
342 return 1
346 ld_has() {
347 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
350 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
351 then
352 error_exit "main directory cannot contain spaces nor colons"
355 # default parameters
356 cpu=""
357 iasl="iasl"
358 interp_prefix="/usr/gnemul/qemu-%M"
359 static="no"
360 cross_prefix=""
361 audio_drv_list=""
362 block_drv_rw_whitelist=""
363 block_drv_ro_whitelist=""
364 host_cc="cc"
365 libs_cpu=""
366 libs_softmmu=""
367 libs_tools=""
368 audio_win_int=""
369 libs_qga=""
370 debug_info="yes"
371 stack_protector=""
372 safe_stack=""
373 use_containers="yes"
374 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
376 if test -e "$source_path/.git"
377 then
378 git_update=yes
379 git_submodules="ui/keycodemapdb"
380 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
381 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
382 else
383 git_update=no
384 git_submodules=""
386 if ! test -f "$source_path/ui/keycodemapdb/README"
387 then
388 echo
389 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
390 echo
391 echo "This is not a GIT checkout but module content appears to"
392 echo "be missing. Do not use 'git archive' or GitHub download links"
393 echo "to acquire QEMU source archives. Non-GIT builds are only"
394 echo "supported with source archives linked from:"
395 echo
396 echo " https://www.qemu.org/download/#source"
397 echo
398 echo "Developers working with GIT can use scripts/archive-source.sh"
399 echo "if they need to create valid source archives."
400 echo
401 exit 1
404 git="git"
406 # Don't accept a target_list environment variable.
407 unset target_list
408 unset target_list_exclude
410 # Default value for a variable defining feature "foo".
411 # * foo="no" feature will only be used if --enable-foo arg is given
412 # * foo="" feature will be searched for, and if found, will be used
413 # unless --disable-foo is given
414 # * foo="yes" this value will only be set by --enable-foo flag.
415 # feature will searched for,
416 # if not found, configure exits with error
418 # Always add --enable-foo and --disable-foo command line args.
419 # Distributions want to ensure that several features are compiled in, and it
420 # is impossible without a --enable-foo that exits if a feature is not found.
422 brlapi=""
423 curl=""
424 curses=""
425 docs=""
426 fdt=""
427 netmap="no"
428 sdl=""
429 sdl_image=""
430 virtfs=""
431 mpath=""
432 vnc="yes"
433 sparse="no"
434 vde=""
435 vnc_sasl=""
436 vnc_jpeg=""
437 vnc_png=""
438 xkbcommon=""
439 xen=""
440 xen_ctrl_version=""
441 xen_pci_passthrough=""
442 linux_aio=""
443 linux_io_uring=""
444 cap_ng=""
445 attr=""
446 libattr=""
447 xfs=""
448 tcg="yes"
449 membarrier=""
450 vhost_net=""
451 vhost_crypto=""
452 vhost_scsi=""
453 vhost_vsock=""
454 vhost_user=""
455 vhost_user_fs=""
456 kvm="no"
457 hax="no"
458 hvf="no"
459 whpx="no"
460 rdma=""
461 pvrdma=""
462 gprof="no"
463 debug_tcg="no"
464 debug="no"
465 sanitizers="no"
466 tsan="no"
467 fortify_source=""
468 strip_opt="yes"
469 tcg_interpreter="no"
470 bigendian="no"
471 mingw32="no"
472 gcov="no"
473 EXESUF=""
474 DSOSUF=".so"
475 LDFLAGS_SHARED="-shared"
476 modules="no"
477 module_upgrades="no"
478 prefix="/usr/local"
479 firmwarepath="\${prefix}/share/qemu-firmware"
480 confsuffix="/qemu"
481 slirp=""
482 oss_lib=""
483 bsd="no"
484 linux="no"
485 solaris="no"
486 profiler="no"
487 cocoa="no"
488 softmmu="yes"
489 linux_user="no"
490 bsd_user="no"
491 blobs="yes"
492 edk2_blobs="no"
493 pkgversion=""
494 pie=""
495 qom_cast_debug="yes"
496 trace_backends="log"
497 trace_file="trace"
498 spice=""
499 rbd=""
500 smartcard=""
501 libusb=""
502 usb_redir=""
503 opengl=""
504 opengl_dmabuf="no"
505 cpuid_h="no"
506 avx2_opt=""
507 zlib="yes"
508 capstone=""
509 lzo=""
510 snappy=""
511 bzip2=""
512 lzfse=""
513 zstd=""
514 guest_agent=""
515 guest_agent_with_vss="no"
516 guest_agent_ntddscsi="no"
517 guest_agent_msi=""
518 vss_win32_sdk=""
519 win_sdk="no"
520 want_tools=""
521 libiscsi=""
522 libnfs=""
523 coroutine=""
524 coroutine_pool=""
525 debug_stack_usage="no"
526 crypto_afalg="no"
527 seccomp=""
528 glusterfs=""
529 glusterfs_xlator_opt="no"
530 glusterfs_discard="no"
531 glusterfs_fallocate="no"
532 glusterfs_zerofill="no"
533 glusterfs_ftruncate_has_stat="no"
534 glusterfs_iocb_has_stat="no"
535 gtk=""
536 gtk_gl="no"
537 tls_priority="NORMAL"
538 gnutls=""
539 nettle=""
540 nettle_xts="no"
541 gcrypt=""
542 gcrypt_hmac="no"
543 gcrypt_xts="no"
544 qemu_private_xts="yes"
545 auth_pam=""
546 vte=""
547 virglrenderer=""
548 tpm=""
549 libssh=""
550 live_block_migration="yes"
551 numa=""
552 tcmalloc="no"
553 jemalloc="no"
554 replication="yes"
555 bochs="yes"
556 cloop="yes"
557 dmg="yes"
558 qcow1="yes"
559 vdi="yes"
560 vvfat="yes"
561 qed="yes"
562 parallels="yes"
563 sheepdog="yes"
564 libxml2=""
565 debug_mutex="no"
566 libpmem=""
567 default_devices="yes"
568 plugins="no"
569 fuzzing="no"
570 rng_none="no"
571 secret_keyring=""
572 libdaxctl=""
573 meson=""
574 skip_meson=no
576 bogus_os="no"
577 malloc_trim=""
579 # parse CC options first
580 for opt do
581 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
582 case "$opt" in
583 --cross-prefix=*) cross_prefix="$optarg"
585 --cc=*) CC="$optarg"
587 --cxx=*) CXX="$optarg"
589 --cpu=*) cpu="$optarg"
591 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
592 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
594 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
596 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
597 EXTRA_LDFLAGS="$optarg"
599 --enable-debug-info) debug_info="yes"
601 --disable-debug-info) debug_info="no"
603 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
605 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
606 eval "cross_cc_cflags_${cc_arch}=\$optarg"
607 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
609 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
610 cc_archs="$cc_archs $cc_arch"
611 eval "cross_cc_${cc_arch}=\$optarg"
612 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
614 esac
615 done
616 # OS specific
617 # Using uname is really, really broken. Once we have the right set of checks
618 # we can eliminate its usage altogether.
620 # Preferred compiler:
621 # ${CC} (if set)
622 # ${cross_prefix}gcc (if cross-prefix specified)
623 # system compiler
624 if test -z "${CC}${cross_prefix}"; then
625 cc="$host_cc"
626 else
627 cc="${CC-${cross_prefix}gcc}"
630 if test -z "${CXX}${cross_prefix}"; then
631 cxx="c++"
632 else
633 cxx="${CXX-${cross_prefix}g++}"
636 ar="${AR-${cross_prefix}ar}"
637 as="${AS-${cross_prefix}as}"
638 ccas="${CCAS-$cc}"
639 cpp="${CPP-$cc -E}"
640 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
641 ld="${LD-${cross_prefix}ld}"
642 ranlib="${RANLIB-${cross_prefix}ranlib}"
643 nm="${NM-${cross_prefix}nm}"
644 strip="${STRIP-${cross_prefix}strip}"
645 windres="${WINDRES-${cross_prefix}windres}"
646 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
647 query_pkg_config() {
648 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
650 pkg_config=query_pkg_config
651 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
653 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
654 ARFLAGS="${ARFLAGS-rv}"
656 # default flags for all hosts
657 # We use -fwrapv to tell the compiler that we require a C dialect where
658 # left shift of signed integers is well defined and has the expected
659 # 2s-complement style results. (Both clang and gcc agree that it
660 # provides these semantics.)
661 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
662 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
663 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
664 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
665 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
666 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
667 CFLAGS="-std=gnu99 -Wall"
670 # running configure in the source tree?
671 # we know that's the case if configure is there.
672 if test -f "./configure"; then
673 pwd_is_source_path="y"
674 else
675 pwd_is_source_path="n"
678 check_define() {
679 cat > $TMPC <<EOF
680 #if !defined($1)
681 #error $1 not defined
682 #endif
683 int main(void) { return 0; }
685 compile_object
688 check_include() {
689 cat > $TMPC <<EOF
690 #include <$1>
691 int main(void) { return 0; }
693 compile_object
696 write_c_skeleton() {
697 cat > $TMPC <<EOF
698 int main(void) { return 0; }
702 write_c_fuzzer_skeleton() {
703 cat > $TMPC <<EOF
704 #include <stdint.h>
705 #include <sys/types.h>
706 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
707 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
711 if check_define __linux__ ; then
712 targetos="Linux"
713 elif check_define _WIN32 ; then
714 targetos='MINGW32'
715 elif check_define __OpenBSD__ ; then
716 targetos='OpenBSD'
717 elif check_define __sun__ ; then
718 targetos='SunOS'
719 elif check_define __HAIKU__ ; then
720 targetos='Haiku'
721 elif check_define __FreeBSD__ ; then
722 targetos='FreeBSD'
723 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
724 targetos='GNU/kFreeBSD'
725 elif check_define __DragonFly__ ; then
726 targetos='DragonFly'
727 elif check_define __NetBSD__; then
728 targetos='NetBSD'
729 elif check_define __APPLE__; then
730 targetos='Darwin'
731 else
732 # This is a fatal error, but don't report it yet, because we
733 # might be going to just print the --help text, or it might
734 # be the result of a missing compiler.
735 targetos='bogus'
736 bogus_os='yes'
739 # Some host OSes need non-standard checks for which CPU to use.
740 # Note that these checks are broken for cross-compilation: if you're
741 # cross-compiling to one of these OSes then you'll need to specify
742 # the correct CPU with the --cpu option.
743 case $targetos in
744 Darwin)
745 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
746 # run 64-bit userspace code.
747 # If the user didn't specify a CPU explicitly and the kernel says this is
748 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
749 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
750 cpu="x86_64"
753 SunOS)
754 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
755 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
756 cpu="x86_64"
758 esac
760 if test ! -z "$cpu" ; then
761 # command line argument
763 elif check_define __i386__ ; then
764 cpu="i386"
765 elif check_define __x86_64__ ; then
766 if check_define __ILP32__ ; then
767 cpu="x32"
768 else
769 cpu="x86_64"
771 elif check_define __sparc__ ; then
772 if check_define __arch64__ ; then
773 cpu="sparc64"
774 else
775 cpu="sparc"
777 elif check_define _ARCH_PPC ; then
778 if check_define _ARCH_PPC64 ; then
779 if check_define _LITTLE_ENDIAN ; then
780 cpu="ppc64le"
781 else
782 cpu="ppc64"
784 else
785 cpu="ppc"
787 elif check_define __mips__ ; then
788 cpu="mips"
789 elif check_define __s390__ ; then
790 if check_define __s390x__ ; then
791 cpu="s390x"
792 else
793 cpu="s390"
795 elif check_define __riscv ; then
796 if check_define _LP64 ; then
797 cpu="riscv64"
798 else
799 cpu="riscv32"
801 elif check_define __arm__ ; then
802 cpu="arm"
803 elif check_define __aarch64__ ; then
804 cpu="aarch64"
805 else
806 cpu=$(uname -m)
809 ARCH=
810 # Normalise host CPU name and set ARCH.
811 # Note that this case should only have supported host CPUs, not guests.
812 case "$cpu" in
813 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
815 ppc64le)
816 ARCH="ppc64"
818 i386|i486|i586|i686|i86pc|BePC)
819 cpu="i386"
821 x86_64|amd64)
822 cpu="x86_64"
824 armv*b|armv*l|arm)
825 cpu="arm"
827 aarch64)
828 cpu="aarch64"
830 mips*)
831 cpu="mips"
833 sparc|sun4[cdmuv])
834 cpu="sparc"
837 # This will result in either an error or falling back to TCI later
838 ARCH=unknown
840 esac
841 if test -z "$ARCH"; then
842 ARCH="$cpu"
845 # OS specific
847 # host *BSD for user mode
848 HOST_VARIANT_DIR=""
850 case $targetos in
851 MINGW32*)
852 mingw32="yes"
853 hax="yes"
854 vhost_user="no"
855 audio_possible_drivers="dsound sdl"
856 if check_include dsound.h; then
857 audio_drv_list="dsound"
858 else
859 audio_drv_list=""
861 supported_os="yes"
863 GNU/kFreeBSD)
864 bsd="yes"
865 audio_drv_list="oss try-sdl"
866 audio_possible_drivers="oss sdl pa"
868 FreeBSD)
869 bsd="yes"
870 make="${MAKE-gmake}"
871 audio_drv_list="oss try-sdl"
872 audio_possible_drivers="oss sdl pa"
873 # needed for kinfo_getvmmap(3) in libutil.h
874 LIBS="-lutil $LIBS"
875 netmap="" # enable netmap autodetect
876 HOST_VARIANT_DIR="freebsd"
878 DragonFly)
879 bsd="yes"
880 make="${MAKE-gmake}"
881 audio_drv_list="oss try-sdl"
882 audio_possible_drivers="oss sdl pa"
883 HOST_VARIANT_DIR="dragonfly"
885 NetBSD)
886 bsd="yes"
887 hax="yes"
888 make="${MAKE-gmake}"
889 audio_drv_list="oss try-sdl"
890 audio_possible_drivers="oss sdl"
891 oss_lib="-lossaudio"
892 HOST_VARIANT_DIR="netbsd"
894 OpenBSD)
895 bsd="yes"
896 make="${MAKE-gmake}"
897 audio_drv_list="try-sdl"
898 audio_possible_drivers="sdl"
899 HOST_VARIANT_DIR="openbsd"
901 Darwin)
902 bsd="yes"
903 darwin="yes"
904 hax="yes"
905 hvf="yes"
906 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
907 if [ "$cpu" = "x86_64" ] ; then
908 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
909 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
911 cocoa="yes"
912 audio_drv_list="coreaudio try-sdl"
913 audio_possible_drivers="coreaudio sdl"
914 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
915 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
916 # Disable attempts to use ObjectiveC features in os/object.h since they
917 # won't work when we're compiling with gcc as a C compiler.
918 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
919 HOST_VARIANT_DIR="darwin"
921 SunOS)
922 solaris="yes"
923 make="${MAKE-gmake}"
924 install="${INSTALL-ginstall}"
925 smbd="${SMBD-/usr/sfw/sbin/smbd}"
926 if test -f /usr/include/sys/soundcard.h ; then
927 audio_drv_list="oss try-sdl"
929 audio_possible_drivers="oss sdl"
930 # needed for CMSG_ macros in sys/socket.h
931 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
932 # needed for TIOCWIN* defines in termios.h
933 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
934 solarisnetlibs="-lsocket -lnsl -lresolv"
935 LIBS="$solarisnetlibs $LIBS"
937 Haiku)
938 haiku="yes"
939 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
940 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
942 Linux)
943 audio_drv_list="try-pa oss"
944 audio_possible_drivers="oss alsa sdl pa"
945 linux="yes"
946 linux_user="yes"
947 kvm="yes"
948 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
949 libudev="yes"
951 esac
953 if [ "$bsd" = "yes" ] ; then
954 if [ "$darwin" != "yes" ] ; then
955 bsd_user="yes"
959 : ${make=${MAKE-make}}
960 : ${install=${INSTALL-install}}
961 # We prefer python 3.x. A bare 'python' is traditionally
962 # python 2.x, but some distros have it as python 3.x, so
963 # we check that too
964 python=
965 explicit_python=no
966 for binary in "${PYTHON-python3}" python
968 if has "$binary"
969 then
970 python=$(command -v "$binary")
971 break
973 done
975 sphinx_build=
976 for binary in sphinx-build-3 sphinx-build
978 if has "$binary"
979 then
980 sphinx_build=$(command -v "$binary")
981 break
983 done
985 # Check for ancillary tools used in testing
986 genisoimage=
987 for binary in genisoimage mkisofs
989 if has $binary
990 then
991 genisoimage=$(command -v "$binary")
992 break
994 done
996 : ${smbd=${SMBD-/usr/sbin/smbd}}
998 # Default objcc to clang if available, otherwise use CC
999 if has clang; then
1000 objcc=clang
1001 else
1002 objcc="$cc"
1005 if test "$mingw32" = "yes" ; then
1006 EXESUF=".exe"
1007 DSOSUF=".dll"
1008 # MinGW needs -mthreads for TLS and macro _MT.
1009 CFLAGS="-mthreads $CFLAGS"
1010 LIBS="-lwinmm -lws2_32 $LIBS"
1011 write_c_skeleton;
1012 if compile_prog "" "-liberty" ; then
1013 LIBS="-liberty $LIBS"
1015 prefix="c:/Program Files/QEMU"
1016 confsuffix=""
1017 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1020 werror=""
1022 for opt do
1023 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1024 case "$opt" in
1025 --help|-h) show_help=yes
1027 --version|-V) exec cat $source_path/VERSION
1029 --prefix=*) prefix="$optarg"
1031 --interp-prefix=*) interp_prefix="$optarg"
1033 --cross-prefix=*)
1035 --cc=*)
1037 --host-cc=*) host_cc="$optarg"
1039 --cxx=*)
1041 --iasl=*) iasl="$optarg"
1043 --objcc=*) objcc="$optarg"
1045 --make=*) make="$optarg"
1047 --install=*) install="$optarg"
1049 --python=*) python="$optarg" ; explicit_python=yes
1051 --sphinx-build=*) sphinx_build="$optarg"
1053 --skip-meson) skip_meson=yes
1055 --meson=*) meson="$optarg"
1057 --smbd=*) smbd="$optarg"
1059 --extra-cflags=*)
1061 --extra-cxxflags=*)
1063 --extra-ldflags=*)
1065 --enable-debug-info)
1067 --disable-debug-info)
1069 --cross-cc-*)
1071 --enable-modules)
1072 modules="yes"
1074 --disable-modules)
1075 modules="no"
1077 --disable-module-upgrades) module_upgrades="no"
1079 --enable-module-upgrades) module_upgrades="yes"
1081 --cpu=*)
1083 --target-list=*) target_list="$optarg"
1084 if test "$target_list_exclude"; then
1085 error_exit "Can't mix --target-list with --target-list-exclude"
1088 --target-list-exclude=*) target_list_exclude="$optarg"
1089 if test "$target_list"; then
1090 error_exit "Can't mix --target-list-exclude with --target-list"
1093 --enable-trace-backends=*) trace_backends="$optarg"
1095 # XXX: backwards compatibility
1096 --enable-trace-backend=*) trace_backends="$optarg"
1098 --with-trace-file=*) trace_file="$optarg"
1100 --with-default-devices) default_devices="yes"
1102 --without-default-devices) default_devices="no"
1104 --enable-gprof) gprof="yes"
1106 --enable-gcov) gcov="yes"
1108 --static)
1109 static="yes"
1110 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1112 --mandir=*) mandir="$optarg"
1114 --bindir=*) bindir="$optarg"
1116 --libdir=*) libdir="$optarg"
1118 --libexecdir=*) libexecdir="$optarg"
1120 --includedir=*) includedir="$optarg"
1122 --datadir=*) datadir="$optarg"
1124 --with-confsuffix=*) confsuffix="$optarg"
1126 --docdir=*) qemu_docdir="$optarg"
1128 --sysconfdir=*) sysconfdir="$optarg"
1130 --localstatedir=*) local_statedir="$optarg"
1132 --firmwarepath=*) firmwarepath="$optarg"
1134 --host=*|--build=*|\
1135 --disable-dependency-tracking|\
1136 --sbindir=*|--sharedstatedir=*|\
1137 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1138 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1139 # These switches are silently ignored, for compatibility with
1140 # autoconf-generated configure scripts. This allows QEMU's
1141 # configure to be used by RPM and similar macros that set
1142 # lots of directory switches by default.
1144 --disable-sdl) sdl="no"
1146 --enable-sdl) sdl="yes"
1148 --disable-sdl-image) sdl_image="no"
1150 --enable-sdl-image) sdl_image="yes"
1152 --disable-qom-cast-debug) qom_cast_debug="no"
1154 --enable-qom-cast-debug) qom_cast_debug="yes"
1156 --disable-virtfs) virtfs="no"
1158 --enable-virtfs) virtfs="yes"
1160 --disable-mpath) mpath="no"
1162 --enable-mpath) mpath="yes"
1164 --disable-vnc) vnc="no"
1166 --enable-vnc) vnc="yes"
1168 --oss-lib=*) oss_lib="$optarg"
1170 --audio-drv-list=*) audio_drv_list="$optarg"
1172 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1174 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1176 --enable-debug-tcg) debug_tcg="yes"
1178 --disable-debug-tcg) debug_tcg="no"
1180 --enable-debug)
1181 # Enable debugging options that aren't excessively noisy
1182 debug_tcg="yes"
1183 debug_mutex="yes"
1184 debug="yes"
1185 strip_opt="no"
1186 fortify_source="no"
1188 --enable-sanitizers) sanitizers="yes"
1190 --disable-sanitizers) sanitizers="no"
1192 --enable-tsan) tsan="yes"
1194 --disable-tsan) tsan="no"
1196 --enable-sparse) sparse="yes"
1198 --disable-sparse) sparse="no"
1200 --disable-strip) strip_opt="no"
1202 --disable-vnc-sasl) vnc_sasl="no"
1204 --enable-vnc-sasl) vnc_sasl="yes"
1206 --disable-vnc-jpeg) vnc_jpeg="no"
1208 --enable-vnc-jpeg) vnc_jpeg="yes"
1210 --disable-vnc-png) vnc_png="no"
1212 --enable-vnc-png) vnc_png="yes"
1214 --disable-slirp) slirp="no"
1216 --enable-slirp=git) slirp="git"
1218 --enable-slirp=system) slirp="system"
1220 --disable-vde) vde="no"
1222 --enable-vde) vde="yes"
1224 --disable-netmap) netmap="no"
1226 --enable-netmap) netmap="yes"
1228 --disable-xen) xen="no"
1230 --enable-xen) xen="yes"
1232 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1234 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1236 --disable-brlapi) brlapi="no"
1238 --enable-brlapi) brlapi="yes"
1240 --disable-kvm) kvm="no"
1242 --enable-kvm) kvm="yes"
1244 --disable-hax) hax="no"
1246 --enable-hax) hax="yes"
1248 --disable-hvf) hvf="no"
1250 --enable-hvf) hvf="yes"
1252 --disable-whpx) whpx="no"
1254 --enable-whpx) whpx="yes"
1256 --disable-tcg-interpreter) tcg_interpreter="no"
1258 --enable-tcg-interpreter) tcg_interpreter="yes"
1260 --disable-cap-ng) cap_ng="no"
1262 --enable-cap-ng) cap_ng="yes"
1264 --disable-tcg) tcg="no"
1266 --enable-tcg) tcg="yes"
1268 --disable-malloc-trim) malloc_trim="no"
1270 --enable-malloc-trim) malloc_trim="yes"
1272 --disable-spice) spice="no"
1274 --enable-spice) spice="yes"
1276 --disable-libiscsi) libiscsi="no"
1278 --enable-libiscsi) libiscsi="yes"
1280 --disable-libnfs) libnfs="no"
1282 --enable-libnfs) libnfs="yes"
1284 --enable-profiler) profiler="yes"
1286 --disable-cocoa) cocoa="no"
1288 --enable-cocoa)
1289 cocoa="yes" ;
1290 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1292 --disable-system) softmmu="no"
1294 --enable-system) softmmu="yes"
1296 --disable-user)
1297 linux_user="no" ;
1298 bsd_user="no" ;
1300 --enable-user) ;;
1301 --disable-linux-user) linux_user="no"
1303 --enable-linux-user) linux_user="yes"
1305 --disable-bsd-user) bsd_user="no"
1307 --enable-bsd-user) bsd_user="yes"
1309 --enable-pie) pie="yes"
1311 --disable-pie) pie="no"
1313 --enable-werror) werror="yes"
1315 --disable-werror) werror="no"
1317 --enable-stack-protector) stack_protector="yes"
1319 --disable-stack-protector) stack_protector="no"
1321 --enable-safe-stack) safe_stack="yes"
1323 --disable-safe-stack) safe_stack="no"
1325 --disable-curses) curses="no"
1327 --enable-curses) curses="yes"
1329 --disable-iconv) iconv="no"
1331 --enable-iconv) iconv="yes"
1333 --disable-curl) curl="no"
1335 --enable-curl) curl="yes"
1337 --disable-fdt) fdt="no"
1339 --enable-fdt) fdt="yes"
1341 --disable-linux-aio) linux_aio="no"
1343 --enable-linux-aio) linux_aio="yes"
1345 --disable-linux-io-uring) linux_io_uring="no"
1347 --enable-linux-io-uring) linux_io_uring="yes"
1349 --disable-attr) attr="no"
1351 --enable-attr) attr="yes"
1353 --disable-membarrier) membarrier="no"
1355 --enable-membarrier) membarrier="yes"
1357 --disable-blobs) blobs="no"
1359 --with-pkgversion=*) pkgversion="$optarg"
1361 --with-coroutine=*) coroutine="$optarg"
1363 --disable-coroutine-pool) coroutine_pool="no"
1365 --enable-coroutine-pool) coroutine_pool="yes"
1367 --enable-debug-stack-usage) debug_stack_usage="yes"
1369 --enable-crypto-afalg) crypto_afalg="yes"
1371 --disable-crypto-afalg) crypto_afalg="no"
1373 --disable-docs) docs="no"
1375 --enable-docs) docs="yes"
1377 --disable-vhost-net) vhost_net="no"
1379 --enable-vhost-net) vhost_net="yes"
1381 --disable-vhost-crypto) vhost_crypto="no"
1383 --enable-vhost-crypto) vhost_crypto="yes"
1385 --disable-vhost-scsi) vhost_scsi="no"
1387 --enable-vhost-scsi) vhost_scsi="yes"
1389 --disable-vhost-vsock) vhost_vsock="no"
1391 --enable-vhost-vsock) vhost_vsock="yes"
1393 --disable-vhost-user-fs) vhost_user_fs="no"
1395 --enable-vhost-user-fs) vhost_user_fs="yes"
1397 --disable-opengl) opengl="no"
1399 --enable-opengl) opengl="yes"
1401 --disable-rbd) rbd="no"
1403 --enable-rbd) rbd="yes"
1405 --disable-xfsctl) xfs="no"
1407 --enable-xfsctl) xfs="yes"
1409 --disable-smartcard) smartcard="no"
1411 --enable-smartcard) smartcard="yes"
1413 --disable-libusb) libusb="no"
1415 --enable-libusb) libusb="yes"
1417 --disable-usb-redir) usb_redir="no"
1419 --enable-usb-redir) usb_redir="yes"
1421 --disable-zlib-test) zlib="no"
1423 --disable-lzo) lzo="no"
1425 --enable-lzo) lzo="yes"
1427 --disable-snappy) snappy="no"
1429 --enable-snappy) snappy="yes"
1431 --disable-bzip2) bzip2="no"
1433 --enable-bzip2) bzip2="yes"
1435 --enable-lzfse) lzfse="yes"
1437 --disable-lzfse) lzfse="no"
1439 --disable-zstd) zstd="no"
1441 --enable-zstd) zstd="yes"
1443 --enable-guest-agent) guest_agent="yes"
1445 --disable-guest-agent) guest_agent="no"
1447 --enable-guest-agent-msi) guest_agent_msi="yes"
1449 --disable-guest-agent-msi) guest_agent_msi="no"
1451 --with-vss-sdk) vss_win32_sdk=""
1453 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1455 --without-vss-sdk) vss_win32_sdk="no"
1457 --with-win-sdk) win_sdk=""
1459 --with-win-sdk=*) win_sdk="$optarg"
1461 --without-win-sdk) win_sdk="no"
1463 --enable-tools) want_tools="yes"
1465 --disable-tools) want_tools="no"
1467 --enable-seccomp) seccomp="yes"
1469 --disable-seccomp) seccomp="no"
1471 --disable-glusterfs) glusterfs="no"
1473 --disable-avx2) avx2_opt="no"
1475 --enable-avx2) avx2_opt="yes"
1477 --disable-avx512f) avx512f_opt="no"
1479 --enable-avx512f) avx512f_opt="yes"
1482 --enable-glusterfs) glusterfs="yes"
1484 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1485 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1487 --enable-vhdx|--disable-vhdx)
1488 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1490 --enable-uuid|--disable-uuid)
1491 echo "$0: $opt is obsolete, UUID support is always built" >&2
1493 --disable-gtk) gtk="no"
1495 --enable-gtk) gtk="yes"
1497 --tls-priority=*) tls_priority="$optarg"
1499 --disable-gnutls) gnutls="no"
1501 --enable-gnutls) gnutls="yes"
1503 --disable-nettle) nettle="no"
1505 --enable-nettle) nettle="yes"
1507 --disable-gcrypt) gcrypt="no"
1509 --enable-gcrypt) gcrypt="yes"
1511 --disable-auth-pam) auth_pam="no"
1513 --enable-auth-pam) auth_pam="yes"
1515 --enable-rdma) rdma="yes"
1517 --disable-rdma) rdma="no"
1519 --enable-pvrdma) pvrdma="yes"
1521 --disable-pvrdma) pvrdma="no"
1523 --disable-vte) vte="no"
1525 --enable-vte) vte="yes"
1527 --disable-virglrenderer) virglrenderer="no"
1529 --enable-virglrenderer) virglrenderer="yes"
1531 --disable-tpm) tpm="no"
1533 --enable-tpm) tpm="yes"
1535 --disable-libssh) libssh="no"
1537 --enable-libssh) libssh="yes"
1539 --disable-live-block-migration) live_block_migration="no"
1541 --enable-live-block-migration) live_block_migration="yes"
1543 --disable-numa) numa="no"
1545 --enable-numa) numa="yes"
1547 --disable-libxml2) libxml2="no"
1549 --enable-libxml2) libxml2="yes"
1551 --disable-tcmalloc) tcmalloc="no"
1553 --enable-tcmalloc) tcmalloc="yes"
1555 --disable-jemalloc) jemalloc="no"
1557 --enable-jemalloc) jemalloc="yes"
1559 --disable-replication) replication="no"
1561 --enable-replication) replication="yes"
1563 --disable-bochs) bochs="no"
1565 --enable-bochs) bochs="yes"
1567 --disable-cloop) cloop="no"
1569 --enable-cloop) cloop="yes"
1571 --disable-dmg) dmg="no"
1573 --enable-dmg) dmg="yes"
1575 --disable-qcow1) qcow1="no"
1577 --enable-qcow1) qcow1="yes"
1579 --disable-vdi) vdi="no"
1581 --enable-vdi) vdi="yes"
1583 --disable-vvfat) vvfat="no"
1585 --enable-vvfat) vvfat="yes"
1587 --disable-qed) qed="no"
1589 --enable-qed) qed="yes"
1591 --disable-parallels) parallels="no"
1593 --enable-parallels) parallels="yes"
1595 --disable-sheepdog) sheepdog="no"
1597 --enable-sheepdog) sheepdog="yes"
1599 --disable-vhost-user) vhost_user="no"
1601 --enable-vhost-user) vhost_user="yes"
1603 --disable-vhost-vdpa) vhost_vdpa="no"
1605 --enable-vhost-vdpa) vhost_vdpa="yes"
1607 --disable-vhost-kernel) vhost_kernel="no"
1609 --enable-vhost-kernel) vhost_kernel="yes"
1611 --disable-capstone) capstone="no"
1613 --enable-capstone) capstone="yes"
1615 --enable-capstone=git) capstone="git"
1617 --enable-capstone=system) capstone="system"
1619 --with-git=*) git="$optarg"
1621 --enable-git-update) git_update=yes
1623 --disable-git-update) git_update=no
1625 --enable-debug-mutex) debug_mutex=yes
1627 --disable-debug-mutex) debug_mutex=no
1629 --enable-libpmem) libpmem=yes
1631 --disable-libpmem) libpmem=no
1633 --enable-xkbcommon) xkbcommon=yes
1635 --disable-xkbcommon) xkbcommon=no
1637 --enable-plugins) plugins="yes"
1639 --disable-plugins) plugins="no"
1641 --enable-containers) use_containers="yes"
1643 --disable-containers) use_containers="no"
1645 --enable-fuzzing) fuzzing=yes
1647 --disable-fuzzing) fuzzing=no
1649 --gdb=*) gdb_bin="$optarg"
1651 --enable-rng-none) rng_none=yes
1653 --disable-rng-none) rng_none=no
1655 --enable-keyring) secret_keyring="yes"
1657 --disable-keyring) secret_keyring="no"
1659 --enable-libdaxctl) libdaxctl=yes
1661 --disable-libdaxctl) libdaxctl=no
1664 echo "ERROR: unknown option $opt"
1665 echo "Try '$0 --help' for more information"
1666 exit 1
1668 esac
1669 done
1671 libdir="${libdir:-$prefix/lib}"
1672 libexecdir="${libexecdir:-$prefix/libexec}"
1673 includedir="${includedir:-$prefix/include}"
1675 if test "$mingw32" = "yes" ; then
1676 mandir="$prefix"
1677 datadir="$prefix"
1678 qemu_docdir="$prefix"
1679 bindir="$prefix"
1680 sysconfdir="$prefix"
1681 local_statedir=
1682 else
1683 mandir="${mandir:-$prefix/share/man}"
1684 datadir="${datadir:-$prefix/share}"
1685 qemu_docdir="${qemu_docdir:-$prefix/share/doc/qemu}"
1686 bindir="${bindir:-$prefix/bin}"
1687 sysconfdir="${sysconfdir:-$prefix/etc}"
1688 local_statedir="${local_statedir:-$prefix/var}"
1691 case "$cpu" in
1692 ppc)
1693 CPU_CFLAGS="-m32"
1694 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1696 ppc64)
1697 CPU_CFLAGS="-m64"
1698 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1700 sparc)
1701 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1702 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1704 sparc64)
1705 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1706 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1708 s390)
1709 CPU_CFLAGS="-m31"
1710 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1712 s390x)
1713 CPU_CFLAGS="-m64"
1714 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1716 i386)
1717 CPU_CFLAGS="-m32"
1718 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1720 x86_64)
1721 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1722 # If we truly care, we should simply detect this case at
1723 # runtime and generate the fallback to serial emulation.
1724 CPU_CFLAGS="-m64 -mcx16"
1725 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1727 x32)
1728 CPU_CFLAGS="-mx32"
1729 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1731 # No special flags required for other host CPUs
1732 esac
1734 eval "cross_cc_${cpu}=\$host_cc"
1735 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1736 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1738 # For user-mode emulation the host arch has to be one we explicitly
1739 # support, even if we're using TCI.
1740 if [ "$ARCH" = "unknown" ]; then
1741 bsd_user="no"
1742 linux_user="no"
1745 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1746 tcg="no"
1749 default_target_list=""
1751 mak_wilds=""
1753 if [ "$softmmu" = "yes" ]; then
1754 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1756 if [ "$linux_user" = "yes" ]; then
1757 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1759 if [ "$bsd_user" = "yes" ]; then
1760 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1763 if test -z "$target_list_exclude"; then
1764 for config in $mak_wilds; do
1765 default_target_list="${default_target_list} $(basename "$config" .mak)"
1766 done
1767 else
1768 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1769 for config in $mak_wilds; do
1770 target="$(basename "$config" .mak)"
1771 exclude="no"
1772 for excl in $exclude_list; do
1773 if test "$excl" = "$target"; then
1774 exclude="yes"
1775 break;
1777 done
1778 if test "$exclude" = "no"; then
1779 default_target_list="${default_target_list} $target"
1781 done
1784 # Enumerate public trace backends for --help output
1785 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1787 if test x"$show_help" = x"yes" ; then
1788 cat << EOF
1790 Usage: configure [options]
1791 Options: [defaults in brackets after descriptions]
1793 Standard options:
1794 --help print this message
1795 --prefix=PREFIX install in PREFIX [$prefix]
1796 --interp-prefix=PREFIX where to find shared libraries, etc.
1797 use %M for cpu name [$interp_prefix]
1798 --target-list=LIST set target list (default: build everything)
1799 $(echo Available targets: $default_target_list | \
1800 fold -s -w 53 | sed -e 's/^/ /')
1801 --target-list-exclude=LIST exclude a set of targets from the default target-list
1803 Advanced options (experts only):
1804 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1805 --cc=CC use C compiler CC [$cc]
1806 --iasl=IASL use ACPI compiler IASL [$iasl]
1807 --host-cc=CC use C compiler CC [$host_cc] for code run at
1808 build time
1809 --cxx=CXX use C++ compiler CXX [$cxx]
1810 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1811 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1812 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1813 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1814 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1815 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1816 --make=MAKE use specified make [$make]
1817 --install=INSTALL use specified install [$install]
1818 --python=PYTHON use specified python [$python]
1819 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1820 --meson=MESON use specified meson [$meson]
1821 --smbd=SMBD use specified smbd [$smbd]
1822 --with-git=GIT use specified git [$git]
1823 --static enable static build [$static]
1824 --mandir=PATH install man pages in PATH
1825 --datadir=PATH install firmware in PATH$confsuffix
1826 --docdir=PATH install documentation in PATH$confsuffix
1827 --bindir=PATH install binaries in PATH
1828 --libdir=PATH install libraries in PATH
1829 --libexecdir=PATH install helper binaries in PATH
1830 --sysconfdir=PATH install config in PATH$confsuffix
1831 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1832 --firmwarepath=PATH search PATH for firmware files
1833 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1834 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1835 --with-pkgversion=VERS use specified string as sub-version of the package
1836 --enable-debug enable common debug build options
1837 --enable-sanitizers enable default sanitizers
1838 --enable-tsan enable thread sanitizer
1839 --disable-strip disable stripping binaries
1840 --disable-werror disable compilation abort on warning
1841 --disable-stack-protector disable compiler-provided stack protection
1842 --audio-drv-list=LIST set audio drivers list:
1843 Available drivers: $audio_possible_drivers
1844 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1845 --block-drv-rw-whitelist=L
1846 set block driver read-write whitelist
1847 (affects only QEMU, not qemu-img)
1848 --block-drv-ro-whitelist=L
1849 set block driver read-only whitelist
1850 (affects only QEMU, not qemu-img)
1851 --enable-trace-backends=B Set trace backend
1852 Available backends: $trace_backend_list
1853 --with-trace-file=NAME Full PATH,NAME of file to store traces
1854 Default:trace-<pid>
1855 --disable-slirp disable SLIRP userspace network connectivity
1856 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1857 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1858 --oss-lib path to OSS library
1859 --cpu=CPU Build for host CPU [$cpu]
1860 --with-coroutine=BACKEND coroutine backend. Supported options:
1861 ucontext, sigaltstack, windows
1862 --enable-gcov enable test coverage analysis with gcov
1863 --disable-blobs disable installing provided firmware blobs
1864 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1865 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1866 --tls-priority default TLS protocol/cipher priority string
1867 --enable-gprof QEMU profiling with gprof
1868 --enable-profiler profiler support
1869 --enable-debug-stack-usage
1870 track the maximum stack usage of stacks created by qemu_alloc_stack
1871 --enable-plugins
1872 enable plugins via shared library loading
1873 --disable-containers don't use containers for cross-building
1874 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1876 Optional features, enabled with --enable-FEATURE and
1877 disabled with --disable-FEATURE, default is enabled if available:
1879 system all system emulation targets
1880 user supported user emulation targets
1881 linux-user all linux usermode emulation targets
1882 bsd-user all BSD usermode emulation targets
1883 docs build documentation
1884 guest-agent build the QEMU Guest Agent
1885 guest-agent-msi build guest agent Windows MSI installation package
1886 pie Position Independent Executables
1887 modules modules support (non-Windows)
1888 module-upgrades try to load modules from alternate paths for upgrades
1889 debug-tcg TCG debugging (default is disabled)
1890 debug-info debugging information
1891 sparse sparse checker
1892 safe-stack SafeStack Stack Smash Protection. Depends on
1893 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1895 gnutls GNUTLS cryptography support
1896 nettle nettle cryptography support
1897 gcrypt libgcrypt cryptography support
1898 auth-pam PAM access control
1899 sdl SDL UI
1900 sdl-image SDL Image support for icons
1901 gtk gtk UI
1902 vte vte support for the gtk UI
1903 curses curses UI
1904 iconv font glyph conversion support
1905 vnc VNC UI support
1906 vnc-sasl SASL encryption for VNC server
1907 vnc-jpeg JPEG lossy compression for VNC server
1908 vnc-png PNG compression for VNC server
1909 cocoa Cocoa UI (Mac OS X only)
1910 virtfs VirtFS
1911 mpath Multipath persistent reservation passthrough
1912 xen xen backend driver support
1913 xen-pci-passthrough PCI passthrough support for Xen
1914 brlapi BrlAPI (Braile)
1915 curl curl connectivity
1916 membarrier membarrier system call (for Linux 4.14+ or Windows)
1917 fdt fdt device tree
1918 kvm KVM acceleration support
1919 hax HAX acceleration support
1920 hvf Hypervisor.framework acceleration support
1921 whpx Windows Hypervisor Platform acceleration support
1922 rdma Enable RDMA-based migration
1923 pvrdma Enable PVRDMA support
1924 vde support for vde network
1925 netmap support for netmap network
1926 linux-aio Linux AIO support
1927 linux-io-uring Linux io_uring support
1928 cap-ng libcap-ng support
1929 attr attr and xattr support
1930 vhost-net vhost-net kernel acceleration support
1931 vhost-vsock virtio sockets device support
1932 vhost-scsi vhost-scsi kernel target support
1933 vhost-crypto vhost-user-crypto backend support
1934 vhost-kernel vhost kernel backend support
1935 vhost-user vhost-user backend support
1936 vhost-vdpa vhost-vdpa kernel backend support
1937 spice spice
1938 rbd rados block device (rbd)
1939 libiscsi iscsi support
1940 libnfs nfs support
1941 smartcard smartcard support (libcacard)
1942 libusb libusb (for usb passthrough)
1943 live-block-migration Block migration in the main migration stream
1944 usb-redir usb network redirection support
1945 lzo support of lzo compression library
1946 snappy support of snappy compression library
1947 bzip2 support of bzip2 compression library
1948 (for reading bzip2-compressed dmg images)
1949 lzfse support of lzfse compression library
1950 (for reading lzfse-compressed dmg images)
1951 zstd support for zstd compression library
1952 (for migration compression and qcow2 cluster compression)
1953 seccomp seccomp support
1954 coroutine-pool coroutine freelist (better performance)
1955 glusterfs GlusterFS backend
1956 tpm TPM support
1957 libssh ssh block device support
1958 numa libnuma support
1959 libxml2 for Parallels image format
1960 tcmalloc tcmalloc support
1961 jemalloc jemalloc support
1962 avx2 AVX2 optimization support
1963 avx512f AVX512F optimization support
1964 replication replication support
1965 opengl opengl support
1966 virglrenderer virgl rendering support
1967 xfsctl xfsctl support
1968 qom-cast-debug cast debugging support
1969 tools build qemu-io, qemu-nbd and qemu-img tools
1970 bochs bochs image format support
1971 cloop cloop image format support
1972 dmg dmg image format support
1973 qcow1 qcow v1 image format support
1974 vdi vdi image format support
1975 vvfat vvfat image format support
1976 qed qed image format support
1977 parallels parallels image format support
1978 sheepdog sheepdog block driver support
1979 crypto-afalg Linux AF_ALG crypto backend driver
1980 capstone capstone disassembler support
1981 debug-mutex mutex debugging support
1982 libpmem libpmem support
1983 xkbcommon xkbcommon support
1984 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1985 libdaxctl libdaxctl support
1987 NOTE: The object files are built at the place where configure is launched
1989 exit 0
1992 # Remove old dependency files to make sure that they get properly regenerated
1993 rm -f */config-devices.mak.d
1995 # Remove syscall_nr.h to be sure they will be regenerated in the build
1996 # directory, not in the source directory
1997 for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1998 i386 x86_64 mips mips64 ; do
1999 # remove the file if it has been generated in the source directory
2000 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
2001 # remove the dependency files
2002 for target in ${arch}*-linux-user ; do
2003 test -d "${target}" && find "${target}" -type f -name "*.d" \
2004 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
2005 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
2006 done
2007 done
2009 if test -z "$python"
2010 then
2011 error_exit "Python not found. Use --python=/path/to/python"
2014 # Note that if the Python conditional here evaluates True we will exit
2015 # with status 1 which is a shell 'false' value.
2016 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2017 error_exit "Cannot use '$python', Python >= 3.5 is required." \
2018 "Use --python=/path/to/python to specify a supported Python."
2021 # Preserve python version since some functionality is dependent on it
2022 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)
2024 # Suppress writing compiled files
2025 python="$python -B"
2027 if test -z "$meson"; then
2028 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.0; then
2029 meson=meson
2030 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2031 meson=git
2032 elif test -e "${source_path}/meson/meson.py" ; then
2033 meson=internal
2034 else
2035 if test "$explicit_python" = yes; then
2036 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2037 else
2038 error_exit "Meson not found. Use --meson=/path/to/meson"
2041 else
2042 # Meson uses its own Python interpreter to invoke other Python scripts,
2043 # but the user wants to use the one they specified with --python.
2045 # We do not want to override the distro Python interpreter (and sometimes
2046 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2047 # just require --meson=git|internal together with --python.
2048 if test "$explicit_python" = yes; then
2049 case "$meson" in
2050 git | internal) ;;
2051 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2052 esac
2056 if test "$meson" = git; then
2057 git_submodules="${git_submodules} meson"
2059 if test "$git_update" = yes; then
2060 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
2063 case "$meson" in
2064 git | internal)
2065 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2066 error_exit "Python setuptools not found"
2068 meson="$python ${source_path}/meson/meson.py"
2070 *) meson=$(command -v meson) ;;
2071 esac
2074 # Check that the C compiler works. Doing this here before testing
2075 # the host CPU ensures that we had a valid CC to autodetect the
2076 # $cpu var (and we should bail right here if that's not the case).
2077 # It also allows the help message to be printed without a CC.
2078 write_c_skeleton;
2079 if compile_object ; then
2080 : C compiler works ok
2081 else
2082 error_exit "\"$cc\" either does not exist or does not work"
2084 if ! compile_prog ; then
2085 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2088 # Now we have handled --enable-tcg-interpreter and know we're not just
2089 # printing the help message, bail out if the host CPU isn't supported.
2090 if test "$ARCH" = "unknown"; then
2091 if test "$tcg_interpreter" = "yes" ; then
2092 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2093 else
2094 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2098 # Consult white-list to determine whether to enable werror
2099 # by default. Only enable by default for git builds
2100 if test -z "$werror" ; then
2101 if test -e "$source_path/.git" && \
2102 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2103 werror="yes"
2104 else
2105 werror="no"
2109 if test "$bogus_os" = "yes"; then
2110 # Now that we know that we're not printing the help and that
2111 # the compiler works (so the results of the check_defines we used
2112 # to identify the OS are reliable), if we didn't recognize the
2113 # host OS we should stop now.
2114 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2117 # Check whether the compiler matches our minimum requirements:
2118 cat > $TMPC << EOF
2119 #if defined(__clang_major__) && defined(__clang_minor__)
2120 # ifdef __apple_build_version__
2121 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2122 # error You need at least XCode Clang v5.1 to compile QEMU
2123 # endif
2124 # else
2125 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2126 # error You need at least Clang v3.4 to compile QEMU
2127 # endif
2128 # endif
2129 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2130 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2131 # error You need at least GCC v4.8 to compile QEMU
2132 # endif
2133 #else
2134 # error You either need GCC or Clang to compiler QEMU
2135 #endif
2136 int main (void) { return 0; }
2138 if ! compile_prog "" "" ; then
2139 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2142 # Accumulate -Wfoo and -Wno-bar separately.
2143 # We will list all of the enable flags first, and the disable flags second.
2144 # Note that we do not add -Werror, because that would enable it for all
2145 # configure tests. If a configure test failed due to -Werror this would
2146 # just silently disable some features, so it's too error prone.
2148 warn_flags=
2149 add_to warn_flags -Wold-style-declaration
2150 add_to warn_flags -Wold-style-definition
2151 add_to warn_flags -Wtype-limits
2152 add_to warn_flags -Wformat-security
2153 add_to warn_flags -Wformat-y2k
2154 add_to warn_flags -Winit-self
2155 add_to warn_flags -Wignored-qualifiers
2156 add_to warn_flags -Wempty-body
2157 add_to warn_flags -Wnested-externs
2158 add_to warn_flags -Wendif-labels
2159 add_to warn_flags -Wexpansion-to-defined
2161 nowarn_flags=
2162 add_to nowarn_flags -Wno-initializer-overrides
2163 add_to nowarn_flags -Wno-missing-include-dirs
2164 add_to nowarn_flags -Wno-shift-negative-value
2165 add_to nowarn_flags -Wno-string-plus-int
2166 add_to nowarn_flags -Wno-typedef-redefinition
2167 add_to nowarn_flags -Wno-tautological-type-limit-compare
2168 add_to nowarn_flags -Wno-psabi
2170 gcc_flags="$warn_flags $nowarn_flags"
2172 cc_has_warning_flag() {
2173 write_c_skeleton;
2175 # Use the positive sense of the flag when testing for -Wno-wombat
2176 # support (gcc will happily accept the -Wno- form of unknown
2177 # warning options).
2178 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2179 compile_prog "-Werror $optflag" ""
2182 for flag in $gcc_flags; do
2183 if cc_has_warning_flag $flag ; then
2184 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2186 done
2188 if test "$stack_protector" != "no"; then
2189 cat > $TMPC << EOF
2190 int main(int argc, char *argv[])
2192 char arr[64], *p = arr, *c = argv[0];
2193 while (*c) {
2194 *p++ = *c++;
2196 return 0;
2199 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2200 sp_on=0
2201 for flag in $gcc_flags; do
2202 # We need to check both a compile and a link, since some compiler
2203 # setups fail only on a .c->.o compile and some only at link time
2204 if compile_object "-Werror $flag" &&
2205 compile_prog "-Werror $flag" ""; then
2206 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2207 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2208 sp_on=1
2209 break
2211 done
2212 if test "$stack_protector" = yes; then
2213 if test $sp_on = 0; then
2214 error_exit "Stack protector not supported"
2219 # Disable -Wmissing-braces on older compilers that warn even for
2220 # the "universal" C zero initializer {0}.
2221 cat > $TMPC << EOF
2222 struct {
2223 int a[2];
2224 } x = {0};
2226 if compile_object "-Werror" "" ; then
2228 else
2229 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2232 # Our module code doesn't support Windows
2233 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2234 error_exit "Modules are not available for Windows"
2237 # module_upgrades is only reasonable if modules are enabled
2238 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2239 error_exit "Can't enable module-upgrades as Modules are not enabled"
2242 # Static linking is not possible with modules or PIE
2243 if test "$static" = "yes" ; then
2244 if test "$modules" = "yes" ; then
2245 error_exit "static and modules are mutually incompatible"
2249 # Unconditional check for compiler __thread support
2250 cat > $TMPC << EOF
2251 static __thread int tls_var;
2252 int main(void) { return tls_var; }
2255 if ! compile_prog "-Werror" "" ; then
2256 error_exit "Your compiler does not support the __thread specifier for " \
2257 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2260 cat > $TMPC << EOF
2262 #ifdef __linux__
2263 # define THREAD __thread
2264 #else
2265 # define THREAD
2266 #endif
2267 static THREAD int tls_var;
2268 int main(void) { return tls_var; }
2271 # Check we support --no-pie first; we will need this for building ROMs.
2272 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2273 CFLAGS_NOPIE="-fno-pie"
2274 LDFLAGS_NOPIE="-no-pie"
2277 if test "$static" = "yes"; then
2278 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2279 CFLAGS="-fPIE -DPIE $CFLAGS"
2280 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2281 pie="yes"
2282 elif test "$pie" = "yes"; then
2283 error_exit "-static-pie not available due to missing toolchain support"
2284 else
2285 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2286 pie="no"
2288 elif test "$pie" = "no"; then
2289 CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2290 LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2291 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2292 CFLAGS="-fPIE -DPIE $CFLAGS"
2293 LDFLAGS="-pie $LDFLAGS"
2294 pie="yes"
2295 elif test "$pie" = "yes"; then
2296 error_exit "PIE not available due to missing toolchain support"
2297 else
2298 echo "Disabling PIE due to missing toolchain support"
2299 pie="no"
2302 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2303 # The combination is known as "full relro", because .got.plt is read-only too.
2304 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2305 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2308 ##########################################
2309 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2310 # use i686 as default anyway, but for those that don't, an explicit
2311 # specification is necessary
2313 if test "$cpu" = "i386"; then
2314 cat > $TMPC << EOF
2315 static int sfaa(int *ptr)
2317 return __sync_fetch_and_and(ptr, 0);
2320 int main(void)
2322 int val = 42;
2323 val = __sync_val_compare_and_swap(&val, 0, 1);
2324 sfaa(&val);
2325 return val;
2328 if ! compile_prog "" "" ; then
2329 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2333 #########################################
2334 # Solaris specific configure tool chain decisions
2336 if test "$solaris" = "yes" ; then
2337 if has $install; then
2339 else
2340 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2341 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2342 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2344 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2345 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2346 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2347 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2349 if has ar; then
2351 else
2352 if test -f /usr/ccs/bin/ar ; then
2353 error_exit "No path includes ar" \
2354 "Add /usr/ccs/bin to your path and rerun configure"
2356 error_exit "No path includes ar"
2360 if test -z "${target_list+xxx}" ; then
2361 for target in $default_target_list; do
2362 supported_target $target 2>/dev/null && \
2363 target_list="$target_list $target"
2364 done
2365 target_list="${target_list# }"
2366 else
2367 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2368 for target in $target_list; do
2369 # Check that we recognised the target name; this allows a more
2370 # friendly error message than if we let it fall through.
2371 case " $default_target_list " in
2372 *" $target "*)
2375 error_exit "Unknown target name '$target'"
2377 esac
2378 supported_target $target || exit 1
2379 done
2382 # see if system emulation was really requested
2383 case " $target_list " in
2384 *"-softmmu "*) softmmu=yes
2386 *) softmmu=no
2388 esac
2390 for target in $target_list; do
2391 case "$target" in
2392 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2393 edk2_blobs="yes"
2395 esac
2396 done
2397 # The EDK2 binaries are compressed with bzip2
2398 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2399 error_exit "The bzip2 program is required for building QEMU"
2402 feature_not_found() {
2403 feature=$1
2404 remedy=$2
2406 error_exit "User requested feature $feature" \
2407 "configure was not able to find it." \
2408 "$remedy"
2411 # ---
2412 # big/little endian test
2413 cat > $TMPC << EOF
2414 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2415 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2416 extern int foo(short *, short *);
2417 int main(int argc, char *argv[]) {
2418 return foo(big_endian, little_endian);
2422 if compile_object ; then
2423 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2424 bigendian="yes"
2425 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2426 bigendian="no"
2427 else
2428 echo big/little test failed
2430 else
2431 echo big/little test failed
2434 ##########################################
2435 # system tools
2436 if test -z "$want_tools"; then
2437 if test "$softmmu" = "no"; then
2438 want_tools=no
2439 else
2440 want_tools=yes
2444 ##########################################
2445 # cocoa implies not SDL or GTK
2446 # (the cocoa UI code currently assumes it is always the active UI
2447 # and doesn't interact well with other UI frontend code)
2448 if test "$cocoa" = "yes"; then
2449 if test "$sdl" = "yes"; then
2450 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2452 if test "$gtk" = "yes"; then
2453 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2455 gtk=no
2456 sdl=no
2459 # Some versions of Mac OS X incorrectly define SIZE_MAX
2460 cat > $TMPC << EOF
2461 #include <stdint.h>
2462 #include <stdio.h>
2463 int main(int argc, char *argv[]) {
2464 return printf("%zu", SIZE_MAX);
2467 have_broken_size_max=no
2468 if ! compile_object -Werror ; then
2469 have_broken_size_max=yes
2472 ##########################################
2473 # L2TPV3 probe
2475 cat > $TMPC <<EOF
2476 #include <sys/socket.h>
2477 #include <linux/ip.h>
2478 int main(void) { return sizeof(struct mmsghdr); }
2480 if compile_prog "" "" ; then
2481 l2tpv3=yes
2482 else
2483 l2tpv3=no
2486 if check_include "pty.h" ; then
2487 pty_h=yes
2488 else
2489 pty_h=no
2492 cat > $TMPC <<EOF
2493 #include <sys/mman.h>
2494 int main(int argc, char *argv[]) {
2495 return mlockall(MCL_FUTURE);
2498 if compile_prog "" "" ; then
2499 have_mlockall=yes
2500 else
2501 have_mlockall=no
2504 #########################################
2505 # vhost interdependencies and host support
2507 # vhost backends
2508 test "$vhost_user" = "" && vhost_user=yes
2509 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2510 error_exit "vhost-user isn't available on win32"
2512 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2513 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2514 error_exit "vhost-vdpa is only available on Linux"
2516 test "$vhost_kernel" = "" && vhost_kernel=$linux
2517 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2518 error_exit "vhost-kernel is only available on Linux"
2521 # vhost-kernel devices
2522 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2523 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2524 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2526 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2527 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2528 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2531 # vhost-user backends
2532 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2533 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2534 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2536 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2537 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2538 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2540 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2541 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2542 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2544 #vhost-vdpa backends
2545 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2546 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2547 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2550 # OR the vhost-kernel and vhost-user values for simplicity
2551 if test "$vhost_net" = ""; then
2552 test "$vhost_net_user" = "yes" && vhost_net=yes
2553 test "$vhost_kernel" = "yes" && vhost_net=yes
2556 ##########################################
2557 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2559 if test "$mingw32" = "yes"; then
2560 # Some versions of MinGW / Mingw-w64 lack localtime_r
2561 # and gmtime_r entirely.
2563 # Some versions of Mingw-w64 define a macro for
2564 # localtime_r/gmtime_r.
2566 # Some versions of Mingw-w64 will define functions
2567 # for localtime_r/gmtime_r, but only if you have
2568 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2569 # though, unistd.h and pthread.h both define
2570 # that for you.
2572 # So this #undef localtime_r and #include <unistd.h>
2573 # are not in fact redundant.
2574 cat > $TMPC << EOF
2575 #include <unistd.h>
2576 #include <time.h>
2577 #undef localtime_r
2578 int main(void) { localtime_r(NULL, NULL); return 0; }
2580 if compile_prog "" "" ; then
2581 localtime_r="yes"
2582 else
2583 localtime_r="no"
2587 ##########################################
2588 # pkg-config probe
2590 if ! has "$pkg_config_exe"; then
2591 error_exit "pkg-config binary '$pkg_config_exe' not found"
2594 ##########################################
2595 # NPTL probe
2597 if test "$linux_user" = "yes"; then
2598 cat > $TMPC <<EOF
2599 #include <sched.h>
2600 #include <linux/futex.h>
2601 int main(void) {
2602 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2603 #error bork
2604 #endif
2605 return 0;
2608 if ! compile_object ; then
2609 feature_not_found "nptl" "Install glibc and linux kernel headers."
2613 ##########################################
2614 # lzo check
2616 if test "$lzo" != "no" ; then
2617 cat > $TMPC << EOF
2618 #include <lzo/lzo1x.h>
2619 int main(void) { lzo_version(); return 0; }
2621 if compile_prog "" "-llzo2" ; then
2622 libs_softmmu="$libs_softmmu -llzo2"
2623 lzo="yes"
2624 else
2625 if test "$lzo" = "yes"; then
2626 feature_not_found "liblzo2" "Install liblzo2 devel"
2628 lzo="no"
2632 ##########################################
2633 # snappy check
2635 if test "$snappy" != "no" ; then
2636 cat > $TMPC << EOF
2637 #include <snappy-c.h>
2638 int main(void) { snappy_max_compressed_length(4096); return 0; }
2640 if compile_prog "" "-lsnappy" ; then
2641 libs_softmmu="$libs_softmmu -lsnappy"
2642 snappy="yes"
2643 else
2644 if test "$snappy" = "yes"; then
2645 feature_not_found "libsnappy" "Install libsnappy devel"
2647 snappy="no"
2651 ##########################################
2652 # bzip2 check
2654 if test "$bzip2" != "no" ; then
2655 cat > $TMPC << EOF
2656 #include <bzlib.h>
2657 int main(void) { BZ2_bzlibVersion(); return 0; }
2659 if compile_prog "" "-lbz2" ; then
2660 bzip2="yes"
2661 else
2662 if test "$bzip2" = "yes"; then
2663 feature_not_found "libbzip2" "Install libbzip2 devel"
2665 bzip2="no"
2669 ##########################################
2670 # lzfse check
2672 if test "$lzfse" != "no" ; then
2673 cat > $TMPC << EOF
2674 #include <lzfse.h>
2675 int main(void) { lzfse_decode_scratch_size(); return 0; }
2677 if compile_prog "" "-llzfse" ; then
2678 lzfse="yes"
2679 else
2680 if test "$lzfse" = "yes"; then
2681 feature_not_found "lzfse" "Install lzfse devel"
2683 lzfse="no"
2687 ##########################################
2688 # zstd check
2690 if test "$zstd" != "no" ; then
2691 libzstd_minver="1.4.0"
2692 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2693 zstd_cflags="$($pkg_config --cflags libzstd)"
2694 zstd_libs="$($pkg_config --libs libzstd)"
2695 LIBS="$zstd_libs $LIBS"
2696 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2697 zstd="yes"
2698 else
2699 if test "$zstd" = "yes" ; then
2700 feature_not_found "libzstd" "Install libzstd devel"
2702 zstd="no"
2706 ##########################################
2707 # libseccomp check
2709 if test "$seccomp" != "no" ; then
2710 libseccomp_minver="2.3.0"
2711 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2712 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2713 seccomp_libs="$($pkg_config --libs libseccomp)"
2714 seccomp="yes"
2715 else
2716 if test "$seccomp" = "yes" ; then
2717 feature_not_found "libseccomp" \
2718 "Install libseccomp devel >= $libseccomp_minver"
2720 seccomp="no"
2723 ##########################################
2724 # xen probe
2726 if test "$xen" != "no" ; then
2727 # Check whether Xen library path is specified via --extra-ldflags to avoid
2728 # overriding this setting with pkg-config output. If not, try pkg-config
2729 # to obtain all needed flags.
2731 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2732 $pkg_config --exists xencontrol ; then
2733 xen_ctrl_version="$(printf '%d%02d%02d' \
2734 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2735 xen=yes
2736 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2737 xen_pc="$xen_pc xenevtchn xendevicemodel"
2738 if $pkg_config --exists xentoolcore; then
2739 xen_pc="$xen_pc xentoolcore"
2741 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2742 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2743 else
2745 xen_libs="-lxenstore -lxenctrl -lxenguest"
2746 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2748 # First we test whether Xen headers and libraries are available.
2749 # If no, we are done and there is no Xen support.
2750 # If yes, more tests are run to detect the Xen version.
2752 # Xen (any)
2753 cat > $TMPC <<EOF
2754 #include <xenctrl.h>
2755 int main(void) {
2756 return 0;
2759 if ! compile_prog "" "$xen_libs" ; then
2760 # Xen not found
2761 if test "$xen" = "yes" ; then
2762 feature_not_found "xen" "Install xen devel"
2764 xen=no
2766 # Xen unstable
2767 elif
2768 cat > $TMPC <<EOF &&
2769 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2770 #define __XEN_TOOLS__
2771 #include <xendevicemodel.h>
2772 #include <xenforeignmemory.h>
2773 int main(void) {
2774 xendevicemodel_handle *xd;
2775 xenforeignmemory_handle *xfmem;
2777 xd = xendevicemodel_open(0, 0);
2778 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2780 xfmem = xenforeignmemory_open(0, 0);
2781 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2783 return 0;
2786 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2787 then
2788 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2789 xen_ctrl_version=41100
2790 xen=yes
2791 elif
2792 cat > $TMPC <<EOF &&
2793 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2794 #include <xenforeignmemory.h>
2795 #include <xentoolcore.h>
2796 int main(void) {
2797 xenforeignmemory_handle *xfmem;
2799 xfmem = xenforeignmemory_open(0, 0);
2800 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2801 xentoolcore_restrict_all(0);
2803 return 0;
2806 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2807 then
2808 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2809 xen_ctrl_version=41000
2810 xen=yes
2811 elif
2812 cat > $TMPC <<EOF &&
2813 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2814 #define __XEN_TOOLS__
2815 #include <xendevicemodel.h>
2816 int main(void) {
2817 xendevicemodel_handle *xd;
2819 xd = xendevicemodel_open(0, 0);
2820 xendevicemodel_close(xd);
2822 return 0;
2825 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2826 then
2827 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2828 xen_ctrl_version=40900
2829 xen=yes
2830 elif
2831 cat > $TMPC <<EOF &&
2833 * If we have stable libs the we don't want the libxc compat
2834 * layers, regardless of what CFLAGS we may have been given.
2836 * Also, check if xengnttab_grant_copy_segment_t is defined and
2837 * grant copy operation is implemented.
2839 #undef XC_WANT_COMPAT_EVTCHN_API
2840 #undef XC_WANT_COMPAT_GNTTAB_API
2841 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2842 #include <xenctrl.h>
2843 #include <xenstore.h>
2844 #include <xenevtchn.h>
2845 #include <xengnttab.h>
2846 #include <xenforeignmemory.h>
2847 #include <stdint.h>
2848 #include <xen/hvm/hvm_info_table.h>
2849 #if !defined(HVM_MAX_VCPUS)
2850 # error HVM_MAX_VCPUS not defined
2851 #endif
2852 int main(void) {
2853 xc_interface *xc = NULL;
2854 xenforeignmemory_handle *xfmem;
2855 xenevtchn_handle *xe;
2856 xengnttab_handle *xg;
2857 xengnttab_grant_copy_segment_t* seg = NULL;
2859 xs_daemon_open();
2861 xc = xc_interface_open(0, 0, 0);
2862 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2863 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2864 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2865 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2867 xfmem = xenforeignmemory_open(0, 0);
2868 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2870 xe = xenevtchn_open(0, 0);
2871 xenevtchn_fd(xe);
2873 xg = xengnttab_open(0, 0);
2874 xengnttab_grant_copy(xg, 0, seg);
2876 return 0;
2879 compile_prog "" "$xen_libs $xen_stable_libs"
2880 then
2881 xen_ctrl_version=40800
2882 xen=yes
2883 elif
2884 cat > $TMPC <<EOF &&
2886 * If we have stable libs the we don't want the libxc compat
2887 * layers, regardless of what CFLAGS we may have been given.
2889 #undef XC_WANT_COMPAT_EVTCHN_API
2890 #undef XC_WANT_COMPAT_GNTTAB_API
2891 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2892 #include <xenctrl.h>
2893 #include <xenstore.h>
2894 #include <xenevtchn.h>
2895 #include <xengnttab.h>
2896 #include <xenforeignmemory.h>
2897 #include <stdint.h>
2898 #include <xen/hvm/hvm_info_table.h>
2899 #if !defined(HVM_MAX_VCPUS)
2900 # error HVM_MAX_VCPUS not defined
2901 #endif
2902 int main(void) {
2903 xc_interface *xc = NULL;
2904 xenforeignmemory_handle *xfmem;
2905 xenevtchn_handle *xe;
2906 xengnttab_handle *xg;
2908 xs_daemon_open();
2910 xc = xc_interface_open(0, 0, 0);
2911 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2912 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2913 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2914 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2916 xfmem = xenforeignmemory_open(0, 0);
2917 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2919 xe = xenevtchn_open(0, 0);
2920 xenevtchn_fd(xe);
2922 xg = xengnttab_open(0, 0);
2923 xengnttab_map_grant_ref(xg, 0, 0, 0);
2925 return 0;
2928 compile_prog "" "$xen_libs $xen_stable_libs"
2929 then
2930 xen_ctrl_version=40701
2931 xen=yes
2933 # Xen 4.6
2934 elif
2935 cat > $TMPC <<EOF &&
2936 #include <xenctrl.h>
2937 #include <xenstore.h>
2938 #include <stdint.h>
2939 #include <xen/hvm/hvm_info_table.h>
2940 #if !defined(HVM_MAX_VCPUS)
2941 # error HVM_MAX_VCPUS not defined
2942 #endif
2943 int main(void) {
2944 xc_interface *xc;
2945 xs_daemon_open();
2946 xc = xc_interface_open(0, 0, 0);
2947 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2948 xc_gnttab_open(NULL, 0);
2949 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2950 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2951 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2952 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2953 return 0;
2956 compile_prog "" "$xen_libs"
2957 then
2958 xen_ctrl_version=40600
2959 xen=yes
2961 # Xen 4.5
2962 elif
2963 cat > $TMPC <<EOF &&
2964 #include <xenctrl.h>
2965 #include <xenstore.h>
2966 #include <stdint.h>
2967 #include <xen/hvm/hvm_info_table.h>
2968 #if !defined(HVM_MAX_VCPUS)
2969 # error HVM_MAX_VCPUS not defined
2970 #endif
2971 int main(void) {
2972 xc_interface *xc;
2973 xs_daemon_open();
2974 xc = xc_interface_open(0, 0, 0);
2975 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2976 xc_gnttab_open(NULL, 0);
2977 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2978 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2979 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2980 return 0;
2983 compile_prog "" "$xen_libs"
2984 then
2985 xen_ctrl_version=40500
2986 xen=yes
2988 elif
2989 cat > $TMPC <<EOF &&
2990 #include <xenctrl.h>
2991 #include <xenstore.h>
2992 #include <stdint.h>
2993 #include <xen/hvm/hvm_info_table.h>
2994 #if !defined(HVM_MAX_VCPUS)
2995 # error HVM_MAX_VCPUS not defined
2996 #endif
2997 int main(void) {
2998 xc_interface *xc;
2999 xs_daemon_open();
3000 xc = xc_interface_open(0, 0, 0);
3001 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
3002 xc_gnttab_open(NULL, 0);
3003 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
3004 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
3005 return 0;
3008 compile_prog "" "$xen_libs"
3009 then
3010 xen_ctrl_version=40200
3011 xen=yes
3013 else
3014 if test "$xen" = "yes" ; then
3015 feature_not_found "xen (unsupported version)" \
3016 "Install a supported xen (xen 4.2 or newer)"
3018 xen=no
3021 if test "$xen" = yes; then
3022 if test $xen_ctrl_version -ge 40701 ; then
3023 libs_softmmu="$xen_stable_libs $libs_softmmu"
3025 libs_softmmu="$xen_libs $libs_softmmu"
3030 if test "$xen_pci_passthrough" != "no"; then
3031 if test "$xen" = "yes" && test "$linux" = "yes"; then
3032 xen_pci_passthrough=yes
3033 else
3034 if test "$xen_pci_passthrough" = "yes"; then
3035 error_exit "User requested feature Xen PCI Passthrough" \
3036 " but this feature requires /sys from Linux"
3038 xen_pci_passthrough=no
3042 ##########################################
3043 # Windows Hypervisor Platform accelerator (WHPX) check
3044 if test "$whpx" != "no" ; then
3045 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3046 whpx="yes"
3047 else
3048 if test "$whpx" = "yes"; then
3049 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3051 whpx="no"
3055 ##########################################
3056 # Sparse probe
3057 if test "$sparse" != "no" ; then
3058 if has sparse; then
3059 sparse=yes
3060 else
3061 if test "$sparse" = "yes" ; then
3062 feature_not_found "sparse" "Install sparse binary"
3064 sparse=no
3068 ##########################################
3069 # X11 probe
3070 if $pkg_config --exists "x11"; then
3071 have_x11=yes
3072 x11_cflags=$($pkg_config --cflags x11)
3073 x11_libs=$($pkg_config --libs x11)
3076 ##########################################
3077 # GTK probe
3079 if test "$gtk" != "no"; then
3080 gtkpackage="gtk+-3.0"
3081 gtkx11package="gtk+-x11-3.0"
3082 gtkversion="3.22.0"
3083 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3084 gtk_cflags=$($pkg_config --cflags $gtkpackage)
3085 gtk_libs=$($pkg_config --libs $gtkpackage)
3086 gtk_version=$($pkg_config --modversion $gtkpackage)
3087 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3088 need_x11=yes
3089 gtk_cflags="$gtk_cflags $x11_cflags"
3090 gtk_libs="$gtk_libs $x11_libs"
3092 gtk="yes"
3093 elif test "$gtk" = "yes"; then
3094 feature_not_found "gtk" "Install gtk3-devel"
3095 else
3096 gtk="no"
3101 ##########################################
3102 # GNUTLS probe
3104 if test "$gnutls" != "no"; then
3105 pass="no"
3106 if $pkg_config --exists "gnutls >= 3.1.18"; then
3107 gnutls_cflags=$($pkg_config --cflags gnutls)
3108 gnutls_libs=$($pkg_config --libs gnutls)
3109 # Packaging for the static libraries is not always correct.
3110 # At least ubuntu 18.04 ships only shared libraries.
3111 write_c_skeleton
3112 if compile_prog "" "$gnutls_libs" ; then
3113 LIBS="$gnutls_libs $LIBS"
3114 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3115 pass="yes"
3118 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3119 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3120 else
3121 gnutls="$pass"
3126 # If user didn't give a --disable/enable-gcrypt flag,
3127 # then mark as disabled if user requested nettle
3128 # explicitly
3129 if test -z "$gcrypt"
3130 then
3131 if test "$nettle" = "yes"
3132 then
3133 gcrypt="no"
3137 # If user didn't give a --disable/enable-nettle flag,
3138 # then mark as disabled if user requested gcrypt
3139 # explicitly
3140 if test -z "$nettle"
3141 then
3142 if test "$gcrypt" = "yes"
3143 then
3144 nettle="no"
3148 has_libgcrypt() {
3149 if ! has "libgcrypt-config"
3150 then
3151 return 1
3154 if test -n "$cross_prefix"
3155 then
3156 host=$(libgcrypt-config --host)
3157 if test "$host-" != $cross_prefix
3158 then
3159 return 1
3163 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3164 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3166 if test $maj != 1 || test $min -lt 5
3167 then
3168 return 1
3171 return 0
3175 if test "$nettle" != "no"; then
3176 pass="no"
3177 if $pkg_config --exists "nettle >= 2.7.1"; then
3178 nettle_cflags=$($pkg_config --cflags nettle)
3179 nettle_libs=$($pkg_config --libs nettle)
3180 nettle_version=$($pkg_config --modversion nettle)
3181 # Link test to make sure the given libraries work (e.g for static).
3182 write_c_skeleton
3183 if compile_prog "" "$nettle_libs" ; then
3184 LIBS="$nettle_libs $LIBS"
3185 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3186 if test -z "$gcrypt"; then
3187 gcrypt="no"
3189 pass="yes"
3192 if test "$pass" = "yes"
3193 then
3194 cat > $TMPC << EOF
3195 #include <nettle/xts.h>
3196 int main(void) {
3197 return 0;
3200 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3201 nettle_xts=yes
3202 qemu_private_xts=no
3205 if test "$pass" = "no" && test "$nettle" = "yes"; then
3206 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3207 else
3208 nettle="$pass"
3212 if test "$gcrypt" != "no"; then
3213 pass="no"
3214 if has_libgcrypt; then
3215 gcrypt_cflags=$(libgcrypt-config --cflags)
3216 gcrypt_libs=$(libgcrypt-config --libs)
3217 # Debian has removed -lgpg-error from libgcrypt-config
3218 # as it "spreads unnecessary dependencies" which in
3219 # turn breaks static builds...
3220 if test "$static" = "yes"
3221 then
3222 gcrypt_libs="$gcrypt_libs -lgpg-error"
3225 # Link test to make sure the given libraries work (e.g for static).
3226 write_c_skeleton
3227 if compile_prog "" "$gcrypt_libs" ; then
3228 LIBS="$gcrypt_libs $LIBS"
3229 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3230 pass="yes"
3233 if test "$pass" = "yes"; then
3234 gcrypt="yes"
3235 cat > $TMPC << EOF
3236 #include <gcrypt.h>
3237 int main(void) {
3238 gcry_mac_hd_t handle;
3239 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3240 GCRY_MAC_FLAG_SECURE, NULL);
3241 return 0;
3244 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3245 gcrypt_hmac=yes
3247 cat > $TMPC << EOF
3248 #include <gcrypt.h>
3249 int main(void) {
3250 gcry_cipher_hd_t handle;
3251 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3252 return 0;
3255 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3256 gcrypt_xts=yes
3257 qemu_private_xts=no
3259 elif test "$gcrypt" = "yes"; then
3260 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3261 else
3262 gcrypt="no"
3267 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3268 then
3269 error_exit "Only one of gcrypt & nettle can be enabled"
3272 ##########################################
3273 # libtasn1 - only for the TLS creds/session test suite
3275 tasn1=yes
3276 tasn1_cflags=""
3277 tasn1_libs=""
3278 if $pkg_config --exists "libtasn1"; then
3279 tasn1_cflags=$($pkg_config --cflags libtasn1)
3280 tasn1_libs=$($pkg_config --libs libtasn1)
3281 else
3282 tasn1=no
3286 ##########################################
3287 # PAM probe
3289 if test "$auth_pam" != "no"; then
3290 cat > $TMPC <<EOF
3291 #include <security/pam_appl.h>
3292 #include <stdio.h>
3293 int main(void) {
3294 const char *service_name = "qemu";
3295 const char *user = "frank";
3296 const struct pam_conv pam_conv = { 0 };
3297 pam_handle_t *pamh = NULL;
3298 pam_start(service_name, user, &pam_conv, &pamh);
3299 return 0;
3302 if compile_prog "" "-lpam" ; then
3303 auth_pam=yes
3304 else
3305 if test "$auth_pam" = "yes"; then
3306 feature_not_found "PAM" "Install PAM development package"
3307 else
3308 auth_pam=no
3313 ##########################################
3314 # getifaddrs (for tests/test-io-channel-socket )
3316 have_ifaddrs_h=yes
3317 if ! check_include "ifaddrs.h" ; then
3318 have_ifaddrs_h=no
3321 #########################################
3322 # libdrm check
3323 have_drm_h=no
3324 if check_include "libdrm/drm.h" ; then
3325 have_drm_h=yes
3328 #########################################
3329 # sys/signal.h check
3330 have_sys_signal_h=no
3331 if check_include "sys/signal.h" ; then
3332 have_sys_signal_h=yes
3335 ##########################################
3336 # VTE probe
3338 if test "$vte" != "no"; then
3339 vteminversion="0.32.0"
3340 if $pkg_config --exists "vte-2.91"; then
3341 vtepackage="vte-2.91"
3342 else
3343 vtepackage="vte-2.90"
3345 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3346 vte_cflags=$($pkg_config --cflags $vtepackage)
3347 vte_libs=$($pkg_config --libs $vtepackage)
3348 vteversion=$($pkg_config --modversion $vtepackage)
3349 vte="yes"
3350 elif test "$vte" = "yes"; then
3351 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3352 else
3353 vte="no"
3357 ##########################################
3358 # SDL probe
3360 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3361 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3363 sdl_probe ()
3365 if $pkg_config sdl2 --exists; then
3366 sdlconfig="$pkg_config sdl2"
3367 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3368 elif has "$sdl2_config"; then
3369 sdlconfig="$sdl2_config"
3370 sdlversion=$($sdlconfig --version)
3371 else
3372 if test "$sdl" = "yes" ; then
3373 feature_not_found "sdl" "Install SDL2-devel"
3375 sdl=no
3376 # no need to do the rest
3377 return
3379 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3380 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3383 cat > $TMPC << EOF
3384 #include <SDL.h>
3385 #undef main /* We don't want SDL to override our main() */
3386 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3388 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3389 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3390 if test "$static" = "yes" ; then
3391 if $pkg_config sdl2 --exists; then
3392 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3393 else
3394 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3396 else
3397 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3399 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3400 sdl=yes
3402 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3403 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3404 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3405 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3406 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3408 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3410 else
3411 sdl=no
3413 fi # static link
3414 else # sdl not found
3415 if test "$sdl" = "yes" ; then
3416 feature_not_found "sdl" "Install SDL2 devel"
3418 sdl=no
3419 fi # sdl compile test
3422 sdl_image_probe ()
3424 if test "$sdl_image" != "no" ; then
3425 if $pkg_config SDL2_image --exists; then
3426 if test "$static" = "yes"; then
3427 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3428 else
3429 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3431 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3432 sdl_image=yes
3434 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3435 sdl_libs="$sdl_libs $sdl_image_libs"
3436 else
3437 if test "$sdl_image" = "yes" ; then
3438 feature_not_found "sdl_image" "Install SDL Image devel"
3439 else
3440 sdl_image=no
3446 if test "$sdl" != "no" ; then
3447 sdl_probe
3450 if test "$sdl" = "yes" ; then
3451 sdl_image_probe
3452 else
3453 if test "$sdl_image" = "yes"; then
3454 echo "warning: SDL Image requested, but SDL is not available, disabling"
3456 sdl_image=no
3459 if test "$sdl" = "yes" ; then
3460 cat > $TMPC <<EOF
3461 #include <SDL.h>
3462 #if defined(SDL_VIDEO_DRIVER_X11)
3463 #include <X11/XKBlib.h>
3464 #else
3465 #error No x11 support
3466 #endif
3467 int main(void) { return 0; }
3469 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3470 need_x11=yes
3471 sdl_cflags="$sdl_cflags $x11_cflags"
3472 sdl_libs="$sdl_libs $x11_libs"
3476 ##########################################
3477 # RDMA needs OpenFabrics libraries
3478 if test "$rdma" != "no" ; then
3479 cat > $TMPC <<EOF
3480 #include <rdma/rdma_cma.h>
3481 int main(void) { return 0; }
3483 rdma_libs="-lrdmacm -libverbs -libumad"
3484 if compile_prog "" "$rdma_libs" ; then
3485 rdma="yes"
3486 libs_softmmu="$libs_softmmu $rdma_libs"
3487 else
3488 if test "$rdma" = "yes" ; then
3489 error_exit \
3490 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3491 " Your options:" \
3492 " (1) Fast: Install infiniband packages (devel) from your distro." \
3493 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3494 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3496 rdma="no"
3500 ##########################################
3501 # PVRDMA detection
3503 cat > $TMPC <<EOF &&
3504 #include <sys/mman.h>
3507 main(void)
3509 char buf = 0;
3510 void *addr = &buf;
3511 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3513 return 0;
3517 if test "$rdma" = "yes" ; then
3518 case "$pvrdma" in
3520 if compile_prog "" ""; then
3521 pvrdma="yes"
3522 else
3523 pvrdma="no"
3526 "yes")
3527 if ! compile_prog "" ""; then
3528 error_exit "PVRDMA is not supported since mremap is not implemented"
3530 pvrdma="yes"
3532 "no")
3533 pvrdma="no"
3535 esac
3536 else
3537 if test "$pvrdma" = "yes" ; then
3538 error_exit "PVRDMA requires rdma suppport"
3540 pvrdma="no"
3543 # Let's see if enhanced reg_mr is supported
3544 if test "$pvrdma" = "yes" ; then
3546 cat > $TMPC <<EOF &&
3547 #include <infiniband/verbs.h>
3550 main(void)
3552 struct ibv_mr *mr;
3553 struct ibv_pd *pd = NULL;
3554 size_t length = 10;
3555 uint64_t iova = 0;
3556 int access = 0;
3557 void *addr = NULL;
3559 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3561 ibv_dereg_mr(mr);
3563 return 0;
3566 if ! compile_prog "" "-libverbs"; then
3567 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3571 ##########################################
3572 # VNC SASL detection
3573 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3574 cat > $TMPC <<EOF
3575 #include <sasl/sasl.h>
3576 #include <stdio.h>
3577 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3579 # Assuming Cyrus-SASL installed in /usr prefix
3580 # QEMU defines struct iovec in "qemu/osdep.h",
3581 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3582 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3583 vnc_sasl_libs="-lsasl2"
3584 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3585 vnc_sasl=yes
3586 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3587 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3588 else
3589 if test "$vnc_sasl" = "yes" ; then
3590 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3592 vnc_sasl=no
3596 ##########################################
3597 # VNC JPEG detection
3598 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3599 cat > $TMPC <<EOF
3600 #include <stdio.h>
3601 #include <jpeglib.h>
3602 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3604 vnc_jpeg_cflags=""
3605 vnc_jpeg_libs="-ljpeg"
3606 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3607 vnc_jpeg=yes
3608 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3609 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3610 else
3611 if test "$vnc_jpeg" = "yes" ; then
3612 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3614 vnc_jpeg=no
3618 ##########################################
3619 # VNC PNG detection
3620 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3621 cat > $TMPC <<EOF
3622 //#include <stdio.h>
3623 #include <png.h>
3624 #include <stddef.h>
3625 int main(void) {
3626 png_structp png_ptr;
3627 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3628 return png_ptr != 0;
3631 if $pkg_config libpng --exists; then
3632 vnc_png_cflags=$($pkg_config libpng --cflags)
3633 vnc_png_libs=$($pkg_config libpng --libs)
3634 else
3635 vnc_png_cflags=""
3636 vnc_png_libs="-lpng"
3638 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3639 vnc_png=yes
3640 libs_softmmu="$vnc_png_libs $libs_softmmu"
3641 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3642 else
3643 if test "$vnc_png" = "yes" ; then
3644 feature_not_found "vnc-png" "Install libpng devel"
3646 vnc_png=no
3650 ##########################################
3651 # xkbcommon probe
3652 if test "$xkbcommon" != "no" ; then
3653 if $pkg_config xkbcommon --exists; then
3654 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3655 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3656 xkbcommon=yes
3657 else
3658 if test "$xkbcommon" = "yes" ; then
3659 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3661 xkbcommon=no
3666 ##########################################
3667 # xfsctl() probe, used for file-posix.c
3668 if test "$xfs" != "no" ; then
3669 cat > $TMPC << EOF
3670 #include <stddef.h> /* NULL */
3671 #include <xfs/xfs.h>
3672 int main(void)
3674 xfsctl(NULL, 0, 0, NULL);
3675 return 0;
3678 if compile_prog "" "" ; then
3679 xfs="yes"
3680 else
3681 if test "$xfs" = "yes" ; then
3682 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3684 xfs=no
3688 ##########################################
3689 # vde libraries probe
3690 if test "$vde" != "no" ; then
3691 vde_libs="-lvdeplug"
3692 cat > $TMPC << EOF
3693 #include <libvdeplug.h>
3694 int main(void)
3696 struct vde_open_args a = {0, 0, 0};
3697 char s[] = "";
3698 vde_open(s, s, &a);
3699 return 0;
3702 if compile_prog "" "$vde_libs" ; then
3703 vde=yes
3704 else
3705 if test "$vde" = "yes" ; then
3706 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3708 vde=no
3712 ##########################################
3713 # netmap support probe
3714 # Apart from looking for netmap headers, we make sure that the host API version
3715 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3716 # a minor/major version number. Minor new features will be marked with values up
3717 # to 15, and if something happens that requires a change to the backend we will
3718 # move above 15, submit the backend fixes and modify this two bounds.
3719 if test "$netmap" != "no" ; then
3720 cat > $TMPC << EOF
3721 #include <inttypes.h>
3722 #include <net/if.h>
3723 #include <net/netmap.h>
3724 #include <net/netmap_user.h>
3725 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3726 #error
3727 #endif
3728 int main(void) { return 0; }
3730 if compile_prog "" "" ; then
3731 netmap=yes
3732 else
3733 if test "$netmap" = "yes" ; then
3734 feature_not_found "netmap"
3736 netmap=no
3740 ##########################################
3741 # libcap-ng library probe
3742 if test "$cap_ng" != "no" ; then
3743 cap_libs="-lcap-ng"
3744 cat > $TMPC << EOF
3745 #include <cap-ng.h>
3746 int main(void)
3748 capng_capability_to_name(CAPNG_EFFECTIVE);
3749 return 0;
3752 if compile_prog "" "$cap_libs" ; then
3753 cap_ng=yes
3754 libs_tools="$cap_libs $libs_tools"
3755 else
3756 if test "$cap_ng" = "yes" ; then
3757 feature_not_found "cap_ng" "Install libcap-ng devel"
3759 cap_ng=no
3763 ##########################################
3764 # Sound support libraries probe
3766 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3767 for drv in $audio_drv_list; do
3768 case $drv in
3769 alsa | try-alsa)
3770 if $pkg_config alsa --exists; then
3771 alsa_libs=$($pkg_config alsa --libs)
3772 if test "$drv" = "try-alsa"; then
3773 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3775 else
3776 if test "$drv" = "try-alsa"; then
3777 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3778 else
3779 error_exit "$drv check failed" \
3780 "Make sure to have the $drv libs and headers installed."
3785 pa | try-pa)
3786 if $pkg_config libpulse --exists; then
3787 pulse_libs=$($pkg_config libpulse --libs)
3788 if test "$drv" = "try-pa"; then
3789 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3791 else
3792 if test "$drv" = "try-pa"; then
3793 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3794 else
3795 error_exit "$drv check failed" \
3796 "Make sure to have the $drv libs and headers installed."
3801 sdl)
3802 if test "$sdl" = "no"; then
3803 error_exit "sdl not found or disabled, can not use sdl audio driver"
3807 try-sdl)
3808 if test "$sdl" = "no"; then
3809 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3810 else
3811 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3815 coreaudio)
3816 coreaudio_libs="-framework CoreAudio"
3819 dsound)
3820 dsound_libs="-lole32 -ldxguid"
3821 audio_win_int="yes"
3824 oss)
3825 oss_libs="$oss_lib"
3828 jack | try-jack)
3829 if $pkg_config jack --exists; then
3830 jack_libs=$($pkg_config jack --libs)
3831 if test "$drv" = "try-jack"; then
3832 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3834 else
3835 if test "$drv" = "try-jack"; then
3836 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3837 else
3838 error_exit "$drv check failed" \
3839 "Make sure to have the $drv libs and headers installed."
3845 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3846 error_exit "Unknown driver '$drv' selected" \
3847 "Possible drivers are: $audio_possible_drivers"
3850 esac
3851 done
3853 ##########################################
3854 # BrlAPI probe
3856 if test "$brlapi" != "no" ; then
3857 brlapi_libs="-lbrlapi"
3858 cat > $TMPC << EOF
3859 #include <brlapi.h>
3860 #include <stddef.h>
3861 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3863 if compile_prog "" "$brlapi_libs" ; then
3864 brlapi=yes
3865 else
3866 if test "$brlapi" = "yes" ; then
3867 feature_not_found "brlapi" "Install brlapi devel"
3869 brlapi=no
3873 ##########################################
3874 # iconv probe
3875 if test "$iconv" != "no" ; then
3876 cat > $TMPC << EOF
3877 #include <iconv.h>
3878 int main(void) {
3879 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3880 return conv != (iconv_t) -1;
3883 iconv_prefix_list="/usr/local:/usr"
3884 iconv_lib_list=":-liconv"
3885 IFS=:
3886 for iconv_prefix in $iconv_prefix_list; do
3887 IFS=:
3888 iconv_cflags="-I$iconv_prefix/include"
3889 iconv_ldflags="-L$iconv_prefix/lib"
3890 for iconv_link in $iconv_lib_list; do
3891 unset IFS
3892 iconv_lib="$iconv_ldflags $iconv_link"
3893 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3894 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3895 iconv_found=yes
3896 break
3898 done
3899 if test "$iconv_found" = yes ; then
3900 break
3902 done
3903 if test "$iconv_found" = "yes" ; then
3904 iconv=yes
3905 else
3906 if test "$iconv" = "yes" ; then
3907 feature_not_found "iconv" "Install iconv devel"
3909 iconv=no
3913 ##########################################
3914 # curses probe
3915 if test "$iconv" = "no" ; then
3916 # curses will need iconv
3917 curses=no
3919 if test "$curses" != "no" ; then
3920 if test "$mingw32" = "yes" ; then
3921 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3922 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3923 else
3924 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3925 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3927 curses_found=no
3928 cat > $TMPC << EOF
3929 #include <locale.h>
3930 #include <curses.h>
3931 #include <wchar.h>
3932 #include <langinfo.h>
3933 int main(void) {
3934 const char *codeset;
3935 wchar_t wch = L'w';
3936 setlocale(LC_ALL, "");
3937 resize_term(0, 0);
3938 addwstr(L"wide chars\n");
3939 addnwstr(&wch, 1);
3940 add_wch(WACS_DEGREE);
3941 codeset = nl_langinfo(CODESET);
3942 return codeset != 0;
3945 IFS=:
3946 for curses_inc in $curses_inc_list; do
3947 # Make sure we get the wide character prototypes
3948 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3949 IFS=:
3950 for curses_lib in $curses_lib_list; do
3951 unset IFS
3952 if compile_prog "$curses_inc" "$curses_lib" ; then
3953 curses_found=yes
3954 break
3956 done
3957 if test "$curses_found" = yes ; then
3958 break
3960 done
3961 unset IFS
3962 if test "$curses_found" = "yes" ; then
3963 curses=yes
3964 else
3965 if test "$curses" = "yes" ; then
3966 feature_not_found "curses" "Install ncurses devel"
3968 curses=no
3972 ##########################################
3973 # curl probe
3974 if test "$curl" != "no" ; then
3975 if $pkg_config libcurl --exists; then
3976 curlconfig="$pkg_config libcurl"
3977 else
3978 curlconfig=curl-config
3980 cat > $TMPC << EOF
3981 #include <curl/curl.h>
3982 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3984 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3985 curl_libs=$($curlconfig --libs 2>/dev/null)
3986 if compile_prog "$curl_cflags" "$curl_libs" ; then
3987 curl=yes
3988 else
3989 if test "$curl" = "yes" ; then
3990 feature_not_found "curl" "Install libcurl devel"
3992 curl=no
3994 fi # test "$curl"
3996 ##########################################
3997 # glib support probe
3999 glib_req_ver=2.48
4000 glib_modules=gthread-2.0
4001 if test "$modules" = yes; then
4002 glib_modules="$glib_modules gmodule-export-2.0"
4004 if test "$plugins" = yes; then
4005 glib_modules="$glib_modules gmodule-2.0"
4008 # This workaround is required due to a bug in pkg-config file for glib as it
4009 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
4011 if test "$static" = yes && test "$mingw32" = yes; then
4012 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
4015 for i in $glib_modules; do
4016 if $pkg_config --atleast-version=$glib_req_ver $i; then
4017 glib_cflags=$($pkg_config --cflags $i)
4018 glib_libs=$($pkg_config --libs $i)
4019 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
4020 LIBS="$glib_libs $LIBS"
4021 else
4022 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
4024 done
4026 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
4027 gio=yes
4028 gio_cflags=$($pkg_config --cflags gio-2.0)
4029 gio_libs=$($pkg_config --libs gio-2.0)
4030 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
4031 if [ ! -x "$gdbus_codegen" ]; then
4032 gdbus_codegen=
4034 else
4035 gio=no
4038 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
4039 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
4040 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
4043 # Sanity check that the current size_t matches the
4044 # size that glib thinks it should be. This catches
4045 # problems on multi-arch where people try to build
4046 # 32-bit QEMU while pointing at 64-bit glib headers
4047 cat > $TMPC <<EOF
4048 #include <glib.h>
4049 #include <unistd.h>
4051 #define QEMU_BUILD_BUG_ON(x) \
4052 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
4054 int main(void) {
4055 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
4056 return 0;
4060 if ! compile_prog "$CFLAGS" "$LIBS" ; then
4061 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
4062 "You probably need to set PKG_CONFIG_LIBDIR"\
4063 "to point to the right pkg-config files for your"\
4064 "build target"
4067 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
4068 cat > $TMPC << EOF
4069 #include <glib.h>
4070 int main(void) { return 0; }
4072 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4073 if cc_has_warning_flag "-Wno-unknown-attributes"; then
4074 glib_cflags="-Wno-unknown-attributes $glib_cflags"
4075 QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
4079 # Silence clang warnings triggered by glib < 2.57.2
4080 cat > $TMPC << EOF
4081 #include <glib.h>
4082 typedef struct Foo {
4083 int i;
4084 } Foo;
4085 static void foo_free(Foo *f)
4087 g_free(f);
4089 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
4090 int main(void) { return 0; }
4092 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4093 if cc_has_warning_flag "-Wno-unused-function"; then
4094 glib_cflags="$glib_cflags -Wno-unused-function"
4095 CFLAGS="$CFLAGS -Wno-unused-function"
4099 #########################################
4100 # zlib check
4102 if test "$zlib" != "no" ; then
4103 if $pkg_config --exists zlib; then
4104 zlib_cflags=$($pkg_config --cflags zlib)
4105 zlib_libs=$($pkg_config --libs zlib)
4106 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
4107 LIBS="$zlib_libs $LIBS"
4108 else
4109 cat > $TMPC << EOF
4110 #include <zlib.h>
4111 int main(void) { zlibVersion(); return 0; }
4113 if compile_prog "" "-lz" ; then
4114 LIBS="$LIBS -lz"
4115 else
4116 error_exit "zlib check failed" \
4117 "Make sure to have the zlib libs and headers installed."
4122 ##########################################
4123 # SHA command probe for modules
4124 if test "$modules" = yes; then
4125 shacmd_probe="sha1sum sha1 shasum"
4126 for c in $shacmd_probe; do
4127 if has $c; then
4128 shacmd="$c"
4129 break
4131 done
4132 if test "$shacmd" = ""; then
4133 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4137 ##########################################
4138 # pixman support probe
4140 if test "$softmmu" = "no"; then
4141 pixman_cflags=
4142 pixman_libs=
4143 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4144 pixman_cflags=$($pkg_config --cflags pixman-1)
4145 pixman_libs=$($pkg_config --libs pixman-1)
4146 else
4147 error_exit "pixman >= 0.21.8 not present." \
4148 "Please install the pixman devel package."
4151 ##########################################
4152 # libmpathpersist probe
4154 if test "$mpath" != "no" ; then
4155 # probe for the new API
4156 cat > $TMPC <<EOF
4157 #include <libudev.h>
4158 #include <mpath_persist.h>
4159 unsigned mpath_mx_alloc_len = 1024;
4160 int logsink;
4161 static struct config *multipath_conf;
4162 extern struct udev *udev;
4163 extern struct config *get_multipath_config(void);
4164 extern void put_multipath_config(struct config *conf);
4165 struct udev *udev;
4166 struct config *get_multipath_config(void) { return multipath_conf; }
4167 void put_multipath_config(struct config *conf) { }
4169 int main(void) {
4170 udev = udev_new();
4171 multipath_conf = mpath_lib_init();
4172 return 0;
4175 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4176 mpathpersist=yes
4177 mpathpersist_new_api=yes
4178 else
4179 # probe for the old API
4180 cat > $TMPC <<EOF
4181 #include <libudev.h>
4182 #include <mpath_persist.h>
4183 unsigned mpath_mx_alloc_len = 1024;
4184 int logsink;
4185 int main(void) {
4186 struct udev *udev = udev_new();
4187 mpath_lib_init(udev);
4188 return 0;
4191 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4192 mpathpersist=yes
4193 mpathpersist_new_api=no
4194 else
4195 mpathpersist=no
4198 else
4199 mpathpersist=no
4202 ##########################################
4203 # pthread probe
4204 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4206 pthread=no
4207 cat > $TMPC << EOF
4208 #include <pthread.h>
4209 static void *f(void *p) { return NULL; }
4210 int main(void) {
4211 pthread_t thread;
4212 pthread_create(&thread, 0, f, 0);
4213 return 0;
4216 if compile_prog "" "" ; then
4217 pthread=yes
4218 else
4219 for pthread_lib in $PTHREADLIBS_LIST; do
4220 if compile_prog "" "$pthread_lib" ; then
4221 pthread=yes
4222 found=no
4223 for lib_entry in $LIBS; do
4224 if test "$lib_entry" = "$pthread_lib"; then
4225 found=yes
4226 break
4228 done
4229 if test "$found" = "no"; then
4230 LIBS="$pthread_lib $LIBS"
4232 PTHREAD_LIB="$pthread_lib"
4233 break
4235 done
4238 if test "$mingw32" != yes && test "$pthread" = no; then
4239 error_exit "pthread check failed" \
4240 "Make sure to have the pthread libs and headers installed."
4243 # check for pthread_setname_np with thread id
4244 pthread_setname_np_w_tid=no
4245 cat > $TMPC << EOF
4246 #include <pthread.h>
4248 static void *f(void *p) { return NULL; }
4249 int main(void)
4251 pthread_t thread;
4252 pthread_create(&thread, 0, f, 0);
4253 pthread_setname_np(thread, "QEMU");
4254 return 0;
4257 if compile_prog "" "$pthread_lib" ; then
4258 pthread_setname_np_w_tid=yes
4261 # check for pthread_setname_np without thread id
4262 pthread_setname_np_wo_tid=no
4263 cat > $TMPC << EOF
4264 #include <pthread.h>
4266 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4267 int main(void)
4269 pthread_t thread;
4270 pthread_create(&thread, 0, f, 0);
4271 return 0;
4274 if compile_prog "" "$pthread_lib" ; then
4275 pthread_setname_np_wo_tid=yes
4278 ##########################################
4279 # rbd probe
4280 if test "$rbd" != "no" ; then
4281 cat > $TMPC <<EOF
4282 #include <stdio.h>
4283 #include <rbd/librbd.h>
4284 int main(void) {
4285 rados_t cluster;
4286 rados_create(&cluster, NULL);
4287 return 0;
4290 rbd_libs="-lrbd -lrados"
4291 if compile_prog "" "$rbd_libs" ; then
4292 rbd=yes
4293 else
4294 if test "$rbd" = "yes" ; then
4295 feature_not_found "rados block device" "Install librbd/ceph devel"
4297 rbd=no
4301 ##########################################
4302 # libssh probe
4303 if test "$libssh" != "no" ; then
4304 if $pkg_config --exists libssh; then
4305 libssh_cflags=$($pkg_config libssh --cflags)
4306 libssh_libs=$($pkg_config libssh --libs)
4307 libssh=yes
4308 else
4309 if test "$libssh" = "yes" ; then
4310 error_exit "libssh required for --enable-libssh"
4312 libssh=no
4316 ##########################################
4317 # Check for libssh 0.8
4318 # This is done like this instead of using the LIBSSH_VERSION_* and
4319 # SSH_VERSION_* macros because some distributions in the past shipped
4320 # snapshots of the future 0.8 from Git, and those snapshots did not
4321 # have updated version numbers (still referring to 0.7.0).
4323 if test "$libssh" = "yes"; then
4324 cat > $TMPC <<EOF
4325 #include <libssh/libssh.h>
4326 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4328 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4329 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4333 ##########################################
4334 # linux-aio probe
4336 if test "$linux_aio" != "no" ; then
4337 cat > $TMPC <<EOF
4338 #include <libaio.h>
4339 #include <sys/eventfd.h>
4340 #include <stddef.h>
4341 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4343 if compile_prog "" "-laio" ; then
4344 linux_aio=yes
4345 else
4346 if test "$linux_aio" = "yes" ; then
4347 feature_not_found "linux AIO" "Install libaio devel"
4349 linux_aio=no
4352 ##########################################
4353 # linux-io-uring probe
4355 if test "$linux_io_uring" != "no" ; then
4356 if $pkg_config liburing; then
4357 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4358 linux_io_uring_libs=$($pkg_config --libs liburing)
4359 linux_io_uring=yes
4361 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4362 # seen by programs linking the archive. It's not ideal, but just add the
4363 # library dependency globally.
4364 LIBS="$linux_io_uring_libs $LIBS"
4365 else
4366 if test "$linux_io_uring" = "yes" ; then
4367 feature_not_found "linux io_uring" "Install liburing devel"
4369 linux_io_uring=no
4373 ##########################################
4374 # TPM emulation is only on POSIX
4376 if test "$tpm" = ""; then
4377 if test "$mingw32" = "yes"; then
4378 tpm=no
4379 else
4380 tpm=yes
4382 elif test "$tpm" = "yes"; then
4383 if test "$mingw32" = "yes" ; then
4384 error_exit "TPM emulation only available on POSIX systems"
4388 ##########################################
4389 # attr probe
4391 libattr_libs=
4392 if test "$attr" != "no" ; then
4393 cat > $TMPC <<EOF
4394 #include <stdio.h>
4395 #include <sys/types.h>
4396 #ifdef CONFIG_LIBATTR
4397 #include <attr/xattr.h>
4398 #else
4399 #include <sys/xattr.h>
4400 #endif
4401 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4403 if compile_prog "" "" ; then
4404 attr=yes
4405 # Older distros have <attr/xattr.h>, and need -lattr:
4406 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4407 attr=yes
4408 libattr_libs="-lattr"
4409 LIBS="$libattr_libs $LIBS"
4410 libattr=yes
4411 else
4412 if test "$attr" = "yes" ; then
4413 feature_not_found "ATTR" "Install libc6 or libattr devel"
4415 attr=no
4419 ##########################################
4420 # iovec probe
4421 cat > $TMPC <<EOF
4422 #include <sys/types.h>
4423 #include <sys/uio.h>
4424 #include <unistd.h>
4425 int main(void) { return sizeof(struct iovec); }
4427 iovec=no
4428 if compile_prog "" "" ; then
4429 iovec=yes
4432 ##########################################
4433 # preadv probe
4434 cat > $TMPC <<EOF
4435 #include <sys/types.h>
4436 #include <sys/uio.h>
4437 #include <unistd.h>
4438 int main(void) { return preadv(0, 0, 0, 0); }
4440 preadv=no
4441 if compile_prog "" "" ; then
4442 preadv=yes
4445 ##########################################
4446 # fdt probe
4447 # fdt support is mandatory for at least some target architectures,
4448 # so insist on it if we're building those system emulators.
4449 fdt_required=no
4450 for target in $target_list; do
4451 case $target in
4452 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4453 fdt_required=yes
4455 esac
4456 done
4458 if test "$fdt_required" = "yes"; then
4459 if test "$fdt" = "no"; then
4460 error_exit "fdt disabled but some requested targets require it." \
4461 "You can turn off fdt only if you also disable all the system emulation" \
4462 "targets which need it (by specifying a cut down --target-list)."
4464 fdt=yes
4465 elif test "$fdt" != "yes" ; then
4466 fdt=no
4469 # fdt is only required when building softmmu targets
4470 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4471 fdt="no"
4474 if test "$fdt" != "no" ; then
4475 fdt_libs="-lfdt"
4476 # explicitly check for libfdt_env.h as it is missing in some stable installs
4477 # and test for required functions to make sure we are on a version >= 1.4.2
4478 cat > $TMPC << EOF
4479 #include <libfdt.h>
4480 #include <libfdt_env.h>
4481 int main(void) { fdt_check_full(NULL, 0); return 0; }
4483 if compile_prog "" "$fdt_libs" ; then
4484 # system DTC is good - use it
4485 fdt=system
4486 else
4487 # have GIT checkout, so activate dtc submodule
4488 if test -e "${source_path}/.git" ; then
4489 git_submodules="${git_submodules} dtc"
4491 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4492 fdt=git
4493 mkdir -p dtc
4494 if [ "$pwd_is_source_path" != "y" ] ; then
4495 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4497 fdt_cflags="-I${source_path}/dtc/libfdt"
4498 fdt_ldflags="-L$PWD/dtc/libfdt"
4499 fdt_libs="$fdt_libs"
4500 elif test "$fdt" = "yes" ; then
4501 # Not a git build & no libfdt found, prompt for system install
4502 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4503 "Please install the DTC (libfdt) devel package"
4504 else
4505 # don't have and don't want
4506 fdt_libs=
4507 fdt=no
4512 libs_softmmu="$libs_softmmu $fdt_libs"
4514 ##########################################
4515 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4517 gbm="no"
4518 if $pkg_config gbm; then
4519 gbm_cflags="$($pkg_config --cflags gbm)"
4520 gbm_libs="$($pkg_config --libs gbm)"
4521 gbm="yes"
4524 if test "$opengl" != "no" ; then
4525 opengl_pkgs="epoxy gbm"
4526 if $pkg_config $opengl_pkgs; then
4527 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4528 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4529 opengl=yes
4530 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4531 gtk_gl="yes"
4533 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4534 else
4535 if test "$opengl" = "yes" ; then
4536 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4538 opengl_cflags=""
4539 opengl_libs=""
4540 opengl=no
4544 if test "$opengl" = "yes"; then
4545 cat > $TMPC << EOF
4546 #include <epoxy/egl.h>
4547 #ifndef EGL_MESA_image_dma_buf_export
4548 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4549 #endif
4550 int main(void) { return 0; }
4552 if compile_prog "" "" ; then
4553 opengl_dmabuf=yes
4557 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4558 for target in $target_list; do
4559 case $target in
4560 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4561 need_x11=yes
4563 esac
4564 done
4567 ##########################################
4568 # libxml2 probe
4569 if test "$libxml2" != "no" ; then
4570 if $pkg_config --exists libxml-2.0; then
4571 libxml2="yes"
4572 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4573 libxml2_libs=$($pkg_config --libs libxml-2.0)
4574 else
4575 if test "$libxml2" = "yes"; then
4576 feature_not_found "libxml2" "Install libxml2 devel"
4578 libxml2="no"
4582 ##########################################
4583 # glusterfs probe
4584 if test "$glusterfs" != "no" ; then
4585 if $pkg_config --atleast-version=3 glusterfs-api; then
4586 glusterfs="yes"
4587 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4588 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4589 if $pkg_config --atleast-version=4 glusterfs-api; then
4590 glusterfs_xlator_opt="yes"
4592 if $pkg_config --atleast-version=5 glusterfs-api; then
4593 glusterfs_discard="yes"
4595 if $pkg_config --atleast-version=6 glusterfs-api; then
4596 glusterfs_fallocate="yes"
4597 glusterfs_zerofill="yes"
4599 cat > $TMPC << EOF
4600 #include <glusterfs/api/glfs.h>
4603 main(void)
4605 /* new glfs_ftruncate() passes two additional args */
4606 return glfs_ftruncate(NULL, 0, NULL, NULL);
4609 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4610 glusterfs_ftruncate_has_stat="yes"
4612 cat > $TMPC << EOF
4613 #include <glusterfs/api/glfs.h>
4615 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4616 static void
4617 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4621 main(void)
4623 glfs_io_cbk iocb = &glusterfs_iocb;
4624 iocb(NULL, 0 , NULL, NULL, NULL);
4625 return 0;
4628 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4629 glusterfs_iocb_has_stat="yes"
4631 else
4632 if test "$glusterfs" = "yes" ; then
4633 feature_not_found "GlusterFS backend support" \
4634 "Install glusterfs-api devel >= 3"
4636 glusterfs="no"
4640 # Check for inotify functions when we are building linux-user
4641 # emulator. This is done because older glibc versions don't
4642 # have syscall stubs for these implemented. In that case we
4643 # don't provide them even if kernel supports them.
4645 inotify=no
4646 cat > $TMPC << EOF
4647 #include <sys/inotify.h>
4650 main(void)
4652 /* try to start inotify */
4653 return inotify_init();
4656 if compile_prog "" "" ; then
4657 inotify=yes
4660 inotify1=no
4661 cat > $TMPC << EOF
4662 #include <sys/inotify.h>
4665 main(void)
4667 /* try to start inotify */
4668 return inotify_init1(0);
4671 if compile_prog "" "" ; then
4672 inotify1=yes
4675 # check if pipe2 is there
4676 pipe2=no
4677 cat > $TMPC << EOF
4678 #include <unistd.h>
4679 #include <fcntl.h>
4681 int main(void)
4683 int pipefd[2];
4684 return pipe2(pipefd, O_CLOEXEC);
4687 if compile_prog "" "" ; then
4688 pipe2=yes
4691 # check if accept4 is there
4692 accept4=no
4693 cat > $TMPC << EOF
4694 #include <sys/socket.h>
4695 #include <stddef.h>
4697 int main(void)
4699 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4700 return 0;
4703 if compile_prog "" "" ; then
4704 accept4=yes
4707 # check if tee/splice is there. vmsplice was added same time.
4708 splice=no
4709 cat > $TMPC << EOF
4710 #include <unistd.h>
4711 #include <fcntl.h>
4712 #include <limits.h>
4714 int main(void)
4716 int len, fd = 0;
4717 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4718 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4719 return 0;
4722 if compile_prog "" "" ; then
4723 splice=yes
4726 ##########################################
4727 # libnuma probe
4729 if test "$numa" != "no" ; then
4730 cat > $TMPC << EOF
4731 #include <numa.h>
4732 int main(void) { return numa_available(); }
4735 if compile_prog "" "-lnuma" ; then
4736 numa=yes
4737 libs_softmmu="-lnuma $libs_softmmu"
4738 else
4739 if test "$numa" = "yes" ; then
4740 feature_not_found "numa" "install numactl devel"
4742 numa=no
4746 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4747 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4748 exit 1
4751 # Even if malloc_trim() is available, these non-libc memory allocators
4752 # do not support it.
4753 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4754 if test "$malloc_trim" = "yes" ; then
4755 echo "Disabling malloc_trim with non-libc memory allocator"
4757 malloc_trim="no"
4760 #######################################
4761 # malloc_trim
4763 if test "$malloc_trim" != "no" ; then
4764 cat > $TMPC << EOF
4765 #include <malloc.h>
4766 int main(void) { malloc_trim(0); return 0; }
4768 if compile_prog "" "" ; then
4769 malloc_trim="yes"
4770 else
4771 malloc_trim="no"
4775 ##########################################
4776 # tcmalloc probe
4778 if test "$tcmalloc" = "yes" ; then
4779 cat > $TMPC << EOF
4780 #include <stdlib.h>
4781 int main(void) {
4782 void *tmp = malloc(1);
4783 if (tmp != NULL) {
4784 return 0;
4786 return 1;
4790 if compile_prog "" "-ltcmalloc" ; then
4791 LIBS="-ltcmalloc $LIBS"
4792 else
4793 feature_not_found "tcmalloc" "install gperftools devel"
4797 ##########################################
4798 # jemalloc probe
4800 if test "$jemalloc" = "yes" ; then
4801 cat > $TMPC << EOF
4802 #include <stdlib.h>
4803 int main(void) {
4804 void *tmp = malloc(1);
4805 if (tmp != NULL) {
4806 return 0;
4808 return 1;
4812 if compile_prog "" "-ljemalloc" ; then
4813 LIBS="-ljemalloc $LIBS"
4814 else
4815 feature_not_found "jemalloc" "install jemalloc devel"
4819 ##########################################
4820 # signalfd probe
4821 signalfd="no"
4822 cat > $TMPC << EOF
4823 #include <unistd.h>
4824 #include <sys/syscall.h>
4825 #include <signal.h>
4826 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4829 if compile_prog "" "" ; then
4830 signalfd=yes
4833 # check if optreset global is declared by <getopt.h>
4834 optreset="no"
4835 cat > $TMPC << EOF
4836 #include <getopt.h>
4837 int main(void) { return optreset; }
4840 if compile_prog "" "" ; then
4841 optreset=yes
4844 # check if eventfd is supported
4845 eventfd=no
4846 cat > $TMPC << EOF
4847 #include <sys/eventfd.h>
4849 int main(void)
4851 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4854 if compile_prog "" "" ; then
4855 eventfd=yes
4858 # check if memfd is supported
4859 memfd=no
4860 cat > $TMPC << EOF
4861 #include <sys/mman.h>
4863 int main(void)
4865 return memfd_create("foo", MFD_ALLOW_SEALING);
4868 if compile_prog "" "" ; then
4869 memfd=yes
4872 # check for usbfs
4873 have_usbfs=no
4874 if test "$linux_user" = "yes"; then
4875 cat > $TMPC << EOF
4876 #include <linux/usbdevice_fs.h>
4878 #ifndef USBDEVFS_GET_CAPABILITIES
4879 #error "USBDEVFS_GET_CAPABILITIES undefined"
4880 #endif
4882 #ifndef USBDEVFS_DISCONNECT_CLAIM
4883 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4884 #endif
4886 int main(void)
4888 return 0;
4891 if compile_prog "" ""; then
4892 have_usbfs=yes
4896 # check for fallocate
4897 fallocate=no
4898 cat > $TMPC << EOF
4899 #include <fcntl.h>
4901 int main(void)
4903 fallocate(0, 0, 0, 0);
4904 return 0;
4907 if compile_prog "" "" ; then
4908 fallocate=yes
4911 # check for fallocate hole punching
4912 fallocate_punch_hole=no
4913 cat > $TMPC << EOF
4914 #include <fcntl.h>
4915 #include <linux/falloc.h>
4917 int main(void)
4919 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4920 return 0;
4923 if compile_prog "" "" ; then
4924 fallocate_punch_hole=yes
4927 # check that fallocate supports range zeroing inside the file
4928 fallocate_zero_range=no
4929 cat > $TMPC << EOF
4930 #include <fcntl.h>
4931 #include <linux/falloc.h>
4933 int main(void)
4935 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4936 return 0;
4939 if compile_prog "" "" ; then
4940 fallocate_zero_range=yes
4943 # check for posix_fallocate
4944 posix_fallocate=no
4945 cat > $TMPC << EOF
4946 #include <fcntl.h>
4948 int main(void)
4950 posix_fallocate(0, 0, 0);
4951 return 0;
4954 if compile_prog "" "" ; then
4955 posix_fallocate=yes
4958 # check for sync_file_range
4959 sync_file_range=no
4960 cat > $TMPC << EOF
4961 #include <fcntl.h>
4963 int main(void)
4965 sync_file_range(0, 0, 0, 0);
4966 return 0;
4969 if compile_prog "" "" ; then
4970 sync_file_range=yes
4973 # check for linux/fiemap.h and FS_IOC_FIEMAP
4974 fiemap=no
4975 cat > $TMPC << EOF
4976 #include <sys/ioctl.h>
4977 #include <linux/fs.h>
4978 #include <linux/fiemap.h>
4980 int main(void)
4982 ioctl(0, FS_IOC_FIEMAP, 0);
4983 return 0;
4986 if compile_prog "" "" ; then
4987 fiemap=yes
4990 # check for dup3
4991 dup3=no
4992 cat > $TMPC << EOF
4993 #include <unistd.h>
4995 int main(void)
4997 dup3(0, 0, 0);
4998 return 0;
5001 if compile_prog "" "" ; then
5002 dup3=yes
5005 # check for ppoll support
5006 ppoll=no
5007 cat > $TMPC << EOF
5008 #include <poll.h>
5010 int main(void)
5012 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
5013 ppoll(&pfd, 1, 0, 0);
5014 return 0;
5017 if compile_prog "" "" ; then
5018 ppoll=yes
5021 # check for prctl(PR_SET_TIMERSLACK , ... ) support
5022 prctl_pr_set_timerslack=no
5023 cat > $TMPC << EOF
5024 #include <sys/prctl.h>
5026 int main(void)
5028 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
5029 return 0;
5032 if compile_prog "" "" ; then
5033 prctl_pr_set_timerslack=yes
5036 # check for epoll support
5037 epoll=no
5038 cat > $TMPC << EOF
5039 #include <sys/epoll.h>
5041 int main(void)
5043 epoll_create(0);
5044 return 0;
5047 if compile_prog "" "" ; then
5048 epoll=yes
5051 # epoll_create1 is a later addition
5052 # so we must check separately for its presence
5053 epoll_create1=no
5054 cat > $TMPC << EOF
5055 #include <sys/epoll.h>
5057 int main(void)
5059 /* Note that we use epoll_create1 as a value, not as
5060 * a function being called. This is necessary so that on
5061 * old SPARC glibc versions where the function was present in
5062 * the library but not declared in the header file we will
5063 * fail the configure check. (Otherwise we will get a compiler
5064 * warning but not an error, and will proceed to fail the
5065 * qemu compile where we compile with -Werror.)
5067 return (int)(uintptr_t)&epoll_create1;
5070 if compile_prog "" "" ; then
5071 epoll_create1=yes
5074 # check for sendfile support
5075 sendfile=no
5076 cat > $TMPC << EOF
5077 #include <sys/sendfile.h>
5079 int main(void)
5081 return sendfile(0, 0, 0, 0);
5084 if compile_prog "" "" ; then
5085 sendfile=yes
5088 # check for timerfd support (glibc 2.8 and newer)
5089 timerfd=no
5090 cat > $TMPC << EOF
5091 #include <sys/timerfd.h>
5093 int main(void)
5095 return(timerfd_create(CLOCK_REALTIME, 0));
5098 if compile_prog "" "" ; then
5099 timerfd=yes
5102 # check for setns and unshare support
5103 setns=no
5104 cat > $TMPC << EOF
5105 #include <sched.h>
5107 int main(void)
5109 int ret;
5110 ret = setns(0, 0);
5111 ret = unshare(0);
5112 return ret;
5115 if compile_prog "" "" ; then
5116 setns=yes
5119 # clock_adjtime probe
5120 clock_adjtime=no
5121 cat > $TMPC <<EOF
5122 #include <time.h>
5124 int main(void)
5126 return clock_adjtime(0, 0);
5129 clock_adjtime=no
5130 if compile_prog "" "" ; then
5131 clock_adjtime=yes
5134 # syncfs probe
5135 syncfs=no
5136 cat > $TMPC <<EOF
5137 #include <unistd.h>
5139 int main(void)
5141 return syncfs(0);
5144 syncfs=no
5145 if compile_prog "" "" ; then
5146 syncfs=yes
5149 # check for kcov support (kernel must be 4.4+, compiled with certain options)
5150 kcov=no
5151 if check_include sys/kcov.h ; then
5152 kcov=yes
5155 # If we're making warnings fatal, apply this to Sphinx runs as well
5156 sphinx_werror=""
5157 if test "$werror" = "yes"; then
5158 sphinx_werror="-W"
5161 # Check we have a new enough version of sphinx-build
5162 has_sphinx_build() {
5163 # This is a bit awkward but works: create a trivial document and
5164 # try to run it with our configuration file (which enforces a
5165 # version requirement). This will fail if either
5166 # sphinx-build doesn't exist at all or if it is too old.
5167 mkdir -p "$TMPDIR1/sphinx"
5168 touch "$TMPDIR1/sphinx/index.rst"
5169 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5170 -b html "$TMPDIR1/sphinx" \
5171 "$TMPDIR1/sphinx/out" >> config.log 2>&1
5174 # Check if tools are available to build documentation.
5175 if test "$docs" != "no" ; then
5176 if has_sphinx_build; then
5177 sphinx_ok=yes
5178 else
5179 sphinx_ok=no
5181 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5182 docs=yes
5183 else
5184 if test "$docs" = "yes" ; then
5185 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5186 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5188 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5190 docs=no
5194 # Search for bswap_32 function
5195 byteswap_h=no
5196 cat > $TMPC << EOF
5197 #include <byteswap.h>
5198 int main(void) { return bswap_32(0); }
5200 if compile_prog "" "" ; then
5201 byteswap_h=yes
5204 # Search for bswap32 function
5205 bswap_h=no
5206 cat > $TMPC << EOF
5207 #include <sys/endian.h>
5208 #include <sys/types.h>
5209 #include <machine/bswap.h>
5210 int main(void) { return bswap32(0); }
5212 if compile_prog "" "" ; then
5213 bswap_h=yes
5216 ##########################################
5217 # Do we have libiscsi >= 1.9.0
5218 if test "$libiscsi" != "no" ; then
5219 if $pkg_config --atleast-version=1.9.0 libiscsi; then
5220 libiscsi="yes"
5221 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5222 libiscsi_libs=$($pkg_config --libs libiscsi)
5223 else
5224 if test "$libiscsi" = "yes" ; then
5225 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5227 libiscsi="no"
5231 ##########################################
5232 # Do we need libm
5233 cat > $TMPC << EOF
5234 #include <math.h>
5235 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5237 if compile_prog "" "" ; then
5239 elif compile_prog "" "-lm" ; then
5240 LIBS="-lm $LIBS"
5241 else
5242 error_exit "libm check failed"
5245 ##########################################
5246 # Do we need librt
5247 # uClibc provides 2 versions of clock_gettime(), one with realtime
5248 # support and one without. This means that the clock_gettime() don't
5249 # need -lrt. We still need it for timer_create() so we check for this
5250 # function in addition.
5251 cat > $TMPC <<EOF
5252 #include <signal.h>
5253 #include <time.h>
5254 int main(void) {
5255 timer_create(CLOCK_REALTIME, NULL, NULL);
5256 return clock_gettime(CLOCK_REALTIME, NULL);
5260 if compile_prog "" "" ; then
5262 # we need pthread for static linking. use previous pthread test result
5263 elif compile_prog "" "$pthread_lib -lrt" ; then
5264 LIBS="$LIBS -lrt"
5267 # Check whether we need to link libutil for openpty()
5268 cat > $TMPC << EOF
5269 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5270 int main(void) { return openpty(0, 0, 0, 0, 0); }
5273 have_openpty="no"
5274 if compile_prog "" "" ; then
5275 have_openpty="yes"
5276 else
5277 if compile_prog "" "-lutil" ; then
5278 libs_softmmu="-lutil $libs_softmmu"
5279 libs_tools="-lutil $libs_tools"
5280 have_openpty="yes"
5284 ##########################################
5285 # spice probe
5286 if test "$spice" != "no" ; then
5287 cat > $TMPC << EOF
5288 #include <spice.h>
5289 int main(void) { spice_server_new(); return 0; }
5291 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5292 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5293 if $pkg_config --atleast-version=0.12.5 spice-server && \
5294 $pkg_config --atleast-version=0.12.3 spice-protocol && \
5295 compile_prog "$spice_cflags" "$spice_libs" ; then
5296 spice="yes"
5297 libs_softmmu="$libs_softmmu $spice_libs"
5298 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5299 else
5300 if test "$spice" = "yes" ; then
5301 feature_not_found "spice" \
5302 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5304 spice="no"
5308 # check for smartcard support
5309 if test "$smartcard" != "no"; then
5310 if $pkg_config --atleast-version=2.5.1 libcacard; then
5311 libcacard_cflags=$($pkg_config --cflags libcacard)
5312 libcacard_libs=$($pkg_config --libs libcacard)
5313 smartcard="yes"
5314 else
5315 if test "$smartcard" = "yes"; then
5316 feature_not_found "smartcard" "Install libcacard devel"
5318 smartcard="no"
5322 # check for libusb
5323 if test "$libusb" != "no" ; then
5324 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5325 libusb="yes"
5326 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5327 libusb_libs=$($pkg_config --libs libusb-1.0)
5328 else
5329 if test "$libusb" = "yes"; then
5330 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5332 libusb="no"
5336 # check for usbredirparser for usb network redirection support
5337 if test "$usb_redir" != "no" ; then
5338 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5339 usb_redir="yes"
5340 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5341 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5342 else
5343 if test "$usb_redir" = "yes"; then
5344 feature_not_found "usb-redir" "Install usbredir devel"
5346 usb_redir="no"
5350 ##########################################
5351 # check if we have VSS SDK headers for win
5353 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5354 test "$vss_win32_sdk" != "no" ; then
5355 case "$vss_win32_sdk" in
5356 "") vss_win32_include="-isystem $source_path" ;;
5357 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5358 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5359 vss_win32_include="-isystem $source_path/.sdk/vss"
5360 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5362 *) vss_win32_include="-isystem $vss_win32_sdk"
5363 esac
5364 cat > $TMPC << EOF
5365 #define __MIDL_user_allocate_free_DEFINED__
5366 #include <inc/win2003/vss.h>
5367 int main(void) { return VSS_CTX_BACKUP; }
5369 if compile_prog "$vss_win32_include" "" ; then
5370 guest_agent_with_vss="yes"
5371 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5372 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5373 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5374 else
5375 if test "$vss_win32_sdk" != "" ; then
5376 echo "ERROR: Please download and install Microsoft VSS SDK:"
5377 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5378 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5379 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5380 echo "ERROR: The headers are extracted in the directory \`inc'."
5381 feature_not_found "VSS support"
5383 guest_agent_with_vss="no"
5387 ##########################################
5388 # lookup Windows platform SDK (if not specified)
5389 # The SDK is needed only to build .tlb (type library) file of guest agent
5390 # VSS provider from the source. It is usually unnecessary because the
5391 # pre-compiled .tlb file is included.
5393 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5394 test "$guest_agent_with_vss" = "yes" ; then
5395 if test -z "$win_sdk"; then
5396 programfiles="$PROGRAMFILES"
5397 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5398 if test -n "$programfiles"; then
5399 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5400 else
5401 feature_not_found "Windows SDK"
5403 elif test "$win_sdk" = "no"; then
5404 win_sdk=""
5408 ##########################################
5409 # check if mingw environment provides a recent ntddscsi.h
5410 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5411 cat > $TMPC << EOF
5412 #include <windows.h>
5413 #include <ntddscsi.h>
5414 int main(void) {
5415 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5416 #error Missing required ioctl definitions
5417 #endif
5418 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5419 return addr.Lun;
5422 if compile_prog "" "" ; then
5423 guest_agent_ntddscsi=yes
5424 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5428 ##########################################
5429 # virgl renderer probe
5431 if test "$virglrenderer" != "no" ; then
5432 cat > $TMPC << EOF
5433 #include <virglrenderer.h>
5434 int main(void) { virgl_renderer_poll(); return 0; }
5436 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5437 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5438 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5439 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5440 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5441 virglrenderer="yes"
5442 else
5443 if test "$virglrenderer" = "yes" ; then
5444 feature_not_found "virglrenderer"
5446 virglrenderer="no"
5450 ##########################################
5451 # capstone
5453 case "$capstone" in
5454 "" | yes)
5455 if $pkg_config capstone; then
5456 capstone=system
5457 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5458 capstone=git
5459 elif test -e "${source_path}/capstone/Makefile" ; then
5460 capstone=internal
5461 elif test -z "$capstone" ; then
5462 capstone=no
5463 else
5464 feature_not_found "capstone" "Install capstone devel or git submodule"
5468 system)
5469 if ! $pkg_config capstone; then
5470 feature_not_found "capstone" "Install capstone devel"
5473 esac
5475 case "$capstone" in
5476 git | internal)
5477 if test "$capstone" = git; then
5478 git_submodules="${git_submodules} capstone"
5480 mkdir -p capstone
5481 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include"
5482 if test "$mingw32" = "yes"; then
5483 LIBCAPSTONE=capstone.lib
5484 else
5485 LIBCAPSTONE=libcapstone.a
5487 libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu"
5490 system)
5491 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5492 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5498 error_exit "Unknown state for capstone: $capstone"
5500 esac
5502 ##########################################
5503 # check if we have fdatasync
5505 fdatasync=no
5506 cat > $TMPC << EOF
5507 #include <unistd.h>
5508 int main(void) {
5509 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5510 return fdatasync(0);
5511 #else
5512 #error Not supported
5513 #endif
5516 if compile_prog "" "" ; then
5517 fdatasync=yes
5520 ##########################################
5521 # check if we have madvise
5523 madvise=no
5524 cat > $TMPC << EOF
5525 #include <sys/types.h>
5526 #include <sys/mman.h>
5527 #include <stddef.h>
5528 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5530 if compile_prog "" "" ; then
5531 madvise=yes
5534 ##########################################
5535 # check if we have posix_madvise
5537 posix_madvise=no
5538 cat > $TMPC << EOF
5539 #include <sys/mman.h>
5540 #include <stddef.h>
5541 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5543 if compile_prog "" "" ; then
5544 posix_madvise=yes
5547 ##########################################
5548 # check if we have posix_memalign()
5550 posix_memalign=no
5551 cat > $TMPC << EOF
5552 #include <stdlib.h>
5553 int main(void) {
5554 void *p;
5555 return posix_memalign(&p, 8, 8);
5558 if compile_prog "" "" ; then
5559 posix_memalign=yes
5562 ##########################################
5563 # check if we have posix_syslog
5565 posix_syslog=no
5566 cat > $TMPC << EOF
5567 #include <syslog.h>
5568 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5570 if compile_prog "" "" ; then
5571 posix_syslog=yes
5574 ##########################################
5575 # check if we have sem_timedwait
5577 sem_timedwait=no
5578 cat > $TMPC << EOF
5579 #include <semaphore.h>
5580 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5582 if compile_prog "" "" ; then
5583 sem_timedwait=yes
5586 ##########################################
5587 # check if we have strchrnul
5589 strchrnul=no
5590 cat > $TMPC << EOF
5591 #include <string.h>
5592 int main(void);
5593 // Use a haystack that the compiler shouldn't be able to constant fold
5594 char *haystack = (char*)&main;
5595 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5597 if compile_prog "" "" ; then
5598 strchrnul=yes
5601 #########################################
5602 # check if we have st_atim
5604 st_atim=no
5605 cat > $TMPC << EOF
5606 #include <sys/stat.h>
5607 #include <stddef.h>
5608 int main(void) { return offsetof(struct stat, st_atim); }
5610 if compile_prog "" "" ; then
5611 st_atim=yes
5614 ##########################################
5615 # check if trace backend exists
5617 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5618 if test "$?" -ne 0 ; then
5619 error_exit "invalid trace backends" \
5620 "Please choose supported trace backends."
5623 ##########################################
5624 # For 'ust' backend, test if ust headers are present
5625 if have_backend "ust"; then
5626 cat > $TMPC << EOF
5627 #include <lttng/tracepoint.h>
5628 int main(void) { return 0; }
5630 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5631 if $pkg_config lttng-ust --exists; then
5632 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5633 else
5634 lttng_ust_libs="-llttng-ust -ldl"
5636 if $pkg_config liburcu-bp --exists; then
5637 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5638 else
5639 urcu_bp_libs="-lurcu-bp"
5642 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5643 else
5644 error_exit "Trace backend 'ust' missing lttng-ust header files"
5648 ##########################################
5649 # For 'dtrace' backend, test if 'dtrace' command is present
5650 if have_backend "dtrace"; then
5651 if ! has 'dtrace' ; then
5652 error_exit "dtrace command is not found in PATH $PATH"
5654 trace_backend_stap="no"
5655 if has 'stap' ; then
5656 trace_backend_stap="yes"
5660 ##########################################
5661 # check and set a backend for coroutine
5663 # We prefer ucontext, but it's not always possible. The fallback
5664 # is sigcontext. On Windows the only valid backend is the Windows
5665 # specific one.
5667 ucontext_works=no
5668 if test "$darwin" != "yes"; then
5669 cat > $TMPC << EOF
5670 #include <ucontext.h>
5671 #ifdef __stub_makecontext
5672 #error Ignoring glibc stub makecontext which will always fail
5673 #endif
5674 int main(void) { makecontext(0, 0, 0); return 0; }
5676 if compile_prog "" "" ; then
5677 ucontext_works=yes
5681 if test "$coroutine" = ""; then
5682 if test "$mingw32" = "yes"; then
5683 coroutine=win32
5684 elif test "$ucontext_works" = "yes"; then
5685 coroutine=ucontext
5686 else
5687 coroutine=sigaltstack
5689 else
5690 case $coroutine in
5691 windows)
5692 if test "$mingw32" != "yes"; then
5693 error_exit "'windows' coroutine backend only valid for Windows"
5695 # Unfortunately the user visible backend name doesn't match the
5696 # coroutine-*.c filename for this case, so we have to adjust it here.
5697 coroutine=win32
5699 ucontext)
5700 if test "$ucontext_works" != "yes"; then
5701 feature_not_found "ucontext"
5704 sigaltstack)
5705 if test "$mingw32" = "yes"; then
5706 error_exit "only the 'windows' coroutine backend is valid for Windows"
5710 error_exit "unknown coroutine backend $coroutine"
5712 esac
5715 if test "$coroutine_pool" = ""; then
5716 coroutine_pool=yes
5719 if test "$debug_stack_usage" = "yes"; then
5720 if test "$coroutine_pool" = "yes"; then
5721 echo "WARN: disabling coroutine pool for stack usage debugging"
5722 coroutine_pool=no
5726 ##################################################
5727 # SafeStack
5730 if test "$safe_stack" = "yes"; then
5731 cat > $TMPC << EOF
5732 int main(int argc, char *argv[])
5734 #if ! __has_feature(safe_stack)
5735 #error SafeStack Disabled
5736 #endif
5737 return 0;
5740 flag="-fsanitize=safe-stack"
5741 # Check that safe-stack is supported and enabled.
5742 if compile_prog "-Werror $flag" "$flag"; then
5743 # Flag needed both at compilation and at linking
5744 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5745 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5746 else
5747 error_exit "SafeStack not supported by your compiler"
5749 if test "$coroutine" != "ucontext"; then
5750 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5752 else
5753 cat > $TMPC << EOF
5754 int main(int argc, char *argv[])
5756 #if defined(__has_feature)
5757 #if __has_feature(safe_stack)
5758 #error SafeStack Enabled
5759 #endif
5760 #endif
5761 return 0;
5764 if test "$safe_stack" = "no"; then
5765 # Make sure that safe-stack is disabled
5766 if ! compile_prog "-Werror" ""; then
5767 # SafeStack was already enabled, try to explicitly remove the feature
5768 flag="-fno-sanitize=safe-stack"
5769 if ! compile_prog "-Werror $flag" "$flag"; then
5770 error_exit "Configure cannot disable SafeStack"
5772 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5773 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5775 else # "$safe_stack" = ""
5776 # Set safe_stack to yes or no based on pre-existing flags
5777 if compile_prog "-Werror" ""; then
5778 safe_stack="no"
5779 else
5780 safe_stack="yes"
5781 if test "$coroutine" != "ucontext"; then
5782 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5788 ##########################################
5789 # check if we have open_by_handle_at
5791 open_by_handle_at=no
5792 cat > $TMPC << EOF
5793 #include <fcntl.h>
5794 #if !defined(AT_EMPTY_PATH)
5795 # error missing definition
5796 #else
5797 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5798 #endif
5800 if compile_prog "" "" ; then
5801 open_by_handle_at=yes
5804 ########################################
5805 # check if we have linux/magic.h
5807 linux_magic_h=no
5808 cat > $TMPC << EOF
5809 #include <linux/magic.h>
5810 int main(void) {
5811 return 0;
5814 if compile_prog "" "" ; then
5815 linux_magic_h=yes
5818 ########################################
5819 # check if we have valgrind/valgrind.h
5821 valgrind_h=no
5822 cat > $TMPC << EOF
5823 #include <valgrind/valgrind.h>
5824 int main(void) {
5825 return 0;
5828 if compile_prog "" "" ; then
5829 valgrind_h=yes
5832 ########################################
5833 # check if environ is declared
5835 has_environ=no
5836 cat > $TMPC << EOF
5837 #include <unistd.h>
5838 int main(void) {
5839 environ = 0;
5840 return 0;
5843 if compile_prog "" "" ; then
5844 has_environ=yes
5847 ########################################
5848 # check if cpuid.h is usable.
5850 cat > $TMPC << EOF
5851 #include <cpuid.h>
5852 int main(void) {
5853 unsigned a, b, c, d;
5854 int max = __get_cpuid_max(0, 0);
5856 if (max >= 1) {
5857 __cpuid(1, a, b, c, d);
5860 if (max >= 7) {
5861 __cpuid_count(7, 0, a, b, c, d);
5864 return 0;
5867 if compile_prog "" "" ; then
5868 cpuid_h=yes
5871 ##########################################
5872 # avx2 optimization requirement check
5874 # There is no point enabling this if cpuid.h is not usable,
5875 # since we won't be able to select the new routines.
5877 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5878 cat > $TMPC << EOF
5879 #pragma GCC push_options
5880 #pragma GCC target("avx2")
5881 #include <cpuid.h>
5882 #include <immintrin.h>
5883 static int bar(void *a) {
5884 __m256i x = *(__m256i *)a;
5885 return _mm256_testz_si256(x, x);
5887 int main(int argc, char *argv[]) { return bar(argv[0]); }
5889 if compile_object "" ; then
5890 avx2_opt="yes"
5891 else
5892 avx2_opt="no"
5896 ##########################################
5897 # avx512f optimization requirement check
5899 # There is no point enabling this if cpuid.h is not usable,
5900 # since we won't be able to select the new routines.
5901 # by default, it is turned off.
5902 # if user explicitly want to enable it, check environment
5904 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5905 cat > $TMPC << EOF
5906 #pragma GCC push_options
5907 #pragma GCC target("avx512f")
5908 #include <cpuid.h>
5909 #include <immintrin.h>
5910 static int bar(void *a) {
5911 __m512i x = *(__m512i *)a;
5912 return _mm512_test_epi64_mask(x, x);
5914 int main(int argc, char *argv[])
5916 return bar(argv[0]);
5919 if ! compile_object "" ; then
5920 avx512f_opt="no"
5922 else
5923 avx512f_opt="no"
5926 ########################################
5927 # check if __[u]int128_t is usable.
5929 int128=no
5930 cat > $TMPC << EOF
5931 __int128_t a;
5932 __uint128_t b;
5933 int main (void) {
5934 a = a + b;
5935 b = a * b;
5936 a = a * a;
5937 return 0;
5940 if compile_prog "" "" ; then
5941 int128=yes
5944 #########################################
5945 # See if 128-bit atomic operations are supported.
5947 atomic128=no
5948 if test "$int128" = "yes"; then
5949 cat > $TMPC << EOF
5950 int main(void)
5952 unsigned __int128 x = 0, y = 0;
5953 y = __atomic_load_16(&x, 0);
5954 __atomic_store_16(&x, y, 0);
5955 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5956 return 0;
5959 if compile_prog "" "" ; then
5960 atomic128=yes
5964 cmpxchg128=no
5965 if test "$int128" = yes && test "$atomic128" = no; then
5966 cat > $TMPC << EOF
5967 int main(void)
5969 unsigned __int128 x = 0, y = 0;
5970 __sync_val_compare_and_swap_16(&x, y, x);
5971 return 0;
5974 if compile_prog "" "" ; then
5975 cmpxchg128=yes
5979 #########################################
5980 # See if 64-bit atomic operations are supported.
5981 # Note that without __atomic builtins, we can only
5982 # assume atomic loads/stores max at pointer size.
5984 cat > $TMPC << EOF
5985 #include <stdint.h>
5986 int main(void)
5988 uint64_t x = 0, y = 0;
5989 #ifdef __ATOMIC_RELAXED
5990 y = __atomic_load_8(&x, 0);
5991 __atomic_store_8(&x, y, 0);
5992 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5993 __atomic_exchange_8(&x, y, 0);
5994 __atomic_fetch_add_8(&x, y, 0);
5995 #else
5996 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5997 __sync_lock_test_and_set(&x, y);
5998 __sync_val_compare_and_swap(&x, y, 0);
5999 __sync_fetch_and_add(&x, y);
6000 #endif
6001 return 0;
6004 if compile_prog "" "" ; then
6005 atomic64=yes
6008 #########################################
6009 # See if --dynamic-list is supported by the linker
6010 ld_dynamic_list="no"
6011 if test "$static" = "no" ; then
6012 cat > $TMPTXT <<EOF
6014 foo;
6018 cat > $TMPC <<EOF
6019 #include <stdio.h>
6020 void foo(void);
6022 void foo(void)
6024 printf("foo\n");
6027 int main(void)
6029 foo();
6030 return 0;
6034 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
6035 ld_dynamic_list="yes"
6039 #########################################
6040 # See if -exported_symbols_list is supported by the linker
6042 ld_exported_symbols_list="no"
6043 if test "$static" = "no" ; then
6044 cat > $TMPTXT <<EOF
6045 _foo
6048 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
6049 ld_exported_symbols_list="yes"
6053 if test "$plugins" = "yes" &&
6054 test "$ld_dynamic_list" = "no" &&
6055 test "$ld_exported_symbols_list" = "no" ; then
6056 error_exit \
6057 "Plugin support requires dynamic linking and specifying a set of symbols " \
6058 "that are exported to plugins. Unfortunately your linker doesn't " \
6059 "support the flag (--dynamic-list or -exported_symbols_list) used " \
6060 "for this purpose. You can't build with --static."
6063 ########################################
6064 # See if __attribute__((alias)) is supported.
6065 # This false for Xcode 9, but has been remedied for Xcode 10.
6066 # Unfortunately, travis uses Xcode 9 by default.
6068 attralias=no
6069 cat > $TMPC << EOF
6070 int x = 1;
6071 extern const int y __attribute__((alias("x")));
6072 int main(void) { return 0; }
6074 if compile_prog "" "" ; then
6075 attralias=yes
6078 ########################################
6079 # check if getauxval is available.
6081 getauxval=no
6082 cat > $TMPC << EOF
6083 #include <sys/auxv.h>
6084 int main(void) {
6085 return getauxval(AT_HWCAP) == 0;
6088 if compile_prog "" "" ; then
6089 getauxval=yes
6092 ########################################
6093 # check if ccache is interfering with
6094 # semantic analysis of macros
6096 unset CCACHE_CPP2
6097 ccache_cpp2=no
6098 cat > $TMPC << EOF
6099 static const int Z = 1;
6100 #define fn() ({ Z; })
6101 #define TAUT(X) ((X) == Z)
6102 #define PAREN(X, Y) (X == Y)
6103 #define ID(X) (X)
6104 int main(int argc, char *argv[])
6106 int x = 0, y = 0;
6107 x = ID(x);
6108 x = fn();
6109 fn();
6110 if (PAREN(x, y)) return 0;
6111 if (TAUT(Z)) return 0;
6112 return 0;
6116 if ! compile_object "-Werror"; then
6117 ccache_cpp2=yes
6120 #################################################
6121 # clang does not support glibc + FORTIFY_SOURCE.
6123 if test "$fortify_source" != "no"; then
6124 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6125 fortify_source="no";
6126 elif test -n "$cxx" && has $cxx &&
6127 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6128 fortify_source="no";
6129 else
6130 fortify_source="yes"
6134 ###############################################
6135 # Check if copy_file_range is provided by glibc
6136 have_copy_file_range=no
6137 cat > $TMPC << EOF
6138 #include <unistd.h>
6139 int main(void) {
6140 copy_file_range(0, NULL, 0, NULL, 0, 0);
6141 return 0;
6144 if compile_prog "" "" ; then
6145 have_copy_file_range=yes
6148 ##########################################
6149 # check if struct fsxattr is available via linux/fs.h
6151 have_fsxattr=no
6152 cat > $TMPC << EOF
6153 #include <linux/fs.h>
6154 struct fsxattr foo;
6155 int main(void) {
6156 return 0;
6159 if compile_prog "" "" ; then
6160 have_fsxattr=yes
6163 ##########################################
6164 # check for usable membarrier system call
6165 if test "$membarrier" = "yes"; then
6166 have_membarrier=no
6167 if test "$mingw32" = "yes" ; then
6168 have_membarrier=yes
6169 elif test "$linux" = "yes" ; then
6170 cat > $TMPC << EOF
6171 #include <linux/membarrier.h>
6172 #include <sys/syscall.h>
6173 #include <unistd.h>
6174 #include <stdlib.h>
6175 int main(void) {
6176 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6177 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6178 exit(0);
6181 if compile_prog "" "" ; then
6182 have_membarrier=yes
6185 if test "$have_membarrier" = "no"; then
6186 feature_not_found "membarrier" "membarrier system call not available"
6188 else
6189 # Do not enable it by default even for Mingw32, because it doesn't
6190 # work on Wine.
6191 membarrier=no
6194 ##########################################
6195 # check if rtnetlink.h exists and is useful
6196 have_rtnetlink=no
6197 cat > $TMPC << EOF
6198 #include <linux/rtnetlink.h>
6199 int main(void) {
6200 return IFLA_PROTO_DOWN;
6203 if compile_prog "" "" ; then
6204 have_rtnetlink=yes
6207 ##########################################
6208 # check for usable AF_VSOCK environment
6209 have_af_vsock=no
6210 cat > $TMPC << EOF
6211 #include <errno.h>
6212 #include <sys/types.h>
6213 #include <sys/socket.h>
6214 #if !defined(AF_VSOCK)
6215 # error missing AF_VSOCK flag
6216 #endif
6217 #include <linux/vm_sockets.h>
6218 int main(void) {
6219 int sock, ret;
6220 struct sockaddr_vm svm;
6221 socklen_t len = sizeof(svm);
6222 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6223 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6224 if ((ret == -1) && (errno == ENOTCONN)) {
6225 return 0;
6227 return -1;
6230 if compile_prog "" "" ; then
6231 have_af_vsock=yes
6234 ##########################################
6235 # check for usable AF_ALG environment
6236 have_afalg=no
6237 cat > $TMPC << EOF
6238 #include <errno.h>
6239 #include <sys/types.h>
6240 #include <sys/socket.h>
6241 #include <linux/if_alg.h>
6242 int main(void) {
6243 int sock;
6244 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6245 return sock;
6248 if compile_prog "" "" ; then
6249 have_afalg=yes
6251 if test "$crypto_afalg" = "yes"
6252 then
6253 if test "$have_afalg" != "yes"
6254 then
6255 error_exit "AF_ALG requested but could not be detected"
6260 #################################################
6261 # Check to see if we have the Hypervisor framework
6262 if [ "$darwin" = "yes" ] ; then
6263 cat > $TMPC << EOF
6264 #include <Hypervisor/hv.h>
6265 int main() { return 0;}
6267 if ! compile_object ""; then
6268 hvf='no'
6269 else
6270 hvf='yes'
6271 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6275 #################################################
6276 # Sparc implicitly links with --relax, which is
6277 # incompatible with -r, so --no-relax should be
6278 # given. It does no harm to give it on other
6279 # platforms too.
6281 # Note: the prototype is needed since QEMU_CFLAGS
6282 # contains -Wmissing-prototypes
6283 cat > $TMPC << EOF
6284 extern int foo(void);
6285 int foo(void) { return 0; }
6287 if ! compile_object ""; then
6288 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6290 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6291 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6292 LD_REL_FLAGS=$i
6293 break
6295 done
6296 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6297 feature_not_found "modules" "Cannot find how to build relocatable objects"
6300 ##########################################
6301 # check for sysmacros.h
6303 have_sysmacros=no
6304 cat > $TMPC << EOF
6305 #include <sys/sysmacros.h>
6306 int main(void) {
6307 return makedev(0, 0);
6310 if compile_prog "" "" ; then
6311 have_sysmacros=yes
6314 ##########################################
6315 # check for _Static_assert()
6317 have_static_assert=no
6318 cat > $TMPC << EOF
6319 _Static_assert(1, "success");
6320 int main(void) {
6321 return 0;
6324 if compile_prog "" "" ; then
6325 have_static_assert=yes
6328 ##########################################
6329 # check for utmpx.h, it is missing e.g. on OpenBSD
6331 have_utmpx=no
6332 cat > $TMPC << EOF
6333 #include <utmpx.h>
6334 struct utmpx user_info;
6335 int main(void) {
6336 return 0;
6339 if compile_prog "" "" ; then
6340 have_utmpx=yes
6343 ##########################################
6344 # check for getrandom()
6346 have_getrandom=no
6347 cat > $TMPC << EOF
6348 #include <sys/random.h>
6349 int main(void) {
6350 return getrandom(0, 0, GRND_NONBLOCK);
6353 if compile_prog "" "" ; then
6354 have_getrandom=yes
6357 ##########################################
6358 # checks for sanitizers
6360 have_asan=no
6361 have_ubsan=no
6362 have_asan_iface_h=no
6363 have_asan_iface_fiber=no
6365 if test "$sanitizers" = "yes" ; then
6366 write_c_skeleton
6367 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6368 have_asan=yes
6371 # we could use a simple skeleton for flags checks, but this also
6372 # detect the static linking issue of ubsan, see also:
6373 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6374 cat > $TMPC << EOF
6375 #include <stdlib.h>
6376 int main(void) {
6377 void *tmp = malloc(10);
6378 if (tmp != NULL) {
6379 return *(int *)(tmp + 2);
6381 return 1;
6384 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6385 have_ubsan=yes
6388 if check_include "sanitizer/asan_interface.h" ; then
6389 have_asan_iface_h=yes
6392 cat > $TMPC << EOF
6393 #include <sanitizer/asan_interface.h>
6394 int main(void) {
6395 __sanitizer_start_switch_fiber(0, 0, 0);
6396 return 0;
6399 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6400 have_asan_iface_fiber=yes
6404 ##########################################
6405 # checks for fuzzer
6406 if test "$fuzzing" = "yes" ; then
6407 write_c_fuzzer_skeleton
6408 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6409 have_fuzzer=yes
6413 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6414 # keep it separate until that is not the case.
6415 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6416 error_exit "TSAN is not supported with other sanitiziers."
6418 have_tsan=no
6419 have_tsan_iface_fiber=no
6420 if test "$tsan" = "yes" ; then
6421 write_c_skeleton
6422 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6423 have_tsan=yes
6425 cat > $TMPC << EOF
6426 #include <sanitizer/tsan_interface.h>
6427 int main(void) {
6428 __tsan_create_fiber(0);
6429 return 0;
6432 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6433 have_tsan_iface_fiber=yes
6437 ##########################################
6438 # check for libpmem
6440 if test "$libpmem" != "no"; then
6441 if $pkg_config --exists "libpmem"; then
6442 libpmem="yes"
6443 libpmem_libs=$($pkg_config --libs libpmem)
6444 libpmem_cflags=$($pkg_config --cflags libpmem)
6445 libs_softmmu="$libs_softmmu $libpmem_libs"
6446 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6447 else
6448 if test "$libpmem" = "yes" ; then
6449 feature_not_found "libpmem" "Install nvml or pmdk"
6451 libpmem="no"
6455 ##########################################
6456 # check for libdaxctl
6458 if test "$libdaxctl" != "no"; then
6459 if $pkg_config --atleast-version=57 "libdaxctl"; then
6460 libdaxctl="yes"
6461 libdaxctl_libs=$($pkg_config --libs libdaxctl)
6462 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6463 libs_softmmu="$libs_softmmu $libdaxctl_libs"
6464 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
6465 else
6466 if test "$libdaxctl" = "yes" ; then
6467 feature_not_found "libdaxctl" "Install libdaxctl"
6469 libdaxctl="no"
6473 ##########################################
6474 # check for slirp
6476 # slirp is only required when building softmmu targets
6477 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6478 slirp="no"
6481 case "$slirp" in
6482 "" | yes)
6483 if $pkg_config slirp; then
6484 slirp=system
6485 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6486 slirp=git
6487 elif test -e "${source_path}/slirp/Makefile" ; then
6488 slirp=internal
6489 elif test -z "$slirp" ; then
6490 slirp=no
6491 else
6492 feature_not_found "slirp" "Install slirp devel or git submodule"
6496 system)
6497 if ! $pkg_config slirp; then
6498 feature_not_found "slirp" "Install slirp devel"
6501 esac
6503 case "$slirp" in
6504 git | internal)
6505 if test "$slirp" = git; then
6506 git_submodules="${git_submodules} slirp"
6508 mkdir -p slirp
6509 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
6510 slirp_libs="-L$PWD/slirp -lslirp"
6511 if test "$mingw32" = "yes" ; then
6512 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6516 system)
6517 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6518 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6519 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6525 error_exit "Unknown state for slirp: $slirp"
6527 esac
6529 ##########################################
6530 # check for usable __NR_keyctl syscall
6532 if test "$linux" = "yes" ; then
6534 have_keyring=no
6535 cat > $TMPC << EOF
6536 #include <errno.h>
6537 #include <asm/unistd.h>
6538 #include <linux/keyctl.h>
6539 #include <unistd.h>
6540 int main(void) {
6541 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6544 if compile_prog "" "" ; then
6545 have_keyring=yes
6548 if test "$secret_keyring" != "no"
6549 then
6550 if test "$have_keyring" = "yes"
6551 then
6552 secret_keyring=yes
6553 else
6554 if test "$secret_keyring" = "yes"
6555 then
6556 error_exit "syscall __NR_keyctl requested, \
6557 but not implemented on your system"
6558 else
6559 secret_keyring=no
6564 ##########################################
6565 # check for usable keyutils.h
6567 if test "$linux" = "yes" ; then
6569 have_keyutils=no
6570 cat > $TMPC << EOF
6571 #include <errno.h>
6572 #include <asm/unistd.h>
6573 #include <unistd.h>
6574 #include <sys/types.h>
6575 #include <keyutils.h>
6576 int main(void) {
6577 return request_key("user", NULL, NULL, 0);
6580 if compile_prog "" "-lkeyutils"; then
6581 have_keyutils=yes
6586 ##########################################
6587 # End of CC checks
6588 # After here, no more $cc or $ld runs
6590 write_c_skeleton
6592 if test "$gcov" = "yes" ; then
6594 elif test "$fortify_source" = "yes" ; then
6595 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6596 debug=no
6598 if test "$debug_info" = "yes"; then
6599 CFLAGS="-g $CFLAGS"
6600 LDFLAGS="-g $LDFLAGS"
6602 if test "$debug" = "no"; then
6603 CFLAGS="-O2 $CFLAGS"
6606 case "$ARCH" in
6607 alpha)
6608 # Ensure there's only a single GP
6609 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6611 esac
6613 if test "$gprof" = "yes" ; then
6614 QEMU_CFLAGS="-p $QEMU_CFLAGS"
6615 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6618 if test "$have_asan" = "yes"; then
6619 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6620 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6621 if test "$have_asan_iface_h" = "no" ; then
6622 echo "ASAN build enabled, but ASAN header missing." \
6623 "Without code annotation, the report may be inferior."
6624 elif test "$have_asan_iface_fiber" = "no" ; then
6625 echo "ASAN build enabled, but ASAN header is too old." \
6626 "Without code annotation, the report may be inferior."
6629 if test "$have_tsan" = "yes" ; then
6630 if test "$have_tsan_iface_fiber" = "yes" ; then
6631 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6632 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6633 else
6634 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6636 elif test "$tsan" = "yes" ; then
6637 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6639 if test "$have_ubsan" = "yes"; then
6640 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6641 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6644 ##########################################
6645 # Do we have libnfs
6646 if test "$libnfs" != "no" ; then
6647 if $pkg_config --atleast-version=1.9.3 libnfs; then
6648 libnfs="yes"
6649 libnfs_libs=$($pkg_config --libs libnfs)
6650 else
6651 if test "$libnfs" = "yes" ; then
6652 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6654 libnfs="no"
6658 ##########################################
6659 # Do we have libudev
6660 if test "$libudev" != "no" ; then
6661 if $pkg_config libudev && test "$static" != "yes"; then
6662 libudev="yes"
6663 libudev_libs=$($pkg_config --libs libudev)
6664 else
6665 libudev="no"
6669 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6670 if test "$werror" = "yes"; then
6671 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6674 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6675 if test "$solaris" = "no" && test "$tsan" = "no"; then
6676 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6677 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6681 # test if pod2man has --utf8 option
6682 if pod2man --help | grep -q utf8; then
6683 POD2MAN="pod2man --utf8"
6684 else
6685 POD2MAN="pod2man"
6688 # Use ASLR, no-SEH and DEP if available
6689 if test "$mingw32" = "yes" ; then
6690 for flag in --dynamicbase --no-seh --nxcompat; do
6691 if ld_has $flag ; then
6692 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6694 done
6697 # Disable OpenBSD W^X if available
6698 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6699 cat > $TMPC <<EOF
6700 int main(void) { return 0; }
6702 wx_ldflags="-Wl,-z,wxneeded"
6703 if compile_prog "" "$wx_ldflags"; then
6704 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6708 qemu_confdir=$sysconfdir$confsuffix
6709 qemu_moddir=$libdir$confsuffix
6710 qemu_datadir=$datadir$confsuffix
6711 qemu_localedir="$datadir/locale"
6712 qemu_icondir="$datadir/icons"
6713 qemu_desktopdir="$datadir/applications"
6715 # We can only support ivshmem if we have eventfd
6716 if [ "$eventfd" = "yes" ]; then
6717 ivshmem=yes
6720 tools=""
6721 helpers=""
6722 if test "$want_tools" = "yes" ; then
6723 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
6724 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6725 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
6728 if test "$softmmu" = yes ; then
6729 if test "$linux" = yes; then
6730 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6731 virtfs=yes
6732 else
6733 if test "$virtfs" = yes; then
6734 error_exit "VirtFS requires libcap-ng devel and libattr devel"
6736 virtfs=no
6738 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6739 mpath=yes
6740 else
6741 if test "$mpath" = yes; then
6742 error_exit "Multipath requires libmpathpersist devel"
6744 mpath=no
6746 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
6747 else
6748 if test "$virtfs" = yes; then
6749 error_exit "VirtFS is supported only on Linux"
6751 virtfs=no
6752 if test "$mpath" = yes; then
6753 error_exit "Multipath is supported only on Linux"
6755 mpath=no
6759 # Probe for guest agent support/options
6761 if [ "$guest_agent" != "no" ]; then
6762 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6763 guest_agent=no
6764 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6765 guest_agent=yes
6766 elif [ "$guest_agent" != yes ]; then
6767 guest_agent=no
6768 else
6769 error_exit "Guest agent is not supported on this platform"
6773 # Guest agent Window MSI package
6775 if test "$guest_agent" != yes; then
6776 if test "$guest_agent_msi" = yes; then
6777 error_exit "MSI guest agent package requires guest agent enabled"
6779 guest_agent_msi=no
6780 elif test "$mingw32" != "yes"; then
6781 if test "$guest_agent_msi" = "yes"; then
6782 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6784 guest_agent_msi=no
6785 elif ! has wixl; then
6786 if test "$guest_agent_msi" = "yes"; then
6787 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6789 guest_agent_msi=no
6790 else
6791 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6792 # disabled explicitly
6793 if test "$guest_agent_msi" != "no"; then
6794 guest_agent_msi=yes
6798 if test "$guest_agent_msi" = "yes"; then
6799 if test "$guest_agent_with_vss" = "yes"; then
6800 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6803 if test "$QEMU_GA_MANUFACTURER" = ""; then
6804 QEMU_GA_MANUFACTURER=QEMU
6807 if test "$QEMU_GA_DISTRO" = ""; then
6808 QEMU_GA_DISTRO=Linux
6811 if test "$QEMU_GA_VERSION" = ""; then
6812 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6815 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6817 case "$cpu" in
6818 x86_64)
6819 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6821 i386)
6822 QEMU_GA_MSI_ARCH="-D Arch=32"
6825 error_exit "CPU $cpu not supported for building installation package"
6827 esac
6830 # Mac OS X ships with a broken assembler
6831 roms=
6832 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6833 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6834 test "$softmmu" = yes ; then
6835 # Different host OS linkers have different ideas about the name of the ELF
6836 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6837 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6838 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6839 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6840 ld_i386_emulation="$emu"
6841 roms="optionrom"
6842 break
6844 done
6847 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6848 if test "$cpu" = "s390x" ; then
6849 write_c_skeleton
6850 if compile_prog "-march=z900" ""; then
6851 roms="$roms s390-ccw"
6852 # SLOF is required for building the s390-ccw firmware on s390x,
6853 # since it is using the libnet code from SLOF for network booting.
6854 if test -e "${source_path}/.git" ; then
6855 git_submodules="${git_submodules} roms/SLOF"
6860 # Check that the C++ compiler exists and works with the C compiler.
6861 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6862 if has $cxx; then
6863 cat > $TMPC <<EOF
6864 int c_function(void);
6865 int main(void) { return c_function(); }
6868 compile_object
6870 cat > $TMPCXX <<EOF
6871 extern "C" {
6872 int c_function(void);
6874 int c_function(void) { return 42; }
6877 update_cxxflags
6879 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6880 # C++ compiler $cxx works ok with C compiler $cc
6882 else
6883 echo "C++ compiler $cxx does not work with C compiler $cc"
6884 echo "Disabling C++ specific optional code"
6885 cxx=
6887 else
6888 echo "No C++ compiler available; disabling C++ specific optional code"
6889 cxx=
6892 echo_version() {
6893 if test "$1" = "yes" ; then
6894 echo "($2)"
6898 # prepend pixman and ftd flags after all config tests are done
6899 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6900 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6901 libs_softmmu="$pixman_libs $libs_softmmu"
6903 config_host_mak="config-host.mak"
6905 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6907 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6908 echo >> $config_host_mak
6910 echo all: >> $config_host_mak
6911 echo "prefix=$prefix" >> $config_host_mak
6912 echo "bindir=$bindir" >> $config_host_mak
6913 echo "libdir=$libdir" >> $config_host_mak
6914 echo "libexecdir=$libexecdir" >> $config_host_mak
6915 echo "includedir=$includedir" >> $config_host_mak
6916 echo "mandir=$mandir" >> $config_host_mak
6917 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6918 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6919 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6920 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6921 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6922 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6923 if test "$mingw32" = "no" ; then
6924 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6926 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6927 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6928 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6929 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6930 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6931 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6932 echo "GIT=$git" >> $config_host_mak
6933 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6934 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6936 echo "ARCH=$ARCH" >> $config_host_mak
6938 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6939 echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
6941 if test "$default_devices" = "yes" ; then
6942 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6943 else
6944 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6946 if test "$debug_tcg" = "yes" ; then
6947 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6949 if test "$strip_opt" = "yes" ; then
6950 echo "STRIP=${strip}" >> $config_host_mak
6952 if test "$bigendian" = "yes" ; then
6953 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6955 if test "$mingw32" = "yes" ; then
6956 echo "CONFIG_WIN32=y" >> $config_host_mak
6957 rc_version=$(cat $source_path/VERSION)
6958 version_major=${rc_version%%.*}
6959 rc_version=${rc_version#*.}
6960 version_minor=${rc_version%%.*}
6961 rc_version=${rc_version#*.}
6962 version_subminor=${rc_version%%.*}
6963 version_micro=0
6964 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6965 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6966 if test "$guest_agent_with_vss" = "yes" ; then
6967 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6968 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6969 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6971 if test "$guest_agent_ntddscsi" = "yes" ; then
6972 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6974 if test "$guest_agent_msi" = "yes"; then
6975 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6976 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6977 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6978 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6979 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6980 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6981 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6983 else
6984 echo "CONFIG_POSIX=y" >> $config_host_mak
6987 if test "$linux" = "yes" ; then
6988 echo "CONFIG_LINUX=y" >> $config_host_mak
6991 if test "$darwin" = "yes" ; then
6992 echo "CONFIG_DARWIN=y" >> $config_host_mak
6995 if test "$solaris" = "yes" ; then
6996 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6998 if test "$haiku" = "yes" ; then
6999 echo "CONFIG_HAIKU=y" >> $config_host_mak
7001 if test "$static" = "yes" ; then
7002 echo "CONFIG_STATIC=y" >> $config_host_mak
7004 if test "$profiler" = "yes" ; then
7005 echo "CONFIG_PROFILER=y" >> $config_host_mak
7007 if test "$want_tools" = "yes" ; then
7008 echo "CONFIG_TOOLS=y" >> $config_host_mak
7010 if test "$guest_agent" = "yes" ; then
7011 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
7013 if test "$slirp" != "no"; then
7014 echo "CONFIG_SLIRP=y" >> $config_host_mak
7015 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
7016 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
7017 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
7019 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
7020 echo "config-host.h: slirp/all" >> $config_host_mak
7022 if test "$vde" = "yes" ; then
7023 echo "CONFIG_VDE=y" >> $config_host_mak
7024 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
7026 if test "$netmap" = "yes" ; then
7027 echo "CONFIG_NETMAP=y" >> $config_host_mak
7029 if test "$l2tpv3" = "yes" ; then
7030 echo "CONFIG_L2TPV3=y" >> $config_host_mak
7032 if test "$gprof" = "yes" ; then
7033 echo "CONFIG_GPROF=y" >> $config_host_mak
7035 if test "$cap_ng" = "yes" ; then
7036 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
7037 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
7039 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
7040 for drv in $audio_drv_list; do
7041 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7042 case "$drv" in
7043 alsa | oss | pa | sdl)
7044 echo "$def=m" >> $config_host_mak ;;
7046 echo "$def=y" >> $config_host_mak ;;
7047 esac
7048 done
7049 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7050 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7051 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7052 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7053 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
7054 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
7055 if test "$audio_win_int" = "yes" ; then
7056 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7058 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7059 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7060 if test "$vnc" = "yes" ; then
7061 echo "CONFIG_VNC=y" >> $config_host_mak
7063 if test "$vnc_sasl" = "yes" ; then
7064 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7066 if test "$vnc_jpeg" = "yes" ; then
7067 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7069 if test "$vnc_png" = "yes" ; then
7070 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7072 if test "$xkbcommon" = "yes" ; then
7073 echo "CONFIG_XKBCOMMON=y" >> $config_host_mak
7074 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7075 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7077 if test "$xfs" = "yes" ; then
7078 echo "CONFIG_XFS=y" >> $config_host_mak
7080 qemu_version=$(head $source_path/VERSION)
7081 echo "VERSION=$qemu_version" >>$config_host_mak
7082 echo "PKGVERSION=$pkgversion" >>$config_host_mak
7083 echo "SRC_PATH=$source_path" >> $config_host_mak
7084 echo "TARGET_DIRS=$target_list" >> $config_host_mak
7085 if [ "$docs" = "yes" ] ; then
7086 echo "BUILD_DOCS=yes" >> $config_host_mak
7088 if test "$modules" = "yes"; then
7089 # $shacmd can generate a hash started with digit, which the compiler doesn't
7090 # like as an symbol. So prefix it with an underscore
7091 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7092 echo "CONFIG_MODULES=y" >> $config_host_mak
7094 if test "$module_upgrades" = "yes"; then
7095 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7097 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7098 echo "CONFIG_X11=y" >> $config_host_mak
7099 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7100 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7102 if test "$sdl" = "yes" ; then
7103 echo "CONFIG_SDL=m" >> $config_host_mak
7104 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7105 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7106 if test "$sdl_image" = "yes" ; then
7107 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7110 if test "$cocoa" = "yes" ; then
7111 echo "CONFIG_COCOA=y" >> $config_host_mak
7113 if test "$iconv" = "yes" ; then
7114 echo "CONFIG_ICONV=y" >> $config_host_mak
7115 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7116 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7118 if test "$curses" = "yes" ; then
7119 echo "CONFIG_CURSES=m" >> $config_host_mak
7120 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7121 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7123 if test "$pipe2" = "yes" ; then
7124 echo "CONFIG_PIPE2=y" >> $config_host_mak
7126 if test "$accept4" = "yes" ; then
7127 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7129 if test "$splice" = "yes" ; then
7130 echo "CONFIG_SPLICE=y" >> $config_host_mak
7132 if test "$eventfd" = "yes" ; then
7133 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7135 if test "$memfd" = "yes" ; then
7136 echo "CONFIG_MEMFD=y" >> $config_host_mak
7138 if test "$have_usbfs" = "yes" ; then
7139 echo "CONFIG_USBFS=y" >> $config_host_mak
7141 if test "$fallocate" = "yes" ; then
7142 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7144 if test "$fallocate_punch_hole" = "yes" ; then
7145 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7147 if test "$fallocate_zero_range" = "yes" ; then
7148 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7150 if test "$posix_fallocate" = "yes" ; then
7151 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7153 if test "$sync_file_range" = "yes" ; then
7154 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7156 if test "$fiemap" = "yes" ; then
7157 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7159 if test "$dup3" = "yes" ; then
7160 echo "CONFIG_DUP3=y" >> $config_host_mak
7162 if test "$ppoll" = "yes" ; then
7163 echo "CONFIG_PPOLL=y" >> $config_host_mak
7165 if test "$prctl_pr_set_timerslack" = "yes" ; then
7166 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7168 if test "$epoll" = "yes" ; then
7169 echo "CONFIG_EPOLL=y" >> $config_host_mak
7171 if test "$epoll_create1" = "yes" ; then
7172 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7174 if test "$sendfile" = "yes" ; then
7175 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7177 if test "$timerfd" = "yes" ; then
7178 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7180 if test "$setns" = "yes" ; then
7181 echo "CONFIG_SETNS=y" >> $config_host_mak
7183 if test "$clock_adjtime" = "yes" ; then
7184 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7186 if test "$syncfs" = "yes" ; then
7187 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7189 if test "$kcov" = "yes" ; then
7190 echo "CONFIG_KCOV=y" >> $config_host_mak
7192 if test "$inotify" = "yes" ; then
7193 echo "CONFIG_INOTIFY=y" >> $config_host_mak
7195 if test "$inotify1" = "yes" ; then
7196 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7198 if test "$sem_timedwait" = "yes" ; then
7199 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7201 if test "$strchrnul" = "yes" ; then
7202 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7204 if test "$st_atim" = "yes" ; then
7205 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7207 if test "$byteswap_h" = "yes" ; then
7208 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7210 if test "$bswap_h" = "yes" ; then
7211 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7213 if test "$curl" = "yes" ; then
7214 echo "CONFIG_CURL=m" >> $config_host_mak
7215 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7216 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7218 if test "$brlapi" = "yes" ; then
7219 echo "CONFIG_BRLAPI=y" >> $config_host_mak
7220 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7222 if test "$gtk" = "yes" ; then
7223 echo "CONFIG_GTK=m" >> $config_host_mak
7224 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7225 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7226 if test "$gtk_gl" = "yes" ; then
7227 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7230 if test "$gio" = "yes" ; then
7231 echo "CONFIG_GIO=y" >> $config_host_mak
7232 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7233 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7234 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7236 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7237 if test "$gnutls" = "yes" ; then
7238 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7239 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
7240 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
7242 if test "$gcrypt" = "yes" ; then
7243 echo "CONFIG_GCRYPT=y" >> $config_host_mak
7244 if test "$gcrypt_hmac" = "yes" ; then
7245 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7248 if test "$nettle" = "yes" ; then
7249 echo "CONFIG_NETTLE=y" >> $config_host_mak
7250 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7251 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
7252 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
7254 if test "$qemu_private_xts" = "yes" ; then
7255 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7257 if test "$tasn1" = "yes" ; then
7258 echo "CONFIG_TASN1=y" >> $config_host_mak
7260 if test "$auth_pam" = "yes" ; then
7261 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7263 if test "$have_ifaddrs_h" = "yes" ; then
7264 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7266 if test "$have_drm_h" = "yes" ; then
7267 echo "HAVE_DRM_H=y" >> $config_host_mak
7269 if test "$have_broken_size_max" = "yes" ; then
7270 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7272 if test "$have_openpty" = "yes" ; then
7273 echo "HAVE_OPENPTY=y" >> $config_host_mak
7275 if test "$have_sys_signal_h" = "yes" ; then
7276 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7279 # Work around a system header bug with some kernel/XFS header
7280 # versions where they both try to define 'struct fsxattr':
7281 # xfs headers will not try to redefine structs from linux headers
7282 # if this macro is set.
7283 if test "$have_fsxattr" = "yes" ; then
7284 echo "HAVE_FSXATTR=y" >> $config_host_mak
7286 if test "$have_copy_file_range" = "yes" ; then
7287 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7289 if test "$vte" = "yes" ; then
7290 echo "CONFIG_VTE=y" >> $config_host_mak
7291 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7292 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7294 if test "$virglrenderer" = "yes" ; then
7295 echo "CONFIG_VIRGL=y" >> $config_host_mak
7296 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7297 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7299 if test "$xen" = "yes" ; then
7300 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7301 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7303 if test "$linux_aio" = "yes" ; then
7304 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7306 if test "$linux_io_uring" = "yes" ; then
7307 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7308 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7309 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7311 if test "$attr" = "yes" ; then
7312 echo "CONFIG_ATTR=y" >> $config_host_mak
7313 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
7315 if test "$libattr" = "yes" ; then
7316 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7318 if test "$virtfs" = "yes" ; then
7319 echo "CONFIG_VIRTFS=y" >> $config_host_mak
7321 if test "$mpath" = "yes" ; then
7322 echo "CONFIG_MPATH=y" >> $config_host_mak
7323 if test "$mpathpersist_new_api" = "yes"; then
7324 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7327 if test "$vhost_scsi" = "yes" ; then
7328 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7330 if test "$vhost_net" = "yes" ; then
7331 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7333 if test "$vhost_net_user" = "yes" ; then
7334 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7336 if test "$vhost_net_vdpa" = "yes" ; then
7337 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7339 if test "$vhost_crypto" = "yes" ; then
7340 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7342 if test "$vhost_vsock" = "yes" ; then
7343 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7344 if test "$vhost_user" = "yes" ; then
7345 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7348 if test "$vhost_kernel" = "yes" ; then
7349 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7351 if test "$vhost_user" = "yes" ; then
7352 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7354 if test "$vhost_vdpa" = "yes" ; then
7355 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7357 if test "$vhost_user_fs" = "yes" ; then
7358 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7360 if test "$blobs" = "yes" ; then
7361 echo "INSTALL_BLOBS=yes" >> $config_host_mak
7363 if test "$iovec" = "yes" ; then
7364 echo "CONFIG_IOVEC=y" >> $config_host_mak
7366 if test "$preadv" = "yes" ; then
7367 echo "CONFIG_PREADV=y" >> $config_host_mak
7369 if test "$fdt" != "no" ; then
7370 echo "CONFIG_FDT=y" >> $config_host_mak
7372 if test "$membarrier" = "yes" ; then
7373 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7375 if test "$signalfd" = "yes" ; then
7376 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7378 if test "$optreset" = "yes" ; then
7379 echo "HAVE_OPTRESET=y" >> $config_host_mak
7381 if test "$tcg" = "yes"; then
7382 echo "CONFIG_TCG=y" >> $config_host_mak
7383 if test "$tcg_interpreter" = "yes" ; then
7384 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7387 if test "$fdatasync" = "yes" ; then
7388 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7390 if test "$madvise" = "yes" ; then
7391 echo "CONFIG_MADVISE=y" >> $config_host_mak
7393 if test "$posix_madvise" = "yes" ; then
7394 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7396 if test "$posix_memalign" = "yes" ; then
7397 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7400 if test "$spice" = "yes" ; then
7401 echo "CONFIG_SPICE=y" >> $config_host_mak
7404 if test "$smartcard" = "yes" ; then
7405 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7406 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7407 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7410 if test "$libusb" = "yes" ; then
7411 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7412 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7413 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7416 if test "$usb_redir" = "yes" ; then
7417 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7418 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7419 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7422 if test "$opengl" = "yes" ; then
7423 echo "CONFIG_OPENGL=y" >> $config_host_mak
7424 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7425 if test "$opengl_dmabuf" = "yes" ; then
7426 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7430 if test "$gbm" = "yes" ; then
7431 echo "CONFIG_GBM=y" >> $config_host_mak
7432 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7433 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7437 if test "$malloc_trim" = "yes" ; then
7438 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7441 if test "$avx2_opt" = "yes" ; then
7442 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7445 if test "$avx512f_opt" = "yes" ; then
7446 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7449 if test "$lzo" = "yes" ; then
7450 echo "CONFIG_LZO=y" >> $config_host_mak
7453 if test "$snappy" = "yes" ; then
7454 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7457 if test "$bzip2" = "yes" ; then
7458 echo "CONFIG_BZIP2=y" >> $config_host_mak
7459 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7462 if test "$lzfse" = "yes" ; then
7463 echo "CONFIG_LZFSE=y" >> $config_host_mak
7464 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7467 if test "$zstd" = "yes" ; then
7468 echo "CONFIG_ZSTD=y" >> $config_host_mak
7471 if test "$libiscsi" = "yes" ; then
7472 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7473 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7474 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7477 if test "$libnfs" = "yes" ; then
7478 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7479 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7482 if test "$seccomp" = "yes"; then
7483 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7484 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7485 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7488 # XXX: suppress that
7489 if [ "$bsd" = "yes" ] ; then
7490 echo "CONFIG_BSD=y" >> $config_host_mak
7493 if test "$localtime_r" = "yes" ; then
7494 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7496 if test "$qom_cast_debug" = "yes" ; then
7497 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7499 if test "$rbd" = "yes" ; then
7500 echo "CONFIG_RBD=m" >> $config_host_mak
7501 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7502 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7505 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7506 if test "$coroutine_pool" = "yes" ; then
7507 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7508 else
7509 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7512 if test "$debug_stack_usage" = "yes" ; then
7513 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7516 if test "$crypto_afalg" = "yes" ; then
7517 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7520 if test "$open_by_handle_at" = "yes" ; then
7521 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7524 if test "$linux_magic_h" = "yes" ; then
7525 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7528 if test "$valgrind_h" = "yes" ; then
7529 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7532 if test "$have_asan_iface_fiber" = "yes" ; then
7533 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7536 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7537 echo "CONFIG_TSAN=y" >> $config_host_mak
7540 if test "$has_environ" = "yes" ; then
7541 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7544 if test "$cpuid_h" = "yes" ; then
7545 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7548 if test "$int128" = "yes" ; then
7549 echo "CONFIG_INT128=y" >> $config_host_mak
7552 if test "$atomic128" = "yes" ; then
7553 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7556 if test "$cmpxchg128" = "yes" ; then
7557 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7560 if test "$atomic64" = "yes" ; then
7561 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7564 if test "$attralias" = "yes" ; then
7565 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7568 if test "$getauxval" = "yes" ; then
7569 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7572 if test "$glusterfs" = "yes" ; then
7573 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7574 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7575 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7578 if test "$glusterfs_xlator_opt" = "yes" ; then
7579 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7582 if test "$glusterfs_discard" = "yes" ; then
7583 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7586 if test "$glusterfs_fallocate" = "yes" ; then
7587 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7590 if test "$glusterfs_zerofill" = "yes" ; then
7591 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7594 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7595 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7598 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7599 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7602 if test "$libssh" = "yes" ; then
7603 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7604 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7605 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7608 if test "$live_block_migration" = "yes" ; then
7609 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7612 if test "$tpm" = "yes"; then
7613 echo 'CONFIG_TPM=y' >> $config_host_mak
7616 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7617 if have_backend "nop"; then
7618 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7620 if have_backend "simple"; then
7621 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7622 # Set the appropriate trace file.
7623 trace_file="\"$trace_file-\" FMT_pid"
7625 if have_backend "log"; then
7626 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7628 if have_backend "ust"; then
7629 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7630 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7631 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7633 if have_backend "dtrace"; then
7634 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7635 if test "$trace_backend_stap" = "yes" ; then
7636 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7639 if have_backend "ftrace"; then
7640 if test "$linux" = "yes" ; then
7641 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7642 else
7643 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7646 if have_backend "syslog"; then
7647 if test "$posix_syslog" = "yes" ; then
7648 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7649 else
7650 feature_not_found "syslog(trace backend)" "syslog not available"
7653 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7655 if test "$rdma" = "yes" ; then
7656 echo "CONFIG_RDMA=y" >> $config_host_mak
7657 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7660 if test "$pvrdma" = "yes" ; then
7661 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7664 if test "$have_rtnetlink" = "yes" ; then
7665 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7668 if test "$libxml2" = "yes" ; then
7669 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7670 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7671 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7674 if test "$replication" = "yes" ; then
7675 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7678 if test "$have_af_vsock" = "yes" ; then
7679 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7682 if test "$have_sysmacros" = "yes" ; then
7683 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7686 if test "$have_static_assert" = "yes" ; then
7687 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7690 if test "$have_utmpx" = "yes" ; then
7691 echo "HAVE_UTMPX=y" >> $config_host_mak
7693 if test "$have_getrandom" = "yes" ; then
7694 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7696 if test "$ivshmem" = "yes" ; then
7697 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7699 if test "$capstone" != "no" ; then
7700 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7702 if test "$debug_mutex" = "yes" ; then
7703 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7706 # Hold two types of flag:
7707 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7708 # a thread we have a handle to
7709 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7710 # platform
7711 if test "$pthread_setname_np_w_tid" = "yes" ; then
7712 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7713 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7714 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7715 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7716 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7719 if test "$libpmem" = "yes" ; then
7720 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7723 if test "$libdaxctl" = "yes" ; then
7724 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7727 if test "$bochs" = "yes" ; then
7728 echo "CONFIG_BOCHS=y" >> $config_host_mak
7730 if test "$cloop" = "yes" ; then
7731 echo "CONFIG_CLOOP=y" >> $config_host_mak
7733 if test "$dmg" = "yes" ; then
7734 echo "CONFIG_DMG=y" >> $config_host_mak
7736 if test "$qcow1" = "yes" ; then
7737 echo "CONFIG_QCOW1=y" >> $config_host_mak
7739 if test "$vdi" = "yes" ; then
7740 echo "CONFIG_VDI=y" >> $config_host_mak
7742 if test "$vvfat" = "yes" ; then
7743 echo "CONFIG_VVFAT=y" >> $config_host_mak
7745 if test "$qed" = "yes" ; then
7746 echo "CONFIG_QED=y" >> $config_host_mak
7748 if test "$parallels" = "yes" ; then
7749 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7751 if test "$sheepdog" = "yes" ; then
7752 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7754 if test "$pty_h" = "yes" ; then
7755 echo "HAVE_PTY_H=y" >> $config_host_mak
7757 if test "$have_mlockall" = "yes" ; then
7758 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7760 if test "$fuzzing" = "yes" ; then
7761 if test "$have_fuzzer" = "yes"; then
7762 FUZZ_LDFLAGS=" -fsanitize=fuzzer"
7763 FUZZ_CFLAGS=" -fsanitize=fuzzer"
7764 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7765 else
7766 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
7767 exit 1
7771 if test "$plugins" = "yes" ; then
7772 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7773 LIBS="-ldl $LIBS"
7774 # Copy the export object list to the build dir
7775 if test "$ld_dynamic_list" = "yes" ; then
7776 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7777 ld_symbols=qemu-plugins-ld.symbols
7778 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7779 elif test "$ld_exported_symbols_list" = "yes" ; then
7780 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7781 ld64_symbols=qemu-plugins-ld64.symbols
7782 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7783 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7784 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7785 else
7786 error_exit \
7787 "If \$plugins=yes, either \$ld_dynamic_list or " \
7788 "\$ld_exported_symbols_list should have been set to 'yes'."
7792 if test -n "$gdb_bin" ; then
7793 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7796 if test "$secret_keyring" = "yes" ; then
7797 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7798 if test "$have_keyutils" = "yes" ; then
7799 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7803 if test "$tcg_interpreter" = "yes"; then
7804 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7805 elif test "$ARCH" = "sparc64" ; then
7806 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7807 elif test "$ARCH" = "s390x" ; then
7808 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7809 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7810 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7811 elif test "$ARCH" = "ppc64" ; then
7812 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7813 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7814 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7815 else
7816 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7819 echo "HELPERS=$helpers" >> $config_host_mak
7820 echo "TOOLS=$tools" >> $config_host_mak
7821 echo "ROMS=$roms" >> $config_host_mak
7822 echo "MAKE=$make" >> $config_host_mak
7823 echo "INSTALL=$install" >> $config_host_mak
7824 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7825 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7826 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7827 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7828 echo "PYTHON=$python" >> $config_host_mak
7829 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7830 echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7831 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7832 echo "MESON=$meson" >> $config_host_mak
7833 echo "CC=$cc" >> $config_host_mak
7834 if $iasl -h > /dev/null 2>&1; then
7835 echo "IASL=$iasl" >> $config_host_mak
7837 echo "HOST_CC=$host_cc" >> $config_host_mak
7838 echo "CXX=$cxx" >> $config_host_mak
7839 echo "OBJCC=$objcc" >> $config_host_mak
7840 echo "AR=$ar" >> $config_host_mak
7841 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7842 echo "AS=$as" >> $config_host_mak
7843 echo "CCAS=$ccas" >> $config_host_mak
7844 echo "CPP=$cpp" >> $config_host_mak
7845 echo "OBJCOPY=$objcopy" >> $config_host_mak
7846 echo "LD=$ld" >> $config_host_mak
7847 echo "RANLIB=$ranlib" >> $config_host_mak
7848 echo "NM=$nm" >> $config_host_mak
7849 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7850 echo "WINDRES=$windres" >> $config_host_mak
7851 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7852 echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
7853 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7854 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7855 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7856 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7857 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7858 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
7859 if test "$sparse" = "yes" ; then
7860 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7862 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7863 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7864 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7865 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7866 echo "LIBS+=$LIBS" >> $config_host_mak
7867 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7868 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7869 echo "EXESUF=$EXESUF" >> $config_host_mak
7870 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7871 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7872 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
7873 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7874 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7875 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7876 if test "$gcov" = "yes" ; then
7877 echo "CONFIG_GCOV=y" >> $config_host_mak
7880 if test "$libudev" != "no"; then
7881 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7882 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7884 if test "$fuzzing" != "no"; then
7885 echo "CONFIG_FUZZ=y" >> $config_host_mak
7886 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7887 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7890 if test "$edk2_blobs" = "yes" ; then
7891 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7894 if test "$rng_none" = "yes"; then
7895 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7898 # use included Linux headers
7899 if test "$linux" = "yes" ; then
7900 mkdir -p linux-headers
7901 case "$cpu" in
7902 i386|x86_64|x32)
7903 linux_arch=x86
7905 ppc|ppc64|ppc64le)
7906 linux_arch=powerpc
7908 s390x)
7909 linux_arch=s390
7911 aarch64)
7912 linux_arch=arm64
7914 mips64)
7915 linux_arch=mips
7918 # For most CPUs the kernel architecture name and QEMU CPU name match.
7919 linux_arch="$cpu"
7921 esac
7922 # For non-KVM architectures we will not have asm headers
7923 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7924 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7928 for target in $target_list; do
7929 target_dir="$target"
7930 config_target_mak=$target_dir/config-target.mak
7931 target_name=$(echo $target | cut -d '-' -f 1)
7932 target_aligned_only="no"
7933 case "$target_name" in
7934 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7935 target_aligned_only="yes"
7937 esac
7938 target_bigendian="no"
7939 case "$target_name" in
7940 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7941 target_bigendian="yes"
7943 esac
7944 target_softmmu="no"
7945 target_user_only="no"
7946 target_linux_user="no"
7947 target_bsd_user="no"
7948 case "$target" in
7949 ${target_name}-softmmu)
7950 target_softmmu="yes"
7952 ${target_name}-linux-user)
7953 target_user_only="yes"
7954 target_linux_user="yes"
7956 ${target_name}-bsd-user)
7957 target_user_only="yes"
7958 target_bsd_user="yes"
7961 error_exit "Target '$target' not recognised"
7962 exit 1
7964 esac
7966 mkdir -p $target_dir
7967 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7969 bflt="no"
7970 mttcg="no"
7971 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7972 gdb_xml_files=""
7974 TARGET_ARCH="$target_name"
7975 TARGET_BASE_ARCH=""
7976 TARGET_ABI_DIR=""
7978 case "$target_name" in
7979 i386)
7980 mttcg="yes"
7981 gdb_xml_files="i386-32bit.xml"
7982 TARGET_SYSTBL_ABI=i386
7984 x86_64)
7985 TARGET_BASE_ARCH=i386
7986 TARGET_SYSTBL_ABI=common,64
7987 mttcg="yes"
7988 gdb_xml_files="i386-64bit.xml"
7990 alpha)
7991 mttcg="yes"
7992 TARGET_SYSTBL_ABI=common
7994 arm|armeb)
7995 TARGET_ARCH=arm
7996 TARGET_SYSTBL_ABI=common,oabi
7997 bflt="yes"
7998 mttcg="yes"
7999 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8001 aarch64|aarch64_be)
8002 TARGET_ARCH=aarch64
8003 TARGET_BASE_ARCH=arm
8004 bflt="yes"
8005 mttcg="yes"
8006 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"
8008 avr)
8009 gdb_xml_files="avr-cpu.xml"
8010 target_compiler=$cross_cc_avr
8012 cris)
8014 hppa)
8015 mttcg="yes"
8016 TARGET_SYSTBL_ABI=common,32
8018 lm32)
8020 m68k)
8021 bflt="yes"
8022 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
8023 TARGET_SYSTBL_ABI=common
8025 microblaze|microblazeel)
8026 TARGET_ARCH=microblaze
8027 TARGET_SYSTBL_ABI=common
8028 bflt="yes"
8029 echo "TARGET_ABI32=y" >> $config_target_mak
8031 mips|mipsel)
8032 mttcg="yes"
8033 TARGET_ARCH=mips
8034 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8035 TARGET_SYSTBL_ABI=o32
8037 mipsn32|mipsn32el)
8038 mttcg="yes"
8039 TARGET_ARCH=mips64
8040 TARGET_BASE_ARCH=mips
8041 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8042 echo "TARGET_ABI32=y" >> $config_target_mak
8043 TARGET_SYSTBL_ABI=n32
8045 mips64|mips64el)
8046 mttcg="no"
8047 TARGET_ARCH=mips64
8048 TARGET_BASE_ARCH=mips
8049 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8050 TARGET_SYSTBL_ABI=n64
8052 moxie)
8054 nios2)
8056 or1k)
8057 TARGET_ARCH=openrisc
8058 TARGET_BASE_ARCH=openrisc
8060 ppc)
8061 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
8062 TARGET_SYSTBL_ABI=common,nospu,32
8064 ppc64)
8065 TARGET_BASE_ARCH=ppc
8066 TARGET_ABI_DIR=ppc
8067 TARGET_SYSTBL_ABI=common,nospu,64
8068 mttcg=yes
8069 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8071 ppc64le)
8072 TARGET_ARCH=ppc64
8073 TARGET_BASE_ARCH=ppc
8074 TARGET_ABI_DIR=ppc
8075 TARGET_SYSTBL_ABI=common,nospu,64
8076 mttcg=yes
8077 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8079 ppc64abi32)
8080 TARGET_ARCH=ppc64
8081 TARGET_BASE_ARCH=ppc
8082 TARGET_ABI_DIR=ppc
8083 TARGET_SYSTBL_ABI=common,nospu,32
8084 echo "TARGET_ABI32=y" >> $config_target_mak
8085 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8087 riscv32)
8088 TARGET_BASE_ARCH=riscv
8089 TARGET_ABI_DIR=riscv
8090 mttcg=yes
8091 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
8093 riscv64)
8094 TARGET_BASE_ARCH=riscv
8095 TARGET_ABI_DIR=riscv
8096 mttcg=yes
8097 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
8100 TARGET_ARCH=rx
8101 bflt="yes"
8102 target_compiler=$cross_cc_rx
8103 gdb_xml_files="rx-core.xml"
8105 sh4|sh4eb)
8106 TARGET_ARCH=sh4
8107 TARGET_SYSTBL_ABI=common
8108 bflt="yes"
8110 sparc)
8111 TARGET_SYSTBL_ABI=common,32
8113 sparc64)
8114 TARGET_BASE_ARCH=sparc
8115 TARGET_SYSTBL_ABI=common,64
8117 sparc32plus)
8118 TARGET_ARCH=sparc64
8119 TARGET_BASE_ARCH=sparc
8120 TARGET_ABI_DIR=sparc
8121 TARGET_SYSTBL_ABI=common,32
8122 echo "TARGET_ABI32=y" >> $config_target_mak
8124 s390x)
8125 TARGET_SYSTBL_ABI=common,64
8126 mttcg=yes
8127 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
8129 tilegx)
8131 tricore)
8133 unicore32)
8135 xtensa|xtensaeb)
8136 TARGET_ARCH=xtensa
8137 TARGET_SYSTBL_ABI=common
8138 bflt="yes"
8139 mttcg="yes"
8142 error_exit "Unsupported target CPU"
8144 esac
8145 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8146 if [ "$TARGET_BASE_ARCH" = "" ]; then
8147 TARGET_BASE_ARCH=$TARGET_ARCH
8150 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
8152 upper() {
8153 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8156 target_arch_name="$(upper $TARGET_ARCH)"
8157 echo "TARGET_$target_arch_name=y" >> $config_target_mak
8158 echo "TARGET_NAME=$target_name" >> $config_target_mak
8159 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8160 if [ "$TARGET_ABI_DIR" = "" ]; then
8161 TARGET_ABI_DIR=$TARGET_ARCH
8163 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8164 if [ "$HOST_VARIANT_DIR" != "" ]; then
8165 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8167 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8168 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8171 if supported_xen_target $target; then
8172 echo "CONFIG_XEN=y" >> $config_target_mak
8173 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
8174 if test "$xen_pci_passthrough" = yes; then
8175 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8177 else
8178 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
8180 if supported_kvm_target $target; then
8181 echo "CONFIG_KVM=y" >> $config_target_mak
8182 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8183 else
8184 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
8186 if supported_hax_target $target; then
8187 echo "CONFIG_HAX=y" >> $config_target_mak
8189 if supported_hvf_target $target; then
8190 echo "CONFIG_HVF=y" >> $config_target_mak
8192 if supported_whpx_target $target; then
8193 echo "CONFIG_WHPX=y" >> $config_target_mak
8195 if test "$target_aligned_only" = "yes" ; then
8196 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8198 if test "$target_bigendian" = "yes" ; then
8199 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8201 if test "$target_softmmu" = "yes" ; then
8202 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8203 if test "$mttcg" = "yes" ; then
8204 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8207 if test "$target_user_only" = "yes" ; then
8208 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8209 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8211 if test "$target_linux_user" = "yes" ; then
8212 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8214 list=""
8215 if test ! -z "$gdb_xml_files" ; then
8216 for x in $gdb_xml_files; do
8217 list="$list $source_path/gdb-xml/$x"
8218 done
8219 echo "TARGET_XML_FILES=$list" >> $config_target_mak
8222 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8223 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8225 if test "$target_bsd_user" = "yes" ; then
8226 echo "CONFIG_BSD_USER=y" >> $config_target_mak
8230 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8232 cflags=""
8233 ldflags=""
8235 disas_config() {
8236 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8237 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8240 for i in $ARCH $TARGET_BASE_ARCH ; do
8241 case "$i" in
8242 alpha)
8243 disas_config "ALPHA"
8245 aarch64)
8246 if test -n "${cxx}"; then
8247 disas_config "ARM_A64"
8250 arm)
8251 disas_config "ARM"
8252 if test -n "${cxx}"; then
8253 disas_config "ARM_A64"
8256 avr)
8257 disas_config "AVR"
8259 cris)
8260 disas_config "CRIS"
8262 hppa)
8263 disas_config "HPPA"
8265 i386|x86_64|x32)
8266 disas_config "I386"
8268 lm32)
8269 disas_config "LM32"
8271 m68k)
8272 disas_config "M68K"
8274 microblaze*)
8275 disas_config "MICROBLAZE"
8277 mips*)
8278 disas_config "MIPS"
8279 if test -n "${cxx}"; then
8280 disas_config "NANOMIPS"
8283 moxie*)
8284 disas_config "MOXIE"
8286 nios2)
8287 disas_config "NIOS2"
8289 or1k)
8290 disas_config "OPENRISC"
8292 ppc*)
8293 disas_config "PPC"
8295 riscv*)
8296 disas_config "RISCV"
8299 disas_config "RX"
8301 s390*)
8302 disas_config "S390"
8304 sh4)
8305 disas_config "SH4"
8307 sparc*)
8308 disas_config "SPARC"
8310 xtensa*)
8311 disas_config "XTENSA"
8313 esac
8314 done
8315 if test "$tcg_interpreter" = "yes" ; then
8316 disas_config "TCI"
8319 # Newer kernels on s390 check for an S390_PGSTE program header and
8320 # enable the pgste page table extensions in that case. This makes
8321 # the vm.allocate_pgste sysctl unnecessary. We enable this program
8322 # header if
8323 # - we build on s390x
8324 # - we build the system emulation for s390x (qemu-system-s390x)
8325 # - KVM is enabled
8326 # - the linker supports --s390-pgste
8327 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8328 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8329 if ld_has --s390-pgste ; then
8330 ldflags="-Wl,--s390-pgste $ldflags"
8334 echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8335 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8337 done # for target in $targets
8339 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8340 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8342 if [ "$fdt" = "git" ]; then
8343 echo "config-host.h: dtc/all" >> $config_host_mak
8345 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8346 echo "config-host.h: capstone/all" >> $config_host_mak
8348 if test -n "$LIBCAPSTONE"; then
8349 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8352 if test "$numa" = "yes"; then
8353 echo "CONFIG_NUMA=y" >> $config_host_mak
8356 if test "$ccache_cpp2" = "yes"; then
8357 echo "export CCACHE_CPP2=y" >> $config_host_mak
8360 if test "$safe_stack" = "yes"; then
8361 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8364 # If we're using a separate build tree, set it up now.
8365 # DIRS are directories which we simply mkdir in the build tree;
8366 # LINKS are things to symlink back into the source tree
8367 # (these can be both files and directories).
8368 # Caution: do not add files or directories here using wildcards. This
8369 # will result in problems later if a new file matching the wildcard is
8370 # added to the source tree -- nothing will cause configure to be rerun
8371 # so the build tree will be missing the link back to the new file, and
8372 # tests might fail. Prefer to keep the relevant files in their own
8373 # directory and symlink the directory instead.
8374 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8375 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8376 DIRS="$DIRS docs docs/interop fsdev scsi"
8377 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8378 DIRS="$DIRS roms/seabios"
8379 LINKS="Makefile"
8380 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8381 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
8382 LINKS="$LINKS tests/plugin/Makefile"
8383 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8384 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8385 LINKS="$LINKS roms/seabios/Makefile"
8386 LINKS="$LINKS pc-bios/qemu-icon.bmp"
8387 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8388 LINKS="$LINKS tests/acceptance tests/data"
8389 LINKS="$LINKS tests/qemu-iotests/check"
8390 LINKS="$LINKS python"
8391 for bios_file in \
8392 $source_path/pc-bios/*.bin \
8393 $source_path/pc-bios/*.lid \
8394 $source_path/pc-bios/*.rom \
8395 $source_path/pc-bios/*.dtb \
8396 $source_path/pc-bios/*.img \
8397 $source_path/pc-bios/openbios-* \
8398 $source_path/pc-bios/u-boot.* \
8399 $source_path/pc-bios/edk2-*.fd.bz2 \
8400 $source_path/pc-bios/palcode-*
8402 LINKS="$LINKS pc-bios/$(basename $bios_file)"
8403 done
8404 mkdir -p $DIRS
8405 for f in $LINKS ; do
8406 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8407 symlink "$source_path/$f" "$f"
8409 done
8411 (for i in $cross_cc_vars; do
8412 export $i
8413 done
8414 export target_list source_path use_containers
8415 $source_path/tests/tcg/configure.sh)
8417 # temporary config to build submodules
8418 for rom in seabios; do
8419 config_mak=roms/$rom/config.mak
8420 echo "# Automatically generated by configure - do not modify" > $config_mak
8421 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8422 echo "AS=$as" >> $config_mak
8423 echo "CCAS=$ccas" >> $config_mak
8424 echo "CC=$cc" >> $config_mak
8425 echo "BCC=bcc" >> $config_mak
8426 echo "CPP=$cpp" >> $config_mak
8427 echo "OBJCOPY=objcopy" >> $config_mak
8428 echo "IASL=$iasl" >> $config_mak
8429 echo "LD=$ld" >> $config_mak
8430 echo "RANLIB=$ranlib" >> $config_mak
8431 done
8433 # set up qemu-iotests in this build directory
8434 iotests_common_env="tests/qemu-iotests/common.env"
8436 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8437 echo >> "$iotests_common_env"
8438 echo "export PYTHON='$python'" >> "$iotests_common_env"
8440 if test "$skip_meson" = no; then
8441 cross="config-meson.cross.new"
8442 meson_quote() {
8443 echo "['$(echo $* | sed "s/ /','/g")']"
8446 echo "# Automatically generated by configure - do not modify" > $cross
8447 echo "[properties]" >> $cross
8448 test -z "$cxx" && echo "link_language = 'c'" >> $cross
8449 echo "[binaries]" >> $cross
8450 echo "c = $(meson_quote $cc)" >> $cross
8451 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
8452 echo "ar = $(meson_quote $ar)" >> $cross
8453 echo "nm = $(meson_quote $nm)" >> $cross
8454 echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
8455 echo "ranlib = $(meson_quote $ranlib)" >> $cross
8456 echo "strip = $(meson_quote $strip)" >> $cross
8457 echo "windres = $(meson_quote $windres)" >> $cross
8458 if test -n "$cross_prefix"; then
8459 cross_arg="--cross-file config-meson.cross"
8460 # Hack: Meson expects an absolute path for the *build* machine
8461 # for the prefix, so add a slash in front of a Windows path that
8462 # includes a drive letter.
8464 # See https://github.com/mesonbuild/meson/issues/7577.
8465 echo "[host_machine]" >> $cross
8466 if test "$mingw32" = "yes" ; then
8467 echo "system = 'windows'" >> $cross
8468 case $prefix in
8469 ?:*) pre_prefix=/ ;;
8470 esac
8472 case "$ARCH" in
8473 i386|x86_64)
8474 echo "cpu_family = 'x86'" >> $cross
8476 ppc64le)
8477 echo "cpu_family = 'ppc64'" >> $cross
8480 echo "cpu_family = '$ARCH'" >> $cross
8482 esac
8483 echo "cpu = '$cpu'" >> $cross
8484 if test "$bigendian" = "yes" ; then
8485 echo "endian = 'big'" >> $cross
8486 else
8487 echo "endian = 'little'" >> $cross
8489 else
8490 cross_arg="--native-file config-meson.cross"
8492 mv $cross config-meson.cross
8494 rm -rf meson-private meson-info meson-logs
8495 NINJA=$PWD/ninjatool $meson setup \
8496 --prefix "${pre_prefix}$prefix" \
8497 --libdir "${pre_prefix}$libdir" \
8498 --libexecdir "${pre_prefix}$libexecdir" \
8499 --bindir "${pre_prefix}$bindir" \
8500 --includedir "${pre_prefix}$includedir" \
8501 --datadir "${pre_prefix}$datadir" \
8502 --mandir "${pre_prefix}$mandir" \
8503 --sysconfdir "${pre_prefix}$sysconfdir" \
8504 --localstatedir "${pre_prefix}$local_statedir" \
8505 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8506 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
8507 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
8508 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
8509 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
8510 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
8511 $cross_arg \
8512 "$PWD" "$source_path"
8514 if test "$?" -ne 0 ; then
8515 error_exit "meson setup failed"
8517 touch ninjatool.stamp
8520 # Save the configure command line for later reuse.
8521 cat <<EOD >config.status
8522 #!/bin/sh
8523 # Generated by configure.
8524 # Run this file to recreate the current configuration.
8525 # Compiler output produced by configure, useful for debugging
8526 # configure, is in config.log if it exists.
8529 preserve_env() {
8530 envname=$1
8532 eval envval=\$$envname
8534 if test -n "$envval"
8535 then
8536 echo "$envname='$envval'" >> config.status
8537 echo "export $envname" >> config.status
8538 else
8539 echo "unset $envname" >> config.status
8543 # Preserve various env variables that influence what
8544 # features/build target configure will detect
8545 preserve_env AR
8546 preserve_env AS
8547 preserve_env CC
8548 preserve_env CPP
8549 preserve_env CXX
8550 preserve_env INSTALL
8551 preserve_env LD
8552 preserve_env LD_LIBRARY_PATH
8553 preserve_env LIBTOOL
8554 preserve_env MAKE
8555 preserve_env NM
8556 preserve_env OBJCOPY
8557 preserve_env PATH
8558 preserve_env PKG_CONFIG
8559 preserve_env PKG_CONFIG_LIBDIR
8560 preserve_env PKG_CONFIG_PATH
8561 preserve_env PYTHON
8562 preserve_env SDL2_CONFIG
8563 preserve_env SMBD
8564 preserve_env STRIP
8565 preserve_env WINDRES
8567 printf "exec" >>config.status
8568 for i in "$0" "$@"; do
8569 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
8570 done
8571 echo ' "$@"' >>config.status
8572 chmod +x config.status
8574 rm -r "$TMPDIR1"