virtio-gpu: make virtio_gpu_ops static
[qemu/ar7.git] / configure
blobce27eafb0a9eb9732b77f13c463fb97c4b4dd522
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 TMPTXT="${TMPDIR1}/${TMPB}.txt"
83 rm -f config.log
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
92 print_error() {
93 (echo
94 echo "ERROR: $1"
95 while test -n "$2"; do
96 echo " $2"
97 shift
98 done
99 echo) >&2
102 error_exit() {
103 print_error "$@"
104 exit 1
107 do_compiler() {
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
110 local compiler="$1"
111 shift
112 if test -n "$BASH_VERSION"; then eval '
113 echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116 '; fi
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log 2>&1 || return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
124 return 0
126 # Don't bother rerunning the compile if we were already using -Werror
127 case "$*" in
128 *-Werror*)
129 return 0
131 esac
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log 2>&1 && return $?
134 error_exit "configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
140 do_cc() {
141 do_compiler "$cc" "$@"
144 do_cxx() {
145 do_compiler "$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150 eval $1=\${$1:+\"\$$1 \"}\$2
153 update_cxxflags() {
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159 for arg in $QEMU_CFLAGS; do
160 case $arg in
161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
167 esac
168 done
171 compile_object() {
172 local_cflags="$1"
173 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
176 compile_prog() {
177 local_cflags="$1"
178 local_ldflags="$2"
179 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
182 # symbolically link $1 to $2. Portable version of "ln -sf".
183 symlink() {
184 rm -rf "$2"
185 mkdir -p "$(dirname "$2")"
186 ln -s "$1" "$2"
189 # check whether a command is available to this shell (may be either an
190 # executable or a builtin)
191 has() {
192 type "$1" >/dev/null 2>&1
195 version_ge () {
196 local_ver1=`echo $1 | tr . ' '`
197 local_ver2=`echo $2 | tr . ' '`
198 while true; do
199 set x $local_ver1
200 local_first=${2-0}
201 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
202 shift ${2:+2}
203 local_ver1=$*
204 set x $local_ver2
205 # the second argument finished, the first must be greater or equal
206 test $# = 1 && return 0
207 test $local_first -lt $2 && return 1
208 test $local_first -gt $2 && return 0
209 shift ${2:+2}
210 local_ver2=$*
211 done
214 have_backend () {
215 echo "$trace_backends" | grep "$1" >/dev/null
218 glob() {
219 eval test -z '"${1#'"$2"'}"'
222 supported_hax_target() {
223 test "$hax" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 i386|x86_64)
227 return 0
229 esac
230 return 1
233 supported_kvm_target() {
234 test "$kvm" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}:$cpu" in
237 aarch64:aarch64 | \
238 i386:i386 | i386:x86_64 | i386:x32 | \
239 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
240 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
241 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
242 s390x:s390x)
243 return 0
245 esac
246 return 1
249 supported_xen_target() {
250 test "$xen" = "yes" || return 1
251 glob "$1" "*-softmmu" || return 1
252 # Only i386 and x86_64 provide the xenpv machine.
253 case "${1%-softmmu}" in
254 i386|x86_64)
255 return 0
257 esac
258 return 1
261 supported_hvf_target() {
262 test "$hvf" = "yes" || return 1
263 glob "$1" "*-softmmu" || return 1
264 case "${1%-softmmu}" in
265 x86_64)
266 return 0
268 esac
269 return 1
272 supported_whpx_target() {
273 test "$whpx" = "yes" || return 1
274 glob "$1" "*-softmmu" || return 1
275 case "${1%-softmmu}" in
276 i386|x86_64)
277 return 0
279 esac
280 return 1
283 supported_target() {
284 case "$1" in
285 *-softmmu)
287 *-linux-user)
288 if test "$linux" != "yes"; then
289 print_error "Target '$target' is only available on a Linux host"
290 return 1
293 *-bsd-user)
294 if test "$bsd" != "yes"; then
295 print_error "Target '$target' is only available on a BSD host"
296 return 1
300 print_error "Invalid target name '$target'"
301 return 1
303 esac
304 test "$tcg" = "yes" && return 0
305 supported_kvm_target "$1" && return 0
306 supported_xen_target "$1" && return 0
307 supported_hax_target "$1" && return 0
308 supported_hvf_target "$1" && return 0
309 supported_whpx_target "$1" && return 0
310 print_error "TCG disabled, but hardware accelerator not available for '$target'"
311 return 1
315 ld_has() {
316 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
319 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
320 then
321 error_exit "main directory cannot contain spaces nor colons"
324 # default parameters
325 cpu=""
326 iasl="iasl"
327 interp_prefix="/usr/gnemul/qemu-%M"
328 static="no"
329 cross_prefix=""
330 audio_drv_list=""
331 block_drv_rw_whitelist=""
332 block_drv_ro_whitelist=""
333 host_cc="cc"
334 audio_win_int=""
335 libs_qga=""
336 debug_info="yes"
337 stack_protector=""
338 safe_stack=""
339 use_containers="yes"
340 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
342 if test -e "$source_path/.git"
343 then
344 git_update=yes
345 git_submodules="ui/keycodemapdb"
346 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
347 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
348 else
349 git_update=no
350 git_submodules=""
352 if ! test -f "$source_path/ui/keycodemapdb/README"
353 then
354 echo
355 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
356 echo
357 echo "This is not a GIT checkout but module content appears to"
358 echo "be missing. Do not use 'git archive' or GitHub download links"
359 echo "to acquire QEMU source archives. Non-GIT builds are only"
360 echo "supported with source archives linked from:"
361 echo
362 echo " https://www.qemu.org/download/#source"
363 echo
364 echo "Developers working with GIT can use scripts/archive-source.sh"
365 echo "if they need to create valid source archives."
366 echo
367 exit 1
370 git="git"
372 # Don't accept a target_list environment variable.
373 unset target_list
374 unset target_list_exclude
376 # Default value for a variable defining feature "foo".
377 # * foo="no" feature will only be used if --enable-foo arg is given
378 # * foo="" feature will be searched for, and if found, will be used
379 # unless --disable-foo is given
380 # * foo="yes" this value will only be set by --enable-foo flag.
381 # feature will searched for,
382 # if not found, configure exits with error
384 # Always add --enable-foo and --disable-foo command line args.
385 # Distributions want to ensure that several features are compiled in, and it
386 # is impossible without a --enable-foo that exits if a feature is not found.
388 brlapi=""
389 curl=""
390 curses=""
391 docs=""
392 fdt=""
393 netmap="no"
394 sdl="auto"
395 sdl_image="auto"
396 virtfs=""
397 mpath=""
398 vnc="enabled"
399 sparse="no"
400 vde=""
401 vnc_sasl="auto"
402 vnc_jpeg="auto"
403 vnc_png="auto"
404 xkbcommon="auto"
405 xen=""
406 xen_ctrl_version=""
407 xen_pci_passthrough=""
408 linux_aio=""
409 linux_io_uring=""
410 cap_ng=""
411 attr=""
412 libattr=""
413 xfs=""
414 tcg="yes"
415 membarrier=""
416 vhost_net=""
417 vhost_crypto=""
418 vhost_scsi=""
419 vhost_vsock=""
420 vhost_user=""
421 vhost_user_fs=""
422 kvm="no"
423 hax="no"
424 hvf="no"
425 whpx="no"
426 rdma=""
427 pvrdma=""
428 gprof="no"
429 debug_tcg="no"
430 debug="no"
431 sanitizers="no"
432 tsan="no"
433 fortify_source=""
434 strip_opt="yes"
435 tcg_interpreter="no"
436 bigendian="no"
437 mingw32="no"
438 gcov="no"
439 EXESUF=""
440 HOST_DSOSUF=".so"
441 modules="no"
442 module_upgrades="no"
443 prefix="/usr/local"
444 qemu_suffix="qemu"
445 slirp=""
446 oss_lib=""
447 bsd="no"
448 linux="no"
449 solaris="no"
450 profiler="no"
451 cocoa="no"
452 softmmu="yes"
453 linux_user="no"
454 bsd_user="no"
455 blobs="yes"
456 edk2_blobs="no"
457 pkgversion=""
458 pie=""
459 qom_cast_debug="yes"
460 trace_backends="log"
461 trace_file="trace"
462 spice=""
463 rbd=""
464 smartcard=""
465 u2f="auto"
466 libusb=""
467 usb_redir=""
468 opengl=""
469 opengl_dmabuf="no"
470 cpuid_h="no"
471 avx2_opt=""
472 capstone=""
473 lzo=""
474 snappy=""
475 bzip2=""
476 lzfse=""
477 zstd=""
478 guest_agent=""
479 guest_agent_with_vss="no"
480 guest_agent_ntddscsi="no"
481 guest_agent_msi=""
482 vss_win32_sdk=""
483 win_sdk="no"
484 want_tools=""
485 libiscsi=""
486 libnfs=""
487 coroutine=""
488 coroutine_pool=""
489 debug_stack_usage="no"
490 crypto_afalg="no"
491 seccomp=""
492 glusterfs=""
493 glusterfs_xlator_opt="no"
494 glusterfs_discard="no"
495 glusterfs_fallocate="no"
496 glusterfs_zerofill="no"
497 glusterfs_ftruncate_has_stat="no"
498 glusterfs_iocb_has_stat="no"
499 gtk=""
500 gtk_gl="no"
501 tls_priority="NORMAL"
502 gnutls=""
503 nettle=""
504 nettle_xts="no"
505 gcrypt=""
506 gcrypt_hmac="no"
507 gcrypt_xts="no"
508 qemu_private_xts="yes"
509 auth_pam=""
510 vte=""
511 virglrenderer=""
512 tpm=""
513 libssh=""
514 live_block_migration="yes"
515 numa=""
516 tcmalloc="no"
517 jemalloc="no"
518 replication="yes"
519 bochs="yes"
520 cloop="yes"
521 dmg="yes"
522 qcow1="yes"
523 vdi="yes"
524 vvfat="yes"
525 qed="yes"
526 parallels="yes"
527 sheepdog="yes"
528 libxml2=""
529 debug_mutex="no"
530 libpmem=""
531 default_devices="yes"
532 plugins="no"
533 fuzzing="no"
534 rng_none="no"
535 secret_keyring=""
536 libdaxctl=""
537 meson=""
538 ninja=""
539 skip_meson=no
540 gettext=""
542 bogus_os="no"
543 malloc_trim=""
545 deprecated_features=""
547 # parse CC options first
548 for opt do
549 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
550 case "$opt" in
551 --cross-prefix=*) cross_prefix="$optarg"
553 --cc=*) CC="$optarg"
555 --cxx=*) CXX="$optarg"
557 --cpu=*) cpu="$optarg"
559 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
560 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
562 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
564 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
565 EXTRA_LDFLAGS="$optarg"
567 --enable-debug-info) debug_info="yes"
569 --disable-debug-info) debug_info="no"
571 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
573 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
574 eval "cross_cc_cflags_${cc_arch}=\$optarg"
575 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
577 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
578 cc_archs="$cc_archs $cc_arch"
579 eval "cross_cc_${cc_arch}=\$optarg"
580 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
582 esac
583 done
584 # OS specific
585 # Using uname is really, really broken. Once we have the right set of checks
586 # we can eliminate its usage altogether.
588 # Preferred compiler:
589 # ${CC} (if set)
590 # ${cross_prefix}gcc (if cross-prefix specified)
591 # system compiler
592 if test -z "${CC}${cross_prefix}"; then
593 cc="$host_cc"
594 else
595 cc="${CC-${cross_prefix}gcc}"
598 if test -z "${CXX}${cross_prefix}"; then
599 cxx="c++"
600 else
601 cxx="${CXX-${cross_prefix}g++}"
604 ar="${AR-${cross_prefix}ar}"
605 as="${AS-${cross_prefix}as}"
606 ccas="${CCAS-$cc}"
607 cpp="${CPP-$cc -E}"
608 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
609 ld="${LD-${cross_prefix}ld}"
610 ranlib="${RANLIB-${cross_prefix}ranlib}"
611 nm="${NM-${cross_prefix}nm}"
612 strip="${STRIP-${cross_prefix}strip}"
613 windres="${WINDRES-${cross_prefix}windres}"
614 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
615 query_pkg_config() {
616 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
618 pkg_config=query_pkg_config
619 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
621 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
622 ARFLAGS="${ARFLAGS-rv}"
624 # default flags for all hosts
625 # We use -fwrapv to tell the compiler that we require a C dialect where
626 # left shift of signed integers is well defined and has the expected
627 # 2s-complement style results. (Both clang and gcc agree that it
628 # provides these semantics.)
629 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
630 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
631 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
632 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
633 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
634 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
635 CFLAGS="-std=gnu99 -Wall"
638 check_define() {
639 cat > $TMPC <<EOF
640 #if !defined($1)
641 #error $1 not defined
642 #endif
643 int main(void) { return 0; }
645 compile_object
648 check_include() {
649 cat > $TMPC <<EOF
650 #include <$1>
651 int main(void) { return 0; }
653 compile_object
656 write_c_skeleton() {
657 cat > $TMPC <<EOF
658 int main(void) { return 0; }
662 write_c_fuzzer_skeleton() {
663 cat > $TMPC <<EOF
664 #include <stdint.h>
665 #include <sys/types.h>
666 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
667 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
671 if check_define __linux__ ; then
672 targetos="Linux"
673 elif check_define _WIN32 ; then
674 targetos='MINGW32'
675 elif check_define __OpenBSD__ ; then
676 targetos='OpenBSD'
677 elif check_define __sun__ ; then
678 targetos='SunOS'
679 elif check_define __HAIKU__ ; then
680 targetos='Haiku'
681 elif check_define __FreeBSD__ ; then
682 targetos='FreeBSD'
683 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
684 targetos='GNU/kFreeBSD'
685 elif check_define __DragonFly__ ; then
686 targetos='DragonFly'
687 elif check_define __NetBSD__; then
688 targetos='NetBSD'
689 elif check_define __APPLE__; then
690 targetos='Darwin'
691 else
692 # This is a fatal error, but don't report it yet, because we
693 # might be going to just print the --help text, or it might
694 # be the result of a missing compiler.
695 targetos='bogus'
696 bogus_os='yes'
699 # Some host OSes need non-standard checks for which CPU to use.
700 # Note that these checks are broken for cross-compilation: if you're
701 # cross-compiling to one of these OSes then you'll need to specify
702 # the correct CPU with the --cpu option.
703 case $targetos in
704 Darwin)
705 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
706 # run 64-bit userspace code.
707 # If the user didn't specify a CPU explicitly and the kernel says this is
708 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
709 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
710 cpu="x86_64"
713 SunOS)
714 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
715 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
716 cpu="x86_64"
718 esac
720 if test ! -z "$cpu" ; then
721 # command line argument
723 elif check_define __i386__ ; then
724 cpu="i386"
725 elif check_define __x86_64__ ; then
726 if check_define __ILP32__ ; then
727 cpu="x32"
728 else
729 cpu="x86_64"
731 elif check_define __sparc__ ; then
732 if check_define __arch64__ ; then
733 cpu="sparc64"
734 else
735 cpu="sparc"
737 elif check_define _ARCH_PPC ; then
738 if check_define _ARCH_PPC64 ; then
739 if check_define _LITTLE_ENDIAN ; then
740 cpu="ppc64le"
741 else
742 cpu="ppc64"
744 else
745 cpu="ppc"
747 elif check_define __mips__ ; then
748 cpu="mips"
749 elif check_define __s390__ ; then
750 if check_define __s390x__ ; then
751 cpu="s390x"
752 else
753 cpu="s390"
755 elif check_define __riscv ; then
756 if check_define _LP64 ; then
757 cpu="riscv64"
758 else
759 cpu="riscv32"
761 elif check_define __arm__ ; then
762 cpu="arm"
763 elif check_define __aarch64__ ; then
764 cpu="aarch64"
765 else
766 cpu=$(uname -m)
769 ARCH=
770 # Normalise host CPU name and set ARCH.
771 # Note that this case should only have supported host CPUs, not guests.
772 case "$cpu" in
773 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
775 ppc64le)
776 ARCH="ppc64"
778 i386|i486|i586|i686|i86pc|BePC)
779 cpu="i386"
781 x86_64|amd64)
782 cpu="x86_64"
784 armv*b|armv*l|arm)
785 cpu="arm"
787 aarch64)
788 cpu="aarch64"
790 mips*)
791 cpu="mips"
793 sparc|sun4[cdmuv])
794 cpu="sparc"
797 # This will result in either an error or falling back to TCI later
798 ARCH=unknown
800 esac
801 if test -z "$ARCH"; then
802 ARCH="$cpu"
805 # OS specific
807 # host *BSD for user mode
808 HOST_VARIANT_DIR=""
810 case $targetos in
811 MINGW32*)
812 mingw32="yes"
813 hax="yes"
814 whpx=""
815 vhost_user="no"
816 audio_possible_drivers="dsound sdl"
817 if check_include dsound.h; then
818 audio_drv_list="dsound"
819 else
820 audio_drv_list=""
822 supported_os="yes"
823 pie="no"
825 GNU/kFreeBSD)
826 bsd="yes"
827 audio_drv_list="oss try-sdl"
828 audio_possible_drivers="oss sdl pa"
830 FreeBSD)
831 bsd="yes"
832 make="${MAKE-gmake}"
833 audio_drv_list="oss try-sdl"
834 audio_possible_drivers="oss sdl pa"
835 # needed for kinfo_getvmmap(3) in libutil.h
836 netmap="" # enable netmap autodetect
837 HOST_VARIANT_DIR="freebsd"
839 DragonFly)
840 bsd="yes"
841 make="${MAKE-gmake}"
842 audio_drv_list="oss try-sdl"
843 audio_possible_drivers="oss sdl pa"
844 HOST_VARIANT_DIR="dragonfly"
846 NetBSD)
847 bsd="yes"
848 hax="yes"
849 make="${MAKE-gmake}"
850 audio_drv_list="oss try-sdl"
851 audio_possible_drivers="oss sdl"
852 oss_lib="-lossaudio"
853 HOST_VARIANT_DIR="netbsd"
855 OpenBSD)
856 bsd="yes"
857 make="${MAKE-gmake}"
858 audio_drv_list="try-sdl"
859 audio_possible_drivers="sdl"
860 HOST_VARIANT_DIR="openbsd"
862 Darwin)
863 bsd="yes"
864 darwin="yes"
865 hax="yes"
866 hvf="yes"
867 if [ "$cpu" = "x86_64" ] ; then
868 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
869 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
871 cocoa="yes"
872 audio_drv_list="coreaudio try-sdl"
873 audio_possible_drivers="coreaudio sdl"
874 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
875 # Disable attempts to use ObjectiveC features in os/object.h since they
876 # won't work when we're compiling with gcc as a C compiler.
877 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
878 HOST_VARIANT_DIR="darwin"
880 SunOS)
881 solaris="yes"
882 make="${MAKE-gmake}"
883 smbd="${SMBD-/usr/sfw/sbin/smbd}"
884 if test -f /usr/include/sys/soundcard.h ; then
885 audio_drv_list="oss try-sdl"
887 audio_possible_drivers="oss sdl"
888 # needed for CMSG_ macros in sys/socket.h
889 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
890 # needed for TIOCWIN* defines in termios.h
891 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
893 Haiku)
894 haiku="yes"
895 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
897 Linux)
898 audio_drv_list="try-pa oss"
899 audio_possible_drivers="oss alsa sdl pa"
900 linux="yes"
901 linux_user="yes"
902 kvm="yes"
903 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES"
904 libudev="yes"
906 esac
908 if [ "$bsd" = "yes" ] ; then
909 if [ "$darwin" != "yes" ] ; then
910 bsd_user="yes"
914 : ${make=${MAKE-make}}
916 # We prefer python 3.x. A bare 'python' is traditionally
917 # python 2.x, but some distros have it as python 3.x, so
918 # we check that too
919 python=
920 explicit_python=no
921 for binary in "${PYTHON-python3}" python
923 if has "$binary"
924 then
925 python=$(command -v "$binary")
926 break
928 done
930 sphinx_build=
931 for binary in sphinx-build-3 sphinx-build
933 if has "$binary"
934 then
935 sphinx_build=$(command -v "$binary")
936 break
938 done
940 # Check for ancillary tools used in testing
941 genisoimage=
942 for binary in genisoimage mkisofs
944 if has $binary
945 then
946 genisoimage=$(command -v "$binary")
947 break
949 done
951 : ${smbd=${SMBD-/usr/sbin/smbd}}
953 # Default objcc to clang if available, otherwise use CC
954 if has clang; then
955 objcc=clang
956 else
957 objcc="$cc"
960 if test "$mingw32" = "yes" ; then
961 EXESUF=".exe"
962 HOST_DSOSUF=".dll"
963 # MinGW needs -mthreads for TLS and macro _MT.
964 CFLAGS="-mthreads $CFLAGS"
965 write_c_skeleton;
966 prefix="c:/Program Files/QEMU"
967 qemu_suffix=""
968 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
971 werror=""
973 for opt do
974 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
975 case "$opt" in
976 --help|-h) show_help=yes
978 --version|-V) exec cat $source_path/VERSION
980 --prefix=*) prefix="$optarg"
982 --interp-prefix=*) interp_prefix="$optarg"
984 --cross-prefix=*)
986 --cc=*)
988 --host-cc=*) host_cc="$optarg"
990 --cxx=*)
992 --iasl=*) iasl="$optarg"
994 --objcc=*) objcc="$optarg"
996 --make=*) make="$optarg"
998 --install=*)
1000 --python=*) python="$optarg" ; explicit_python=yes
1002 --sphinx-build=*) sphinx_build="$optarg"
1004 --skip-meson) skip_meson=yes
1006 --meson=*) meson="$optarg"
1008 --ninja=*) ninja="$optarg"
1010 --smbd=*) smbd="$optarg"
1012 --extra-cflags=*)
1014 --extra-cxxflags=*)
1016 --extra-ldflags=*)
1018 --enable-debug-info)
1020 --disable-debug-info)
1022 --cross-cc-*)
1024 --enable-modules)
1025 modules="yes"
1027 --disable-modules)
1028 modules="no"
1030 --disable-module-upgrades) module_upgrades="no"
1032 --enable-module-upgrades) module_upgrades="yes"
1034 --cpu=*)
1036 --target-list=*) target_list="$optarg"
1037 if test "$target_list_exclude"; then
1038 error_exit "Can't mix --target-list with --target-list-exclude"
1041 --target-list-exclude=*) target_list_exclude="$optarg"
1042 if test "$target_list"; then
1043 error_exit "Can't mix --target-list-exclude with --target-list"
1046 --enable-trace-backends=*) trace_backends="$optarg"
1048 # XXX: backwards compatibility
1049 --enable-trace-backend=*) trace_backends="$optarg"
1051 --with-trace-file=*) trace_file="$optarg"
1053 --with-default-devices) default_devices="yes"
1055 --without-default-devices) default_devices="no"
1057 --enable-gprof) gprof="yes"
1059 --enable-gcov) gcov="yes"
1061 --static)
1062 static="yes"
1063 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1065 --mandir=*) mandir="$optarg"
1067 --bindir=*) bindir="$optarg"
1069 --libdir=*) libdir="$optarg"
1071 --libexecdir=*) libexecdir="$optarg"
1073 --includedir=*) includedir="$optarg"
1075 --datadir=*) datadir="$optarg"
1077 --with-suffix=*) qemu_suffix="$optarg"
1079 --docdir=*) qemu_docdir="$optarg"
1081 --sysconfdir=*) sysconfdir="$optarg"
1083 --localstatedir=*) local_statedir="$optarg"
1085 --firmwarepath=*) firmwarepath="$optarg"
1087 --host=*|--build=*|\
1088 --disable-dependency-tracking|\
1089 --sbindir=*|--sharedstatedir=*|\
1090 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1091 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1092 # These switches are silently ignored, for compatibility with
1093 # autoconf-generated configure scripts. This allows QEMU's
1094 # configure to be used by RPM and similar macros that set
1095 # lots of directory switches by default.
1097 --disable-sdl) sdl="disabled"
1099 --enable-sdl) sdl="enabled"
1101 --disable-sdl-image) sdl_image="disabled"
1103 --enable-sdl-image) sdl_image="enabled"
1105 --disable-qom-cast-debug) qom_cast_debug="no"
1107 --enable-qom-cast-debug) qom_cast_debug="yes"
1109 --disable-virtfs) virtfs="no"
1111 --enable-virtfs) virtfs="yes"
1113 --disable-mpath) mpath="no"
1115 --enable-mpath) mpath="yes"
1117 --disable-vnc) vnc="disabled"
1119 --enable-vnc) vnc="enabled"
1121 --disable-gettext) gettext="false"
1123 --enable-gettext) gettext="true"
1125 --oss-lib=*) oss_lib="$optarg"
1127 --audio-drv-list=*) audio_drv_list="$optarg"
1129 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1131 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1133 --enable-debug-tcg) debug_tcg="yes"
1135 --disable-debug-tcg) debug_tcg="no"
1137 --enable-debug)
1138 # Enable debugging options that aren't excessively noisy
1139 debug_tcg="yes"
1140 debug_mutex="yes"
1141 debug="yes"
1142 strip_opt="no"
1143 fortify_source="no"
1145 --enable-sanitizers) sanitizers="yes"
1147 --disable-sanitizers) sanitizers="no"
1149 --enable-tsan) tsan="yes"
1151 --disable-tsan) tsan="no"
1153 --enable-sparse) sparse="yes"
1155 --disable-sparse) sparse="no"
1157 --disable-strip) strip_opt="no"
1159 --disable-vnc-sasl) vnc_sasl="disabled"
1161 --enable-vnc-sasl) vnc_sasl="enabled"
1163 --disable-vnc-jpeg) vnc_jpeg="disabled"
1165 --enable-vnc-jpeg) vnc_jpeg="enabled"
1167 --disable-vnc-png) vnc_png="disabled"
1169 --enable-vnc-png) vnc_png="enabled"
1171 --disable-slirp) slirp="no"
1173 --enable-slirp=git) slirp="git"
1175 --enable-slirp=system) slirp="system"
1177 --disable-vde) vde="no"
1179 --enable-vde) vde="yes"
1181 --disable-netmap) netmap="no"
1183 --enable-netmap) netmap="yes"
1185 --disable-xen) xen="no"
1187 --enable-xen) xen="yes"
1189 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1191 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1193 --disable-brlapi) brlapi="no"
1195 --enable-brlapi) brlapi="yes"
1197 --disable-kvm) kvm="no"
1199 --enable-kvm) kvm="yes"
1201 --disable-hax) hax="no"
1203 --enable-hax) hax="yes"
1205 --disable-hvf) hvf="no"
1207 --enable-hvf) hvf="yes"
1209 --disable-whpx) whpx="no"
1211 --enable-whpx) whpx="yes"
1213 --disable-tcg-interpreter) tcg_interpreter="no"
1215 --enable-tcg-interpreter) tcg_interpreter="yes"
1217 --disable-cap-ng) cap_ng="no"
1219 --enable-cap-ng) cap_ng="yes"
1221 --disable-tcg) tcg="no"
1223 --enable-tcg) tcg="yes"
1225 --disable-malloc-trim) malloc_trim="no"
1227 --enable-malloc-trim) malloc_trim="yes"
1229 --disable-spice) spice="no"
1231 --enable-spice) spice="yes"
1233 --disable-libiscsi) libiscsi="no"
1235 --enable-libiscsi) libiscsi="yes"
1237 --disable-libnfs) libnfs="no"
1239 --enable-libnfs) libnfs="yes"
1241 --enable-profiler) profiler="yes"
1243 --disable-cocoa) cocoa="no"
1245 --enable-cocoa)
1246 cocoa="yes" ;
1247 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1249 --disable-system) softmmu="no"
1251 --enable-system) softmmu="yes"
1253 --disable-user)
1254 linux_user="no" ;
1255 bsd_user="no" ;
1257 --enable-user) ;;
1258 --disable-linux-user) linux_user="no"
1260 --enable-linux-user) linux_user="yes"
1262 --disable-bsd-user) bsd_user="no"
1264 --enable-bsd-user) bsd_user="yes"
1266 --enable-pie) pie="yes"
1268 --disable-pie) pie="no"
1270 --enable-werror) werror="yes"
1272 --disable-werror) werror="no"
1274 --enable-stack-protector) stack_protector="yes"
1276 --disable-stack-protector) stack_protector="no"
1278 --enable-safe-stack) safe_stack="yes"
1280 --disable-safe-stack) safe_stack="no"
1282 --disable-curses) curses="no"
1284 --enable-curses) curses="yes"
1286 --disable-iconv) iconv="no"
1288 --enable-iconv) iconv="yes"
1290 --disable-curl) curl="no"
1292 --enable-curl) curl="yes"
1294 --disable-fdt) fdt="no"
1296 --enable-fdt) fdt="yes"
1298 --disable-linux-aio) linux_aio="no"
1300 --enable-linux-aio) linux_aio="yes"
1302 --disable-linux-io-uring) linux_io_uring="no"
1304 --enable-linux-io-uring) linux_io_uring="yes"
1306 --disable-attr) attr="no"
1308 --enable-attr) attr="yes"
1310 --disable-membarrier) membarrier="no"
1312 --enable-membarrier) membarrier="yes"
1314 --disable-blobs) blobs="no"
1316 --with-pkgversion=*) pkgversion="$optarg"
1318 --with-coroutine=*) coroutine="$optarg"
1320 --disable-coroutine-pool) coroutine_pool="no"
1322 --enable-coroutine-pool) coroutine_pool="yes"
1324 --enable-debug-stack-usage) debug_stack_usage="yes"
1326 --enable-crypto-afalg) crypto_afalg="yes"
1328 --disable-crypto-afalg) crypto_afalg="no"
1330 --disable-docs) docs="no"
1332 --enable-docs) docs="yes"
1334 --disable-vhost-net) vhost_net="no"
1336 --enable-vhost-net) vhost_net="yes"
1338 --disable-vhost-crypto) vhost_crypto="no"
1340 --enable-vhost-crypto) vhost_crypto="yes"
1342 --disable-vhost-scsi) vhost_scsi="no"
1344 --enable-vhost-scsi) vhost_scsi="yes"
1346 --disable-vhost-vsock) vhost_vsock="no"
1348 --enable-vhost-vsock) vhost_vsock="yes"
1350 --disable-vhost-user-fs) vhost_user_fs="no"
1352 --enable-vhost-user-fs) vhost_user_fs="yes"
1354 --disable-opengl) opengl="no"
1356 --enable-opengl) opengl="yes"
1358 --disable-rbd) rbd="no"
1360 --enable-rbd) rbd="yes"
1362 --disable-xfsctl) xfs="no"
1364 --enable-xfsctl) xfs="yes"
1366 --disable-smartcard) smartcard="no"
1368 --enable-smartcard) smartcard="yes"
1370 --disable-u2f) u2f="disabled"
1372 --enable-u2f) u2f="enabled"
1374 --disable-libusb) libusb="no"
1376 --enable-libusb) libusb="yes"
1378 --disable-usb-redir) usb_redir="no"
1380 --enable-usb-redir) usb_redir="yes"
1382 --disable-zlib-test)
1384 --disable-lzo) lzo="no"
1386 --enable-lzo) lzo="yes"
1388 --disable-snappy) snappy="no"
1390 --enable-snappy) snappy="yes"
1392 --disable-bzip2) bzip2="no"
1394 --enable-bzip2) bzip2="yes"
1396 --enable-lzfse) lzfse="yes"
1398 --disable-lzfse) lzfse="no"
1400 --disable-zstd) zstd="no"
1402 --enable-zstd) zstd="yes"
1404 --enable-guest-agent) guest_agent="yes"
1406 --disable-guest-agent) guest_agent="no"
1408 --enable-guest-agent-msi) guest_agent_msi="yes"
1410 --disable-guest-agent-msi) guest_agent_msi="no"
1412 --with-vss-sdk) vss_win32_sdk=""
1414 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1416 --without-vss-sdk) vss_win32_sdk="no"
1418 --with-win-sdk) win_sdk=""
1420 --with-win-sdk=*) win_sdk="$optarg"
1422 --without-win-sdk) win_sdk="no"
1424 --enable-tools) want_tools="yes"
1426 --disable-tools) want_tools="no"
1428 --enable-seccomp) seccomp="yes"
1430 --disable-seccomp) seccomp="no"
1432 --disable-glusterfs) glusterfs="no"
1434 --disable-avx2) avx2_opt="no"
1436 --enable-avx2) avx2_opt="yes"
1438 --disable-avx512f) avx512f_opt="no"
1440 --enable-avx512f) avx512f_opt="yes"
1443 --enable-glusterfs) glusterfs="yes"
1445 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1446 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1448 --enable-vhdx|--disable-vhdx)
1449 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1451 --enable-uuid|--disable-uuid)
1452 echo "$0: $opt is obsolete, UUID support is always built" >&2
1454 --disable-gtk) gtk="no"
1456 --enable-gtk) gtk="yes"
1458 --tls-priority=*) tls_priority="$optarg"
1460 --disable-gnutls) gnutls="no"
1462 --enable-gnutls) gnutls="yes"
1464 --disable-nettle) nettle="no"
1466 --enable-nettle) nettle="yes"
1468 --disable-gcrypt) gcrypt="no"
1470 --enable-gcrypt) gcrypt="yes"
1472 --disable-auth-pam) auth_pam="no"
1474 --enable-auth-pam) auth_pam="yes"
1476 --enable-rdma) rdma="yes"
1478 --disable-rdma) rdma="no"
1480 --enable-pvrdma) pvrdma="yes"
1482 --disable-pvrdma) pvrdma="no"
1484 --disable-vte) vte="no"
1486 --enable-vte) vte="yes"
1488 --disable-virglrenderer) virglrenderer="no"
1490 --enable-virglrenderer) virglrenderer="yes"
1492 --disable-tpm) tpm="no"
1494 --enable-tpm) tpm="yes"
1496 --disable-libssh) libssh="no"
1498 --enable-libssh) libssh="yes"
1500 --disable-live-block-migration) live_block_migration="no"
1502 --enable-live-block-migration) live_block_migration="yes"
1504 --disable-numa) numa="no"
1506 --enable-numa) numa="yes"
1508 --disable-libxml2) libxml2="no"
1510 --enable-libxml2) libxml2="yes"
1512 --disable-tcmalloc) tcmalloc="no"
1514 --enable-tcmalloc) tcmalloc="yes"
1516 --disable-jemalloc) jemalloc="no"
1518 --enable-jemalloc) jemalloc="yes"
1520 --disable-replication) replication="no"
1522 --enable-replication) replication="yes"
1524 --disable-bochs) bochs="no"
1526 --enable-bochs) bochs="yes"
1528 --disable-cloop) cloop="no"
1530 --enable-cloop) cloop="yes"
1532 --disable-dmg) dmg="no"
1534 --enable-dmg) dmg="yes"
1536 --disable-qcow1) qcow1="no"
1538 --enable-qcow1) qcow1="yes"
1540 --disable-vdi) vdi="no"
1542 --enable-vdi) vdi="yes"
1544 --disable-vvfat) vvfat="no"
1546 --enable-vvfat) vvfat="yes"
1548 --disable-qed) qed="no"
1550 --enable-qed) qed="yes"
1552 --disable-parallels) parallels="no"
1554 --enable-parallels) parallels="yes"
1556 --disable-sheepdog) sheepdog="no"
1558 --enable-sheepdog) sheepdog="yes"
1560 --disable-vhost-user) vhost_user="no"
1562 --enable-vhost-user) vhost_user="yes"
1564 --disable-vhost-vdpa) vhost_vdpa="no"
1566 --enable-vhost-vdpa) vhost_vdpa="yes"
1568 --disable-vhost-kernel) vhost_kernel="no"
1570 --enable-vhost-kernel) vhost_kernel="yes"
1572 --disable-capstone) capstone="no"
1574 --enable-capstone) capstone="yes"
1576 --enable-capstone=git) capstone="git"
1578 --enable-capstone=system) capstone="system"
1580 --with-git=*) git="$optarg"
1582 --enable-git-update) git_update=yes
1584 --disable-git-update) git_update=no
1586 --enable-debug-mutex) debug_mutex=yes
1588 --disable-debug-mutex) debug_mutex=no
1590 --enable-libpmem) libpmem=yes
1592 --disable-libpmem) libpmem=no
1594 --enable-xkbcommon) xkbcommon="enabled"
1596 --disable-xkbcommon) xkbcommon="disabled"
1598 --enable-plugins) plugins="yes"
1600 --disable-plugins) plugins="no"
1602 --enable-containers) use_containers="yes"
1604 --disable-containers) use_containers="no"
1606 --enable-fuzzing) fuzzing=yes
1608 --disable-fuzzing) fuzzing=no
1610 --gdb=*) gdb_bin="$optarg"
1612 --enable-rng-none) rng_none=yes
1614 --disable-rng-none) rng_none=no
1616 --enable-keyring) secret_keyring="yes"
1618 --disable-keyring) secret_keyring="no"
1620 --enable-libdaxctl) libdaxctl=yes
1622 --disable-libdaxctl) libdaxctl=no
1625 echo "ERROR: unknown option $opt"
1626 echo "Try '$0 --help' for more information"
1627 exit 1
1629 esac
1630 done
1632 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
1633 libdir="${libdir:-$prefix/lib}"
1634 libexecdir="${libexecdir:-$prefix/libexec}"
1635 includedir="${includedir:-$prefix/include}"
1637 if test "$mingw32" = "yes" ; then
1638 mandir="$prefix"
1639 datadir="$prefix"
1640 docdir="$prefix"
1641 bindir="$prefix"
1642 sysconfdir="$prefix"
1643 local_statedir=
1644 else
1645 mandir="${mandir:-$prefix/share/man}"
1646 datadir="${datadir:-$prefix/share}"
1647 docdir="${docdir:-$prefix/share/doc}"
1648 bindir="${bindir:-$prefix/bin}"
1649 sysconfdir="${sysconfdir:-$prefix/etc}"
1650 local_statedir="${local_statedir:-$prefix/var}"
1653 case "$cpu" in
1654 ppc)
1655 CPU_CFLAGS="-m32"
1656 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1658 ppc64)
1659 CPU_CFLAGS="-m64"
1660 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1662 sparc)
1663 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1664 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1666 sparc64)
1667 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1668 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1670 s390)
1671 CPU_CFLAGS="-m31"
1672 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1674 s390x)
1675 CPU_CFLAGS="-m64"
1676 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1678 i386)
1679 CPU_CFLAGS="-m32"
1680 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1682 x86_64)
1683 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1684 # If we truly care, we should simply detect this case at
1685 # runtime and generate the fallback to serial emulation.
1686 CPU_CFLAGS="-m64 -mcx16"
1687 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1689 x32)
1690 CPU_CFLAGS="-mx32"
1691 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1693 # No special flags required for other host CPUs
1694 esac
1696 eval "cross_cc_${cpu}=\$host_cc"
1697 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1698 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1700 # For user-mode emulation the host arch has to be one we explicitly
1701 # support, even if we're using TCI.
1702 if [ "$ARCH" = "unknown" ]; then
1703 bsd_user="no"
1704 linux_user="no"
1707 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1708 tcg="no"
1711 default_target_list=""
1713 mak_wilds=""
1715 if [ "$softmmu" = "yes" ]; then
1716 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1718 if [ "$linux_user" = "yes" ]; then
1719 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1721 if [ "$bsd_user" = "yes" ]; then
1722 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1725 if test -z "$target_list_exclude" -a -z "$target_list"; then
1726 # if the user doesn't specify anything lets skip deprecating stuff
1727 target_list_exclude=ppc64abi32-linux-user
1730 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1731 for config in $mak_wilds; do
1732 target="$(basename "$config" .mak)"
1733 exclude="no"
1734 for excl in $exclude_list; do
1735 if test "$excl" = "$target"; then
1736 exclude="yes"
1737 break;
1739 done
1740 if test "$exclude" = "no"; then
1741 default_target_list="${default_target_list} $target"
1743 done
1745 # Enumerate public trace backends for --help output
1746 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1748 if test x"$show_help" = x"yes" ; then
1749 cat << EOF
1751 Usage: configure [options]
1752 Options: [defaults in brackets after descriptions]
1754 Standard options:
1755 --help print this message
1756 --prefix=PREFIX install in PREFIX [$prefix]
1757 --interp-prefix=PREFIX where to find shared libraries, etc.
1758 use %M for cpu name [$interp_prefix]
1759 --target-list=LIST set target list (default: build everything)
1760 $(echo Available targets: $default_target_list | \
1761 fold -s -w 53 | sed -e 's/^/ /')
1762 --target-list-exclude=LIST exclude a set of targets from the default target-list
1764 Advanced options (experts only):
1765 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1766 --cc=CC use C compiler CC [$cc]
1767 --iasl=IASL use ACPI compiler IASL [$iasl]
1768 --host-cc=CC use C compiler CC [$host_cc] for code run at
1769 build time
1770 --cxx=CXX use C++ compiler CXX [$cxx]
1771 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1772 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1773 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1774 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1775 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1776 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1777 --make=MAKE use specified make [$make]
1778 --python=PYTHON use specified python [$python]
1779 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1780 --meson=MESON use specified meson [$meson]
1781 --ninja=NINJA use specified ninja [$ninja]
1782 --smbd=SMBD use specified smbd [$smbd]
1783 --with-git=GIT use specified git [$git]
1784 --static enable static build [$static]
1785 --mandir=PATH install man pages in PATH
1786 --datadir=PATH install firmware in PATH/$qemu_suffix
1787 --docdir=PATH install documentation in PATH/$qemu_suffix
1788 --bindir=PATH install binaries in PATH
1789 --libdir=PATH install libraries in PATH
1790 --libexecdir=PATH install helper binaries in PATH
1791 --sysconfdir=PATH install config in PATH/$qemu_suffix
1792 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1793 --firmwarepath=PATH search PATH for firmware files
1794 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1795 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1796 --with-pkgversion=VERS use specified string as sub-version of the package
1797 --enable-debug enable common debug build options
1798 --enable-sanitizers enable default sanitizers
1799 --enable-tsan enable thread sanitizer
1800 --disable-strip disable stripping binaries
1801 --disable-werror disable compilation abort on warning
1802 --disable-stack-protector disable compiler-provided stack protection
1803 --audio-drv-list=LIST set audio drivers list:
1804 Available drivers: $audio_possible_drivers
1805 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1806 --block-drv-rw-whitelist=L
1807 set block driver read-write whitelist
1808 (affects only QEMU, not qemu-img)
1809 --block-drv-ro-whitelist=L
1810 set block driver read-only whitelist
1811 (affects only QEMU, not qemu-img)
1812 --enable-trace-backends=B Set trace backend
1813 Available backends: $trace_backend_list
1814 --with-trace-file=NAME Full PATH,NAME of file to store traces
1815 Default:trace-<pid>
1816 --disable-slirp disable SLIRP userspace network connectivity
1817 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1818 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1819 --oss-lib path to OSS library
1820 --cpu=CPU Build for host CPU [$cpu]
1821 --with-coroutine=BACKEND coroutine backend. Supported options:
1822 ucontext, sigaltstack, windows
1823 --enable-gcov enable test coverage analysis with gcov
1824 --disable-blobs disable installing provided firmware blobs
1825 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1826 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1827 --tls-priority default TLS protocol/cipher priority string
1828 --enable-gprof QEMU profiling with gprof
1829 --enable-profiler profiler support
1830 --enable-debug-stack-usage
1831 track the maximum stack usage of stacks created by qemu_alloc_stack
1832 --enable-plugins
1833 enable plugins via shared library loading
1834 --disable-containers don't use containers for cross-building
1835 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1837 Optional features, enabled with --enable-FEATURE and
1838 disabled with --disable-FEATURE, default is enabled if available:
1840 system all system emulation targets
1841 user supported user emulation targets
1842 linux-user all linux usermode emulation targets
1843 bsd-user all BSD usermode emulation targets
1844 docs build documentation
1845 guest-agent build the QEMU Guest Agent
1846 guest-agent-msi build guest agent Windows MSI installation package
1847 pie Position Independent Executables
1848 modules modules support (non-Windows)
1849 module-upgrades try to load modules from alternate paths for upgrades
1850 debug-tcg TCG debugging (default is disabled)
1851 debug-info debugging information
1852 sparse sparse checker
1853 safe-stack SafeStack Stack Smash Protection. Depends on
1854 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1856 gnutls GNUTLS cryptography support
1857 nettle nettle cryptography support
1858 gcrypt libgcrypt cryptography support
1859 auth-pam PAM access control
1860 sdl SDL UI
1861 sdl-image SDL Image support for icons
1862 gtk gtk UI
1863 vte vte support for the gtk UI
1864 curses curses UI
1865 iconv font glyph conversion support
1866 vnc VNC UI support
1867 vnc-sasl SASL encryption for VNC server
1868 vnc-jpeg JPEG lossy compression for VNC server
1869 vnc-png PNG compression for VNC server
1870 cocoa Cocoa UI (Mac OS X only)
1871 virtfs VirtFS
1872 mpath Multipath persistent reservation passthrough
1873 xen xen backend driver support
1874 xen-pci-passthrough PCI passthrough support for Xen
1875 brlapi BrlAPI (Braile)
1876 curl curl connectivity
1877 membarrier membarrier system call (for Linux 4.14+ or Windows)
1878 fdt fdt device tree
1879 kvm KVM acceleration support
1880 hax HAX acceleration support
1881 hvf Hypervisor.framework acceleration support
1882 whpx Windows Hypervisor Platform acceleration support
1883 rdma Enable RDMA-based migration
1884 pvrdma Enable PVRDMA support
1885 vde support for vde network
1886 netmap support for netmap network
1887 linux-aio Linux AIO support
1888 linux-io-uring Linux io_uring support
1889 cap-ng libcap-ng support
1890 attr attr and xattr support
1891 vhost-net vhost-net kernel acceleration support
1892 vhost-vsock virtio sockets device support
1893 vhost-scsi vhost-scsi kernel target support
1894 vhost-crypto vhost-user-crypto backend support
1895 vhost-kernel vhost kernel backend support
1896 vhost-user vhost-user backend support
1897 vhost-vdpa vhost-vdpa kernel backend support
1898 spice spice
1899 rbd rados block device (rbd)
1900 libiscsi iscsi support
1901 libnfs nfs support
1902 smartcard smartcard support (libcacard)
1903 u2f U2F support (u2f-emu)
1904 libusb libusb (for usb passthrough)
1905 live-block-migration Block migration in the main migration stream
1906 usb-redir usb network redirection support
1907 lzo support of lzo compression library
1908 snappy support of snappy compression library
1909 bzip2 support of bzip2 compression library
1910 (for reading bzip2-compressed dmg images)
1911 lzfse support of lzfse compression library
1912 (for reading lzfse-compressed dmg images)
1913 zstd support for zstd compression library
1914 (for migration compression and qcow2 cluster compression)
1915 seccomp seccomp support
1916 coroutine-pool coroutine freelist (better performance)
1917 glusterfs GlusterFS backend
1918 tpm TPM support
1919 libssh ssh block device support
1920 numa libnuma support
1921 libxml2 for Parallels image format
1922 tcmalloc tcmalloc support
1923 jemalloc jemalloc support
1924 avx2 AVX2 optimization support
1925 avx512f AVX512F optimization support
1926 replication replication support
1927 opengl opengl support
1928 virglrenderer virgl rendering support
1929 xfsctl xfsctl support
1930 qom-cast-debug cast debugging support
1931 tools build qemu-io, qemu-nbd and qemu-img tools
1932 bochs bochs image format support
1933 cloop cloop image format support
1934 dmg dmg image format support
1935 qcow1 qcow v1 image format support
1936 vdi vdi image format support
1937 vvfat vvfat image format support
1938 qed qed image format support
1939 parallels parallels image format support
1940 sheepdog sheepdog block driver support
1941 crypto-afalg Linux AF_ALG crypto backend driver
1942 capstone capstone disassembler support
1943 debug-mutex mutex debugging support
1944 libpmem libpmem support
1945 xkbcommon xkbcommon support
1946 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1947 libdaxctl libdaxctl support
1949 NOTE: The object files are built at the place where configure is launched
1951 exit 0
1954 # Remove old dependency files to make sure that they get properly regenerated
1955 rm -f */config-devices.mak.d
1957 if test -z "$python"
1958 then
1959 error_exit "Python not found. Use --python=/path/to/python"
1962 # Note that if the Python conditional here evaluates True we will exit
1963 # with status 1 which is a shell 'false' value.
1964 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1965 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1966 "Use --python=/path/to/python to specify a supported Python."
1969 # Preserve python version since some functionality is dependent on it
1970 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)
1972 # Suppress writing compiled files
1973 python="$python -B"
1975 if test -z "$meson"; then
1976 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
1977 meson=meson
1978 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1979 meson=git
1980 elif test -e "${source_path}/meson/meson.py" ; then
1981 meson=internal
1982 else
1983 if test "$explicit_python" = yes; then
1984 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1985 else
1986 error_exit "Meson not found. Use --meson=/path/to/meson"
1989 else
1990 # Meson uses its own Python interpreter to invoke other Python scripts,
1991 # but the user wants to use the one they specified with --python.
1993 # We do not want to override the distro Python interpreter (and sometimes
1994 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1995 # just require --meson=git|internal together with --python.
1996 if test "$explicit_python" = yes; then
1997 case "$meson" in
1998 git | internal) ;;
1999 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2000 esac
2004 if test "$meson" = git; then
2005 git_submodules="${git_submodules} meson"
2008 case "$meson" in
2009 git | internal)
2010 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2011 error_exit "Python setuptools not found"
2013 meson="$python ${source_path}/meson/meson.py"
2015 *) meson=$(command -v meson) ;;
2016 esac
2018 # Probe for ninja (used for compdb)
2020 if test -z "$ninja"; then
2021 for c in ninja ninja-build samu; do
2022 if has $c; then
2023 ninja=$(command -v "$c")
2024 break
2026 done
2029 # Check that the C compiler works. Doing this here before testing
2030 # the host CPU ensures that we had a valid CC to autodetect the
2031 # $cpu var (and we should bail right here if that's not the case).
2032 # It also allows the help message to be printed without a CC.
2033 write_c_skeleton;
2034 if compile_object ; then
2035 : C compiler works ok
2036 else
2037 error_exit "\"$cc\" either does not exist or does not work"
2039 if ! compile_prog ; then
2040 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2043 # Now we have handled --enable-tcg-interpreter and know we're not just
2044 # printing the help message, bail out if the host CPU isn't supported.
2045 if test "$ARCH" = "unknown"; then
2046 if test "$tcg_interpreter" = "yes" ; then
2047 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2048 else
2049 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2053 # Consult white-list to determine whether to enable werror
2054 # by default. Only enable by default for git builds
2055 if test -z "$werror" ; then
2056 if test -e "$source_path/.git" && \
2057 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2058 werror="yes"
2059 else
2060 werror="no"
2064 if test "$bogus_os" = "yes"; then
2065 # Now that we know that we're not printing the help and that
2066 # the compiler works (so the results of the check_defines we used
2067 # to identify the OS are reliable), if we didn't recognize the
2068 # host OS we should stop now.
2069 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2072 # Check whether the compiler matches our minimum requirements:
2073 cat > $TMPC << EOF
2074 #if defined(__clang_major__) && defined(__clang_minor__)
2075 # ifdef __apple_build_version__
2076 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2077 # error You need at least XCode Clang v5.1 to compile QEMU
2078 # endif
2079 # else
2080 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2081 # error You need at least Clang v3.4 to compile QEMU
2082 # endif
2083 # endif
2084 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2085 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2086 # error You need at least GCC v4.8 to compile QEMU
2087 # endif
2088 #else
2089 # error You either need GCC or Clang to compiler QEMU
2090 #endif
2091 int main (void) { return 0; }
2093 if ! compile_prog "" "" ; then
2094 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2097 # Accumulate -Wfoo and -Wno-bar separately.
2098 # We will list all of the enable flags first, and the disable flags second.
2099 # Note that we do not add -Werror, because that would enable it for all
2100 # configure tests. If a configure test failed due to -Werror this would
2101 # just silently disable some features, so it's too error prone.
2103 warn_flags=
2104 add_to warn_flags -Wold-style-declaration
2105 add_to warn_flags -Wold-style-definition
2106 add_to warn_flags -Wtype-limits
2107 add_to warn_flags -Wformat-security
2108 add_to warn_flags -Wformat-y2k
2109 add_to warn_flags -Winit-self
2110 add_to warn_flags -Wignored-qualifiers
2111 add_to warn_flags -Wempty-body
2112 add_to warn_flags -Wnested-externs
2113 add_to warn_flags -Wendif-labels
2114 add_to warn_flags -Wexpansion-to-defined
2116 nowarn_flags=
2117 add_to nowarn_flags -Wno-initializer-overrides
2118 add_to nowarn_flags -Wno-missing-include-dirs
2119 add_to nowarn_flags -Wno-shift-negative-value
2120 add_to nowarn_flags -Wno-string-plus-int
2121 add_to nowarn_flags -Wno-typedef-redefinition
2122 add_to nowarn_flags -Wno-tautological-type-limit-compare
2123 add_to nowarn_flags -Wno-psabi
2125 gcc_flags="$warn_flags $nowarn_flags"
2127 cc_has_warning_flag() {
2128 write_c_skeleton;
2130 # Use the positive sense of the flag when testing for -Wno-wombat
2131 # support (gcc will happily accept the -Wno- form of unknown
2132 # warning options).
2133 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2134 compile_prog "-Werror $optflag" ""
2137 for flag in $gcc_flags; do
2138 if cc_has_warning_flag $flag ; then
2139 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2141 done
2143 if test "$stack_protector" != "no"; then
2144 cat > $TMPC << EOF
2145 int main(int argc, char *argv[])
2147 char arr[64], *p = arr, *c = argv[0];
2148 while (*c) {
2149 *p++ = *c++;
2151 return 0;
2154 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2155 sp_on=0
2156 for flag in $gcc_flags; do
2157 # We need to check both a compile and a link, since some compiler
2158 # setups fail only on a .c->.o compile and some only at link time
2159 if compile_object "-Werror $flag" &&
2160 compile_prog "-Werror $flag" ""; then
2161 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2162 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2163 sp_on=1
2164 break
2166 done
2167 if test "$stack_protector" = yes; then
2168 if test $sp_on = 0; then
2169 error_exit "Stack protector not supported"
2174 # Disable -Wmissing-braces on older compilers that warn even for
2175 # the "universal" C zero initializer {0}.
2176 cat > $TMPC << EOF
2177 struct {
2178 int a[2];
2179 } x = {0};
2181 if compile_object "-Werror" "" ; then
2183 else
2184 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2187 # Our module code doesn't support Windows
2188 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2189 error_exit "Modules are not available for Windows"
2192 # module_upgrades is only reasonable if modules are enabled
2193 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2194 error_exit "Can't enable module-upgrades as Modules are not enabled"
2197 # Static linking is not possible with modules or PIE
2198 if test "$static" = "yes" ; then
2199 if test "$modules" = "yes" ; then
2200 error_exit "static and modules are mutually incompatible"
2204 # Unconditional check for compiler __thread support
2205 cat > $TMPC << EOF
2206 static __thread int tls_var;
2207 int main(void) { return tls_var; }
2210 if ! compile_prog "-Werror" "" ; then
2211 error_exit "Your compiler does not support the __thread specifier for " \
2212 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2215 cat > $TMPC << EOF
2217 #ifdef __linux__
2218 # define THREAD __thread
2219 #else
2220 # define THREAD
2221 #endif
2222 static THREAD int tls_var;
2223 int main(void) { return tls_var; }
2226 # Check we support --no-pie first; we will need this for building ROMs.
2227 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2228 CFLAGS_NOPIE="-fno-pie"
2229 LDFLAGS_NOPIE="-no-pie"
2232 if test "$static" = "yes"; then
2233 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2234 CFLAGS="-fPIE -DPIE $CFLAGS"
2235 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2236 pie="yes"
2237 elif test "$pie" = "yes"; then
2238 error_exit "-static-pie not available due to missing toolchain support"
2239 else
2240 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2241 pie="no"
2243 elif test "$pie" = "no"; then
2244 CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2245 LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2246 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2247 CFLAGS="-fPIE -DPIE $CFLAGS"
2248 LDFLAGS="-pie $LDFLAGS"
2249 pie="yes"
2250 elif test "$pie" = "yes"; then
2251 error_exit "PIE not available due to missing toolchain support"
2252 else
2253 echo "Disabling PIE due to missing toolchain support"
2254 pie="no"
2257 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2258 # The combination is known as "full relro", because .got.plt is read-only too.
2259 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2260 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2263 ##########################################
2264 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2265 # use i686 as default anyway, but for those that don't, an explicit
2266 # specification is necessary
2268 if test "$cpu" = "i386"; then
2269 cat > $TMPC << EOF
2270 static int sfaa(int *ptr)
2272 return __sync_fetch_and_and(ptr, 0);
2275 int main(void)
2277 int val = 42;
2278 val = __sync_val_compare_and_swap(&val, 0, 1);
2279 sfaa(&val);
2280 return val;
2283 if ! compile_prog "" "" ; then
2284 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2288 #########################################
2289 # Solaris specific configure tool chain decisions
2291 if test "$solaris" = "yes" ; then
2292 if has ar; then
2294 else
2295 if test -f /usr/ccs/bin/ar ; then
2296 error_exit "No path includes ar" \
2297 "Add /usr/ccs/bin to your path and rerun configure"
2299 error_exit "No path includes ar"
2303 if test -z "${target_list+xxx}" ; then
2304 for target in $default_target_list; do
2305 supported_target $target 2>/dev/null && \
2306 target_list="$target_list $target"
2307 done
2308 target_list="${target_list# }"
2309 else
2310 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2311 for target in $target_list; do
2312 # Check that we recognised the target name; this allows a more
2313 # friendly error message than if we let it fall through.
2314 case " $default_target_list " in
2315 *" $target "*)
2318 error_exit "Unknown target name '$target'"
2320 esac
2321 supported_target $target || exit 1
2322 done
2325 # see if system emulation was really requested
2326 case " $target_list " in
2327 *"-softmmu "*) softmmu=yes
2329 *) softmmu=no
2331 esac
2333 for target in $target_list; do
2334 case "$target" in
2335 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2336 edk2_blobs="yes"
2338 esac
2339 done
2340 # The EDK2 binaries are compressed with bzip2
2341 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2342 error_exit "The bzip2 program is required for building QEMU"
2345 feature_not_found() {
2346 feature=$1
2347 remedy=$2
2349 error_exit "User requested feature $feature" \
2350 "configure was not able to find it." \
2351 "$remedy"
2354 # ---
2355 # big/little endian test
2356 cat > $TMPC << EOF
2357 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2358 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2359 extern int foo(short *, short *);
2360 int main(int argc, char *argv[]) {
2361 return foo(big_endian, little_endian);
2365 if compile_object ; then
2366 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2367 bigendian="yes"
2368 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2369 bigendian="no"
2370 else
2371 echo big/little test failed
2373 else
2374 echo big/little test failed
2377 ##########################################
2378 # system tools
2379 if test -z "$want_tools"; then
2380 if test "$softmmu" = "no"; then
2381 want_tools=no
2382 else
2383 want_tools=yes
2387 ##########################################
2388 # cocoa implies not SDL or GTK
2389 # (the cocoa UI code currently assumes it is always the active UI
2390 # and doesn't interact well with other UI frontend code)
2391 if test "$cocoa" = "yes"; then
2392 if test "$sdl" = "yes"; then
2393 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2395 if test "$gtk" = "yes"; then
2396 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2398 gtk=no
2399 sdl=disabled
2402 # Some versions of Mac OS X incorrectly define SIZE_MAX
2403 cat > $TMPC << EOF
2404 #include <stdint.h>
2405 #include <stdio.h>
2406 int main(int argc, char *argv[]) {
2407 return printf("%zu", SIZE_MAX);
2410 have_broken_size_max=no
2411 if ! compile_object -Werror ; then
2412 have_broken_size_max=yes
2415 ##########################################
2416 # L2TPV3 probe
2418 cat > $TMPC <<EOF
2419 #include <sys/socket.h>
2420 #include <linux/ip.h>
2421 int main(void) { return sizeof(struct mmsghdr); }
2423 if compile_prog "" "" ; then
2424 l2tpv3=yes
2425 else
2426 l2tpv3=no
2429 if check_include "pty.h" ; then
2430 pty_h=yes
2431 else
2432 pty_h=no
2435 cat > $TMPC <<EOF
2436 #include <sys/mman.h>
2437 int main(int argc, char *argv[]) {
2438 return mlockall(MCL_FUTURE);
2441 if compile_prog "" "" ; then
2442 have_mlockall=yes
2443 else
2444 have_mlockall=no
2447 #########################################
2448 # vhost interdependencies and host support
2450 # vhost backends
2451 test "$vhost_user" = "" && vhost_user=yes
2452 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2453 error_exit "vhost-user isn't available on win32"
2455 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2456 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2457 error_exit "vhost-vdpa is only available on Linux"
2459 test "$vhost_kernel" = "" && vhost_kernel=$linux
2460 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2461 error_exit "vhost-kernel is only available on Linux"
2464 # vhost-kernel devices
2465 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2466 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2467 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2469 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2470 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2471 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2474 # vhost-user backends
2475 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2476 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2477 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2479 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2480 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2481 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2483 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2484 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2485 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2487 #vhost-vdpa backends
2488 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2489 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2490 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2493 # OR the vhost-kernel and vhost-user values for simplicity
2494 if test "$vhost_net" = ""; then
2495 test "$vhost_net_user" = "yes" && vhost_net=yes
2496 test "$vhost_kernel" = "yes" && vhost_net=yes
2499 ##########################################
2500 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2502 if test "$mingw32" = "yes"; then
2503 # Some versions of MinGW / Mingw-w64 lack localtime_r
2504 # and gmtime_r entirely.
2506 # Some versions of Mingw-w64 define a macro for
2507 # localtime_r/gmtime_r.
2509 # Some versions of Mingw-w64 will define functions
2510 # for localtime_r/gmtime_r, but only if you have
2511 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2512 # though, unistd.h and pthread.h both define
2513 # that for you.
2515 # So this #undef localtime_r and #include <unistd.h>
2516 # are not in fact redundant.
2517 cat > $TMPC << EOF
2518 #include <unistd.h>
2519 #include <time.h>
2520 #undef localtime_r
2521 int main(void) { localtime_r(NULL, NULL); return 0; }
2523 if compile_prog "" "" ; then
2524 localtime_r="yes"
2525 else
2526 localtime_r="no"
2530 ##########################################
2531 # pkg-config probe
2533 if ! has "$pkg_config_exe"; then
2534 error_exit "pkg-config binary '$pkg_config_exe' not found"
2537 ##########################################
2538 # NPTL probe
2540 if test "$linux_user" = "yes"; then
2541 cat > $TMPC <<EOF
2542 #include <sched.h>
2543 #include <linux/futex.h>
2544 int main(void) {
2545 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2546 #error bork
2547 #endif
2548 return 0;
2551 if ! compile_object ; then
2552 feature_not_found "nptl" "Install glibc and linux kernel headers."
2556 ##########################################
2557 # lzo check
2559 if test "$lzo" != "no" ; then
2560 cat > $TMPC << EOF
2561 #include <lzo/lzo1x.h>
2562 int main(void) { lzo_version(); return 0; }
2564 if compile_prog "" "-llzo2" ; then
2565 lzo_libs="-llzo2"
2566 lzo="yes"
2567 else
2568 if test "$lzo" = "yes"; then
2569 feature_not_found "liblzo2" "Install liblzo2 devel"
2571 lzo="no"
2575 ##########################################
2576 # snappy check
2578 if test "$snappy" != "no" ; then
2579 cat > $TMPC << EOF
2580 #include <snappy-c.h>
2581 int main(void) { snappy_max_compressed_length(4096); return 0; }
2583 if compile_prog "" "-lsnappy" ; then
2584 snappy_libs='-lsnappy'
2585 snappy="yes"
2586 else
2587 if test "$snappy" = "yes"; then
2588 feature_not_found "libsnappy" "Install libsnappy devel"
2590 snappy="no"
2594 ##########################################
2595 # bzip2 check
2597 if test "$bzip2" != "no" ; then
2598 cat > $TMPC << EOF
2599 #include <bzlib.h>
2600 int main(void) { BZ2_bzlibVersion(); return 0; }
2602 if compile_prog "" "-lbz2" ; then
2603 bzip2="yes"
2604 else
2605 if test "$bzip2" = "yes"; then
2606 feature_not_found "libbzip2" "Install libbzip2 devel"
2608 bzip2="no"
2612 ##########################################
2613 # lzfse check
2615 if test "$lzfse" != "no" ; then
2616 cat > $TMPC << EOF
2617 #include <lzfse.h>
2618 int main(void) { lzfse_decode_scratch_size(); return 0; }
2620 if compile_prog "" "-llzfse" ; then
2621 lzfse="yes"
2622 else
2623 if test "$lzfse" = "yes"; then
2624 feature_not_found "lzfse" "Install lzfse devel"
2626 lzfse="no"
2630 ##########################################
2631 # zstd check
2633 if test "$zstd" != "no" ; then
2634 libzstd_minver="1.4.0"
2635 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2636 zstd_cflags="$($pkg_config --cflags libzstd)"
2637 zstd_libs="$($pkg_config --libs libzstd)"
2638 zstd="yes"
2639 else
2640 if test "$zstd" = "yes" ; then
2641 feature_not_found "libzstd" "Install libzstd devel"
2643 zstd="no"
2647 ##########################################
2648 # libseccomp check
2650 if test "$seccomp" != "no" ; then
2651 libseccomp_minver="2.3.0"
2652 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2653 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2654 seccomp_libs="$($pkg_config --libs libseccomp)"
2655 seccomp="yes"
2656 else
2657 if test "$seccomp" = "yes" ; then
2658 feature_not_found "libseccomp" \
2659 "Install libseccomp devel >= $libseccomp_minver"
2661 seccomp="no"
2664 ##########################################
2665 # xen probe
2667 if test "$xen" != "no" ; then
2668 # Check whether Xen library path is specified via --extra-ldflags to avoid
2669 # overriding this setting with pkg-config output. If not, try pkg-config
2670 # to obtain all needed flags.
2672 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2673 $pkg_config --exists xencontrol ; then
2674 xen_ctrl_version="$(printf '%d%02d%02d' \
2675 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2676 xen=yes
2677 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2678 xen_pc="$xen_pc xenevtchn xendevicemodel"
2679 if $pkg_config --exists xentoolcore; then
2680 xen_pc="$xen_pc xentoolcore"
2682 xen_cflags="$($pkg_config --cflags $xen_pc)"
2683 xen_libs="$($pkg_config --libs $xen_pc)"
2684 else
2686 xen_libs="-lxenstore -lxenctrl -lxenguest"
2687 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2689 # First we test whether Xen headers and libraries are available.
2690 # If no, we are done and there is no Xen support.
2691 # If yes, more tests are run to detect the Xen version.
2693 # Xen (any)
2694 cat > $TMPC <<EOF
2695 #include <xenctrl.h>
2696 int main(void) {
2697 return 0;
2700 if ! compile_prog "" "$xen_libs" ; then
2701 # Xen not found
2702 if test "$xen" = "yes" ; then
2703 feature_not_found "xen" "Install xen devel"
2705 xen=no
2707 # Xen unstable
2708 elif
2709 cat > $TMPC <<EOF &&
2710 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2711 #define __XEN_TOOLS__
2712 #include <xendevicemodel.h>
2713 #include <xenforeignmemory.h>
2714 int main(void) {
2715 xendevicemodel_handle *xd;
2716 xenforeignmemory_handle *xfmem;
2718 xd = xendevicemodel_open(0, 0);
2719 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2721 xfmem = xenforeignmemory_open(0, 0);
2722 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2724 return 0;
2727 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2728 then
2729 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2730 xen_ctrl_version=41100
2731 xen=yes
2732 elif
2733 cat > $TMPC <<EOF &&
2734 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2735 #include <xenforeignmemory.h>
2736 #include <xentoolcore.h>
2737 int main(void) {
2738 xenforeignmemory_handle *xfmem;
2740 xfmem = xenforeignmemory_open(0, 0);
2741 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2742 xentoolcore_restrict_all(0);
2744 return 0;
2747 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2748 then
2749 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2750 xen_ctrl_version=41000
2751 xen=yes
2752 elif
2753 cat > $TMPC <<EOF &&
2754 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2755 #define __XEN_TOOLS__
2756 #include <xendevicemodel.h>
2757 int main(void) {
2758 xendevicemodel_handle *xd;
2760 xd = xendevicemodel_open(0, 0);
2761 xendevicemodel_close(xd);
2763 return 0;
2766 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2767 then
2768 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2769 xen_ctrl_version=40900
2770 xen=yes
2771 elif
2772 cat > $TMPC <<EOF &&
2774 * If we have stable libs the we don't want the libxc compat
2775 * layers, regardless of what CFLAGS we may have been given.
2777 * Also, check if xengnttab_grant_copy_segment_t is defined and
2778 * grant copy operation is implemented.
2780 #undef XC_WANT_COMPAT_EVTCHN_API
2781 #undef XC_WANT_COMPAT_GNTTAB_API
2782 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2783 #include <xenctrl.h>
2784 #include <xenstore.h>
2785 #include <xenevtchn.h>
2786 #include <xengnttab.h>
2787 #include <xenforeignmemory.h>
2788 #include <stdint.h>
2789 #include <xen/hvm/hvm_info_table.h>
2790 #if !defined(HVM_MAX_VCPUS)
2791 # error HVM_MAX_VCPUS not defined
2792 #endif
2793 int main(void) {
2794 xc_interface *xc = NULL;
2795 xenforeignmemory_handle *xfmem;
2796 xenevtchn_handle *xe;
2797 xengnttab_handle *xg;
2798 xengnttab_grant_copy_segment_t* seg = NULL;
2800 xs_daemon_open();
2802 xc = xc_interface_open(0, 0, 0);
2803 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2804 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2805 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2806 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2808 xfmem = xenforeignmemory_open(0, 0);
2809 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2811 xe = xenevtchn_open(0, 0);
2812 xenevtchn_fd(xe);
2814 xg = xengnttab_open(0, 0);
2815 xengnttab_grant_copy(xg, 0, seg);
2817 return 0;
2820 compile_prog "" "$xen_libs $xen_stable_libs"
2821 then
2822 xen_ctrl_version=40800
2823 xen=yes
2824 elif
2825 cat > $TMPC <<EOF &&
2827 * If we have stable libs the we don't want the libxc compat
2828 * layers, regardless of what CFLAGS we may have been given.
2830 #undef XC_WANT_COMPAT_EVTCHN_API
2831 #undef XC_WANT_COMPAT_GNTTAB_API
2832 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2833 #include <xenctrl.h>
2834 #include <xenstore.h>
2835 #include <xenevtchn.h>
2836 #include <xengnttab.h>
2837 #include <xenforeignmemory.h>
2838 #include <stdint.h>
2839 #include <xen/hvm/hvm_info_table.h>
2840 #if !defined(HVM_MAX_VCPUS)
2841 # error HVM_MAX_VCPUS not defined
2842 #endif
2843 int main(void) {
2844 xc_interface *xc = NULL;
2845 xenforeignmemory_handle *xfmem;
2846 xenevtchn_handle *xe;
2847 xengnttab_handle *xg;
2849 xs_daemon_open();
2851 xc = xc_interface_open(0, 0, 0);
2852 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2853 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2854 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2855 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2857 xfmem = xenforeignmemory_open(0, 0);
2858 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2860 xe = xenevtchn_open(0, 0);
2861 xenevtchn_fd(xe);
2863 xg = xengnttab_open(0, 0);
2864 xengnttab_map_grant_ref(xg, 0, 0, 0);
2866 return 0;
2869 compile_prog "" "$xen_libs $xen_stable_libs"
2870 then
2871 xen_ctrl_version=40701
2872 xen=yes
2874 # Xen 4.6
2875 elif
2876 cat > $TMPC <<EOF &&
2877 #include <xenctrl.h>
2878 #include <xenstore.h>
2879 #include <stdint.h>
2880 #include <xen/hvm/hvm_info_table.h>
2881 #if !defined(HVM_MAX_VCPUS)
2882 # error HVM_MAX_VCPUS not defined
2883 #endif
2884 int main(void) {
2885 xc_interface *xc;
2886 xs_daemon_open();
2887 xc = xc_interface_open(0, 0, 0);
2888 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2889 xc_gnttab_open(NULL, 0);
2890 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2891 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2892 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2893 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2894 return 0;
2897 compile_prog "" "$xen_libs"
2898 then
2899 xen_ctrl_version=40600
2900 xen=yes
2902 # Xen 4.5
2903 elif
2904 cat > $TMPC <<EOF &&
2905 #include <xenctrl.h>
2906 #include <xenstore.h>
2907 #include <stdint.h>
2908 #include <xen/hvm/hvm_info_table.h>
2909 #if !defined(HVM_MAX_VCPUS)
2910 # error HVM_MAX_VCPUS not defined
2911 #endif
2912 int main(void) {
2913 xc_interface *xc;
2914 xs_daemon_open();
2915 xc = xc_interface_open(0, 0, 0);
2916 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2917 xc_gnttab_open(NULL, 0);
2918 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2919 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2920 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2921 return 0;
2924 compile_prog "" "$xen_libs"
2925 then
2926 xen_ctrl_version=40500
2927 xen=yes
2929 elif
2930 cat > $TMPC <<EOF &&
2931 #include <xenctrl.h>
2932 #include <xenstore.h>
2933 #include <stdint.h>
2934 #include <xen/hvm/hvm_info_table.h>
2935 #if !defined(HVM_MAX_VCPUS)
2936 # error HVM_MAX_VCPUS not defined
2937 #endif
2938 int main(void) {
2939 xc_interface *xc;
2940 xs_daemon_open();
2941 xc = xc_interface_open(0, 0, 0);
2942 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2943 xc_gnttab_open(NULL, 0);
2944 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2945 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2946 return 0;
2949 compile_prog "" "$xen_libs"
2950 then
2951 xen_ctrl_version=40200
2952 xen=yes
2954 else
2955 if test "$xen" = "yes" ; then
2956 feature_not_found "xen (unsupported version)" \
2957 "Install a supported xen (xen 4.2 or newer)"
2959 xen=no
2962 if test "$xen" = yes; then
2963 if test $xen_ctrl_version -ge 40701 ; then
2964 xen_libs="$xen_libs $xen_stable_libs "
2970 if test "$xen_pci_passthrough" != "no"; then
2971 if test "$xen" = "yes" && test "$linux" = "yes"; then
2972 xen_pci_passthrough=yes
2973 else
2974 if test "$xen_pci_passthrough" = "yes"; then
2975 error_exit "User requested feature Xen PCI Passthrough" \
2976 " but this feature requires /sys from Linux"
2978 xen_pci_passthrough=no
2982 ##########################################
2983 # Windows Hypervisor Platform accelerator (WHPX) check
2984 if test "$whpx" != "no" ; then
2985 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2986 whpx="yes"
2987 else
2988 if test "$whpx" = "yes"; then
2989 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2991 whpx="no"
2995 ##########################################
2996 # gettext probe
2997 if test "$gettext" != "false" ; then
2998 if has xgettext; then
2999 gettext=true
3000 else
3001 if test "$gettext" = "true" ; then
3002 feature_not_found "gettext" "Install xgettext binary"
3004 gettext=false
3008 ##########################################
3009 # Sparse probe
3010 if test "$sparse" != "no" ; then
3011 if has sparse; then
3012 sparse=yes
3013 else
3014 if test "$sparse" = "yes" ; then
3015 feature_not_found "sparse" "Install sparse binary"
3017 sparse=no
3021 ##########################################
3022 # X11 probe
3023 if $pkg_config --exists "x11"; then
3024 have_x11=yes
3025 x11_cflags=$($pkg_config --cflags x11)
3026 x11_libs=$($pkg_config --libs x11)
3029 ##########################################
3030 # GTK probe
3032 if test "$gtk" != "no"; then
3033 gtkpackage="gtk+-3.0"
3034 gtkx11package="gtk+-x11-3.0"
3035 gtkversion="3.22.0"
3036 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3037 gtk_cflags=$($pkg_config --cflags $gtkpackage)
3038 gtk_libs=$($pkg_config --libs $gtkpackage)
3039 gtk_version=$($pkg_config --modversion $gtkpackage)
3040 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3041 need_x11=yes
3042 gtk_cflags="$gtk_cflags $x11_cflags"
3043 gtk_libs="$gtk_libs $x11_libs"
3045 gtk="yes"
3046 elif test "$gtk" = "yes"; then
3047 feature_not_found "gtk" "Install gtk3-devel"
3048 else
3049 gtk="no"
3054 ##########################################
3055 # GNUTLS probe
3057 if test "$gnutls" != "no"; then
3058 pass="no"
3059 if $pkg_config --exists "gnutls >= 3.1.18"; then
3060 gnutls_cflags=$($pkg_config --cflags gnutls)
3061 gnutls_libs=$($pkg_config --libs gnutls)
3062 # Packaging for the static libraries is not always correct.
3063 # At least ubuntu 18.04 ships only shared libraries.
3064 write_c_skeleton
3065 if compile_prog "" "$gnutls_libs" ; then
3066 pass="yes"
3069 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3070 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3071 else
3072 gnutls="$pass"
3077 # If user didn't give a --disable/enable-gcrypt flag,
3078 # then mark as disabled if user requested nettle
3079 # explicitly
3080 if test -z "$gcrypt"
3081 then
3082 if test "$nettle" = "yes"
3083 then
3084 gcrypt="no"
3088 # If user didn't give a --disable/enable-nettle flag,
3089 # then mark as disabled if user requested gcrypt
3090 # explicitly
3091 if test -z "$nettle"
3092 then
3093 if test "$gcrypt" = "yes"
3094 then
3095 nettle="no"
3099 has_libgcrypt() {
3100 if ! has "libgcrypt-config"
3101 then
3102 return 1
3105 if test -n "$cross_prefix"
3106 then
3107 host=$(libgcrypt-config --host)
3108 if test "$host-" != $cross_prefix
3109 then
3110 return 1
3114 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3115 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3117 if test $maj != 1 || test $min -lt 5
3118 then
3119 return 1
3122 return 0
3126 if test "$nettle" != "no"; then
3127 pass="no"
3128 if $pkg_config --exists "nettle >= 2.7.1"; then
3129 nettle_cflags=$($pkg_config --cflags nettle)
3130 nettle_libs=$($pkg_config --libs nettle)
3131 nettle_version=$($pkg_config --modversion nettle)
3132 # Link test to make sure the given libraries work (e.g for static).
3133 write_c_skeleton
3134 if compile_prog "" "$nettle_libs" ; then
3135 if test -z "$gcrypt"; then
3136 gcrypt="no"
3138 pass="yes"
3141 if test "$pass" = "yes"
3142 then
3143 cat > $TMPC << EOF
3144 #include <nettle/xts.h>
3145 int main(void) {
3146 return 0;
3149 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3150 nettle_xts=yes
3151 qemu_private_xts=no
3154 if test "$pass" = "no" && test "$nettle" = "yes"; then
3155 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3156 else
3157 nettle="$pass"
3161 if test "$gcrypt" != "no"; then
3162 pass="no"
3163 if has_libgcrypt; then
3164 gcrypt_cflags=$(libgcrypt-config --cflags)
3165 gcrypt_libs=$(libgcrypt-config --libs)
3166 # Debian has removed -lgpg-error from libgcrypt-config
3167 # as it "spreads unnecessary dependencies" which in
3168 # turn breaks static builds...
3169 if test "$static" = "yes"
3170 then
3171 gcrypt_libs="$gcrypt_libs -lgpg-error"
3174 # Link test to make sure the given libraries work (e.g for static).
3175 write_c_skeleton
3176 if compile_prog "" "$gcrypt_libs" ; then
3177 pass="yes"
3180 if test "$pass" = "yes"; then
3181 gcrypt="yes"
3182 cat > $TMPC << EOF
3183 #include <gcrypt.h>
3184 int main(void) {
3185 gcry_mac_hd_t handle;
3186 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3187 GCRY_MAC_FLAG_SECURE, NULL);
3188 return 0;
3191 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3192 gcrypt_hmac=yes
3194 cat > $TMPC << EOF
3195 #include <gcrypt.h>
3196 int main(void) {
3197 gcry_cipher_hd_t handle;
3198 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3199 return 0;
3202 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3203 gcrypt_xts=yes
3204 qemu_private_xts=no
3206 elif test "$gcrypt" = "yes"; then
3207 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3208 else
3209 gcrypt="no"
3214 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3215 then
3216 error_exit "Only one of gcrypt & nettle can be enabled"
3219 ##########################################
3220 # libtasn1 - only for the TLS creds/session test suite
3222 tasn1=yes
3223 tasn1_cflags=""
3224 tasn1_libs=""
3225 if $pkg_config --exists "libtasn1"; then
3226 tasn1_cflags=$($pkg_config --cflags libtasn1)
3227 tasn1_libs=$($pkg_config --libs libtasn1)
3228 else
3229 tasn1=no
3233 ##########################################
3234 # PAM probe
3236 if test "$auth_pam" != "no"; then
3237 cat > $TMPC <<EOF
3238 #include <security/pam_appl.h>
3239 #include <stdio.h>
3240 int main(void) {
3241 const char *service_name = "qemu";
3242 const char *user = "frank";
3243 const struct pam_conv pam_conv = { 0 };
3244 pam_handle_t *pamh = NULL;
3245 pam_start(service_name, user, &pam_conv, &pamh);
3246 return 0;
3249 if compile_prog "" "-lpam" ; then
3250 auth_pam=yes
3251 else
3252 if test "$auth_pam" = "yes"; then
3253 feature_not_found "PAM" "Install PAM development package"
3254 else
3255 auth_pam=no
3260 ##########################################
3261 # getifaddrs (for tests/test-io-channel-socket )
3263 have_ifaddrs_h=yes
3264 if ! check_include "ifaddrs.h" ; then
3265 have_ifaddrs_h=no
3268 #########################################
3269 # libdrm check
3270 have_drm_h=no
3271 if check_include "libdrm/drm.h" ; then
3272 have_drm_h=yes
3275 #########################################
3276 # sys/signal.h check
3277 have_sys_signal_h=no
3278 if check_include "sys/signal.h" ; then
3279 have_sys_signal_h=yes
3282 ##########################################
3283 # VTE probe
3285 if test "$vte" != "no"; then
3286 vteminversion="0.32.0"
3287 if $pkg_config --exists "vte-2.91"; then
3288 vtepackage="vte-2.91"
3289 else
3290 vtepackage="vte-2.90"
3292 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3293 vte_cflags=$($pkg_config --cflags $vtepackage)
3294 vte_libs=$($pkg_config --libs $vtepackage)
3295 vteversion=$($pkg_config --modversion $vtepackage)
3296 vte="yes"
3297 elif test "$vte" = "yes"; then
3298 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3299 else
3300 vte="no"
3304 ##########################################
3305 # RDMA needs OpenFabrics libraries
3306 if test "$rdma" != "no" ; then
3307 cat > $TMPC <<EOF
3308 #include <rdma/rdma_cma.h>
3309 int main(void) { return 0; }
3311 rdma_libs="-lrdmacm -libverbs -libumad"
3312 if compile_prog "" "$rdma_libs" ; then
3313 rdma="yes"
3314 else
3315 if test "$rdma" = "yes" ; then
3316 error_exit \
3317 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3318 " Your options:" \
3319 " (1) Fast: Install infiniband packages (devel) from your distro." \
3320 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3321 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3323 rdma="no"
3327 ##########################################
3328 # PVRDMA detection
3330 cat > $TMPC <<EOF &&
3331 #include <sys/mman.h>
3334 main(void)
3336 char buf = 0;
3337 void *addr = &buf;
3338 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3340 return 0;
3344 if test "$rdma" = "yes" ; then
3345 case "$pvrdma" in
3347 if compile_prog "" ""; then
3348 pvrdma="yes"
3349 else
3350 pvrdma="no"
3353 "yes")
3354 if ! compile_prog "" ""; then
3355 error_exit "PVRDMA is not supported since mremap is not implemented"
3357 pvrdma="yes"
3359 "no")
3360 pvrdma="no"
3362 esac
3363 else
3364 if test "$pvrdma" = "yes" ; then
3365 error_exit "PVRDMA requires rdma suppport"
3367 pvrdma="no"
3370 # Let's see if enhanced reg_mr is supported
3371 if test "$pvrdma" = "yes" ; then
3373 cat > $TMPC <<EOF &&
3374 #include <infiniband/verbs.h>
3377 main(void)
3379 struct ibv_mr *mr;
3380 struct ibv_pd *pd = NULL;
3381 size_t length = 10;
3382 uint64_t iova = 0;
3383 int access = 0;
3384 void *addr = NULL;
3386 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3388 ibv_dereg_mr(mr);
3390 return 0;
3393 if ! compile_prog "" "-libverbs"; then
3394 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3398 ##########################################
3399 # xfsctl() probe, used for file-posix.c
3400 if test "$xfs" != "no" ; then
3401 cat > $TMPC << EOF
3402 #include <stddef.h> /* NULL */
3403 #include <xfs/xfs.h>
3404 int main(void)
3406 xfsctl(NULL, 0, 0, NULL);
3407 return 0;
3410 if compile_prog "" "" ; then
3411 xfs="yes"
3412 else
3413 if test "$xfs" = "yes" ; then
3414 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3416 xfs=no
3420 ##########################################
3421 # vde libraries probe
3422 if test "$vde" != "no" ; then
3423 vde_libs="-lvdeplug"
3424 cat > $TMPC << EOF
3425 #include <libvdeplug.h>
3426 int main(void)
3428 struct vde_open_args a = {0, 0, 0};
3429 char s[] = "";
3430 vde_open(s, s, &a);
3431 return 0;
3434 if compile_prog "" "$vde_libs" ; then
3435 vde=yes
3436 else
3437 if test "$vde" = "yes" ; then
3438 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3440 vde=no
3444 ##########################################
3445 # netmap support probe
3446 # Apart from looking for netmap headers, we make sure that the host API version
3447 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3448 # a minor/major version number. Minor new features will be marked with values up
3449 # to 15, and if something happens that requires a change to the backend we will
3450 # move above 15, submit the backend fixes and modify this two bounds.
3451 if test "$netmap" != "no" ; then
3452 cat > $TMPC << EOF
3453 #include <inttypes.h>
3454 #include <net/if.h>
3455 #include <net/netmap.h>
3456 #include <net/netmap_user.h>
3457 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3458 #error
3459 #endif
3460 int main(void) { return 0; }
3462 if compile_prog "" "" ; then
3463 netmap=yes
3464 else
3465 if test "$netmap" = "yes" ; then
3466 feature_not_found "netmap"
3468 netmap=no
3472 ##########################################
3473 # libcap-ng library probe
3474 if test "$cap_ng" != "no" ; then
3475 cap_libs="-lcap-ng"
3476 cat > $TMPC << EOF
3477 #include <cap-ng.h>
3478 int main(void)
3480 capng_capability_to_name(CAPNG_EFFECTIVE);
3481 return 0;
3484 if compile_prog "" "$cap_libs" ; then
3485 cap_ng=yes
3486 else
3487 if test "$cap_ng" = "yes" ; then
3488 feature_not_found "cap_ng" "Install libcap-ng devel"
3490 cap_ng=no
3494 ##########################################
3495 # Sound support libraries probe
3497 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3498 for drv in $audio_drv_list; do
3499 case $drv in
3500 alsa | try-alsa)
3501 if $pkg_config alsa --exists; then
3502 alsa_libs=$($pkg_config alsa --libs)
3503 alsa_cflags=$($pkg_config alsa --cflags)
3504 alsa=yes
3505 if test "$drv" = "try-alsa"; then
3506 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3508 else
3509 if test "$drv" = "try-alsa"; then
3510 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3511 else
3512 error_exit "$drv check failed" \
3513 "Make sure to have the $drv libs and headers installed."
3518 pa | try-pa)
3519 if $pkg_config libpulse --exists; then
3520 libpulse=yes
3521 pulse_libs=$($pkg_config libpulse --libs)
3522 pulse_cflags=$($pkg_config libpulse --cflags)
3523 if test "$drv" = "try-pa"; then
3524 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3526 else
3527 if test "$drv" = "try-pa"; then
3528 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3529 else
3530 error_exit "$drv check failed" \
3531 "Make sure to have the $drv libs and headers installed."
3536 sdl)
3537 if test "$sdl" = "no"; then
3538 error_exit "sdl not found or disabled, can not use sdl audio driver"
3542 try-sdl)
3543 if test "$sdl" = "no"; then
3544 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3545 else
3546 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3550 coreaudio)
3551 coreaudio_libs="-framework CoreAudio"
3554 dsound)
3555 dsound_libs="-lole32 -ldxguid"
3556 audio_win_int="yes"
3559 oss)
3560 oss_libs="$oss_lib"
3563 jack | try-jack)
3564 if $pkg_config jack --exists; then
3565 libjack=yes
3566 jack_libs=$($pkg_config jack --libs)
3567 if test "$drv" = "try-jack"; then
3568 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3570 else
3571 if test "$drv" = "try-jack"; then
3572 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3573 else
3574 error_exit "$drv check failed" \
3575 "Make sure to have the $drv libs and headers installed."
3581 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3582 error_exit "Unknown driver '$drv' selected" \
3583 "Possible drivers are: $audio_possible_drivers"
3586 esac
3587 done
3589 ##########################################
3590 # BrlAPI probe
3592 if test "$brlapi" != "no" ; then
3593 brlapi_libs="-lbrlapi"
3594 cat > $TMPC << EOF
3595 #include <brlapi.h>
3596 #include <stddef.h>
3597 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3599 if compile_prog "" "$brlapi_libs" ; then
3600 brlapi=yes
3601 else
3602 if test "$brlapi" = "yes" ; then
3603 feature_not_found "brlapi" "Install brlapi devel"
3605 brlapi=no
3609 ##########################################
3610 # iconv probe
3611 if test "$iconv" != "no" ; then
3612 cat > $TMPC << EOF
3613 #include <iconv.h>
3614 int main(void) {
3615 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3616 return conv != (iconv_t) -1;
3619 iconv_prefix_list="/usr/local:/usr"
3620 iconv_lib_list=":-liconv"
3621 IFS=:
3622 for iconv_prefix in $iconv_prefix_list; do
3623 IFS=:
3624 iconv_cflags="-I$iconv_prefix/include"
3625 iconv_ldflags="-L$iconv_prefix/lib"
3626 for iconv_link in $iconv_lib_list; do
3627 unset IFS
3628 iconv_lib="$iconv_ldflags $iconv_link"
3629 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3630 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3631 iconv_found=yes
3632 break
3634 done
3635 if test "$iconv_found" = yes ; then
3636 break
3638 done
3639 if test "$iconv_found" = "yes" ; then
3640 iconv=yes
3641 else
3642 if test "$iconv" = "yes" ; then
3643 feature_not_found "iconv" "Install iconv devel"
3645 iconv=no
3649 ##########################################
3650 # curses probe
3651 if test "$iconv" = "no" ; then
3652 # curses will need iconv
3653 curses=no
3655 if test "$curses" != "no" ; then
3656 if test "$mingw32" = "yes" ; then
3657 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3658 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3659 else
3660 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3661 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3663 curses_found=no
3664 cat > $TMPC << EOF
3665 #include <locale.h>
3666 #include <curses.h>
3667 #include <wchar.h>
3668 #include <langinfo.h>
3669 int main(void) {
3670 const char *codeset;
3671 wchar_t wch = L'w';
3672 setlocale(LC_ALL, "");
3673 resize_term(0, 0);
3674 addwstr(L"wide chars\n");
3675 addnwstr(&wch, 1);
3676 add_wch(WACS_DEGREE);
3677 codeset = nl_langinfo(CODESET);
3678 return codeset != 0;
3681 IFS=:
3682 for curses_inc in $curses_inc_list; do
3683 # Make sure we get the wide character prototypes
3684 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3685 IFS=:
3686 for curses_lib in $curses_lib_list; do
3687 unset IFS
3688 if compile_prog "$curses_inc" "$curses_lib" ; then
3689 curses_found=yes
3690 break
3692 done
3693 if test "$curses_found" = yes ; then
3694 break
3696 done
3697 unset IFS
3698 if test "$curses_found" = "yes" ; then
3699 curses=yes
3700 else
3701 if test "$curses" = "yes" ; then
3702 feature_not_found "curses" "Install ncurses devel"
3704 curses=no
3708 ##########################################
3709 # curl probe
3710 if test "$curl" != "no" ; then
3711 if $pkg_config libcurl --exists; then
3712 curlconfig="$pkg_config libcurl"
3713 else
3714 curlconfig=curl-config
3716 cat > $TMPC << EOF
3717 #include <curl/curl.h>
3718 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3720 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3721 curl_libs=$($curlconfig --libs 2>/dev/null)
3722 if compile_prog "$curl_cflags" "$curl_libs" ; then
3723 curl=yes
3724 else
3725 if test "$curl" = "yes" ; then
3726 feature_not_found "curl" "Install libcurl devel"
3728 curl=no
3730 fi # test "$curl"
3732 ##########################################
3733 # glib support probe
3735 glib_req_ver=2.48
3736 glib_modules=gthread-2.0
3737 if test "$modules" = yes; then
3738 glib_modules="$glib_modules gmodule-export-2.0"
3740 if test "$plugins" = yes; then
3741 glib_modules="$glib_modules gmodule-2.0"
3744 for i in $glib_modules; do
3745 if $pkg_config --atleast-version=$glib_req_ver $i; then
3746 glib_cflags=$($pkg_config --cflags $i)
3747 glib_libs=$($pkg_config --libs $i)
3748 else
3749 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3751 done
3753 # This workaround is required due to a bug in pkg-config file for glib as it
3754 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3756 if test "$static" = yes && test "$mingw32" = yes; then
3757 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3760 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3761 gio=yes
3762 gio_cflags=$($pkg_config --cflags gio-2.0)
3763 gio_libs=$($pkg_config --libs gio-2.0)
3764 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3765 if [ ! -x "$gdbus_codegen" ]; then
3766 gdbus_codegen=
3768 else
3769 gio=no
3772 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3773 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3774 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3777 # Sanity check that the current size_t matches the
3778 # size that glib thinks it should be. This catches
3779 # problems on multi-arch where people try to build
3780 # 32-bit QEMU while pointing at 64-bit glib headers
3781 cat > $TMPC <<EOF
3782 #include <glib.h>
3783 #include <unistd.h>
3785 #define QEMU_BUILD_BUG_ON(x) \
3786 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3788 int main(void) {
3789 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3790 return 0;
3794 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3795 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3796 "You probably need to set PKG_CONFIG_LIBDIR"\
3797 "to point to the right pkg-config files for your"\
3798 "build target"
3801 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3802 cat > $TMPC << EOF
3803 #include <glib.h>
3804 int main(void) { return 0; }
3806 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3807 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3808 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3809 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3813 # Silence clang warnings triggered by glib < 2.57.2
3814 cat > $TMPC << EOF
3815 #include <glib.h>
3816 typedef struct Foo {
3817 int i;
3818 } Foo;
3819 static void foo_free(Foo *f)
3821 g_free(f);
3823 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3824 int main(void) { return 0; }
3826 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3827 if cc_has_warning_flag "-Wno-unused-function"; then
3828 glib_cflags="$glib_cflags -Wno-unused-function"
3829 CFLAGS="$CFLAGS -Wno-unused-function"
3833 ##########################################
3834 # SHA command probe for modules
3835 if test "$modules" = yes; then
3836 shacmd_probe="sha1sum sha1 shasum"
3837 for c in $shacmd_probe; do
3838 if has $c; then
3839 shacmd="$c"
3840 break
3842 done
3843 if test "$shacmd" = ""; then
3844 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3848 ##########################################
3849 # libmpathpersist probe
3851 if test "$mpath" != "no" ; then
3852 # probe for the new API
3853 cat > $TMPC <<EOF
3854 #include <libudev.h>
3855 #include <mpath_persist.h>
3856 unsigned mpath_mx_alloc_len = 1024;
3857 int logsink;
3858 static struct config *multipath_conf;
3859 extern struct udev *udev;
3860 extern struct config *get_multipath_config(void);
3861 extern void put_multipath_config(struct config *conf);
3862 struct udev *udev;
3863 struct config *get_multipath_config(void) { return multipath_conf; }
3864 void put_multipath_config(struct config *conf) { }
3866 int main(void) {
3867 udev = udev_new();
3868 multipath_conf = mpath_lib_init();
3869 return 0;
3872 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3873 mpathpersist=yes
3874 mpathpersist_new_api=yes
3875 else
3876 # probe for the old API
3877 cat > $TMPC <<EOF
3878 #include <libudev.h>
3879 #include <mpath_persist.h>
3880 unsigned mpath_mx_alloc_len = 1024;
3881 int logsink;
3882 int main(void) {
3883 struct udev *udev = udev_new();
3884 mpath_lib_init(udev);
3885 return 0;
3888 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3889 mpathpersist=yes
3890 mpathpersist_new_api=no
3891 else
3892 mpathpersist=no
3895 else
3896 mpathpersist=no
3899 ##########################################
3900 # pthread probe
3901 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3903 pthread=no
3904 cat > $TMPC << EOF
3905 #include <pthread.h>
3906 static void *f(void *p) { return NULL; }
3907 int main(void) {
3908 pthread_t thread;
3909 pthread_create(&thread, 0, f, 0);
3910 return 0;
3913 if compile_prog "" "" ; then
3914 pthread=yes
3915 else
3916 for pthread_lib in $PTHREADLIBS_LIST; do
3917 if compile_prog "" "$pthread_lib" ; then
3918 pthread=yes
3919 found=no
3920 for lib_entry in $LIBS; do
3921 if test "$lib_entry" = "$pthread_lib"; then
3922 found=yes
3923 break
3925 done
3926 if test "$found" = "no"; then
3927 LIBS="$pthread_lib $LIBS"
3929 PTHREAD_LIB="$pthread_lib"
3930 break
3932 done
3935 if test "$mingw32" != yes && test "$pthread" = no; then
3936 error_exit "pthread check failed" \
3937 "Make sure to have the pthread libs and headers installed."
3940 # check for pthread_setname_np with thread id
3941 pthread_setname_np_w_tid=no
3942 cat > $TMPC << EOF
3943 #include <pthread.h>
3945 static void *f(void *p) { return NULL; }
3946 int main(void)
3948 pthread_t thread;
3949 pthread_create(&thread, 0, f, 0);
3950 pthread_setname_np(thread, "QEMU");
3951 return 0;
3954 if compile_prog "" "$pthread_lib" ; then
3955 pthread_setname_np_w_tid=yes
3958 # check for pthread_setname_np without thread id
3959 pthread_setname_np_wo_tid=no
3960 cat > $TMPC << EOF
3961 #include <pthread.h>
3963 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3964 int main(void)
3966 pthread_t thread;
3967 pthread_create(&thread, 0, f, 0);
3968 return 0;
3971 if compile_prog "" "$pthread_lib" ; then
3972 pthread_setname_np_wo_tid=yes
3975 ##########################################
3976 # rbd probe
3977 if test "$rbd" != "no" ; then
3978 cat > $TMPC <<EOF
3979 #include <stdio.h>
3980 #include <rbd/librbd.h>
3981 int main(void) {
3982 rados_t cluster;
3983 rados_create(&cluster, NULL);
3984 return 0;
3987 rbd_libs="-lrbd -lrados"
3988 if compile_prog "" "$rbd_libs" ; then
3989 rbd=yes
3990 else
3991 if test "$rbd" = "yes" ; then
3992 feature_not_found "rados block device" "Install librbd/ceph devel"
3994 rbd=no
3998 ##########################################
3999 # libssh probe
4000 if test "$libssh" != "no" ; then
4001 if $pkg_config --exists libssh; then
4002 libssh_cflags=$($pkg_config libssh --cflags)
4003 libssh_libs=$($pkg_config libssh --libs)
4004 libssh=yes
4005 else
4006 if test "$libssh" = "yes" ; then
4007 error_exit "libssh required for --enable-libssh"
4009 libssh=no
4013 ##########################################
4014 # Check for libssh 0.8
4015 # This is done like this instead of using the LIBSSH_VERSION_* and
4016 # SSH_VERSION_* macros because some distributions in the past shipped
4017 # snapshots of the future 0.8 from Git, and those snapshots did not
4018 # have updated version numbers (still referring to 0.7.0).
4020 if test "$libssh" = "yes"; then
4021 cat > $TMPC <<EOF
4022 #include <libssh/libssh.h>
4023 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4025 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4026 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4030 ##########################################
4031 # linux-aio probe
4033 if test "$linux_aio" != "no" ; then
4034 cat > $TMPC <<EOF
4035 #include <libaio.h>
4036 #include <sys/eventfd.h>
4037 #include <stddef.h>
4038 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4040 if compile_prog "" "-laio" ; then
4041 linux_aio=yes
4042 else
4043 if test "$linux_aio" = "yes" ; then
4044 feature_not_found "linux AIO" "Install libaio devel"
4046 linux_aio=no
4049 ##########################################
4050 # linux-io-uring probe
4052 if test "$linux_io_uring" != "no" ; then
4053 if $pkg_config liburing; then
4054 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4055 linux_io_uring_libs=$($pkg_config --libs liburing)
4056 linux_io_uring=yes
4057 else
4058 if test "$linux_io_uring" = "yes" ; then
4059 feature_not_found "linux io_uring" "Install liburing devel"
4061 linux_io_uring=no
4065 ##########################################
4066 # TPM emulation is only on POSIX
4068 if test "$tpm" = ""; then
4069 if test "$mingw32" = "yes"; then
4070 tpm=no
4071 else
4072 tpm=yes
4074 elif test "$tpm" = "yes"; then
4075 if test "$mingw32" = "yes" ; then
4076 error_exit "TPM emulation only available on POSIX systems"
4080 ##########################################
4081 # attr probe
4083 libattr_libs=
4084 if test "$attr" != "no" ; then
4085 cat > $TMPC <<EOF
4086 #include <stdio.h>
4087 #include <sys/types.h>
4088 #ifdef CONFIG_LIBATTR
4089 #include <attr/xattr.h>
4090 #else
4091 #include <sys/xattr.h>
4092 #endif
4093 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4095 if compile_prog "" "" ; then
4096 attr=yes
4097 # Older distros have <attr/xattr.h>, and need -lattr:
4098 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4099 attr=yes
4100 libattr_libs="-lattr"
4101 libattr=yes
4102 else
4103 if test "$attr" = "yes" ; then
4104 feature_not_found "ATTR" "Install libc6 or libattr devel"
4106 attr=no
4110 ##########################################
4111 # iovec probe
4112 cat > $TMPC <<EOF
4113 #include <sys/types.h>
4114 #include <sys/uio.h>
4115 #include <unistd.h>
4116 int main(void) { return sizeof(struct iovec); }
4118 iovec=no
4119 if compile_prog "" "" ; then
4120 iovec=yes
4123 ##########################################
4124 # preadv probe
4125 cat > $TMPC <<EOF
4126 #include <sys/types.h>
4127 #include <sys/uio.h>
4128 #include <unistd.h>
4129 int main(void) { return preadv(0, 0, 0, 0); }
4131 preadv=no
4132 if compile_prog "" "" ; then
4133 preadv=yes
4136 ##########################################
4137 # fdt probe
4138 # fdt support is mandatory for at least some target architectures,
4139 # so insist on it if we're building those system emulators.
4140 fdt_required=no
4141 for target in $target_list; do
4142 case $target in
4143 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4144 fdt_required=yes
4146 esac
4147 done
4149 if test "$fdt_required" = "yes"; then
4150 if test "$fdt" = "no"; then
4151 error_exit "fdt disabled but some requested targets require it." \
4152 "You can turn off fdt only if you also disable all the system emulation" \
4153 "targets which need it (by specifying a cut down --target-list)."
4155 fdt=yes
4156 elif test "$fdt" != "yes" ; then
4157 fdt=no
4160 # fdt is only required when building softmmu targets
4161 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4162 fdt="no"
4165 if test "$fdt" != "no" ; then
4166 fdt_libs="-lfdt"
4167 # explicitly check for libfdt_env.h as it is missing in some stable installs
4168 # and test for required functions to make sure we are on a version >= 1.4.2
4169 cat > $TMPC << EOF
4170 #include <libfdt.h>
4171 #include <libfdt_env.h>
4172 int main(void) { fdt_check_full(NULL, 0); return 0; }
4174 if compile_prog "" "$fdt_libs" ; then
4175 # system DTC is good - use it
4176 fdt=system
4177 else
4178 # have GIT checkout, so activate dtc submodule
4179 if test -e "${source_path}/.git" ; then
4180 git_submodules="${git_submodules} dtc"
4182 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4183 fdt=git
4184 mkdir -p dtc
4185 fdt_cflags="-I${source_path}/dtc/libfdt"
4186 fdt_ldflags="-Ldtc/libfdt"
4187 fdt_libs="$fdt_libs"
4188 elif test "$fdt" = "yes" ; then
4189 # Not a git build & no libfdt found, prompt for system install
4190 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4191 "Please install the DTC (libfdt) devel package"
4192 else
4193 # don't have and don't want
4194 fdt_libs=
4195 fdt=no
4200 ##########################################
4201 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4203 gbm="no"
4204 if $pkg_config gbm; then
4205 gbm_cflags="$($pkg_config --cflags gbm)"
4206 gbm_libs="$($pkg_config --libs gbm)"
4207 gbm="yes"
4210 if test "$opengl" != "no" ; then
4211 opengl_pkgs="epoxy gbm"
4212 if $pkg_config $opengl_pkgs; then
4213 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4214 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4215 opengl=yes
4216 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4217 gtk_gl="yes"
4219 else
4220 if test "$opengl" = "yes" ; then
4221 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4223 opengl_cflags=""
4224 opengl_libs=""
4225 opengl=no
4229 if test "$opengl" = "yes"; then
4230 cat > $TMPC << EOF
4231 #include <epoxy/egl.h>
4232 #ifndef EGL_MESA_image_dma_buf_export
4233 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4234 #endif
4235 int main(void) { return 0; }
4237 if compile_prog "" "" ; then
4238 opengl_dmabuf=yes
4242 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4243 for target in $target_list; do
4244 case $target in
4245 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4246 need_x11=yes
4248 esac
4249 done
4252 ##########################################
4253 # libxml2 probe
4254 if test "$libxml2" != "no" ; then
4255 if $pkg_config --exists libxml-2.0; then
4256 libxml2="yes"
4257 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4258 libxml2_libs=$($pkg_config --libs libxml-2.0)
4259 else
4260 if test "$libxml2" = "yes"; then
4261 feature_not_found "libxml2" "Install libxml2 devel"
4263 libxml2="no"
4267 ##########################################
4268 # glusterfs probe
4269 if test "$glusterfs" != "no" ; then
4270 if $pkg_config --atleast-version=3 glusterfs-api; then
4271 glusterfs="yes"
4272 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4273 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4274 if $pkg_config --atleast-version=4 glusterfs-api; then
4275 glusterfs_xlator_opt="yes"
4277 if $pkg_config --atleast-version=5 glusterfs-api; then
4278 glusterfs_discard="yes"
4280 if $pkg_config --atleast-version=6 glusterfs-api; then
4281 glusterfs_fallocate="yes"
4282 glusterfs_zerofill="yes"
4284 cat > $TMPC << EOF
4285 #include <glusterfs/api/glfs.h>
4288 main(void)
4290 /* new glfs_ftruncate() passes two additional args */
4291 return glfs_ftruncate(NULL, 0, NULL, NULL);
4294 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4295 glusterfs_ftruncate_has_stat="yes"
4297 cat > $TMPC << EOF
4298 #include <glusterfs/api/glfs.h>
4300 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4301 static void
4302 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4306 main(void)
4308 glfs_io_cbk iocb = &glusterfs_iocb;
4309 iocb(NULL, 0 , NULL, NULL, NULL);
4310 return 0;
4313 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4314 glusterfs_iocb_has_stat="yes"
4316 else
4317 if test "$glusterfs" = "yes" ; then
4318 feature_not_found "GlusterFS backend support" \
4319 "Install glusterfs-api devel >= 3"
4321 glusterfs="no"
4325 # Check for inotify functions when we are building linux-user
4326 # emulator. This is done because older glibc versions don't
4327 # have syscall stubs for these implemented. In that case we
4328 # don't provide them even if kernel supports them.
4330 inotify=no
4331 cat > $TMPC << EOF
4332 #include <sys/inotify.h>
4335 main(void)
4337 /* try to start inotify */
4338 return inotify_init();
4341 if compile_prog "" "" ; then
4342 inotify=yes
4345 inotify1=no
4346 cat > $TMPC << EOF
4347 #include <sys/inotify.h>
4350 main(void)
4352 /* try to start inotify */
4353 return inotify_init1(0);
4356 if compile_prog "" "" ; then
4357 inotify1=yes
4360 # check if pipe2 is there
4361 pipe2=no
4362 cat > $TMPC << EOF
4363 #include <unistd.h>
4364 #include <fcntl.h>
4366 int main(void)
4368 int pipefd[2];
4369 return pipe2(pipefd, O_CLOEXEC);
4372 if compile_prog "" "" ; then
4373 pipe2=yes
4376 # check if accept4 is there
4377 accept4=no
4378 cat > $TMPC << EOF
4379 #include <sys/socket.h>
4380 #include <stddef.h>
4382 int main(void)
4384 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4385 return 0;
4388 if compile_prog "" "" ; then
4389 accept4=yes
4392 # check if tee/splice is there. vmsplice was added same time.
4393 splice=no
4394 cat > $TMPC << EOF
4395 #include <unistd.h>
4396 #include <fcntl.h>
4397 #include <limits.h>
4399 int main(void)
4401 int len, fd = 0;
4402 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4403 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4404 return 0;
4407 if compile_prog "" "" ; then
4408 splice=yes
4411 ##########################################
4412 # libnuma probe
4414 if test "$numa" != "no" ; then
4415 cat > $TMPC << EOF
4416 #include <numa.h>
4417 int main(void) { return numa_available(); }
4420 if compile_prog "" "-lnuma" ; then
4421 numa=yes
4422 numa_libs="-lnuma"
4423 else
4424 if test "$numa" = "yes" ; then
4425 feature_not_found "numa" "install numactl devel"
4427 numa=no
4431 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4432 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4433 exit 1
4436 # Even if malloc_trim() is available, these non-libc memory allocators
4437 # do not support it.
4438 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4439 if test "$malloc_trim" = "yes" ; then
4440 echo "Disabling malloc_trim with non-libc memory allocator"
4442 malloc_trim="no"
4445 #######################################
4446 # malloc_trim
4448 if test "$malloc_trim" != "no" ; then
4449 cat > $TMPC << EOF
4450 #include <malloc.h>
4451 int main(void) { malloc_trim(0); return 0; }
4453 if compile_prog "" "" ; then
4454 malloc_trim="yes"
4455 else
4456 malloc_trim="no"
4460 ##########################################
4461 # tcmalloc probe
4463 if test "$tcmalloc" = "yes" ; then
4464 cat > $TMPC << EOF
4465 #include <stdlib.h>
4466 int main(void) {
4467 void *tmp = malloc(1);
4468 if (tmp != NULL) {
4469 return 0;
4471 return 1;
4475 if compile_prog "" "-ltcmalloc" ; then
4476 LIBS="-ltcmalloc $LIBS"
4477 else
4478 feature_not_found "tcmalloc" "install gperftools devel"
4482 ##########################################
4483 # jemalloc probe
4485 if test "$jemalloc" = "yes" ; then
4486 cat > $TMPC << EOF
4487 #include <stdlib.h>
4488 int main(void) {
4489 void *tmp = malloc(1);
4490 if (tmp != NULL) {
4491 return 0;
4493 return 1;
4497 if compile_prog "" "-ljemalloc" ; then
4498 LIBS="-ljemalloc $LIBS"
4499 else
4500 feature_not_found "jemalloc" "install jemalloc devel"
4504 ##########################################
4505 # signalfd probe
4506 signalfd="no"
4507 cat > $TMPC << EOF
4508 #include <unistd.h>
4509 #include <sys/syscall.h>
4510 #include <signal.h>
4511 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4514 if compile_prog "" "" ; then
4515 signalfd=yes
4518 # check if optreset global is declared by <getopt.h>
4519 optreset="no"
4520 cat > $TMPC << EOF
4521 #include <getopt.h>
4522 int main(void) { return optreset; }
4525 if compile_prog "" "" ; then
4526 optreset=yes
4529 # check if eventfd is supported
4530 eventfd=no
4531 cat > $TMPC << EOF
4532 #include <sys/eventfd.h>
4534 int main(void)
4536 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4539 if compile_prog "" "" ; then
4540 eventfd=yes
4543 # check if memfd is supported
4544 memfd=no
4545 cat > $TMPC << EOF
4546 #include <sys/mman.h>
4548 int main(void)
4550 return memfd_create("foo", MFD_ALLOW_SEALING);
4553 if compile_prog "" "" ; then
4554 memfd=yes
4557 # check for usbfs
4558 have_usbfs=no
4559 if test "$linux_user" = "yes"; then
4560 cat > $TMPC << EOF
4561 #include <linux/usbdevice_fs.h>
4563 #ifndef USBDEVFS_GET_CAPABILITIES
4564 #error "USBDEVFS_GET_CAPABILITIES undefined"
4565 #endif
4567 #ifndef USBDEVFS_DISCONNECT_CLAIM
4568 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4569 #endif
4571 int main(void)
4573 return 0;
4576 if compile_prog "" ""; then
4577 have_usbfs=yes
4581 # check for fallocate
4582 fallocate=no
4583 cat > $TMPC << EOF
4584 #include <fcntl.h>
4586 int main(void)
4588 fallocate(0, 0, 0, 0);
4589 return 0;
4592 if compile_prog "" "" ; then
4593 fallocate=yes
4596 # check for fallocate hole punching
4597 fallocate_punch_hole=no
4598 cat > $TMPC << EOF
4599 #include <fcntl.h>
4600 #include <linux/falloc.h>
4602 int main(void)
4604 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4605 return 0;
4608 if compile_prog "" "" ; then
4609 fallocate_punch_hole=yes
4612 # check that fallocate supports range zeroing inside the file
4613 fallocate_zero_range=no
4614 cat > $TMPC << EOF
4615 #include <fcntl.h>
4616 #include <linux/falloc.h>
4618 int main(void)
4620 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4621 return 0;
4624 if compile_prog "" "" ; then
4625 fallocate_zero_range=yes
4628 # check for posix_fallocate
4629 posix_fallocate=no
4630 cat > $TMPC << EOF
4631 #include <fcntl.h>
4633 int main(void)
4635 posix_fallocate(0, 0, 0);
4636 return 0;
4639 if compile_prog "" "" ; then
4640 posix_fallocate=yes
4643 # check for sync_file_range
4644 sync_file_range=no
4645 cat > $TMPC << EOF
4646 #include <fcntl.h>
4648 int main(void)
4650 sync_file_range(0, 0, 0, 0);
4651 return 0;
4654 if compile_prog "" "" ; then
4655 sync_file_range=yes
4658 # check for linux/fiemap.h and FS_IOC_FIEMAP
4659 fiemap=no
4660 cat > $TMPC << EOF
4661 #include <sys/ioctl.h>
4662 #include <linux/fs.h>
4663 #include <linux/fiemap.h>
4665 int main(void)
4667 ioctl(0, FS_IOC_FIEMAP, 0);
4668 return 0;
4671 if compile_prog "" "" ; then
4672 fiemap=yes
4675 # check for dup3
4676 dup3=no
4677 cat > $TMPC << EOF
4678 #include <unistd.h>
4680 int main(void)
4682 dup3(0, 0, 0);
4683 return 0;
4686 if compile_prog "" "" ; then
4687 dup3=yes
4690 # check for ppoll support
4691 ppoll=no
4692 cat > $TMPC << EOF
4693 #include <poll.h>
4695 int main(void)
4697 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4698 ppoll(&pfd, 1, 0, 0);
4699 return 0;
4702 if compile_prog "" "" ; then
4703 ppoll=yes
4706 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4707 prctl_pr_set_timerslack=no
4708 cat > $TMPC << EOF
4709 #include <sys/prctl.h>
4711 int main(void)
4713 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4714 return 0;
4717 if compile_prog "" "" ; then
4718 prctl_pr_set_timerslack=yes
4721 # check for epoll support
4722 epoll=no
4723 cat > $TMPC << EOF
4724 #include <sys/epoll.h>
4726 int main(void)
4728 epoll_create(0);
4729 return 0;
4732 if compile_prog "" "" ; then
4733 epoll=yes
4736 # epoll_create1 is a later addition
4737 # so we must check separately for its presence
4738 epoll_create1=no
4739 cat > $TMPC << EOF
4740 #include <sys/epoll.h>
4742 int main(void)
4744 /* Note that we use epoll_create1 as a value, not as
4745 * a function being called. This is necessary so that on
4746 * old SPARC glibc versions where the function was present in
4747 * the library but not declared in the header file we will
4748 * fail the configure check. (Otherwise we will get a compiler
4749 * warning but not an error, and will proceed to fail the
4750 * qemu compile where we compile with -Werror.)
4752 return (int)(uintptr_t)&epoll_create1;
4755 if compile_prog "" "" ; then
4756 epoll_create1=yes
4759 # check for sendfile support
4760 sendfile=no
4761 cat > $TMPC << EOF
4762 #include <sys/sendfile.h>
4764 int main(void)
4766 return sendfile(0, 0, 0, 0);
4769 if compile_prog "" "" ; then
4770 sendfile=yes
4773 # check for timerfd support (glibc 2.8 and newer)
4774 timerfd=no
4775 cat > $TMPC << EOF
4776 #include <sys/timerfd.h>
4778 int main(void)
4780 return(timerfd_create(CLOCK_REALTIME, 0));
4783 if compile_prog "" "" ; then
4784 timerfd=yes
4787 # check for setns and unshare support
4788 setns=no
4789 cat > $TMPC << EOF
4790 #include <sched.h>
4792 int main(void)
4794 int ret;
4795 ret = setns(0, 0);
4796 ret = unshare(0);
4797 return ret;
4800 if compile_prog "" "" ; then
4801 setns=yes
4804 # clock_adjtime probe
4805 clock_adjtime=no
4806 cat > $TMPC <<EOF
4807 #include <time.h>
4809 int main(void)
4811 return clock_adjtime(0, 0);
4814 clock_adjtime=no
4815 if compile_prog "" "" ; then
4816 clock_adjtime=yes
4819 # syncfs probe
4820 syncfs=no
4821 cat > $TMPC <<EOF
4822 #include <unistd.h>
4824 int main(void)
4826 return syncfs(0);
4829 syncfs=no
4830 if compile_prog "" "" ; then
4831 syncfs=yes
4834 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4835 kcov=no
4836 if check_include sys/kcov.h ; then
4837 kcov=yes
4840 # check for btrfs filesystem support (kernel must be 3.9+)
4841 btrfs=no
4842 if check_include linux/btrfs.h ; then
4843 btrfs=yes
4846 # If we're making warnings fatal, apply this to Sphinx runs as well
4847 sphinx_werror=""
4848 if test "$werror" = "yes"; then
4849 sphinx_werror="-W"
4852 # Check we have a new enough version of sphinx-build
4853 has_sphinx_build() {
4854 # This is a bit awkward but works: create a trivial document and
4855 # try to run it with our configuration file (which enforces a
4856 # version requirement). This will fail if either
4857 # sphinx-build doesn't exist at all or if it is too old.
4858 mkdir -p "$TMPDIR1/sphinx"
4859 touch "$TMPDIR1/sphinx/index.rst"
4860 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4861 -b html "$TMPDIR1/sphinx" \
4862 "$TMPDIR1/sphinx/out" >> config.log 2>&1
4865 # Check if tools are available to build documentation.
4866 if test "$docs" != "no" ; then
4867 if has_sphinx_build; then
4868 sphinx_ok=yes
4869 else
4870 sphinx_ok=no
4872 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
4873 docs=yes
4874 else
4875 if test "$docs" = "yes" ; then
4876 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4877 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4879 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
4881 docs=no
4885 # Search for bswap_32 function
4886 byteswap_h=no
4887 cat > $TMPC << EOF
4888 #include <byteswap.h>
4889 int main(void) { return bswap_32(0); }
4891 if compile_prog "" "" ; then
4892 byteswap_h=yes
4895 # Search for bswap32 function
4896 bswap_h=no
4897 cat > $TMPC << EOF
4898 #include <sys/endian.h>
4899 #include <sys/types.h>
4900 #include <machine/bswap.h>
4901 int main(void) { return bswap32(0); }
4903 if compile_prog "" "" ; then
4904 bswap_h=yes
4907 ##########################################
4908 # Do we have libiscsi >= 1.9.0
4909 if test "$libiscsi" != "no" ; then
4910 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4911 libiscsi="yes"
4912 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4913 libiscsi_libs=$($pkg_config --libs libiscsi)
4914 else
4915 if test "$libiscsi" = "yes" ; then
4916 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4918 libiscsi="no"
4922 ##########################################
4923 # Do we need librt
4924 # uClibc provides 2 versions of clock_gettime(), one with realtime
4925 # support and one without. This means that the clock_gettime() don't
4926 # need -lrt. We still need it for timer_create() so we check for this
4927 # function in addition.
4928 cat > $TMPC <<EOF
4929 #include <signal.h>
4930 #include <time.h>
4931 int main(void) {
4932 timer_create(CLOCK_REALTIME, NULL, NULL);
4933 return clock_gettime(CLOCK_REALTIME, NULL);
4937 if compile_prog "" "" ; then
4939 # we need pthread for static linking. use previous pthread test result
4940 elif compile_prog "" "$pthread_lib -lrt" ; then
4941 LIBS="$LIBS -lrt"
4944 # Check whether we have openpty() in either libc or libutil
4945 cat > $TMPC << EOF
4946 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4947 int main(void) { return openpty(0, 0, 0, 0, 0); }
4950 have_openpty="no"
4951 if compile_prog "" "" ; then
4952 have_openpty="yes"
4953 else
4954 if compile_prog "" "-lutil" ; then
4955 have_openpty="yes"
4959 ##########################################
4960 # spice probe
4961 if test "$spice" != "no" ; then
4962 cat > $TMPC << EOF
4963 #include <spice.h>
4964 int main(void) { spice_server_new(); return 0; }
4966 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4967 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4968 if $pkg_config --atleast-version=0.12.5 spice-server && \
4969 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4970 compile_prog "$spice_cflags" "$spice_libs" ; then
4971 spice="yes"
4972 else
4973 if test "$spice" = "yes" ; then
4974 feature_not_found "spice" \
4975 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4977 spice="no"
4981 # check for smartcard support
4982 if test "$smartcard" != "no"; then
4983 if $pkg_config --atleast-version=2.5.1 libcacard; then
4984 libcacard_cflags=$($pkg_config --cflags libcacard)
4985 libcacard_libs=$($pkg_config --libs libcacard)
4986 smartcard="yes"
4987 else
4988 if test "$smartcard" = "yes"; then
4989 feature_not_found "smartcard" "Install libcacard devel"
4991 smartcard="no"
4995 # check for libusb
4996 if test "$libusb" != "no" ; then
4997 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4998 libusb="yes"
4999 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5000 libusb_libs=$($pkg_config --libs libusb-1.0)
5001 else
5002 if test "$libusb" = "yes"; then
5003 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5005 libusb="no"
5009 # check for usbredirparser for usb network redirection support
5010 if test "$usb_redir" != "no" ; then
5011 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5012 usb_redir="yes"
5013 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5014 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5015 else
5016 if test "$usb_redir" = "yes"; then
5017 feature_not_found "usb-redir" "Install usbredir devel"
5019 usb_redir="no"
5023 ##########################################
5024 # check if we have VSS SDK headers for win
5026 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5027 test "$vss_win32_sdk" != "no" ; then
5028 case "$vss_win32_sdk" in
5029 "") vss_win32_include="-isystem $source_path" ;;
5030 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5031 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5032 vss_win32_include="-isystem $source_path/.sdk/vss"
5033 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5035 *) vss_win32_include="-isystem $vss_win32_sdk"
5036 esac
5037 cat > $TMPC << EOF
5038 #define __MIDL_user_allocate_free_DEFINED__
5039 #include <inc/win2003/vss.h>
5040 int main(void) { return VSS_CTX_BACKUP; }
5042 if compile_prog "$vss_win32_include" "" ; then
5043 guest_agent_with_vss="yes"
5044 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5045 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5046 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5047 else
5048 if test "$vss_win32_sdk" != "" ; then
5049 echo "ERROR: Please download and install Microsoft VSS SDK:"
5050 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5051 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5052 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5053 echo "ERROR: The headers are extracted in the directory \`inc'."
5054 feature_not_found "VSS support"
5056 guest_agent_with_vss="no"
5060 ##########################################
5061 # lookup Windows platform SDK (if not specified)
5062 # The SDK is needed only to build .tlb (type library) file of guest agent
5063 # VSS provider from the source. It is usually unnecessary because the
5064 # pre-compiled .tlb file is included.
5066 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5067 test "$guest_agent_with_vss" = "yes" ; then
5068 if test -z "$win_sdk"; then
5069 programfiles="$PROGRAMFILES"
5070 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5071 if test -n "$programfiles"; then
5072 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5073 else
5074 feature_not_found "Windows SDK"
5076 elif test "$win_sdk" = "no"; then
5077 win_sdk=""
5081 ##########################################
5082 # check if mingw environment provides a recent ntddscsi.h
5083 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5084 cat > $TMPC << EOF
5085 #include <windows.h>
5086 #include <ntddscsi.h>
5087 int main(void) {
5088 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5089 #error Missing required ioctl definitions
5090 #endif
5091 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5092 return addr.Lun;
5095 if compile_prog "" "" ; then
5096 guest_agent_ntddscsi=yes
5097 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5101 ##########################################
5102 # virgl renderer probe
5104 if test "$virglrenderer" != "no" ; then
5105 cat > $TMPC << EOF
5106 #include <virglrenderer.h>
5107 int main(void) { virgl_renderer_poll(); return 0; }
5109 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5110 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5111 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5112 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5113 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5114 virglrenderer="yes"
5115 else
5116 if test "$virglrenderer" = "yes" ; then
5117 feature_not_found "virglrenderer"
5119 virglrenderer="no"
5123 ##########################################
5124 # capstone
5126 case "$capstone" in
5127 "" | yes)
5128 if $pkg_config capstone; then
5129 capstone=system
5130 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5131 capstone=git
5132 elif test -e "${source_path}/capstone/Makefile" ; then
5133 capstone=internal
5134 elif test -z "$capstone" ; then
5135 capstone=no
5136 else
5137 feature_not_found "capstone" "Install capstone devel or git submodule"
5141 system)
5142 if ! $pkg_config capstone; then
5143 feature_not_found "capstone" "Install capstone devel"
5146 esac
5148 case "$capstone" in
5149 git | internal)
5150 if test "$capstone" = git; then
5151 git_submodules="${git_submodules} capstone"
5153 mkdir -p capstone
5154 if test "$mingw32" = "yes"; then
5155 LIBCAPSTONE=capstone.lib
5156 else
5157 LIBCAPSTONE=libcapstone.a
5159 capstone_libs="-Lcapstone -lcapstone"
5160 capstone_cflags="-I${source_path}/capstone/include"
5163 system)
5164 capstone_libs="$($pkg_config --libs capstone)"
5165 capstone_cflags="$($pkg_config --cflags capstone)"
5171 error_exit "Unknown state for capstone: $capstone"
5173 esac
5175 ##########################################
5176 # check if we have fdatasync
5178 fdatasync=no
5179 cat > $TMPC << EOF
5180 #include <unistd.h>
5181 int main(void) {
5182 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5183 return fdatasync(0);
5184 #else
5185 #error Not supported
5186 #endif
5189 if compile_prog "" "" ; then
5190 fdatasync=yes
5193 ##########################################
5194 # check if we have madvise
5196 madvise=no
5197 cat > $TMPC << EOF
5198 #include <sys/types.h>
5199 #include <sys/mman.h>
5200 #include <stddef.h>
5201 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5203 if compile_prog "" "" ; then
5204 madvise=yes
5207 ##########################################
5208 # check if we have posix_madvise
5210 posix_madvise=no
5211 cat > $TMPC << EOF
5212 #include <sys/mman.h>
5213 #include <stddef.h>
5214 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5216 if compile_prog "" "" ; then
5217 posix_madvise=yes
5220 ##########################################
5221 # check if we have posix_memalign()
5223 posix_memalign=no
5224 cat > $TMPC << EOF
5225 #include <stdlib.h>
5226 int main(void) {
5227 void *p;
5228 return posix_memalign(&p, 8, 8);
5231 if compile_prog "" "" ; then
5232 posix_memalign=yes
5235 ##########################################
5236 # check if we have posix_syslog
5238 posix_syslog=no
5239 cat > $TMPC << EOF
5240 #include <syslog.h>
5241 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5243 if compile_prog "" "" ; then
5244 posix_syslog=yes
5247 ##########################################
5248 # check if we have sem_timedwait
5250 sem_timedwait=no
5251 cat > $TMPC << EOF
5252 #include <semaphore.h>
5253 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5255 if compile_prog "" "" ; then
5256 sem_timedwait=yes
5259 ##########################################
5260 # check if we have strchrnul
5262 strchrnul=no
5263 cat > $TMPC << EOF
5264 #include <string.h>
5265 int main(void);
5266 // Use a haystack that the compiler shouldn't be able to constant fold
5267 char *haystack = (char*)&main;
5268 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5270 if compile_prog "" "" ; then
5271 strchrnul=yes
5274 #########################################
5275 # check if we have st_atim
5277 st_atim=no
5278 cat > $TMPC << EOF
5279 #include <sys/stat.h>
5280 #include <stddef.h>
5281 int main(void) { return offsetof(struct stat, st_atim); }
5283 if compile_prog "" "" ; then
5284 st_atim=yes
5287 ##########################################
5288 # check if trace backend exists
5290 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5291 if test "$?" -ne 0 ; then
5292 error_exit "invalid trace backends" \
5293 "Please choose supported trace backends."
5296 ##########################################
5297 # For 'ust' backend, test if ust headers are present
5298 if have_backend "ust"; then
5299 cat > $TMPC << EOF
5300 #include <lttng/tracepoint.h>
5301 int main(void) { return 0; }
5303 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5304 if $pkg_config lttng-ust --exists; then
5305 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5306 else
5307 lttng_ust_libs="-llttng-ust -ldl"
5309 if $pkg_config liburcu-bp --exists; then
5310 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5311 else
5312 urcu_bp_libs="-lurcu-bp"
5314 else
5315 error_exit "Trace backend 'ust' missing lttng-ust header files"
5319 ##########################################
5320 # For 'dtrace' backend, test if 'dtrace' command is present
5321 if have_backend "dtrace"; then
5322 if ! has 'dtrace' ; then
5323 error_exit "dtrace command is not found in PATH $PATH"
5325 trace_backend_stap="no"
5326 if has 'stap' ; then
5327 trace_backend_stap="yes"
5331 ##########################################
5332 # check and set a backend for coroutine
5334 # We prefer ucontext, but it's not always possible. The fallback
5335 # is sigcontext. On Windows the only valid backend is the Windows
5336 # specific one.
5338 ucontext_works=no
5339 if test "$darwin" != "yes"; then
5340 cat > $TMPC << EOF
5341 #include <ucontext.h>
5342 #ifdef __stub_makecontext
5343 #error Ignoring glibc stub makecontext which will always fail
5344 #endif
5345 int main(void) { makecontext(0, 0, 0); return 0; }
5347 if compile_prog "" "" ; then
5348 ucontext_works=yes
5352 if test "$coroutine" = ""; then
5353 if test "$mingw32" = "yes"; then
5354 coroutine=win32
5355 elif test "$ucontext_works" = "yes"; then
5356 coroutine=ucontext
5357 else
5358 coroutine=sigaltstack
5360 else
5361 case $coroutine in
5362 windows)
5363 if test "$mingw32" != "yes"; then
5364 error_exit "'windows' coroutine backend only valid for Windows"
5366 # Unfortunately the user visible backend name doesn't match the
5367 # coroutine-*.c filename for this case, so we have to adjust it here.
5368 coroutine=win32
5370 ucontext)
5371 if test "$ucontext_works" != "yes"; then
5372 feature_not_found "ucontext"
5375 sigaltstack)
5376 if test "$mingw32" = "yes"; then
5377 error_exit "only the 'windows' coroutine backend is valid for Windows"
5381 error_exit "unknown coroutine backend $coroutine"
5383 esac
5386 if test "$coroutine_pool" = ""; then
5387 coroutine_pool=yes
5390 if test "$debug_stack_usage" = "yes"; then
5391 if test "$coroutine_pool" = "yes"; then
5392 echo "WARN: disabling coroutine pool for stack usage debugging"
5393 coroutine_pool=no
5397 ##################################################
5398 # SafeStack
5401 if test "$safe_stack" = "yes"; then
5402 cat > $TMPC << EOF
5403 int main(int argc, char *argv[])
5405 #if ! __has_feature(safe_stack)
5406 #error SafeStack Disabled
5407 #endif
5408 return 0;
5411 flag="-fsanitize=safe-stack"
5412 # Check that safe-stack is supported and enabled.
5413 if compile_prog "-Werror $flag" "$flag"; then
5414 # Flag needed both at compilation and at linking
5415 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5416 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5417 else
5418 error_exit "SafeStack not supported by your compiler"
5420 if test "$coroutine" != "ucontext"; then
5421 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5423 else
5424 cat > $TMPC << EOF
5425 int main(int argc, char *argv[])
5427 #if defined(__has_feature)
5428 #if __has_feature(safe_stack)
5429 #error SafeStack Enabled
5430 #endif
5431 #endif
5432 return 0;
5435 if test "$safe_stack" = "no"; then
5436 # Make sure that safe-stack is disabled
5437 if ! compile_prog "-Werror" ""; then
5438 # SafeStack was already enabled, try to explicitly remove the feature
5439 flag="-fno-sanitize=safe-stack"
5440 if ! compile_prog "-Werror $flag" "$flag"; then
5441 error_exit "Configure cannot disable SafeStack"
5443 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5444 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5446 else # "$safe_stack" = ""
5447 # Set safe_stack to yes or no based on pre-existing flags
5448 if compile_prog "-Werror" ""; then
5449 safe_stack="no"
5450 else
5451 safe_stack="yes"
5452 if test "$coroutine" != "ucontext"; then
5453 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5459 ##########################################
5460 # check if we have open_by_handle_at
5462 open_by_handle_at=no
5463 cat > $TMPC << EOF
5464 #include <fcntl.h>
5465 #if !defined(AT_EMPTY_PATH)
5466 # error missing definition
5467 #else
5468 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5469 #endif
5471 if compile_prog "" "" ; then
5472 open_by_handle_at=yes
5475 ########################################
5476 # check if we have linux/magic.h
5478 linux_magic_h=no
5479 cat > $TMPC << EOF
5480 #include <linux/magic.h>
5481 int main(void) {
5482 return 0;
5485 if compile_prog "" "" ; then
5486 linux_magic_h=yes
5489 ########################################
5490 # check if we have valgrind/valgrind.h
5492 valgrind_h=no
5493 cat > $TMPC << EOF
5494 #include <valgrind/valgrind.h>
5495 int main(void) {
5496 return 0;
5499 if compile_prog "" "" ; then
5500 valgrind_h=yes
5503 ########################################
5504 # check if environ is declared
5506 has_environ=no
5507 cat > $TMPC << EOF
5508 #include <unistd.h>
5509 int main(void) {
5510 environ = 0;
5511 return 0;
5514 if compile_prog "" "" ; then
5515 has_environ=yes
5518 ########################################
5519 # check if cpuid.h is usable.
5521 cat > $TMPC << EOF
5522 #include <cpuid.h>
5523 int main(void) {
5524 unsigned a, b, c, d;
5525 int max = __get_cpuid_max(0, 0);
5527 if (max >= 1) {
5528 __cpuid(1, a, b, c, d);
5531 if (max >= 7) {
5532 __cpuid_count(7, 0, a, b, c, d);
5535 return 0;
5538 if compile_prog "" "" ; then
5539 cpuid_h=yes
5542 ##########################################
5543 # avx2 optimization requirement check
5545 # There is no point enabling this if cpuid.h is not usable,
5546 # since we won't be able to select the new routines.
5548 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5549 cat > $TMPC << EOF
5550 #pragma GCC push_options
5551 #pragma GCC target("avx2")
5552 #include <cpuid.h>
5553 #include <immintrin.h>
5554 static int bar(void *a) {
5555 __m256i x = *(__m256i *)a;
5556 return _mm256_testz_si256(x, x);
5558 int main(int argc, char *argv[]) { return bar(argv[0]); }
5560 if compile_object "" ; then
5561 avx2_opt="yes"
5562 else
5563 avx2_opt="no"
5567 ##########################################
5568 # avx512f optimization requirement check
5570 # There is no point enabling this if cpuid.h is not usable,
5571 # since we won't be able to select the new routines.
5572 # by default, it is turned off.
5573 # if user explicitly want to enable it, check environment
5575 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5576 cat > $TMPC << EOF
5577 #pragma GCC push_options
5578 #pragma GCC target("avx512f")
5579 #include <cpuid.h>
5580 #include <immintrin.h>
5581 static int bar(void *a) {
5582 __m512i x = *(__m512i *)a;
5583 return _mm512_test_epi64_mask(x, x);
5585 int main(int argc, char *argv[])
5587 return bar(argv[0]);
5590 if ! compile_object "" ; then
5591 avx512f_opt="no"
5593 else
5594 avx512f_opt="no"
5597 ########################################
5598 # check if __[u]int128_t is usable.
5600 int128=no
5601 cat > $TMPC << EOF
5602 __int128_t a;
5603 __uint128_t b;
5604 int main (void) {
5605 a = a + b;
5606 b = a * b;
5607 a = a * a;
5608 return 0;
5611 if compile_prog "" "" ; then
5612 int128=yes
5615 #########################################
5616 # See if 128-bit atomic operations are supported.
5618 atomic128=no
5619 if test "$int128" = "yes"; then
5620 cat > $TMPC << EOF
5621 int main(void)
5623 unsigned __int128 x = 0, y = 0;
5624 y = __atomic_load_16(&x, 0);
5625 __atomic_store_16(&x, y, 0);
5626 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5627 return 0;
5630 if compile_prog "" "" ; then
5631 atomic128=yes
5635 cmpxchg128=no
5636 if test "$int128" = yes && test "$atomic128" = no; then
5637 cat > $TMPC << EOF
5638 int main(void)
5640 unsigned __int128 x = 0, y = 0;
5641 __sync_val_compare_and_swap_16(&x, y, x);
5642 return 0;
5645 if compile_prog "" "" ; then
5646 cmpxchg128=yes
5650 #########################################
5651 # See if 64-bit atomic operations are supported.
5652 # Note that without __atomic builtins, we can only
5653 # assume atomic loads/stores max at pointer size.
5655 cat > $TMPC << EOF
5656 #include <stdint.h>
5657 int main(void)
5659 uint64_t x = 0, y = 0;
5660 #ifdef __ATOMIC_RELAXED
5661 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5662 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5663 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5664 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5665 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5666 #else
5667 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5668 __sync_lock_test_and_set(&x, y);
5669 __sync_val_compare_and_swap(&x, y, 0);
5670 __sync_fetch_and_add(&x, y);
5671 #endif
5672 return 0;
5675 if compile_prog "" "" ; then
5676 atomic64=yes
5679 #########################################
5680 # See if --dynamic-list is supported by the linker
5681 ld_dynamic_list="no"
5682 if test "$static" = "no" ; then
5683 cat > $TMPTXT <<EOF
5685 foo;
5689 cat > $TMPC <<EOF
5690 #include <stdio.h>
5691 void foo(void);
5693 void foo(void)
5695 printf("foo\n");
5698 int main(void)
5700 foo();
5701 return 0;
5705 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5706 ld_dynamic_list="yes"
5710 #########################################
5711 # See if -exported_symbols_list is supported by the linker
5713 ld_exported_symbols_list="no"
5714 if test "$static" = "no" ; then
5715 cat > $TMPTXT <<EOF
5716 _foo
5719 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5720 ld_exported_symbols_list="yes"
5724 if test "$plugins" = "yes" &&
5725 test "$ld_dynamic_list" = "no" &&
5726 test "$ld_exported_symbols_list" = "no" ; then
5727 error_exit \
5728 "Plugin support requires dynamic linking and specifying a set of symbols " \
5729 "that are exported to plugins. Unfortunately your linker doesn't " \
5730 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5731 "for this purpose. You can't build with --static."
5734 ########################################
5735 # See if __attribute__((alias)) is supported.
5736 # This false for Xcode 9, but has been remedied for Xcode 10.
5737 # Unfortunately, travis uses Xcode 9 by default.
5739 attralias=no
5740 cat > $TMPC << EOF
5741 int x = 1;
5742 extern const int y __attribute__((alias("x")));
5743 int main(void) { return 0; }
5745 if compile_prog "" "" ; then
5746 attralias=yes
5749 ########################################
5750 # check if getauxval is available.
5752 getauxval=no
5753 cat > $TMPC << EOF
5754 #include <sys/auxv.h>
5755 int main(void) {
5756 return getauxval(AT_HWCAP) == 0;
5759 if compile_prog "" "" ; then
5760 getauxval=yes
5763 ########################################
5764 # check if ccache is interfering with
5765 # semantic analysis of macros
5767 unset CCACHE_CPP2
5768 ccache_cpp2=no
5769 cat > $TMPC << EOF
5770 static const int Z = 1;
5771 #define fn() ({ Z; })
5772 #define TAUT(X) ((X) == Z)
5773 #define PAREN(X, Y) (X == Y)
5774 #define ID(X) (X)
5775 int main(int argc, char *argv[])
5777 int x = 0, y = 0;
5778 x = ID(x);
5779 x = fn();
5780 fn();
5781 if (PAREN(x, y)) return 0;
5782 if (TAUT(Z)) return 0;
5783 return 0;
5787 if ! compile_object "-Werror"; then
5788 ccache_cpp2=yes
5791 #################################################
5792 # clang does not support glibc + FORTIFY_SOURCE.
5794 if test "$fortify_source" != "no"; then
5795 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5796 fortify_source="no";
5797 elif test -n "$cxx" && has $cxx &&
5798 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5799 fortify_source="no";
5800 else
5801 fortify_source="yes"
5805 ###############################################
5806 # Check if copy_file_range is provided by glibc
5807 have_copy_file_range=no
5808 cat > $TMPC << EOF
5809 #include <unistd.h>
5810 int main(void) {
5811 copy_file_range(0, NULL, 0, NULL, 0, 0);
5812 return 0;
5815 if compile_prog "" "" ; then
5816 have_copy_file_range=yes
5819 ##########################################
5820 # check if struct fsxattr is available via linux/fs.h
5822 have_fsxattr=no
5823 cat > $TMPC << EOF
5824 #include <linux/fs.h>
5825 struct fsxattr foo;
5826 int main(void) {
5827 return 0;
5830 if compile_prog "" "" ; then
5831 have_fsxattr=yes
5834 ##########################################
5835 # check for usable membarrier system call
5836 if test "$membarrier" = "yes"; then
5837 have_membarrier=no
5838 if test "$mingw32" = "yes" ; then
5839 have_membarrier=yes
5840 elif test "$linux" = "yes" ; then
5841 cat > $TMPC << EOF
5842 #include <linux/membarrier.h>
5843 #include <sys/syscall.h>
5844 #include <unistd.h>
5845 #include <stdlib.h>
5846 int main(void) {
5847 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5848 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5849 exit(0);
5852 if compile_prog "" "" ; then
5853 have_membarrier=yes
5856 if test "$have_membarrier" = "no"; then
5857 feature_not_found "membarrier" "membarrier system call not available"
5859 else
5860 # Do not enable it by default even for Mingw32, because it doesn't
5861 # work on Wine.
5862 membarrier=no
5865 ##########################################
5866 # check if rtnetlink.h exists and is useful
5867 have_rtnetlink=no
5868 cat > $TMPC << EOF
5869 #include <linux/rtnetlink.h>
5870 int main(void) {
5871 return IFLA_PROTO_DOWN;
5874 if compile_prog "" "" ; then
5875 have_rtnetlink=yes
5878 ##########################################
5879 # check for usable AF_VSOCK environment
5880 have_af_vsock=no
5881 cat > $TMPC << EOF
5882 #include <errno.h>
5883 #include <sys/types.h>
5884 #include <sys/socket.h>
5885 #if !defined(AF_VSOCK)
5886 # error missing AF_VSOCK flag
5887 #endif
5888 #include <linux/vm_sockets.h>
5889 int main(void) {
5890 int sock, ret;
5891 struct sockaddr_vm svm;
5892 socklen_t len = sizeof(svm);
5893 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5894 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5895 if ((ret == -1) && (errno == ENOTCONN)) {
5896 return 0;
5898 return -1;
5901 if compile_prog "" "" ; then
5902 have_af_vsock=yes
5905 ##########################################
5906 # check for usable AF_ALG environment
5907 have_afalg=no
5908 cat > $TMPC << EOF
5909 #include <errno.h>
5910 #include <sys/types.h>
5911 #include <sys/socket.h>
5912 #include <linux/if_alg.h>
5913 int main(void) {
5914 int sock;
5915 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5916 return sock;
5919 if compile_prog "" "" ; then
5920 have_afalg=yes
5922 if test "$crypto_afalg" = "yes"
5923 then
5924 if test "$have_afalg" != "yes"
5925 then
5926 error_exit "AF_ALG requested but could not be detected"
5931 #################################################
5932 # Check to see if we have the Hypervisor framework
5933 if [ "$darwin" = "yes" ] ; then
5934 cat > $TMPC << EOF
5935 #include <Hypervisor/hv.h>
5936 int main() { return 0;}
5938 if ! compile_object ""; then
5939 hvf='no'
5940 else
5941 hvf='yes'
5942 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
5946 ##########################################
5947 # check for sysmacros.h
5949 have_sysmacros=no
5950 cat > $TMPC << EOF
5951 #include <sys/sysmacros.h>
5952 int main(void) {
5953 return makedev(0, 0);
5956 if compile_prog "" "" ; then
5957 have_sysmacros=yes
5960 ##########################################
5961 # check for _Static_assert()
5963 have_static_assert=no
5964 cat > $TMPC << EOF
5965 _Static_assert(1, "success");
5966 int main(void) {
5967 return 0;
5970 if compile_prog "" "" ; then
5971 have_static_assert=yes
5974 ##########################################
5975 # check for utmpx.h, it is missing e.g. on OpenBSD
5977 have_utmpx=no
5978 cat > $TMPC << EOF
5979 #include <utmpx.h>
5980 struct utmpx user_info;
5981 int main(void) {
5982 return 0;
5985 if compile_prog "" "" ; then
5986 have_utmpx=yes
5989 ##########################################
5990 # check for getrandom()
5992 have_getrandom=no
5993 cat > $TMPC << EOF
5994 #include <sys/random.h>
5995 int main(void) {
5996 return getrandom(0, 0, GRND_NONBLOCK);
5999 if compile_prog "" "" ; then
6000 have_getrandom=yes
6003 ##########################################
6004 # checks for sanitizers
6006 have_asan=no
6007 have_ubsan=no
6008 have_asan_iface_h=no
6009 have_asan_iface_fiber=no
6011 if test "$sanitizers" = "yes" ; then
6012 write_c_skeleton
6013 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6014 have_asan=yes
6017 # we could use a simple skeleton for flags checks, but this also
6018 # detect the static linking issue of ubsan, see also:
6019 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6020 cat > $TMPC << EOF
6021 #include <stdlib.h>
6022 int main(void) {
6023 void *tmp = malloc(10);
6024 if (tmp != NULL) {
6025 return *(int *)(tmp + 2);
6027 return 1;
6030 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6031 have_ubsan=yes
6034 if check_include "sanitizer/asan_interface.h" ; then
6035 have_asan_iface_h=yes
6038 cat > $TMPC << EOF
6039 #include <sanitizer/asan_interface.h>
6040 int main(void) {
6041 __sanitizer_start_switch_fiber(0, 0, 0);
6042 return 0;
6045 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6046 have_asan_iface_fiber=yes
6050 ##########################################
6051 # checks for fuzzer
6052 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
6053 write_c_fuzzer_skeleton
6054 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6055 have_fuzzer=yes
6056 else
6057 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
6058 exit 1
6062 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6063 # keep it separate until that is not the case.
6064 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6065 error_exit "TSAN is not supported with other sanitiziers."
6067 have_tsan=no
6068 have_tsan_iface_fiber=no
6069 if test "$tsan" = "yes" ; then
6070 write_c_skeleton
6071 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6072 have_tsan=yes
6074 cat > $TMPC << EOF
6075 #include <sanitizer/tsan_interface.h>
6076 int main(void) {
6077 __tsan_create_fiber(0);
6078 return 0;
6081 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6082 have_tsan_iface_fiber=yes
6086 ##########################################
6087 # check for libpmem
6089 if test "$libpmem" != "no"; then
6090 if $pkg_config --exists "libpmem"; then
6091 libpmem="yes"
6092 libpmem_libs=$($pkg_config --libs libpmem)
6093 libpmem_cflags=$($pkg_config --cflags libpmem)
6094 else
6095 if test "$libpmem" = "yes" ; then
6096 feature_not_found "libpmem" "Install nvml or pmdk"
6098 libpmem="no"
6102 ##########################################
6103 # check for libdaxctl
6105 if test "$libdaxctl" != "no"; then
6106 if $pkg_config --atleast-version=57 "libdaxctl"; then
6107 libdaxctl="yes"
6108 libdaxctl_libs=$($pkg_config --libs libdaxctl)
6109 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6110 else
6111 if test "$libdaxctl" = "yes" ; then
6112 feature_not_found "libdaxctl" "Install libdaxctl"
6114 libdaxctl="no"
6118 ##########################################
6119 # check for slirp
6121 # slirp is only required when building softmmu targets
6122 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6123 slirp="no"
6126 case "$slirp" in
6127 "" | yes)
6128 if $pkg_config slirp; then
6129 slirp=system
6130 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6131 slirp=git
6132 elif test -e "${source_path}/slirp/Makefile" ; then
6133 slirp=internal
6134 elif test -z "$slirp" ; then
6135 slirp=no
6136 else
6137 feature_not_found "slirp" "Install slirp devel or git submodule"
6141 system)
6142 if ! $pkg_config slirp; then
6143 feature_not_found "slirp" "Install slirp devel"
6146 esac
6148 case "$slirp" in
6149 git | internal)
6150 if test "$slirp" = git; then
6151 git_submodules="${git_submodules} slirp"
6153 mkdir -p slirp
6154 slirp_cflags="-I${source_path}/slirp/src -Islirp/src"
6155 slirp_libs="-Lslirp -lslirp"
6156 if test "$mingw32" = "yes" ; then
6157 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6161 system)
6162 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6163 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6164 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6170 error_exit "Unknown state for slirp: $slirp"
6172 esac
6174 ##########################################
6175 # check for usable __NR_keyctl syscall
6177 if test "$linux" = "yes" ; then
6179 have_keyring=no
6180 cat > $TMPC << EOF
6181 #include <errno.h>
6182 #include <asm/unistd.h>
6183 #include <linux/keyctl.h>
6184 #include <unistd.h>
6185 int main(void) {
6186 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6189 if compile_prog "" "" ; then
6190 have_keyring=yes
6193 if test "$secret_keyring" != "no"
6194 then
6195 if test "$have_keyring" = "yes"
6196 then
6197 secret_keyring=yes
6198 else
6199 if test "$secret_keyring" = "yes"
6200 then
6201 error_exit "syscall __NR_keyctl requested, \
6202 but not implemented on your system"
6203 else
6204 secret_keyring=no
6209 ##########################################
6210 # End of CC checks
6211 # After here, no more $cc or $ld runs
6213 write_c_skeleton
6215 if test "$gcov" = "yes" ; then
6217 elif test "$fortify_source" = "yes" ; then
6218 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6219 debug=no
6221 if test "$debug_info" = "yes"; then
6222 CFLAGS="-g $CFLAGS"
6223 LDFLAGS="-g $LDFLAGS"
6225 if test "$debug" = "no"; then
6226 CFLAGS="-O2 $CFLAGS"
6229 case "$ARCH" in
6230 alpha)
6231 # Ensure there's only a single GP
6232 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6234 esac
6236 if test "$gprof" = "yes" ; then
6237 QEMU_CFLAGS="-p $QEMU_CFLAGS"
6238 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6241 if test "$have_asan" = "yes"; then
6242 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6243 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6244 if test "$have_asan_iface_h" = "no" ; then
6245 echo "ASAN build enabled, but ASAN header missing." \
6246 "Without code annotation, the report may be inferior."
6247 elif test "$have_asan_iface_fiber" = "no" ; then
6248 echo "ASAN build enabled, but ASAN header is too old." \
6249 "Without code annotation, the report may be inferior."
6252 if test "$have_tsan" = "yes" ; then
6253 if test "$have_tsan_iface_fiber" = "yes" ; then
6254 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6255 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6256 else
6257 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6259 elif test "$tsan" = "yes" ; then
6260 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6262 if test "$have_ubsan" = "yes"; then
6263 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6264 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6267 ##########################################
6268 # Do we have libnfs
6269 if test "$libnfs" != "no" ; then
6270 if $pkg_config --atleast-version=1.9.3 libnfs; then
6271 libnfs="yes"
6272 libnfs_libs=$($pkg_config --libs libnfs)
6273 else
6274 if test "$libnfs" = "yes" ; then
6275 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6277 libnfs="no"
6281 ##########################################
6282 # Do we have libudev
6283 if test "$libudev" != "no" ; then
6284 if $pkg_config libudev && test "$static" != "yes"; then
6285 libudev="yes"
6286 libudev_libs=$($pkg_config --libs libudev)
6287 else
6288 libudev="no"
6292 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6293 if test "$solaris" = "no" && test "$tsan" = "no"; then
6294 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6295 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6299 # test if pod2man has --utf8 option
6300 if pod2man --help | grep -q utf8; then
6301 POD2MAN="pod2man --utf8"
6302 else
6303 POD2MAN="pod2man"
6306 # Use ASLR, no-SEH and DEP if available
6307 if test "$mingw32" = "yes" ; then
6308 for flag in --dynamicbase --no-seh --nxcompat; do
6309 if ld_has $flag ; then
6310 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6312 done
6315 # Disable OpenBSD W^X if available
6316 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6317 cat > $TMPC <<EOF
6318 int main(void) { return 0; }
6320 wx_ldflags="-Wl,-z,wxneeded"
6321 if compile_prog "" "$wx_ldflags"; then
6322 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6326 qemu_confdir="$sysconfdir/$qemu_suffix"
6327 qemu_moddir="$libdir/$qemu_suffix"
6328 qemu_datadir="$datadir/$qemu_suffix"
6329 qemu_docdir="$docdir/$qemu_suffix"
6330 qemu_localedir="$datadir/locale"
6331 qemu_icondir="$datadir/icons"
6332 qemu_desktopdir="$datadir/applications"
6334 # We can only support ivshmem if we have eventfd
6335 if [ "$eventfd" = "yes" ]; then
6336 ivshmem=yes
6339 if test "$softmmu" = yes ; then
6340 if test "$linux" = yes; then
6341 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6342 virtfs=yes
6343 else
6344 if test "$virtfs" = yes; then
6345 error_exit "VirtFS requires libcap-ng devel and libattr devel"
6347 virtfs=no
6349 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6350 mpath=yes
6351 else
6352 if test "$mpath" = yes; then
6353 error_exit "Multipath requires libmpathpersist devel"
6355 mpath=no
6357 else
6358 if test "$virtfs" = yes; then
6359 error_exit "VirtFS is supported only on Linux"
6361 virtfs=no
6362 if test "$mpath" = yes; then
6363 error_exit "Multipath is supported only on Linux"
6365 mpath=no
6369 # Probe for guest agent support/options
6371 if [ "$guest_agent" != "no" ]; then
6372 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6373 guest_agent=no
6374 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6375 guest_agent=yes
6376 elif [ "$guest_agent" != yes ]; then
6377 guest_agent=no
6378 else
6379 error_exit "Guest agent is not supported on this platform"
6383 # Guest agent Window MSI package
6385 if test "$guest_agent" != yes; then
6386 if test "$guest_agent_msi" = yes; then
6387 error_exit "MSI guest agent package requires guest agent enabled"
6389 guest_agent_msi=no
6390 elif test "$mingw32" != "yes"; then
6391 if test "$guest_agent_msi" = "yes"; then
6392 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6394 guest_agent_msi=no
6395 elif ! has wixl; then
6396 if test "$guest_agent_msi" = "yes"; then
6397 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6399 guest_agent_msi=no
6400 else
6401 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6402 # disabled explicitly
6403 if test "$guest_agent_msi" != "no"; then
6404 guest_agent_msi=yes
6408 if test "$guest_agent_msi" = "yes"; then
6409 if test "$guest_agent_with_vss" = "yes"; then
6410 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6413 if test "$QEMU_GA_MANUFACTURER" = ""; then
6414 QEMU_GA_MANUFACTURER=QEMU
6417 if test "$QEMU_GA_DISTRO" = ""; then
6418 QEMU_GA_DISTRO=Linux
6421 if test "$QEMU_GA_VERSION" = ""; then
6422 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6425 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6427 case "$cpu" in
6428 x86_64)
6429 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6431 i386)
6432 QEMU_GA_MSI_ARCH="-D Arch=32"
6435 error_exit "CPU $cpu not supported for building installation package"
6437 esac
6440 # Mac OS X ships with a broken assembler
6441 roms=
6442 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6443 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6444 test "$softmmu" = yes ; then
6445 # Different host OS linkers have different ideas about the name of the ELF
6446 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6447 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6448 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6449 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6450 ld_i386_emulation="$emu"
6451 roms="optionrom"
6452 break
6454 done
6457 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6458 if test "$cpu" = "s390x" ; then
6459 write_c_skeleton
6460 if compile_prog "-march=z900" ""; then
6461 roms="$roms s390-ccw"
6462 # SLOF is required for building the s390-ccw firmware on s390x,
6463 # since it is using the libnet code from SLOF for network booting.
6464 if test -e "${source_path}/.git" ; then
6465 git_submodules="${git_submodules} roms/SLOF"
6470 # Check that the C++ compiler exists and works with the C compiler.
6471 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6472 if has $cxx; then
6473 cat > $TMPC <<EOF
6474 int c_function(void);
6475 int main(void) { return c_function(); }
6478 compile_object
6480 cat > $TMPCXX <<EOF
6481 extern "C" {
6482 int c_function(void);
6484 int c_function(void) { return 42; }
6487 update_cxxflags
6489 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6490 # C++ compiler $cxx works ok with C compiler $cc
6492 else
6493 echo "C++ compiler $cxx does not work with C compiler $cc"
6494 echo "Disabling C++ specific optional code"
6495 cxx=
6497 else
6498 echo "No C++ compiler available; disabling C++ specific optional code"
6499 cxx=
6502 if test $git_update = 'yes' ; then
6503 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
6505 if test "$fdt" = "git" ; then
6506 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
6509 config_host_mak="config-host.mak"
6511 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6512 echo >> $config_host_mak
6514 echo all: >> $config_host_mak
6515 echo "prefix=$prefix" >> $config_host_mak
6516 echo "bindir=$bindir" >> $config_host_mak
6517 echo "libdir=$libdir" >> $config_host_mak
6518 echo "libexecdir=$libexecdir" >> $config_host_mak
6519 echo "includedir=$includedir" >> $config_host_mak
6520 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6521 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6522 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6523 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6524 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6525 if test "$mingw32" = "no" ; then
6526 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6528 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6529 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6530 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6531 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6532 echo "GIT=$git" >> $config_host_mak
6533 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6534 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6536 echo "ARCH=$ARCH" >> $config_host_mak
6538 if test "$default_devices" = "yes" ; then
6539 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6540 else
6541 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6543 if test "$debug_tcg" = "yes" ; then
6544 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6546 if test "$strip_opt" = "yes" ; then
6547 echo "STRIP=${strip}" >> $config_host_mak
6549 if test "$bigendian" = "yes" ; then
6550 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6552 if test "$mingw32" = "yes" ; then
6553 echo "CONFIG_WIN32=y" >> $config_host_mak
6554 rc_version=$(cat $source_path/VERSION)
6555 version_major=${rc_version%%.*}
6556 rc_version=${rc_version#*.}
6557 version_minor=${rc_version%%.*}
6558 rc_version=${rc_version#*.}
6559 version_subminor=${rc_version%%.*}
6560 version_micro=0
6561 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6562 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6563 if test "$guest_agent_with_vss" = "yes" ; then
6564 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6565 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6566 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6568 if test "$guest_agent_ntddscsi" = "yes" ; then
6569 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6571 if test "$guest_agent_msi" = "yes"; then
6572 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6573 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6574 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6575 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6576 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6577 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6578 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6580 else
6581 echo "CONFIG_POSIX=y" >> $config_host_mak
6584 if test "$linux" = "yes" ; then
6585 echo "CONFIG_LINUX=y" >> $config_host_mak
6588 if test "$darwin" = "yes" ; then
6589 echo "CONFIG_DARWIN=y" >> $config_host_mak
6592 if test "$solaris" = "yes" ; then
6593 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6595 if test "$haiku" = "yes" ; then
6596 echo "CONFIG_HAIKU=y" >> $config_host_mak
6598 if test "$static" = "yes" ; then
6599 echo "CONFIG_STATIC=y" >> $config_host_mak
6601 if test "$profiler" = "yes" ; then
6602 echo "CONFIG_PROFILER=y" >> $config_host_mak
6604 if test "$want_tools" = "yes" ; then
6605 echo "CONFIG_TOOLS=y" >> $config_host_mak
6607 if test "$guest_agent" = "yes" ; then
6608 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6610 if test "$slirp" != "no"; then
6611 echo "CONFIG_SLIRP=y" >> $config_host_mak
6612 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6613 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6614 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6616 subdirs=
6617 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6618 subdirs="$subdirs slirp"
6620 if test "$vde" = "yes" ; then
6621 echo "CONFIG_VDE=y" >> $config_host_mak
6622 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6624 if test "$netmap" = "yes" ; then
6625 echo "CONFIG_NETMAP=y" >> $config_host_mak
6627 if test "$l2tpv3" = "yes" ; then
6628 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6630 if test "$gprof" = "yes" ; then
6631 echo "CONFIG_GPROF=y" >> $config_host_mak
6633 if test "$cap_ng" = "yes" ; then
6634 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6635 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6637 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6638 for drv in $audio_drv_list; do
6639 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6640 echo "$def=y" >> $config_host_mak
6641 done
6642 if test "$alsa" = "yes" ; then
6643 echo "CONFIG_ALSA=y" >> $config_host_mak
6645 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6646 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6647 if test "$libpulse" = "yes" ; then
6648 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6650 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6651 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6652 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6653 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6654 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6655 if test "$libjack" = "yes" ; then
6656 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6658 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6659 if test "$audio_win_int" = "yes" ; then
6660 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6662 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6663 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6664 if test "$xfs" = "yes" ; then
6665 echo "CONFIG_XFS=y" >> $config_host_mak
6667 qemu_version=$(head $source_path/VERSION)
6668 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6669 echo "SRC_PATH=$source_path" >> $config_host_mak
6670 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6671 if [ "$docs" = "yes" ] ; then
6672 echo "BUILD_DOCS=yes" >> $config_host_mak
6674 if test "$modules" = "yes"; then
6675 # $shacmd can generate a hash started with digit, which the compiler doesn't
6676 # like as an symbol. So prefix it with an underscore
6677 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6678 echo "CONFIG_MODULES=y" >> $config_host_mak
6680 if test "$module_upgrades" = "yes"; then
6681 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6683 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6684 echo "CONFIG_X11=y" >> $config_host_mak
6685 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6686 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6688 if test "$cocoa" = "yes" ; then
6689 echo "CONFIG_COCOA=y" >> $config_host_mak
6691 if test "$iconv" = "yes" ; then
6692 echo "CONFIG_ICONV=y" >> $config_host_mak
6693 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6694 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6696 if test "$curses" = "yes" ; then
6697 echo "CONFIG_CURSES=y" >> $config_host_mak
6698 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6699 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6701 if test "$pipe2" = "yes" ; then
6702 echo "CONFIG_PIPE2=y" >> $config_host_mak
6704 if test "$accept4" = "yes" ; then
6705 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6707 if test "$splice" = "yes" ; then
6708 echo "CONFIG_SPLICE=y" >> $config_host_mak
6710 if test "$eventfd" = "yes" ; then
6711 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6713 if test "$memfd" = "yes" ; then
6714 echo "CONFIG_MEMFD=y" >> $config_host_mak
6716 if test "$have_usbfs" = "yes" ; then
6717 echo "CONFIG_USBFS=y" >> $config_host_mak
6719 if test "$fallocate" = "yes" ; then
6720 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6722 if test "$fallocate_punch_hole" = "yes" ; then
6723 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6725 if test "$fallocate_zero_range" = "yes" ; then
6726 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6728 if test "$posix_fallocate" = "yes" ; then
6729 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6731 if test "$sync_file_range" = "yes" ; then
6732 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6734 if test "$fiemap" = "yes" ; then
6735 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6737 if test "$dup3" = "yes" ; then
6738 echo "CONFIG_DUP3=y" >> $config_host_mak
6740 if test "$ppoll" = "yes" ; then
6741 echo "CONFIG_PPOLL=y" >> $config_host_mak
6743 if test "$prctl_pr_set_timerslack" = "yes" ; then
6744 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6746 if test "$epoll" = "yes" ; then
6747 echo "CONFIG_EPOLL=y" >> $config_host_mak
6749 if test "$epoll_create1" = "yes" ; then
6750 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6752 if test "$sendfile" = "yes" ; then
6753 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6755 if test "$timerfd" = "yes" ; then
6756 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6758 if test "$setns" = "yes" ; then
6759 echo "CONFIG_SETNS=y" >> $config_host_mak
6761 if test "$clock_adjtime" = "yes" ; then
6762 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6764 if test "$syncfs" = "yes" ; then
6765 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6767 if test "$kcov" = "yes" ; then
6768 echo "CONFIG_KCOV=y" >> $config_host_mak
6770 if test "$btrfs" = "yes" ; then
6771 echo "CONFIG_BTRFS=y" >> $config_host_mak
6773 if test "$inotify" = "yes" ; then
6774 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6776 if test "$inotify1" = "yes" ; then
6777 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6779 if test "$sem_timedwait" = "yes" ; then
6780 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6782 if test "$strchrnul" = "yes" ; then
6783 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6785 if test "$st_atim" = "yes" ; then
6786 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6788 if test "$byteswap_h" = "yes" ; then
6789 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6791 if test "$bswap_h" = "yes" ; then
6792 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6794 if test "$curl" = "yes" ; then
6795 echo "CONFIG_CURL=y" >> $config_host_mak
6796 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6797 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6799 if test "$brlapi" = "yes" ; then
6800 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6801 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6803 if test "$gtk" = "yes" ; then
6804 echo "CONFIG_GTK=y" >> $config_host_mak
6805 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6806 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6807 if test "$gtk_gl" = "yes" ; then
6808 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6811 if test "$gio" = "yes" ; then
6812 echo "CONFIG_GIO=y" >> $config_host_mak
6813 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6814 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6815 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6817 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6818 if test "$gnutls" = "yes" ; then
6819 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6820 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6821 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6823 if test "$gcrypt" = "yes" ; then
6824 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6825 if test "$gcrypt_hmac" = "yes" ; then
6826 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6828 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6829 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6831 if test "$nettle" = "yes" ; then
6832 echo "CONFIG_NETTLE=y" >> $config_host_mak
6833 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6834 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6835 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6837 if test "$qemu_private_xts" = "yes" ; then
6838 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6840 if test "$tasn1" = "yes" ; then
6841 echo "CONFIG_TASN1=y" >> $config_host_mak
6843 if test "$auth_pam" = "yes" ; then
6844 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6846 if test "$have_ifaddrs_h" = "yes" ; then
6847 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6849 if test "$have_drm_h" = "yes" ; then
6850 echo "HAVE_DRM_H=y" >> $config_host_mak
6852 if test "$have_broken_size_max" = "yes" ; then
6853 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6855 if test "$have_openpty" = "yes" ; then
6856 echo "HAVE_OPENPTY=y" >> $config_host_mak
6858 if test "$have_sys_signal_h" = "yes" ; then
6859 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6862 # Work around a system header bug with some kernel/XFS header
6863 # versions where they both try to define 'struct fsxattr':
6864 # xfs headers will not try to redefine structs from linux headers
6865 # if this macro is set.
6866 if test "$have_fsxattr" = "yes" ; then
6867 echo "HAVE_FSXATTR=y" >> $config_host_mak
6869 if test "$have_copy_file_range" = "yes" ; then
6870 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6872 if test "$vte" = "yes" ; then
6873 echo "CONFIG_VTE=y" >> $config_host_mak
6874 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6875 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6877 if test "$virglrenderer" = "yes" ; then
6878 echo "CONFIG_VIRGL=y" >> $config_host_mak
6879 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6880 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6882 if test "$xen" = "yes" ; then
6883 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6884 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6885 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6886 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6888 if test "$linux_aio" = "yes" ; then
6889 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6891 if test "$linux_io_uring" = "yes" ; then
6892 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6893 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6894 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6896 if test "$attr" = "yes" ; then
6897 echo "CONFIG_ATTR=y" >> $config_host_mak
6898 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6900 if test "$libattr" = "yes" ; then
6901 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6903 if test "$virtfs" = "yes" ; then
6904 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6906 if test "$mpath" = "yes" ; then
6907 echo "CONFIG_MPATH=y" >> $config_host_mak
6908 if test "$mpathpersist_new_api" = "yes"; then
6909 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6912 if test "$vhost_scsi" = "yes" ; then
6913 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6915 if test "$vhost_net" = "yes" ; then
6916 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6918 if test "$vhost_net_user" = "yes" ; then
6919 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6921 if test "$vhost_net_vdpa" = "yes" ; then
6922 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6924 if test "$vhost_crypto" = "yes" ; then
6925 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6927 if test "$vhost_vsock" = "yes" ; then
6928 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6929 if test "$vhost_user" = "yes" ; then
6930 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6933 if test "$vhost_kernel" = "yes" ; then
6934 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6936 if test "$vhost_user" = "yes" ; then
6937 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6939 if test "$vhost_vdpa" = "yes" ; then
6940 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6942 if test "$vhost_user_fs" = "yes" ; then
6943 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6945 if test "$blobs" = "yes" ; then
6946 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6948 if test "$iovec" = "yes" ; then
6949 echo "CONFIG_IOVEC=y" >> $config_host_mak
6951 if test "$preadv" = "yes" ; then
6952 echo "CONFIG_PREADV=y" >> $config_host_mak
6954 if test "$fdt" != "no" ; then
6955 echo "CONFIG_FDT=y" >> $config_host_mak
6956 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
6957 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
6959 if test "$membarrier" = "yes" ; then
6960 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6962 if test "$signalfd" = "yes" ; then
6963 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6965 if test "$optreset" = "yes" ; then
6966 echo "HAVE_OPTRESET=y" >> $config_host_mak
6968 if test "$tcg" = "yes"; then
6969 echo "CONFIG_TCG=y" >> $config_host_mak
6970 if test "$tcg_interpreter" = "yes" ; then
6971 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6974 if test "$fdatasync" = "yes" ; then
6975 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6977 if test "$madvise" = "yes" ; then
6978 echo "CONFIG_MADVISE=y" >> $config_host_mak
6980 if test "$posix_madvise" = "yes" ; then
6981 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6983 if test "$posix_memalign" = "yes" ; then
6984 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6986 if test "$spice" = "yes" ; then
6987 echo "CONFIG_SPICE=y" >> $config_host_mak
6988 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6989 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6992 if test "$smartcard" = "yes" ; then
6993 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6994 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6995 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6998 if test "$libusb" = "yes" ; then
6999 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7000 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7001 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7004 if test "$usb_redir" = "yes" ; then
7005 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7006 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7007 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7010 if test "$opengl" = "yes" ; then
7011 echo "CONFIG_OPENGL=y" >> $config_host_mak
7012 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
7013 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7014 if test "$opengl_dmabuf" = "yes" ; then
7015 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7019 if test "$gbm" = "yes" ; then
7020 echo "CONFIG_GBM=y" >> $config_host_mak
7021 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7022 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7026 if test "$malloc_trim" = "yes" ; then
7027 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7030 if test "$avx2_opt" = "yes" ; then
7031 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7034 if test "$avx512f_opt" = "yes" ; then
7035 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7038 if test "$lzo" = "yes" ; then
7039 echo "CONFIG_LZO=y" >> $config_host_mak
7040 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7043 if test "$snappy" = "yes" ; then
7044 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7045 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7048 if test "$bzip2" = "yes" ; then
7049 echo "CONFIG_BZIP2=y" >> $config_host_mak
7050 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7053 if test "$lzfse" = "yes" ; then
7054 echo "CONFIG_LZFSE=y" >> $config_host_mak
7055 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7058 if test "$zstd" = "yes" ; then
7059 echo "CONFIG_ZSTD=y" >> $config_host_mak
7060 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
7061 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
7064 if test "$libiscsi" = "yes" ; then
7065 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
7066 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7067 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7070 if test "$libnfs" = "yes" ; then
7071 echo "CONFIG_LIBNFS=y" >> $config_host_mak
7072 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7075 if test "$seccomp" = "yes"; then
7076 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7077 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7078 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7081 # XXX: suppress that
7082 if [ "$bsd" = "yes" ] ; then
7083 echo "CONFIG_BSD=y" >> $config_host_mak
7086 if test "$localtime_r" = "yes" ; then
7087 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7089 if test "$qom_cast_debug" = "yes" ; then
7090 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7092 if test "$rbd" = "yes" ; then
7093 echo "CONFIG_RBD=y" >> $config_host_mak
7094 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7097 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7098 if test "$coroutine_pool" = "yes" ; then
7099 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7100 else
7101 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7104 if test "$debug_stack_usage" = "yes" ; then
7105 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7108 if test "$crypto_afalg" = "yes" ; then
7109 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7112 if test "$open_by_handle_at" = "yes" ; then
7113 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7116 if test "$linux_magic_h" = "yes" ; then
7117 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7120 if test "$valgrind_h" = "yes" ; then
7121 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7124 if test "$have_asan_iface_fiber" = "yes" ; then
7125 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7128 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7129 echo "CONFIG_TSAN=y" >> $config_host_mak
7132 if test "$has_environ" = "yes" ; then
7133 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7136 if test "$cpuid_h" = "yes" ; then
7137 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7140 if test "$int128" = "yes" ; then
7141 echo "CONFIG_INT128=y" >> $config_host_mak
7144 if test "$atomic128" = "yes" ; then
7145 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7148 if test "$cmpxchg128" = "yes" ; then
7149 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7152 if test "$atomic64" = "yes" ; then
7153 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7156 if test "$attralias" = "yes" ; then
7157 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7160 if test "$getauxval" = "yes" ; then
7161 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7164 if test "$glusterfs" = "yes" ; then
7165 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
7166 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7167 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7170 if test "$glusterfs_xlator_opt" = "yes" ; then
7171 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7174 if test "$glusterfs_discard" = "yes" ; then
7175 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7178 if test "$glusterfs_fallocate" = "yes" ; then
7179 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7182 if test "$glusterfs_zerofill" = "yes" ; then
7183 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7186 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7187 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7190 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7191 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7194 if test "$libssh" = "yes" ; then
7195 echo "CONFIG_LIBSSH=y" >> $config_host_mak
7196 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7197 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7200 if test "$live_block_migration" = "yes" ; then
7201 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7204 if test "$tpm" = "yes"; then
7205 echo 'CONFIG_TPM=y' >> $config_host_mak
7208 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7209 if have_backend "nop"; then
7210 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7212 if have_backend "simple"; then
7213 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7214 # Set the appropriate trace file.
7215 trace_file="\"$trace_file-\" FMT_pid"
7217 if have_backend "log"; then
7218 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7220 if have_backend "ust"; then
7221 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7222 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7223 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7225 if have_backend "dtrace"; then
7226 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7227 if test "$trace_backend_stap" = "yes" ; then
7228 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7231 if have_backend "ftrace"; then
7232 if test "$linux" = "yes" ; then
7233 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7234 else
7235 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7238 if have_backend "syslog"; then
7239 if test "$posix_syslog" = "yes" ; then
7240 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7241 else
7242 feature_not_found "syslog(trace backend)" "syslog not available"
7245 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7247 if test "$rdma" = "yes" ; then
7248 echo "CONFIG_RDMA=y" >> $config_host_mak
7249 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7252 if test "$pvrdma" = "yes" ; then
7253 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7256 if test "$have_rtnetlink" = "yes" ; then
7257 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7260 if test "$libxml2" = "yes" ; then
7261 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7262 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7263 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7266 if test "$replication" = "yes" ; then
7267 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7270 if test "$have_af_vsock" = "yes" ; then
7271 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7274 if test "$have_sysmacros" = "yes" ; then
7275 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7278 if test "$have_static_assert" = "yes" ; then
7279 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7282 if test "$have_utmpx" = "yes" ; then
7283 echo "HAVE_UTMPX=y" >> $config_host_mak
7285 if test "$have_getrandom" = "yes" ; then
7286 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7288 if test "$ivshmem" = "yes" ; then
7289 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7291 if test "$capstone" != "no" ; then
7292 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7293 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
7294 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
7296 if test "$debug_mutex" = "yes" ; then
7297 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7300 # Hold two types of flag:
7301 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7302 # a thread we have a handle to
7303 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7304 # platform
7305 if test "$pthread_setname_np_w_tid" = "yes" ; then
7306 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7307 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7308 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7309 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7310 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7313 if test "$libpmem" = "yes" ; then
7314 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7315 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7316 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
7319 if test "$libdaxctl" = "yes" ; then
7320 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7321 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
7324 if test "$bochs" = "yes" ; then
7325 echo "CONFIG_BOCHS=y" >> $config_host_mak
7327 if test "$cloop" = "yes" ; then
7328 echo "CONFIG_CLOOP=y" >> $config_host_mak
7330 if test "$dmg" = "yes" ; then
7331 echo "CONFIG_DMG=y" >> $config_host_mak
7333 if test "$qcow1" = "yes" ; then
7334 echo "CONFIG_QCOW1=y" >> $config_host_mak
7336 if test "$vdi" = "yes" ; then
7337 echo "CONFIG_VDI=y" >> $config_host_mak
7339 if test "$vvfat" = "yes" ; then
7340 echo "CONFIG_VVFAT=y" >> $config_host_mak
7342 if test "$qed" = "yes" ; then
7343 echo "CONFIG_QED=y" >> $config_host_mak
7345 if test "$parallels" = "yes" ; then
7346 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7348 if test "$sheepdog" = "yes" ; then
7349 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7351 if test "$pty_h" = "yes" ; then
7352 echo "HAVE_PTY_H=y" >> $config_host_mak
7354 if test "$have_mlockall" = "yes" ; then
7355 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7357 if test "$fuzzing" = "yes" ; then
7358 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
7359 # needed CFLAGS have already been provided
7360 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
7361 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7362 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
7363 else
7364 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
7368 if test "$plugins" = "yes" ; then
7369 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7370 # Copy the export object list to the build dir
7371 if test "$ld_dynamic_list" = "yes" ; then
7372 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7373 ld_symbols=qemu-plugins-ld.symbols
7374 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7375 elif test "$ld_exported_symbols_list" = "yes" ; then
7376 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7377 ld64_symbols=qemu-plugins-ld64.symbols
7378 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7379 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7380 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7381 else
7382 error_exit \
7383 "If \$plugins=yes, either \$ld_dynamic_list or " \
7384 "\$ld_exported_symbols_list should have been set to 'yes'."
7388 if test -n "$gdb_bin" ; then
7389 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7392 if test "$secret_keyring" = "yes" ; then
7393 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7396 if test "$tcg_interpreter" = "yes"; then
7397 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7398 elif test "$ARCH" = "sparc64" ; then
7399 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7400 elif test "$ARCH" = "s390x" ; then
7401 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7402 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7403 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7404 elif test "$ARCH" = "ppc64" ; then
7405 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7406 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7407 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7408 else
7409 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7412 echo "ROMS=$roms" >> $config_host_mak
7413 echo "MAKE=$make" >> $config_host_mak
7414 echo "PYTHON=$python" >> $config_host_mak
7415 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7416 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7417 echo "MESON=$meson" >> $config_host_mak
7418 echo "CC=$cc" >> $config_host_mak
7419 if $iasl -h > /dev/null 2>&1; then
7420 echo "CONFIG_IASL=$iasl" >> $config_host_mak
7422 echo "CXX=$cxx" >> $config_host_mak
7423 echo "OBJCC=$objcc" >> $config_host_mak
7424 echo "AR=$ar" >> $config_host_mak
7425 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7426 echo "AS=$as" >> $config_host_mak
7427 echo "CCAS=$ccas" >> $config_host_mak
7428 echo "CPP=$cpp" >> $config_host_mak
7429 echo "OBJCOPY=$objcopy" >> $config_host_mak
7430 echo "LD=$ld" >> $config_host_mak
7431 echo "RANLIB=$ranlib" >> $config_host_mak
7432 echo "NM=$nm" >> $config_host_mak
7433 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7434 echo "WINDRES=$windres" >> $config_host_mak
7435 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7436 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7437 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7438 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7439 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7440 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7441 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
7442 if test "$sparse" = "yes" ; then
7443 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7445 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7446 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7447 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7448 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7449 echo "EXESUF=$EXESUF" >> $config_host_mak
7450 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
7451 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
7452 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7453 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7454 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7455 if test "$gcov" = "yes" ; then
7456 echo "CONFIG_GCOV=y" >> $config_host_mak
7459 if test "$libudev" != "no"; then
7460 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7461 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7463 if test "$fuzzing" != "no"; then
7464 echo "CONFIG_FUZZ=y" >> $config_host_mak
7466 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
7468 if test "$edk2_blobs" = "yes" ; then
7469 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7472 if test "$rng_none" = "yes"; then
7473 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7476 # use included Linux headers
7477 if test "$linux" = "yes" ; then
7478 mkdir -p linux-headers
7479 case "$cpu" in
7480 i386|x86_64|x32)
7481 linux_arch=x86
7483 ppc|ppc64|ppc64le)
7484 linux_arch=powerpc
7486 s390x)
7487 linux_arch=s390
7489 aarch64)
7490 linux_arch=arm64
7492 mips64)
7493 linux_arch=mips
7496 # For most CPUs the kernel architecture name and QEMU CPU name match.
7497 linux_arch="$cpu"
7499 esac
7500 # For non-KVM architectures we will not have asm headers
7501 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7502 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7506 for target in $target_list; do
7507 target_dir="$target"
7508 config_target_mak=$target_dir/config-target.mak
7509 target_name=$(echo $target | cut -d '-' -f 1)
7510 target_aligned_only="no"
7511 case "$target_name" in
7512 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7513 target_aligned_only="yes"
7515 esac
7516 target_bigendian="no"
7517 case "$target_name" in
7518 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7519 target_bigendian="yes"
7521 esac
7522 target_softmmu="no"
7523 target_user_only="no"
7524 target_linux_user="no"
7525 target_bsd_user="no"
7526 case "$target" in
7527 ${target_name}-softmmu)
7528 target_softmmu="yes"
7530 ${target_name}-linux-user)
7531 target_user_only="yes"
7532 target_linux_user="yes"
7534 ${target_name}-bsd-user)
7535 target_user_only="yes"
7536 target_bsd_user="yes"
7539 error_exit "Target '$target' not recognised"
7540 exit 1
7542 esac
7544 mkdir -p $target_dir
7545 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7547 bflt="no"
7548 mttcg="no"
7549 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7550 gdb_xml_files=""
7552 TARGET_ARCH="$target_name"
7553 TARGET_BASE_ARCH=""
7554 TARGET_ABI_DIR=""
7555 TARGET_SYSTBL_ABI=""
7556 TARGET_SYSTBL=""
7558 case "$target_name" in
7559 i386)
7560 mttcg="yes"
7561 gdb_xml_files="i386-32bit.xml"
7562 TARGET_SYSTBL_ABI=i386
7563 TARGET_SYSTBL=syscall_32.tbl
7565 x86_64)
7566 TARGET_BASE_ARCH=i386
7567 TARGET_SYSTBL_ABI=common,64
7568 TARGET_SYSTBL=syscall_64.tbl
7569 mttcg="yes"
7570 gdb_xml_files="i386-64bit.xml"
7572 alpha)
7573 mttcg="yes"
7574 TARGET_SYSTBL_ABI=common
7576 arm|armeb)
7577 TARGET_ARCH=arm
7578 TARGET_SYSTBL_ABI=common,oabi
7579 bflt="yes"
7580 mttcg="yes"
7581 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7583 aarch64|aarch64_be)
7584 TARGET_ARCH=aarch64
7585 TARGET_BASE_ARCH=arm
7586 bflt="yes"
7587 mttcg="yes"
7588 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"
7590 avr)
7591 gdb_xml_files="avr-cpu.xml"
7592 target_compiler=$cross_cc_avr
7594 cris)
7596 hppa)
7597 mttcg="yes"
7598 TARGET_SYSTBL_ABI=common,32
7600 lm32)
7602 m68k)
7603 bflt="yes"
7604 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
7605 TARGET_SYSTBL_ABI=common
7607 microblaze|microblazeel)
7608 TARGET_ARCH=microblaze
7609 TARGET_SYSTBL_ABI=common
7610 mttcg="yes"
7611 bflt="yes"
7613 mips|mipsel)
7614 mttcg="yes"
7615 TARGET_ARCH=mips
7616 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7617 TARGET_SYSTBL_ABI=o32
7618 TARGET_SYSTBL=syscall_o32.tbl
7620 mipsn32|mipsn32el)
7621 mttcg="yes"
7622 TARGET_ARCH=mips64
7623 TARGET_BASE_ARCH=mips
7624 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7625 echo "TARGET_ABI32=y" >> $config_target_mak
7626 TARGET_SYSTBL_ABI=n32
7627 TARGET_SYSTBL=syscall_n32.tbl
7629 mips64|mips64el)
7630 mttcg="no"
7631 TARGET_ARCH=mips64
7632 TARGET_BASE_ARCH=mips
7633 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7634 TARGET_SYSTBL_ABI=n64
7635 TARGET_SYSTBL=syscall_n64.tbl
7637 moxie)
7639 nios2)
7641 or1k)
7642 TARGET_ARCH=openrisc
7643 TARGET_BASE_ARCH=openrisc
7645 ppc)
7646 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7647 TARGET_SYSTBL_ABI=common,nospu,32
7649 ppc64)
7650 TARGET_BASE_ARCH=ppc
7651 TARGET_ABI_DIR=ppc
7652 TARGET_SYSTBL_ABI=common,nospu,64
7653 mttcg=yes
7654 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7656 ppc64le)
7657 TARGET_ARCH=ppc64
7658 TARGET_BASE_ARCH=ppc
7659 TARGET_ABI_DIR=ppc
7660 TARGET_SYSTBL_ABI=common,nospu,64
7661 mttcg=yes
7662 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7664 ppc64abi32)
7665 TARGET_ARCH=ppc64
7666 TARGET_BASE_ARCH=ppc
7667 TARGET_ABI_DIR=ppc
7668 TARGET_SYSTBL_ABI=common,nospu,32
7669 echo "TARGET_ABI32=y" >> $config_target_mak
7670 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7671 deprecated_features="ppc64abi32 ${deprecated_features}"
7673 riscv32)
7674 TARGET_BASE_ARCH=riscv
7675 TARGET_ABI_DIR=riscv
7676 mttcg=yes
7677 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
7679 riscv64)
7680 TARGET_BASE_ARCH=riscv
7681 TARGET_ABI_DIR=riscv
7682 mttcg=yes
7683 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
7686 TARGET_ARCH=rx
7687 bflt="yes"
7688 target_compiler=$cross_cc_rx
7689 gdb_xml_files="rx-core.xml"
7691 sh4|sh4eb)
7692 TARGET_ARCH=sh4
7693 TARGET_SYSTBL_ABI=common
7694 bflt="yes"
7696 sparc)
7697 TARGET_SYSTBL_ABI=common,32
7699 sparc64)
7700 TARGET_BASE_ARCH=sparc
7701 TARGET_SYSTBL_ABI=common,64
7703 sparc32plus)
7704 TARGET_ARCH=sparc64
7705 TARGET_BASE_ARCH=sparc
7706 TARGET_ABI_DIR=sparc
7707 TARGET_SYSTBL_ABI=common,32
7708 echo "TARGET_ABI32=y" >> $config_target_mak
7710 s390x)
7711 TARGET_SYSTBL_ABI=common,64
7712 mttcg=yes
7713 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7715 tilegx)
7717 tricore)
7719 unicore32)
7721 xtensa|xtensaeb)
7722 TARGET_ARCH=xtensa
7723 TARGET_SYSTBL_ABI=common
7724 bflt="yes"
7725 mttcg="yes"
7728 error_exit "Unsupported target CPU"
7730 esac
7731 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7732 if [ "$TARGET_BASE_ARCH" = "" ]; then
7733 TARGET_BASE_ARCH=$TARGET_ARCH
7735 if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
7736 TARGET_SYSTBL=syscall.tbl
7739 upper() {
7740 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7743 target_arch_name="$(upper $TARGET_ARCH)"
7744 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7745 echo "TARGET_NAME=$target_name" >> $config_target_mak
7746 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7747 if [ "$TARGET_ABI_DIR" = "" ]; then
7748 TARGET_ABI_DIR=$TARGET_ARCH
7750 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7751 if [ "$HOST_VARIANT_DIR" != "" ]; then
7752 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7754 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7755 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7756 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak
7759 if supported_xen_target $target; then
7760 echo "CONFIG_XEN=y" >> $config_target_mak
7761 if test "$xen_pci_passthrough" = yes; then
7762 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7765 if supported_kvm_target $target; then
7766 echo "CONFIG_KVM=y" >> $config_target_mak
7768 if supported_hax_target $target; then
7769 echo "CONFIG_HAX=y" >> $config_target_mak
7771 if supported_hvf_target $target; then
7772 echo "CONFIG_HVF=y" >> $config_target_mak
7774 if supported_whpx_target $target; then
7775 echo "CONFIG_WHPX=y" >> $config_target_mak
7777 if test "$target_aligned_only" = "yes" ; then
7778 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7780 if test "$target_bigendian" = "yes" ; then
7781 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7783 if test "$target_softmmu" = "yes" ; then
7784 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7785 if test "$mttcg" = "yes" ; then
7786 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7789 if test "$target_user_only" = "yes" ; then
7790 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7791 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7792 symlink "../qemu-$target_name" "$target_dir/qemu-$target_name"
7793 else
7794 symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name"
7796 if test "$target_linux_user" = "yes" ; then
7797 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7799 list=""
7800 if test ! -z "$gdb_xml_files" ; then
7801 for x in $gdb_xml_files; do
7802 list="$list gdb-xml/$x"
7803 done
7804 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7807 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7808 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7810 if test "$target_bsd_user" = "yes" ; then
7811 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7814 done # for target in $targets
7816 if [ "$fdt" = "git" ]; then
7817 subdirs="$subdirs dtc"
7819 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7820 subdirs="$subdirs capstone"
7822 echo "SUBDIRS=$subdirs" >> $config_host_mak
7823 if test -n "$LIBCAPSTONE"; then
7824 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7827 if test "$numa" = "yes"; then
7828 echo "CONFIG_NUMA=y" >> $config_host_mak
7829 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
7832 if test "$ccache_cpp2" = "yes"; then
7833 echo "export CCACHE_CPP2=y" >> $config_host_mak
7836 if test "$safe_stack" = "yes"; then
7837 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
7840 # If we're using a separate build tree, set it up now.
7841 # DIRS are directories which we simply mkdir in the build tree;
7842 # LINKS are things to symlink back into the source tree
7843 # (these can be both files and directories).
7844 # Caution: do not add files or directories here using wildcards. This
7845 # will result in problems later if a new file matching the wildcard is
7846 # added to the source tree -- nothing will cause configure to be rerun
7847 # so the build tree will be missing the link back to the new file, and
7848 # tests might fail. Prefer to keep the relevant files in their own
7849 # directory and symlink the directory instead.
7850 # UNLINK is used to remove symlinks from older development versions
7851 # that might get into the way when doing "git update" without doing
7852 # a "make distclean" in between.
7853 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
7854 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
7855 DIRS="$DIRS docs docs/interop fsdev scsi"
7856 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
7857 DIRS="$DIRS roms/seabios"
7858 DIRS="$DIRS contrib/plugins/"
7859 LINKS="Makefile"
7860 LINKS="$LINKS tests/tcg/lm32/Makefile"
7861 LINKS="$LINKS tests/tcg/Makefile.target"
7862 LINKS="$LINKS pc-bios/optionrom/Makefile"
7863 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7864 LINKS="$LINKS roms/seabios/Makefile"
7865 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7866 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7867 LINKS="$LINKS tests/acceptance tests/data"
7868 LINKS="$LINKS tests/qemu-iotests/check"
7869 LINKS="$LINKS python"
7870 LINKS="$LINKS contrib/plugins/Makefile "
7871 UNLINK="pc-bios/keymaps"
7872 for bios_file in \
7873 $source_path/pc-bios/*.bin \
7874 $source_path/pc-bios/*.elf \
7875 $source_path/pc-bios/*.lid \
7876 $source_path/pc-bios/*.rom \
7877 $source_path/pc-bios/*.dtb \
7878 $source_path/pc-bios/*.img \
7879 $source_path/pc-bios/openbios-* \
7880 $source_path/pc-bios/u-boot.* \
7881 $source_path/pc-bios/edk2-*.fd.bz2 \
7882 $source_path/pc-bios/palcode-*
7884 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7885 done
7886 mkdir -p $DIRS
7887 for f in $LINKS ; do
7888 if [ -e "$source_path/$f" ]; then
7889 symlink "$source_path/$f" "$f"
7891 done
7892 for f in $UNLINK ; do
7893 if [ -L "$f" ]; then
7894 rm -f "$f"
7896 done
7898 (for i in $cross_cc_vars; do
7899 export $i
7900 done
7901 export target_list source_path use_containers
7902 $source_path/tests/tcg/configure.sh)
7904 # temporary config to build submodules
7905 for rom in seabios; do
7906 config_mak=roms/$rom/config.mak
7907 echo "# Automatically generated by configure - do not modify" > $config_mak
7908 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7909 echo "AS=$as" >> $config_mak
7910 echo "CCAS=$ccas" >> $config_mak
7911 echo "CC=$cc" >> $config_mak
7912 echo "BCC=bcc" >> $config_mak
7913 echo "CPP=$cpp" >> $config_mak
7914 echo "OBJCOPY=objcopy" >> $config_mak
7915 echo "IASL=$iasl" >> $config_mak
7916 echo "LD=$ld" >> $config_mak
7917 echo "RANLIB=$ranlib" >> $config_mak
7918 done
7920 # set up qemu-iotests in this build directory
7921 iotests_common_env="tests/qemu-iotests/common.env"
7923 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7924 echo >> "$iotests_common_env"
7925 echo "export PYTHON='$python'" >> "$iotests_common_env"
7927 if test "$skip_meson" = no; then
7928 cross="config-meson.cross.new"
7929 meson_quote() {
7930 echo "['$(echo $* | sed "s/ /','/g")']"
7933 echo "# Automatically generated by configure - do not modify" > $cross
7934 echo "[properties]" >> $cross
7935 test -z "$cxx" && echo "link_language = 'c'" >> $cross
7936 echo "[binaries]" >> $cross
7937 echo "c = $(meson_quote $cc)" >> $cross
7938 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
7939 echo "ar = $(meson_quote $ar)" >> $cross
7940 echo "nm = $(meson_quote $nm)" >> $cross
7941 echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
7942 echo "ranlib = $(meson_quote $ranlib)" >> $cross
7943 if has $sdl2_config; then
7944 echo "sdl2-config = $(meson_quote $sdl2_config)" >> $cross
7946 echo "strip = $(meson_quote $strip)" >> $cross
7947 echo "windres = $(meson_quote $windres)" >> $cross
7948 if test -n "$cross_prefix"; then
7949 cross_arg="--cross-file config-meson.cross"
7950 # Hack: Meson expects an absolute path for the *build* machine
7951 # for the prefix, so add a slash in front of a Windows path that
7952 # includes a drive letter.
7954 # See https://github.com/mesonbuild/meson/issues/7577.
7955 echo "[host_machine]" >> $cross
7956 if test "$mingw32" = "yes" ; then
7957 echo "system = 'windows'" >> $cross
7958 case $prefix in
7959 ?:*) pre_prefix=/ ;;
7960 esac
7962 if test "$linux" = "yes" ; then
7963 echo "system = 'linux'" >> $cross
7965 case "$ARCH" in
7966 i386|x86_64)
7967 echo "cpu_family = 'x86'" >> $cross
7969 ppc64le)
7970 echo "cpu_family = 'ppc64'" >> $cross
7973 echo "cpu_family = '$ARCH'" >> $cross
7975 esac
7976 echo "cpu = '$cpu'" >> $cross
7977 if test "$bigendian" = "yes" ; then
7978 echo "endian = 'big'" >> $cross
7979 else
7980 echo "endian = 'little'" >> $cross
7982 else
7983 cross_arg="--native-file config-meson.cross"
7985 mv $cross config-meson.cross
7987 rm -rf meson-private meson-info meson-logs
7988 NINJA=${ninja:-$PWD/ninjatool} $meson setup \
7989 --prefix "${pre_prefix}$prefix" \
7990 --libdir "${pre_prefix}$libdir" \
7991 --libexecdir "${pre_prefix}$libexecdir" \
7992 --bindir "${pre_prefix}$bindir" \
7993 --includedir "${pre_prefix}$includedir" \
7994 --datadir "${pre_prefix}$datadir" \
7995 --mandir "${pre_prefix}$mandir" \
7996 --sysconfdir "${pre_prefix}$sysconfdir" \
7997 --localstatedir "${pre_prefix}$local_statedir" \
7998 -Ddocdir="${pre_prefix}$docdir" \
7999 -Dqemu_suffix="$qemu_suffix" \
8000 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8001 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
8002 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
8003 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
8004 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
8005 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
8006 -Dsdl=$sdl -Dsdl_image=$sdl_image \
8007 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
8008 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
8009 $cross_arg \
8010 "$PWD" "$source_path"
8012 if test "$?" -ne 0 ; then
8013 error_exit "meson setup failed"
8015 touch ninjatool.stamp
8018 if test -n "${deprecated_features}"; then
8019 echo "Warning, deprecated features enabled."
8020 echo "Please see docs/system/deprecated.rst"
8021 echo " features: ${deprecated_features}"
8024 # Save the configure command line for later reuse.
8025 cat <<EOD >config.status
8026 #!/bin/sh
8027 # Generated by configure.
8028 # Run this file to recreate the current configuration.
8029 # Compiler output produced by configure, useful for debugging
8030 # configure, is in config.log if it exists.
8033 preserve_env() {
8034 envname=$1
8036 eval envval=\$$envname
8038 if test -n "$envval"
8039 then
8040 echo "$envname='$envval'" >> config.status
8041 echo "export $envname" >> config.status
8042 else
8043 echo "unset $envname" >> config.status
8047 # Preserve various env variables that influence what
8048 # features/build target configure will detect
8049 preserve_env AR
8050 preserve_env AS
8051 preserve_env CC
8052 preserve_env CPP
8053 preserve_env CXX
8054 preserve_env INSTALL
8055 preserve_env LD
8056 preserve_env LD_LIBRARY_PATH
8057 preserve_env LIBTOOL
8058 preserve_env MAKE
8059 preserve_env NM
8060 preserve_env OBJCOPY
8061 preserve_env PATH
8062 preserve_env PKG_CONFIG
8063 preserve_env PKG_CONFIG_LIBDIR
8064 preserve_env PKG_CONFIG_PATH
8065 preserve_env PYTHON
8066 preserve_env SDL2_CONFIG
8067 preserve_env SMBD
8068 preserve_env STRIP
8069 preserve_env WINDRES
8071 printf "exec" >>config.status
8072 for i in "$0" "$@"; do
8073 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
8074 done
8075 echo ' "$@"' >>config.status
8076 chmod +x config.status
8078 rm -r "$TMPDIR1"