meson: sphinx-build
[qemu/ar7.git] / configure
blob77f2616e61a6e9d833b5cc172a1bbd76b7826639
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_tools=""
366 audio_win_int=""
367 libs_qga=""
368 debug_info="yes"
369 stack_protector=""
370 safe_stack=""
371 use_containers="yes"
372 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
374 if test -e "$source_path/.git"
375 then
376 git_update=yes
377 git_submodules="ui/keycodemapdb"
378 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
379 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
380 else
381 git_update=no
382 git_submodules=""
384 if ! test -f "$source_path/ui/keycodemapdb/README"
385 then
386 echo
387 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
388 echo
389 echo "This is not a GIT checkout but module content appears to"
390 echo "be missing. Do not use 'git archive' or GitHub download links"
391 echo "to acquire QEMU source archives. Non-GIT builds are only"
392 echo "supported with source archives linked from:"
393 echo
394 echo " https://www.qemu.org/download/#source"
395 echo
396 echo "Developers working with GIT can use scripts/archive-source.sh"
397 echo "if they need to create valid source archives."
398 echo
399 exit 1
402 git="git"
404 # Don't accept a target_list environment variable.
405 unset target_list
406 unset target_list_exclude
408 # Default value for a variable defining feature "foo".
409 # * foo="no" feature will only be used if --enable-foo arg is given
410 # * foo="" feature will be searched for, and if found, will be used
411 # unless --disable-foo is given
412 # * foo="yes" this value will only be set by --enable-foo flag.
413 # feature will searched for,
414 # if not found, configure exits with error
416 # Always add --enable-foo and --disable-foo command line args.
417 # Distributions want to ensure that several features are compiled in, and it
418 # is impossible without a --enable-foo that exits if a feature is not found.
420 brlapi=""
421 curl=""
422 curses=""
423 docs=""
424 fdt=""
425 netmap="no"
426 sdl=""
427 sdl_image=""
428 virtfs=""
429 mpath=""
430 vnc="yes"
431 sparse="no"
432 vde=""
433 vnc_sasl=""
434 vnc_jpeg=""
435 vnc_png=""
436 xkbcommon=""
437 xen=""
438 xen_ctrl_version=""
439 xen_pci_passthrough=""
440 linux_aio=""
441 linux_io_uring=""
442 cap_ng=""
443 attr=""
444 libattr=""
445 xfs=""
446 tcg="yes"
447 membarrier=""
448 vhost_net=""
449 vhost_crypto=""
450 vhost_scsi=""
451 vhost_vsock=""
452 vhost_user=""
453 vhost_user_fs=""
454 kvm="no"
455 hax="no"
456 hvf="no"
457 whpx="no"
458 rdma=""
459 pvrdma=""
460 gprof="no"
461 debug_tcg="no"
462 debug="no"
463 sanitizers="no"
464 tsan="no"
465 fortify_source=""
466 strip_opt="yes"
467 tcg_interpreter="no"
468 bigendian="no"
469 mingw32="no"
470 gcov="no"
471 EXESUF=""
472 DSOSUF=".so"
473 LDFLAGS_SHARED="-shared"
474 modules="no"
475 module_upgrades="no"
476 prefix="/usr/local"
477 firmwarepath="\${prefix}/share/qemu-firmware"
478 confsuffix="/qemu"
479 slirp=""
480 oss_lib=""
481 bsd="no"
482 linux="no"
483 solaris="no"
484 profiler="no"
485 cocoa="no"
486 softmmu="yes"
487 linux_user="no"
488 bsd_user="no"
489 blobs="yes"
490 edk2_blobs="no"
491 pkgversion=""
492 pie=""
493 qom_cast_debug="yes"
494 trace_backends="log"
495 trace_file="trace"
496 spice=""
497 rbd=""
498 smartcard=""
499 libusb=""
500 usb_redir=""
501 opengl=""
502 opengl_dmabuf="no"
503 cpuid_h="no"
504 avx2_opt=""
505 zlib="yes"
506 capstone=""
507 lzo=""
508 snappy=""
509 bzip2=""
510 lzfse=""
511 zstd=""
512 guest_agent=""
513 guest_agent_with_vss="no"
514 guest_agent_ntddscsi="no"
515 guest_agent_msi=""
516 vss_win32_sdk=""
517 win_sdk="no"
518 want_tools=""
519 libiscsi=""
520 libnfs=""
521 coroutine=""
522 coroutine_pool=""
523 debug_stack_usage="no"
524 crypto_afalg="no"
525 seccomp=""
526 glusterfs=""
527 glusterfs_xlator_opt="no"
528 glusterfs_discard="no"
529 glusterfs_fallocate="no"
530 glusterfs_zerofill="no"
531 glusterfs_ftruncate_has_stat="no"
532 glusterfs_iocb_has_stat="no"
533 gtk=""
534 gtk_gl="no"
535 tls_priority="NORMAL"
536 gnutls=""
537 nettle=""
538 nettle_xts="no"
539 gcrypt=""
540 gcrypt_hmac="no"
541 gcrypt_xts="no"
542 qemu_private_xts="yes"
543 auth_pam=""
544 vte=""
545 virglrenderer=""
546 tpm=""
547 libssh=""
548 live_block_migration="yes"
549 numa=""
550 tcmalloc="no"
551 jemalloc="no"
552 replication="yes"
553 bochs="yes"
554 cloop="yes"
555 dmg="yes"
556 qcow1="yes"
557 vdi="yes"
558 vvfat="yes"
559 qed="yes"
560 parallels="yes"
561 sheepdog="yes"
562 libxml2=""
563 debug_mutex="no"
564 libpmem=""
565 default_devices="yes"
566 plugins="no"
567 fuzzing="no"
568 rng_none="no"
569 secret_keyring=""
570 libdaxctl=""
571 meson=""
572 skip_meson=no
574 bogus_os="no"
575 malloc_trim=""
577 # parse CC options first
578 for opt do
579 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
580 case "$opt" in
581 --cross-prefix=*) cross_prefix="$optarg"
583 --cc=*) CC="$optarg"
585 --cxx=*) CXX="$optarg"
587 --cpu=*) cpu="$optarg"
589 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
590 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
592 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
594 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
595 EXTRA_LDFLAGS="$optarg"
597 --enable-debug-info) debug_info="yes"
599 --disable-debug-info) debug_info="no"
601 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
603 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
604 eval "cross_cc_cflags_${cc_arch}=\$optarg"
605 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
607 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
608 cc_archs="$cc_archs $cc_arch"
609 eval "cross_cc_${cc_arch}=\$optarg"
610 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
612 esac
613 done
614 # OS specific
615 # Using uname is really, really broken. Once we have the right set of checks
616 # we can eliminate its usage altogether.
618 # Preferred compiler:
619 # ${CC} (if set)
620 # ${cross_prefix}gcc (if cross-prefix specified)
621 # system compiler
622 if test -z "${CC}${cross_prefix}"; then
623 cc="$host_cc"
624 else
625 cc="${CC-${cross_prefix}gcc}"
628 if test -z "${CXX}${cross_prefix}"; then
629 cxx="c++"
630 else
631 cxx="${CXX-${cross_prefix}g++}"
634 ar="${AR-${cross_prefix}ar}"
635 as="${AS-${cross_prefix}as}"
636 ccas="${CCAS-$cc}"
637 cpp="${CPP-$cc -E}"
638 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
639 ld="${LD-${cross_prefix}ld}"
640 ranlib="${RANLIB-${cross_prefix}ranlib}"
641 nm="${NM-${cross_prefix}nm}"
642 strip="${STRIP-${cross_prefix}strip}"
643 windres="${WINDRES-${cross_prefix}windres}"
644 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
645 query_pkg_config() {
646 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
648 pkg_config=query_pkg_config
649 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
651 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
652 ARFLAGS="${ARFLAGS-rv}"
654 # default flags for all hosts
655 # We use -fwrapv to tell the compiler that we require a C dialect where
656 # left shift of signed integers is well defined and has the expected
657 # 2s-complement style results. (Both clang and gcc agree that it
658 # provides these semantics.)
659 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
660 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
661 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
662 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
663 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
664 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
665 CFLAGS="-std=gnu99 -Wall"
668 # running configure in the source tree?
669 # we know that's the case if configure is there.
670 if test -f "./configure"; then
671 pwd_is_source_path="y"
672 else
673 pwd_is_source_path="n"
676 check_define() {
677 cat > $TMPC <<EOF
678 #if !defined($1)
679 #error $1 not defined
680 #endif
681 int main(void) { return 0; }
683 compile_object
686 check_include() {
687 cat > $TMPC <<EOF
688 #include <$1>
689 int main(void) { return 0; }
691 compile_object
694 write_c_skeleton() {
695 cat > $TMPC <<EOF
696 int main(void) { return 0; }
700 write_c_fuzzer_skeleton() {
701 cat > $TMPC <<EOF
702 #include <stdint.h>
703 #include <sys/types.h>
704 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
705 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
709 if check_define __linux__ ; then
710 targetos="Linux"
711 elif check_define _WIN32 ; then
712 targetos='MINGW32'
713 elif check_define __OpenBSD__ ; then
714 targetos='OpenBSD'
715 elif check_define __sun__ ; then
716 targetos='SunOS'
717 elif check_define __HAIKU__ ; then
718 targetos='Haiku'
719 elif check_define __FreeBSD__ ; then
720 targetos='FreeBSD'
721 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
722 targetos='GNU/kFreeBSD'
723 elif check_define __DragonFly__ ; then
724 targetos='DragonFly'
725 elif check_define __NetBSD__; then
726 targetos='NetBSD'
727 elif check_define __APPLE__; then
728 targetos='Darwin'
729 else
730 # This is a fatal error, but don't report it yet, because we
731 # might be going to just print the --help text, or it might
732 # be the result of a missing compiler.
733 targetos='bogus'
734 bogus_os='yes'
737 # Some host OSes need non-standard checks for which CPU to use.
738 # Note that these checks are broken for cross-compilation: if you're
739 # cross-compiling to one of these OSes then you'll need to specify
740 # the correct CPU with the --cpu option.
741 case $targetos in
742 Darwin)
743 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
744 # run 64-bit userspace code.
745 # If the user didn't specify a CPU explicitly and the kernel says this is
746 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
747 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
748 cpu="x86_64"
751 SunOS)
752 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
753 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
754 cpu="x86_64"
756 esac
758 if test ! -z "$cpu" ; then
759 # command line argument
761 elif check_define __i386__ ; then
762 cpu="i386"
763 elif check_define __x86_64__ ; then
764 if check_define __ILP32__ ; then
765 cpu="x32"
766 else
767 cpu="x86_64"
769 elif check_define __sparc__ ; then
770 if check_define __arch64__ ; then
771 cpu="sparc64"
772 else
773 cpu="sparc"
775 elif check_define _ARCH_PPC ; then
776 if check_define _ARCH_PPC64 ; then
777 if check_define _LITTLE_ENDIAN ; then
778 cpu="ppc64le"
779 else
780 cpu="ppc64"
782 else
783 cpu="ppc"
785 elif check_define __mips__ ; then
786 cpu="mips"
787 elif check_define __s390__ ; then
788 if check_define __s390x__ ; then
789 cpu="s390x"
790 else
791 cpu="s390"
793 elif check_define __riscv ; then
794 if check_define _LP64 ; then
795 cpu="riscv64"
796 else
797 cpu="riscv32"
799 elif check_define __arm__ ; then
800 cpu="arm"
801 elif check_define __aarch64__ ; then
802 cpu="aarch64"
803 else
804 cpu=$(uname -m)
807 ARCH=
808 # Normalise host CPU name and set ARCH.
809 # Note that this case should only have supported host CPUs, not guests.
810 case "$cpu" in
811 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
813 ppc64le)
814 ARCH="ppc64"
816 i386|i486|i586|i686|i86pc|BePC)
817 cpu="i386"
819 x86_64|amd64)
820 cpu="x86_64"
822 armv*b|armv*l|arm)
823 cpu="arm"
825 aarch64)
826 cpu="aarch64"
828 mips*)
829 cpu="mips"
831 sparc|sun4[cdmuv])
832 cpu="sparc"
835 # This will result in either an error or falling back to TCI later
836 ARCH=unknown
838 esac
839 if test -z "$ARCH"; then
840 ARCH="$cpu"
843 # OS specific
845 # host *BSD for user mode
846 HOST_VARIANT_DIR=""
848 case $targetos in
849 MINGW32*)
850 mingw32="yes"
851 hax="yes"
852 vhost_user="no"
853 audio_possible_drivers="dsound sdl"
854 if check_include dsound.h; then
855 audio_drv_list="dsound"
856 else
857 audio_drv_list=""
859 supported_os="yes"
861 GNU/kFreeBSD)
862 bsd="yes"
863 audio_drv_list="oss try-sdl"
864 audio_possible_drivers="oss sdl pa"
866 FreeBSD)
867 bsd="yes"
868 make="${MAKE-gmake}"
869 audio_drv_list="oss try-sdl"
870 audio_possible_drivers="oss sdl pa"
871 # needed for kinfo_getvmmap(3) in libutil.h
872 LIBS="-lutil $LIBS"
873 netmap="" # enable netmap autodetect
874 HOST_VARIANT_DIR="freebsd"
876 DragonFly)
877 bsd="yes"
878 make="${MAKE-gmake}"
879 audio_drv_list="oss try-sdl"
880 audio_possible_drivers="oss sdl pa"
881 HOST_VARIANT_DIR="dragonfly"
883 NetBSD)
884 bsd="yes"
885 hax="yes"
886 make="${MAKE-gmake}"
887 audio_drv_list="oss try-sdl"
888 audio_possible_drivers="oss sdl"
889 oss_lib="-lossaudio"
890 HOST_VARIANT_DIR="netbsd"
892 OpenBSD)
893 bsd="yes"
894 make="${MAKE-gmake}"
895 audio_drv_list="try-sdl"
896 audio_possible_drivers="sdl"
897 HOST_VARIANT_DIR="openbsd"
899 Darwin)
900 bsd="yes"
901 darwin="yes"
902 hax="yes"
903 hvf="yes"
904 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
905 if [ "$cpu" = "x86_64" ] ; then
906 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
907 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
909 cocoa="yes"
910 audio_drv_list="coreaudio try-sdl"
911 audio_possible_drivers="coreaudio sdl"
912 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
913 # Disable attempts to use ObjectiveC features in os/object.h since they
914 # won't work when we're compiling with gcc as a C compiler.
915 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
916 HOST_VARIANT_DIR="darwin"
918 SunOS)
919 solaris="yes"
920 make="${MAKE-gmake}"
921 install="${INSTALL-ginstall}"
922 smbd="${SMBD-/usr/sfw/sbin/smbd}"
923 if test -f /usr/include/sys/soundcard.h ; then
924 audio_drv_list="oss try-sdl"
926 audio_possible_drivers="oss sdl"
927 # needed for CMSG_ macros in sys/socket.h
928 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
929 # needed for TIOCWIN* defines in termios.h
930 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
931 solarisnetlibs="-lsocket -lnsl -lresolv"
932 LIBS="$solarisnetlibs $LIBS"
934 Haiku)
935 haiku="yes"
936 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
937 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
939 Linux)
940 audio_drv_list="try-pa oss"
941 audio_possible_drivers="oss alsa sdl pa"
942 linux="yes"
943 linux_user="yes"
944 kvm="yes"
945 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
946 libudev="yes"
948 esac
950 if [ "$bsd" = "yes" ] ; then
951 if [ "$darwin" != "yes" ] ; then
952 bsd_user="yes"
956 : ${make=${MAKE-make}}
957 : ${install=${INSTALL-install}}
958 # We prefer python 3.x. A bare 'python' is traditionally
959 # python 2.x, but some distros have it as python 3.x, so
960 # we check that too
961 python=
962 explicit_python=no
963 for binary in "${PYTHON-python3}" python
965 if has "$binary"
966 then
967 python=$(command -v "$binary")
968 break
970 done
972 sphinx_build=
973 for binary in sphinx-build-3 sphinx-build
975 if has "$binary"
976 then
977 sphinx_build=$(command -v "$binary")
978 break
980 done
982 # Check for ancillary tools used in testing
983 genisoimage=
984 for binary in genisoimage mkisofs
986 if has $binary
987 then
988 genisoimage=$(command -v "$binary")
989 break
991 done
993 : ${smbd=${SMBD-/usr/sbin/smbd}}
995 # Default objcc to clang if available, otherwise use CC
996 if has clang; then
997 objcc=clang
998 else
999 objcc="$cc"
1002 if test "$mingw32" = "yes" ; then
1003 EXESUF=".exe"
1004 DSOSUF=".dll"
1005 # MinGW needs -mthreads for TLS and macro _MT.
1006 CFLAGS="-mthreads $CFLAGS"
1007 LIBS="-lwinmm -lws2_32 $LIBS"
1008 write_c_skeleton;
1009 if compile_prog "" "-liberty" ; then
1010 LIBS="-liberty $LIBS"
1012 prefix="c:/Program Files/QEMU"
1013 confsuffix=""
1014 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1017 werror=""
1019 for opt do
1020 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1021 case "$opt" in
1022 --help|-h) show_help=yes
1024 --version|-V) exec cat $source_path/VERSION
1026 --prefix=*) prefix="$optarg"
1028 --interp-prefix=*) interp_prefix="$optarg"
1030 --cross-prefix=*)
1032 --cc=*)
1034 --host-cc=*) host_cc="$optarg"
1036 --cxx=*)
1038 --iasl=*) iasl="$optarg"
1040 --objcc=*) objcc="$optarg"
1042 --make=*) make="$optarg"
1044 --install=*) install="$optarg"
1046 --python=*) python="$optarg" ; explicit_python=yes
1048 --sphinx-build=*) sphinx_build="$optarg"
1050 --skip-meson) skip_meson=yes
1052 --meson=*) meson="$optarg"
1054 --smbd=*) smbd="$optarg"
1056 --extra-cflags=*)
1058 --extra-cxxflags=*)
1060 --extra-ldflags=*)
1062 --enable-debug-info)
1064 --disable-debug-info)
1066 --cross-cc-*)
1068 --enable-modules)
1069 modules="yes"
1071 --disable-modules)
1072 modules="no"
1074 --disable-module-upgrades) module_upgrades="no"
1076 --enable-module-upgrades) module_upgrades="yes"
1078 --cpu=*)
1080 --target-list=*) target_list="$optarg"
1081 if test "$target_list_exclude"; then
1082 error_exit "Can't mix --target-list with --target-list-exclude"
1085 --target-list-exclude=*) target_list_exclude="$optarg"
1086 if test "$target_list"; then
1087 error_exit "Can't mix --target-list-exclude with --target-list"
1090 --enable-trace-backends=*) trace_backends="$optarg"
1092 # XXX: backwards compatibility
1093 --enable-trace-backend=*) trace_backends="$optarg"
1095 --with-trace-file=*) trace_file="$optarg"
1097 --with-default-devices) default_devices="yes"
1099 --without-default-devices) default_devices="no"
1101 --enable-gprof) gprof="yes"
1103 --enable-gcov) gcov="yes"
1105 --static)
1106 static="yes"
1107 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1109 --mandir=*) mandir="$optarg"
1111 --bindir=*) bindir="$optarg"
1113 --libdir=*) libdir="$optarg"
1115 --libexecdir=*) libexecdir="$optarg"
1117 --includedir=*) includedir="$optarg"
1119 --datadir=*) datadir="$optarg"
1121 --with-confsuffix=*) confsuffix="$optarg"
1123 --docdir=*) qemu_docdir="$optarg"
1125 --sysconfdir=*) sysconfdir="$optarg"
1127 --localstatedir=*) local_statedir="$optarg"
1129 --firmwarepath=*) firmwarepath="$optarg"
1131 --host=*|--build=*|\
1132 --disable-dependency-tracking|\
1133 --sbindir=*|--sharedstatedir=*|\
1134 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1135 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1136 # These switches are silently ignored, for compatibility with
1137 # autoconf-generated configure scripts. This allows QEMU's
1138 # configure to be used by RPM and similar macros that set
1139 # lots of directory switches by default.
1141 --disable-sdl) sdl="no"
1143 --enable-sdl) sdl="yes"
1145 --disable-sdl-image) sdl_image="no"
1147 --enable-sdl-image) sdl_image="yes"
1149 --disable-qom-cast-debug) qom_cast_debug="no"
1151 --enable-qom-cast-debug) qom_cast_debug="yes"
1153 --disable-virtfs) virtfs="no"
1155 --enable-virtfs) virtfs="yes"
1157 --disable-mpath) mpath="no"
1159 --enable-mpath) mpath="yes"
1161 --disable-vnc) vnc="no"
1163 --enable-vnc) vnc="yes"
1165 --oss-lib=*) oss_lib="$optarg"
1167 --audio-drv-list=*) audio_drv_list="$optarg"
1169 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1171 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1173 --enable-debug-tcg) debug_tcg="yes"
1175 --disable-debug-tcg) debug_tcg="no"
1177 --enable-debug)
1178 # Enable debugging options that aren't excessively noisy
1179 debug_tcg="yes"
1180 debug_mutex="yes"
1181 debug="yes"
1182 strip_opt="no"
1183 fortify_source="no"
1185 --enable-sanitizers) sanitizers="yes"
1187 --disable-sanitizers) sanitizers="no"
1189 --enable-tsan) tsan="yes"
1191 --disable-tsan) tsan="no"
1193 --enable-sparse) sparse="yes"
1195 --disable-sparse) sparse="no"
1197 --disable-strip) strip_opt="no"
1199 --disable-vnc-sasl) vnc_sasl="no"
1201 --enable-vnc-sasl) vnc_sasl="yes"
1203 --disable-vnc-jpeg) vnc_jpeg="no"
1205 --enable-vnc-jpeg) vnc_jpeg="yes"
1207 --disable-vnc-png) vnc_png="no"
1209 --enable-vnc-png) vnc_png="yes"
1211 --disable-slirp) slirp="no"
1213 --enable-slirp=git) slirp="git"
1215 --enable-slirp=system) slirp="system"
1217 --disable-vde) vde="no"
1219 --enable-vde) vde="yes"
1221 --disable-netmap) netmap="no"
1223 --enable-netmap) netmap="yes"
1225 --disable-xen) xen="no"
1227 --enable-xen) xen="yes"
1229 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1231 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1233 --disable-brlapi) brlapi="no"
1235 --enable-brlapi) brlapi="yes"
1237 --disable-kvm) kvm="no"
1239 --enable-kvm) kvm="yes"
1241 --disable-hax) hax="no"
1243 --enable-hax) hax="yes"
1245 --disable-hvf) hvf="no"
1247 --enable-hvf) hvf="yes"
1249 --disable-whpx) whpx="no"
1251 --enable-whpx) whpx="yes"
1253 --disable-tcg-interpreter) tcg_interpreter="no"
1255 --enable-tcg-interpreter) tcg_interpreter="yes"
1257 --disable-cap-ng) cap_ng="no"
1259 --enable-cap-ng) cap_ng="yes"
1261 --disable-tcg) tcg="no"
1263 --enable-tcg) tcg="yes"
1265 --disable-malloc-trim) malloc_trim="no"
1267 --enable-malloc-trim) malloc_trim="yes"
1269 --disable-spice) spice="no"
1271 --enable-spice) spice="yes"
1273 --disable-libiscsi) libiscsi="no"
1275 --enable-libiscsi) libiscsi="yes"
1277 --disable-libnfs) libnfs="no"
1279 --enable-libnfs) libnfs="yes"
1281 --enable-profiler) profiler="yes"
1283 --disable-cocoa) cocoa="no"
1285 --enable-cocoa)
1286 cocoa="yes" ;
1287 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1289 --disable-system) softmmu="no"
1291 --enable-system) softmmu="yes"
1293 --disable-user)
1294 linux_user="no" ;
1295 bsd_user="no" ;
1297 --enable-user) ;;
1298 --disable-linux-user) linux_user="no"
1300 --enable-linux-user) linux_user="yes"
1302 --disable-bsd-user) bsd_user="no"
1304 --enable-bsd-user) bsd_user="yes"
1306 --enable-pie) pie="yes"
1308 --disable-pie) pie="no"
1310 --enable-werror) werror="yes"
1312 --disable-werror) werror="no"
1314 --enable-stack-protector) stack_protector="yes"
1316 --disable-stack-protector) stack_protector="no"
1318 --enable-safe-stack) safe_stack="yes"
1320 --disable-safe-stack) safe_stack="no"
1322 --disable-curses) curses="no"
1324 --enable-curses) curses="yes"
1326 --disable-iconv) iconv="no"
1328 --enable-iconv) iconv="yes"
1330 --disable-curl) curl="no"
1332 --enable-curl) curl="yes"
1334 --disable-fdt) fdt="no"
1336 --enable-fdt) fdt="yes"
1338 --disable-linux-aio) linux_aio="no"
1340 --enable-linux-aio) linux_aio="yes"
1342 --disable-linux-io-uring) linux_io_uring="no"
1344 --enable-linux-io-uring) linux_io_uring="yes"
1346 --disable-attr) attr="no"
1348 --enable-attr) attr="yes"
1350 --disable-membarrier) membarrier="no"
1352 --enable-membarrier) membarrier="yes"
1354 --disable-blobs) blobs="no"
1356 --with-pkgversion=*) pkgversion="$optarg"
1358 --with-coroutine=*) coroutine="$optarg"
1360 --disable-coroutine-pool) coroutine_pool="no"
1362 --enable-coroutine-pool) coroutine_pool="yes"
1364 --enable-debug-stack-usage) debug_stack_usage="yes"
1366 --enable-crypto-afalg) crypto_afalg="yes"
1368 --disable-crypto-afalg) crypto_afalg="no"
1370 --disable-docs) docs="no"
1372 --enable-docs) docs="yes"
1374 --disable-vhost-net) vhost_net="no"
1376 --enable-vhost-net) vhost_net="yes"
1378 --disable-vhost-crypto) vhost_crypto="no"
1380 --enable-vhost-crypto) vhost_crypto="yes"
1382 --disable-vhost-scsi) vhost_scsi="no"
1384 --enable-vhost-scsi) vhost_scsi="yes"
1386 --disable-vhost-vsock) vhost_vsock="no"
1388 --enable-vhost-vsock) vhost_vsock="yes"
1390 --disable-vhost-user-fs) vhost_user_fs="no"
1392 --enable-vhost-user-fs) vhost_user_fs="yes"
1394 --disable-opengl) opengl="no"
1396 --enable-opengl) opengl="yes"
1398 --disable-rbd) rbd="no"
1400 --enable-rbd) rbd="yes"
1402 --disable-xfsctl) xfs="no"
1404 --enable-xfsctl) xfs="yes"
1406 --disable-smartcard) smartcard="no"
1408 --enable-smartcard) smartcard="yes"
1410 --disable-libusb) libusb="no"
1412 --enable-libusb) libusb="yes"
1414 --disable-usb-redir) usb_redir="no"
1416 --enable-usb-redir) usb_redir="yes"
1418 --disable-zlib-test) zlib="no"
1420 --disable-lzo) lzo="no"
1422 --enable-lzo) lzo="yes"
1424 --disable-snappy) snappy="no"
1426 --enable-snappy) snappy="yes"
1428 --disable-bzip2) bzip2="no"
1430 --enable-bzip2) bzip2="yes"
1432 --enable-lzfse) lzfse="yes"
1434 --disable-lzfse) lzfse="no"
1436 --disable-zstd) zstd="no"
1438 --enable-zstd) zstd="yes"
1440 --enable-guest-agent) guest_agent="yes"
1442 --disable-guest-agent) guest_agent="no"
1444 --enable-guest-agent-msi) guest_agent_msi="yes"
1446 --disable-guest-agent-msi) guest_agent_msi="no"
1448 --with-vss-sdk) vss_win32_sdk=""
1450 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1452 --without-vss-sdk) vss_win32_sdk="no"
1454 --with-win-sdk) win_sdk=""
1456 --with-win-sdk=*) win_sdk="$optarg"
1458 --without-win-sdk) win_sdk="no"
1460 --enable-tools) want_tools="yes"
1462 --disable-tools) want_tools="no"
1464 --enable-seccomp) seccomp="yes"
1466 --disable-seccomp) seccomp="no"
1468 --disable-glusterfs) glusterfs="no"
1470 --disable-avx2) avx2_opt="no"
1472 --enable-avx2) avx2_opt="yes"
1474 --disable-avx512f) avx512f_opt="no"
1476 --enable-avx512f) avx512f_opt="yes"
1479 --enable-glusterfs) glusterfs="yes"
1481 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1482 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1484 --enable-vhdx|--disable-vhdx)
1485 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1487 --enable-uuid|--disable-uuid)
1488 echo "$0: $opt is obsolete, UUID support is always built" >&2
1490 --disable-gtk) gtk="no"
1492 --enable-gtk) gtk="yes"
1494 --tls-priority=*) tls_priority="$optarg"
1496 --disable-gnutls) gnutls="no"
1498 --enable-gnutls) gnutls="yes"
1500 --disable-nettle) nettle="no"
1502 --enable-nettle) nettle="yes"
1504 --disable-gcrypt) gcrypt="no"
1506 --enable-gcrypt) gcrypt="yes"
1508 --disable-auth-pam) auth_pam="no"
1510 --enable-auth-pam) auth_pam="yes"
1512 --enable-rdma) rdma="yes"
1514 --disable-rdma) rdma="no"
1516 --enable-pvrdma) pvrdma="yes"
1518 --disable-pvrdma) pvrdma="no"
1520 --disable-vte) vte="no"
1522 --enable-vte) vte="yes"
1524 --disable-virglrenderer) virglrenderer="no"
1526 --enable-virglrenderer) virglrenderer="yes"
1528 --disable-tpm) tpm="no"
1530 --enable-tpm) tpm="yes"
1532 --disable-libssh) libssh="no"
1534 --enable-libssh) libssh="yes"
1536 --disable-live-block-migration) live_block_migration="no"
1538 --enable-live-block-migration) live_block_migration="yes"
1540 --disable-numa) numa="no"
1542 --enable-numa) numa="yes"
1544 --disable-libxml2) libxml2="no"
1546 --enable-libxml2) libxml2="yes"
1548 --disable-tcmalloc) tcmalloc="no"
1550 --enable-tcmalloc) tcmalloc="yes"
1552 --disable-jemalloc) jemalloc="no"
1554 --enable-jemalloc) jemalloc="yes"
1556 --disable-replication) replication="no"
1558 --enable-replication) replication="yes"
1560 --disable-bochs) bochs="no"
1562 --enable-bochs) bochs="yes"
1564 --disable-cloop) cloop="no"
1566 --enable-cloop) cloop="yes"
1568 --disable-dmg) dmg="no"
1570 --enable-dmg) dmg="yes"
1572 --disable-qcow1) qcow1="no"
1574 --enable-qcow1) qcow1="yes"
1576 --disable-vdi) vdi="no"
1578 --enable-vdi) vdi="yes"
1580 --disable-vvfat) vvfat="no"
1582 --enable-vvfat) vvfat="yes"
1584 --disable-qed) qed="no"
1586 --enable-qed) qed="yes"
1588 --disable-parallels) parallels="no"
1590 --enable-parallels) parallels="yes"
1592 --disable-sheepdog) sheepdog="no"
1594 --enable-sheepdog) sheepdog="yes"
1596 --disable-vhost-user) vhost_user="no"
1598 --enable-vhost-user) vhost_user="yes"
1600 --disable-vhost-vdpa) vhost_vdpa="no"
1602 --enable-vhost-vdpa) vhost_vdpa="yes"
1604 --disable-vhost-kernel) vhost_kernel="no"
1606 --enable-vhost-kernel) vhost_kernel="yes"
1608 --disable-capstone) capstone="no"
1610 --enable-capstone) capstone="yes"
1612 --enable-capstone=git) capstone="git"
1614 --enable-capstone=system) capstone="system"
1616 --with-git=*) git="$optarg"
1618 --enable-git-update) git_update=yes
1620 --disable-git-update) git_update=no
1622 --enable-debug-mutex) debug_mutex=yes
1624 --disable-debug-mutex) debug_mutex=no
1626 --enable-libpmem) libpmem=yes
1628 --disable-libpmem) libpmem=no
1630 --enable-xkbcommon) xkbcommon=yes
1632 --disable-xkbcommon) xkbcommon=no
1634 --enable-plugins) plugins="yes"
1636 --disable-plugins) plugins="no"
1638 --enable-containers) use_containers="yes"
1640 --disable-containers) use_containers="no"
1642 --enable-fuzzing) fuzzing=yes
1644 --disable-fuzzing) fuzzing=no
1646 --gdb=*) gdb_bin="$optarg"
1648 --enable-rng-none) rng_none=yes
1650 --disable-rng-none) rng_none=no
1652 --enable-keyring) secret_keyring="yes"
1654 --disable-keyring) secret_keyring="no"
1656 --enable-libdaxctl) libdaxctl=yes
1658 --disable-libdaxctl) libdaxctl=no
1661 echo "ERROR: unknown option $opt"
1662 echo "Try '$0 --help' for more information"
1663 exit 1
1665 esac
1666 done
1668 libdir="${libdir:-$prefix/lib}"
1669 libexecdir="${libexecdir:-$prefix/libexec}"
1670 includedir="${includedir:-$prefix/include}"
1672 if test "$mingw32" = "yes" ; then
1673 mandir="$prefix"
1674 datadir="$prefix"
1675 qemu_docdir="$prefix"
1676 bindir="$prefix"
1677 sysconfdir="$prefix"
1678 local_statedir=
1679 else
1680 mandir="${mandir:-$prefix/share/man}"
1681 datadir="${datadir:-$prefix/share}"
1682 qemu_docdir="${qemu_docdir:-$prefix/share/doc/qemu}"
1683 bindir="${bindir:-$prefix/bin}"
1684 sysconfdir="${sysconfdir:-$prefix/etc}"
1685 local_statedir="${local_statedir:-$prefix/var}"
1688 case "$cpu" in
1689 ppc)
1690 CPU_CFLAGS="-m32"
1691 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1693 ppc64)
1694 CPU_CFLAGS="-m64"
1695 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1697 sparc)
1698 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1699 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1701 sparc64)
1702 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1703 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1705 s390)
1706 CPU_CFLAGS="-m31"
1707 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1709 s390x)
1710 CPU_CFLAGS="-m64"
1711 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1713 i386)
1714 CPU_CFLAGS="-m32"
1715 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1717 x86_64)
1718 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1719 # If we truly care, we should simply detect this case at
1720 # runtime and generate the fallback to serial emulation.
1721 CPU_CFLAGS="-m64 -mcx16"
1722 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1724 x32)
1725 CPU_CFLAGS="-mx32"
1726 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1728 # No special flags required for other host CPUs
1729 esac
1731 eval "cross_cc_${cpu}=\$host_cc"
1732 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1733 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1735 # For user-mode emulation the host arch has to be one we explicitly
1736 # support, even if we're using TCI.
1737 if [ "$ARCH" = "unknown" ]; then
1738 bsd_user="no"
1739 linux_user="no"
1742 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1743 tcg="no"
1746 default_target_list=""
1748 mak_wilds=""
1750 if [ "$softmmu" = "yes" ]; then
1751 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1753 if [ "$linux_user" = "yes" ]; then
1754 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1756 if [ "$bsd_user" = "yes" ]; then
1757 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1760 if test -z "$target_list_exclude"; then
1761 for config in $mak_wilds; do
1762 default_target_list="${default_target_list} $(basename "$config" .mak)"
1763 done
1764 else
1765 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1766 for config in $mak_wilds; do
1767 target="$(basename "$config" .mak)"
1768 exclude="no"
1769 for excl in $exclude_list; do
1770 if test "$excl" = "$target"; then
1771 exclude="yes"
1772 break;
1774 done
1775 if test "$exclude" = "no"; then
1776 default_target_list="${default_target_list} $target"
1778 done
1781 # Enumerate public trace backends for --help output
1782 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1784 if test x"$show_help" = x"yes" ; then
1785 cat << EOF
1787 Usage: configure [options]
1788 Options: [defaults in brackets after descriptions]
1790 Standard options:
1791 --help print this message
1792 --prefix=PREFIX install in PREFIX [$prefix]
1793 --interp-prefix=PREFIX where to find shared libraries, etc.
1794 use %M for cpu name [$interp_prefix]
1795 --target-list=LIST set target list (default: build everything)
1796 $(echo Available targets: $default_target_list | \
1797 fold -s -w 53 | sed -e 's/^/ /')
1798 --target-list-exclude=LIST exclude a set of targets from the default target-list
1800 Advanced options (experts only):
1801 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1802 --cc=CC use C compiler CC [$cc]
1803 --iasl=IASL use ACPI compiler IASL [$iasl]
1804 --host-cc=CC use C compiler CC [$host_cc] for code run at
1805 build time
1806 --cxx=CXX use C++ compiler CXX [$cxx]
1807 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1808 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1809 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1810 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1811 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1812 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1813 --make=MAKE use specified make [$make]
1814 --install=INSTALL use specified install [$install]
1815 --python=PYTHON use specified python [$python]
1816 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1817 --meson=MESON use specified meson [$meson]
1818 --smbd=SMBD use specified smbd [$smbd]
1819 --with-git=GIT use specified git [$git]
1820 --static enable static build [$static]
1821 --mandir=PATH install man pages in PATH
1822 --datadir=PATH install firmware in PATH$confsuffix
1823 --docdir=PATH install documentation in PATH$confsuffix
1824 --bindir=PATH install binaries in PATH
1825 --libdir=PATH install libraries in PATH
1826 --libexecdir=PATH install helper binaries in PATH
1827 --sysconfdir=PATH install config in PATH$confsuffix
1828 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1829 --firmwarepath=PATH search PATH for firmware files
1830 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1831 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1832 --with-pkgversion=VERS use specified string as sub-version of the package
1833 --enable-debug enable common debug build options
1834 --enable-sanitizers enable default sanitizers
1835 --enable-tsan enable thread sanitizer
1836 --disable-strip disable stripping binaries
1837 --disable-werror disable compilation abort on warning
1838 --disable-stack-protector disable compiler-provided stack protection
1839 --audio-drv-list=LIST set audio drivers list:
1840 Available drivers: $audio_possible_drivers
1841 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1842 --block-drv-rw-whitelist=L
1843 set block driver read-write whitelist
1844 (affects only QEMU, not qemu-img)
1845 --block-drv-ro-whitelist=L
1846 set block driver read-only whitelist
1847 (affects only QEMU, not qemu-img)
1848 --enable-trace-backends=B Set trace backend
1849 Available backends: $trace_backend_list
1850 --with-trace-file=NAME Full PATH,NAME of file to store traces
1851 Default:trace-<pid>
1852 --disable-slirp disable SLIRP userspace network connectivity
1853 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1854 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1855 --oss-lib path to OSS library
1856 --cpu=CPU Build for host CPU [$cpu]
1857 --with-coroutine=BACKEND coroutine backend. Supported options:
1858 ucontext, sigaltstack, windows
1859 --enable-gcov enable test coverage analysis with gcov
1860 --disable-blobs disable installing provided firmware blobs
1861 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1862 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1863 --tls-priority default TLS protocol/cipher priority string
1864 --enable-gprof QEMU profiling with gprof
1865 --enable-profiler profiler support
1866 --enable-debug-stack-usage
1867 track the maximum stack usage of stacks created by qemu_alloc_stack
1868 --enable-plugins
1869 enable plugins via shared library loading
1870 --disable-containers don't use containers for cross-building
1871 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1873 Optional features, enabled with --enable-FEATURE and
1874 disabled with --disable-FEATURE, default is enabled if available:
1876 system all system emulation targets
1877 user supported user emulation targets
1878 linux-user all linux usermode emulation targets
1879 bsd-user all BSD usermode emulation targets
1880 docs build documentation
1881 guest-agent build the QEMU Guest Agent
1882 guest-agent-msi build guest agent Windows MSI installation package
1883 pie Position Independent Executables
1884 modules modules support (non-Windows)
1885 module-upgrades try to load modules from alternate paths for upgrades
1886 debug-tcg TCG debugging (default is disabled)
1887 debug-info debugging information
1888 sparse sparse checker
1889 safe-stack SafeStack Stack Smash Protection. Depends on
1890 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1892 gnutls GNUTLS cryptography support
1893 nettle nettle cryptography support
1894 gcrypt libgcrypt cryptography support
1895 auth-pam PAM access control
1896 sdl SDL UI
1897 sdl-image SDL Image support for icons
1898 gtk gtk UI
1899 vte vte support for the gtk UI
1900 curses curses UI
1901 iconv font glyph conversion support
1902 vnc VNC UI support
1903 vnc-sasl SASL encryption for VNC server
1904 vnc-jpeg JPEG lossy compression for VNC server
1905 vnc-png PNG compression for VNC server
1906 cocoa Cocoa UI (Mac OS X only)
1907 virtfs VirtFS
1908 mpath Multipath persistent reservation passthrough
1909 xen xen backend driver support
1910 xen-pci-passthrough PCI passthrough support for Xen
1911 brlapi BrlAPI (Braile)
1912 curl curl connectivity
1913 membarrier membarrier system call (for Linux 4.14+ or Windows)
1914 fdt fdt device tree
1915 kvm KVM acceleration support
1916 hax HAX acceleration support
1917 hvf Hypervisor.framework acceleration support
1918 whpx Windows Hypervisor Platform acceleration support
1919 rdma Enable RDMA-based migration
1920 pvrdma Enable PVRDMA support
1921 vde support for vde network
1922 netmap support for netmap network
1923 linux-aio Linux AIO support
1924 linux-io-uring Linux io_uring support
1925 cap-ng libcap-ng support
1926 attr attr and xattr support
1927 vhost-net vhost-net kernel acceleration support
1928 vhost-vsock virtio sockets device support
1929 vhost-scsi vhost-scsi kernel target support
1930 vhost-crypto vhost-user-crypto backend support
1931 vhost-kernel vhost kernel backend support
1932 vhost-user vhost-user backend support
1933 vhost-vdpa vhost-vdpa kernel backend support
1934 spice spice
1935 rbd rados block device (rbd)
1936 libiscsi iscsi support
1937 libnfs nfs support
1938 smartcard smartcard support (libcacard)
1939 libusb libusb (for usb passthrough)
1940 live-block-migration Block migration in the main migration stream
1941 usb-redir usb network redirection support
1942 lzo support of lzo compression library
1943 snappy support of snappy compression library
1944 bzip2 support of bzip2 compression library
1945 (for reading bzip2-compressed dmg images)
1946 lzfse support of lzfse compression library
1947 (for reading lzfse-compressed dmg images)
1948 zstd support for zstd compression library
1949 (for migration compression and qcow2 cluster compression)
1950 seccomp seccomp support
1951 coroutine-pool coroutine freelist (better performance)
1952 glusterfs GlusterFS backend
1953 tpm TPM support
1954 libssh ssh block device support
1955 numa libnuma support
1956 libxml2 for Parallels image format
1957 tcmalloc tcmalloc support
1958 jemalloc jemalloc support
1959 avx2 AVX2 optimization support
1960 avx512f AVX512F optimization support
1961 replication replication support
1962 opengl opengl support
1963 virglrenderer virgl rendering support
1964 xfsctl xfsctl support
1965 qom-cast-debug cast debugging support
1966 tools build qemu-io, qemu-nbd and qemu-img tools
1967 bochs bochs image format support
1968 cloop cloop image format support
1969 dmg dmg image format support
1970 qcow1 qcow v1 image format support
1971 vdi vdi image format support
1972 vvfat vvfat image format support
1973 qed qed image format support
1974 parallels parallels image format support
1975 sheepdog sheepdog block driver support
1976 crypto-afalg Linux AF_ALG crypto backend driver
1977 capstone capstone disassembler support
1978 debug-mutex mutex debugging support
1979 libpmem libpmem support
1980 xkbcommon xkbcommon support
1981 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1982 libdaxctl libdaxctl support
1984 NOTE: The object files are built at the place where configure is launched
1986 exit 0
1989 # Remove old dependency files to make sure that they get properly regenerated
1990 rm -f */config-devices.mak.d
1992 if test -z "$python"
1993 then
1994 error_exit "Python not found. Use --python=/path/to/python"
1997 # Note that if the Python conditional here evaluates True we will exit
1998 # with status 1 which is a shell 'false' value.
1999 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2000 error_exit "Cannot use '$python', Python >= 3.5 is required." \
2001 "Use --python=/path/to/python to specify a supported Python."
2004 # Preserve python version since some functionality is dependent on it
2005 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)
2007 # Suppress writing compiled files
2008 python="$python -B"
2010 if test -z "$meson"; then
2011 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.0; then
2012 meson=meson
2013 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2014 meson=git
2015 elif test -e "${source_path}/meson/meson.py" ; then
2016 meson=internal
2017 else
2018 if test "$explicit_python" = yes; then
2019 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2020 else
2021 error_exit "Meson not found. Use --meson=/path/to/meson"
2024 else
2025 # Meson uses its own Python interpreter to invoke other Python scripts,
2026 # but the user wants to use the one they specified with --python.
2028 # We do not want to override the distro Python interpreter (and sometimes
2029 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2030 # just require --meson=git|internal together with --python.
2031 if test "$explicit_python" = yes; then
2032 case "$meson" in
2033 git | internal) ;;
2034 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2035 esac
2039 if test "$meson" = git; then
2040 git_submodules="${git_submodules} meson"
2042 if test "$git_update" = yes; then
2043 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
2046 case "$meson" in
2047 git | internal)
2048 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2049 error_exit "Python setuptools not found"
2051 meson="$python ${source_path}/meson/meson.py"
2053 *) meson=$(command -v meson) ;;
2054 esac
2057 # Check that the C compiler works. Doing this here before testing
2058 # the host CPU ensures that we had a valid CC to autodetect the
2059 # $cpu var (and we should bail right here if that's not the case).
2060 # It also allows the help message to be printed without a CC.
2061 write_c_skeleton;
2062 if compile_object ; then
2063 : C compiler works ok
2064 else
2065 error_exit "\"$cc\" either does not exist or does not work"
2067 if ! compile_prog ; then
2068 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2071 # Now we have handled --enable-tcg-interpreter and know we're not just
2072 # printing the help message, bail out if the host CPU isn't supported.
2073 if test "$ARCH" = "unknown"; then
2074 if test "$tcg_interpreter" = "yes" ; then
2075 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2076 else
2077 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2081 # Consult white-list to determine whether to enable werror
2082 # by default. Only enable by default for git builds
2083 if test -z "$werror" ; then
2084 if test -e "$source_path/.git" && \
2085 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2086 werror="yes"
2087 else
2088 werror="no"
2092 if test "$bogus_os" = "yes"; then
2093 # Now that we know that we're not printing the help and that
2094 # the compiler works (so the results of the check_defines we used
2095 # to identify the OS are reliable), if we didn't recognize the
2096 # host OS we should stop now.
2097 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2100 # Check whether the compiler matches our minimum requirements:
2101 cat > $TMPC << EOF
2102 #if defined(__clang_major__) && defined(__clang_minor__)
2103 # ifdef __apple_build_version__
2104 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2105 # error You need at least XCode Clang v5.1 to compile QEMU
2106 # endif
2107 # else
2108 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2109 # error You need at least Clang v3.4 to compile QEMU
2110 # endif
2111 # endif
2112 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2113 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2114 # error You need at least GCC v4.8 to compile QEMU
2115 # endif
2116 #else
2117 # error You either need GCC or Clang to compiler QEMU
2118 #endif
2119 int main (void) { return 0; }
2121 if ! compile_prog "" "" ; then
2122 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2125 # Accumulate -Wfoo and -Wno-bar separately.
2126 # We will list all of the enable flags first, and the disable flags second.
2127 # Note that we do not add -Werror, because that would enable it for all
2128 # configure tests. If a configure test failed due to -Werror this would
2129 # just silently disable some features, so it's too error prone.
2131 warn_flags=
2132 add_to warn_flags -Wold-style-declaration
2133 add_to warn_flags -Wold-style-definition
2134 add_to warn_flags -Wtype-limits
2135 add_to warn_flags -Wformat-security
2136 add_to warn_flags -Wformat-y2k
2137 add_to warn_flags -Winit-self
2138 add_to warn_flags -Wignored-qualifiers
2139 add_to warn_flags -Wempty-body
2140 add_to warn_flags -Wnested-externs
2141 add_to warn_flags -Wendif-labels
2142 add_to warn_flags -Wexpansion-to-defined
2144 nowarn_flags=
2145 add_to nowarn_flags -Wno-initializer-overrides
2146 add_to nowarn_flags -Wno-missing-include-dirs
2147 add_to nowarn_flags -Wno-shift-negative-value
2148 add_to nowarn_flags -Wno-string-plus-int
2149 add_to nowarn_flags -Wno-typedef-redefinition
2150 add_to nowarn_flags -Wno-tautological-type-limit-compare
2151 add_to nowarn_flags -Wno-psabi
2153 gcc_flags="$warn_flags $nowarn_flags"
2155 cc_has_warning_flag() {
2156 write_c_skeleton;
2158 # Use the positive sense of the flag when testing for -Wno-wombat
2159 # support (gcc will happily accept the -Wno- form of unknown
2160 # warning options).
2161 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2162 compile_prog "-Werror $optflag" ""
2165 for flag in $gcc_flags; do
2166 if cc_has_warning_flag $flag ; then
2167 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2169 done
2171 if test "$stack_protector" != "no"; then
2172 cat > $TMPC << EOF
2173 int main(int argc, char *argv[])
2175 char arr[64], *p = arr, *c = argv[0];
2176 while (*c) {
2177 *p++ = *c++;
2179 return 0;
2182 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2183 sp_on=0
2184 for flag in $gcc_flags; do
2185 # We need to check both a compile and a link, since some compiler
2186 # setups fail only on a .c->.o compile and some only at link time
2187 if compile_object "-Werror $flag" &&
2188 compile_prog "-Werror $flag" ""; then
2189 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2190 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2191 sp_on=1
2192 break
2194 done
2195 if test "$stack_protector" = yes; then
2196 if test $sp_on = 0; then
2197 error_exit "Stack protector not supported"
2202 # Disable -Wmissing-braces on older compilers that warn even for
2203 # the "universal" C zero initializer {0}.
2204 cat > $TMPC << EOF
2205 struct {
2206 int a[2];
2207 } x = {0};
2209 if compile_object "-Werror" "" ; then
2211 else
2212 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2215 # Our module code doesn't support Windows
2216 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2217 error_exit "Modules are not available for Windows"
2220 # module_upgrades is only reasonable if modules are enabled
2221 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2222 error_exit "Can't enable module-upgrades as Modules are not enabled"
2225 # Static linking is not possible with modules or PIE
2226 if test "$static" = "yes" ; then
2227 if test "$modules" = "yes" ; then
2228 error_exit "static and modules are mutually incompatible"
2232 # Unconditional check for compiler __thread support
2233 cat > $TMPC << EOF
2234 static __thread int tls_var;
2235 int main(void) { return tls_var; }
2238 if ! compile_prog "-Werror" "" ; then
2239 error_exit "Your compiler does not support the __thread specifier for " \
2240 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2243 cat > $TMPC << EOF
2245 #ifdef __linux__
2246 # define THREAD __thread
2247 #else
2248 # define THREAD
2249 #endif
2250 static THREAD int tls_var;
2251 int main(void) { return tls_var; }
2254 # Check we support --no-pie first; we will need this for building ROMs.
2255 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2256 CFLAGS_NOPIE="-fno-pie"
2257 LDFLAGS_NOPIE="-no-pie"
2260 if test "$static" = "yes"; then
2261 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2262 CFLAGS="-fPIE -DPIE $CFLAGS"
2263 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2264 pie="yes"
2265 elif test "$pie" = "yes"; then
2266 error_exit "-static-pie not available due to missing toolchain support"
2267 else
2268 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2269 pie="no"
2271 elif test "$pie" = "no"; then
2272 CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2273 LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2274 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2275 CFLAGS="-fPIE -DPIE $CFLAGS"
2276 LDFLAGS="-pie $LDFLAGS"
2277 pie="yes"
2278 elif test "$pie" = "yes"; then
2279 error_exit "PIE not available due to missing toolchain support"
2280 else
2281 echo "Disabling PIE due to missing toolchain support"
2282 pie="no"
2285 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2286 # The combination is known as "full relro", because .got.plt is read-only too.
2287 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2288 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2291 ##########################################
2292 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2293 # use i686 as default anyway, but for those that don't, an explicit
2294 # specification is necessary
2296 if test "$cpu" = "i386"; then
2297 cat > $TMPC << EOF
2298 static int sfaa(int *ptr)
2300 return __sync_fetch_and_and(ptr, 0);
2303 int main(void)
2305 int val = 42;
2306 val = __sync_val_compare_and_swap(&val, 0, 1);
2307 sfaa(&val);
2308 return val;
2311 if ! compile_prog "" "" ; then
2312 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2316 #########################################
2317 # Solaris specific configure tool chain decisions
2319 if test "$solaris" = "yes" ; then
2320 if has $install; then
2322 else
2323 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2324 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2325 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2327 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2328 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2329 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2330 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2332 if has ar; then
2334 else
2335 if test -f /usr/ccs/bin/ar ; then
2336 error_exit "No path includes ar" \
2337 "Add /usr/ccs/bin to your path and rerun configure"
2339 error_exit "No path includes ar"
2343 if test -z "${target_list+xxx}" ; then
2344 for target in $default_target_list; do
2345 supported_target $target 2>/dev/null && \
2346 target_list="$target_list $target"
2347 done
2348 target_list="${target_list# }"
2349 else
2350 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2351 for target in $target_list; do
2352 # Check that we recognised the target name; this allows a more
2353 # friendly error message than if we let it fall through.
2354 case " $default_target_list " in
2355 *" $target "*)
2358 error_exit "Unknown target name '$target'"
2360 esac
2361 supported_target $target || exit 1
2362 done
2365 # see if system emulation was really requested
2366 case " $target_list " in
2367 *"-softmmu "*) softmmu=yes
2369 *) softmmu=no
2371 esac
2373 for target in $target_list; do
2374 case "$target" in
2375 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2376 edk2_blobs="yes"
2378 esac
2379 done
2380 # The EDK2 binaries are compressed with bzip2
2381 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2382 error_exit "The bzip2 program is required for building QEMU"
2385 feature_not_found() {
2386 feature=$1
2387 remedy=$2
2389 error_exit "User requested feature $feature" \
2390 "configure was not able to find it." \
2391 "$remedy"
2394 # ---
2395 # big/little endian test
2396 cat > $TMPC << EOF
2397 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2398 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2399 extern int foo(short *, short *);
2400 int main(int argc, char *argv[]) {
2401 return foo(big_endian, little_endian);
2405 if compile_object ; then
2406 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2407 bigendian="yes"
2408 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2409 bigendian="no"
2410 else
2411 echo big/little test failed
2413 else
2414 echo big/little test failed
2417 ##########################################
2418 # system tools
2419 if test -z "$want_tools"; then
2420 if test "$softmmu" = "no"; then
2421 want_tools=no
2422 else
2423 want_tools=yes
2427 ##########################################
2428 # cocoa implies not SDL or GTK
2429 # (the cocoa UI code currently assumes it is always the active UI
2430 # and doesn't interact well with other UI frontend code)
2431 if test "$cocoa" = "yes"; then
2432 if test "$sdl" = "yes"; then
2433 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2435 if test "$gtk" = "yes"; then
2436 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2438 gtk=no
2439 sdl=no
2442 # Some versions of Mac OS X incorrectly define SIZE_MAX
2443 cat > $TMPC << EOF
2444 #include <stdint.h>
2445 #include <stdio.h>
2446 int main(int argc, char *argv[]) {
2447 return printf("%zu", SIZE_MAX);
2450 have_broken_size_max=no
2451 if ! compile_object -Werror ; then
2452 have_broken_size_max=yes
2455 ##########################################
2456 # L2TPV3 probe
2458 cat > $TMPC <<EOF
2459 #include <sys/socket.h>
2460 #include <linux/ip.h>
2461 int main(void) { return sizeof(struct mmsghdr); }
2463 if compile_prog "" "" ; then
2464 l2tpv3=yes
2465 else
2466 l2tpv3=no
2469 if check_include "pty.h" ; then
2470 pty_h=yes
2471 else
2472 pty_h=no
2475 cat > $TMPC <<EOF
2476 #include <sys/mman.h>
2477 int main(int argc, char *argv[]) {
2478 return mlockall(MCL_FUTURE);
2481 if compile_prog "" "" ; then
2482 have_mlockall=yes
2483 else
2484 have_mlockall=no
2487 #########################################
2488 # vhost interdependencies and host support
2490 # vhost backends
2491 test "$vhost_user" = "" && vhost_user=yes
2492 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2493 error_exit "vhost-user isn't available on win32"
2495 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2496 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2497 error_exit "vhost-vdpa is only available on Linux"
2499 test "$vhost_kernel" = "" && vhost_kernel=$linux
2500 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2501 error_exit "vhost-kernel is only available on Linux"
2504 # vhost-kernel devices
2505 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2506 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2507 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2509 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2510 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2511 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2514 # vhost-user backends
2515 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2516 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2517 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2519 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2520 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2521 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2523 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2524 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2525 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2527 #vhost-vdpa backends
2528 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2529 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2530 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2533 # OR the vhost-kernel and vhost-user values for simplicity
2534 if test "$vhost_net" = ""; then
2535 test "$vhost_net_user" = "yes" && vhost_net=yes
2536 test "$vhost_kernel" = "yes" && vhost_net=yes
2539 ##########################################
2540 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2542 if test "$mingw32" = "yes"; then
2543 # Some versions of MinGW / Mingw-w64 lack localtime_r
2544 # and gmtime_r entirely.
2546 # Some versions of Mingw-w64 define a macro for
2547 # localtime_r/gmtime_r.
2549 # Some versions of Mingw-w64 will define functions
2550 # for localtime_r/gmtime_r, but only if you have
2551 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2552 # though, unistd.h and pthread.h both define
2553 # that for you.
2555 # So this #undef localtime_r and #include <unistd.h>
2556 # are not in fact redundant.
2557 cat > $TMPC << EOF
2558 #include <unistd.h>
2559 #include <time.h>
2560 #undef localtime_r
2561 int main(void) { localtime_r(NULL, NULL); return 0; }
2563 if compile_prog "" "" ; then
2564 localtime_r="yes"
2565 else
2566 localtime_r="no"
2570 ##########################################
2571 # pkg-config probe
2573 if ! has "$pkg_config_exe"; then
2574 error_exit "pkg-config binary '$pkg_config_exe' not found"
2577 ##########################################
2578 # NPTL probe
2580 if test "$linux_user" = "yes"; then
2581 cat > $TMPC <<EOF
2582 #include <sched.h>
2583 #include <linux/futex.h>
2584 int main(void) {
2585 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2586 #error bork
2587 #endif
2588 return 0;
2591 if ! compile_object ; then
2592 feature_not_found "nptl" "Install glibc and linux kernel headers."
2596 ##########################################
2597 # lzo check
2599 if test "$lzo" != "no" ; then
2600 cat > $TMPC << EOF
2601 #include <lzo/lzo1x.h>
2602 int main(void) { lzo_version(); return 0; }
2604 if compile_prog "" "-llzo2" ; then
2605 lzo_libs="-llzo2"
2606 lzo="yes"
2607 else
2608 if test "$lzo" = "yes"; then
2609 feature_not_found "liblzo2" "Install liblzo2 devel"
2611 lzo="no"
2615 ##########################################
2616 # snappy check
2618 if test "$snappy" != "no" ; then
2619 cat > $TMPC << EOF
2620 #include <snappy-c.h>
2621 int main(void) { snappy_max_compressed_length(4096); return 0; }
2623 if compile_prog "" "-lsnappy" ; then
2624 snappy_libs='-lsnappy'
2625 snappy="yes"
2626 else
2627 if test "$snappy" = "yes"; then
2628 feature_not_found "libsnappy" "Install libsnappy devel"
2630 snappy="no"
2634 ##########################################
2635 # bzip2 check
2637 if test "$bzip2" != "no" ; then
2638 cat > $TMPC << EOF
2639 #include <bzlib.h>
2640 int main(void) { BZ2_bzlibVersion(); return 0; }
2642 if compile_prog "" "-lbz2" ; then
2643 bzip2="yes"
2644 else
2645 if test "$bzip2" = "yes"; then
2646 feature_not_found "libbzip2" "Install libbzip2 devel"
2648 bzip2="no"
2652 ##########################################
2653 # lzfse check
2655 if test "$lzfse" != "no" ; then
2656 cat > $TMPC << EOF
2657 #include <lzfse.h>
2658 int main(void) { lzfse_decode_scratch_size(); return 0; }
2660 if compile_prog "" "-llzfse" ; then
2661 lzfse="yes"
2662 else
2663 if test "$lzfse" = "yes"; then
2664 feature_not_found "lzfse" "Install lzfse devel"
2666 lzfse="no"
2670 ##########################################
2671 # zstd check
2673 if test "$zstd" != "no" ; then
2674 libzstd_minver="1.4.0"
2675 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2676 zstd_cflags="$($pkg_config --cflags libzstd)"
2677 zstd_libs="$($pkg_config --libs libzstd)"
2678 zstd="yes"
2679 else
2680 if test "$zstd" = "yes" ; then
2681 feature_not_found "libzstd" "Install libzstd devel"
2683 zstd="no"
2687 ##########################################
2688 # libseccomp check
2690 if test "$seccomp" != "no" ; then
2691 libseccomp_minver="2.3.0"
2692 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2693 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2694 seccomp_libs="$($pkg_config --libs libseccomp)"
2695 seccomp="yes"
2696 else
2697 if test "$seccomp" = "yes" ; then
2698 feature_not_found "libseccomp" \
2699 "Install libseccomp devel >= $libseccomp_minver"
2701 seccomp="no"
2704 ##########################################
2705 # xen probe
2707 if test "$xen" != "no" ; then
2708 # Check whether Xen library path is specified via --extra-ldflags to avoid
2709 # overriding this setting with pkg-config output. If not, try pkg-config
2710 # to obtain all needed flags.
2712 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2713 $pkg_config --exists xencontrol ; then
2714 xen_ctrl_version="$(printf '%d%02d%02d' \
2715 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2716 xen=yes
2717 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2718 xen_pc="$xen_pc xenevtchn xendevicemodel"
2719 if $pkg_config --exists xentoolcore; then
2720 xen_pc="$xen_pc xentoolcore"
2722 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2723 xen_cflags="$($pkg_config --cflags $xen_pc)"
2724 xen_libs="$($pkg_config --libs $xen_pc)"
2725 else
2727 xen_libs="-lxenstore -lxenctrl -lxenguest"
2728 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2730 # First we test whether Xen headers and libraries are available.
2731 # If no, we are done and there is no Xen support.
2732 # If yes, more tests are run to detect the Xen version.
2734 # Xen (any)
2735 cat > $TMPC <<EOF
2736 #include <xenctrl.h>
2737 int main(void) {
2738 return 0;
2741 if ! compile_prog "" "$xen_libs" ; then
2742 # Xen not found
2743 if test "$xen" = "yes" ; then
2744 feature_not_found "xen" "Install xen devel"
2746 xen=no
2748 # Xen unstable
2749 elif
2750 cat > $TMPC <<EOF &&
2751 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2752 #define __XEN_TOOLS__
2753 #include <xendevicemodel.h>
2754 #include <xenforeignmemory.h>
2755 int main(void) {
2756 xendevicemodel_handle *xd;
2757 xenforeignmemory_handle *xfmem;
2759 xd = xendevicemodel_open(0, 0);
2760 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2762 xfmem = xenforeignmemory_open(0, 0);
2763 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2765 return 0;
2768 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2769 then
2770 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2771 xen_ctrl_version=41100
2772 xen=yes
2773 elif
2774 cat > $TMPC <<EOF &&
2775 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2776 #include <xenforeignmemory.h>
2777 #include <xentoolcore.h>
2778 int main(void) {
2779 xenforeignmemory_handle *xfmem;
2781 xfmem = xenforeignmemory_open(0, 0);
2782 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2783 xentoolcore_restrict_all(0);
2785 return 0;
2788 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2789 then
2790 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2791 xen_ctrl_version=41000
2792 xen=yes
2793 elif
2794 cat > $TMPC <<EOF &&
2795 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2796 #define __XEN_TOOLS__
2797 #include <xendevicemodel.h>
2798 int main(void) {
2799 xendevicemodel_handle *xd;
2801 xd = xendevicemodel_open(0, 0);
2802 xendevicemodel_close(xd);
2804 return 0;
2807 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2808 then
2809 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2810 xen_ctrl_version=40900
2811 xen=yes
2812 elif
2813 cat > $TMPC <<EOF &&
2815 * If we have stable libs the we don't want the libxc compat
2816 * layers, regardless of what CFLAGS we may have been given.
2818 * Also, check if xengnttab_grant_copy_segment_t is defined and
2819 * grant copy operation is implemented.
2821 #undef XC_WANT_COMPAT_EVTCHN_API
2822 #undef XC_WANT_COMPAT_GNTTAB_API
2823 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2824 #include <xenctrl.h>
2825 #include <xenstore.h>
2826 #include <xenevtchn.h>
2827 #include <xengnttab.h>
2828 #include <xenforeignmemory.h>
2829 #include <stdint.h>
2830 #include <xen/hvm/hvm_info_table.h>
2831 #if !defined(HVM_MAX_VCPUS)
2832 # error HVM_MAX_VCPUS not defined
2833 #endif
2834 int main(void) {
2835 xc_interface *xc = NULL;
2836 xenforeignmemory_handle *xfmem;
2837 xenevtchn_handle *xe;
2838 xengnttab_handle *xg;
2839 xengnttab_grant_copy_segment_t* seg = NULL;
2841 xs_daemon_open();
2843 xc = xc_interface_open(0, 0, 0);
2844 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2845 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2846 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2847 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2849 xfmem = xenforeignmemory_open(0, 0);
2850 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2852 xe = xenevtchn_open(0, 0);
2853 xenevtchn_fd(xe);
2855 xg = xengnttab_open(0, 0);
2856 xengnttab_grant_copy(xg, 0, seg);
2858 return 0;
2861 compile_prog "" "$xen_libs $xen_stable_libs"
2862 then
2863 xen_ctrl_version=40800
2864 xen=yes
2865 elif
2866 cat > $TMPC <<EOF &&
2868 * If we have stable libs the we don't want the libxc compat
2869 * layers, regardless of what CFLAGS we may have been given.
2871 #undef XC_WANT_COMPAT_EVTCHN_API
2872 #undef XC_WANT_COMPAT_GNTTAB_API
2873 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2874 #include <xenctrl.h>
2875 #include <xenstore.h>
2876 #include <xenevtchn.h>
2877 #include <xengnttab.h>
2878 #include <xenforeignmemory.h>
2879 #include <stdint.h>
2880 #include <xen/hvm/hvm_info_table.h>
2881 #if !defined(HVM_MAX_VCPUS)
2882 # error HVM_MAX_VCPUS not defined
2883 #endif
2884 int main(void) {
2885 xc_interface *xc = NULL;
2886 xenforeignmemory_handle *xfmem;
2887 xenevtchn_handle *xe;
2888 xengnttab_handle *xg;
2890 xs_daemon_open();
2892 xc = xc_interface_open(0, 0, 0);
2893 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2894 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2895 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2896 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2898 xfmem = xenforeignmemory_open(0, 0);
2899 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2901 xe = xenevtchn_open(0, 0);
2902 xenevtchn_fd(xe);
2904 xg = xengnttab_open(0, 0);
2905 xengnttab_map_grant_ref(xg, 0, 0, 0);
2907 return 0;
2910 compile_prog "" "$xen_libs $xen_stable_libs"
2911 then
2912 xen_ctrl_version=40701
2913 xen=yes
2915 # Xen 4.6
2916 elif
2917 cat > $TMPC <<EOF &&
2918 #include <xenctrl.h>
2919 #include <xenstore.h>
2920 #include <stdint.h>
2921 #include <xen/hvm/hvm_info_table.h>
2922 #if !defined(HVM_MAX_VCPUS)
2923 # error HVM_MAX_VCPUS not defined
2924 #endif
2925 int main(void) {
2926 xc_interface *xc;
2927 xs_daemon_open();
2928 xc = xc_interface_open(0, 0, 0);
2929 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2930 xc_gnttab_open(NULL, 0);
2931 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2932 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2933 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2934 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2935 return 0;
2938 compile_prog "" "$xen_libs"
2939 then
2940 xen_ctrl_version=40600
2941 xen=yes
2943 # Xen 4.5
2944 elif
2945 cat > $TMPC <<EOF &&
2946 #include <xenctrl.h>
2947 #include <xenstore.h>
2948 #include <stdint.h>
2949 #include <xen/hvm/hvm_info_table.h>
2950 #if !defined(HVM_MAX_VCPUS)
2951 # error HVM_MAX_VCPUS not defined
2952 #endif
2953 int main(void) {
2954 xc_interface *xc;
2955 xs_daemon_open();
2956 xc = xc_interface_open(0, 0, 0);
2957 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2958 xc_gnttab_open(NULL, 0);
2959 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2960 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2961 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2962 return 0;
2965 compile_prog "" "$xen_libs"
2966 then
2967 xen_ctrl_version=40500
2968 xen=yes
2970 elif
2971 cat > $TMPC <<EOF &&
2972 #include <xenctrl.h>
2973 #include <xenstore.h>
2974 #include <stdint.h>
2975 #include <xen/hvm/hvm_info_table.h>
2976 #if !defined(HVM_MAX_VCPUS)
2977 # error HVM_MAX_VCPUS not defined
2978 #endif
2979 int main(void) {
2980 xc_interface *xc;
2981 xs_daemon_open();
2982 xc = xc_interface_open(0, 0, 0);
2983 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2984 xc_gnttab_open(NULL, 0);
2985 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2986 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2987 return 0;
2990 compile_prog "" "$xen_libs"
2991 then
2992 xen_ctrl_version=40200
2993 xen=yes
2995 else
2996 if test "$xen" = "yes" ; then
2997 feature_not_found "xen (unsupported version)" \
2998 "Install a supported xen (xen 4.2 or newer)"
3000 xen=no
3003 if test "$xen" = yes; then
3004 if test $xen_ctrl_version -ge 40701 ; then
3005 xen_libs="$xen_libs $xen_stable_libs "
3011 if test "$xen_pci_passthrough" != "no"; then
3012 if test "$xen" = "yes" && test "$linux" = "yes"; then
3013 xen_pci_passthrough=yes
3014 else
3015 if test "$xen_pci_passthrough" = "yes"; then
3016 error_exit "User requested feature Xen PCI Passthrough" \
3017 " but this feature requires /sys from Linux"
3019 xen_pci_passthrough=no
3023 ##########################################
3024 # Windows Hypervisor Platform accelerator (WHPX) check
3025 if test "$whpx" != "no" ; then
3026 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3027 whpx="yes"
3028 else
3029 if test "$whpx" = "yes"; then
3030 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3032 whpx="no"
3036 ##########################################
3037 # Sparse probe
3038 if test "$sparse" != "no" ; then
3039 if has sparse; then
3040 sparse=yes
3041 else
3042 if test "$sparse" = "yes" ; then
3043 feature_not_found "sparse" "Install sparse binary"
3045 sparse=no
3049 ##########################################
3050 # X11 probe
3051 if $pkg_config --exists "x11"; then
3052 have_x11=yes
3053 x11_cflags=$($pkg_config --cflags x11)
3054 x11_libs=$($pkg_config --libs x11)
3057 ##########################################
3058 # GTK probe
3060 if test "$gtk" != "no"; then
3061 gtkpackage="gtk+-3.0"
3062 gtkx11package="gtk+-x11-3.0"
3063 gtkversion="3.22.0"
3064 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3065 gtk_cflags=$($pkg_config --cflags $gtkpackage)
3066 gtk_libs=$($pkg_config --libs $gtkpackage)
3067 gtk_version=$($pkg_config --modversion $gtkpackage)
3068 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3069 need_x11=yes
3070 gtk_cflags="$gtk_cflags $x11_cflags"
3071 gtk_libs="$gtk_libs $x11_libs"
3073 gtk="yes"
3074 elif test "$gtk" = "yes"; then
3075 feature_not_found "gtk" "Install gtk3-devel"
3076 else
3077 gtk="no"
3082 ##########################################
3083 # GNUTLS probe
3085 if test "$gnutls" != "no"; then
3086 pass="no"
3087 if $pkg_config --exists "gnutls >= 3.1.18"; then
3088 gnutls_cflags=$($pkg_config --cflags gnutls)
3089 gnutls_libs=$($pkg_config --libs gnutls)
3090 # Packaging for the static libraries is not always correct.
3091 # At least ubuntu 18.04 ships only shared libraries.
3092 write_c_skeleton
3093 if compile_prog "" "$gnutls_libs" ; then
3094 LIBS="$gnutls_libs $LIBS"
3095 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3096 pass="yes"
3099 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3100 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3101 else
3102 gnutls="$pass"
3107 # If user didn't give a --disable/enable-gcrypt flag,
3108 # then mark as disabled if user requested nettle
3109 # explicitly
3110 if test -z "$gcrypt"
3111 then
3112 if test "$nettle" = "yes"
3113 then
3114 gcrypt="no"
3118 # If user didn't give a --disable/enable-nettle flag,
3119 # then mark as disabled if user requested gcrypt
3120 # explicitly
3121 if test -z "$nettle"
3122 then
3123 if test "$gcrypt" = "yes"
3124 then
3125 nettle="no"
3129 has_libgcrypt() {
3130 if ! has "libgcrypt-config"
3131 then
3132 return 1
3135 if test -n "$cross_prefix"
3136 then
3137 host=$(libgcrypt-config --host)
3138 if test "$host-" != $cross_prefix
3139 then
3140 return 1
3144 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3145 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3147 if test $maj != 1 || test $min -lt 5
3148 then
3149 return 1
3152 return 0
3156 if test "$nettle" != "no"; then
3157 pass="no"
3158 if $pkg_config --exists "nettle >= 2.7.1"; then
3159 nettle_cflags=$($pkg_config --cflags nettle)
3160 nettle_libs=$($pkg_config --libs nettle)
3161 nettle_version=$($pkg_config --modversion nettle)
3162 # Link test to make sure the given libraries work (e.g for static).
3163 write_c_skeleton
3164 if compile_prog "" "$nettle_libs" ; then
3165 LIBS="$nettle_libs $LIBS"
3166 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3167 if test -z "$gcrypt"; then
3168 gcrypt="no"
3170 pass="yes"
3173 if test "$pass" = "yes"
3174 then
3175 cat > $TMPC << EOF
3176 #include <nettle/xts.h>
3177 int main(void) {
3178 return 0;
3181 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3182 nettle_xts=yes
3183 qemu_private_xts=no
3186 if test "$pass" = "no" && test "$nettle" = "yes"; then
3187 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3188 else
3189 nettle="$pass"
3193 if test "$gcrypt" != "no"; then
3194 pass="no"
3195 if has_libgcrypt; then
3196 gcrypt_cflags=$(libgcrypt-config --cflags)
3197 gcrypt_libs=$(libgcrypt-config --libs)
3198 # Debian has removed -lgpg-error from libgcrypt-config
3199 # as it "spreads unnecessary dependencies" which in
3200 # turn breaks static builds...
3201 if test "$static" = "yes"
3202 then
3203 gcrypt_libs="$gcrypt_libs -lgpg-error"
3206 # Link test to make sure the given libraries work (e.g for static).
3207 write_c_skeleton
3208 if compile_prog "" "$gcrypt_libs" ; then
3209 LIBS="$gcrypt_libs $LIBS"
3210 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3211 pass="yes"
3214 if test "$pass" = "yes"; then
3215 gcrypt="yes"
3216 cat > $TMPC << EOF
3217 #include <gcrypt.h>
3218 int main(void) {
3219 gcry_mac_hd_t handle;
3220 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3221 GCRY_MAC_FLAG_SECURE, NULL);
3222 return 0;
3225 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3226 gcrypt_hmac=yes
3228 cat > $TMPC << EOF
3229 #include <gcrypt.h>
3230 int main(void) {
3231 gcry_cipher_hd_t handle;
3232 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3233 return 0;
3236 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3237 gcrypt_xts=yes
3238 qemu_private_xts=no
3240 elif test "$gcrypt" = "yes"; then
3241 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3242 else
3243 gcrypt="no"
3248 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3249 then
3250 error_exit "Only one of gcrypt & nettle can be enabled"
3253 ##########################################
3254 # libtasn1 - only for the TLS creds/session test suite
3256 tasn1=yes
3257 tasn1_cflags=""
3258 tasn1_libs=""
3259 if $pkg_config --exists "libtasn1"; then
3260 tasn1_cflags=$($pkg_config --cflags libtasn1)
3261 tasn1_libs=$($pkg_config --libs libtasn1)
3262 else
3263 tasn1=no
3267 ##########################################
3268 # PAM probe
3270 if test "$auth_pam" != "no"; then
3271 cat > $TMPC <<EOF
3272 #include <security/pam_appl.h>
3273 #include <stdio.h>
3274 int main(void) {
3275 const char *service_name = "qemu";
3276 const char *user = "frank";
3277 const struct pam_conv pam_conv = { 0 };
3278 pam_handle_t *pamh = NULL;
3279 pam_start(service_name, user, &pam_conv, &pamh);
3280 return 0;
3283 if compile_prog "" "-lpam" ; then
3284 auth_pam=yes
3285 else
3286 if test "$auth_pam" = "yes"; then
3287 feature_not_found "PAM" "Install PAM development package"
3288 else
3289 auth_pam=no
3294 ##########################################
3295 # getifaddrs (for tests/test-io-channel-socket )
3297 have_ifaddrs_h=yes
3298 if ! check_include "ifaddrs.h" ; then
3299 have_ifaddrs_h=no
3302 #########################################
3303 # libdrm check
3304 have_drm_h=no
3305 if check_include "libdrm/drm.h" ; then
3306 have_drm_h=yes
3309 #########################################
3310 # sys/signal.h check
3311 have_sys_signal_h=no
3312 if check_include "sys/signal.h" ; then
3313 have_sys_signal_h=yes
3316 ##########################################
3317 # VTE probe
3319 if test "$vte" != "no"; then
3320 vteminversion="0.32.0"
3321 if $pkg_config --exists "vte-2.91"; then
3322 vtepackage="vte-2.91"
3323 else
3324 vtepackage="vte-2.90"
3326 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3327 vte_cflags=$($pkg_config --cflags $vtepackage)
3328 vte_libs=$($pkg_config --libs $vtepackage)
3329 vteversion=$($pkg_config --modversion $vtepackage)
3330 vte="yes"
3331 elif test "$vte" = "yes"; then
3332 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3333 else
3334 vte="no"
3338 ##########################################
3339 # SDL probe
3341 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3342 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3344 sdl_probe ()
3346 if $pkg_config sdl2 --exists; then
3347 sdlconfig="$pkg_config sdl2"
3348 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3349 elif has "$sdl2_config"; then
3350 sdlconfig="$sdl2_config"
3351 sdlversion=$($sdlconfig --version)
3352 else
3353 if test "$sdl" = "yes" ; then
3354 feature_not_found "sdl" "Install SDL2-devel"
3356 sdl=no
3357 # no need to do the rest
3358 return
3360 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3361 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3364 cat > $TMPC << EOF
3365 #include <SDL.h>
3366 #undef main /* We don't want SDL to override our main() */
3367 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3369 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3370 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3371 if test "$static" = "yes" ; then
3372 if $pkg_config sdl2 --exists; then
3373 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3374 else
3375 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3377 else
3378 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3380 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3381 sdl=yes
3383 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3384 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3385 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3386 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3387 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3389 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3391 else
3392 sdl=no
3394 fi # static link
3395 else # sdl not found
3396 if test "$sdl" = "yes" ; then
3397 feature_not_found "sdl" "Install SDL2 devel"
3399 sdl=no
3400 fi # sdl compile test
3403 sdl_image_probe ()
3405 if test "$sdl_image" != "no" ; then
3406 if $pkg_config SDL2_image --exists; then
3407 if test "$static" = "yes"; then
3408 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3409 else
3410 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3412 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3413 sdl_image=yes
3415 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3416 sdl_libs="$sdl_libs $sdl_image_libs"
3417 else
3418 if test "$sdl_image" = "yes" ; then
3419 feature_not_found "sdl_image" "Install SDL Image devel"
3420 else
3421 sdl_image=no
3427 if test "$sdl" != "no" ; then
3428 sdl_probe
3431 if test "$sdl" = "yes" ; then
3432 sdl_image_probe
3433 else
3434 if test "$sdl_image" = "yes"; then
3435 echo "warning: SDL Image requested, but SDL is not available, disabling"
3437 sdl_image=no
3440 if test "$sdl" = "yes" ; then
3441 cat > $TMPC <<EOF
3442 #include <SDL.h>
3443 #if defined(SDL_VIDEO_DRIVER_X11)
3444 #include <X11/XKBlib.h>
3445 #else
3446 #error No x11 support
3447 #endif
3448 int main(void) { return 0; }
3450 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3451 need_x11=yes
3452 sdl_cflags="$sdl_cflags $x11_cflags"
3453 sdl_libs="$sdl_libs $x11_libs"
3457 ##########################################
3458 # RDMA needs OpenFabrics libraries
3459 if test "$rdma" != "no" ; then
3460 cat > $TMPC <<EOF
3461 #include <rdma/rdma_cma.h>
3462 int main(void) { return 0; }
3464 rdma_libs="-lrdmacm -libverbs -libumad"
3465 if compile_prog "" "$rdma_libs" ; then
3466 rdma="yes"
3467 else
3468 if test "$rdma" = "yes" ; then
3469 error_exit \
3470 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3471 " Your options:" \
3472 " (1) Fast: Install infiniband packages (devel) from your distro." \
3473 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3474 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3476 rdma="no"
3480 ##########################################
3481 # PVRDMA detection
3483 cat > $TMPC <<EOF &&
3484 #include <sys/mman.h>
3487 main(void)
3489 char buf = 0;
3490 void *addr = &buf;
3491 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3493 return 0;
3497 if test "$rdma" = "yes" ; then
3498 case "$pvrdma" in
3500 if compile_prog "" ""; then
3501 pvrdma="yes"
3502 else
3503 pvrdma="no"
3506 "yes")
3507 if ! compile_prog "" ""; then
3508 error_exit "PVRDMA is not supported since mremap is not implemented"
3510 pvrdma="yes"
3512 "no")
3513 pvrdma="no"
3515 esac
3516 else
3517 if test "$pvrdma" = "yes" ; then
3518 error_exit "PVRDMA requires rdma suppport"
3520 pvrdma="no"
3523 # Let's see if enhanced reg_mr is supported
3524 if test "$pvrdma" = "yes" ; then
3526 cat > $TMPC <<EOF &&
3527 #include <infiniband/verbs.h>
3530 main(void)
3532 struct ibv_mr *mr;
3533 struct ibv_pd *pd = NULL;
3534 size_t length = 10;
3535 uint64_t iova = 0;
3536 int access = 0;
3537 void *addr = NULL;
3539 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3541 ibv_dereg_mr(mr);
3543 return 0;
3546 if ! compile_prog "" "-libverbs"; then
3547 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3551 ##########################################
3552 # VNC SASL detection
3553 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3554 cat > $TMPC <<EOF
3555 #include <sasl/sasl.h>
3556 #include <stdio.h>
3557 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3559 # Assuming Cyrus-SASL installed in /usr prefix
3560 # QEMU defines struct iovec in "qemu/osdep.h",
3561 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3562 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3563 vnc_sasl_libs="-lsasl2"
3564 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3565 vnc_sasl=yes
3566 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3567 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3568 else
3569 if test "$vnc_sasl" = "yes" ; then
3570 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3572 vnc_sasl=no
3576 ##########################################
3577 # VNC JPEG detection
3578 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3579 cat > $TMPC <<EOF
3580 #include <stdio.h>
3581 #include <jpeglib.h>
3582 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3584 vnc_jpeg_cflags=""
3585 vnc_jpeg_libs="-ljpeg"
3586 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3587 vnc_jpeg=yes
3588 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3589 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3590 else
3591 if test "$vnc_jpeg" = "yes" ; then
3592 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3594 vnc_jpeg=no
3598 ##########################################
3599 # VNC PNG detection
3600 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3601 cat > $TMPC <<EOF
3602 //#include <stdio.h>
3603 #include <png.h>
3604 #include <stddef.h>
3605 int main(void) {
3606 png_structp png_ptr;
3607 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3608 return png_ptr != 0;
3611 if $pkg_config libpng --exists; then
3612 vnc_png_cflags=$($pkg_config libpng --cflags)
3613 vnc_png_libs=$($pkg_config libpng --libs)
3614 else
3615 vnc_png_cflags=""
3616 vnc_png_libs="-lpng"
3618 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3619 vnc_png=yes
3620 libs_softmmu="$vnc_png_libs $libs_softmmu"
3621 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3622 else
3623 if test "$vnc_png" = "yes" ; then
3624 feature_not_found "vnc-png" "Install libpng devel"
3626 vnc_png=no
3630 ##########################################
3631 # xkbcommon probe
3632 if test "$xkbcommon" != "no" ; then
3633 if $pkg_config xkbcommon --exists; then
3634 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3635 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3636 xkbcommon=yes
3637 else
3638 if test "$xkbcommon" = "yes" ; then
3639 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3641 xkbcommon=no
3646 ##########################################
3647 # xfsctl() probe, used for file-posix.c
3648 if test "$xfs" != "no" ; then
3649 cat > $TMPC << EOF
3650 #include <stddef.h> /* NULL */
3651 #include <xfs/xfs.h>
3652 int main(void)
3654 xfsctl(NULL, 0, 0, NULL);
3655 return 0;
3658 if compile_prog "" "" ; then
3659 xfs="yes"
3660 else
3661 if test "$xfs" = "yes" ; then
3662 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3664 xfs=no
3668 ##########################################
3669 # vde libraries probe
3670 if test "$vde" != "no" ; then
3671 vde_libs="-lvdeplug"
3672 cat > $TMPC << EOF
3673 #include <libvdeplug.h>
3674 int main(void)
3676 struct vde_open_args a = {0, 0, 0};
3677 char s[] = "";
3678 vde_open(s, s, &a);
3679 return 0;
3682 if compile_prog "" "$vde_libs" ; then
3683 vde=yes
3684 else
3685 if test "$vde" = "yes" ; then
3686 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3688 vde=no
3692 ##########################################
3693 # netmap support probe
3694 # Apart from looking for netmap headers, we make sure that the host API version
3695 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3696 # a minor/major version number. Minor new features will be marked with values up
3697 # to 15, and if something happens that requires a change to the backend we will
3698 # move above 15, submit the backend fixes and modify this two bounds.
3699 if test "$netmap" != "no" ; then
3700 cat > $TMPC << EOF
3701 #include <inttypes.h>
3702 #include <net/if.h>
3703 #include <net/netmap.h>
3704 #include <net/netmap_user.h>
3705 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3706 #error
3707 #endif
3708 int main(void) { return 0; }
3710 if compile_prog "" "" ; then
3711 netmap=yes
3712 else
3713 if test "$netmap" = "yes" ; then
3714 feature_not_found "netmap"
3716 netmap=no
3720 ##########################################
3721 # libcap-ng library probe
3722 if test "$cap_ng" != "no" ; then
3723 cap_libs="-lcap-ng"
3724 cat > $TMPC << EOF
3725 #include <cap-ng.h>
3726 int main(void)
3728 capng_capability_to_name(CAPNG_EFFECTIVE);
3729 return 0;
3732 if compile_prog "" "$cap_libs" ; then
3733 cap_ng=yes
3734 else
3735 if test "$cap_ng" = "yes" ; then
3736 feature_not_found "cap_ng" "Install libcap-ng devel"
3738 cap_ng=no
3742 ##########################################
3743 # Sound support libraries probe
3745 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3746 for drv in $audio_drv_list; do
3747 case $drv in
3748 alsa | try-alsa)
3749 if $pkg_config alsa --exists; then
3750 alsa_libs=$($pkg_config alsa --libs)
3751 alsa_cflags=$($pkg_config alsa --cflags)
3752 alsa=yes
3753 if test "$drv" = "try-alsa"; then
3754 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3756 else
3757 if test "$drv" = "try-alsa"; then
3758 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3759 else
3760 error_exit "$drv check failed" \
3761 "Make sure to have the $drv libs and headers installed."
3766 pa | try-pa)
3767 if $pkg_config libpulse --exists; then
3768 libpulse=yes
3769 pulse_libs=$($pkg_config libpulse --libs)
3770 pulse_cflags=$($pkg_config libpulse --cflags)
3771 if test "$drv" = "try-pa"; then
3772 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3774 else
3775 if test "$drv" = "try-pa"; then
3776 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3777 else
3778 error_exit "$drv check failed" \
3779 "Make sure to have the $drv libs and headers installed."
3784 sdl)
3785 if test "$sdl" = "no"; then
3786 error_exit "sdl not found or disabled, can not use sdl audio driver"
3790 try-sdl)
3791 if test "$sdl" = "no"; then
3792 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3793 else
3794 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3798 coreaudio)
3799 coreaudio_libs="-framework CoreAudio"
3802 dsound)
3803 dsound_libs="-lole32 -ldxguid"
3804 audio_win_int="yes"
3807 oss)
3808 oss_libs="$oss_lib"
3811 jack | try-jack)
3812 if $pkg_config jack --exists; then
3813 libjack=yes
3814 jack_libs=$($pkg_config jack --libs)
3815 if test "$drv" = "try-jack"; then
3816 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3818 else
3819 if test "$drv" = "try-jack"; then
3820 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3821 else
3822 error_exit "$drv check failed" \
3823 "Make sure to have the $drv libs and headers installed."
3829 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3830 error_exit "Unknown driver '$drv' selected" \
3831 "Possible drivers are: $audio_possible_drivers"
3834 esac
3835 done
3837 ##########################################
3838 # BrlAPI probe
3840 if test "$brlapi" != "no" ; then
3841 brlapi_libs="-lbrlapi"
3842 cat > $TMPC << EOF
3843 #include <brlapi.h>
3844 #include <stddef.h>
3845 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3847 if compile_prog "" "$brlapi_libs" ; then
3848 brlapi=yes
3849 else
3850 if test "$brlapi" = "yes" ; then
3851 feature_not_found "brlapi" "Install brlapi devel"
3853 brlapi=no
3857 ##########################################
3858 # iconv probe
3859 if test "$iconv" != "no" ; then
3860 cat > $TMPC << EOF
3861 #include <iconv.h>
3862 int main(void) {
3863 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3864 return conv != (iconv_t) -1;
3867 iconv_prefix_list="/usr/local:/usr"
3868 iconv_lib_list=":-liconv"
3869 IFS=:
3870 for iconv_prefix in $iconv_prefix_list; do
3871 IFS=:
3872 iconv_cflags="-I$iconv_prefix/include"
3873 iconv_ldflags="-L$iconv_prefix/lib"
3874 for iconv_link in $iconv_lib_list; do
3875 unset IFS
3876 iconv_lib="$iconv_ldflags $iconv_link"
3877 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3878 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3879 iconv_found=yes
3880 break
3882 done
3883 if test "$iconv_found" = yes ; then
3884 break
3886 done
3887 if test "$iconv_found" = "yes" ; then
3888 iconv=yes
3889 else
3890 if test "$iconv" = "yes" ; then
3891 feature_not_found "iconv" "Install iconv devel"
3893 iconv=no
3897 ##########################################
3898 # curses probe
3899 if test "$iconv" = "no" ; then
3900 # curses will need iconv
3901 curses=no
3903 if test "$curses" != "no" ; then
3904 if test "$mingw32" = "yes" ; then
3905 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3906 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3907 else
3908 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3909 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3911 curses_found=no
3912 cat > $TMPC << EOF
3913 #include <locale.h>
3914 #include <curses.h>
3915 #include <wchar.h>
3916 #include <langinfo.h>
3917 int main(void) {
3918 const char *codeset;
3919 wchar_t wch = L'w';
3920 setlocale(LC_ALL, "");
3921 resize_term(0, 0);
3922 addwstr(L"wide chars\n");
3923 addnwstr(&wch, 1);
3924 add_wch(WACS_DEGREE);
3925 codeset = nl_langinfo(CODESET);
3926 return codeset != 0;
3929 IFS=:
3930 for curses_inc in $curses_inc_list; do
3931 # Make sure we get the wide character prototypes
3932 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3933 IFS=:
3934 for curses_lib in $curses_lib_list; do
3935 unset IFS
3936 if compile_prog "$curses_inc" "$curses_lib" ; then
3937 curses_found=yes
3938 break
3940 done
3941 if test "$curses_found" = yes ; then
3942 break
3944 done
3945 unset IFS
3946 if test "$curses_found" = "yes" ; then
3947 curses=yes
3948 else
3949 if test "$curses" = "yes" ; then
3950 feature_not_found "curses" "Install ncurses devel"
3952 curses=no
3956 ##########################################
3957 # curl probe
3958 if test "$curl" != "no" ; then
3959 if $pkg_config libcurl --exists; then
3960 curlconfig="$pkg_config libcurl"
3961 else
3962 curlconfig=curl-config
3964 cat > $TMPC << EOF
3965 #include <curl/curl.h>
3966 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3968 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3969 curl_libs=$($curlconfig --libs 2>/dev/null)
3970 if compile_prog "$curl_cflags" "$curl_libs" ; then
3971 curl=yes
3972 else
3973 if test "$curl" = "yes" ; then
3974 feature_not_found "curl" "Install libcurl devel"
3976 curl=no
3978 fi # test "$curl"
3980 ##########################################
3981 # glib support probe
3983 glib_req_ver=2.48
3984 glib_modules=gthread-2.0
3985 if test "$modules" = yes; then
3986 glib_modules="$glib_modules gmodule-export-2.0"
3988 if test "$plugins" = yes; then
3989 glib_modules="$glib_modules gmodule-2.0"
3992 # This workaround is required due to a bug in pkg-config file for glib as it
3993 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3995 if test "$static" = yes && test "$mingw32" = yes; then
3996 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3999 for i in $glib_modules; do
4000 if $pkg_config --atleast-version=$glib_req_ver $i; then
4001 glib_cflags=$($pkg_config --cflags $i)
4002 glib_libs=$($pkg_config --libs $i)
4003 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
4004 LIBS="$glib_libs $LIBS"
4005 else
4006 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
4008 done
4010 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
4011 gio=yes
4012 gio_cflags=$($pkg_config --cflags gio-2.0)
4013 gio_libs=$($pkg_config --libs gio-2.0)
4014 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
4015 if [ ! -x "$gdbus_codegen" ]; then
4016 gdbus_codegen=
4018 else
4019 gio=no
4022 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
4023 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
4024 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
4027 # Sanity check that the current size_t matches the
4028 # size that glib thinks it should be. This catches
4029 # problems on multi-arch where people try to build
4030 # 32-bit QEMU while pointing at 64-bit glib headers
4031 cat > $TMPC <<EOF
4032 #include <glib.h>
4033 #include <unistd.h>
4035 #define QEMU_BUILD_BUG_ON(x) \
4036 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
4038 int main(void) {
4039 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
4040 return 0;
4044 if ! compile_prog "$CFLAGS" "$LIBS" ; then
4045 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
4046 "You probably need to set PKG_CONFIG_LIBDIR"\
4047 "to point to the right pkg-config files for your"\
4048 "build target"
4051 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
4052 cat > $TMPC << EOF
4053 #include <glib.h>
4054 int main(void) { return 0; }
4056 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4057 if cc_has_warning_flag "-Wno-unknown-attributes"; then
4058 glib_cflags="-Wno-unknown-attributes $glib_cflags"
4059 QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
4063 # Silence clang warnings triggered by glib < 2.57.2
4064 cat > $TMPC << EOF
4065 #include <glib.h>
4066 typedef struct Foo {
4067 int i;
4068 } Foo;
4069 static void foo_free(Foo *f)
4071 g_free(f);
4073 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
4074 int main(void) { return 0; }
4076 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4077 if cc_has_warning_flag "-Wno-unused-function"; then
4078 glib_cflags="$glib_cflags -Wno-unused-function"
4079 CFLAGS="$CFLAGS -Wno-unused-function"
4083 #########################################
4084 # zlib check
4086 if test "$zlib" != "no" ; then
4087 if $pkg_config --exists zlib; then
4088 zlib_cflags=$($pkg_config --cflags zlib)
4089 zlib_libs=$($pkg_config --libs zlib)
4090 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
4091 LIBS="$zlib_libs $LIBS"
4092 else
4093 cat > $TMPC << EOF
4094 #include <zlib.h>
4095 int main(void) { zlibVersion(); return 0; }
4097 if compile_prog "" "-lz" ; then
4098 zlib_libs=-lz
4099 LIBS="$LIBS $zlib_libs"
4100 else
4101 error_exit "zlib check failed" \
4102 "Make sure to have the zlib libs and headers installed."
4107 ##########################################
4108 # SHA command probe for modules
4109 if test "$modules" = yes; then
4110 shacmd_probe="sha1sum sha1 shasum"
4111 for c in $shacmd_probe; do
4112 if has $c; then
4113 shacmd="$c"
4114 break
4116 done
4117 if test "$shacmd" = ""; then
4118 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4122 ##########################################
4123 # pixman support probe
4125 if test "$softmmu" = "no"; then
4126 pixman_cflags=
4127 pixman_libs=
4128 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4129 pixman_cflags=$($pkg_config --cflags pixman-1)
4130 pixman_libs=$($pkg_config --libs pixman-1)
4131 else
4132 error_exit "pixman >= 0.21.8 not present." \
4133 "Please install the pixman devel package."
4136 ##########################################
4137 # libmpathpersist probe
4139 if test "$mpath" != "no" ; then
4140 # probe for the new API
4141 cat > $TMPC <<EOF
4142 #include <libudev.h>
4143 #include <mpath_persist.h>
4144 unsigned mpath_mx_alloc_len = 1024;
4145 int logsink;
4146 static struct config *multipath_conf;
4147 extern struct udev *udev;
4148 extern struct config *get_multipath_config(void);
4149 extern void put_multipath_config(struct config *conf);
4150 struct udev *udev;
4151 struct config *get_multipath_config(void) { return multipath_conf; }
4152 void put_multipath_config(struct config *conf) { }
4154 int main(void) {
4155 udev = udev_new();
4156 multipath_conf = mpath_lib_init();
4157 return 0;
4160 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4161 mpathpersist=yes
4162 mpathpersist_new_api=yes
4163 else
4164 # probe for the old API
4165 cat > $TMPC <<EOF
4166 #include <libudev.h>
4167 #include <mpath_persist.h>
4168 unsigned mpath_mx_alloc_len = 1024;
4169 int logsink;
4170 int main(void) {
4171 struct udev *udev = udev_new();
4172 mpath_lib_init(udev);
4173 return 0;
4176 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4177 mpathpersist=yes
4178 mpathpersist_new_api=no
4179 else
4180 mpathpersist=no
4183 else
4184 mpathpersist=no
4187 ##########################################
4188 # pthread probe
4189 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4191 pthread=no
4192 cat > $TMPC << EOF
4193 #include <pthread.h>
4194 static void *f(void *p) { return NULL; }
4195 int main(void) {
4196 pthread_t thread;
4197 pthread_create(&thread, 0, f, 0);
4198 return 0;
4201 if compile_prog "" "" ; then
4202 pthread=yes
4203 else
4204 for pthread_lib in $PTHREADLIBS_LIST; do
4205 if compile_prog "" "$pthread_lib" ; then
4206 pthread=yes
4207 found=no
4208 for lib_entry in $LIBS; do
4209 if test "$lib_entry" = "$pthread_lib"; then
4210 found=yes
4211 break
4213 done
4214 if test "$found" = "no"; then
4215 LIBS="$pthread_lib $LIBS"
4217 PTHREAD_LIB="$pthread_lib"
4218 break
4220 done
4223 if test "$mingw32" != yes && test "$pthread" = no; then
4224 error_exit "pthread check failed" \
4225 "Make sure to have the pthread libs and headers installed."
4228 # check for pthread_setname_np with thread id
4229 pthread_setname_np_w_tid=no
4230 cat > $TMPC << EOF
4231 #include <pthread.h>
4233 static void *f(void *p) { return NULL; }
4234 int main(void)
4236 pthread_t thread;
4237 pthread_create(&thread, 0, f, 0);
4238 pthread_setname_np(thread, "QEMU");
4239 return 0;
4242 if compile_prog "" "$pthread_lib" ; then
4243 pthread_setname_np_w_tid=yes
4246 # check for pthread_setname_np without thread id
4247 pthread_setname_np_wo_tid=no
4248 cat > $TMPC << EOF
4249 #include <pthread.h>
4251 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4252 int main(void)
4254 pthread_t thread;
4255 pthread_create(&thread, 0, f, 0);
4256 return 0;
4259 if compile_prog "" "$pthread_lib" ; then
4260 pthread_setname_np_wo_tid=yes
4263 ##########################################
4264 # rbd probe
4265 if test "$rbd" != "no" ; then
4266 cat > $TMPC <<EOF
4267 #include <stdio.h>
4268 #include <rbd/librbd.h>
4269 int main(void) {
4270 rados_t cluster;
4271 rados_create(&cluster, NULL);
4272 return 0;
4275 rbd_libs="-lrbd -lrados"
4276 if compile_prog "" "$rbd_libs" ; then
4277 rbd=yes
4278 else
4279 if test "$rbd" = "yes" ; then
4280 feature_not_found "rados block device" "Install librbd/ceph devel"
4282 rbd=no
4286 ##########################################
4287 # libssh probe
4288 if test "$libssh" != "no" ; then
4289 if $pkg_config --exists libssh; then
4290 libssh_cflags=$($pkg_config libssh --cflags)
4291 libssh_libs=$($pkg_config libssh --libs)
4292 libssh=yes
4293 else
4294 if test "$libssh" = "yes" ; then
4295 error_exit "libssh required for --enable-libssh"
4297 libssh=no
4301 ##########################################
4302 # Check for libssh 0.8
4303 # This is done like this instead of using the LIBSSH_VERSION_* and
4304 # SSH_VERSION_* macros because some distributions in the past shipped
4305 # snapshots of the future 0.8 from Git, and those snapshots did not
4306 # have updated version numbers (still referring to 0.7.0).
4308 if test "$libssh" = "yes"; then
4309 cat > $TMPC <<EOF
4310 #include <libssh/libssh.h>
4311 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4313 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4314 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4318 ##########################################
4319 # linux-aio probe
4321 if test "$linux_aio" != "no" ; then
4322 cat > $TMPC <<EOF
4323 #include <libaio.h>
4324 #include <sys/eventfd.h>
4325 #include <stddef.h>
4326 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4328 if compile_prog "" "-laio" ; then
4329 linux_aio=yes
4330 else
4331 if test "$linux_aio" = "yes" ; then
4332 feature_not_found "linux AIO" "Install libaio devel"
4334 linux_aio=no
4337 ##########################################
4338 # linux-io-uring probe
4340 if test "$linux_io_uring" != "no" ; then
4341 if $pkg_config liburing; then
4342 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4343 linux_io_uring_libs=$($pkg_config --libs liburing)
4344 linux_io_uring=yes
4346 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4347 # seen by programs linking the archive. It's not ideal, but just add the
4348 # library dependency globally.
4349 LIBS="$linux_io_uring_libs $LIBS"
4350 else
4351 if test "$linux_io_uring" = "yes" ; then
4352 feature_not_found "linux io_uring" "Install liburing devel"
4354 linux_io_uring=no
4358 ##########################################
4359 # TPM emulation is only on POSIX
4361 if test "$tpm" = ""; then
4362 if test "$mingw32" = "yes"; then
4363 tpm=no
4364 else
4365 tpm=yes
4367 elif test "$tpm" = "yes"; then
4368 if test "$mingw32" = "yes" ; then
4369 error_exit "TPM emulation only available on POSIX systems"
4373 ##########################################
4374 # attr probe
4376 libattr_libs=
4377 if test "$attr" != "no" ; then
4378 cat > $TMPC <<EOF
4379 #include <stdio.h>
4380 #include <sys/types.h>
4381 #ifdef CONFIG_LIBATTR
4382 #include <attr/xattr.h>
4383 #else
4384 #include <sys/xattr.h>
4385 #endif
4386 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4388 if compile_prog "" "" ; then
4389 attr=yes
4390 # Older distros have <attr/xattr.h>, and need -lattr:
4391 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4392 attr=yes
4393 libattr_libs="-lattr"
4394 LIBS="$libattr_libs $LIBS"
4395 libattr=yes
4396 else
4397 if test "$attr" = "yes" ; then
4398 feature_not_found "ATTR" "Install libc6 or libattr devel"
4400 attr=no
4404 ##########################################
4405 # iovec probe
4406 cat > $TMPC <<EOF
4407 #include <sys/types.h>
4408 #include <sys/uio.h>
4409 #include <unistd.h>
4410 int main(void) { return sizeof(struct iovec); }
4412 iovec=no
4413 if compile_prog "" "" ; then
4414 iovec=yes
4417 ##########################################
4418 # preadv probe
4419 cat > $TMPC <<EOF
4420 #include <sys/types.h>
4421 #include <sys/uio.h>
4422 #include <unistd.h>
4423 int main(void) { return preadv(0, 0, 0, 0); }
4425 preadv=no
4426 if compile_prog "" "" ; then
4427 preadv=yes
4430 ##########################################
4431 # fdt probe
4432 # fdt support is mandatory for at least some target architectures,
4433 # so insist on it if we're building those system emulators.
4434 fdt_required=no
4435 for target in $target_list; do
4436 case $target in
4437 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4438 fdt_required=yes
4440 esac
4441 done
4443 if test "$fdt_required" = "yes"; then
4444 if test "$fdt" = "no"; then
4445 error_exit "fdt disabled but some requested targets require it." \
4446 "You can turn off fdt only if you also disable all the system emulation" \
4447 "targets which need it (by specifying a cut down --target-list)."
4449 fdt=yes
4450 elif test "$fdt" != "yes" ; then
4451 fdt=no
4454 # fdt is only required when building softmmu targets
4455 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4456 fdt="no"
4459 if test "$fdt" != "no" ; then
4460 fdt_libs="-lfdt"
4461 # explicitly check for libfdt_env.h as it is missing in some stable installs
4462 # and test for required functions to make sure we are on a version >= 1.4.2
4463 cat > $TMPC << EOF
4464 #include <libfdt.h>
4465 #include <libfdt_env.h>
4466 int main(void) { fdt_check_full(NULL, 0); return 0; }
4468 if compile_prog "" "$fdt_libs" ; then
4469 # system DTC is good - use it
4470 fdt=system
4471 else
4472 # have GIT checkout, so activate dtc submodule
4473 if test -e "${source_path}/.git" ; then
4474 git_submodules="${git_submodules} dtc"
4476 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4477 fdt=git
4478 mkdir -p dtc
4479 if [ "$pwd_is_source_path" != "y" ] ; then
4480 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4482 fdt_cflags="-I${source_path}/dtc/libfdt"
4483 fdt_ldflags="-L$PWD/dtc/libfdt"
4484 fdt_libs="$fdt_libs"
4485 elif test "$fdt" = "yes" ; then
4486 # Not a git build & no libfdt found, prompt for system install
4487 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4488 "Please install the DTC (libfdt) devel package"
4489 else
4490 # don't have and don't want
4491 fdt_libs=
4492 fdt=no
4497 ##########################################
4498 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4500 gbm="no"
4501 if $pkg_config gbm; then
4502 gbm_cflags="$($pkg_config --cflags gbm)"
4503 gbm_libs="$($pkg_config --libs gbm)"
4504 gbm="yes"
4507 if test "$opengl" != "no" ; then
4508 opengl_pkgs="epoxy gbm"
4509 if $pkg_config $opengl_pkgs; then
4510 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4511 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4512 opengl=yes
4513 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4514 gtk_gl="yes"
4516 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4517 else
4518 if test "$opengl" = "yes" ; then
4519 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4521 opengl_cflags=""
4522 opengl_libs=""
4523 opengl=no
4527 if test "$opengl" = "yes"; then
4528 cat > $TMPC << EOF
4529 #include <epoxy/egl.h>
4530 #ifndef EGL_MESA_image_dma_buf_export
4531 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4532 #endif
4533 int main(void) { return 0; }
4535 if compile_prog "" "" ; then
4536 opengl_dmabuf=yes
4540 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4541 for target in $target_list; do
4542 case $target in
4543 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4544 need_x11=yes
4546 esac
4547 done
4550 ##########################################
4551 # libxml2 probe
4552 if test "$libxml2" != "no" ; then
4553 if $pkg_config --exists libxml-2.0; then
4554 libxml2="yes"
4555 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4556 libxml2_libs=$($pkg_config --libs libxml-2.0)
4557 else
4558 if test "$libxml2" = "yes"; then
4559 feature_not_found "libxml2" "Install libxml2 devel"
4561 libxml2="no"
4565 ##########################################
4566 # glusterfs probe
4567 if test "$glusterfs" != "no" ; then
4568 if $pkg_config --atleast-version=3 glusterfs-api; then
4569 glusterfs="yes"
4570 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4571 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4572 if $pkg_config --atleast-version=4 glusterfs-api; then
4573 glusterfs_xlator_opt="yes"
4575 if $pkg_config --atleast-version=5 glusterfs-api; then
4576 glusterfs_discard="yes"
4578 if $pkg_config --atleast-version=6 glusterfs-api; then
4579 glusterfs_fallocate="yes"
4580 glusterfs_zerofill="yes"
4582 cat > $TMPC << EOF
4583 #include <glusterfs/api/glfs.h>
4586 main(void)
4588 /* new glfs_ftruncate() passes two additional args */
4589 return glfs_ftruncate(NULL, 0, NULL, NULL);
4592 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4593 glusterfs_ftruncate_has_stat="yes"
4595 cat > $TMPC << EOF
4596 #include <glusterfs/api/glfs.h>
4598 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4599 static void
4600 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4604 main(void)
4606 glfs_io_cbk iocb = &glusterfs_iocb;
4607 iocb(NULL, 0 , NULL, NULL, NULL);
4608 return 0;
4611 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4612 glusterfs_iocb_has_stat="yes"
4614 else
4615 if test "$glusterfs" = "yes" ; then
4616 feature_not_found "GlusterFS backend support" \
4617 "Install glusterfs-api devel >= 3"
4619 glusterfs="no"
4623 # Check for inotify functions when we are building linux-user
4624 # emulator. This is done because older glibc versions don't
4625 # have syscall stubs for these implemented. In that case we
4626 # don't provide them even if kernel supports them.
4628 inotify=no
4629 cat > $TMPC << EOF
4630 #include <sys/inotify.h>
4633 main(void)
4635 /* try to start inotify */
4636 return inotify_init();
4639 if compile_prog "" "" ; then
4640 inotify=yes
4643 inotify1=no
4644 cat > $TMPC << EOF
4645 #include <sys/inotify.h>
4648 main(void)
4650 /* try to start inotify */
4651 return inotify_init1(0);
4654 if compile_prog "" "" ; then
4655 inotify1=yes
4658 # check if pipe2 is there
4659 pipe2=no
4660 cat > $TMPC << EOF
4661 #include <unistd.h>
4662 #include <fcntl.h>
4664 int main(void)
4666 int pipefd[2];
4667 return pipe2(pipefd, O_CLOEXEC);
4670 if compile_prog "" "" ; then
4671 pipe2=yes
4674 # check if accept4 is there
4675 accept4=no
4676 cat > $TMPC << EOF
4677 #include <sys/socket.h>
4678 #include <stddef.h>
4680 int main(void)
4682 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4683 return 0;
4686 if compile_prog "" "" ; then
4687 accept4=yes
4690 # check if tee/splice is there. vmsplice was added same time.
4691 splice=no
4692 cat > $TMPC << EOF
4693 #include <unistd.h>
4694 #include <fcntl.h>
4695 #include <limits.h>
4697 int main(void)
4699 int len, fd = 0;
4700 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4701 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4702 return 0;
4705 if compile_prog "" "" ; then
4706 splice=yes
4709 ##########################################
4710 # libnuma probe
4712 if test "$numa" != "no" ; then
4713 cat > $TMPC << EOF
4714 #include <numa.h>
4715 int main(void) { return numa_available(); }
4718 if compile_prog "" "-lnuma" ; then
4719 numa=yes
4720 numa_libs="-lnuma"
4721 else
4722 if test "$numa" = "yes" ; then
4723 feature_not_found "numa" "install numactl devel"
4725 numa=no
4729 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4730 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4731 exit 1
4734 # Even if malloc_trim() is available, these non-libc memory allocators
4735 # do not support it.
4736 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4737 if test "$malloc_trim" = "yes" ; then
4738 echo "Disabling malloc_trim with non-libc memory allocator"
4740 malloc_trim="no"
4743 #######################################
4744 # malloc_trim
4746 if test "$malloc_trim" != "no" ; then
4747 cat > $TMPC << EOF
4748 #include <malloc.h>
4749 int main(void) { malloc_trim(0); return 0; }
4751 if compile_prog "" "" ; then
4752 malloc_trim="yes"
4753 else
4754 malloc_trim="no"
4758 ##########################################
4759 # tcmalloc probe
4761 if test "$tcmalloc" = "yes" ; then
4762 cat > $TMPC << EOF
4763 #include <stdlib.h>
4764 int main(void) {
4765 void *tmp = malloc(1);
4766 if (tmp != NULL) {
4767 return 0;
4769 return 1;
4773 if compile_prog "" "-ltcmalloc" ; then
4774 LIBS="-ltcmalloc $LIBS"
4775 else
4776 feature_not_found "tcmalloc" "install gperftools devel"
4780 ##########################################
4781 # jemalloc probe
4783 if test "$jemalloc" = "yes" ; then
4784 cat > $TMPC << EOF
4785 #include <stdlib.h>
4786 int main(void) {
4787 void *tmp = malloc(1);
4788 if (tmp != NULL) {
4789 return 0;
4791 return 1;
4795 if compile_prog "" "-ljemalloc" ; then
4796 LIBS="-ljemalloc $LIBS"
4797 else
4798 feature_not_found "jemalloc" "install jemalloc devel"
4802 ##########################################
4803 # signalfd probe
4804 signalfd="no"
4805 cat > $TMPC << EOF
4806 #include <unistd.h>
4807 #include <sys/syscall.h>
4808 #include <signal.h>
4809 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4812 if compile_prog "" "" ; then
4813 signalfd=yes
4816 # check if optreset global is declared by <getopt.h>
4817 optreset="no"
4818 cat > $TMPC << EOF
4819 #include <getopt.h>
4820 int main(void) { return optreset; }
4823 if compile_prog "" "" ; then
4824 optreset=yes
4827 # check if eventfd is supported
4828 eventfd=no
4829 cat > $TMPC << EOF
4830 #include <sys/eventfd.h>
4832 int main(void)
4834 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4837 if compile_prog "" "" ; then
4838 eventfd=yes
4841 # check if memfd is supported
4842 memfd=no
4843 cat > $TMPC << EOF
4844 #include <sys/mman.h>
4846 int main(void)
4848 return memfd_create("foo", MFD_ALLOW_SEALING);
4851 if compile_prog "" "" ; then
4852 memfd=yes
4855 # check for usbfs
4856 have_usbfs=no
4857 if test "$linux_user" = "yes"; then
4858 cat > $TMPC << EOF
4859 #include <linux/usbdevice_fs.h>
4861 #ifndef USBDEVFS_GET_CAPABILITIES
4862 #error "USBDEVFS_GET_CAPABILITIES undefined"
4863 #endif
4865 #ifndef USBDEVFS_DISCONNECT_CLAIM
4866 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4867 #endif
4869 int main(void)
4871 return 0;
4874 if compile_prog "" ""; then
4875 have_usbfs=yes
4879 # check for fallocate
4880 fallocate=no
4881 cat > $TMPC << EOF
4882 #include <fcntl.h>
4884 int main(void)
4886 fallocate(0, 0, 0, 0);
4887 return 0;
4890 if compile_prog "" "" ; then
4891 fallocate=yes
4894 # check for fallocate hole punching
4895 fallocate_punch_hole=no
4896 cat > $TMPC << EOF
4897 #include <fcntl.h>
4898 #include <linux/falloc.h>
4900 int main(void)
4902 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4903 return 0;
4906 if compile_prog "" "" ; then
4907 fallocate_punch_hole=yes
4910 # check that fallocate supports range zeroing inside the file
4911 fallocate_zero_range=no
4912 cat > $TMPC << EOF
4913 #include <fcntl.h>
4914 #include <linux/falloc.h>
4916 int main(void)
4918 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4919 return 0;
4922 if compile_prog "" "" ; then
4923 fallocate_zero_range=yes
4926 # check for posix_fallocate
4927 posix_fallocate=no
4928 cat > $TMPC << EOF
4929 #include <fcntl.h>
4931 int main(void)
4933 posix_fallocate(0, 0, 0);
4934 return 0;
4937 if compile_prog "" "" ; then
4938 posix_fallocate=yes
4941 # check for sync_file_range
4942 sync_file_range=no
4943 cat > $TMPC << EOF
4944 #include <fcntl.h>
4946 int main(void)
4948 sync_file_range(0, 0, 0, 0);
4949 return 0;
4952 if compile_prog "" "" ; then
4953 sync_file_range=yes
4956 # check for linux/fiemap.h and FS_IOC_FIEMAP
4957 fiemap=no
4958 cat > $TMPC << EOF
4959 #include <sys/ioctl.h>
4960 #include <linux/fs.h>
4961 #include <linux/fiemap.h>
4963 int main(void)
4965 ioctl(0, FS_IOC_FIEMAP, 0);
4966 return 0;
4969 if compile_prog "" "" ; then
4970 fiemap=yes
4973 # check for dup3
4974 dup3=no
4975 cat > $TMPC << EOF
4976 #include <unistd.h>
4978 int main(void)
4980 dup3(0, 0, 0);
4981 return 0;
4984 if compile_prog "" "" ; then
4985 dup3=yes
4988 # check for ppoll support
4989 ppoll=no
4990 cat > $TMPC << EOF
4991 #include <poll.h>
4993 int main(void)
4995 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4996 ppoll(&pfd, 1, 0, 0);
4997 return 0;
5000 if compile_prog "" "" ; then
5001 ppoll=yes
5004 # check for prctl(PR_SET_TIMERSLACK , ... ) support
5005 prctl_pr_set_timerslack=no
5006 cat > $TMPC << EOF
5007 #include <sys/prctl.h>
5009 int main(void)
5011 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
5012 return 0;
5015 if compile_prog "" "" ; then
5016 prctl_pr_set_timerslack=yes
5019 # check for epoll support
5020 epoll=no
5021 cat > $TMPC << EOF
5022 #include <sys/epoll.h>
5024 int main(void)
5026 epoll_create(0);
5027 return 0;
5030 if compile_prog "" "" ; then
5031 epoll=yes
5034 # epoll_create1 is a later addition
5035 # so we must check separately for its presence
5036 epoll_create1=no
5037 cat > $TMPC << EOF
5038 #include <sys/epoll.h>
5040 int main(void)
5042 /* Note that we use epoll_create1 as a value, not as
5043 * a function being called. This is necessary so that on
5044 * old SPARC glibc versions where the function was present in
5045 * the library but not declared in the header file we will
5046 * fail the configure check. (Otherwise we will get a compiler
5047 * warning but not an error, and will proceed to fail the
5048 * qemu compile where we compile with -Werror.)
5050 return (int)(uintptr_t)&epoll_create1;
5053 if compile_prog "" "" ; then
5054 epoll_create1=yes
5057 # check for sendfile support
5058 sendfile=no
5059 cat > $TMPC << EOF
5060 #include <sys/sendfile.h>
5062 int main(void)
5064 return sendfile(0, 0, 0, 0);
5067 if compile_prog "" "" ; then
5068 sendfile=yes
5071 # check for timerfd support (glibc 2.8 and newer)
5072 timerfd=no
5073 cat > $TMPC << EOF
5074 #include <sys/timerfd.h>
5076 int main(void)
5078 return(timerfd_create(CLOCK_REALTIME, 0));
5081 if compile_prog "" "" ; then
5082 timerfd=yes
5085 # check for setns and unshare support
5086 setns=no
5087 cat > $TMPC << EOF
5088 #include <sched.h>
5090 int main(void)
5092 int ret;
5093 ret = setns(0, 0);
5094 ret = unshare(0);
5095 return ret;
5098 if compile_prog "" "" ; then
5099 setns=yes
5102 # clock_adjtime probe
5103 clock_adjtime=no
5104 cat > $TMPC <<EOF
5105 #include <time.h>
5107 int main(void)
5109 return clock_adjtime(0, 0);
5112 clock_adjtime=no
5113 if compile_prog "" "" ; then
5114 clock_adjtime=yes
5117 # syncfs probe
5118 syncfs=no
5119 cat > $TMPC <<EOF
5120 #include <unistd.h>
5122 int main(void)
5124 return syncfs(0);
5127 syncfs=no
5128 if compile_prog "" "" ; then
5129 syncfs=yes
5132 # check for kcov support (kernel must be 4.4+, compiled with certain options)
5133 kcov=no
5134 if check_include sys/kcov.h ; then
5135 kcov=yes
5138 # If we're making warnings fatal, apply this to Sphinx runs as well
5139 sphinx_werror=""
5140 if test "$werror" = "yes"; then
5141 sphinx_werror="-W"
5144 # Check we have a new enough version of sphinx-build
5145 has_sphinx_build() {
5146 # This is a bit awkward but works: create a trivial document and
5147 # try to run it with our configuration file (which enforces a
5148 # version requirement). This will fail if either
5149 # sphinx-build doesn't exist at all or if it is too old.
5150 mkdir -p "$TMPDIR1/sphinx"
5151 touch "$TMPDIR1/sphinx/index.rst"
5152 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5153 -b html "$TMPDIR1/sphinx" \
5154 "$TMPDIR1/sphinx/out" >> config.log 2>&1
5157 # Check if tools are available to build documentation.
5158 if test "$docs" != "no" ; then
5159 if has_sphinx_build; then
5160 sphinx_ok=yes
5161 else
5162 sphinx_ok=no
5164 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5165 docs=yes
5166 else
5167 if test "$docs" = "yes" ; then
5168 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5169 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5171 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5173 docs=no
5177 # Search for bswap_32 function
5178 byteswap_h=no
5179 cat > $TMPC << EOF
5180 #include <byteswap.h>
5181 int main(void) { return bswap_32(0); }
5183 if compile_prog "" "" ; then
5184 byteswap_h=yes
5187 # Search for bswap32 function
5188 bswap_h=no
5189 cat > $TMPC << EOF
5190 #include <sys/endian.h>
5191 #include <sys/types.h>
5192 #include <machine/bswap.h>
5193 int main(void) { return bswap32(0); }
5195 if compile_prog "" "" ; then
5196 bswap_h=yes
5199 ##########################################
5200 # Do we have libiscsi >= 1.9.0
5201 if test "$libiscsi" != "no" ; then
5202 if $pkg_config --atleast-version=1.9.0 libiscsi; then
5203 libiscsi="yes"
5204 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5205 libiscsi_libs=$($pkg_config --libs libiscsi)
5206 else
5207 if test "$libiscsi" = "yes" ; then
5208 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5210 libiscsi="no"
5214 ##########################################
5215 # Do we need libm
5216 cat > $TMPC << EOF
5217 #include <math.h>
5218 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5220 if compile_prog "" "" ; then
5222 elif compile_prog "" "-lm" ; then
5223 LIBS="-lm $LIBS"
5224 else
5225 error_exit "libm check failed"
5228 ##########################################
5229 # Do we need librt
5230 # uClibc provides 2 versions of clock_gettime(), one with realtime
5231 # support and one without. This means that the clock_gettime() don't
5232 # need -lrt. We still need it for timer_create() so we check for this
5233 # function in addition.
5234 cat > $TMPC <<EOF
5235 #include <signal.h>
5236 #include <time.h>
5237 int main(void) {
5238 timer_create(CLOCK_REALTIME, NULL, NULL);
5239 return clock_gettime(CLOCK_REALTIME, NULL);
5243 if compile_prog "" "" ; then
5245 # we need pthread for static linking. use previous pthread test result
5246 elif compile_prog "" "$pthread_lib -lrt" ; then
5247 LIBS="$LIBS -lrt"
5250 # Check whether we need to link libutil for openpty()
5251 cat > $TMPC << EOF
5252 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5253 int main(void) { return openpty(0, 0, 0, 0, 0); }
5256 have_openpty="no"
5257 if compile_prog "" "" ; then
5258 have_openpty="yes"
5259 else
5260 if compile_prog "" "-lutil" ; then
5261 libs_tools="-lutil $libs_tools"
5262 have_openpty="yes"
5266 ##########################################
5267 # spice probe
5268 if test "$spice" != "no" ; then
5269 cat > $TMPC << EOF
5270 #include <spice.h>
5271 int main(void) { spice_server_new(); return 0; }
5273 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5274 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5275 if $pkg_config --atleast-version=0.12.5 spice-server && \
5276 $pkg_config --atleast-version=0.12.3 spice-protocol && \
5277 compile_prog "$spice_cflags" "$spice_libs" ; then
5278 spice="yes"
5279 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5280 else
5281 if test "$spice" = "yes" ; then
5282 feature_not_found "spice" \
5283 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5285 spice="no"
5289 # check for smartcard support
5290 if test "$smartcard" != "no"; then
5291 if $pkg_config --atleast-version=2.5.1 libcacard; then
5292 libcacard_cflags=$($pkg_config --cflags libcacard)
5293 libcacard_libs=$($pkg_config --libs libcacard)
5294 smartcard="yes"
5295 else
5296 if test "$smartcard" = "yes"; then
5297 feature_not_found "smartcard" "Install libcacard devel"
5299 smartcard="no"
5303 # check for libusb
5304 if test "$libusb" != "no" ; then
5305 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5306 libusb="yes"
5307 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5308 libusb_libs=$($pkg_config --libs libusb-1.0)
5309 else
5310 if test "$libusb" = "yes"; then
5311 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5313 libusb="no"
5317 # check for usbredirparser for usb network redirection support
5318 if test "$usb_redir" != "no" ; then
5319 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5320 usb_redir="yes"
5321 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5322 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5323 else
5324 if test "$usb_redir" = "yes"; then
5325 feature_not_found "usb-redir" "Install usbredir devel"
5327 usb_redir="no"
5331 ##########################################
5332 # check if we have VSS SDK headers for win
5334 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5335 test "$vss_win32_sdk" != "no" ; then
5336 case "$vss_win32_sdk" in
5337 "") vss_win32_include="-isystem $source_path" ;;
5338 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5339 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5340 vss_win32_include="-isystem $source_path/.sdk/vss"
5341 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5343 *) vss_win32_include="-isystem $vss_win32_sdk"
5344 esac
5345 cat > $TMPC << EOF
5346 #define __MIDL_user_allocate_free_DEFINED__
5347 #include <inc/win2003/vss.h>
5348 int main(void) { return VSS_CTX_BACKUP; }
5350 if compile_prog "$vss_win32_include" "" ; then
5351 guest_agent_with_vss="yes"
5352 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5353 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5354 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5355 else
5356 if test "$vss_win32_sdk" != "" ; then
5357 echo "ERROR: Please download and install Microsoft VSS SDK:"
5358 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5359 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5360 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5361 echo "ERROR: The headers are extracted in the directory \`inc'."
5362 feature_not_found "VSS support"
5364 guest_agent_with_vss="no"
5368 ##########################################
5369 # lookup Windows platform SDK (if not specified)
5370 # The SDK is needed only to build .tlb (type library) file of guest agent
5371 # VSS provider from the source. It is usually unnecessary because the
5372 # pre-compiled .tlb file is included.
5374 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5375 test "$guest_agent_with_vss" = "yes" ; then
5376 if test -z "$win_sdk"; then
5377 programfiles="$PROGRAMFILES"
5378 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5379 if test -n "$programfiles"; then
5380 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5381 else
5382 feature_not_found "Windows SDK"
5384 elif test "$win_sdk" = "no"; then
5385 win_sdk=""
5389 ##########################################
5390 # check if mingw environment provides a recent ntddscsi.h
5391 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5392 cat > $TMPC << EOF
5393 #include <windows.h>
5394 #include <ntddscsi.h>
5395 int main(void) {
5396 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5397 #error Missing required ioctl definitions
5398 #endif
5399 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5400 return addr.Lun;
5403 if compile_prog "" "" ; then
5404 guest_agent_ntddscsi=yes
5405 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5409 ##########################################
5410 # virgl renderer probe
5412 if test "$virglrenderer" != "no" ; then
5413 cat > $TMPC << EOF
5414 #include <virglrenderer.h>
5415 int main(void) { virgl_renderer_poll(); return 0; }
5417 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5418 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5419 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5420 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5421 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5422 virglrenderer="yes"
5423 else
5424 if test "$virglrenderer" = "yes" ; then
5425 feature_not_found "virglrenderer"
5427 virglrenderer="no"
5431 ##########################################
5432 # capstone
5434 case "$capstone" in
5435 "" | yes)
5436 if $pkg_config capstone; then
5437 capstone=system
5438 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5439 capstone=git
5440 elif test -e "${source_path}/capstone/Makefile" ; then
5441 capstone=internal
5442 elif test -z "$capstone" ; then
5443 capstone=no
5444 else
5445 feature_not_found "capstone" "Install capstone devel or git submodule"
5449 system)
5450 if ! $pkg_config capstone; then
5451 feature_not_found "capstone" "Install capstone devel"
5454 esac
5456 case "$capstone" in
5457 git | internal)
5458 if test "$capstone" = git; then
5459 git_submodules="${git_submodules} capstone"
5461 mkdir -p capstone
5462 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include"
5463 if test "$mingw32" = "yes"; then
5464 LIBCAPSTONE=capstone.lib
5465 else
5466 LIBCAPSTONE=libcapstone.a
5468 capstone_libs="-L$PWD/capstone -lcapstone"
5469 capstone_cflags="-I${source_path}/capstone/include"
5472 system)
5473 capstone_libs="$($pkg_config --libs capstone)"
5474 capstone_cflags="$($pkg_config --cflags capstone)"
5475 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5481 error_exit "Unknown state for capstone: $capstone"
5483 esac
5485 ##########################################
5486 # check if we have fdatasync
5488 fdatasync=no
5489 cat > $TMPC << EOF
5490 #include <unistd.h>
5491 int main(void) {
5492 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5493 return fdatasync(0);
5494 #else
5495 #error Not supported
5496 #endif
5499 if compile_prog "" "" ; then
5500 fdatasync=yes
5503 ##########################################
5504 # check if we have madvise
5506 madvise=no
5507 cat > $TMPC << EOF
5508 #include <sys/types.h>
5509 #include <sys/mman.h>
5510 #include <stddef.h>
5511 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5513 if compile_prog "" "" ; then
5514 madvise=yes
5517 ##########################################
5518 # check if we have posix_madvise
5520 posix_madvise=no
5521 cat > $TMPC << EOF
5522 #include <sys/mman.h>
5523 #include <stddef.h>
5524 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5526 if compile_prog "" "" ; then
5527 posix_madvise=yes
5530 ##########################################
5531 # check if we have posix_memalign()
5533 posix_memalign=no
5534 cat > $TMPC << EOF
5535 #include <stdlib.h>
5536 int main(void) {
5537 void *p;
5538 return posix_memalign(&p, 8, 8);
5541 if compile_prog "" "" ; then
5542 posix_memalign=yes
5545 ##########################################
5546 # check if we have posix_syslog
5548 posix_syslog=no
5549 cat > $TMPC << EOF
5550 #include <syslog.h>
5551 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5553 if compile_prog "" "" ; then
5554 posix_syslog=yes
5557 ##########################################
5558 # check if we have sem_timedwait
5560 sem_timedwait=no
5561 cat > $TMPC << EOF
5562 #include <semaphore.h>
5563 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5565 if compile_prog "" "" ; then
5566 sem_timedwait=yes
5569 ##########################################
5570 # check if we have strchrnul
5572 strchrnul=no
5573 cat > $TMPC << EOF
5574 #include <string.h>
5575 int main(void);
5576 // Use a haystack that the compiler shouldn't be able to constant fold
5577 char *haystack = (char*)&main;
5578 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5580 if compile_prog "" "" ; then
5581 strchrnul=yes
5584 #########################################
5585 # check if we have st_atim
5587 st_atim=no
5588 cat > $TMPC << EOF
5589 #include <sys/stat.h>
5590 #include <stddef.h>
5591 int main(void) { return offsetof(struct stat, st_atim); }
5593 if compile_prog "" "" ; then
5594 st_atim=yes
5597 ##########################################
5598 # check if trace backend exists
5600 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5601 if test "$?" -ne 0 ; then
5602 error_exit "invalid trace backends" \
5603 "Please choose supported trace backends."
5606 ##########################################
5607 # For 'ust' backend, test if ust headers are present
5608 if have_backend "ust"; then
5609 cat > $TMPC << EOF
5610 #include <lttng/tracepoint.h>
5611 int main(void) { return 0; }
5613 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5614 if $pkg_config lttng-ust --exists; then
5615 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5616 else
5617 lttng_ust_libs="-llttng-ust -ldl"
5619 if $pkg_config liburcu-bp --exists; then
5620 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5621 else
5622 urcu_bp_libs="-lurcu-bp"
5625 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5626 else
5627 error_exit "Trace backend 'ust' missing lttng-ust header files"
5631 ##########################################
5632 # For 'dtrace' backend, test if 'dtrace' command is present
5633 if have_backend "dtrace"; then
5634 if ! has 'dtrace' ; then
5635 error_exit "dtrace command is not found in PATH $PATH"
5637 trace_backend_stap="no"
5638 if has 'stap' ; then
5639 trace_backend_stap="yes"
5643 ##########################################
5644 # check and set a backend for coroutine
5646 # We prefer ucontext, but it's not always possible. The fallback
5647 # is sigcontext. On Windows the only valid backend is the Windows
5648 # specific one.
5650 ucontext_works=no
5651 if test "$darwin" != "yes"; then
5652 cat > $TMPC << EOF
5653 #include <ucontext.h>
5654 #ifdef __stub_makecontext
5655 #error Ignoring glibc stub makecontext which will always fail
5656 #endif
5657 int main(void) { makecontext(0, 0, 0); return 0; }
5659 if compile_prog "" "" ; then
5660 ucontext_works=yes
5664 if test "$coroutine" = ""; then
5665 if test "$mingw32" = "yes"; then
5666 coroutine=win32
5667 elif test "$ucontext_works" = "yes"; then
5668 coroutine=ucontext
5669 else
5670 coroutine=sigaltstack
5672 else
5673 case $coroutine in
5674 windows)
5675 if test "$mingw32" != "yes"; then
5676 error_exit "'windows' coroutine backend only valid for Windows"
5678 # Unfortunately the user visible backend name doesn't match the
5679 # coroutine-*.c filename for this case, so we have to adjust it here.
5680 coroutine=win32
5682 ucontext)
5683 if test "$ucontext_works" != "yes"; then
5684 feature_not_found "ucontext"
5687 sigaltstack)
5688 if test "$mingw32" = "yes"; then
5689 error_exit "only the 'windows' coroutine backend is valid for Windows"
5693 error_exit "unknown coroutine backend $coroutine"
5695 esac
5698 if test "$coroutine_pool" = ""; then
5699 coroutine_pool=yes
5702 if test "$debug_stack_usage" = "yes"; then
5703 if test "$coroutine_pool" = "yes"; then
5704 echo "WARN: disabling coroutine pool for stack usage debugging"
5705 coroutine_pool=no
5709 ##################################################
5710 # SafeStack
5713 if test "$safe_stack" = "yes"; then
5714 cat > $TMPC << EOF
5715 int main(int argc, char *argv[])
5717 #if ! __has_feature(safe_stack)
5718 #error SafeStack Disabled
5719 #endif
5720 return 0;
5723 flag="-fsanitize=safe-stack"
5724 # Check that safe-stack is supported and enabled.
5725 if compile_prog "-Werror $flag" "$flag"; then
5726 # Flag needed both at compilation and at linking
5727 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5728 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5729 else
5730 error_exit "SafeStack not supported by your compiler"
5732 if test "$coroutine" != "ucontext"; then
5733 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5735 else
5736 cat > $TMPC << EOF
5737 int main(int argc, char *argv[])
5739 #if defined(__has_feature)
5740 #if __has_feature(safe_stack)
5741 #error SafeStack Enabled
5742 #endif
5743 #endif
5744 return 0;
5747 if test "$safe_stack" = "no"; then
5748 # Make sure that safe-stack is disabled
5749 if ! compile_prog "-Werror" ""; then
5750 # SafeStack was already enabled, try to explicitly remove the feature
5751 flag="-fno-sanitize=safe-stack"
5752 if ! compile_prog "-Werror $flag" "$flag"; then
5753 error_exit "Configure cannot disable SafeStack"
5755 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5756 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5758 else # "$safe_stack" = ""
5759 # Set safe_stack to yes or no based on pre-existing flags
5760 if compile_prog "-Werror" ""; then
5761 safe_stack="no"
5762 else
5763 safe_stack="yes"
5764 if test "$coroutine" != "ucontext"; then
5765 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5771 ##########################################
5772 # check if we have open_by_handle_at
5774 open_by_handle_at=no
5775 cat > $TMPC << EOF
5776 #include <fcntl.h>
5777 #if !defined(AT_EMPTY_PATH)
5778 # error missing definition
5779 #else
5780 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5781 #endif
5783 if compile_prog "" "" ; then
5784 open_by_handle_at=yes
5787 ########################################
5788 # check if we have linux/magic.h
5790 linux_magic_h=no
5791 cat > $TMPC << EOF
5792 #include <linux/magic.h>
5793 int main(void) {
5794 return 0;
5797 if compile_prog "" "" ; then
5798 linux_magic_h=yes
5801 ########################################
5802 # check if we have valgrind/valgrind.h
5804 valgrind_h=no
5805 cat > $TMPC << EOF
5806 #include <valgrind/valgrind.h>
5807 int main(void) {
5808 return 0;
5811 if compile_prog "" "" ; then
5812 valgrind_h=yes
5815 ########################################
5816 # check if environ is declared
5818 has_environ=no
5819 cat > $TMPC << EOF
5820 #include <unistd.h>
5821 int main(void) {
5822 environ = 0;
5823 return 0;
5826 if compile_prog "" "" ; then
5827 has_environ=yes
5830 ########################################
5831 # check if cpuid.h is usable.
5833 cat > $TMPC << EOF
5834 #include <cpuid.h>
5835 int main(void) {
5836 unsigned a, b, c, d;
5837 int max = __get_cpuid_max(0, 0);
5839 if (max >= 1) {
5840 __cpuid(1, a, b, c, d);
5843 if (max >= 7) {
5844 __cpuid_count(7, 0, a, b, c, d);
5847 return 0;
5850 if compile_prog "" "" ; then
5851 cpuid_h=yes
5854 ##########################################
5855 # avx2 optimization requirement check
5857 # There is no point enabling this if cpuid.h is not usable,
5858 # since we won't be able to select the new routines.
5860 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5861 cat > $TMPC << EOF
5862 #pragma GCC push_options
5863 #pragma GCC target("avx2")
5864 #include <cpuid.h>
5865 #include <immintrin.h>
5866 static int bar(void *a) {
5867 __m256i x = *(__m256i *)a;
5868 return _mm256_testz_si256(x, x);
5870 int main(int argc, char *argv[]) { return bar(argv[0]); }
5872 if compile_object "" ; then
5873 avx2_opt="yes"
5874 else
5875 avx2_opt="no"
5879 ##########################################
5880 # avx512f optimization requirement check
5882 # There is no point enabling this if cpuid.h is not usable,
5883 # since we won't be able to select the new routines.
5884 # by default, it is turned off.
5885 # if user explicitly want to enable it, check environment
5887 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5888 cat > $TMPC << EOF
5889 #pragma GCC push_options
5890 #pragma GCC target("avx512f")
5891 #include <cpuid.h>
5892 #include <immintrin.h>
5893 static int bar(void *a) {
5894 __m512i x = *(__m512i *)a;
5895 return _mm512_test_epi64_mask(x, x);
5897 int main(int argc, char *argv[])
5899 return bar(argv[0]);
5902 if ! compile_object "" ; then
5903 avx512f_opt="no"
5905 else
5906 avx512f_opt="no"
5909 ########################################
5910 # check if __[u]int128_t is usable.
5912 int128=no
5913 cat > $TMPC << EOF
5914 __int128_t a;
5915 __uint128_t b;
5916 int main (void) {
5917 a = a + b;
5918 b = a * b;
5919 a = a * a;
5920 return 0;
5923 if compile_prog "" "" ; then
5924 int128=yes
5927 #########################################
5928 # See if 128-bit atomic operations are supported.
5930 atomic128=no
5931 if test "$int128" = "yes"; then
5932 cat > $TMPC << EOF
5933 int main(void)
5935 unsigned __int128 x = 0, y = 0;
5936 y = __atomic_load_16(&x, 0);
5937 __atomic_store_16(&x, y, 0);
5938 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5939 return 0;
5942 if compile_prog "" "" ; then
5943 atomic128=yes
5947 cmpxchg128=no
5948 if test "$int128" = yes && test "$atomic128" = no; then
5949 cat > $TMPC << EOF
5950 int main(void)
5952 unsigned __int128 x = 0, y = 0;
5953 __sync_val_compare_and_swap_16(&x, y, x);
5954 return 0;
5957 if compile_prog "" "" ; then
5958 cmpxchg128=yes
5962 #########################################
5963 # See if 64-bit atomic operations are supported.
5964 # Note that without __atomic builtins, we can only
5965 # assume atomic loads/stores max at pointer size.
5967 cat > $TMPC << EOF
5968 #include <stdint.h>
5969 int main(void)
5971 uint64_t x = 0, y = 0;
5972 #ifdef __ATOMIC_RELAXED
5973 y = __atomic_load_8(&x, 0);
5974 __atomic_store_8(&x, y, 0);
5975 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5976 __atomic_exchange_8(&x, y, 0);
5977 __atomic_fetch_add_8(&x, y, 0);
5978 #else
5979 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5980 __sync_lock_test_and_set(&x, y);
5981 __sync_val_compare_and_swap(&x, y, 0);
5982 __sync_fetch_and_add(&x, y);
5983 #endif
5984 return 0;
5987 if compile_prog "" "" ; then
5988 atomic64=yes
5991 #########################################
5992 # See if --dynamic-list is supported by the linker
5993 ld_dynamic_list="no"
5994 if test "$static" = "no" ; then
5995 cat > $TMPTXT <<EOF
5997 foo;
6001 cat > $TMPC <<EOF
6002 #include <stdio.h>
6003 void foo(void);
6005 void foo(void)
6007 printf("foo\n");
6010 int main(void)
6012 foo();
6013 return 0;
6017 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
6018 ld_dynamic_list="yes"
6022 #########################################
6023 # See if -exported_symbols_list is supported by the linker
6025 ld_exported_symbols_list="no"
6026 if test "$static" = "no" ; then
6027 cat > $TMPTXT <<EOF
6028 _foo
6031 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
6032 ld_exported_symbols_list="yes"
6036 if test "$plugins" = "yes" &&
6037 test "$ld_dynamic_list" = "no" &&
6038 test "$ld_exported_symbols_list" = "no" ; then
6039 error_exit \
6040 "Plugin support requires dynamic linking and specifying a set of symbols " \
6041 "that are exported to plugins. Unfortunately your linker doesn't " \
6042 "support the flag (--dynamic-list or -exported_symbols_list) used " \
6043 "for this purpose. You can't build with --static."
6046 ########################################
6047 # See if __attribute__((alias)) is supported.
6048 # This false for Xcode 9, but has been remedied for Xcode 10.
6049 # Unfortunately, travis uses Xcode 9 by default.
6051 attralias=no
6052 cat > $TMPC << EOF
6053 int x = 1;
6054 extern const int y __attribute__((alias("x")));
6055 int main(void) { return 0; }
6057 if compile_prog "" "" ; then
6058 attralias=yes
6061 ########################################
6062 # check if getauxval is available.
6064 getauxval=no
6065 cat > $TMPC << EOF
6066 #include <sys/auxv.h>
6067 int main(void) {
6068 return getauxval(AT_HWCAP) == 0;
6071 if compile_prog "" "" ; then
6072 getauxval=yes
6075 ########################################
6076 # check if ccache is interfering with
6077 # semantic analysis of macros
6079 unset CCACHE_CPP2
6080 ccache_cpp2=no
6081 cat > $TMPC << EOF
6082 static const int Z = 1;
6083 #define fn() ({ Z; })
6084 #define TAUT(X) ((X) == Z)
6085 #define PAREN(X, Y) (X == Y)
6086 #define ID(X) (X)
6087 int main(int argc, char *argv[])
6089 int x = 0, y = 0;
6090 x = ID(x);
6091 x = fn();
6092 fn();
6093 if (PAREN(x, y)) return 0;
6094 if (TAUT(Z)) return 0;
6095 return 0;
6099 if ! compile_object "-Werror"; then
6100 ccache_cpp2=yes
6103 #################################################
6104 # clang does not support glibc + FORTIFY_SOURCE.
6106 if test "$fortify_source" != "no"; then
6107 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6108 fortify_source="no";
6109 elif test -n "$cxx" && has $cxx &&
6110 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6111 fortify_source="no";
6112 else
6113 fortify_source="yes"
6117 ###############################################
6118 # Check if copy_file_range is provided by glibc
6119 have_copy_file_range=no
6120 cat > $TMPC << EOF
6121 #include <unistd.h>
6122 int main(void) {
6123 copy_file_range(0, NULL, 0, NULL, 0, 0);
6124 return 0;
6127 if compile_prog "" "" ; then
6128 have_copy_file_range=yes
6131 ##########################################
6132 # check if struct fsxattr is available via linux/fs.h
6134 have_fsxattr=no
6135 cat > $TMPC << EOF
6136 #include <linux/fs.h>
6137 struct fsxattr foo;
6138 int main(void) {
6139 return 0;
6142 if compile_prog "" "" ; then
6143 have_fsxattr=yes
6146 ##########################################
6147 # check for usable membarrier system call
6148 if test "$membarrier" = "yes"; then
6149 have_membarrier=no
6150 if test "$mingw32" = "yes" ; then
6151 have_membarrier=yes
6152 elif test "$linux" = "yes" ; then
6153 cat > $TMPC << EOF
6154 #include <linux/membarrier.h>
6155 #include <sys/syscall.h>
6156 #include <unistd.h>
6157 #include <stdlib.h>
6158 int main(void) {
6159 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6160 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6161 exit(0);
6164 if compile_prog "" "" ; then
6165 have_membarrier=yes
6168 if test "$have_membarrier" = "no"; then
6169 feature_not_found "membarrier" "membarrier system call not available"
6171 else
6172 # Do not enable it by default even for Mingw32, because it doesn't
6173 # work on Wine.
6174 membarrier=no
6177 ##########################################
6178 # check if rtnetlink.h exists and is useful
6179 have_rtnetlink=no
6180 cat > $TMPC << EOF
6181 #include <linux/rtnetlink.h>
6182 int main(void) {
6183 return IFLA_PROTO_DOWN;
6186 if compile_prog "" "" ; then
6187 have_rtnetlink=yes
6190 ##########################################
6191 # check for usable AF_VSOCK environment
6192 have_af_vsock=no
6193 cat > $TMPC << EOF
6194 #include <errno.h>
6195 #include <sys/types.h>
6196 #include <sys/socket.h>
6197 #if !defined(AF_VSOCK)
6198 # error missing AF_VSOCK flag
6199 #endif
6200 #include <linux/vm_sockets.h>
6201 int main(void) {
6202 int sock, ret;
6203 struct sockaddr_vm svm;
6204 socklen_t len = sizeof(svm);
6205 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6206 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6207 if ((ret == -1) && (errno == ENOTCONN)) {
6208 return 0;
6210 return -1;
6213 if compile_prog "" "" ; then
6214 have_af_vsock=yes
6217 ##########################################
6218 # check for usable AF_ALG environment
6219 have_afalg=no
6220 cat > $TMPC << EOF
6221 #include <errno.h>
6222 #include <sys/types.h>
6223 #include <sys/socket.h>
6224 #include <linux/if_alg.h>
6225 int main(void) {
6226 int sock;
6227 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6228 return sock;
6231 if compile_prog "" "" ; then
6232 have_afalg=yes
6234 if test "$crypto_afalg" = "yes"
6235 then
6236 if test "$have_afalg" != "yes"
6237 then
6238 error_exit "AF_ALG requested but could not be detected"
6243 #################################################
6244 # Check to see if we have the Hypervisor framework
6245 if [ "$darwin" = "yes" ] ; then
6246 cat > $TMPC << EOF
6247 #include <Hypervisor/hv.h>
6248 int main() { return 0;}
6250 if ! compile_object ""; then
6251 hvf='no'
6252 else
6253 hvf='yes'
6254 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6258 #################################################
6259 # Sparc implicitly links with --relax, which is
6260 # incompatible with -r, so --no-relax should be
6261 # given. It does no harm to give it on other
6262 # platforms too.
6264 # Note: the prototype is needed since QEMU_CFLAGS
6265 # contains -Wmissing-prototypes
6266 cat > $TMPC << EOF
6267 extern int foo(void);
6268 int foo(void) { return 0; }
6270 if ! compile_object ""; then
6271 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6273 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6274 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6275 LD_REL_FLAGS=$i
6276 break
6278 done
6279 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6280 feature_not_found "modules" "Cannot find how to build relocatable objects"
6283 ##########################################
6284 # check for sysmacros.h
6286 have_sysmacros=no
6287 cat > $TMPC << EOF
6288 #include <sys/sysmacros.h>
6289 int main(void) {
6290 return makedev(0, 0);
6293 if compile_prog "" "" ; then
6294 have_sysmacros=yes
6297 ##########################################
6298 # check for _Static_assert()
6300 have_static_assert=no
6301 cat > $TMPC << EOF
6302 _Static_assert(1, "success");
6303 int main(void) {
6304 return 0;
6307 if compile_prog "" "" ; then
6308 have_static_assert=yes
6311 ##########################################
6312 # check for utmpx.h, it is missing e.g. on OpenBSD
6314 have_utmpx=no
6315 cat > $TMPC << EOF
6316 #include <utmpx.h>
6317 struct utmpx user_info;
6318 int main(void) {
6319 return 0;
6322 if compile_prog "" "" ; then
6323 have_utmpx=yes
6326 ##########################################
6327 # check for getrandom()
6329 have_getrandom=no
6330 cat > $TMPC << EOF
6331 #include <sys/random.h>
6332 int main(void) {
6333 return getrandom(0, 0, GRND_NONBLOCK);
6336 if compile_prog "" "" ; then
6337 have_getrandom=yes
6340 ##########################################
6341 # checks for sanitizers
6343 have_asan=no
6344 have_ubsan=no
6345 have_asan_iface_h=no
6346 have_asan_iface_fiber=no
6348 if test "$sanitizers" = "yes" ; then
6349 write_c_skeleton
6350 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6351 have_asan=yes
6354 # we could use a simple skeleton for flags checks, but this also
6355 # detect the static linking issue of ubsan, see also:
6356 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6357 cat > $TMPC << EOF
6358 #include <stdlib.h>
6359 int main(void) {
6360 void *tmp = malloc(10);
6361 if (tmp != NULL) {
6362 return *(int *)(tmp + 2);
6364 return 1;
6367 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6368 have_ubsan=yes
6371 if check_include "sanitizer/asan_interface.h" ; then
6372 have_asan_iface_h=yes
6375 cat > $TMPC << EOF
6376 #include <sanitizer/asan_interface.h>
6377 int main(void) {
6378 __sanitizer_start_switch_fiber(0, 0, 0);
6379 return 0;
6382 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6383 have_asan_iface_fiber=yes
6387 ##########################################
6388 # checks for fuzzer
6389 if test "$fuzzing" = "yes" ; then
6390 write_c_fuzzer_skeleton
6391 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6392 have_fuzzer=yes
6393 else
6394 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
6395 exit 1
6399 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6400 # keep it separate until that is not the case.
6401 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6402 error_exit "TSAN is not supported with other sanitiziers."
6404 have_tsan=no
6405 have_tsan_iface_fiber=no
6406 if test "$tsan" = "yes" ; then
6407 write_c_skeleton
6408 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6409 have_tsan=yes
6411 cat > $TMPC << EOF
6412 #include <sanitizer/tsan_interface.h>
6413 int main(void) {
6414 __tsan_create_fiber(0);
6415 return 0;
6418 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6419 have_tsan_iface_fiber=yes
6423 ##########################################
6424 # check for libpmem
6426 if test "$libpmem" != "no"; then
6427 if $pkg_config --exists "libpmem"; then
6428 libpmem="yes"
6429 libpmem_libs=$($pkg_config --libs libpmem)
6430 libpmem_cflags=$($pkg_config --cflags libpmem)
6431 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6432 else
6433 if test "$libpmem" = "yes" ; then
6434 feature_not_found "libpmem" "Install nvml or pmdk"
6436 libpmem="no"
6440 ##########################################
6441 # check for libdaxctl
6443 if test "$libdaxctl" != "no"; then
6444 if $pkg_config --atleast-version=57 "libdaxctl"; then
6445 libdaxctl="yes"
6446 libdaxctl_libs=$($pkg_config --libs libdaxctl)
6447 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6448 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
6449 else
6450 if test "$libdaxctl" = "yes" ; then
6451 feature_not_found "libdaxctl" "Install libdaxctl"
6453 libdaxctl="no"
6457 ##########################################
6458 # check for slirp
6460 # slirp is only required when building softmmu targets
6461 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6462 slirp="no"
6465 case "$slirp" in
6466 "" | yes)
6467 if $pkg_config slirp; then
6468 slirp=system
6469 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6470 slirp=git
6471 elif test -e "${source_path}/slirp/Makefile" ; then
6472 slirp=internal
6473 elif test -z "$slirp" ; then
6474 slirp=no
6475 else
6476 feature_not_found "slirp" "Install slirp devel or git submodule"
6480 system)
6481 if ! $pkg_config slirp; then
6482 feature_not_found "slirp" "Install slirp devel"
6485 esac
6487 case "$slirp" in
6488 git | internal)
6489 if test "$slirp" = git; then
6490 git_submodules="${git_submodules} slirp"
6492 mkdir -p slirp
6493 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
6494 slirp_libs="-L$PWD/slirp -lslirp"
6495 if test "$mingw32" = "yes" ; then
6496 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6500 system)
6501 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6502 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6503 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6509 error_exit "Unknown state for slirp: $slirp"
6511 esac
6513 ##########################################
6514 # check for usable __NR_keyctl syscall
6516 if test "$linux" = "yes" ; then
6518 have_keyring=no
6519 cat > $TMPC << EOF
6520 #include <errno.h>
6521 #include <asm/unistd.h>
6522 #include <linux/keyctl.h>
6523 #include <unistd.h>
6524 int main(void) {
6525 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6528 if compile_prog "" "" ; then
6529 have_keyring=yes
6532 if test "$secret_keyring" != "no"
6533 then
6534 if test "$have_keyring" = "yes"
6535 then
6536 secret_keyring=yes
6537 else
6538 if test "$secret_keyring" = "yes"
6539 then
6540 error_exit "syscall __NR_keyctl requested, \
6541 but not implemented on your system"
6542 else
6543 secret_keyring=no
6548 ##########################################
6549 # check for usable keyutils.h
6551 if test "$linux" = "yes" ; then
6553 have_keyutils=no
6554 cat > $TMPC << EOF
6555 #include <errno.h>
6556 #include <asm/unistd.h>
6557 #include <unistd.h>
6558 #include <sys/types.h>
6559 #include <keyutils.h>
6560 int main(void) {
6561 return request_key("user", NULL, NULL, 0);
6564 if compile_prog "" "-lkeyutils"; then
6565 have_keyutils=yes
6570 ##########################################
6571 # End of CC checks
6572 # After here, no more $cc or $ld runs
6574 write_c_skeleton
6576 if test "$gcov" = "yes" ; then
6578 elif test "$fortify_source" = "yes" ; then
6579 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6580 debug=no
6582 if test "$debug_info" = "yes"; then
6583 CFLAGS="-g $CFLAGS"
6584 LDFLAGS="-g $LDFLAGS"
6586 if test "$debug" = "no"; then
6587 CFLAGS="-O2 $CFLAGS"
6590 case "$ARCH" in
6591 alpha)
6592 # Ensure there's only a single GP
6593 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6595 esac
6597 if test "$gprof" = "yes" ; then
6598 QEMU_CFLAGS="-p $QEMU_CFLAGS"
6599 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6602 if test "$have_asan" = "yes"; then
6603 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6604 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6605 if test "$have_asan_iface_h" = "no" ; then
6606 echo "ASAN build enabled, but ASAN header missing." \
6607 "Without code annotation, the report may be inferior."
6608 elif test "$have_asan_iface_fiber" = "no" ; then
6609 echo "ASAN build enabled, but ASAN header is too old." \
6610 "Without code annotation, the report may be inferior."
6613 if test "$have_tsan" = "yes" ; then
6614 if test "$have_tsan_iface_fiber" = "yes" ; then
6615 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6616 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6617 else
6618 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6620 elif test "$tsan" = "yes" ; then
6621 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6623 if test "$have_ubsan" = "yes"; then
6624 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6625 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6628 ##########################################
6629 # Do we have libnfs
6630 if test "$libnfs" != "no" ; then
6631 if $pkg_config --atleast-version=1.9.3 libnfs; then
6632 libnfs="yes"
6633 libnfs_libs=$($pkg_config --libs libnfs)
6634 else
6635 if test "$libnfs" = "yes" ; then
6636 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6638 libnfs="no"
6642 ##########################################
6643 # Do we have libudev
6644 if test "$libudev" != "no" ; then
6645 if $pkg_config libudev && test "$static" != "yes"; then
6646 libudev="yes"
6647 libudev_libs=$($pkg_config --libs libudev)
6648 else
6649 libudev="no"
6653 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6654 if test "$werror" = "yes"; then
6655 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6658 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6659 if test "$solaris" = "no" && test "$tsan" = "no"; then
6660 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6661 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6665 # test if pod2man has --utf8 option
6666 if pod2man --help | grep -q utf8; then
6667 POD2MAN="pod2man --utf8"
6668 else
6669 POD2MAN="pod2man"
6672 # Use ASLR, no-SEH and DEP if available
6673 if test "$mingw32" = "yes" ; then
6674 for flag in --dynamicbase --no-seh --nxcompat; do
6675 if ld_has $flag ; then
6676 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6678 done
6681 # Disable OpenBSD W^X if available
6682 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6683 cat > $TMPC <<EOF
6684 int main(void) { return 0; }
6686 wx_ldflags="-Wl,-z,wxneeded"
6687 if compile_prog "" "$wx_ldflags"; then
6688 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6692 qemu_confdir=$sysconfdir$confsuffix
6693 qemu_moddir=$libdir$confsuffix
6694 qemu_datadir=$datadir$confsuffix
6695 qemu_localedir="$datadir/locale"
6696 qemu_icondir="$datadir/icons"
6697 qemu_desktopdir="$datadir/applications"
6699 # We can only support ivshmem if we have eventfd
6700 if [ "$eventfd" = "yes" ]; then
6701 ivshmem=yes
6704 if test "$softmmu" = yes ; then
6705 if test "$linux" = yes; then
6706 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6707 virtfs=yes
6708 else
6709 if test "$virtfs" = yes; then
6710 error_exit "VirtFS requires libcap-ng devel and libattr devel"
6712 virtfs=no
6714 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6715 mpath=yes
6716 else
6717 if test "$mpath" = yes; then
6718 error_exit "Multipath requires libmpathpersist devel"
6720 mpath=no
6722 else
6723 if test "$virtfs" = yes; then
6724 error_exit "VirtFS is supported only on Linux"
6726 virtfs=no
6727 if test "$mpath" = yes; then
6728 error_exit "Multipath is supported only on Linux"
6730 mpath=no
6734 # Probe for guest agent support/options
6736 if [ "$guest_agent" != "no" ]; then
6737 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6738 guest_agent=no
6739 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6740 guest_agent=yes
6741 elif [ "$guest_agent" != yes ]; then
6742 guest_agent=no
6743 else
6744 error_exit "Guest agent is not supported on this platform"
6748 # Guest agent Window MSI package
6750 if test "$guest_agent" != yes; then
6751 if test "$guest_agent_msi" = yes; then
6752 error_exit "MSI guest agent package requires guest agent enabled"
6754 guest_agent_msi=no
6755 elif test "$mingw32" != "yes"; then
6756 if test "$guest_agent_msi" = "yes"; then
6757 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6759 guest_agent_msi=no
6760 elif ! has wixl; then
6761 if test "$guest_agent_msi" = "yes"; then
6762 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6764 guest_agent_msi=no
6765 else
6766 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6767 # disabled explicitly
6768 if test "$guest_agent_msi" != "no"; then
6769 guest_agent_msi=yes
6773 if test "$guest_agent_msi" = "yes"; then
6774 if test "$guest_agent_with_vss" = "yes"; then
6775 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6778 if test "$QEMU_GA_MANUFACTURER" = ""; then
6779 QEMU_GA_MANUFACTURER=QEMU
6782 if test "$QEMU_GA_DISTRO" = ""; then
6783 QEMU_GA_DISTRO=Linux
6786 if test "$QEMU_GA_VERSION" = ""; then
6787 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6790 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6792 case "$cpu" in
6793 x86_64)
6794 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6796 i386)
6797 QEMU_GA_MSI_ARCH="-D Arch=32"
6800 error_exit "CPU $cpu not supported for building installation package"
6802 esac
6805 # Mac OS X ships with a broken assembler
6806 roms=
6807 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6808 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6809 test "$softmmu" = yes ; then
6810 # Different host OS linkers have different ideas about the name of the ELF
6811 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6812 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6813 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6814 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6815 ld_i386_emulation="$emu"
6816 roms="optionrom"
6817 break
6819 done
6822 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6823 if test "$cpu" = "s390x" ; then
6824 write_c_skeleton
6825 if compile_prog "-march=z900" ""; then
6826 roms="$roms s390-ccw"
6827 # SLOF is required for building the s390-ccw firmware on s390x,
6828 # since it is using the libnet code from SLOF for network booting.
6829 if test -e "${source_path}/.git" ; then
6830 git_submodules="${git_submodules} roms/SLOF"
6835 # Check that the C++ compiler exists and works with the C compiler.
6836 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6837 if has $cxx; then
6838 cat > $TMPC <<EOF
6839 int c_function(void);
6840 int main(void) { return c_function(); }
6843 compile_object
6845 cat > $TMPCXX <<EOF
6846 extern "C" {
6847 int c_function(void);
6849 int c_function(void) { return 42; }
6852 update_cxxflags
6854 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6855 # C++ compiler $cxx works ok with C compiler $cc
6857 else
6858 echo "C++ compiler $cxx does not work with C compiler $cc"
6859 echo "Disabling C++ specific optional code"
6860 cxx=
6862 else
6863 echo "No C++ compiler available; disabling C++ specific optional code"
6864 cxx=
6867 echo_version() {
6868 if test "$1" = "yes" ; then
6869 echo "($2)"
6873 # prepend pixman and ftd flags after all config tests are done
6874 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6875 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6877 config_host_mak="config-host.mak"
6879 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6881 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6882 echo >> $config_host_mak
6884 echo all: >> $config_host_mak
6885 echo "prefix=$prefix" >> $config_host_mak
6886 echo "bindir=$bindir" >> $config_host_mak
6887 echo "libdir=$libdir" >> $config_host_mak
6888 echo "libexecdir=$libexecdir" >> $config_host_mak
6889 echo "includedir=$includedir" >> $config_host_mak
6890 echo "mandir=$mandir" >> $config_host_mak
6891 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6892 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6893 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6894 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6895 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6896 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6897 if test "$mingw32" = "no" ; then
6898 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6900 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6901 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6902 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6903 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6904 echo "GIT=$git" >> $config_host_mak
6905 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6906 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6908 echo "ARCH=$ARCH" >> $config_host_mak
6910 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6911 echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
6913 if test "$default_devices" = "yes" ; then
6914 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6915 else
6916 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6918 if test "$debug_tcg" = "yes" ; then
6919 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6921 if test "$strip_opt" = "yes" ; then
6922 echo "STRIP=${strip}" >> $config_host_mak
6924 if test "$bigendian" = "yes" ; then
6925 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6927 if test "$mingw32" = "yes" ; then
6928 echo "CONFIG_WIN32=y" >> $config_host_mak
6929 rc_version=$(cat $source_path/VERSION)
6930 version_major=${rc_version%%.*}
6931 rc_version=${rc_version#*.}
6932 version_minor=${rc_version%%.*}
6933 rc_version=${rc_version#*.}
6934 version_subminor=${rc_version%%.*}
6935 version_micro=0
6936 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6937 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6938 if test "$guest_agent_with_vss" = "yes" ; then
6939 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6940 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6941 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6943 if test "$guest_agent_ntddscsi" = "yes" ; then
6944 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6946 if test "$guest_agent_msi" = "yes"; then
6947 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6948 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6949 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6950 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6951 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6952 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6953 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6955 else
6956 echo "CONFIG_POSIX=y" >> $config_host_mak
6959 if test "$linux" = "yes" ; then
6960 echo "CONFIG_LINUX=y" >> $config_host_mak
6963 if test "$darwin" = "yes" ; then
6964 echo "CONFIG_DARWIN=y" >> $config_host_mak
6967 if test "$solaris" = "yes" ; then
6968 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6970 if test "$haiku" = "yes" ; then
6971 echo "CONFIG_HAIKU=y" >> $config_host_mak
6973 if test "$static" = "yes" ; then
6974 echo "CONFIG_STATIC=y" >> $config_host_mak
6976 if test "$profiler" = "yes" ; then
6977 echo "CONFIG_PROFILER=y" >> $config_host_mak
6979 if test "$want_tools" = "yes" ; then
6980 echo "CONFIG_TOOLS=y" >> $config_host_mak
6982 if test "$guest_agent" = "yes" ; then
6983 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6985 if test "$slirp" != "no"; then
6986 echo "CONFIG_SLIRP=y" >> $config_host_mak
6987 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6988 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6989 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6991 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6992 echo "config-host.h: slirp/all" >> $config_host_mak
6994 if test "$vde" = "yes" ; then
6995 echo "CONFIG_VDE=y" >> $config_host_mak
6996 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6998 if test "$netmap" = "yes" ; then
6999 echo "CONFIG_NETMAP=y" >> $config_host_mak
7001 if test "$l2tpv3" = "yes" ; then
7002 echo "CONFIG_L2TPV3=y" >> $config_host_mak
7004 if test "$gprof" = "yes" ; then
7005 echo "CONFIG_GPROF=y" >> $config_host_mak
7007 if test "$cap_ng" = "yes" ; then
7008 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
7009 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
7011 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
7012 for drv in $audio_drv_list; do
7013 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7014 case "$drv" in
7015 alsa | oss | pa | sdl)
7016 echo "$def=m" >> $config_host_mak ;;
7018 echo "$def=y" >> $config_host_mak ;;
7019 esac
7020 done
7021 if test "$alsa" = "yes" ; then
7022 echo "CONFIG_ALSA=y" >> $config_host_mak
7024 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7025 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
7026 if test "$libpulse" = "yes" ; then
7027 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
7029 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7030 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
7031 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7032 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7033 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
7034 if test "$libjack" = "yes" ; then
7035 echo "CONFIG_LIBJACK=y" >> $config_host_mak
7037 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
7038 if test "$audio_win_int" = "yes" ; then
7039 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7041 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7042 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7043 if test "$vnc" = "yes" ; then
7044 echo "CONFIG_VNC=y" >> $config_host_mak
7046 if test "$vnc_sasl" = "yes" ; then
7047 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7049 echo "SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
7050 echo "SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak
7051 if test "$vnc_jpeg" = "yes" ; then
7052 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7054 echo "JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak
7055 echo "JPEG_LIBS=$vnc_jpeg_libs" >> $config_host_mak
7056 if test "$vnc_png" = "yes" ; then
7057 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7059 echo "PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
7060 echo "PNG_LIBS=$vnc_png_libs" >> $config_host_mak
7061 if test "$xkbcommon" = "yes" ; then
7062 echo "CONFIG_XKBCOMMON=y" >> $config_host_mak
7063 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7064 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7066 if test "$xfs" = "yes" ; then
7067 echo "CONFIG_XFS=y" >> $config_host_mak
7069 qemu_version=$(head $source_path/VERSION)
7070 echo "VERSION=$qemu_version" >>$config_host_mak
7071 echo "PKGVERSION=$pkgversion" >>$config_host_mak
7072 echo "SRC_PATH=$source_path" >> $config_host_mak
7073 echo "TARGET_DIRS=$target_list" >> $config_host_mak
7074 if [ "$docs" = "yes" ] ; then
7075 echo "BUILD_DOCS=yes" >> $config_host_mak
7077 if test "$modules" = "yes"; then
7078 # $shacmd can generate a hash started with digit, which the compiler doesn't
7079 # like as an symbol. So prefix it with an underscore
7080 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7081 echo "CONFIG_MODULES=y" >> $config_host_mak
7083 if test "$module_upgrades" = "yes"; then
7084 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7086 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7087 echo "CONFIG_X11=y" >> $config_host_mak
7088 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7089 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7091 if test "$sdl" = "yes" ; then
7092 echo "CONFIG_SDL=m" >> $config_host_mak
7093 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7094 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7095 if test "$sdl_image" = "yes" ; then
7096 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7099 if test "$cocoa" = "yes" ; then
7100 echo "CONFIG_COCOA=y" >> $config_host_mak
7102 if test "$iconv" = "yes" ; then
7103 echo "CONFIG_ICONV=y" >> $config_host_mak
7104 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7105 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7107 if test "$curses" = "yes" ; then
7108 echo "CONFIG_CURSES=m" >> $config_host_mak
7109 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7110 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7112 if test "$pipe2" = "yes" ; then
7113 echo "CONFIG_PIPE2=y" >> $config_host_mak
7115 if test "$accept4" = "yes" ; then
7116 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7118 if test "$splice" = "yes" ; then
7119 echo "CONFIG_SPLICE=y" >> $config_host_mak
7121 if test "$eventfd" = "yes" ; then
7122 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7124 if test "$memfd" = "yes" ; then
7125 echo "CONFIG_MEMFD=y" >> $config_host_mak
7127 if test "$have_usbfs" = "yes" ; then
7128 echo "CONFIG_USBFS=y" >> $config_host_mak
7130 if test "$fallocate" = "yes" ; then
7131 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7133 if test "$fallocate_punch_hole" = "yes" ; then
7134 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7136 if test "$fallocate_zero_range" = "yes" ; then
7137 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7139 if test "$posix_fallocate" = "yes" ; then
7140 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7142 if test "$sync_file_range" = "yes" ; then
7143 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7145 if test "$fiemap" = "yes" ; then
7146 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7148 if test "$dup3" = "yes" ; then
7149 echo "CONFIG_DUP3=y" >> $config_host_mak
7151 if test "$ppoll" = "yes" ; then
7152 echo "CONFIG_PPOLL=y" >> $config_host_mak
7154 if test "$prctl_pr_set_timerslack" = "yes" ; then
7155 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7157 if test "$epoll" = "yes" ; then
7158 echo "CONFIG_EPOLL=y" >> $config_host_mak
7160 if test "$epoll_create1" = "yes" ; then
7161 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7163 if test "$sendfile" = "yes" ; then
7164 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7166 if test "$timerfd" = "yes" ; then
7167 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7169 if test "$setns" = "yes" ; then
7170 echo "CONFIG_SETNS=y" >> $config_host_mak
7172 if test "$clock_adjtime" = "yes" ; then
7173 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7175 if test "$syncfs" = "yes" ; then
7176 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7178 if test "$kcov" = "yes" ; then
7179 echo "CONFIG_KCOV=y" >> $config_host_mak
7181 if test "$inotify" = "yes" ; then
7182 echo "CONFIG_INOTIFY=y" >> $config_host_mak
7184 if test "$inotify1" = "yes" ; then
7185 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7187 if test "$sem_timedwait" = "yes" ; then
7188 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7190 if test "$strchrnul" = "yes" ; then
7191 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7193 if test "$st_atim" = "yes" ; then
7194 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7196 if test "$byteswap_h" = "yes" ; then
7197 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7199 if test "$bswap_h" = "yes" ; then
7200 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7202 if test "$curl" = "yes" ; then
7203 echo "CONFIG_CURL=m" >> $config_host_mak
7204 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7205 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7207 if test "$brlapi" = "yes" ; then
7208 echo "CONFIG_BRLAPI=y" >> $config_host_mak
7209 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7211 if test "$gtk" = "yes" ; then
7212 echo "CONFIG_GTK=m" >> $config_host_mak
7213 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7214 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7215 if test "$gtk_gl" = "yes" ; then
7216 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7219 if test "$gio" = "yes" ; then
7220 echo "CONFIG_GIO=y" >> $config_host_mak
7221 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7222 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7223 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7225 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7226 if test "$gnutls" = "yes" ; then
7227 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7228 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
7229 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
7231 if test "$gcrypt" = "yes" ; then
7232 echo "CONFIG_GCRYPT=y" >> $config_host_mak
7233 if test "$gcrypt_hmac" = "yes" ; then
7234 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7237 if test "$nettle" = "yes" ; then
7238 echo "CONFIG_NETTLE=y" >> $config_host_mak
7239 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7240 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
7241 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
7243 if test "$qemu_private_xts" = "yes" ; then
7244 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7246 if test "$tasn1" = "yes" ; then
7247 echo "CONFIG_TASN1=y" >> $config_host_mak
7249 if test "$auth_pam" = "yes" ; then
7250 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7252 if test "$have_ifaddrs_h" = "yes" ; then
7253 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7255 if test "$have_drm_h" = "yes" ; then
7256 echo "HAVE_DRM_H=y" >> $config_host_mak
7258 if test "$have_broken_size_max" = "yes" ; then
7259 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7261 if test "$have_openpty" = "yes" ; then
7262 echo "HAVE_OPENPTY=y" >> $config_host_mak
7264 if test "$have_sys_signal_h" = "yes" ; then
7265 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7268 # Work around a system header bug with some kernel/XFS header
7269 # versions where they both try to define 'struct fsxattr':
7270 # xfs headers will not try to redefine structs from linux headers
7271 # if this macro is set.
7272 if test "$have_fsxattr" = "yes" ; then
7273 echo "HAVE_FSXATTR=y" >> $config_host_mak
7275 if test "$have_copy_file_range" = "yes" ; then
7276 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7278 if test "$vte" = "yes" ; then
7279 echo "CONFIG_VTE=y" >> $config_host_mak
7280 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7281 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7283 if test "$virglrenderer" = "yes" ; then
7284 echo "CONFIG_VIRGL=y" >> $config_host_mak
7285 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7286 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7288 if test "$xen" = "yes" ; then
7289 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7290 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7291 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
7292 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
7294 if test "$linux_aio" = "yes" ; then
7295 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7297 if test "$linux_io_uring" = "yes" ; then
7298 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7299 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7300 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7302 if test "$attr" = "yes" ; then
7303 echo "CONFIG_ATTR=y" >> $config_host_mak
7304 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
7306 if test "$libattr" = "yes" ; then
7307 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7309 if test "$virtfs" = "yes" ; then
7310 echo "CONFIG_VIRTFS=y" >> $config_host_mak
7312 if test "$mpath" = "yes" ; then
7313 echo "CONFIG_MPATH=y" >> $config_host_mak
7314 if test "$mpathpersist_new_api" = "yes"; then
7315 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7318 if test "$vhost_scsi" = "yes" ; then
7319 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7321 if test "$vhost_net" = "yes" ; then
7322 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7324 if test "$vhost_net_user" = "yes" ; then
7325 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7327 if test "$vhost_net_vdpa" = "yes" ; then
7328 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7330 if test "$vhost_crypto" = "yes" ; then
7331 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7333 if test "$vhost_vsock" = "yes" ; then
7334 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7335 if test "$vhost_user" = "yes" ; then
7336 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7339 if test "$vhost_kernel" = "yes" ; then
7340 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7342 if test "$vhost_user" = "yes" ; then
7343 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7345 if test "$vhost_vdpa" = "yes" ; then
7346 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7348 if test "$vhost_user_fs" = "yes" ; then
7349 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7351 if test "$blobs" = "yes" ; then
7352 echo "INSTALL_BLOBS=yes" >> $config_host_mak
7354 if test "$iovec" = "yes" ; then
7355 echo "CONFIG_IOVEC=y" >> $config_host_mak
7357 if test "$preadv" = "yes" ; then
7358 echo "CONFIG_PREADV=y" >> $config_host_mak
7360 if test "$fdt" != "no" ; then
7361 echo "CONFIG_FDT=y" >> $config_host_mak
7362 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
7363 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
7365 if test "$membarrier" = "yes" ; then
7366 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7368 if test "$signalfd" = "yes" ; then
7369 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7371 if test "$optreset" = "yes" ; then
7372 echo "HAVE_OPTRESET=y" >> $config_host_mak
7374 if test "$tcg" = "yes"; then
7375 echo "CONFIG_TCG=y" >> $config_host_mak
7376 if test "$tcg_interpreter" = "yes" ; then
7377 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7380 if test "$fdatasync" = "yes" ; then
7381 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7383 if test "$madvise" = "yes" ; then
7384 echo "CONFIG_MADVISE=y" >> $config_host_mak
7386 if test "$posix_madvise" = "yes" ; then
7387 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7389 if test "$posix_memalign" = "yes" ; then
7390 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7392 if test "$zlib" != "no" ; then
7393 echo "CONFIG_ZLIB=y" >> $config_host_mak
7394 echo "ZLIB_CFLAGS=$zlib_cflags" >> $config_host_mak
7395 echo "ZLIB_LIBS=$zlib_libs" >> $config_host_mak
7397 if test "$spice" = "yes" ; then
7398 echo "CONFIG_SPICE=y" >> $config_host_mak
7399 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
7400 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
7403 if test "$smartcard" = "yes" ; then
7404 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7405 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7406 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7409 if test "$libusb" = "yes" ; then
7410 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7411 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7412 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7415 if test "$usb_redir" = "yes" ; then
7416 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7417 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7418 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7421 if test "$opengl" = "yes" ; then
7422 echo "CONFIG_OPENGL=y" >> $config_host_mak
7423 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7424 if test "$opengl_dmabuf" = "yes" ; then
7425 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7429 if test "$gbm" = "yes" ; then
7430 echo "CONFIG_GBM=y" >> $config_host_mak
7431 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7432 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7436 if test "$malloc_trim" = "yes" ; then
7437 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7440 if test "$avx2_opt" = "yes" ; then
7441 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7444 if test "$avx512f_opt" = "yes" ; then
7445 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7448 if test "$lzo" = "yes" ; then
7449 echo "CONFIG_LZO=y" >> $config_host_mak
7450 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7453 if test "$snappy" = "yes" ; then
7454 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7455 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7458 if test "$bzip2" = "yes" ; then
7459 echo "CONFIG_BZIP2=y" >> $config_host_mak
7460 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7463 if test "$lzfse" = "yes" ; then
7464 echo "CONFIG_LZFSE=y" >> $config_host_mak
7465 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7468 if test "$zstd" = "yes" ; then
7469 echo "CONFIG_ZSTD=y" >> $config_host_mak
7470 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
7471 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
7474 if test "$libiscsi" = "yes" ; then
7475 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7476 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7477 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7480 if test "$libnfs" = "yes" ; then
7481 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7482 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7485 if test "$seccomp" = "yes"; then
7486 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7487 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7488 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7491 # XXX: suppress that
7492 if [ "$bsd" = "yes" ] ; then
7493 echo "CONFIG_BSD=y" >> $config_host_mak
7496 if test "$localtime_r" = "yes" ; then
7497 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7499 if test "$qom_cast_debug" = "yes" ; then
7500 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7502 if test "$rbd" = "yes" ; then
7503 echo "CONFIG_RBD=m" >> $config_host_mak
7504 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7507 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7508 if test "$coroutine_pool" = "yes" ; then
7509 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7510 else
7511 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7514 if test "$debug_stack_usage" = "yes" ; then
7515 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7518 if test "$crypto_afalg" = "yes" ; then
7519 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7522 if test "$open_by_handle_at" = "yes" ; then
7523 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7526 if test "$linux_magic_h" = "yes" ; then
7527 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7530 if test "$valgrind_h" = "yes" ; then
7531 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7534 if test "$have_asan_iface_fiber" = "yes" ; then
7535 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7538 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7539 echo "CONFIG_TSAN=y" >> $config_host_mak
7542 if test "$has_environ" = "yes" ; then
7543 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7546 if test "$cpuid_h" = "yes" ; then
7547 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7550 if test "$int128" = "yes" ; then
7551 echo "CONFIG_INT128=y" >> $config_host_mak
7554 if test "$atomic128" = "yes" ; then
7555 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7558 if test "$cmpxchg128" = "yes" ; then
7559 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7562 if test "$atomic64" = "yes" ; then
7563 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7566 if test "$attralias" = "yes" ; then
7567 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7570 if test "$getauxval" = "yes" ; then
7571 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7574 if test "$glusterfs" = "yes" ; then
7575 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7576 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7577 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7580 if test "$glusterfs_xlator_opt" = "yes" ; then
7581 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7584 if test "$glusterfs_discard" = "yes" ; then
7585 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7588 if test "$glusterfs_fallocate" = "yes" ; then
7589 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7592 if test "$glusterfs_zerofill" = "yes" ; then
7593 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7596 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7597 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7600 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7601 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7604 if test "$libssh" = "yes" ; then
7605 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7606 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7607 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7610 if test "$live_block_migration" = "yes" ; then
7611 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7614 if test "$tpm" = "yes"; then
7615 echo 'CONFIG_TPM=y' >> $config_host_mak
7618 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7619 if have_backend "nop"; then
7620 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7622 if have_backend "simple"; then
7623 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7624 # Set the appropriate trace file.
7625 trace_file="\"$trace_file-\" FMT_pid"
7627 if have_backend "log"; then
7628 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7630 if have_backend "ust"; then
7631 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7632 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7633 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7635 if have_backend "dtrace"; then
7636 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7637 if test "$trace_backend_stap" = "yes" ; then
7638 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7641 if have_backend "ftrace"; then
7642 if test "$linux" = "yes" ; then
7643 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7644 else
7645 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7648 if have_backend "syslog"; then
7649 if test "$posix_syslog" = "yes" ; then
7650 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7651 else
7652 feature_not_found "syslog(trace backend)" "syslog not available"
7655 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7657 if test "$rdma" = "yes" ; then
7658 echo "CONFIG_RDMA=y" >> $config_host_mak
7659 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7662 if test "$pvrdma" = "yes" ; then
7663 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7666 if test "$have_rtnetlink" = "yes" ; then
7667 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7670 if test "$libxml2" = "yes" ; then
7671 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7672 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7673 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7676 if test "$replication" = "yes" ; then
7677 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7680 if test "$have_af_vsock" = "yes" ; then
7681 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7684 if test "$have_sysmacros" = "yes" ; then
7685 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7688 if test "$have_static_assert" = "yes" ; then
7689 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7692 if test "$have_utmpx" = "yes" ; then
7693 echo "HAVE_UTMPX=y" >> $config_host_mak
7695 if test "$have_getrandom" = "yes" ; then
7696 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7698 if test "$ivshmem" = "yes" ; then
7699 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7701 if test "$capstone" != "no" ; then
7702 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7703 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
7704 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
7706 if test "$debug_mutex" = "yes" ; then
7707 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7710 # Hold two types of flag:
7711 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7712 # a thread we have a handle to
7713 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7714 # platform
7715 if test "$pthread_setname_np_w_tid" = "yes" ; then
7716 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7717 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7718 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7719 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7720 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7723 if test "$libpmem" = "yes" ; then
7724 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7725 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7726 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
7729 if test "$libdaxctl" = "yes" ; then
7730 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7733 if test "$bochs" = "yes" ; then
7734 echo "CONFIG_BOCHS=y" >> $config_host_mak
7736 if test "$cloop" = "yes" ; then
7737 echo "CONFIG_CLOOP=y" >> $config_host_mak
7739 if test "$dmg" = "yes" ; then
7740 echo "CONFIG_DMG=y" >> $config_host_mak
7742 if test "$qcow1" = "yes" ; then
7743 echo "CONFIG_QCOW1=y" >> $config_host_mak
7745 if test "$vdi" = "yes" ; then
7746 echo "CONFIG_VDI=y" >> $config_host_mak
7748 if test "$vvfat" = "yes" ; then
7749 echo "CONFIG_VVFAT=y" >> $config_host_mak
7751 if test "$qed" = "yes" ; then
7752 echo "CONFIG_QED=y" >> $config_host_mak
7754 if test "$parallels" = "yes" ; then
7755 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7757 if test "$sheepdog" = "yes" ; then
7758 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7760 if test "$pty_h" = "yes" ; then
7761 echo "HAVE_PTY_H=y" >> $config_host_mak
7763 if test "$have_mlockall" = "yes" ; then
7764 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7766 if test "$fuzzing" = "yes" ; then
7767 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7770 if test "$plugins" = "yes" ; then
7771 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7772 LIBS="-ldl $LIBS"
7773 # Copy the export object list to the build dir
7774 if test "$ld_dynamic_list" = "yes" ; then
7775 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7776 ld_symbols=qemu-plugins-ld.symbols
7777 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7778 elif test "$ld_exported_symbols_list" = "yes" ; then
7779 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7780 ld64_symbols=qemu-plugins-ld64.symbols
7781 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7782 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7783 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7784 else
7785 error_exit \
7786 "If \$plugins=yes, either \$ld_dynamic_list or " \
7787 "\$ld_exported_symbols_list should have been set to 'yes'."
7791 if test -n "$gdb_bin" ; then
7792 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7795 if test "$secret_keyring" = "yes" ; then
7796 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7797 if test "$have_keyutils" = "yes" ; then
7798 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7802 if test "$tcg_interpreter" = "yes"; then
7803 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7804 elif test "$ARCH" = "sparc64" ; then
7805 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7806 elif test "$ARCH" = "s390x" ; then
7807 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7808 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7809 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7810 elif test "$ARCH" = "ppc64" ; then
7811 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7812 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7813 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7814 else
7815 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7818 echo "ROMS=$roms" >> $config_host_mak
7819 echo "MAKE=$make" >> $config_host_mak
7820 echo "INSTALL=$install" >> $config_host_mak
7821 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7822 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7823 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7824 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7825 echo "PYTHON=$python" >> $config_host_mak
7826 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7827 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7828 echo "MESON=$meson" >> $config_host_mak
7829 echo "CC=$cc" >> $config_host_mak
7830 if $iasl -h > /dev/null 2>&1; then
7831 echo "IASL=$iasl" >> $config_host_mak
7833 echo "CXX=$cxx" >> $config_host_mak
7834 echo "OBJCC=$objcc" >> $config_host_mak
7835 echo "AR=$ar" >> $config_host_mak
7836 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7837 echo "AS=$as" >> $config_host_mak
7838 echo "CCAS=$ccas" >> $config_host_mak
7839 echo "CPP=$cpp" >> $config_host_mak
7840 echo "OBJCOPY=$objcopy" >> $config_host_mak
7841 echo "LD=$ld" >> $config_host_mak
7842 echo "RANLIB=$ranlib" >> $config_host_mak
7843 echo "NM=$nm" >> $config_host_mak
7844 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7845 echo "WINDRES=$windres" >> $config_host_mak
7846 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7847 echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
7848 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7849 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7850 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7851 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7852 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7853 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
7854 if test "$sparse" = "yes" ; then
7855 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7857 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7858 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7859 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7860 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7861 echo "LIBS+=$LIBS" >> $config_host_mak
7862 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7863 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7864 echo "EXESUF=$EXESUF" >> $config_host_mak
7865 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7866 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7867 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
7868 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7869 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7870 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7871 if test "$gcov" = "yes" ; then
7872 echo "CONFIG_GCOV=y" >> $config_host_mak
7875 if test "$libudev" != "no"; then
7876 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7877 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7879 if test "$fuzzing" != "no"; then
7880 echo "CONFIG_FUZZ=y" >> $config_host_mak
7883 if test "$edk2_blobs" = "yes" ; then
7884 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7887 if test "$rng_none" = "yes"; then
7888 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7891 # use included Linux headers
7892 if test "$linux" = "yes" ; then
7893 mkdir -p linux-headers
7894 case "$cpu" in
7895 i386|x86_64|x32)
7896 linux_arch=x86
7898 ppc|ppc64|ppc64le)
7899 linux_arch=powerpc
7901 s390x)
7902 linux_arch=s390
7904 aarch64)
7905 linux_arch=arm64
7907 mips64)
7908 linux_arch=mips
7911 # For most CPUs the kernel architecture name and QEMU CPU name match.
7912 linux_arch="$cpu"
7914 esac
7915 # For non-KVM architectures we will not have asm headers
7916 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7917 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7921 for target in $target_list; do
7922 target_dir="$target"
7923 config_target_mak=$target_dir/config-target.mak
7924 target_name=$(echo $target | cut -d '-' -f 1)
7925 target_aligned_only="no"
7926 case "$target_name" in
7927 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7928 target_aligned_only="yes"
7930 esac
7931 target_bigendian="no"
7932 case "$target_name" in
7933 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7934 target_bigendian="yes"
7936 esac
7937 target_softmmu="no"
7938 target_user_only="no"
7939 target_linux_user="no"
7940 target_bsd_user="no"
7941 case "$target" in
7942 ${target_name}-softmmu)
7943 target_softmmu="yes"
7945 ${target_name}-linux-user)
7946 target_user_only="yes"
7947 target_linux_user="yes"
7949 ${target_name}-bsd-user)
7950 target_user_only="yes"
7951 target_bsd_user="yes"
7954 error_exit "Target '$target' not recognised"
7955 exit 1
7957 esac
7959 mkdir -p $target_dir
7960 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7962 bflt="no"
7963 mttcg="no"
7964 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7965 gdb_xml_files=""
7967 TARGET_ARCH="$target_name"
7968 TARGET_BASE_ARCH=""
7969 TARGET_ABI_DIR=""
7970 TARGET_SYSTBL_ABI=""
7971 TARGET_SYSTBL=""
7973 case "$target_name" in
7974 i386)
7975 mttcg="yes"
7976 gdb_xml_files="i386-32bit.xml"
7977 TARGET_SYSTBL_ABI=i386
7978 TARGET_SYSTBL=syscall_32.tbl
7980 x86_64)
7981 TARGET_BASE_ARCH=i386
7982 TARGET_SYSTBL_ABI=common,64
7983 TARGET_SYSTBL=syscall_64.tbl
7984 mttcg="yes"
7985 gdb_xml_files="i386-64bit.xml"
7987 alpha)
7988 mttcg="yes"
7989 TARGET_SYSTBL_ABI=common
7991 arm|armeb)
7992 TARGET_ARCH=arm
7993 TARGET_SYSTBL_ABI=common,oabi
7994 bflt="yes"
7995 mttcg="yes"
7996 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7998 aarch64|aarch64_be)
7999 TARGET_ARCH=aarch64
8000 TARGET_BASE_ARCH=arm
8001 bflt="yes"
8002 mttcg="yes"
8003 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"
8005 avr)
8006 gdb_xml_files="avr-cpu.xml"
8007 target_compiler=$cross_cc_avr
8009 cris)
8011 hppa)
8012 mttcg="yes"
8013 TARGET_SYSTBL_ABI=common,32
8015 lm32)
8017 m68k)
8018 bflt="yes"
8019 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
8020 TARGET_SYSTBL_ABI=common
8022 microblaze|microblazeel)
8023 TARGET_ARCH=microblaze
8024 TARGET_SYSTBL_ABI=common
8025 bflt="yes"
8026 echo "TARGET_ABI32=y" >> $config_target_mak
8028 mips|mipsel)
8029 mttcg="yes"
8030 TARGET_ARCH=mips
8031 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8032 TARGET_SYSTBL_ABI=o32
8033 TARGET_SYSTBL=syscall_o32.tbl
8035 mipsn32|mipsn32el)
8036 mttcg="yes"
8037 TARGET_ARCH=mips64
8038 TARGET_BASE_ARCH=mips
8039 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8040 echo "TARGET_ABI32=y" >> $config_target_mak
8041 TARGET_SYSTBL_ABI=n32
8042 TARGET_SYSTBL=syscall_n32.tbl
8044 mips64|mips64el)
8045 mttcg="no"
8046 TARGET_ARCH=mips64
8047 TARGET_BASE_ARCH=mips
8048 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8049 TARGET_SYSTBL_ABI=n64
8050 TARGET_SYSTBL=syscall_n64.tbl
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
8149 if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
8150 TARGET_SYSTBL=syscall.tbl
8153 upper() {
8154 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8157 target_arch_name="$(upper $TARGET_ARCH)"
8158 echo "TARGET_$target_arch_name=y" >> $config_target_mak
8159 echo "TARGET_NAME=$target_name" >> $config_target_mak
8160 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8161 if [ "$TARGET_ABI_DIR" = "" ]; then
8162 TARGET_ABI_DIR=$TARGET_ARCH
8164 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8165 if [ "$HOST_VARIANT_DIR" != "" ]; then
8166 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8168 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8169 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8170 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak
8173 if supported_xen_target $target; then
8174 echo "CONFIG_XEN=y" >> $config_target_mak
8175 if test "$xen_pci_passthrough" = yes; then
8176 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8179 if supported_kvm_target $target; then
8180 echo "CONFIG_KVM=y" >> $config_target_mak
8182 if supported_hax_target $target; then
8183 echo "CONFIG_HAX=y" >> $config_target_mak
8185 if supported_hvf_target $target; then
8186 echo "CONFIG_HVF=y" >> $config_target_mak
8188 if supported_whpx_target $target; then
8189 echo "CONFIG_WHPX=y" >> $config_target_mak
8191 if test "$target_aligned_only" = "yes" ; then
8192 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8194 if test "$target_bigendian" = "yes" ; then
8195 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8197 if test "$target_softmmu" = "yes" ; then
8198 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8199 if test "$mttcg" = "yes" ; then
8200 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8203 if test "$target_user_only" = "yes" ; then
8204 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8205 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8206 symlink "../qemu-$target_name" "$target_dir/qemu-$target_name"
8207 else
8208 symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name"
8210 if test "$target_linux_user" = "yes" ; then
8211 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8213 list=""
8214 if test ! -z "$gdb_xml_files" ; then
8215 for x in $gdb_xml_files; do
8216 list="$list gdb-xml/$x"
8217 done
8218 echo "TARGET_XML_FILES=$list" >> $config_target_mak
8221 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8222 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8224 if test "$target_bsd_user" = "yes" ; then
8225 echo "CONFIG_BSD_USER=y" >> $config_target_mak
8229 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8231 disas_config() {
8232 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8233 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8236 for i in $ARCH $TARGET_BASE_ARCH ; do
8237 case "$i" in
8238 alpha)
8239 disas_config "ALPHA"
8241 aarch64)
8242 if test -n "${cxx}"; then
8243 disas_config "ARM_A64"
8246 arm)
8247 disas_config "ARM"
8248 if test -n "${cxx}"; then
8249 disas_config "ARM_A64"
8252 avr)
8253 disas_config "AVR"
8255 cris)
8256 disas_config "CRIS"
8258 hppa)
8259 disas_config "HPPA"
8261 i386|x86_64|x32)
8262 disas_config "I386"
8264 lm32)
8265 disas_config "LM32"
8267 m68k)
8268 disas_config "M68K"
8270 microblaze*)
8271 disas_config "MICROBLAZE"
8273 mips*)
8274 disas_config "MIPS"
8275 if test -n "${cxx}"; then
8276 disas_config "NANOMIPS"
8279 moxie*)
8280 disas_config "MOXIE"
8282 nios2)
8283 disas_config "NIOS2"
8285 or1k)
8286 disas_config "OPENRISC"
8288 ppc*)
8289 disas_config "PPC"
8291 riscv*)
8292 disas_config "RISCV"
8295 disas_config "RX"
8297 s390*)
8298 disas_config "S390"
8300 sh4)
8301 disas_config "SH4"
8303 sparc*)
8304 disas_config "SPARC"
8306 xtensa*)
8307 disas_config "XTENSA"
8309 esac
8310 done
8311 if test "$tcg_interpreter" = "yes" ; then
8312 disas_config "TCI"
8315 done # for target in $targets
8317 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8318 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8320 if [ "$fdt" = "git" ]; then
8321 echo "config-host.h: dtc/all" >> $config_host_mak
8323 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8324 echo "config-host.h: capstone/all" >> $config_host_mak
8326 if test -n "$LIBCAPSTONE"; then
8327 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8330 if test "$numa" = "yes"; then
8331 echo "CONFIG_NUMA=y" >> $config_host_mak
8332 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
8335 if test "$ccache_cpp2" = "yes"; then
8336 echo "export CCACHE_CPP2=y" >> $config_host_mak
8339 if test "$safe_stack" = "yes"; then
8340 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8343 # If we're using a separate build tree, set it up now.
8344 # DIRS are directories which we simply mkdir in the build tree;
8345 # LINKS are things to symlink back into the source tree
8346 # (these can be both files and directories).
8347 # Caution: do not add files or directories here using wildcards. This
8348 # will result in problems later if a new file matching the wildcard is
8349 # added to the source tree -- nothing will cause configure to be rerun
8350 # so the build tree will be missing the link back to the new file, and
8351 # tests might fail. Prefer to keep the relevant files in their own
8352 # directory and symlink the directory instead.
8353 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8354 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8355 DIRS="$DIRS docs docs/interop fsdev scsi"
8356 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8357 DIRS="$DIRS roms/seabios"
8358 LINKS="Makefile"
8359 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8360 LINKS="$LINKS tests/tcg/Makefile.target"
8361 LINKS="$LINKS tests/plugin/Makefile"
8362 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8363 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8364 LINKS="$LINKS roms/seabios/Makefile"
8365 LINKS="$LINKS pc-bios/qemu-icon.bmp"
8366 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8367 LINKS="$LINKS tests/acceptance tests/data"
8368 LINKS="$LINKS tests/qemu-iotests/check"
8369 LINKS="$LINKS python"
8370 for bios_file in \
8371 $source_path/pc-bios/*.bin \
8372 $source_path/pc-bios/*.lid \
8373 $source_path/pc-bios/*.rom \
8374 $source_path/pc-bios/*.dtb \
8375 $source_path/pc-bios/*.img \
8376 $source_path/pc-bios/openbios-* \
8377 $source_path/pc-bios/u-boot.* \
8378 $source_path/pc-bios/edk2-*.fd.bz2 \
8379 $source_path/pc-bios/palcode-*
8381 LINKS="$LINKS pc-bios/$(basename $bios_file)"
8382 done
8383 mkdir -p $DIRS
8384 for f in $LINKS ; do
8385 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8386 symlink "$source_path/$f" "$f"
8388 done
8390 (for i in $cross_cc_vars; do
8391 export $i
8392 done
8393 export target_list source_path use_containers
8394 $source_path/tests/tcg/configure.sh)
8396 # temporary config to build submodules
8397 for rom in seabios; do
8398 config_mak=roms/$rom/config.mak
8399 echo "# Automatically generated by configure - do not modify" > $config_mak
8400 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8401 echo "AS=$as" >> $config_mak
8402 echo "CCAS=$ccas" >> $config_mak
8403 echo "CC=$cc" >> $config_mak
8404 echo "BCC=bcc" >> $config_mak
8405 echo "CPP=$cpp" >> $config_mak
8406 echo "OBJCOPY=objcopy" >> $config_mak
8407 echo "IASL=$iasl" >> $config_mak
8408 echo "LD=$ld" >> $config_mak
8409 echo "RANLIB=$ranlib" >> $config_mak
8410 done
8412 # set up qemu-iotests in this build directory
8413 iotests_common_env="tests/qemu-iotests/common.env"
8415 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8416 echo >> "$iotests_common_env"
8417 echo "export PYTHON='$python'" >> "$iotests_common_env"
8419 if test "$skip_meson" = no; then
8420 cross="config-meson.cross.new"
8421 meson_quote() {
8422 echo "['$(echo $* | sed "s/ /','/g")']"
8425 echo "# Automatically generated by configure - do not modify" > $cross
8426 echo "[properties]" >> $cross
8427 test -z "$cxx" && echo "link_language = 'c'" >> $cross
8428 echo "[binaries]" >> $cross
8429 echo "c = $(meson_quote $cc)" >> $cross
8430 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
8431 echo "ar = $(meson_quote $ar)" >> $cross
8432 echo "nm = $(meson_quote $nm)" >> $cross
8433 echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
8434 echo "ranlib = $(meson_quote $ranlib)" >> $cross
8435 echo "strip = $(meson_quote $strip)" >> $cross
8436 echo "windres = $(meson_quote $windres)" >> $cross
8437 if test -n "$cross_prefix"; then
8438 cross_arg="--cross-file config-meson.cross"
8439 # Hack: Meson expects an absolute path for the *build* machine
8440 # for the prefix, so add a slash in front of a Windows path that
8441 # includes a drive letter.
8443 # See https://github.com/mesonbuild/meson/issues/7577.
8444 echo "[host_machine]" >> $cross
8445 if test "$mingw32" = "yes" ; then
8446 echo "system = 'windows'" >> $cross
8447 case $prefix in
8448 ?:*) pre_prefix=/ ;;
8449 esac
8451 case "$ARCH" in
8452 i386|x86_64)
8453 echo "cpu_family = 'x86'" >> $cross
8455 ppc64le)
8456 echo "cpu_family = 'ppc64'" >> $cross
8459 echo "cpu_family = '$ARCH'" >> $cross
8461 esac
8462 echo "cpu = '$cpu'" >> $cross
8463 if test "$bigendian" = "yes" ; then
8464 echo "endian = 'big'" >> $cross
8465 else
8466 echo "endian = 'little'" >> $cross
8468 else
8469 cross_arg="--native-file config-meson.cross"
8471 mv $cross config-meson.cross
8473 rm -rf meson-private meson-info meson-logs
8474 NINJA=$PWD/ninjatool $meson setup \
8475 --prefix "${pre_prefix}$prefix" \
8476 --libdir "${pre_prefix}$libdir" \
8477 --libexecdir "${pre_prefix}$libexecdir" \
8478 --bindir "${pre_prefix}$bindir" \
8479 --includedir "${pre_prefix}$includedir" \
8480 --datadir "${pre_prefix}$datadir" \
8481 --mandir "${pre_prefix}$mandir" \
8482 --sysconfdir "${pre_prefix}$sysconfdir" \
8483 --localstatedir "${pre_prefix}$local_statedir" \
8484 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8485 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
8486 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
8487 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
8488 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
8489 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
8490 $cross_arg \
8491 "$PWD" "$source_path"
8493 if test "$?" -ne 0 ; then
8494 error_exit "meson setup failed"
8496 touch ninjatool.stamp
8499 # Save the configure command line for later reuse.
8500 cat <<EOD >config.status
8501 #!/bin/sh
8502 # Generated by configure.
8503 # Run this file to recreate the current configuration.
8504 # Compiler output produced by configure, useful for debugging
8505 # configure, is in config.log if it exists.
8508 preserve_env() {
8509 envname=$1
8511 eval envval=\$$envname
8513 if test -n "$envval"
8514 then
8515 echo "$envname='$envval'" >> config.status
8516 echo "export $envname" >> config.status
8517 else
8518 echo "unset $envname" >> config.status
8522 # Preserve various env variables that influence what
8523 # features/build target configure will detect
8524 preserve_env AR
8525 preserve_env AS
8526 preserve_env CC
8527 preserve_env CPP
8528 preserve_env CXX
8529 preserve_env INSTALL
8530 preserve_env LD
8531 preserve_env LD_LIBRARY_PATH
8532 preserve_env LIBTOOL
8533 preserve_env MAKE
8534 preserve_env NM
8535 preserve_env OBJCOPY
8536 preserve_env PATH
8537 preserve_env PKG_CONFIG
8538 preserve_env PKG_CONFIG_LIBDIR
8539 preserve_env PKG_CONFIG_PATH
8540 preserve_env PYTHON
8541 preserve_env SDL2_CONFIG
8542 preserve_env SMBD
8543 preserve_env STRIP
8544 preserve_env WINDRES
8546 printf "exec" >>config.status
8547 for i in "$0" "$@"; do
8548 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
8549 done
8550 echo ' "$@"' >>config.status
8551 chmod +x config.status
8553 rm -r "$TMPDIR1"