tests/docker: set DEF_TARGET_LIST for some containers
[qemu/ar7.git] / configure
blob7860bbc31218f6a463396bcb64ecc2c663af017e
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
14 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
34 rm -f config.log
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
43 print_error() {
44 (echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo) >&2
53 error_exit() {
54 print_error "$@"
55 exit 1
58 do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
63 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65 funcs: ${FUNCNAME[*]}
66 lines: ${BASH_LINENO[*]}"
67 '; fi
68 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
70 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
82 esac
83 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
85 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
91 do_cc() {
92 do_compiler "$cc" "$@"
95 do_cxx() {
96 do_compiler "$cxx" "$@"
99 update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 -std=gnu99)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
114 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 esac
117 done
120 compile_object() {
121 local_cflags="$1"
122 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
125 compile_prog() {
126 local_cflags="$1"
127 local_ldflags="$2"
128 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
131 # symbolically link $1 to $2. Portable version of "ln -sf".
132 symlink() {
133 rm -rf "$2"
134 mkdir -p "$(dirname "$2")"
135 ln -s "$1" "$2"
138 # check whether a command is available to this shell (may be either an
139 # executable or a builtin)
140 has() {
141 type "$1" >/dev/null 2>&1
144 # search for an executable in PATH
145 path_of() {
146 local_command="$1"
147 local_ifs="$IFS"
148 local_dir=""
150 # pathname has a dir component?
151 if [ "${local_command#*/}" != "$local_command" ]; then
152 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153 echo "$local_command"
154 return 0
157 if [ -z "$local_command" ]; then
158 return 1
161 IFS=:
162 for local_dir in $PATH; do
163 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164 echo "$local_dir/$local_command"
165 IFS="${local_ifs:-$(printf ' \t\n')}"
166 return 0
168 done
169 # not found
170 IFS="${local_ifs:-$(printf ' \t\n')}"
171 return 1
174 have_backend () {
175 echo "$trace_backends" | grep "$1" >/dev/null
178 glob() {
179 eval test -z '"${1#'"$2"'}"'
182 supported_hax_target() {
183 test "$hax" = "yes" || return 1
184 glob "$1" "*-softmmu" || return 1
185 case "${1%-softmmu}" in
186 i386|x86_64)
187 return 0
189 esac
190 return 1
193 supported_kvm_target() {
194 test "$kvm" = "yes" || return 1
195 glob "$1" "*-softmmu" || return 1
196 case "${1%-softmmu}:$cpu" in
197 arm:arm | aarch64:aarch64 | \
198 i386:i386 | i386:x86_64 | i386:x32 | \
199 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200 mips:mips | mipsel:mips | \
201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
202 s390x:s390x)
203 return 0
205 esac
206 return 1
209 supported_xen_target() {
210 test "$xen" = "yes" || return 1
211 glob "$1" "*-softmmu" || return 1
212 # Only i386 and x86_64 provide the xenpv machine.
213 case "${1%-softmmu}" in
214 i386|x86_64)
215 return 0
217 esac
218 return 1
221 supported_hvf_target() {
222 test "$hvf" = "yes" || return 1
223 glob "$1" "*-softmmu" || return 1
224 case "${1%-softmmu}" in
225 x86_64)
226 return 0
228 esac
229 return 1
232 supported_whpx_target() {
233 test "$whpx" = "yes" || return 1
234 glob "$1" "*-softmmu" || return 1
235 case "${1%-softmmu}" in
236 i386|x86_64)
237 return 0
239 esac
240 return 1
243 supported_target() {
244 case "$1" in
245 *-softmmu)
247 *-linux-user)
248 if test "$linux" != "yes"; then
249 print_error "Target '$target' is only available on a Linux host"
250 return 1
253 *-bsd-user)
254 if test "$bsd" != "yes"; then
255 print_error "Target '$target' is only available on a BSD host"
256 return 1
260 print_error "Invalid target name '$target'"
261 return 1
263 esac
264 test "$tcg" = "yes" && return 0
265 supported_kvm_target "$1" && return 0
266 supported_xen_target "$1" && return 0
267 supported_hax_target "$1" && return 0
268 supported_hvf_target "$1" && return 0
269 supported_whpx_target "$1" && return 0
270 print_error "TCG disabled, but hardware accelerator not available for '$target'"
271 return 1
275 ld_has() {
276 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
279 # make source path absolute
280 source_path=$(cd "$(dirname -- "$0")"; pwd)
282 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
283 then
284 error_exit "main directory cannot contain spaces nor colons"
287 # default parameters
288 cpu=""
289 iasl="iasl"
290 interp_prefix="/usr/gnemul/qemu-%M"
291 static="no"
292 cross_prefix=""
293 audio_drv_list=""
294 block_drv_rw_whitelist=""
295 block_drv_ro_whitelist=""
296 host_cc="cc"
297 libs_cpu=""
298 libs_softmmu=""
299 libs_tools=""
300 audio_pt_int=""
301 audio_win_int=""
302 libs_qga=""
303 debug_info="yes"
304 stack_protector=""
306 if test -e "$source_path/.git"
307 then
308 git_update=yes
309 git_submodules="ui/keycodemapdb"
310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
312 else
313 git_update=no
314 git_submodules=""
316 if ! test -f "$source_path/ui/keycodemapdb/README"
317 then
318 echo
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
320 echo
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
325 echo
326 echo " https://www.qemu.org/download/#source"
327 echo
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
330 echo
331 exit 1
334 git="git"
336 # Don't accept a target_list environment variable.
337 unset target_list
338 unset target_list_exclude
340 # Default value for a variable defining feature "foo".
341 # * foo="no" feature will only be used if --enable-foo arg is given
342 # * foo="" feature will be searched for, and if found, will be used
343 # unless --disable-foo is given
344 # * foo="yes" this value will only be set by --enable-foo flag.
345 # feature will searched for,
346 # if not found, configure exits with error
348 # Always add --enable-foo and --disable-foo command line args.
349 # Distributions want to ensure that several features are compiled in, and it
350 # is impossible without a --enable-foo that exits if a feature is not found.
352 bluez=""
353 brlapi=""
354 curl=""
355 curses=""
356 docs=""
357 fdt=""
358 netmap="no"
359 sdl=""
360 sdl_image=""
361 virtfs=""
362 mpath=""
363 vnc="yes"
364 sparse="no"
365 vde=""
366 vnc_sasl=""
367 vnc_jpeg=""
368 vnc_png=""
369 xkbcommon=""
370 xen=""
371 xen_ctrl_version=""
372 xen_pci_passthrough=""
373 linux_aio=""
374 cap_ng=""
375 attr=""
376 libattr=""
377 xfs=""
378 tcg="yes"
379 membarrier=""
380 vhost_net=""
381 vhost_crypto=""
382 vhost_scsi=""
383 vhost_vsock=""
384 vhost_user=""
385 kvm="no"
386 hax="no"
387 hvf="no"
388 whpx="no"
389 rdma=""
390 pvrdma=""
391 gprof="no"
392 debug_tcg="no"
393 debug="no"
394 sanitizers="no"
395 fortify_source=""
396 strip_opt="yes"
397 tcg_interpreter="no"
398 bigendian="no"
399 mingw32="no"
400 gcov="no"
401 gcov_tool="gcov"
402 EXESUF=""
403 DSOSUF=".so"
404 LDFLAGS_SHARED="-shared"
405 modules="no"
406 prefix="/usr/local"
407 mandir="\${prefix}/share/man"
408 datadir="\${prefix}/share"
409 firmwarepath="\${prefix}/share/qemu-firmware"
410 qemu_docdir="\${prefix}/share/doc/qemu"
411 bindir="\${prefix}/bin"
412 libdir="\${prefix}/lib"
413 libexecdir="\${prefix}/libexec"
414 includedir="\${prefix}/include"
415 sysconfdir="\${prefix}/etc"
416 local_statedir="\${prefix}/var"
417 confsuffix="/qemu"
418 slirp=""
419 oss_lib=""
420 bsd="no"
421 linux="no"
422 solaris="no"
423 profiler="no"
424 cocoa="no"
425 softmmu="yes"
426 linux_user="no"
427 bsd_user="no"
428 blobs="yes"
429 pkgversion=""
430 pie=""
431 qom_cast_debug="yes"
432 trace_backends="log"
433 trace_file="trace"
434 spice=""
435 rbd=""
436 smartcard=""
437 libusb=""
438 usb_redir=""
439 opengl=""
440 opengl_dmabuf="no"
441 cpuid_h="no"
442 avx2_opt=""
443 zlib="yes"
444 capstone=""
445 lzo=""
446 snappy=""
447 bzip2=""
448 lzfse=""
449 guest_agent=""
450 guest_agent_with_vss="no"
451 guest_agent_ntddscsi="no"
452 guest_agent_msi=""
453 vss_win32_sdk=""
454 win_sdk="no"
455 want_tools="yes"
456 libiscsi=""
457 libnfs=""
458 coroutine=""
459 coroutine_pool=""
460 debug_stack_usage="no"
461 crypto_afalg="no"
462 seccomp=""
463 glusterfs=""
464 glusterfs_xlator_opt="no"
465 glusterfs_discard="no"
466 glusterfs_fallocate="no"
467 glusterfs_zerofill="no"
468 glusterfs_ftruncate_has_stat="no"
469 glusterfs_iocb_has_stat="no"
470 gtk=""
471 gtk_gl="no"
472 tls_priority="NORMAL"
473 gnutls=""
474 nettle=""
475 gcrypt=""
476 gcrypt_hmac="no"
477 auth_pam=""
478 vte=""
479 virglrenderer=""
480 tpm=""
481 libssh=""
482 live_block_migration="yes"
483 numa=""
484 tcmalloc="no"
485 jemalloc="no"
486 replication="yes"
487 vxhs=""
488 bochs="yes"
489 cloop="yes"
490 dmg="yes"
491 qcow1="yes"
492 vdi="yes"
493 vvfat="yes"
494 qed="yes"
495 parallels="yes"
496 sheepdog="yes"
497 libxml2=""
498 debug_mutex="no"
499 libpmem=""
500 default_devices="yes"
502 supported_cpu="no"
503 supported_os="no"
504 bogus_os="no"
505 malloc_trim=""
507 # parse CC options first
508 for opt do
509 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
510 case "$opt" in
511 --cross-prefix=*) cross_prefix="$optarg"
513 --cc=*) CC="$optarg"
515 --cxx=*) CXX="$optarg"
517 --cpu=*) cpu="$optarg"
519 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
521 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
523 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
524 EXTRA_LDFLAGS="$optarg"
526 --enable-debug-info) debug_info="yes"
528 --disable-debug-info) debug_info="no"
530 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
532 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
533 eval "cross_cc_cflags_${cc_arch}=\$optarg"
534 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
536 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
537 cc_archs="$cc_archs $cc_arch"
538 eval "cross_cc_${cc_arch}=\$optarg"
539 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
541 esac
542 done
543 # OS specific
544 # Using uname is really, really broken. Once we have the right set of checks
545 # we can eliminate its usage altogether.
547 # Preferred compiler:
548 # ${CC} (if set)
549 # ${cross_prefix}gcc (if cross-prefix specified)
550 # system compiler
551 if test -z "${CC}${cross_prefix}"; then
552 cc="$host_cc"
553 else
554 cc="${CC-${cross_prefix}gcc}"
557 if test -z "${CXX}${cross_prefix}"; then
558 cxx="c++"
559 else
560 cxx="${CXX-${cross_prefix}g++}"
563 ar="${AR-${cross_prefix}ar}"
564 as="${AS-${cross_prefix}as}"
565 ccas="${CCAS-$cc}"
566 cpp="${CPP-$cc -E}"
567 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
568 ld="${LD-${cross_prefix}ld}"
569 ranlib="${RANLIB-${cross_prefix}ranlib}"
570 nm="${NM-${cross_prefix}nm}"
571 strip="${STRIP-${cross_prefix}strip}"
572 windres="${WINDRES-${cross_prefix}windres}"
573 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
574 query_pkg_config() {
575 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
577 pkg_config=query_pkg_config
578 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
580 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
581 ARFLAGS="${ARFLAGS-rv}"
583 # default flags for all hosts
584 # We use -fwrapv to tell the compiler that we require a C dialect where
585 # left shift of signed integers is well defined and has the expected
586 # 2s-complement style results. (Both clang and gcc agree that it
587 # provides these semantics.)
588 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
589 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
590 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
591 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
592 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
593 if test "$debug_info" = "yes"; then
594 CFLAGS="-g $CFLAGS"
595 LDFLAGS="-g $LDFLAGS"
598 # running configure in the source tree?
599 # we know that's the case if configure is there.
600 if test -f "./configure"; then
601 pwd_is_source_path="y"
602 else
603 pwd_is_source_path="n"
606 check_define() {
607 cat > $TMPC <<EOF
608 #if !defined($1)
609 #error $1 not defined
610 #endif
611 int main(void) { return 0; }
613 compile_object
616 check_include() {
617 cat > $TMPC <<EOF
618 #include <$1>
619 int main(void) { return 0; }
621 compile_object
624 write_c_skeleton() {
625 cat > $TMPC <<EOF
626 int main(void) { return 0; }
630 if check_define __linux__ ; then
631 targetos="Linux"
632 elif check_define _WIN32 ; then
633 targetos='MINGW32'
634 elif check_define __OpenBSD__ ; then
635 targetos='OpenBSD'
636 elif check_define __sun__ ; then
637 targetos='SunOS'
638 elif check_define __HAIKU__ ; then
639 targetos='Haiku'
640 elif check_define __FreeBSD__ ; then
641 targetos='FreeBSD'
642 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
643 targetos='GNU/kFreeBSD'
644 elif check_define __DragonFly__ ; then
645 targetos='DragonFly'
646 elif check_define __NetBSD__; then
647 targetos='NetBSD'
648 elif check_define __APPLE__; then
649 targetos='Darwin'
650 else
651 # This is a fatal error, but don't report it yet, because we
652 # might be going to just print the --help text, or it might
653 # be the result of a missing compiler.
654 targetos='bogus'
655 bogus_os='yes'
658 # Some host OSes need non-standard checks for which CPU to use.
659 # Note that these checks are broken for cross-compilation: if you're
660 # cross-compiling to one of these OSes then you'll need to specify
661 # the correct CPU with the --cpu option.
662 case $targetos in
663 Darwin)
664 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
665 # run 64-bit userspace code.
666 # If the user didn't specify a CPU explicitly and the kernel says this is
667 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
668 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
669 cpu="x86_64"
672 SunOS)
673 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
674 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
675 cpu="x86_64"
677 esac
679 if test ! -z "$cpu" ; then
680 # command line argument
682 elif check_define __i386__ ; then
683 cpu="i386"
684 elif check_define __x86_64__ ; then
685 if check_define __ILP32__ ; then
686 cpu="x32"
687 else
688 cpu="x86_64"
690 elif check_define __sparc__ ; then
691 if check_define __arch64__ ; then
692 cpu="sparc64"
693 else
694 cpu="sparc"
696 elif check_define _ARCH_PPC ; then
697 if check_define _ARCH_PPC64 ; then
698 if check_define _LITTLE_ENDIAN ; then
699 cpu="ppc64le"
700 else
701 cpu="ppc64"
703 else
704 cpu="ppc"
706 elif check_define __mips__ ; then
707 cpu="mips"
708 elif check_define __s390__ ; then
709 if check_define __s390x__ ; then
710 cpu="s390x"
711 else
712 cpu="s390"
714 elif check_define __riscv ; then
715 if check_define _LP64 ; then
716 cpu="riscv64"
717 else
718 cpu="riscv32"
720 elif check_define __arm__ ; then
721 cpu="arm"
722 elif check_define __aarch64__ ; then
723 cpu="aarch64"
724 else
725 cpu=$(uname -m)
728 ARCH=
729 # Normalise host CPU name and set ARCH.
730 # Note that this case should only have supported host CPUs, not guests.
731 case "$cpu" in
732 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
733 supported_cpu="yes"
735 ppc64le)
736 ARCH="ppc64"
737 supported_cpu="yes"
739 i386|i486|i586|i686|i86pc|BePC)
740 cpu="i386"
741 supported_cpu="yes"
743 x86_64|amd64)
744 cpu="x86_64"
745 supported_cpu="yes"
747 armv*b|armv*l|arm)
748 cpu="arm"
749 supported_cpu="yes"
751 aarch64)
752 cpu="aarch64"
753 supported_cpu="yes"
755 mips*)
756 cpu="mips"
757 supported_cpu="yes"
759 sparc|sun4[cdmuv])
760 cpu="sparc"
761 supported_cpu="yes"
764 # This will result in either an error or falling back to TCI later
765 ARCH=unknown
767 esac
768 if test -z "$ARCH"; then
769 ARCH="$cpu"
772 # OS specific
774 # host *BSD for user mode
775 HOST_VARIANT_DIR=""
777 case $targetos in
778 MINGW32*)
779 mingw32="yes"
780 hax="yes"
781 vhost_user="no"
782 audio_possible_drivers="dsound sdl"
783 if check_include dsound.h; then
784 audio_drv_list="dsound"
785 else
786 audio_drv_list=""
788 supported_os="yes"
790 GNU/kFreeBSD)
791 bsd="yes"
792 audio_drv_list="oss try-sdl"
793 audio_possible_drivers="oss sdl pa"
795 FreeBSD)
796 bsd="yes"
797 make="${MAKE-gmake}"
798 audio_drv_list="oss try-sdl"
799 audio_possible_drivers="oss sdl pa"
800 # needed for kinfo_getvmmap(3) in libutil.h
801 LIBS="-lutil $LIBS"
802 # needed for kinfo_getproc
803 libs_qga="-lutil $libs_qga"
804 netmap="" # enable netmap autodetect
805 HOST_VARIANT_DIR="freebsd"
806 supported_os="yes"
808 DragonFly)
809 bsd="yes"
810 make="${MAKE-gmake}"
811 audio_drv_list="oss try-sdl"
812 audio_possible_drivers="oss sdl pa"
813 HOST_VARIANT_DIR="dragonfly"
815 NetBSD)
816 bsd="yes"
817 hax="yes"
818 make="${MAKE-gmake}"
819 audio_drv_list="oss try-sdl"
820 audio_possible_drivers="oss sdl"
821 oss_lib="-lossaudio"
822 HOST_VARIANT_DIR="netbsd"
823 supported_os="yes"
825 OpenBSD)
826 bsd="yes"
827 make="${MAKE-gmake}"
828 audio_drv_list="try-sdl"
829 audio_possible_drivers="sdl"
830 HOST_VARIANT_DIR="openbsd"
831 supported_os="yes"
833 Darwin)
834 bsd="yes"
835 darwin="yes"
836 hax="yes"
837 hvf="yes"
838 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
839 if [ "$cpu" = "x86_64" ] ; then
840 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
841 LDFLAGS="-arch x86_64 $LDFLAGS"
843 cocoa="yes"
844 audio_drv_list="coreaudio try-sdl"
845 audio_possible_drivers="coreaudio sdl"
846 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
847 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
848 # Disable attempts to use ObjectiveC features in os/object.h since they
849 # won't work when we're compiling with gcc as a C compiler.
850 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
851 HOST_VARIANT_DIR="darwin"
852 supported_os="yes"
854 SunOS)
855 solaris="yes"
856 make="${MAKE-gmake}"
857 install="${INSTALL-ginstall}"
858 smbd="${SMBD-/usr/sfw/sbin/smbd}"
859 if test -f /usr/include/sys/soundcard.h ; then
860 audio_drv_list="oss try-sdl"
862 audio_possible_drivers="oss sdl"
863 # needed for CMSG_ macros in sys/socket.h
864 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
865 # needed for TIOCWIN* defines in termios.h
866 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
867 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
868 solarisnetlibs="-lsocket -lnsl -lresolv"
869 LIBS="$solarisnetlibs $LIBS"
870 libs_qga="$solarisnetlibs $libs_qga"
872 Haiku)
873 haiku="yes"
874 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
875 LIBS="-lposix_error_mapper -lnetwork $LIBS"
877 Linux)
878 audio_drv_list="try-pa oss"
879 audio_possible_drivers="oss alsa sdl pa"
880 linux="yes"
881 linux_user="yes"
882 kvm="yes"
883 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
884 supported_os="yes"
885 libudev="yes"
887 esac
889 if [ "$bsd" = "yes" ] ; then
890 if [ "$darwin" != "yes" ] ; then
891 bsd_user="yes"
895 : ${make=${MAKE-make}}
896 : ${install=${INSTALL-install}}
897 # We prefer python 3.x. A bare 'python' is traditionally
898 # python 2.x, but some distros have it as python 3.x, so
899 # we check that before python2
900 python=
901 for binary in "${PYTHON-python3}" python python2
903 if has "$binary"
904 then
905 python="$binary"
906 break
908 done
909 : ${smbd=${SMBD-/usr/sbin/smbd}}
911 # Default objcc to clang if available, otherwise use CC
912 if has clang; then
913 objcc=clang
914 else
915 objcc="$cc"
918 if test "$mingw32" = "yes" ; then
919 EXESUF=".exe"
920 DSOSUF=".dll"
921 # MinGW needs -mthreads for TLS and macro _MT.
922 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
923 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
924 write_c_skeleton;
925 if compile_prog "" "-liberty" ; then
926 LIBS="-liberty $LIBS"
928 prefix="c:/Program Files/QEMU"
929 mandir="\${prefix}"
930 datadir="\${prefix}"
931 qemu_docdir="\${prefix}"
932 bindir="\${prefix}"
933 sysconfdir="\${prefix}"
934 local_statedir=
935 confsuffix=""
936 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
939 werror=""
941 for opt do
942 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
943 case "$opt" in
944 --help|-h) show_help=yes
946 --version|-V) exec cat $source_path/VERSION
948 --prefix=*) prefix="$optarg"
950 --interp-prefix=*) interp_prefix="$optarg"
952 --cross-prefix=*)
954 --cc=*)
956 --host-cc=*) host_cc="$optarg"
958 --cxx=*)
960 --iasl=*) iasl="$optarg"
962 --objcc=*) objcc="$optarg"
964 --make=*) make="$optarg"
966 --install=*) install="$optarg"
968 --python=*) python="$optarg"
970 --gcov=*) gcov_tool="$optarg"
972 --smbd=*) smbd="$optarg"
974 --extra-cflags=*)
976 --extra-cxxflags=*)
978 --extra-ldflags=*)
980 --enable-debug-info)
982 --disable-debug-info)
984 --cross-cc-*)
986 --enable-modules)
987 modules="yes"
989 --disable-modules)
990 modules="no"
992 --cpu=*)
994 --target-list=*) target_list="$optarg"
995 if test "$target_list_exclude"; then
996 error_exit "Can't mix --target-list with --target-list-exclude"
999 --target-list-exclude=*) target_list_exclude="$optarg"
1000 if test "$target_list"; then
1001 error_exit "Can't mix --target-list-exclude with --target-list"
1004 --enable-trace-backends=*) trace_backends="$optarg"
1006 # XXX: backwards compatibility
1007 --enable-trace-backend=*) trace_backends="$optarg"
1009 --with-trace-file=*) trace_file="$optarg"
1011 --with-default-devices) default_devices="yes"
1013 --without-default-devices) default_devices="no"
1015 --enable-gprof) gprof="yes"
1017 --enable-gcov) gcov="yes"
1019 --static)
1020 static="yes"
1021 LDFLAGS="-static $LDFLAGS"
1022 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1024 --mandir=*) mandir="$optarg"
1026 --bindir=*) bindir="$optarg"
1028 --libdir=*) libdir="$optarg"
1030 --libexecdir=*) libexecdir="$optarg"
1032 --includedir=*) includedir="$optarg"
1034 --datadir=*) datadir="$optarg"
1036 --with-confsuffix=*) confsuffix="$optarg"
1038 --docdir=*) qemu_docdir="$optarg"
1040 --sysconfdir=*) sysconfdir="$optarg"
1042 --localstatedir=*) local_statedir="$optarg"
1044 --firmwarepath=*) firmwarepath="$optarg"
1046 --host=*|--build=*|\
1047 --disable-dependency-tracking|\
1048 --sbindir=*|--sharedstatedir=*|\
1049 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1050 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1051 # These switches are silently ignored, for compatibility with
1052 # autoconf-generated configure scripts. This allows QEMU's
1053 # configure to be used by RPM and similar macros that set
1054 # lots of directory switches by default.
1056 --disable-sdl) sdl="no"
1058 --enable-sdl) sdl="yes"
1060 --disable-sdl-image) sdl_image="no"
1062 --enable-sdl-image) sdl_image="yes"
1064 --disable-qom-cast-debug) qom_cast_debug="no"
1066 --enable-qom-cast-debug) qom_cast_debug="yes"
1068 --disable-virtfs) virtfs="no"
1070 --enable-virtfs) virtfs="yes"
1072 --disable-mpath) mpath="no"
1074 --enable-mpath) mpath="yes"
1076 --disable-vnc) vnc="no"
1078 --enable-vnc) vnc="yes"
1080 --oss-lib=*) oss_lib="$optarg"
1082 --audio-drv-list=*) audio_drv_list="$optarg"
1084 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1086 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1088 --enable-debug-tcg) debug_tcg="yes"
1090 --disable-debug-tcg) debug_tcg="no"
1092 --enable-debug)
1093 # Enable debugging options that aren't excessively noisy
1094 debug_tcg="yes"
1095 debug_mutex="yes"
1096 debug="yes"
1097 strip_opt="no"
1098 fortify_source="no"
1100 --enable-sanitizers) sanitizers="yes"
1102 --disable-sanitizers) sanitizers="no"
1104 --enable-sparse) sparse="yes"
1106 --disable-sparse) sparse="no"
1108 --disable-strip) strip_opt="no"
1110 --disable-vnc-sasl) vnc_sasl="no"
1112 --enable-vnc-sasl) vnc_sasl="yes"
1114 --disable-vnc-jpeg) vnc_jpeg="no"
1116 --enable-vnc-jpeg) vnc_jpeg="yes"
1118 --disable-vnc-png) vnc_png="no"
1120 --enable-vnc-png) vnc_png="yes"
1122 --disable-slirp) slirp="no"
1124 --enable-slirp=git) slirp="git"
1126 --enable-slirp=system) slirp="system"
1128 --disable-vde) vde="no"
1130 --enable-vde) vde="yes"
1132 --disable-netmap) netmap="no"
1134 --enable-netmap) netmap="yes"
1136 --disable-xen) xen="no"
1138 --enable-xen) xen="yes"
1140 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1142 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1144 --disable-brlapi) brlapi="no"
1146 --enable-brlapi) brlapi="yes"
1148 --disable-bluez) bluez="no"
1150 --enable-bluez) bluez="yes"
1152 --disable-kvm) kvm="no"
1154 --enable-kvm) kvm="yes"
1156 --disable-hax) hax="no"
1158 --enable-hax) hax="yes"
1160 --disable-hvf) hvf="no"
1162 --enable-hvf) hvf="yes"
1164 --disable-whpx) whpx="no"
1166 --enable-whpx) whpx="yes"
1168 --disable-tcg-interpreter) tcg_interpreter="no"
1170 --enable-tcg-interpreter) tcg_interpreter="yes"
1172 --disable-cap-ng) cap_ng="no"
1174 --enable-cap-ng) cap_ng="yes"
1176 --disable-tcg) tcg="no"
1178 --enable-tcg) tcg="yes"
1180 --disable-malloc-trim) malloc_trim="no"
1182 --enable-malloc-trim) malloc_trim="yes"
1184 --disable-spice) spice="no"
1186 --enable-spice) spice="yes"
1188 --disable-libiscsi) libiscsi="no"
1190 --enable-libiscsi) libiscsi="yes"
1192 --disable-libnfs) libnfs="no"
1194 --enable-libnfs) libnfs="yes"
1196 --enable-profiler) profiler="yes"
1198 --disable-cocoa) cocoa="no"
1200 --enable-cocoa)
1201 cocoa="yes" ;
1202 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1204 --disable-system) softmmu="no"
1206 --enable-system) softmmu="yes"
1208 --disable-user)
1209 linux_user="no" ;
1210 bsd_user="no" ;
1212 --enable-user) ;;
1213 --disable-linux-user) linux_user="no"
1215 --enable-linux-user) linux_user="yes"
1217 --disable-bsd-user) bsd_user="no"
1219 --enable-bsd-user) bsd_user="yes"
1221 --enable-pie) pie="yes"
1223 --disable-pie) pie="no"
1225 --enable-werror) werror="yes"
1227 --disable-werror) werror="no"
1229 --enable-stack-protector) stack_protector="yes"
1231 --disable-stack-protector) stack_protector="no"
1233 --disable-curses) curses="no"
1235 --enable-curses) curses="yes"
1237 --disable-iconv) iconv="no"
1239 --enable-iconv) iconv="yes"
1241 --disable-curl) curl="no"
1243 --enable-curl) curl="yes"
1245 --disable-fdt) fdt="no"
1247 --enable-fdt) fdt="yes"
1249 --disable-linux-aio) linux_aio="no"
1251 --enable-linux-aio) linux_aio="yes"
1253 --disable-attr) attr="no"
1255 --enable-attr) attr="yes"
1257 --disable-membarrier) membarrier="no"
1259 --enable-membarrier) membarrier="yes"
1261 --disable-blobs) blobs="no"
1263 --with-pkgversion=*) pkgversion="$optarg"
1265 --with-coroutine=*) coroutine="$optarg"
1267 --disable-coroutine-pool) coroutine_pool="no"
1269 --enable-coroutine-pool) coroutine_pool="yes"
1271 --enable-debug-stack-usage) debug_stack_usage="yes"
1273 --enable-crypto-afalg) crypto_afalg="yes"
1275 --disable-crypto-afalg) crypto_afalg="no"
1277 --disable-docs) docs="no"
1279 --enable-docs) docs="yes"
1281 --disable-vhost-net) vhost_net="no"
1283 --enable-vhost-net) vhost_net="yes"
1285 --disable-vhost-crypto) vhost_crypto="no"
1287 --enable-vhost-crypto) vhost_crypto="yes"
1289 --disable-vhost-scsi) vhost_scsi="no"
1291 --enable-vhost-scsi) vhost_scsi="yes"
1293 --disable-vhost-vsock) vhost_vsock="no"
1295 --enable-vhost-vsock) vhost_vsock="yes"
1297 --disable-opengl) opengl="no"
1299 --enable-opengl) opengl="yes"
1301 --disable-rbd) rbd="no"
1303 --enable-rbd) rbd="yes"
1305 --disable-xfsctl) xfs="no"
1307 --enable-xfsctl) xfs="yes"
1309 --disable-smartcard) smartcard="no"
1311 --enable-smartcard) smartcard="yes"
1313 --disable-libusb) libusb="no"
1315 --enable-libusb) libusb="yes"
1317 --disable-usb-redir) usb_redir="no"
1319 --enable-usb-redir) usb_redir="yes"
1321 --disable-zlib-test) zlib="no"
1323 --disable-lzo) lzo="no"
1325 --enable-lzo) lzo="yes"
1327 --disable-snappy) snappy="no"
1329 --enable-snappy) snappy="yes"
1331 --disable-bzip2) bzip2="no"
1333 --enable-bzip2) bzip2="yes"
1335 --enable-lzfse) lzfse="yes"
1337 --disable-lzfse) lzfse="no"
1339 --enable-guest-agent) guest_agent="yes"
1341 --disable-guest-agent) guest_agent="no"
1343 --enable-guest-agent-msi) guest_agent_msi="yes"
1345 --disable-guest-agent-msi) guest_agent_msi="no"
1347 --with-vss-sdk) vss_win32_sdk=""
1349 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1351 --without-vss-sdk) vss_win32_sdk="no"
1353 --with-win-sdk) win_sdk=""
1355 --with-win-sdk=*) win_sdk="$optarg"
1357 --without-win-sdk) win_sdk="no"
1359 --enable-tools) want_tools="yes"
1361 --disable-tools) want_tools="no"
1363 --enable-seccomp) seccomp="yes"
1365 --disable-seccomp) seccomp="no"
1367 --disable-glusterfs) glusterfs="no"
1369 --disable-avx2) avx2_opt="no"
1371 --enable-avx2) avx2_opt="yes"
1373 --enable-glusterfs) glusterfs="yes"
1375 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1376 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1378 --enable-vhdx|--disable-vhdx)
1379 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1381 --enable-uuid|--disable-uuid)
1382 echo "$0: $opt is obsolete, UUID support is always built" >&2
1384 --disable-gtk) gtk="no"
1386 --enable-gtk) gtk="yes"
1388 --tls-priority=*) tls_priority="$optarg"
1390 --disable-gnutls) gnutls="no"
1392 --enable-gnutls) gnutls="yes"
1394 --disable-nettle) nettle="no"
1396 --enable-nettle) nettle="yes"
1398 --disable-gcrypt) gcrypt="no"
1400 --enable-gcrypt) gcrypt="yes"
1402 --disable-auth-pam) auth_pam="no"
1404 --enable-auth-pam) auth_pam="yes"
1406 --enable-rdma) rdma="yes"
1408 --disable-rdma) rdma="no"
1410 --enable-pvrdma) pvrdma="yes"
1412 --disable-pvrdma) pvrdma="no"
1414 --disable-vte) vte="no"
1416 --enable-vte) vte="yes"
1418 --disable-virglrenderer) virglrenderer="no"
1420 --enable-virglrenderer) virglrenderer="yes"
1422 --disable-tpm) tpm="no"
1424 --enable-tpm) tpm="yes"
1426 --disable-libssh) libssh="no"
1428 --enable-libssh) libssh="yes"
1430 --disable-live-block-migration) live_block_migration="no"
1432 --enable-live-block-migration) live_block_migration="yes"
1434 --disable-numa) numa="no"
1436 --enable-numa) numa="yes"
1438 --disable-libxml2) libxml2="no"
1440 --enable-libxml2) libxml2="yes"
1442 --disable-tcmalloc) tcmalloc="no"
1444 --enable-tcmalloc) tcmalloc="yes"
1446 --disable-jemalloc) jemalloc="no"
1448 --enable-jemalloc) jemalloc="yes"
1450 --disable-replication) replication="no"
1452 --enable-replication) replication="yes"
1454 --disable-vxhs) vxhs="no"
1456 --enable-vxhs) vxhs="yes"
1458 --disable-bochs) bochs="no"
1460 --enable-bochs) bochs="yes"
1462 --disable-cloop) cloop="no"
1464 --enable-cloop) cloop="yes"
1466 --disable-dmg) dmg="no"
1468 --enable-dmg) dmg="yes"
1470 --disable-qcow1) qcow1="no"
1472 --enable-qcow1) qcow1="yes"
1474 --disable-vdi) vdi="no"
1476 --enable-vdi) vdi="yes"
1478 --disable-vvfat) vvfat="no"
1480 --enable-vvfat) vvfat="yes"
1482 --disable-qed) qed="no"
1484 --enable-qed) qed="yes"
1486 --disable-parallels) parallels="no"
1488 --enable-parallels) parallels="yes"
1490 --disable-sheepdog) sheepdog="no"
1492 --enable-sheepdog) sheepdog="yes"
1494 --disable-vhost-user) vhost_user="no"
1496 --enable-vhost-user) vhost_user="yes"
1498 --disable-vhost-kernel) vhost_kernel="no"
1500 --enable-vhost-kernel) vhost_kernel="yes"
1502 --disable-capstone) capstone="no"
1504 --enable-capstone) capstone="yes"
1506 --enable-capstone=git) capstone="git"
1508 --enable-capstone=system) capstone="system"
1510 --with-git=*) git="$optarg"
1512 --enable-git-update) git_update=yes
1514 --disable-git-update) git_update=no
1516 --enable-debug-mutex) debug_mutex=yes
1518 --disable-debug-mutex) debug_mutex=no
1520 --enable-libpmem) libpmem=yes
1522 --disable-libpmem) libpmem=no
1525 echo "ERROR: unknown option $opt"
1526 echo "Try '$0 --help' for more information"
1527 exit 1
1529 esac
1530 done
1532 case "$cpu" in
1533 ppc)
1534 CPU_CFLAGS="-m32"
1535 LDFLAGS="-m32 $LDFLAGS"
1537 ppc64)
1538 CPU_CFLAGS="-m64"
1539 LDFLAGS="-m64 $LDFLAGS"
1541 sparc)
1542 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1543 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1545 sparc64)
1546 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1547 LDFLAGS="-m64 $LDFLAGS"
1549 s390)
1550 CPU_CFLAGS="-m31"
1551 LDFLAGS="-m31 $LDFLAGS"
1553 s390x)
1554 CPU_CFLAGS="-m64"
1555 LDFLAGS="-m64 $LDFLAGS"
1557 i386)
1558 CPU_CFLAGS="-m32"
1559 LDFLAGS="-m32 $LDFLAGS"
1561 x86_64)
1562 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1563 # If we truly care, we should simply detect this case at
1564 # runtime and generate the fallback to serial emulation.
1565 CPU_CFLAGS="-m64 -mcx16"
1566 LDFLAGS="-m64 $LDFLAGS"
1568 x32)
1569 CPU_CFLAGS="-mx32"
1570 LDFLAGS="-mx32 $LDFLAGS"
1572 # No special flags required for other host CPUs
1573 esac
1575 eval "cross_cc_${cpu}=\$host_cc"
1576 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1577 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1579 # For user-mode emulation the host arch has to be one we explicitly
1580 # support, even if we're using TCI.
1581 if [ "$ARCH" = "unknown" ]; then
1582 bsd_user="no"
1583 linux_user="no"
1586 default_target_list=""
1588 mak_wilds=""
1590 if [ "$softmmu" = "yes" ]; then
1591 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1593 if [ "$linux_user" = "yes" ]; then
1594 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1596 if [ "$bsd_user" = "yes" ]; then
1597 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1600 if test -z "$target_list_exclude"; then
1601 for config in $mak_wilds; do
1602 default_target_list="${default_target_list} $(basename "$config" .mak)"
1603 done
1604 else
1605 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1606 for config in $mak_wilds; do
1607 target="$(basename "$config" .mak)"
1608 exclude="no"
1609 for excl in $exclude_list; do
1610 if test "$excl" = "$target"; then
1611 exclude="yes"
1612 break;
1614 done
1615 if test "$exclude" = "no"; then
1616 default_target_list="${default_target_list} $target"
1618 done
1621 # Enumerate public trace backends for --help output
1622 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1624 if test x"$show_help" = x"yes" ; then
1625 cat << EOF
1627 Usage: configure [options]
1628 Options: [defaults in brackets after descriptions]
1630 Standard options:
1631 --help print this message
1632 --prefix=PREFIX install in PREFIX [$prefix]
1633 --interp-prefix=PREFIX where to find shared libraries, etc.
1634 use %M for cpu name [$interp_prefix]
1635 --target-list=LIST set target list (default: build everything)
1636 $(echo Available targets: $default_target_list | \
1637 fold -s -w 53 | sed -e 's/^/ /')
1638 --target-list-exclude=LIST exclude a set of targets from the default target-list
1640 Advanced options (experts only):
1641 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1642 --cc=CC use C compiler CC [$cc]
1643 --iasl=IASL use ACPI compiler IASL [$iasl]
1644 --host-cc=CC use C compiler CC [$host_cc] for code run at
1645 build time
1646 --cxx=CXX use C++ compiler CXX [$cxx]
1647 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1648 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1649 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1650 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1651 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1652 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1653 --make=MAKE use specified make [$make]
1654 --install=INSTALL use specified install [$install]
1655 --python=PYTHON use specified python [$python]
1656 --smbd=SMBD use specified smbd [$smbd]
1657 --with-git=GIT use specified git [$git]
1658 --static enable static build [$static]
1659 --mandir=PATH install man pages in PATH
1660 --datadir=PATH install firmware in PATH$confsuffix
1661 --docdir=PATH install documentation in PATH$confsuffix
1662 --bindir=PATH install binaries in PATH
1663 --libdir=PATH install libraries in PATH
1664 --libexecdir=PATH install helper binaries in PATH
1665 --sysconfdir=PATH install config in PATH$confsuffix
1666 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1667 --firmwarepath=PATH search PATH for firmware files
1668 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1669 --with-pkgversion=VERS use specified string as sub-version of the package
1670 --enable-debug enable common debug build options
1671 --enable-sanitizers enable default sanitizers
1672 --disable-strip disable stripping binaries
1673 --disable-werror disable compilation abort on warning
1674 --disable-stack-protector disable compiler-provided stack protection
1675 --audio-drv-list=LIST set audio drivers list:
1676 Available drivers: $audio_possible_drivers
1677 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1678 --block-drv-rw-whitelist=L
1679 set block driver read-write whitelist
1680 (affects only QEMU, not qemu-img)
1681 --block-drv-ro-whitelist=L
1682 set block driver read-only whitelist
1683 (affects only QEMU, not qemu-img)
1684 --enable-trace-backends=B Set trace backend
1685 Available backends: $trace_backend_list
1686 --with-trace-file=NAME Full PATH,NAME of file to store traces
1687 Default:trace-<pid>
1688 --disable-slirp disable SLIRP userspace network connectivity
1689 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1690 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1691 --oss-lib path to OSS library
1692 --cpu=CPU Build for host CPU [$cpu]
1693 --with-coroutine=BACKEND coroutine backend. Supported options:
1694 ucontext, sigaltstack, windows
1695 --enable-gcov enable test coverage analysis with gcov
1696 --gcov=GCOV use specified gcov [$gcov_tool]
1697 --disable-blobs disable installing provided firmware blobs
1698 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1699 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1700 --tls-priority default TLS protocol/cipher priority string
1701 --enable-gprof QEMU profiling with gprof
1702 --enable-profiler profiler support
1703 --enable-debug-stack-usage
1704 track the maximum stack usage of stacks created by qemu_alloc_stack
1706 Optional features, enabled with --enable-FEATURE and
1707 disabled with --disable-FEATURE, default is enabled if available:
1709 system all system emulation targets
1710 user supported user emulation targets
1711 linux-user all linux usermode emulation targets
1712 bsd-user all BSD usermode emulation targets
1713 docs build documentation
1714 guest-agent build the QEMU Guest Agent
1715 guest-agent-msi build guest agent Windows MSI installation package
1716 pie Position Independent Executables
1717 modules modules support (non-Windows)
1718 debug-tcg TCG debugging (default is disabled)
1719 debug-info debugging information
1720 sparse sparse checker
1722 gnutls GNUTLS cryptography support
1723 nettle nettle cryptography support
1724 gcrypt libgcrypt cryptography support
1725 auth-pam PAM access control
1726 sdl SDL UI
1727 sdl-image SDL Image support for icons
1728 gtk gtk UI
1729 vte vte support for the gtk UI
1730 curses curses UI
1731 iconv font glyph conversion support
1732 vnc VNC UI support
1733 vnc-sasl SASL encryption for VNC server
1734 vnc-jpeg JPEG lossy compression for VNC server
1735 vnc-png PNG compression for VNC server
1736 cocoa Cocoa UI (Mac OS X only)
1737 virtfs VirtFS
1738 mpath Multipath persistent reservation passthrough
1739 xen xen backend driver support
1740 xen-pci-passthrough PCI passthrough support for Xen
1741 brlapi BrlAPI (Braile)
1742 curl curl connectivity
1743 membarrier membarrier system call (for Linux 4.14+ or Windows)
1744 fdt fdt device tree
1745 bluez bluez stack connectivity
1746 kvm KVM acceleration support
1747 hax HAX acceleration support
1748 hvf Hypervisor.framework acceleration support
1749 whpx Windows Hypervisor Platform acceleration support
1750 rdma Enable RDMA-based migration
1751 pvrdma Enable PVRDMA support
1752 vde support for vde network
1753 netmap support for netmap network
1754 linux-aio Linux AIO support
1755 cap-ng libcap-ng support
1756 attr attr and xattr support
1757 vhost-net vhost-net kernel acceleration support
1758 vhost-vsock virtio sockets device support
1759 vhost-scsi vhost-scsi kernel target support
1760 vhost-crypto vhost-user-crypto backend support
1761 vhost-kernel vhost kernel backend support
1762 vhost-user vhost-user backend support
1763 spice spice
1764 rbd rados block device (rbd)
1765 libiscsi iscsi support
1766 libnfs nfs support
1767 smartcard smartcard support (libcacard)
1768 libusb libusb (for usb passthrough)
1769 live-block-migration Block migration in the main migration stream
1770 usb-redir usb network redirection support
1771 lzo support of lzo compression library
1772 snappy support of snappy compression library
1773 bzip2 support of bzip2 compression library
1774 (for reading bzip2-compressed dmg images)
1775 lzfse support of lzfse compression library
1776 (for reading lzfse-compressed dmg images)
1777 seccomp seccomp support
1778 coroutine-pool coroutine freelist (better performance)
1779 glusterfs GlusterFS backend
1780 tpm TPM support
1781 libssh ssh block device support
1782 numa libnuma support
1783 libxml2 for Parallels image format
1784 tcmalloc tcmalloc support
1785 jemalloc jemalloc support
1786 avx2 AVX2 optimization support
1787 replication replication support
1788 opengl opengl support
1789 virglrenderer virgl rendering support
1790 xfsctl xfsctl support
1791 qom-cast-debug cast debugging support
1792 tools build qemu-io, qemu-nbd and qemu-img tools
1793 vxhs Veritas HyperScale vDisk backend support
1794 bochs bochs image format support
1795 cloop cloop image format support
1796 dmg dmg image format support
1797 qcow1 qcow v1 image format support
1798 vdi vdi image format support
1799 vvfat vvfat image format support
1800 qed qed image format support
1801 parallels parallels image format support
1802 sheepdog sheepdog block driver support
1803 crypto-afalg Linux AF_ALG crypto backend driver
1804 capstone capstone disassembler support
1805 debug-mutex mutex debugging support
1806 libpmem libpmem support
1808 NOTE: The object files are built at the place where configure is launched
1810 exit 0
1813 # Remove old dependency files to make sure that they get properly regenerated
1814 rm -f */config-devices.mak.d
1816 if test -z "$python"
1817 then
1818 error_exit "Python not found. Use --python=/path/to/python"
1821 # Note that if the Python conditional here evaluates True we will exit
1822 # with status 1 which is a shell 'false' value.
1823 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1824 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1825 "Use --python=/path/to/python to specify a supported Python."
1828 # Preserve python version since some functionality is dependent on it
1829 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)
1831 # Suppress writing compiled files
1832 python="$python -B"
1834 # Check that the C compiler works. Doing this here before testing
1835 # the host CPU ensures that we had a valid CC to autodetect the
1836 # $cpu var (and we should bail right here if that's not the case).
1837 # It also allows the help message to be printed without a CC.
1838 write_c_skeleton;
1839 if compile_object ; then
1840 : C compiler works ok
1841 else
1842 error_exit "\"$cc\" either does not exist or does not work"
1844 if ! compile_prog ; then
1845 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1848 # Now we have handled --enable-tcg-interpreter and know we're not just
1849 # printing the help message, bail out if the host CPU isn't supported.
1850 if test "$ARCH" = "unknown"; then
1851 if test "$tcg_interpreter" = "yes" ; then
1852 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1853 else
1854 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1858 # Consult white-list to determine whether to enable werror
1859 # by default. Only enable by default for git builds
1860 if test -z "$werror" ; then
1861 if test -e "$source_path/.git" && \
1862 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1863 werror="yes"
1864 else
1865 werror="no"
1869 if test "$bogus_os" = "yes"; then
1870 # Now that we know that we're not printing the help and that
1871 # the compiler works (so the results of the check_defines we used
1872 # to identify the OS are reliable), if we didn't recognize the
1873 # host OS we should stop now.
1874 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1877 # Check whether the compiler matches our minimum requirements:
1878 cat > $TMPC << EOF
1879 #if defined(__clang_major__) && defined(__clang_minor__)
1880 # ifdef __apple_build_version__
1881 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1882 # error You need at least XCode Clang v5.1 to compile QEMU
1883 # endif
1884 # else
1885 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1886 # error You need at least Clang v3.4 to compile QEMU
1887 # endif
1888 # endif
1889 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1890 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1891 # error You need at least GCC v4.8 to compile QEMU
1892 # endif
1893 #else
1894 # error You either need GCC or Clang to compiler QEMU
1895 #endif
1896 int main (void) { return 0; }
1898 if ! compile_prog "" "" ; then
1899 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1902 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1903 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1904 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1905 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1906 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1907 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1908 # Note that we do not add -Werror to gcc_flags here, because that would
1909 # enable it for all configure tests. If a configure test failed due
1910 # to -Werror this would just silently disable some features,
1911 # so it's too error prone.
1913 cc_has_warning_flag() {
1914 write_c_skeleton;
1916 # Use the positive sense of the flag when testing for -Wno-wombat
1917 # support (gcc will happily accept the -Wno- form of unknown
1918 # warning options).
1919 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1920 compile_prog "-Werror $optflag" ""
1923 for flag in $gcc_flags; do
1924 if cc_has_warning_flag $flag ; then
1925 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1927 done
1929 if test "$stack_protector" != "no"; then
1930 cat > $TMPC << EOF
1931 int main(int argc, char *argv[])
1933 char arr[64], *p = arr, *c = argv[0];
1934 while (*c) {
1935 *p++ = *c++;
1937 return 0;
1940 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1941 sp_on=0
1942 for flag in $gcc_flags; do
1943 # We need to check both a compile and a link, since some compiler
1944 # setups fail only on a .c->.o compile and some only at link time
1945 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1946 compile_prog "-Werror $flag" ""; then
1947 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1948 sp_on=1
1949 break
1951 done
1952 if test "$stack_protector" = yes; then
1953 if test $sp_on = 0; then
1954 error_exit "Stack protector not supported"
1959 # Disable -Wmissing-braces on older compilers that warn even for
1960 # the "universal" C zero initializer {0}.
1961 cat > $TMPC << EOF
1962 struct {
1963 int a[2];
1964 } x = {0};
1966 if compile_object "-Werror" "" ; then
1968 else
1969 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1972 # Our module code doesn't support Windows
1973 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1974 error_exit "Modules are not available for Windows"
1977 # Static linking is not possible with modules or PIE
1978 if test "$static" = "yes" ; then
1979 if test "$modules" = "yes" ; then
1980 error_exit "static and modules are mutually incompatible"
1982 if test "$pie" = "yes" ; then
1983 error_exit "static and pie are mutually incompatible"
1984 else
1985 pie="no"
1989 # Unconditional check for compiler __thread support
1990 cat > $TMPC << EOF
1991 static __thread int tls_var;
1992 int main(void) { return tls_var; }
1995 if ! compile_prog "-Werror" "" ; then
1996 error_exit "Your compiler does not support the __thread specifier for " \
1997 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2000 if test "$pie" = ""; then
2001 case "$cpu-$targetos" in
2002 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2005 pie="no"
2007 esac
2010 if test "$pie" != "no" ; then
2011 cat > $TMPC << EOF
2013 #ifdef __linux__
2014 # define THREAD __thread
2015 #else
2016 # define THREAD
2017 #endif
2019 static THREAD int tls_var;
2021 int main(void) { return tls_var; }
2024 if compile_prog "-fPIE -DPIE" "-pie"; then
2025 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2026 LDFLAGS="-pie $LDFLAGS"
2027 pie="yes"
2028 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2029 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2031 else
2032 if test "$pie" = "yes"; then
2033 error_exit "PIE not available due to missing toolchain support"
2034 else
2035 echo "Disabling PIE due to missing toolchain support"
2036 pie="no"
2040 if compile_prog "-Werror -fno-pie" "-nopie"; then
2041 CFLAGS_NOPIE="-fno-pie"
2042 LDFLAGS_NOPIE="-nopie"
2046 ##########################################
2047 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2048 # use i686 as default anyway, but for those that don't, an explicit
2049 # specification is necessary
2051 if test "$cpu" = "i386"; then
2052 cat > $TMPC << EOF
2053 static int sfaa(int *ptr)
2055 return __sync_fetch_and_and(ptr, 0);
2058 int main(void)
2060 int val = 42;
2061 val = __sync_val_compare_and_swap(&val, 0, 1);
2062 sfaa(&val);
2063 return val;
2066 if ! compile_prog "" "" ; then
2067 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2071 #########################################
2072 # Solaris specific configure tool chain decisions
2074 if test "$solaris" = "yes" ; then
2075 if has $install; then
2077 else
2078 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2079 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2080 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2082 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2083 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2084 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2085 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2087 if has ar; then
2089 else
2090 if test -f /usr/ccs/bin/ar ; then
2091 error_exit "No path includes ar" \
2092 "Add /usr/ccs/bin to your path and rerun configure"
2094 error_exit "No path includes ar"
2098 if test -z "${target_list+xxx}" ; then
2099 for target in $default_target_list; do
2100 supported_target $target 2>/dev/null && \
2101 target_list="$target_list $target"
2102 done
2103 target_list="${target_list# }"
2104 else
2105 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2106 for target in $target_list; do
2107 # Check that we recognised the target name; this allows a more
2108 # friendly error message than if we let it fall through.
2109 case " $default_target_list " in
2110 *" $target "*)
2113 error_exit "Unknown target name '$target'"
2115 esac
2116 supported_target $target || exit 1
2117 done
2120 # see if system emulation was really requested
2121 case " $target_list " in
2122 *"-softmmu "*) softmmu=yes
2124 *) softmmu=no
2126 esac
2128 feature_not_found() {
2129 feature=$1
2130 remedy=$2
2132 error_exit "User requested feature $feature" \
2133 "configure was not able to find it." \
2134 "$remedy"
2137 # ---
2138 # big/little endian test
2139 cat > $TMPC << EOF
2140 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2141 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2142 extern int foo(short *, short *);
2143 int main(int argc, char *argv[]) {
2144 return foo(big_endian, little_endian);
2148 if compile_object ; then
2149 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2150 bigendian="yes"
2151 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2152 bigendian="no"
2153 else
2154 echo big/little test failed
2156 else
2157 echo big/little test failed
2160 ##########################################
2161 # cocoa implies not SDL or GTK
2162 # (the cocoa UI code currently assumes it is always the active UI
2163 # and doesn't interact well with other UI frontend code)
2164 if test "$cocoa" = "yes"; then
2165 if test "$sdl" = "yes"; then
2166 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2168 if test "$gtk" = "yes"; then
2169 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2171 gtk=no
2172 sdl=no
2175 # Some versions of Mac OS X incorrectly define SIZE_MAX
2176 cat > $TMPC << EOF
2177 #include <stdint.h>
2178 #include <stdio.h>
2179 int main(int argc, char *argv[]) {
2180 return printf("%zu", SIZE_MAX);
2183 have_broken_size_max=no
2184 if ! compile_object -Werror ; then
2185 have_broken_size_max=yes
2188 ##########################################
2189 # L2TPV3 probe
2191 cat > $TMPC <<EOF
2192 #include <sys/socket.h>
2193 #include <linux/ip.h>
2194 int main(void) { return sizeof(struct mmsghdr); }
2196 if compile_prog "" "" ; then
2197 l2tpv3=yes
2198 else
2199 l2tpv3=no
2202 #########################################
2203 # vhost interdependencies and host support
2205 # vhost backends
2206 test "$vhost_user" = "" && vhost_user=yes
2207 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2208 error_exit "vhost-user isn't available on win32"
2210 test "$vhost_kernel" = "" && vhost_kernel=$linux
2211 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2212 error_exit "vhost-kernel is only available on Linux"
2215 # vhost-kernel devices
2216 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2217 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2218 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2220 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2221 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2222 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2225 # vhost-user backends
2226 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2227 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2228 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2230 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2231 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2232 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2235 # OR the vhost-kernel and vhost-user values for simplicity
2236 if test "$vhost_net" = ""; then
2237 test "$vhost_net_user" = "yes" && vhost_net=yes
2238 test "$vhost_kernel" = "yes" && vhost_net=yes
2241 ##########################################
2242 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2244 if test "$mingw32" = "yes"; then
2245 # Some versions of MinGW / Mingw-w64 lack localtime_r
2246 # and gmtime_r entirely.
2248 # Some versions of Mingw-w64 define a macro for
2249 # localtime_r/gmtime_r.
2251 # Some versions of Mingw-w64 will define functions
2252 # for localtime_r/gmtime_r, but only if you have
2253 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2254 # though, unistd.h and pthread.h both define
2255 # that for you.
2257 # So this #undef localtime_r and #include <unistd.h>
2258 # are not in fact redundant.
2259 cat > $TMPC << EOF
2260 #include <unistd.h>
2261 #include <time.h>
2262 #undef localtime_r
2263 int main(void) { localtime_r(NULL, NULL); return 0; }
2265 if compile_prog "" "" ; then
2266 localtime_r="yes"
2267 else
2268 localtime_r="no"
2272 ##########################################
2273 # pkg-config probe
2275 if ! has "$pkg_config_exe"; then
2276 error_exit "pkg-config binary '$pkg_config_exe' not found"
2279 ##########################################
2280 # NPTL probe
2282 if test "$linux_user" = "yes"; then
2283 cat > $TMPC <<EOF
2284 #include <sched.h>
2285 #include <linux/futex.h>
2286 int main(void) {
2287 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2288 #error bork
2289 #endif
2290 return 0;
2293 if ! compile_object ; then
2294 feature_not_found "nptl" "Install glibc and linux kernel headers."
2298 ##########################################
2299 # lzo check
2301 if test "$lzo" != "no" ; then
2302 cat > $TMPC << EOF
2303 #include <lzo/lzo1x.h>
2304 int main(void) { lzo_version(); return 0; }
2306 if compile_prog "" "-llzo2" ; then
2307 libs_softmmu="$libs_softmmu -llzo2"
2308 lzo="yes"
2309 else
2310 if test "$lzo" = "yes"; then
2311 feature_not_found "liblzo2" "Install liblzo2 devel"
2313 lzo="no"
2317 ##########################################
2318 # snappy check
2320 if test "$snappy" != "no" ; then
2321 cat > $TMPC << EOF
2322 #include <snappy-c.h>
2323 int main(void) { snappy_max_compressed_length(4096); return 0; }
2325 if compile_prog "" "-lsnappy" ; then
2326 libs_softmmu="$libs_softmmu -lsnappy"
2327 snappy="yes"
2328 else
2329 if test "$snappy" = "yes"; then
2330 feature_not_found "libsnappy" "Install libsnappy devel"
2332 snappy="no"
2336 ##########################################
2337 # bzip2 check
2339 if test "$bzip2" != "no" ; then
2340 cat > $TMPC << EOF
2341 #include <bzlib.h>
2342 int main(void) { BZ2_bzlibVersion(); return 0; }
2344 if compile_prog "" "-lbz2" ; then
2345 bzip2="yes"
2346 else
2347 if test "$bzip2" = "yes"; then
2348 feature_not_found "libbzip2" "Install libbzip2 devel"
2350 bzip2="no"
2354 ##########################################
2355 # lzfse check
2357 if test "$lzfse" != "no" ; then
2358 cat > $TMPC << EOF
2359 #include <lzfse.h>
2360 int main(void) { lzfse_decode_scratch_size(); return 0; }
2362 if compile_prog "" "-llzfse" ; then
2363 lzfse="yes"
2364 else
2365 if test "$lzfse" = "yes"; then
2366 feature_not_found "lzfse" "Install lzfse devel"
2368 lzfse="no"
2372 ##########################################
2373 # libseccomp check
2375 if test "$seccomp" != "no" ; then
2376 libseccomp_minver="2.3.0"
2377 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2378 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2379 seccomp_libs="$($pkg_config --libs libseccomp)"
2380 seccomp="yes"
2381 else
2382 if test "$seccomp" = "yes" ; then
2383 feature_not_found "libseccomp" \
2384 "Install libseccomp devel >= $libseccomp_minver"
2386 seccomp="no"
2389 ##########################################
2390 # xen probe
2392 if test "$xen" != "no" ; then
2393 # Check whether Xen library path is specified via --extra-ldflags to avoid
2394 # overriding this setting with pkg-config output. If not, try pkg-config
2395 # to obtain all needed flags.
2397 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2398 $pkg_config --exists xencontrol ; then
2399 xen_ctrl_version="$(printf '%d%02d%02d' \
2400 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2401 xen=yes
2402 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2403 xen_pc="$xen_pc xenevtchn xendevicemodel"
2404 if $pkg_config --exists xentoolcore; then
2405 xen_pc="$xen_pc xentoolcore"
2407 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2408 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2409 else
2411 xen_libs="-lxenstore -lxenctrl -lxenguest"
2412 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2414 # First we test whether Xen headers and libraries are available.
2415 # If no, we are done and there is no Xen support.
2416 # If yes, more tests are run to detect the Xen version.
2418 # Xen (any)
2419 cat > $TMPC <<EOF
2420 #include <xenctrl.h>
2421 int main(void) {
2422 return 0;
2425 if ! compile_prog "" "$xen_libs" ; then
2426 # Xen not found
2427 if test "$xen" = "yes" ; then
2428 feature_not_found "xen" "Install xen devel"
2430 xen=no
2432 # Xen unstable
2433 elif
2434 cat > $TMPC <<EOF &&
2435 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2436 #define __XEN_TOOLS__
2437 #include <xendevicemodel.h>
2438 #include <xenforeignmemory.h>
2439 int main(void) {
2440 xendevicemodel_handle *xd;
2441 xenforeignmemory_handle *xfmem;
2443 xd = xendevicemodel_open(0, 0);
2444 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2446 xfmem = xenforeignmemory_open(0, 0);
2447 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2449 return 0;
2452 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2453 then
2454 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2455 xen_ctrl_version=41100
2456 xen=yes
2457 elif
2458 cat > $TMPC <<EOF &&
2459 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2460 #include <xenforeignmemory.h>
2461 #include <xentoolcore.h>
2462 int main(void) {
2463 xenforeignmemory_handle *xfmem;
2465 xfmem = xenforeignmemory_open(0, 0);
2466 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2467 xentoolcore_restrict_all(0);
2469 return 0;
2472 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2473 then
2474 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2475 xen_ctrl_version=41000
2476 xen=yes
2477 elif
2478 cat > $TMPC <<EOF &&
2479 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2480 #define __XEN_TOOLS__
2481 #include <xendevicemodel.h>
2482 int main(void) {
2483 xendevicemodel_handle *xd;
2485 xd = xendevicemodel_open(0, 0);
2486 xendevicemodel_close(xd);
2488 return 0;
2491 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2492 then
2493 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2494 xen_ctrl_version=40900
2495 xen=yes
2496 elif
2497 cat > $TMPC <<EOF &&
2499 * If we have stable libs the we don't want the libxc compat
2500 * layers, regardless of what CFLAGS we may have been given.
2502 * Also, check if xengnttab_grant_copy_segment_t is defined and
2503 * grant copy operation is implemented.
2505 #undef XC_WANT_COMPAT_EVTCHN_API
2506 #undef XC_WANT_COMPAT_GNTTAB_API
2507 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2508 #include <xenctrl.h>
2509 #include <xenstore.h>
2510 #include <xenevtchn.h>
2511 #include <xengnttab.h>
2512 #include <xenforeignmemory.h>
2513 #include <stdint.h>
2514 #include <xen/hvm/hvm_info_table.h>
2515 #if !defined(HVM_MAX_VCPUS)
2516 # error HVM_MAX_VCPUS not defined
2517 #endif
2518 int main(void) {
2519 xc_interface *xc = NULL;
2520 xenforeignmemory_handle *xfmem;
2521 xenevtchn_handle *xe;
2522 xengnttab_handle *xg;
2523 xengnttab_grant_copy_segment_t* seg = NULL;
2525 xs_daemon_open();
2527 xc = xc_interface_open(0, 0, 0);
2528 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2529 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2530 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2531 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2533 xfmem = xenforeignmemory_open(0, 0);
2534 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2536 xe = xenevtchn_open(0, 0);
2537 xenevtchn_fd(xe);
2539 xg = xengnttab_open(0, 0);
2540 xengnttab_grant_copy(xg, 0, seg);
2542 return 0;
2545 compile_prog "" "$xen_libs $xen_stable_libs"
2546 then
2547 xen_ctrl_version=40800
2548 xen=yes
2549 elif
2550 cat > $TMPC <<EOF &&
2552 * If we have stable libs the we don't want the libxc compat
2553 * layers, regardless of what CFLAGS we may have been given.
2555 #undef XC_WANT_COMPAT_EVTCHN_API
2556 #undef XC_WANT_COMPAT_GNTTAB_API
2557 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2558 #include <xenctrl.h>
2559 #include <xenstore.h>
2560 #include <xenevtchn.h>
2561 #include <xengnttab.h>
2562 #include <xenforeignmemory.h>
2563 #include <stdint.h>
2564 #include <xen/hvm/hvm_info_table.h>
2565 #if !defined(HVM_MAX_VCPUS)
2566 # error HVM_MAX_VCPUS not defined
2567 #endif
2568 int main(void) {
2569 xc_interface *xc = NULL;
2570 xenforeignmemory_handle *xfmem;
2571 xenevtchn_handle *xe;
2572 xengnttab_handle *xg;
2574 xs_daemon_open();
2576 xc = xc_interface_open(0, 0, 0);
2577 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2578 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2579 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2580 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2582 xfmem = xenforeignmemory_open(0, 0);
2583 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2585 xe = xenevtchn_open(0, 0);
2586 xenevtchn_fd(xe);
2588 xg = xengnttab_open(0, 0);
2589 xengnttab_map_grant_ref(xg, 0, 0, 0);
2591 return 0;
2594 compile_prog "" "$xen_libs $xen_stable_libs"
2595 then
2596 xen_ctrl_version=40701
2597 xen=yes
2599 # Xen 4.6
2600 elif
2601 cat > $TMPC <<EOF &&
2602 #include <xenctrl.h>
2603 #include <xenstore.h>
2604 #include <stdint.h>
2605 #include <xen/hvm/hvm_info_table.h>
2606 #if !defined(HVM_MAX_VCPUS)
2607 # error HVM_MAX_VCPUS not defined
2608 #endif
2609 int main(void) {
2610 xc_interface *xc;
2611 xs_daemon_open();
2612 xc = xc_interface_open(0, 0, 0);
2613 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2614 xc_gnttab_open(NULL, 0);
2615 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2616 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2617 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2618 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2619 return 0;
2622 compile_prog "" "$xen_libs"
2623 then
2624 xen_ctrl_version=40600
2625 xen=yes
2627 # Xen 4.5
2628 elif
2629 cat > $TMPC <<EOF &&
2630 #include <xenctrl.h>
2631 #include <xenstore.h>
2632 #include <stdint.h>
2633 #include <xen/hvm/hvm_info_table.h>
2634 #if !defined(HVM_MAX_VCPUS)
2635 # error HVM_MAX_VCPUS not defined
2636 #endif
2637 int main(void) {
2638 xc_interface *xc;
2639 xs_daemon_open();
2640 xc = xc_interface_open(0, 0, 0);
2641 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2642 xc_gnttab_open(NULL, 0);
2643 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2644 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2645 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2646 return 0;
2649 compile_prog "" "$xen_libs"
2650 then
2651 xen_ctrl_version=40500
2652 xen=yes
2654 elif
2655 cat > $TMPC <<EOF &&
2656 #include <xenctrl.h>
2657 #include <xenstore.h>
2658 #include <stdint.h>
2659 #include <xen/hvm/hvm_info_table.h>
2660 #if !defined(HVM_MAX_VCPUS)
2661 # error HVM_MAX_VCPUS not defined
2662 #endif
2663 int main(void) {
2664 xc_interface *xc;
2665 xs_daemon_open();
2666 xc = xc_interface_open(0, 0, 0);
2667 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2668 xc_gnttab_open(NULL, 0);
2669 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2670 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2671 return 0;
2674 compile_prog "" "$xen_libs"
2675 then
2676 xen_ctrl_version=40200
2677 xen=yes
2679 else
2680 if test "$xen" = "yes" ; then
2681 feature_not_found "xen (unsupported version)" \
2682 "Install a supported xen (xen 4.2 or newer)"
2684 xen=no
2687 if test "$xen" = yes; then
2688 if test $xen_ctrl_version -ge 40701 ; then
2689 libs_softmmu="$xen_stable_libs $libs_softmmu"
2691 libs_softmmu="$xen_libs $libs_softmmu"
2696 if test "$xen_pci_passthrough" != "no"; then
2697 if test "$xen" = "yes" && test "$linux" = "yes"; then
2698 xen_pci_passthrough=yes
2699 else
2700 if test "$xen_pci_passthrough" = "yes"; then
2701 error_exit "User requested feature Xen PCI Passthrough" \
2702 " but this feature requires /sys from Linux"
2704 xen_pci_passthrough=no
2708 ##########################################
2709 # Windows Hypervisor Platform accelerator (WHPX) check
2710 if test "$whpx" != "no" ; then
2711 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2712 whpx="yes"
2713 else
2714 if test "$whpx" = "yes"; then
2715 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2717 whpx="no"
2721 ##########################################
2722 # Sparse probe
2723 if test "$sparse" != "no" ; then
2724 if has cgcc; then
2725 sparse=yes
2726 else
2727 if test "$sparse" = "yes" ; then
2728 feature_not_found "sparse" "Install sparse binary"
2730 sparse=no
2734 ##########################################
2735 # X11 probe
2736 if $pkg_config --exists "x11"; then
2737 have_x11=yes
2738 x11_cflags=$($pkg_config --cflags x11)
2739 x11_libs=$($pkg_config --libs x11)
2742 ##########################################
2743 # GTK probe
2745 if test "$gtk" != "no"; then
2746 gtkpackage="gtk+-3.0"
2747 gtkx11package="gtk+-x11-3.0"
2748 gtkversion="3.14.0"
2749 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2750 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2751 gtk_libs=$($pkg_config --libs $gtkpackage)
2752 gtk_version=$($pkg_config --modversion $gtkpackage)
2753 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2754 need_x11=yes
2755 gtk_cflags="$gtk_cflags $x11_cflags"
2756 gtk_libs="$gtk_libs $x11_libs"
2758 gtk="yes"
2759 elif test "$gtk" = "yes"; then
2760 feature_not_found "gtk" "Install gtk3-devel"
2761 else
2762 gtk="no"
2767 ##########################################
2768 # GNUTLS probe
2770 if test "$gnutls" != "no"; then
2771 pass="no"
2772 if $pkg_config --exists "gnutls >= 3.1.18"; then
2773 gnutls_cflags=$($pkg_config --cflags gnutls)
2774 gnutls_libs=$($pkg_config --libs gnutls)
2775 # Packaging for the static libraries is not always correct.
2776 # At least ubuntu 18.04 ships only shared libraries.
2777 write_c_skeleton
2778 if compile_prog "" "$gnutls_libs" ; then
2779 LIBS="$gnutls_libs $LIBS"
2780 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2781 pass="yes"
2784 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2785 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2786 else
2787 gnutls="$pass"
2792 # If user didn't give a --disable/enable-gcrypt flag,
2793 # then mark as disabled if user requested nettle
2794 # explicitly
2795 if test -z "$gcrypt"
2796 then
2797 if test "$nettle" = "yes"
2798 then
2799 gcrypt="no"
2803 # If user didn't give a --disable/enable-nettle flag,
2804 # then mark as disabled if user requested gcrypt
2805 # explicitly
2806 if test -z "$nettle"
2807 then
2808 if test "$gcrypt" = "yes"
2809 then
2810 nettle="no"
2814 has_libgcrypt() {
2815 if ! has "libgcrypt-config"
2816 then
2817 return 1
2820 if test -n "$cross_prefix"
2821 then
2822 host=$(libgcrypt-config --host)
2823 if test "$host-" != $cross_prefix
2824 then
2825 return 1
2829 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2830 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2832 if test $maj != 1 || test $min -lt 5
2833 then
2834 return 1
2837 return 0
2841 if test "$nettle" != "no"; then
2842 pass="no"
2843 if $pkg_config --exists "nettle >= 2.7.1"; then
2844 nettle_cflags=$($pkg_config --cflags nettle)
2845 nettle_libs=$($pkg_config --libs nettle)
2846 nettle_version=$($pkg_config --modversion nettle)
2847 # Link test to make sure the given libraries work (e.g for static).
2848 write_c_skeleton
2849 if compile_prog "" "$nettle_libs" ; then
2850 LIBS="$nettle_libs $LIBS"
2851 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2852 if test -z "$gcrypt"; then
2853 gcrypt="no"
2855 pass="yes"
2858 if test "$pass" = "no" && test "$nettle" = "yes"; then
2859 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2860 else
2861 nettle="$pass"
2865 if test "$gcrypt" != "no"; then
2866 pass="no"
2867 if has_libgcrypt; then
2868 gcrypt_cflags=$(libgcrypt-config --cflags)
2869 gcrypt_libs=$(libgcrypt-config --libs)
2870 # Debian has removed -lgpg-error from libgcrypt-config
2871 # as it "spreads unnecessary dependencies" which in
2872 # turn breaks static builds...
2873 if test "$static" = "yes"
2874 then
2875 gcrypt_libs="$gcrypt_libs -lgpg-error"
2878 # Link test to make sure the given libraries work (e.g for static).
2879 write_c_skeleton
2880 if compile_prog "" "$gcrypt_libs" ; then
2881 LIBS="$gcrypt_libs $LIBS"
2882 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2883 pass="yes"
2886 if test "$pass" = "yes"; then
2887 gcrypt="yes"
2888 cat > $TMPC << EOF
2889 #include <gcrypt.h>
2890 int main(void) {
2891 gcry_mac_hd_t handle;
2892 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2893 GCRY_MAC_FLAG_SECURE, NULL);
2894 return 0;
2897 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2898 gcrypt_hmac=yes
2900 elif test "$gcrypt" = "yes"; then
2901 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2902 else
2903 gcrypt="no"
2908 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2909 then
2910 error_exit "Only one of gcrypt & nettle can be enabled"
2913 ##########################################
2914 # libtasn1 - only for the TLS creds/session test suite
2916 tasn1=yes
2917 tasn1_cflags=""
2918 tasn1_libs=""
2919 if $pkg_config --exists "libtasn1"; then
2920 tasn1_cflags=$($pkg_config --cflags libtasn1)
2921 tasn1_libs=$($pkg_config --libs libtasn1)
2922 else
2923 tasn1=no
2927 ##########################################
2928 # PAM probe
2930 if test "$auth_pam" != "no"; then
2931 cat > $TMPC <<EOF
2932 #include <security/pam_appl.h>
2933 #include <stdio.h>
2934 int main(void) {
2935 const char *service_name = "qemu";
2936 const char *user = "frank";
2937 const struct pam_conv pam_conv = { 0 };
2938 pam_handle_t *pamh = NULL;
2939 pam_start(service_name, user, &pam_conv, &pamh);
2940 return 0;
2943 if compile_prog "" "-lpam" ; then
2944 auth_pam=yes
2945 else
2946 if test "$auth_pam" = "yes"; then
2947 feature_not_found "PAM" "Install PAM development package"
2948 else
2949 auth_pam=no
2954 ##########################################
2955 # getifaddrs (for tests/test-io-channel-socket )
2957 have_ifaddrs_h=yes
2958 if ! check_include "ifaddrs.h" ; then
2959 have_ifaddrs_h=no
2962 ##########################################
2963 # VTE probe
2965 if test "$vte" != "no"; then
2966 vteminversion="0.32.0"
2967 if $pkg_config --exists "vte-2.91"; then
2968 vtepackage="vte-2.91"
2969 else
2970 vtepackage="vte-2.90"
2972 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2973 vte_cflags=$($pkg_config --cflags $vtepackage)
2974 vte_libs=$($pkg_config --libs $vtepackage)
2975 vteversion=$($pkg_config --modversion $vtepackage)
2976 vte="yes"
2977 elif test "$vte" = "yes"; then
2978 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2979 else
2980 vte="no"
2984 ##########################################
2985 # SDL probe
2987 # Look for sdl configuration program (pkg-config or sdl2-config). Try
2988 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
2990 sdl_probe ()
2992 if $pkg_config sdl2 --exists; then
2993 sdlconfig="$pkg_config sdl2"
2994 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2995 elif has "$sdl2_config"; then
2996 sdlconfig="$sdl2_config"
2997 sdlversion=$($sdlconfig --version)
2998 else
2999 if test "$sdl" = "yes" ; then
3000 feature_not_found "sdl" "Install SDL2-devel"
3002 sdl=no
3003 # no need to do the rest
3004 return
3006 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3007 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3010 cat > $TMPC << EOF
3011 #include <SDL.h>
3012 #undef main /* We don't want SDL to override our main() */
3013 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3015 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3016 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3017 if test "$static" = "yes" ; then
3018 if $pkg_config sdl2 --exists; then
3019 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3020 else
3021 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3023 else
3024 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3026 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3027 sdl=yes
3029 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3030 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3031 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3032 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3033 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3035 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3037 else
3038 sdl=no
3040 fi # static link
3041 else # sdl not found
3042 if test "$sdl" = "yes" ; then
3043 feature_not_found "sdl" "Install SDL2 devel"
3045 sdl=no
3046 fi # sdl compile test
3049 sdl_image_probe ()
3051 if test "$sdl_image" != "no" ; then
3052 if $pkg_config SDL2_image --exists; then
3053 if test "$static" = "yes"; then
3054 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3055 else
3056 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3058 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3059 sdl_image=yes
3061 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3062 sdl_libs="$sdl_libs $sdl_image_libs"
3063 else
3064 if test "$sdl_image" = "yes" ; then
3065 feature_not_found "sdl_image" "Install SDL Image devel"
3066 else
3067 sdl_image=no
3073 if test "$sdl" != "no" ; then
3074 sdl_probe
3077 if test "$sdl" = "yes" ; then
3078 sdl_image_probe
3079 else
3080 if test "$sdl_image" = "yes"; then
3081 echo "warning: SDL Image requested, but SDL is not available, disabling"
3083 sdl_image=no
3086 if test "$sdl" = "yes" ; then
3087 cat > $TMPC <<EOF
3088 #include <SDL.h>
3089 #if defined(SDL_VIDEO_DRIVER_X11)
3090 #include <X11/XKBlib.h>
3091 #else
3092 #error No x11 support
3093 #endif
3094 int main(void) { return 0; }
3096 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3097 need_x11=yes
3098 sdl_cflags="$sdl_cflags $x11_cflags"
3099 sdl_libs="$sdl_libs $x11_libs"
3103 ##########################################
3104 # RDMA needs OpenFabrics libraries
3105 if test "$rdma" != "no" ; then
3106 cat > $TMPC <<EOF
3107 #include <rdma/rdma_cma.h>
3108 int main(void) { return 0; }
3110 rdma_libs="-lrdmacm -libverbs -libumad"
3111 if compile_prog "" "$rdma_libs" ; then
3112 rdma="yes"
3113 libs_softmmu="$libs_softmmu $rdma_libs"
3114 else
3115 if test "$rdma" = "yes" ; then
3116 error_exit \
3117 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3118 " Your options:" \
3119 " (1) Fast: Install infiniband packages (devel) from your distro." \
3120 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3121 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3123 rdma="no"
3127 ##########################################
3128 # PVRDMA detection
3130 cat > $TMPC <<EOF &&
3131 #include <sys/mman.h>
3134 main(void)
3136 char buf = 0;
3137 void *addr = &buf;
3138 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3140 return 0;
3144 if test "$rdma" = "yes" ; then
3145 case "$pvrdma" in
3147 if compile_prog "" ""; then
3148 pvrdma="yes"
3149 else
3150 pvrdma="no"
3153 "yes")
3154 if ! compile_prog "" ""; then
3155 error_exit "PVRDMA is not supported since mremap is not implemented"
3157 pvrdma="yes"
3159 "no")
3160 pvrdma="no"
3162 esac
3163 else
3164 if test "$pvrdma" = "yes" ; then
3165 error_exit "PVRDMA requires rdma suppport"
3167 pvrdma="no"
3170 ##########################################
3171 # VNC SASL detection
3172 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3173 cat > $TMPC <<EOF
3174 #include <sasl/sasl.h>
3175 #include <stdio.h>
3176 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3178 # Assuming Cyrus-SASL installed in /usr prefix
3179 vnc_sasl_cflags=""
3180 vnc_sasl_libs="-lsasl2"
3181 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3182 vnc_sasl=yes
3183 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3184 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3185 else
3186 if test "$vnc_sasl" = "yes" ; then
3187 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3189 vnc_sasl=no
3193 ##########################################
3194 # VNC JPEG detection
3195 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3196 cat > $TMPC <<EOF
3197 #include <stdio.h>
3198 #include <jpeglib.h>
3199 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3201 vnc_jpeg_cflags=""
3202 vnc_jpeg_libs="-ljpeg"
3203 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3204 vnc_jpeg=yes
3205 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3206 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3207 else
3208 if test "$vnc_jpeg" = "yes" ; then
3209 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3211 vnc_jpeg=no
3215 ##########################################
3216 # VNC PNG detection
3217 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3218 cat > $TMPC <<EOF
3219 //#include <stdio.h>
3220 #include <png.h>
3221 #include <stddef.h>
3222 int main(void) {
3223 png_structp png_ptr;
3224 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3225 return png_ptr != 0;
3228 if $pkg_config libpng --exists; then
3229 vnc_png_cflags=$($pkg_config libpng --cflags)
3230 vnc_png_libs=$($pkg_config libpng --libs)
3231 else
3232 vnc_png_cflags=""
3233 vnc_png_libs="-lpng"
3235 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3236 vnc_png=yes
3237 libs_softmmu="$vnc_png_libs $libs_softmmu"
3238 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3239 else
3240 if test "$vnc_png" = "yes" ; then
3241 feature_not_found "vnc-png" "Install libpng devel"
3243 vnc_png=no
3247 ##########################################
3248 # xkbcommon probe
3249 if test "$xkbcommon" != "no" ; then
3250 if $pkg_config xkbcommon --exists; then
3251 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3252 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3253 xkbcommon=yes
3254 else
3255 if test "$xkbcommon" = "yes" ; then
3256 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3258 xkbcommon=no
3263 ##########################################
3264 # xfsctl() probe, used for file-posix.c
3265 if test "$xfs" != "no" ; then
3266 cat > $TMPC << EOF
3267 #include <stddef.h> /* NULL */
3268 #include <xfs/xfs.h>
3269 int main(void)
3271 xfsctl(NULL, 0, 0, NULL);
3272 return 0;
3275 if compile_prog "" "" ; then
3276 xfs="yes"
3277 else
3278 if test "$xfs" = "yes" ; then
3279 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3281 xfs=no
3285 ##########################################
3286 # vde libraries probe
3287 if test "$vde" != "no" ; then
3288 vde_libs="-lvdeplug"
3289 cat > $TMPC << EOF
3290 #include <libvdeplug.h>
3291 int main(void)
3293 struct vde_open_args a = {0, 0, 0};
3294 char s[] = "";
3295 vde_open(s, s, &a);
3296 return 0;
3299 if compile_prog "" "$vde_libs" ; then
3300 vde=yes
3301 else
3302 if test "$vde" = "yes" ; then
3303 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3305 vde=no
3309 ##########################################
3310 # netmap support probe
3311 # Apart from looking for netmap headers, we make sure that the host API version
3312 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3313 # a minor/major version number. Minor new features will be marked with values up
3314 # to 15, and if something happens that requires a change to the backend we will
3315 # move above 15, submit the backend fixes and modify this two bounds.
3316 if test "$netmap" != "no" ; then
3317 cat > $TMPC << EOF
3318 #include <inttypes.h>
3319 #include <net/if.h>
3320 #include <net/netmap.h>
3321 #include <net/netmap_user.h>
3322 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3323 #error
3324 #endif
3325 int main(void) { return 0; }
3327 if compile_prog "" "" ; then
3328 netmap=yes
3329 else
3330 if test "$netmap" = "yes" ; then
3331 feature_not_found "netmap"
3333 netmap=no
3337 ##########################################
3338 # libcap-ng library probe
3339 if test "$cap_ng" != "no" ; then
3340 cap_libs="-lcap-ng"
3341 cat > $TMPC << EOF
3342 #include <cap-ng.h>
3343 int main(void)
3345 capng_capability_to_name(CAPNG_EFFECTIVE);
3346 return 0;
3349 if compile_prog "" "$cap_libs" ; then
3350 cap_ng=yes
3351 libs_tools="$cap_libs $libs_tools"
3352 else
3353 if test "$cap_ng" = "yes" ; then
3354 feature_not_found "cap_ng" "Install libcap-ng devel"
3356 cap_ng=no
3360 ##########################################
3361 # Sound support libraries probe
3363 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3364 for drv in $audio_drv_list; do
3365 case $drv in
3366 alsa | try-alsa)
3367 if $pkg_config alsa --exists; then
3368 alsa_libs=$($pkg_config alsa --libs)
3369 if test "$drv" = "try-alsa"; then
3370 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3372 else
3373 if test "$drv" = "try-alsa"; then
3374 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3375 else
3376 error_exit "$drv check failed" \
3377 "Make sure to have the $drv libs and headers installed."
3382 pa | try-pa)
3383 if $pkg_config libpulse --exists; then
3384 pulse_libs=$($pkg_config libpulse --libs)
3385 audio_pt_int="yes"
3386 if test "$drv" = "try-pa"; then
3387 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3389 else
3390 if test "$drv" = "try-pa"; then
3391 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3392 else
3393 error_exit "$drv check failed" \
3394 "Make sure to have the $drv libs and headers installed."
3399 sdl)
3400 if test "$sdl" = "no"; then
3401 error_exit "sdl not found or disabled, can not use sdl audio driver"
3405 try-sdl)
3406 if test "$sdl" = "no"; then
3407 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3408 else
3409 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3413 coreaudio)
3414 coreaudio_libs="-framework CoreAudio"
3417 dsound)
3418 dsound_libs="-lole32 -ldxguid"
3419 audio_win_int="yes"
3422 oss)
3423 oss_libs="$oss_lib"
3427 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3428 error_exit "Unknown driver '$drv' selected" \
3429 "Possible drivers are: $audio_possible_drivers"
3432 esac
3433 done
3435 ##########################################
3436 # BrlAPI probe
3438 if test "$brlapi" != "no" ; then
3439 brlapi_libs="-lbrlapi"
3440 cat > $TMPC << EOF
3441 #include <brlapi.h>
3442 #include <stddef.h>
3443 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3445 if compile_prog "" "$brlapi_libs" ; then
3446 brlapi=yes
3447 else
3448 if test "$brlapi" = "yes" ; then
3449 feature_not_found "brlapi" "Install brlapi devel"
3451 brlapi=no
3455 ##########################################
3456 # iconv probe
3457 if test "$iconv" != "no" ; then
3458 cat > $TMPC << EOF
3459 #include <iconv.h>
3460 int main(void) {
3461 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3462 return conv != (iconv_t) -1;
3465 iconv_prefix_list="/usr/local:/usr"
3466 iconv_lib_list=":-liconv"
3467 IFS=:
3468 for iconv_prefix in $iconv_prefix_list; do
3469 IFS=:
3470 iconv_cflags="-I$iconv_prefix/include"
3471 iconv_ldflags="-L$iconv_prefix/lib"
3472 for iconv_link in $iconv_lib_list; do
3473 unset IFS
3474 iconv_lib="$iconv_ldflags $iconv_link"
3475 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3476 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3477 iconv_found=yes
3478 break
3480 done
3481 if test "$iconv_found" = yes ; then
3482 break
3484 done
3485 if test "$iconv_found" = "yes" ; then
3486 iconv=yes
3487 else
3488 if test "$iconv" = "yes" ; then
3489 feature_not_found "iconv" "Install iconv devel"
3491 iconv=no
3495 ##########################################
3496 # curses probe
3497 if test "$iconv" = "no" ; then
3498 # curses will need iconv
3499 curses=no
3501 if test "$curses" != "no" ; then
3502 if test "$mingw32" = "yes" ; then
3503 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3504 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3505 else
3506 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3507 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3509 curses_found=no
3510 cat > $TMPC << EOF
3511 #include <locale.h>
3512 #include <curses.h>
3513 #include <wchar.h>
3514 #include <langinfo.h>
3515 int main(void) {
3516 const char *codeset;
3517 wchar_t wch = L'w';
3518 setlocale(LC_ALL, "");
3519 resize_term(0, 0);
3520 addwstr(L"wide chars\n");
3521 addnwstr(&wch, 1);
3522 add_wch(WACS_DEGREE);
3523 codeset = nl_langinfo(CODESET);
3524 return codeset != 0;
3527 IFS=:
3528 for curses_inc in $curses_inc_list; do
3529 # Make sure we get the wide character prototypes
3530 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3531 IFS=:
3532 for curses_lib in $curses_lib_list; do
3533 unset IFS
3534 if compile_prog "$curses_inc" "$curses_lib" ; then
3535 curses_found=yes
3536 break
3538 done
3539 if test "$curses_found" = yes ; then
3540 break
3542 done
3543 unset IFS
3544 if test "$curses_found" = "yes" ; then
3545 curses=yes
3546 else
3547 if test "$curses" = "yes" ; then
3548 feature_not_found "curses" "Install ncurses devel"
3550 curses=no
3554 ##########################################
3555 # curl probe
3556 if test "$curl" != "no" ; then
3557 if $pkg_config libcurl --exists; then
3558 curlconfig="$pkg_config libcurl"
3559 else
3560 curlconfig=curl-config
3562 cat > $TMPC << EOF
3563 #include <curl/curl.h>
3564 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3566 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3567 curl_libs=$($curlconfig --libs 2>/dev/null)
3568 if compile_prog "$curl_cflags" "$curl_libs" ; then
3569 curl=yes
3570 else
3571 if test "$curl" = "yes" ; then
3572 feature_not_found "curl" "Install libcurl devel"
3574 curl=no
3576 fi # test "$curl"
3578 ##########################################
3579 # bluez support probe
3580 if test "$bluez" != "no" ; then
3581 cat > $TMPC << EOF
3582 #include <bluetooth/bluetooth.h>
3583 int main(void) { return bt_error(0); }
3585 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3586 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3587 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3588 bluez=yes
3589 libs_softmmu="$bluez_libs $libs_softmmu"
3590 else
3591 if test "$bluez" = "yes" ; then
3592 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3594 bluez="no"
3598 ##########################################
3599 # glib support probe
3601 glib_req_ver=2.48
3602 glib_modules=gthread-2.0
3603 if test "$modules" = yes; then
3604 glib_modules="$glib_modules gmodule-export-2.0"
3607 # This workaround is required due to a bug in pkg-config file for glib as it
3608 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3610 if test "$static" = yes && test "$mingw32" = yes; then
3611 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3614 for i in $glib_modules; do
3615 if $pkg_config --atleast-version=$glib_req_ver $i; then
3616 glib_cflags=$($pkg_config --cflags $i)
3617 glib_libs=$($pkg_config --libs $i)
3618 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3619 LIBS="$glib_libs $LIBS"
3620 libs_qga="$glib_libs $libs_qga"
3621 else
3622 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3624 done
3626 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3627 gio=yes
3628 gio_cflags=$($pkg_config --cflags gio-2.0)
3629 gio_libs=$($pkg_config --libs gio-2.0)
3630 else
3631 gio=no
3634 # Sanity check that the current size_t matches the
3635 # size that glib thinks it should be. This catches
3636 # problems on multi-arch where people try to build
3637 # 32-bit QEMU while pointing at 64-bit glib headers
3638 cat > $TMPC <<EOF
3639 #include <glib.h>
3640 #include <unistd.h>
3642 #define QEMU_BUILD_BUG_ON(x) \
3643 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3645 int main(void) {
3646 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3647 return 0;
3651 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3652 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3653 "You probably need to set PKG_CONFIG_LIBDIR"\
3654 "to point to the right pkg-config files for your"\
3655 "build target"
3658 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3659 cat > $TMPC << EOF
3660 #include <glib.h>
3661 int main(void) { return 0; }
3663 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3664 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3665 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3666 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3670 #########################################
3671 # zlib check
3673 if test "$zlib" != "no" ; then
3674 if $pkg_config --exists zlib; then
3675 zlib_cflags=$($pkg_config --cflags zlib)
3676 zlib_libs=$($pkg_config --libs zlib)
3677 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3678 LIBS="$zlib_libs $LIBS"
3679 else
3680 cat > $TMPC << EOF
3681 #include <zlib.h>
3682 int main(void) { zlibVersion(); return 0; }
3684 if compile_prog "" "-lz" ; then
3685 LIBS="$LIBS -lz"
3686 else
3687 error_exit "zlib check failed" \
3688 "Make sure to have the zlib libs and headers installed."
3693 ##########################################
3694 # SHA command probe for modules
3695 if test "$modules" = yes; then
3696 shacmd_probe="sha1sum sha1 shasum"
3697 for c in $shacmd_probe; do
3698 if has $c; then
3699 shacmd="$c"
3700 break
3702 done
3703 if test "$shacmd" = ""; then
3704 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3708 ##########################################
3709 # pixman support probe
3711 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3712 pixman_cflags=
3713 pixman_libs=
3714 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3715 pixman_cflags=$($pkg_config --cflags pixman-1)
3716 pixman_libs=$($pkg_config --libs pixman-1)
3717 else
3718 error_exit "pixman >= 0.21.8 not present." \
3719 "Please install the pixman devel package."
3722 ##########################################
3723 # libmpathpersist probe
3725 if test "$mpath" != "no" ; then
3726 # probe for the new API
3727 cat > $TMPC <<EOF
3728 #include <libudev.h>
3729 #include <mpath_persist.h>
3730 unsigned mpath_mx_alloc_len = 1024;
3731 int logsink;
3732 static struct config *multipath_conf;
3733 extern struct udev *udev;
3734 extern struct config *get_multipath_config(void);
3735 extern void put_multipath_config(struct config *conf);
3736 struct udev *udev;
3737 struct config *get_multipath_config(void) { return multipath_conf; }
3738 void put_multipath_config(struct config *conf) { }
3740 int main(void) {
3741 udev = udev_new();
3742 multipath_conf = mpath_lib_init();
3743 return 0;
3746 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3747 mpathpersist=yes
3748 mpathpersist_new_api=yes
3749 else
3750 # probe for the old API
3751 cat > $TMPC <<EOF
3752 #include <libudev.h>
3753 #include <mpath_persist.h>
3754 unsigned mpath_mx_alloc_len = 1024;
3755 int logsink;
3756 int main(void) {
3757 struct udev *udev = udev_new();
3758 mpath_lib_init(udev);
3759 return 0;
3762 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3763 mpathpersist=yes
3764 mpathpersist_new_api=no
3765 else
3766 mpathpersist=no
3769 else
3770 mpathpersist=no
3773 ##########################################
3774 # libcap probe
3776 if test "$cap" != "no" ; then
3777 cat > $TMPC <<EOF
3778 #include <stdio.h>
3779 #include <sys/capability.h>
3780 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3782 if compile_prog "" "-lcap" ; then
3783 cap=yes
3784 else
3785 cap=no
3789 ##########################################
3790 # pthread probe
3791 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3793 pthread=no
3794 cat > $TMPC << EOF
3795 #include <pthread.h>
3796 static void *f(void *p) { return NULL; }
3797 int main(void) {
3798 pthread_t thread;
3799 pthread_create(&thread, 0, f, 0);
3800 return 0;
3803 if compile_prog "" "" ; then
3804 pthread=yes
3805 else
3806 for pthread_lib in $PTHREADLIBS_LIST; do
3807 if compile_prog "" "$pthread_lib" ; then
3808 pthread=yes
3809 found=no
3810 for lib_entry in $LIBS; do
3811 if test "$lib_entry" = "$pthread_lib"; then
3812 found=yes
3813 break
3815 done
3816 if test "$found" = "no"; then
3817 LIBS="$pthread_lib $LIBS"
3818 libs_qga="$pthread_lib $libs_qga"
3820 PTHREAD_LIB="$pthread_lib"
3821 break
3823 done
3826 if test "$mingw32" != yes && test "$pthread" = no; then
3827 error_exit "pthread check failed" \
3828 "Make sure to have the pthread libs and headers installed."
3831 # check for pthread_setname_np with thread id
3832 pthread_setname_np_w_tid=no
3833 cat > $TMPC << EOF
3834 #include <pthread.h>
3836 static void *f(void *p) { return NULL; }
3837 int main(void)
3839 pthread_t thread;
3840 pthread_create(&thread, 0, f, 0);
3841 pthread_setname_np(thread, "QEMU");
3842 return 0;
3845 if compile_prog "" "$pthread_lib" ; then
3846 pthread_setname_np_w_tid=yes
3849 # check for pthread_setname_np without thread id
3850 pthread_setname_np_wo_tid=no
3851 cat > $TMPC << EOF
3852 #include <pthread.h>
3854 static void *f(void *p) { pthread_setname_np("QEMU"); }
3855 int main(void)
3857 pthread_t thread;
3858 pthread_create(&thread, 0, f, 0);
3859 return 0;
3862 if compile_prog "" "$pthread_lib" ; then
3863 pthread_setname_np_wo_tid=yes
3866 ##########################################
3867 # rbd probe
3868 if test "$rbd" != "no" ; then
3869 cat > $TMPC <<EOF
3870 #include <stdio.h>
3871 #include <rbd/librbd.h>
3872 int main(void) {
3873 rados_t cluster;
3874 rados_create(&cluster, NULL);
3875 return 0;
3878 rbd_libs="-lrbd -lrados"
3879 if compile_prog "" "$rbd_libs" ; then
3880 rbd=yes
3881 else
3882 if test "$rbd" = "yes" ; then
3883 feature_not_found "rados block device" "Install librbd/ceph devel"
3885 rbd=no
3889 ##########################################
3890 # libssh probe
3891 if test "$libssh" != "no" ; then
3892 if $pkg_config --exists libssh; then
3893 libssh_cflags=$($pkg_config libssh --cflags)
3894 libssh_libs=$($pkg_config libssh --libs)
3895 libssh=yes
3896 else
3897 if test "$libssh" = "yes" ; then
3898 error_exit "libssh required for --enable-libssh"
3900 libssh=no
3904 ##########################################
3905 # Check for libssh 0.8
3906 # This is done like this instead of using the LIBSSH_VERSION_* and
3907 # SSH_VERSION_* macros because some distributions in the past shipped
3908 # snapshots of the future 0.8 from Git, and those snapshots did not
3909 # have updated version numbers (still referring to 0.7.0).
3911 if test "$libssh" = "yes"; then
3912 cat > $TMPC <<EOF
3913 #include <libssh/libssh.h>
3914 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3916 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3917 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3921 ##########################################
3922 # linux-aio probe
3924 if test "$linux_aio" != "no" ; then
3925 cat > $TMPC <<EOF
3926 #include <libaio.h>
3927 #include <sys/eventfd.h>
3928 #include <stddef.h>
3929 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3931 if compile_prog "" "-laio" ; then
3932 linux_aio=yes
3933 else
3934 if test "$linux_aio" = "yes" ; then
3935 feature_not_found "linux AIO" "Install libaio devel"
3937 linux_aio=no
3941 ##########################################
3942 # TPM emulation is only on POSIX
3944 if test "$tpm" = ""; then
3945 if test "$mingw32" = "yes"; then
3946 tpm=no
3947 else
3948 tpm=yes
3950 elif test "$tpm" = "yes"; then
3951 if test "$mingw32" = "yes" ; then
3952 error_exit "TPM emulation only available on POSIX systems"
3956 ##########################################
3957 # attr probe
3959 if test "$attr" != "no" ; then
3960 cat > $TMPC <<EOF
3961 #include <stdio.h>
3962 #include <sys/types.h>
3963 #ifdef CONFIG_LIBATTR
3964 #include <attr/xattr.h>
3965 #else
3966 #include <sys/xattr.h>
3967 #endif
3968 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3970 if compile_prog "" "" ; then
3971 attr=yes
3972 # Older distros have <attr/xattr.h>, and need -lattr:
3973 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3974 attr=yes
3975 LIBS="-lattr $LIBS"
3976 libattr=yes
3977 else
3978 if test "$attr" = "yes" ; then
3979 feature_not_found "ATTR" "Install libc6 or libattr devel"
3981 attr=no
3985 ##########################################
3986 # iovec probe
3987 cat > $TMPC <<EOF
3988 #include <sys/types.h>
3989 #include <sys/uio.h>
3990 #include <unistd.h>
3991 int main(void) { return sizeof(struct iovec); }
3993 iovec=no
3994 if compile_prog "" "" ; then
3995 iovec=yes
3998 ##########################################
3999 # preadv probe
4000 cat > $TMPC <<EOF
4001 #include <sys/types.h>
4002 #include <sys/uio.h>
4003 #include <unistd.h>
4004 int main(void) { return preadv(0, 0, 0, 0); }
4006 preadv=no
4007 if compile_prog "" "" ; then
4008 preadv=yes
4011 ##########################################
4012 # fdt probe
4013 # fdt support is mandatory for at least some target architectures,
4014 # so insist on it if we're building those system emulators.
4015 fdt_required=no
4016 for target in $target_list; do
4017 case $target in
4018 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4019 fdt_required=yes
4021 esac
4022 done
4024 if test "$fdt_required" = "yes"; then
4025 if test "$fdt" = "no"; then
4026 error_exit "fdt disabled but some requested targets require it." \
4027 "You can turn off fdt only if you also disable all the system emulation" \
4028 "targets which need it (by specifying a cut down --target-list)."
4030 fdt=yes
4033 if test "$fdt" != "no" ; then
4034 fdt_libs="-lfdt"
4035 # explicitly check for libfdt_env.h as it is missing in some stable installs
4036 # and test for required functions to make sure we are on a version >= 1.4.2
4037 cat > $TMPC << EOF
4038 #include <libfdt.h>
4039 #include <libfdt_env.h>
4040 int main(void) { fdt_check_full(NULL, 0); return 0; }
4042 if compile_prog "" "$fdt_libs" ; then
4043 # system DTC is good - use it
4044 fdt=system
4045 else
4046 # have GIT checkout, so activate dtc submodule
4047 if test -e "${source_path}/.git" ; then
4048 git_submodules="${git_submodules} dtc"
4050 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4051 fdt=git
4052 mkdir -p dtc
4053 if [ "$pwd_is_source_path" != "y" ] ; then
4054 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4055 symlink "$source_path/dtc/scripts" "dtc/scripts"
4057 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4058 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4059 fdt_libs="$fdt_libs"
4060 elif test "$fdt" = "yes" ; then
4061 # Not a git build & no libfdt found, prompt for system install
4062 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4063 "Please install the DTC (libfdt) devel package"
4064 else
4065 # don't have and don't want
4066 fdt_libs=
4067 fdt=no
4072 libs_softmmu="$libs_softmmu $fdt_libs"
4074 ##########################################
4075 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4077 gbm="no"
4078 if $pkg_config gbm; then
4079 gbm_cflags="$($pkg_config --cflags gbm)"
4080 gbm_libs="$($pkg_config --libs gbm)"
4081 gbm="yes"
4084 if test "$opengl" != "no" ; then
4085 opengl_pkgs="epoxy gbm"
4086 if $pkg_config $opengl_pkgs; then
4087 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4088 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4089 opengl=yes
4090 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4091 gtk_gl="yes"
4093 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4094 else
4095 if test "$opengl" = "yes" ; then
4096 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4098 opengl_cflags=""
4099 opengl_libs=""
4100 opengl=no
4104 if test "$opengl" = "yes"; then
4105 cat > $TMPC << EOF
4106 #include <epoxy/egl.h>
4107 #ifndef EGL_MESA_image_dma_buf_export
4108 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4109 #endif
4110 int main(void) { return 0; }
4112 if compile_prog "" "" ; then
4113 opengl_dmabuf=yes
4117 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4118 for target in $target_list; do
4119 case $target in
4120 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4121 need_x11=yes
4123 esac
4124 done
4127 ##########################################
4128 # libxml2 probe
4129 if test "$libxml2" != "no" ; then
4130 if $pkg_config --exists libxml-2.0; then
4131 libxml2="yes"
4132 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4133 libxml2_libs=$($pkg_config --libs libxml-2.0)
4134 else
4135 if test "$libxml2" = "yes"; then
4136 feature_not_found "libxml2" "Install libxml2 devel"
4138 libxml2="no"
4142 ##########################################
4143 # glusterfs probe
4144 if test "$glusterfs" != "no" ; then
4145 if $pkg_config --atleast-version=3 glusterfs-api; then
4146 glusterfs="yes"
4147 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4148 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4149 if $pkg_config --atleast-version=4 glusterfs-api; then
4150 glusterfs_xlator_opt="yes"
4152 if $pkg_config --atleast-version=5 glusterfs-api; then
4153 glusterfs_discard="yes"
4155 if $pkg_config --atleast-version=6 glusterfs-api; then
4156 glusterfs_fallocate="yes"
4157 glusterfs_zerofill="yes"
4159 cat > $TMPC << EOF
4160 #include <glusterfs/api/glfs.h>
4163 main(void)
4165 /* new glfs_ftruncate() passes two additional args */
4166 return glfs_ftruncate(NULL, 0, NULL, NULL);
4169 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4170 glusterfs_ftruncate_has_stat="yes"
4172 cat > $TMPC << EOF
4173 #include <glusterfs/api/glfs.h>
4175 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4176 static void
4177 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4181 main(void)
4183 glfs_io_cbk iocb = &glusterfs_iocb;
4184 iocb(NULL, 0 , NULL, NULL, NULL);
4185 return 0;
4188 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4189 glusterfs_iocb_has_stat="yes"
4191 else
4192 if test "$glusterfs" = "yes" ; then
4193 feature_not_found "GlusterFS backend support" \
4194 "Install glusterfs-api devel >= 3"
4196 glusterfs="no"
4200 # Check for inotify functions when we are building linux-user
4201 # emulator. This is done because older glibc versions don't
4202 # have syscall stubs for these implemented. In that case we
4203 # don't provide them even if kernel supports them.
4205 inotify=no
4206 cat > $TMPC << EOF
4207 #include <sys/inotify.h>
4210 main(void)
4212 /* try to start inotify */
4213 return inotify_init();
4216 if compile_prog "" "" ; then
4217 inotify=yes
4220 inotify1=no
4221 cat > $TMPC << EOF
4222 #include <sys/inotify.h>
4225 main(void)
4227 /* try to start inotify */
4228 return inotify_init1(0);
4231 if compile_prog "" "" ; then
4232 inotify1=yes
4235 # check if pipe2 is there
4236 pipe2=no
4237 cat > $TMPC << EOF
4238 #include <unistd.h>
4239 #include <fcntl.h>
4241 int main(void)
4243 int pipefd[2];
4244 return pipe2(pipefd, O_CLOEXEC);
4247 if compile_prog "" "" ; then
4248 pipe2=yes
4251 # check if accept4 is there
4252 accept4=no
4253 cat > $TMPC << EOF
4254 #include <sys/socket.h>
4255 #include <stddef.h>
4257 int main(void)
4259 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4260 return 0;
4263 if compile_prog "" "" ; then
4264 accept4=yes
4267 # check if tee/splice is there. vmsplice was added same time.
4268 splice=no
4269 cat > $TMPC << EOF
4270 #include <unistd.h>
4271 #include <fcntl.h>
4272 #include <limits.h>
4274 int main(void)
4276 int len, fd = 0;
4277 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4278 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4279 return 0;
4282 if compile_prog "" "" ; then
4283 splice=yes
4286 ##########################################
4287 # libnuma probe
4289 if test "$numa" != "no" ; then
4290 cat > $TMPC << EOF
4291 #include <numa.h>
4292 int main(void) { return numa_available(); }
4295 if compile_prog "" "-lnuma" ; then
4296 numa=yes
4297 libs_softmmu="-lnuma $libs_softmmu"
4298 else
4299 if test "$numa" = "yes" ; then
4300 feature_not_found "numa" "install numactl devel"
4302 numa=no
4306 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4307 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4308 exit 1
4311 # Even if malloc_trim() is available, these non-libc memory allocators
4312 # do not support it.
4313 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4314 if test "$malloc_trim" = "yes" ; then
4315 echo "Disabling malloc_trim with non-libc memory allocator"
4317 malloc_trim="no"
4320 #######################################
4321 # malloc_trim
4323 if test "$malloc_trim" != "no" ; then
4324 cat > $TMPC << EOF
4325 #include <malloc.h>
4326 int main(void) { malloc_trim(0); return 0; }
4328 if compile_prog "" "" ; then
4329 malloc_trim="yes"
4330 else
4331 malloc_trim="no"
4335 ##########################################
4336 # tcmalloc probe
4338 if test "$tcmalloc" = "yes" ; then
4339 cat > $TMPC << EOF
4340 #include <stdlib.h>
4341 int main(void) { malloc(1); return 0; }
4344 if compile_prog "" "-ltcmalloc" ; then
4345 LIBS="-ltcmalloc $LIBS"
4346 else
4347 feature_not_found "tcmalloc" "install gperftools devel"
4351 ##########################################
4352 # jemalloc probe
4354 if test "$jemalloc" = "yes" ; then
4355 cat > $TMPC << EOF
4356 #include <stdlib.h>
4357 int main(void) { malloc(1); return 0; }
4360 if compile_prog "" "-ljemalloc" ; then
4361 LIBS="-ljemalloc $LIBS"
4362 else
4363 feature_not_found "jemalloc" "install jemalloc devel"
4367 ##########################################
4368 # signalfd probe
4369 signalfd="no"
4370 cat > $TMPC << EOF
4371 #include <unistd.h>
4372 #include <sys/syscall.h>
4373 #include <signal.h>
4374 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4377 if compile_prog "" "" ; then
4378 signalfd=yes
4381 # check if optreset global is declared by <getopt.h>
4382 optreset="no"
4383 cat > $TMPC << EOF
4384 #include <getopt.h>
4385 int main(void) { return optreset; }
4388 if compile_prog "" "" ; then
4389 optreset=yes
4392 # check if eventfd is supported
4393 eventfd=no
4394 cat > $TMPC << EOF
4395 #include <sys/eventfd.h>
4397 int main(void)
4399 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4402 if compile_prog "" "" ; then
4403 eventfd=yes
4406 # check if memfd is supported
4407 memfd=no
4408 cat > $TMPC << EOF
4409 #include <sys/mman.h>
4411 int main(void)
4413 return memfd_create("foo", MFD_ALLOW_SEALING);
4416 if compile_prog "" "" ; then
4417 memfd=yes
4420 # check for usbfs
4421 have_usbfs=no
4422 if test "$linux_user" = "yes"; then
4423 cat > $TMPC << EOF
4424 #include <linux/usbdevice_fs.h>
4426 #ifndef USBDEVFS_GET_CAPABILITIES
4427 #error "USBDEVFS_GET_CAPABILITIES undefined"
4428 #endif
4430 #ifndef USBDEVFS_DISCONNECT_CLAIM
4431 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4432 #endif
4434 int main(void)
4436 return 0;
4439 if compile_prog "" ""; then
4440 have_usbfs=yes
4444 # check for fallocate
4445 fallocate=no
4446 cat > $TMPC << EOF
4447 #include <fcntl.h>
4449 int main(void)
4451 fallocate(0, 0, 0, 0);
4452 return 0;
4455 if compile_prog "" "" ; then
4456 fallocate=yes
4459 # check for fallocate hole punching
4460 fallocate_punch_hole=no
4461 cat > $TMPC << EOF
4462 #include <fcntl.h>
4463 #include <linux/falloc.h>
4465 int main(void)
4467 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4468 return 0;
4471 if compile_prog "" "" ; then
4472 fallocate_punch_hole=yes
4475 # check that fallocate supports range zeroing inside the file
4476 fallocate_zero_range=no
4477 cat > $TMPC << EOF
4478 #include <fcntl.h>
4479 #include <linux/falloc.h>
4481 int main(void)
4483 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4484 return 0;
4487 if compile_prog "" "" ; then
4488 fallocate_zero_range=yes
4491 # check for posix_fallocate
4492 posix_fallocate=no
4493 cat > $TMPC << EOF
4494 #include <fcntl.h>
4496 int main(void)
4498 posix_fallocate(0, 0, 0);
4499 return 0;
4502 if compile_prog "" "" ; then
4503 posix_fallocate=yes
4506 # check for sync_file_range
4507 sync_file_range=no
4508 cat > $TMPC << EOF
4509 #include <fcntl.h>
4511 int main(void)
4513 sync_file_range(0, 0, 0, 0);
4514 return 0;
4517 if compile_prog "" "" ; then
4518 sync_file_range=yes
4521 # check for linux/fiemap.h and FS_IOC_FIEMAP
4522 fiemap=no
4523 cat > $TMPC << EOF
4524 #include <sys/ioctl.h>
4525 #include <linux/fs.h>
4526 #include <linux/fiemap.h>
4528 int main(void)
4530 ioctl(0, FS_IOC_FIEMAP, 0);
4531 return 0;
4534 if compile_prog "" "" ; then
4535 fiemap=yes
4538 # check for dup3
4539 dup3=no
4540 cat > $TMPC << EOF
4541 #include <unistd.h>
4543 int main(void)
4545 dup3(0, 0, 0);
4546 return 0;
4549 if compile_prog "" "" ; then
4550 dup3=yes
4553 # check for ppoll support
4554 ppoll=no
4555 cat > $TMPC << EOF
4556 #include <poll.h>
4558 int main(void)
4560 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4561 ppoll(&pfd, 1, 0, 0);
4562 return 0;
4565 if compile_prog "" "" ; then
4566 ppoll=yes
4569 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4570 prctl_pr_set_timerslack=no
4571 cat > $TMPC << EOF
4572 #include <sys/prctl.h>
4574 int main(void)
4576 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4577 return 0;
4580 if compile_prog "" "" ; then
4581 prctl_pr_set_timerslack=yes
4584 # check for epoll support
4585 epoll=no
4586 cat > $TMPC << EOF
4587 #include <sys/epoll.h>
4589 int main(void)
4591 epoll_create(0);
4592 return 0;
4595 if compile_prog "" "" ; then
4596 epoll=yes
4599 # epoll_create1 is a later addition
4600 # so we must check separately for its presence
4601 epoll_create1=no
4602 cat > $TMPC << EOF
4603 #include <sys/epoll.h>
4605 int main(void)
4607 /* Note that we use epoll_create1 as a value, not as
4608 * a function being called. This is necessary so that on
4609 * old SPARC glibc versions where the function was present in
4610 * the library but not declared in the header file we will
4611 * fail the configure check. (Otherwise we will get a compiler
4612 * warning but not an error, and will proceed to fail the
4613 * qemu compile where we compile with -Werror.)
4615 return (int)(uintptr_t)&epoll_create1;
4618 if compile_prog "" "" ; then
4619 epoll_create1=yes
4622 # check for sendfile support
4623 sendfile=no
4624 cat > $TMPC << EOF
4625 #include <sys/sendfile.h>
4627 int main(void)
4629 return sendfile(0, 0, 0, 0);
4632 if compile_prog "" "" ; then
4633 sendfile=yes
4636 # check for timerfd support (glibc 2.8 and newer)
4637 timerfd=no
4638 cat > $TMPC << EOF
4639 #include <sys/timerfd.h>
4641 int main(void)
4643 return(timerfd_create(CLOCK_REALTIME, 0));
4646 if compile_prog "" "" ; then
4647 timerfd=yes
4650 # check for setns and unshare support
4651 setns=no
4652 cat > $TMPC << EOF
4653 #include <sched.h>
4655 int main(void)
4657 int ret;
4658 ret = setns(0, 0);
4659 ret = unshare(0);
4660 return ret;
4663 if compile_prog "" "" ; then
4664 setns=yes
4667 # clock_adjtime probe
4668 clock_adjtime=no
4669 cat > $TMPC <<EOF
4670 #include <time.h>
4672 int main(void)
4674 return clock_adjtime(0, 0);
4677 clock_adjtime=no
4678 if compile_prog "" "" ; then
4679 clock_adjtime=yes
4682 # syncfs probe
4683 syncfs=no
4684 cat > $TMPC <<EOF
4685 #include <unistd.h>
4687 int main(void)
4689 return syncfs(0);
4692 syncfs=no
4693 if compile_prog "" "" ; then
4694 syncfs=yes
4697 # Check we have a new enough version of sphinx-build
4698 has_sphinx_build() {
4699 # This is a bit awkward but works: create a trivial document and
4700 # try to run it with our configuration file (which enforces a
4701 # version requirement). This will fail if either
4702 # sphinx-build doesn't exist at all or if it is too old.
4703 mkdir -p "$TMPDIR1/sphinx"
4704 touch "$TMPDIR1/sphinx/index.rst"
4705 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4708 # Check if tools are available to build documentation.
4709 if test "$docs" != "no" ; then
4710 if has makeinfo && has pod2man && has_sphinx_build; then
4711 docs=yes
4712 else
4713 if test "$docs" = "yes" ; then
4714 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4716 docs=no
4720 # Search for bswap_32 function
4721 byteswap_h=no
4722 cat > $TMPC << EOF
4723 #include <byteswap.h>
4724 int main(void) { return bswap_32(0); }
4726 if compile_prog "" "" ; then
4727 byteswap_h=yes
4730 # Search for bswap32 function
4731 bswap_h=no
4732 cat > $TMPC << EOF
4733 #include <sys/endian.h>
4734 #include <sys/types.h>
4735 #include <machine/bswap.h>
4736 int main(void) { return bswap32(0); }
4738 if compile_prog "" "" ; then
4739 bswap_h=yes
4742 ##########################################
4743 # Do we have libiscsi >= 1.9.0
4744 if test "$libiscsi" != "no" ; then
4745 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4746 libiscsi="yes"
4747 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4748 libiscsi_libs=$($pkg_config --libs libiscsi)
4749 else
4750 if test "$libiscsi" = "yes" ; then
4751 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4753 libiscsi="no"
4757 ##########################################
4758 # Do we need libm
4759 cat > $TMPC << EOF
4760 #include <math.h>
4761 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4763 if compile_prog "" "" ; then
4765 elif compile_prog "" "-lm" ; then
4766 LIBS="-lm $LIBS"
4767 libs_qga="-lm $libs_qga"
4768 else
4769 error_exit "libm check failed"
4772 ##########################################
4773 # Do we need librt
4774 # uClibc provides 2 versions of clock_gettime(), one with realtime
4775 # support and one without. This means that the clock_gettime() don't
4776 # need -lrt. We still need it for timer_create() so we check for this
4777 # function in addition.
4778 cat > $TMPC <<EOF
4779 #include <signal.h>
4780 #include <time.h>
4781 int main(void) {
4782 timer_create(CLOCK_REALTIME, NULL, NULL);
4783 return clock_gettime(CLOCK_REALTIME, NULL);
4787 if compile_prog "" "" ; then
4789 # we need pthread for static linking. use previous pthread test result
4790 elif compile_prog "" "$pthread_lib -lrt" ; then
4791 LIBS="$LIBS -lrt"
4792 libs_qga="$libs_qga -lrt"
4795 # Check whether we need to link libutil for openpty()
4796 cat > $TMPC << EOF
4797 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4798 int main(void) { return openpty(0, 0, 0, 0, 0); }
4801 if ! compile_prog "" "" ; then
4802 if compile_prog "" "-lutil" ; then
4803 libs_softmmu="-lutil $libs_softmmu"
4804 libs_tools="-lutil $libs_tools"
4808 ##########################################
4809 # spice probe
4810 if test "$spice" != "no" ; then
4811 cat > $TMPC << EOF
4812 #include <spice.h>
4813 int main(void) { spice_server_new(); return 0; }
4815 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4816 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4817 if $pkg_config --atleast-version=0.12.5 spice-server && \
4818 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4819 compile_prog "$spice_cflags" "$spice_libs" ; then
4820 spice="yes"
4821 libs_softmmu="$libs_softmmu $spice_libs"
4822 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4823 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4824 spice_server_version=$($pkg_config --modversion spice-server)
4825 else
4826 if test "$spice" = "yes" ; then
4827 feature_not_found "spice" \
4828 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4830 spice="no"
4834 # check for smartcard support
4835 if test "$smartcard" != "no"; then
4836 if $pkg_config --atleast-version=2.5.1 libcacard; then
4837 libcacard_cflags=$($pkg_config --cflags libcacard)
4838 libcacard_libs=$($pkg_config --libs libcacard)
4839 smartcard="yes"
4840 else
4841 if test "$smartcard" = "yes"; then
4842 feature_not_found "smartcard" "Install libcacard devel"
4844 smartcard="no"
4848 # check for libusb
4849 if test "$libusb" != "no" ; then
4850 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4851 libusb="yes"
4852 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4853 libusb_libs=$($pkg_config --libs libusb-1.0)
4854 else
4855 if test "$libusb" = "yes"; then
4856 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4858 libusb="no"
4862 # check for usbredirparser for usb network redirection support
4863 if test "$usb_redir" != "no" ; then
4864 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4865 usb_redir="yes"
4866 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4867 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4868 else
4869 if test "$usb_redir" = "yes"; then
4870 feature_not_found "usb-redir" "Install usbredir devel"
4872 usb_redir="no"
4876 ##########################################
4877 # check if we have VSS SDK headers for win
4879 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4880 test "$vss_win32_sdk" != "no" ; then
4881 case "$vss_win32_sdk" in
4882 "") vss_win32_include="-isystem $source_path" ;;
4883 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4884 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4885 vss_win32_include="-isystem $source_path/.sdk/vss"
4886 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4888 *) vss_win32_include="-isystem $vss_win32_sdk"
4889 esac
4890 cat > $TMPC << EOF
4891 #define __MIDL_user_allocate_free_DEFINED__
4892 #include <inc/win2003/vss.h>
4893 int main(void) { return VSS_CTX_BACKUP; }
4895 if compile_prog "$vss_win32_include" "" ; then
4896 guest_agent_with_vss="yes"
4897 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4898 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4899 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4900 else
4901 if test "$vss_win32_sdk" != "" ; then
4902 echo "ERROR: Please download and install Microsoft VSS SDK:"
4903 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4904 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4905 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4906 echo "ERROR: The headers are extracted in the directory \`inc'."
4907 feature_not_found "VSS support"
4909 guest_agent_with_vss="no"
4913 ##########################################
4914 # lookup Windows platform SDK (if not specified)
4915 # The SDK is needed only to build .tlb (type library) file of guest agent
4916 # VSS provider from the source. It is usually unnecessary because the
4917 # pre-compiled .tlb file is included.
4919 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4920 test "$guest_agent_with_vss" = "yes" ; then
4921 if test -z "$win_sdk"; then
4922 programfiles="$PROGRAMFILES"
4923 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4924 if test -n "$programfiles"; then
4925 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4926 else
4927 feature_not_found "Windows SDK"
4929 elif test "$win_sdk" = "no"; then
4930 win_sdk=""
4934 ##########################################
4935 # check if mingw environment provides a recent ntddscsi.h
4936 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4937 cat > $TMPC << EOF
4938 #include <windows.h>
4939 #include <ntddscsi.h>
4940 int main(void) {
4941 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4942 #error Missing required ioctl definitions
4943 #endif
4944 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4945 return addr.Lun;
4948 if compile_prog "" "" ; then
4949 guest_agent_ntddscsi=yes
4950 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4954 ##########################################
4955 # virgl renderer probe
4957 if test "$virglrenderer" != "no" ; then
4958 cat > $TMPC << EOF
4959 #include <virglrenderer.h>
4960 int main(void) { virgl_renderer_poll(); return 0; }
4962 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4963 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4964 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4965 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4966 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4967 virglrenderer="yes"
4968 else
4969 if test "$virglrenderer" = "yes" ; then
4970 feature_not_found "virglrenderer"
4972 virglrenderer="no"
4976 ##########################################
4977 # capstone
4979 case "$capstone" in
4980 "" | yes)
4981 if $pkg_config capstone; then
4982 capstone=system
4983 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4984 capstone=git
4985 elif test -e "${source_path}/capstone/Makefile" ; then
4986 capstone=internal
4987 elif test -z "$capstone" ; then
4988 capstone=no
4989 else
4990 feature_not_found "capstone" "Install capstone devel or git submodule"
4994 system)
4995 if ! $pkg_config capstone; then
4996 feature_not_found "capstone" "Install capstone devel"
4999 esac
5001 case "$capstone" in
5002 git | internal)
5003 if test "$capstone" = git; then
5004 git_submodules="${git_submodules} capstone"
5006 mkdir -p capstone
5007 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5008 if test "$mingw32" = "yes"; then
5009 LIBCAPSTONE=capstone.lib
5010 else
5011 LIBCAPSTONE=libcapstone.a
5013 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5016 system)
5017 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5018 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5024 error_exit "Unknown state for capstone: $capstone"
5026 esac
5028 ##########################################
5029 # check if we have fdatasync
5031 fdatasync=no
5032 cat > $TMPC << EOF
5033 #include <unistd.h>
5034 int main(void) {
5035 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5036 return fdatasync(0);
5037 #else
5038 #error Not supported
5039 #endif
5042 if compile_prog "" "" ; then
5043 fdatasync=yes
5046 ##########################################
5047 # check if we have madvise
5049 madvise=no
5050 cat > $TMPC << EOF
5051 #include <sys/types.h>
5052 #include <sys/mman.h>
5053 #include <stddef.h>
5054 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5056 if compile_prog "" "" ; then
5057 madvise=yes
5060 ##########################################
5061 # check if we have posix_madvise
5063 posix_madvise=no
5064 cat > $TMPC << EOF
5065 #include <sys/mman.h>
5066 #include <stddef.h>
5067 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5069 if compile_prog "" "" ; then
5070 posix_madvise=yes
5073 ##########################################
5074 # check if we have posix_memalign()
5076 posix_memalign=no
5077 cat > $TMPC << EOF
5078 #include <stdlib.h>
5079 int main(void) {
5080 void *p;
5081 return posix_memalign(&p, 8, 8);
5084 if compile_prog "" "" ; then
5085 posix_memalign=yes
5088 ##########################################
5089 # check if we have posix_syslog
5091 posix_syslog=no
5092 cat > $TMPC << EOF
5093 #include <syslog.h>
5094 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5096 if compile_prog "" "" ; then
5097 posix_syslog=yes
5100 ##########################################
5101 # check if we have sem_timedwait
5103 sem_timedwait=no
5104 cat > $TMPC << EOF
5105 #include <semaphore.h>
5106 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5108 if compile_prog "" "" ; then
5109 sem_timedwait=yes
5112 ##########################################
5113 # check if we have strchrnul
5115 strchrnul=no
5116 cat > $TMPC << EOF
5117 #include <string.h>
5118 int main(void);
5119 // Use a haystack that the compiler shouldn't be able to constant fold
5120 char *haystack = (char*)&main;
5121 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5123 if compile_prog "" "" ; then
5124 strchrnul=yes
5127 ##########################################
5128 # check if trace backend exists
5130 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5131 if test "$?" -ne 0 ; then
5132 error_exit "invalid trace backends" \
5133 "Please choose supported trace backends."
5136 ##########################################
5137 # For 'ust' backend, test if ust headers are present
5138 if have_backend "ust"; then
5139 cat > $TMPC << EOF
5140 #include <lttng/tracepoint.h>
5141 int main(void) { return 0; }
5143 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5144 if $pkg_config lttng-ust --exists; then
5145 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5146 else
5147 lttng_ust_libs="-llttng-ust -ldl"
5149 if $pkg_config liburcu-bp --exists; then
5150 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5151 else
5152 urcu_bp_libs="-lurcu-bp"
5155 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5156 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5157 else
5158 error_exit "Trace backend 'ust' missing lttng-ust header files"
5162 ##########################################
5163 # For 'dtrace' backend, test if 'dtrace' command is present
5164 if have_backend "dtrace"; then
5165 if ! has 'dtrace' ; then
5166 error_exit "dtrace command is not found in PATH $PATH"
5168 trace_backend_stap="no"
5169 if has 'stap' ; then
5170 trace_backend_stap="yes"
5174 ##########################################
5175 # check and set a backend for coroutine
5177 # We prefer ucontext, but it's not always possible. The fallback
5178 # is sigcontext. On Windows the only valid backend is the Windows
5179 # specific one.
5181 ucontext_works=no
5182 if test "$darwin" != "yes"; then
5183 cat > $TMPC << EOF
5184 #include <ucontext.h>
5185 #ifdef __stub_makecontext
5186 #error Ignoring glibc stub makecontext which will always fail
5187 #endif
5188 int main(void) { makecontext(0, 0, 0); return 0; }
5190 if compile_prog "" "" ; then
5191 ucontext_works=yes
5195 if test "$coroutine" = ""; then
5196 if test "$mingw32" = "yes"; then
5197 coroutine=win32
5198 elif test "$ucontext_works" = "yes"; then
5199 coroutine=ucontext
5200 else
5201 coroutine=sigaltstack
5203 else
5204 case $coroutine in
5205 windows)
5206 if test "$mingw32" != "yes"; then
5207 error_exit "'windows' coroutine backend only valid for Windows"
5209 # Unfortunately the user visible backend name doesn't match the
5210 # coroutine-*.c filename for this case, so we have to adjust it here.
5211 coroutine=win32
5213 ucontext)
5214 if test "$ucontext_works" != "yes"; then
5215 feature_not_found "ucontext"
5218 sigaltstack)
5219 if test "$mingw32" = "yes"; then
5220 error_exit "only the 'windows' coroutine backend is valid for Windows"
5224 error_exit "unknown coroutine backend $coroutine"
5226 esac
5229 if test "$coroutine_pool" = ""; then
5230 coroutine_pool=yes
5233 if test "$debug_stack_usage" = "yes"; then
5234 if test "$coroutine_pool" = "yes"; then
5235 echo "WARN: disabling coroutine pool for stack usage debugging"
5236 coroutine_pool=no
5241 ##########################################
5242 # check if we have open_by_handle_at
5244 open_by_handle_at=no
5245 cat > $TMPC << EOF
5246 #include <fcntl.h>
5247 #if !defined(AT_EMPTY_PATH)
5248 # error missing definition
5249 #else
5250 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5251 #endif
5253 if compile_prog "" "" ; then
5254 open_by_handle_at=yes
5257 ########################################
5258 # check if we have linux/magic.h
5260 linux_magic_h=no
5261 cat > $TMPC << EOF
5262 #include <linux/magic.h>
5263 int main(void) {
5264 return 0;
5267 if compile_prog "" "" ; then
5268 linux_magic_h=yes
5271 ########################################
5272 # check whether we can disable warning option with a pragma (this is needed
5273 # to silence warnings in the headers of some versions of external libraries).
5274 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5275 # only a warning.
5277 # If we can't selectively disable warning in the code, disable -Werror so that
5278 # the build doesn't fail anyway.
5280 pragma_disable_unused_but_set=no
5281 cat > $TMPC << EOF
5282 #pragma GCC diagnostic push
5283 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5284 #pragma GCC diagnostic pop
5286 int main(void) {
5287 return 0;
5290 if compile_prog "-Werror" "" ; then
5291 pragma_diagnostic_available=yes
5292 else
5293 werror=no
5296 ########################################
5297 # check if we have valgrind/valgrind.h
5299 valgrind_h=no
5300 cat > $TMPC << EOF
5301 #include <valgrind/valgrind.h>
5302 int main(void) {
5303 return 0;
5306 if compile_prog "" "" ; then
5307 valgrind_h=yes
5310 ########################################
5311 # check if environ is declared
5313 has_environ=no
5314 cat > $TMPC << EOF
5315 #include <unistd.h>
5316 int main(void) {
5317 environ = 0;
5318 return 0;
5321 if compile_prog "" "" ; then
5322 has_environ=yes
5325 ########################################
5326 # check if cpuid.h is usable.
5328 cat > $TMPC << EOF
5329 #include <cpuid.h>
5330 int main(void) {
5331 unsigned a, b, c, d;
5332 int max = __get_cpuid_max(0, 0);
5334 if (max >= 1) {
5335 __cpuid(1, a, b, c, d);
5338 if (max >= 7) {
5339 __cpuid_count(7, 0, a, b, c, d);
5342 return 0;
5345 if compile_prog "" "" ; then
5346 cpuid_h=yes
5349 ##########################################
5350 # avx2 optimization requirement check
5352 # There is no point enabling this if cpuid.h is not usable,
5353 # since we won't be able to select the new routines.
5355 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5356 cat > $TMPC << EOF
5357 #pragma GCC push_options
5358 #pragma GCC target("avx2")
5359 #include <cpuid.h>
5360 #include <immintrin.h>
5361 static int bar(void *a) {
5362 __m256i x = *(__m256i *)a;
5363 return _mm256_testz_si256(x, x);
5365 int main(int argc, char *argv[]) { return bar(argv[0]); }
5367 if compile_object "" ; then
5368 avx2_opt="yes"
5369 else
5370 avx2_opt="no"
5374 ########################################
5375 # check if __[u]int128_t is usable.
5377 int128=no
5378 cat > $TMPC << EOF
5379 __int128_t a;
5380 __uint128_t b;
5381 int main (void) {
5382 a = a + b;
5383 b = a * b;
5384 a = a * a;
5385 return 0;
5388 if compile_prog "" "" ; then
5389 int128=yes
5392 #########################################
5393 # See if 128-bit atomic operations are supported.
5395 atomic128=no
5396 if test "$int128" = "yes"; then
5397 cat > $TMPC << EOF
5398 int main(void)
5400 unsigned __int128 x = 0, y = 0;
5401 y = __atomic_load_16(&x, 0);
5402 __atomic_store_16(&x, y, 0);
5403 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5404 return 0;
5407 if compile_prog "" "" ; then
5408 atomic128=yes
5412 cmpxchg128=no
5413 if test "$int128" = yes && test "$atomic128" = no; then
5414 cat > $TMPC << EOF
5415 int main(void)
5417 unsigned __int128 x = 0, y = 0;
5418 __sync_val_compare_and_swap_16(&x, y, x);
5419 return 0;
5422 if compile_prog "" "" ; then
5423 cmpxchg128=yes
5427 #########################################
5428 # See if 64-bit atomic operations are supported.
5429 # Note that without __atomic builtins, we can only
5430 # assume atomic loads/stores max at pointer size.
5432 cat > $TMPC << EOF
5433 #include <stdint.h>
5434 int main(void)
5436 uint64_t x = 0, y = 0;
5437 #ifdef __ATOMIC_RELAXED
5438 y = __atomic_load_8(&x, 0);
5439 __atomic_store_8(&x, y, 0);
5440 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5441 __atomic_exchange_8(&x, y, 0);
5442 __atomic_fetch_add_8(&x, y, 0);
5443 #else
5444 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5445 __sync_lock_test_and_set(&x, y);
5446 __sync_val_compare_and_swap(&x, y, 0);
5447 __sync_fetch_and_add(&x, y);
5448 #endif
5449 return 0;
5452 if compile_prog "" "" ; then
5453 atomic64=yes
5456 ########################################
5457 # See if 16-byte vector operations are supported.
5458 # Even without a vector unit the compiler may expand these.
5459 # There is a bug in old GCC for PPC that crashes here.
5460 # Unfortunately it's the system compiler for Centos 7.
5462 cat > $TMPC << EOF
5463 typedef unsigned char U1 __attribute__((vector_size(16)));
5464 typedef unsigned short U2 __attribute__((vector_size(16)));
5465 typedef unsigned int U4 __attribute__((vector_size(16)));
5466 typedef unsigned long long U8 __attribute__((vector_size(16)));
5467 typedef signed char S1 __attribute__((vector_size(16)));
5468 typedef signed short S2 __attribute__((vector_size(16)));
5469 typedef signed int S4 __attribute__((vector_size(16)));
5470 typedef signed long long S8 __attribute__((vector_size(16)));
5471 static U1 a1, b1;
5472 static U2 a2, b2;
5473 static U4 a4, b4;
5474 static U8 a8, b8;
5475 static S1 c1;
5476 static S2 c2;
5477 static S4 c4;
5478 static S8 c8;
5479 static int i;
5480 void helper(void *d, void *a, int shift, int i);
5481 void helper(void *d, void *a, int shift, int i)
5483 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5484 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5485 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5486 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5488 int main(void)
5490 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5491 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5492 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5493 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5494 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5495 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5496 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5497 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5498 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5499 return 0;
5503 vector16=no
5504 if compile_prog "" "" ; then
5505 vector16=yes
5508 ########################################
5509 # check if getauxval is available.
5511 getauxval=no
5512 cat > $TMPC << EOF
5513 #include <sys/auxv.h>
5514 int main(void) {
5515 return getauxval(AT_HWCAP) == 0;
5518 if compile_prog "" "" ; then
5519 getauxval=yes
5522 ########################################
5523 # check if ccache is interfering with
5524 # semantic analysis of macros
5526 unset CCACHE_CPP2
5527 ccache_cpp2=no
5528 cat > $TMPC << EOF
5529 static const int Z = 1;
5530 #define fn() ({ Z; })
5531 #define TAUT(X) ((X) == Z)
5532 #define PAREN(X, Y) (X == Y)
5533 #define ID(X) (X)
5534 int main(int argc, char *argv[])
5536 int x = 0, y = 0;
5537 x = ID(x);
5538 x = fn();
5539 fn();
5540 if (PAREN(x, y)) return 0;
5541 if (TAUT(Z)) return 0;
5542 return 0;
5546 if ! compile_object "-Werror"; then
5547 ccache_cpp2=yes
5550 #################################################
5551 # clang does not support glibc + FORTIFY_SOURCE.
5553 if test "$fortify_source" != "no"; then
5554 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5555 fortify_source="no";
5556 elif test -n "$cxx" && has $cxx &&
5557 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5558 fortify_source="no";
5559 else
5560 fortify_source="yes"
5564 ###############################################
5565 # Check if copy_file_range is provided by glibc
5566 have_copy_file_range=no
5567 cat > $TMPC << EOF
5568 #include <unistd.h>
5569 int main(void) {
5570 copy_file_range(0, NULL, 0, NULL, 0, 0);
5571 return 0;
5574 if compile_prog "" "" ; then
5575 have_copy_file_range=yes
5578 ##########################################
5579 # check if struct fsxattr is available via linux/fs.h
5581 have_fsxattr=no
5582 cat > $TMPC << EOF
5583 #include <linux/fs.h>
5584 struct fsxattr foo;
5585 int main(void) {
5586 return 0;
5589 if compile_prog "" "" ; then
5590 have_fsxattr=yes
5593 ##########################################
5594 # check for usable membarrier system call
5595 if test "$membarrier" = "yes"; then
5596 have_membarrier=no
5597 if test "$mingw32" = "yes" ; then
5598 have_membarrier=yes
5599 elif test "$linux" = "yes" ; then
5600 cat > $TMPC << EOF
5601 #include <linux/membarrier.h>
5602 #include <sys/syscall.h>
5603 #include <unistd.h>
5604 #include <stdlib.h>
5605 int main(void) {
5606 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5607 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5608 exit(0);
5611 if compile_prog "" "" ; then
5612 have_membarrier=yes
5615 if test "$have_membarrier" = "no"; then
5616 feature_not_found "membarrier" "membarrier system call not available"
5618 else
5619 # Do not enable it by default even for Mingw32, because it doesn't
5620 # work on Wine.
5621 membarrier=no
5624 ##########################################
5625 # check if rtnetlink.h exists and is useful
5626 have_rtnetlink=no
5627 cat > $TMPC << EOF
5628 #include <linux/rtnetlink.h>
5629 int main(void) {
5630 return IFLA_PROTO_DOWN;
5633 if compile_prog "" "" ; then
5634 have_rtnetlink=yes
5637 ##########################################
5638 # check for usable AF_VSOCK environment
5639 have_af_vsock=no
5640 cat > $TMPC << EOF
5641 #include <errno.h>
5642 #include <sys/types.h>
5643 #include <sys/socket.h>
5644 #if !defined(AF_VSOCK)
5645 # error missing AF_VSOCK flag
5646 #endif
5647 #include <linux/vm_sockets.h>
5648 int main(void) {
5649 int sock, ret;
5650 struct sockaddr_vm svm;
5651 socklen_t len = sizeof(svm);
5652 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5653 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5654 if ((ret == -1) && (errno == ENOTCONN)) {
5655 return 0;
5657 return -1;
5660 if compile_prog "" "" ; then
5661 have_af_vsock=yes
5664 ##########################################
5665 # check for usable AF_ALG environment
5666 hava_afalg=no
5667 cat > $TMPC << EOF
5668 #include <errno.h>
5669 #include <sys/types.h>
5670 #include <sys/socket.h>
5671 #include <linux/if_alg.h>
5672 int main(void) {
5673 int sock;
5674 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5675 return sock;
5678 if compile_prog "" "" ; then
5679 have_afalg=yes
5681 if test "$crypto_afalg" = "yes"
5682 then
5683 if test "$have_afalg" != "yes"
5684 then
5685 error_exit "AF_ALG requested but could not be detected"
5690 #################################################
5691 # Check to see if we have the Hypervisor framework
5692 if [ "$darwin" = "yes" ] ; then
5693 cat > $TMPC << EOF
5694 #include <Hypervisor/hv.h>
5695 int main() { return 0;}
5697 if ! compile_object ""; then
5698 hvf='no'
5699 else
5700 hvf='yes'
5701 LDFLAGS="-framework Hypervisor $LDFLAGS"
5705 #################################################
5706 # Sparc implicitly links with --relax, which is
5707 # incompatible with -r, so --no-relax should be
5708 # given. It does no harm to give it on other
5709 # platforms too.
5711 # Note: the prototype is needed since QEMU_CFLAGS
5712 # contains -Wmissing-prototypes
5713 cat > $TMPC << EOF
5714 extern int foo(void);
5715 int foo(void) { return 0; }
5717 if ! compile_object ""; then
5718 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5720 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5721 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5722 LD_REL_FLAGS=$i
5723 break
5725 done
5726 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5727 feature_not_found "modules" "Cannot find how to build relocatable objects"
5730 ##########################################
5731 # check for sysmacros.h
5733 have_sysmacros=no
5734 cat > $TMPC << EOF
5735 #include <sys/sysmacros.h>
5736 int main(void) {
5737 return makedev(0, 0);
5740 if compile_prog "" "" ; then
5741 have_sysmacros=yes
5744 ##########################################
5745 # Veritas HyperScale block driver VxHS
5746 # Check if libvxhs is installed
5748 if test "$vxhs" != "no" ; then
5749 cat > $TMPC <<EOF
5750 #include <stdint.h>
5751 #include <qnio/qnio_api.h>
5753 void *vxhs_callback;
5755 int main(void) {
5756 iio_init(QNIO_VERSION, vxhs_callback);
5757 return 0;
5760 vxhs_libs="-lvxhs -lssl"
5761 if compile_prog "" "$vxhs_libs" ; then
5762 vxhs=yes
5763 else
5764 if test "$vxhs" = "yes" ; then
5765 feature_not_found "vxhs block device" "Install libvxhs See github"
5767 vxhs=no
5771 ##########################################
5772 # check for _Static_assert()
5774 have_static_assert=no
5775 cat > $TMPC << EOF
5776 _Static_assert(1, "success");
5777 int main(void) {
5778 return 0;
5781 if compile_prog "" "" ; then
5782 have_static_assert=yes
5785 ##########################################
5786 # check for utmpx.h, it is missing e.g. on OpenBSD
5788 have_utmpx=no
5789 cat > $TMPC << EOF
5790 #include <utmpx.h>
5791 struct utmpx user_info;
5792 int main(void) {
5793 return 0;
5796 if compile_prog "" "" ; then
5797 have_utmpx=yes
5800 ##########################################
5801 # check for getrandom()
5803 have_getrandom=no
5804 cat > $TMPC << EOF
5805 #include <sys/random.h>
5806 int main(void) {
5807 return getrandom(0, 0, GRND_NONBLOCK);
5810 if compile_prog "" "" ; then
5811 have_getrandom=yes
5814 ##########################################
5815 # checks for sanitizers
5817 have_asan=no
5818 have_ubsan=no
5819 have_asan_iface_h=no
5820 have_asan_iface_fiber=no
5822 if test "$sanitizers" = "yes" ; then
5823 write_c_skeleton
5824 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5825 have_asan=yes
5828 # we could use a simple skeleton for flags checks, but this also
5829 # detect the static linking issue of ubsan, see also:
5830 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5831 cat > $TMPC << EOF
5832 #include <stdlib.h>
5833 int main(void) {
5834 void *tmp = malloc(10);
5835 return *(int *)(tmp + 2);
5838 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5839 have_ubsan=yes
5842 if check_include "sanitizer/asan_interface.h" ; then
5843 have_asan_iface_h=yes
5846 cat > $TMPC << EOF
5847 #include <sanitizer/asan_interface.h>
5848 int main(void) {
5849 __sanitizer_start_switch_fiber(0, 0, 0);
5850 return 0;
5853 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5854 have_asan_iface_fiber=yes
5858 ##########################################
5859 # check for libpmem
5861 if test "$libpmem" != "no"; then
5862 if $pkg_config --exists "libpmem"; then
5863 libpmem="yes"
5864 libpmem_libs=$($pkg_config --libs libpmem)
5865 libpmem_cflags=$($pkg_config --cflags libpmem)
5866 libs_softmmu="$libs_softmmu $libpmem_libs"
5867 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5868 else
5869 if test "$libpmem" = "yes" ; then
5870 feature_not_found "libpmem" "Install nvml or pmdk"
5872 libpmem="no"
5876 ##########################################
5877 # check for slirp
5879 case "$slirp" in
5880 "" | yes)
5881 if $pkg_config slirp; then
5882 slirp=system
5883 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5884 slirp=git
5885 elif test -e "${source_path}/slirp/Makefile" ; then
5886 slirp=internal
5887 elif test -z "$slirp" ; then
5888 slirp=no
5889 else
5890 feature_not_found "slirp" "Install slirp devel or git submodule"
5894 system)
5895 if ! $pkg_config slirp; then
5896 feature_not_found "slirp" "Install slirp devel"
5899 esac
5901 case "$slirp" in
5902 git | internal)
5903 if test "$slirp" = git; then
5904 git_submodules="${git_submodules} slirp"
5906 mkdir -p slirp
5907 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5908 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5911 system)
5912 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5913 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5914 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5920 error_exit "Unknown state for slirp: $slirp"
5922 esac
5925 ##########################################
5926 # End of CC checks
5927 # After here, no more $cc or $ld runs
5929 write_c_skeleton
5931 if test "$gcov" = "yes" ; then
5932 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5933 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5934 elif test "$fortify_source" = "yes" ; then
5935 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5936 elif test "$debug" = "no"; then
5937 CFLAGS="-O2 $CFLAGS"
5940 if test "$have_asan" = "yes"; then
5941 CFLAGS="-fsanitize=address $CFLAGS"
5942 if test "$have_asan_iface_h" = "no" ; then
5943 echo "ASAN build enabled, but ASAN header missing." \
5944 "Without code annotation, the report may be inferior."
5945 elif test "$have_asan_iface_fiber" = "no" ; then
5946 echo "ASAN build enabled, but ASAN header is too old." \
5947 "Without code annotation, the report may be inferior."
5950 if test "$have_ubsan" = "yes"; then
5951 CFLAGS="-fsanitize=undefined $CFLAGS"
5954 ##########################################
5955 # Do we have libnfs
5956 if test "$libnfs" != "no" ; then
5957 if $pkg_config --atleast-version=1.9.3 libnfs; then
5958 libnfs="yes"
5959 libnfs_libs=$($pkg_config --libs libnfs)
5960 else
5961 if test "$libnfs" = "yes" ; then
5962 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5964 libnfs="no"
5968 ##########################################
5969 # Do we have libudev
5970 if test "$libudev" != "no" ; then
5971 if $pkg_config libudev && test "$static" != "yes"; then
5972 libudev="yes"
5973 libudev_libs=$($pkg_config --libs libudev)
5974 else
5975 libudev="no"
5979 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5980 if test "$werror" = "yes"; then
5981 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5984 if test "$solaris" = "no" ; then
5985 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5986 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5990 # test if pod2man has --utf8 option
5991 if pod2man --help | grep -q utf8; then
5992 POD2MAN="pod2man --utf8"
5993 else
5994 POD2MAN="pod2man"
5997 # Use ASLR, no-SEH and DEP if available
5998 if test "$mingw32" = "yes" ; then
5999 for flag in --dynamicbase --no-seh --nxcompat; do
6000 if ld_has $flag ; then
6001 LDFLAGS="-Wl,$flag $LDFLAGS"
6003 done
6006 # Disable OpenBSD W^X if available
6007 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6008 cat > $TMPC <<EOF
6009 int main(void) { return 0; }
6011 wx_ldflags="-Wl,-z,wxneeded"
6012 if compile_prog "" "$wx_ldflags"; then
6013 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6017 qemu_confdir=$sysconfdir$confsuffix
6018 qemu_moddir=$libdir$confsuffix
6019 qemu_datadir=$datadir$confsuffix
6020 qemu_localedir="$datadir/locale"
6021 qemu_icondir="$datadir/icons"
6022 qemu_desktopdir="$datadir/applications"
6024 # We can only support ivshmem if we have eventfd
6025 if [ "$eventfd" = "yes" ]; then
6026 ivshmem=yes
6029 tools=""
6030 if test "$want_tools" = "yes" ; then
6031 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6032 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6033 tools="qemu-nbd\$(EXESUF) $tools"
6035 if [ "$ivshmem" = "yes" ]; then
6036 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6038 if [ "$curl" = "yes" ]; then
6039 tools="elf2dmp\$(EXESUF) $tools"
6042 if test "$softmmu" = yes ; then
6043 if test "$linux" = yes; then
6044 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6045 virtfs=yes
6046 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6047 else
6048 if test "$virtfs" = yes; then
6049 error_exit "VirtFS requires libcap devel and libattr devel"
6051 virtfs=no
6053 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6054 mpath=yes
6055 else
6056 if test "$mpath" = yes; then
6057 error_exit "Multipath requires libmpathpersist devel"
6059 mpath=no
6061 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6062 else
6063 if test "$virtfs" = yes; then
6064 error_exit "VirtFS is supported only on Linux"
6066 virtfs=no
6067 if test "$mpath" = yes; then
6068 error_exit "Multipath is supported only on Linux"
6070 mpath=no
6072 if test "$xkbcommon" = "yes"; then
6073 tools="qemu-keymap\$(EXESUF) $tools"
6077 # Probe for guest agent support/options
6079 if [ "$guest_agent" != "no" ]; then
6080 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6081 guest_agent=no
6082 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6083 tools="qemu-ga\$(EXESUF) $tools"
6084 guest_agent=yes
6085 elif [ "$guest_agent" != yes ]; then
6086 guest_agent=no
6087 else
6088 error_exit "Guest agent is not supported on this platform"
6092 # Guest agent Window MSI package
6094 if test "$guest_agent" != yes; then
6095 if test "$guest_agent_msi" = yes; then
6096 error_exit "MSI guest agent package requires guest agent enabled"
6098 guest_agent_msi=no
6099 elif test "$mingw32" != "yes"; then
6100 if test "$guest_agent_msi" = "yes"; then
6101 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6103 guest_agent_msi=no
6104 elif ! has wixl; then
6105 if test "$guest_agent_msi" = "yes"; then
6106 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6108 guest_agent_msi=no
6109 else
6110 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6111 # disabled explicitly
6112 if test "$guest_agent_msi" != "no"; then
6113 guest_agent_msi=yes
6117 if test "$guest_agent_msi" = "yes"; then
6118 if test "$guest_agent_with_vss" = "yes"; then
6119 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6122 if test "$QEMU_GA_MANUFACTURER" = ""; then
6123 QEMU_GA_MANUFACTURER=QEMU
6126 if test "$QEMU_GA_DISTRO" = ""; then
6127 QEMU_GA_DISTRO=Linux
6130 if test "$QEMU_GA_VERSION" = ""; then
6131 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6134 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6136 case "$cpu" in
6137 x86_64)
6138 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6140 i386)
6141 QEMU_GA_MSI_ARCH="-D Arch=32"
6144 error_exit "CPU $cpu not supported for building installation package"
6146 esac
6149 # Mac OS X ships with a broken assembler
6150 roms=
6151 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6152 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6153 test "$softmmu" = yes ; then
6154 # Different host OS linkers have different ideas about the name of the ELF
6155 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6156 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6157 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6158 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6159 ld_i386_emulation="$emu"
6160 roms="optionrom"
6161 break
6163 done
6165 if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
6166 roms="$roms spapr-rtas"
6169 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6170 if test "$cpu" = "s390x" ; then
6171 write_c_skeleton
6172 if compile_prog "-march=z900" ""; then
6173 roms="$roms s390-ccw"
6177 # Probe for the need for relocating the user-only binary.
6178 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6179 textseg_addr=
6180 case "$cpu" in
6181 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6182 # ??? Rationale for choosing this address
6183 textseg_addr=0x60000000
6185 mips)
6186 # A 256M aligned address, high in the address space, with enough
6187 # room for the code_gen_buffer above it before the stack.
6188 textseg_addr=0x60000000
6190 esac
6191 if [ -n "$textseg_addr" ]; then
6192 cat > $TMPC <<EOF
6193 int main(void) { return 0; }
6195 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6196 if ! compile_prog "" "$textseg_ldflags"; then
6197 # In case ld does not support -Ttext-segment, edit the default linker
6198 # script via sed to set the .text start addr. This is needed on FreeBSD
6199 # at least.
6200 if ! $ld --verbose >/dev/null 2>&1; then
6201 error_exit \
6202 "We need to link the QEMU user mode binaries at a" \
6203 "specific text address. Unfortunately your linker" \
6204 "doesn't support either the -Ttext-segment option or" \
6205 "printing the default linker script with --verbose." \
6206 "If you don't want the user mode binaries, pass the" \
6207 "--disable-user option to configure."
6210 $ld --verbose | sed \
6211 -e '1,/==================================================/d' \
6212 -e '/==================================================/,$d' \
6213 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6214 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6215 textseg_ldflags="-Wl,-T../config-host.ld"
6220 # Check that the C++ compiler exists and works with the C compiler.
6221 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6222 if has $cxx; then
6223 cat > $TMPC <<EOF
6224 int c_function(void);
6225 int main(void) { return c_function(); }
6228 compile_object
6230 cat > $TMPCXX <<EOF
6231 extern "C" {
6232 int c_function(void);
6234 int c_function(void) { return 42; }
6237 update_cxxflags
6239 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6240 # C++ compiler $cxx works ok with C compiler $cc
6242 else
6243 echo "C++ compiler $cxx does not work with C compiler $cc"
6244 echo "Disabling C++ specific optional code"
6245 cxx=
6247 else
6248 echo "No C++ compiler available; disabling C++ specific optional code"
6249 cxx=
6252 echo_version() {
6253 if test "$1" = "yes" ; then
6254 echo "($2)"
6258 # prepend pixman and ftd flags after all config tests are done
6259 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6260 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6261 libs_softmmu="$pixman_libs $libs_softmmu"
6263 echo "Install prefix $prefix"
6264 echo "BIOS directory $(eval echo $qemu_datadir)"
6265 echo "firmware path $(eval echo $firmwarepath)"
6266 echo "binary directory $(eval echo $bindir)"
6267 echo "library directory $(eval echo $libdir)"
6268 echo "module directory $(eval echo $qemu_moddir)"
6269 echo "libexec directory $(eval echo $libexecdir)"
6270 echo "include directory $(eval echo $includedir)"
6271 echo "config directory $(eval echo $sysconfdir)"
6272 if test "$mingw32" = "no" ; then
6273 echo "local state directory $(eval echo $local_statedir)"
6274 echo "Manual directory $(eval echo $mandir)"
6275 echo "ELF interp prefix $interp_prefix"
6276 else
6277 echo "local state directory queried at runtime"
6278 echo "Windows SDK $win_sdk"
6280 echo "Source path $source_path"
6281 echo "GIT binary $git"
6282 echo "GIT submodules $git_submodules"
6283 echo "C compiler $cc"
6284 echo "Host C compiler $host_cc"
6285 echo "C++ compiler $cxx"
6286 echo "Objective-C compiler $objcc"
6287 echo "ARFLAGS $ARFLAGS"
6288 echo "CFLAGS $CFLAGS"
6289 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6290 echo "LDFLAGS $LDFLAGS"
6291 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6292 echo "make $make"
6293 echo "install $install"
6294 echo "python $python ($python_version)"
6295 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6296 if test "$slirp" != "no" ; then
6297 echo "smbd $smbd"
6299 echo "module support $modules"
6300 echo "host CPU $cpu"
6301 echo "host big endian $bigendian"
6302 echo "target list $target_list"
6303 echo "gprof enabled $gprof"
6304 echo "sparse enabled $sparse"
6305 echo "strip binaries $strip_opt"
6306 echo "profiler $profiler"
6307 echo "static build $static"
6308 if test "$darwin" = "yes" ; then
6309 echo "Cocoa support $cocoa"
6311 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6312 echo "SDL image support $sdl_image"
6313 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6314 echo "GTK GL support $gtk_gl"
6315 echo "VTE support $vte $(echo_version $vte $vteversion)"
6316 echo "TLS priority $tls_priority"
6317 echo "GNUTLS support $gnutls"
6318 echo "libgcrypt $gcrypt"
6319 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6320 echo "libtasn1 $tasn1"
6321 echo "PAM $auth_pam"
6322 echo "iconv support $iconv"
6323 echo "curses support $curses"
6324 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6325 echo "curl support $curl"
6326 echo "mingw32 support $mingw32"
6327 echo "Audio drivers $audio_drv_list"
6328 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6329 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6330 echo "VirtFS support $virtfs"
6331 echo "Multipath support $mpath"
6332 echo "VNC support $vnc"
6333 if test "$vnc" = "yes" ; then
6334 echo "VNC SASL support $vnc_sasl"
6335 echo "VNC JPEG support $vnc_jpeg"
6336 echo "VNC PNG support $vnc_png"
6338 echo "xen support $xen"
6339 if test "$xen" = "yes" ; then
6340 echo "xen ctrl version $xen_ctrl_version"
6342 echo "brlapi support $brlapi"
6343 echo "bluez support $bluez"
6344 echo "Documentation $docs"
6345 echo "PIE $pie"
6346 echo "vde support $vde"
6347 echo "netmap support $netmap"
6348 echo "Linux AIO support $linux_aio"
6349 echo "ATTR/XATTR support $attr"
6350 echo "Install blobs $blobs"
6351 echo "KVM support $kvm"
6352 echo "HAX support $hax"
6353 echo "HVF support $hvf"
6354 echo "WHPX support $whpx"
6355 echo "TCG support $tcg"
6356 if test "$tcg" = "yes" ; then
6357 echo "TCG debug enabled $debug_tcg"
6358 echo "TCG interpreter $tcg_interpreter"
6360 echo "malloc trim support $malloc_trim"
6361 echo "RDMA support $rdma"
6362 echo "PVRDMA support $pvrdma"
6363 echo "fdt support $fdt"
6364 echo "membarrier $membarrier"
6365 echo "preadv support $preadv"
6366 echo "fdatasync $fdatasync"
6367 echo "madvise $madvise"
6368 echo "posix_madvise $posix_madvise"
6369 echo "posix_memalign $posix_memalign"
6370 echo "libcap-ng support $cap_ng"
6371 echo "vhost-net support $vhost_net"
6372 echo "vhost-crypto support $vhost_crypto"
6373 echo "vhost-scsi support $vhost_scsi"
6374 echo "vhost-vsock support $vhost_vsock"
6375 echo "vhost-user support $vhost_user"
6376 echo "Trace backends $trace_backends"
6377 if have_backend "simple"; then
6378 echo "Trace output file $trace_file-<pid>"
6380 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6381 echo "rbd support $rbd"
6382 echo "xfsctl support $xfs"
6383 echo "smartcard support $smartcard"
6384 echo "libusb $libusb"
6385 echo "usb net redir $usb_redir"
6386 echo "OpenGL support $opengl"
6387 echo "OpenGL dmabufs $opengl_dmabuf"
6388 echo "libiscsi support $libiscsi"
6389 echo "libnfs support $libnfs"
6390 echo "build guest agent $guest_agent"
6391 echo "QGA VSS support $guest_agent_with_vss"
6392 echo "QGA w32 disk info $guest_agent_ntddscsi"
6393 echo "QGA MSI support $guest_agent_msi"
6394 echo "seccomp support $seccomp"
6395 echo "coroutine backend $coroutine"
6396 echo "coroutine pool $coroutine_pool"
6397 echo "debug stack usage $debug_stack_usage"
6398 echo "mutex debugging $debug_mutex"
6399 echo "crypto afalg $crypto_afalg"
6400 echo "GlusterFS support $glusterfs"
6401 echo "gcov $gcov_tool"
6402 echo "gcov enabled $gcov"
6403 echo "TPM support $tpm"
6404 echo "libssh support $libssh"
6405 echo "QOM debugging $qom_cast_debug"
6406 echo "Live block migration $live_block_migration"
6407 echo "lzo support $lzo"
6408 echo "snappy support $snappy"
6409 echo "bzip2 support $bzip2"
6410 echo "lzfse support $lzfse"
6411 echo "NUMA host support $numa"
6412 echo "libxml2 $libxml2"
6413 echo "tcmalloc support $tcmalloc"
6414 echo "jemalloc support $jemalloc"
6415 echo "avx2 optimization $avx2_opt"
6416 echo "replication support $replication"
6417 echo "VxHS block device $vxhs"
6418 echo "bochs support $bochs"
6419 echo "cloop support $cloop"
6420 echo "dmg support $dmg"
6421 echo "qcow v1 support $qcow1"
6422 echo "vdi support $vdi"
6423 echo "vvfat support $vvfat"
6424 echo "qed support $qed"
6425 echo "parallels support $parallels"
6426 echo "sheepdog support $sheepdog"
6427 echo "capstone $capstone"
6428 echo "libpmem support $libpmem"
6429 echo "libudev $libudev"
6430 echo "default devices $default_devices"
6432 if test "$supported_cpu" = "no"; then
6433 echo
6434 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6435 echo
6436 echo "CPU host architecture $cpu support is not currently maintained."
6437 echo "The QEMU project intends to remove support for this host CPU in"
6438 echo "a future release if nobody volunteers to maintain it and to"
6439 echo "provide a build host for our continuous integration setup."
6440 echo "configure has succeeded and you can continue to build, but"
6441 echo "if you care about QEMU on this platform you should contact"
6442 echo "us upstream at qemu-devel@nongnu.org."
6445 if test "$supported_os" = "no"; then
6446 echo
6447 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6448 echo
6449 echo "Host OS $targetos support is not currently maintained."
6450 echo "The QEMU project intends to remove support for this host OS in"
6451 echo "a future release if nobody volunteers to maintain it and to"
6452 echo "provide a build host for our continuous integration setup."
6453 echo "configure has succeeded and you can continue to build, but"
6454 echo "if you care about QEMU on this platform you should contact"
6455 echo "us upstream at qemu-devel@nongnu.org."
6458 # Note that if the Python conditional here evaluates True we will exit
6459 # with status 1 which is a shell 'false' value.
6460 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6461 echo
6462 echo "warning: Python 2 support is deprecated" >&2
6463 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6464 python2="y"
6467 config_host_mak="config-host.mak"
6469 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6471 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6472 echo >> $config_host_mak
6474 echo all: >> $config_host_mak
6475 echo "prefix=$prefix" >> $config_host_mak
6476 echo "bindir=$bindir" >> $config_host_mak
6477 echo "libdir=$libdir" >> $config_host_mak
6478 echo "libexecdir=$libexecdir" >> $config_host_mak
6479 echo "includedir=$includedir" >> $config_host_mak
6480 echo "mandir=$mandir" >> $config_host_mak
6481 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6482 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6483 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6484 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6485 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6486 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6487 if test "$mingw32" = "no" ; then
6488 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6490 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6491 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6492 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6493 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6494 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6495 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6496 echo "GIT=$git" >> $config_host_mak
6497 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6498 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6500 echo "ARCH=$ARCH" >> $config_host_mak
6502 if test "$default_devices" = "yes" ; then
6503 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6504 else
6505 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6507 if test "$debug_tcg" = "yes" ; then
6508 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6510 if test "$strip_opt" = "yes" ; then
6511 echo "STRIP=${strip}" >> $config_host_mak
6513 if test "$bigendian" = "yes" ; then
6514 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6516 if test "$mingw32" = "yes" ; then
6517 echo "CONFIG_WIN32=y" >> $config_host_mak
6518 rc_version=$(cat $source_path/VERSION)
6519 version_major=${rc_version%%.*}
6520 rc_version=${rc_version#*.}
6521 version_minor=${rc_version%%.*}
6522 rc_version=${rc_version#*.}
6523 version_subminor=${rc_version%%.*}
6524 version_micro=0
6525 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6526 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6527 if test "$guest_agent_with_vss" = "yes" ; then
6528 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6529 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6530 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6532 if test "$guest_agent_ntddscsi" = "yes" ; then
6533 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6535 if test "$guest_agent_msi" = "yes"; then
6536 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6537 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6538 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6539 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6540 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6541 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6542 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6544 else
6545 echo "CONFIG_POSIX=y" >> $config_host_mak
6548 if test "$linux" = "yes" ; then
6549 echo "CONFIG_LINUX=y" >> $config_host_mak
6552 if test "$darwin" = "yes" ; then
6553 echo "CONFIG_DARWIN=y" >> $config_host_mak
6556 if test "$solaris" = "yes" ; then
6557 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6559 if test "$haiku" = "yes" ; then
6560 echo "CONFIG_HAIKU=y" >> $config_host_mak
6562 if test "$static" = "yes" ; then
6563 echo "CONFIG_STATIC=y" >> $config_host_mak
6565 if test "$profiler" = "yes" ; then
6566 echo "CONFIG_PROFILER=y" >> $config_host_mak
6568 if test "$want_tools" = "yes" ; then
6569 echo "CONFIG_TOOLS=y" >> $config_host_mak
6571 if test "$slirp" != "no"; then
6572 echo "CONFIG_SLIRP=y" >> $config_host_mak
6573 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6574 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6575 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6577 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6578 echo "config-host.h: slirp/all" >> $config_host_mak
6580 if test "$vde" = "yes" ; then
6581 echo "CONFIG_VDE=y" >> $config_host_mak
6582 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6584 if test "$netmap" = "yes" ; then
6585 echo "CONFIG_NETMAP=y" >> $config_host_mak
6587 if test "$l2tpv3" = "yes" ; then
6588 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6590 if test "$cap_ng" = "yes" ; then
6591 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6593 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6594 for drv in $audio_drv_list; do
6595 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6596 case "$drv" in
6597 alsa | oss | pa | sdl)
6598 echo "$def=m" >> $config_host_mak ;;
6600 echo "$def=y" >> $config_host_mak ;;
6601 esac
6602 done
6603 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6604 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6605 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6606 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6607 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6608 if test "$audio_pt_int" = "yes" ; then
6609 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6611 if test "$audio_win_int" = "yes" ; then
6612 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6614 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6615 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6616 if test "$vnc" = "yes" ; then
6617 echo "CONFIG_VNC=y" >> $config_host_mak
6619 if test "$vnc_sasl" = "yes" ; then
6620 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6622 if test "$vnc_jpeg" = "yes" ; then
6623 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6625 if test "$vnc_png" = "yes" ; then
6626 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6628 if test "$xkbcommon" = "yes" ; then
6629 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6630 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6632 if test "$xfs" = "yes" ; then
6633 echo "CONFIG_XFS=y" >> $config_host_mak
6635 qemu_version=$(head $source_path/VERSION)
6636 echo "VERSION=$qemu_version" >>$config_host_mak
6637 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6638 echo "SRC_PATH=$source_path" >> $config_host_mak
6639 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6640 if [ "$docs" = "yes" ] ; then
6641 echo "BUILD_DOCS=yes" >> $config_host_mak
6643 if test "$modules" = "yes"; then
6644 # $shacmd can generate a hash started with digit, which the compiler doesn't
6645 # like as an symbol. So prefix it with an underscore
6646 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6647 echo "CONFIG_MODULES=y" >> $config_host_mak
6649 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6650 echo "CONFIG_X11=y" >> $config_host_mak
6651 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6652 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6654 if test "$sdl" = "yes" ; then
6655 echo "CONFIG_SDL=m" >> $config_host_mak
6656 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6657 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6658 if test "$sdl_image" = "yes" ; then
6659 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6662 if test "$cocoa" = "yes" ; then
6663 echo "CONFIG_COCOA=y" >> $config_host_mak
6665 if test "$iconv" = "yes" ; then
6666 echo "CONFIG_ICONV=y" >> $config_host_mak
6667 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6668 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6670 if test "$curses" = "yes" ; then
6671 echo "CONFIG_CURSES=m" >> $config_host_mak
6672 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6673 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6675 if test "$pipe2" = "yes" ; then
6676 echo "CONFIG_PIPE2=y" >> $config_host_mak
6678 if test "$accept4" = "yes" ; then
6679 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6681 if test "$splice" = "yes" ; then
6682 echo "CONFIG_SPLICE=y" >> $config_host_mak
6684 if test "$eventfd" = "yes" ; then
6685 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6687 if test "$memfd" = "yes" ; then
6688 echo "CONFIG_MEMFD=y" >> $config_host_mak
6690 if test "$have_usbfs" = "yes" ; then
6691 echo "CONFIG_USBFS=y" >> $config_host_mak
6693 if test "$fallocate" = "yes" ; then
6694 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6696 if test "$fallocate_punch_hole" = "yes" ; then
6697 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6699 if test "$fallocate_zero_range" = "yes" ; then
6700 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6702 if test "$posix_fallocate" = "yes" ; then
6703 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6705 if test "$sync_file_range" = "yes" ; then
6706 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6708 if test "$fiemap" = "yes" ; then
6709 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6711 if test "$dup3" = "yes" ; then
6712 echo "CONFIG_DUP3=y" >> $config_host_mak
6714 if test "$ppoll" = "yes" ; then
6715 echo "CONFIG_PPOLL=y" >> $config_host_mak
6717 if test "$prctl_pr_set_timerslack" = "yes" ; then
6718 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6720 if test "$epoll" = "yes" ; then
6721 echo "CONFIG_EPOLL=y" >> $config_host_mak
6723 if test "$epoll_create1" = "yes" ; then
6724 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6726 if test "$sendfile" = "yes" ; then
6727 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6729 if test "$timerfd" = "yes" ; then
6730 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6732 if test "$setns" = "yes" ; then
6733 echo "CONFIG_SETNS=y" >> $config_host_mak
6735 if test "$clock_adjtime" = "yes" ; then
6736 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6738 if test "$syncfs" = "yes" ; then
6739 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6741 if test "$inotify" = "yes" ; then
6742 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6744 if test "$inotify1" = "yes" ; then
6745 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6747 if test "$sem_timedwait" = "yes" ; then
6748 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6750 if test "$strchrnul" = "yes" ; then
6751 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6753 if test "$byteswap_h" = "yes" ; then
6754 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6756 if test "$bswap_h" = "yes" ; then
6757 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6759 if test "$curl" = "yes" ; then
6760 echo "CONFIG_CURL=m" >> $config_host_mak
6761 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6762 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6764 if test "$brlapi" = "yes" ; then
6765 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6766 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6768 if test "$bluez" = "yes" ; then
6769 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6770 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6772 if test "$gtk" = "yes" ; then
6773 echo "CONFIG_GTK=m" >> $config_host_mak
6774 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6775 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6776 if test "$gtk_gl" = "yes" ; then
6777 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6780 if test "$gio" = "yes" ; then
6781 echo "CONFIG_GIO=y" >> $config_host_mak
6782 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6783 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6785 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6786 if test "$gnutls" = "yes" ; then
6787 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6789 if test "$gcrypt" = "yes" ; then
6790 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6791 if test "$gcrypt_hmac" = "yes" ; then
6792 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6795 if test "$nettle" = "yes" ; then
6796 echo "CONFIG_NETTLE=y" >> $config_host_mak
6797 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6799 if test "$tasn1" = "yes" ; then
6800 echo "CONFIG_TASN1=y" >> $config_host_mak
6802 if test "$auth_pam" = "yes" ; then
6803 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6805 if test "$have_ifaddrs_h" = "yes" ; then
6806 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6808 if test "$have_broken_size_max" = "yes" ; then
6809 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6812 # Work around a system header bug with some kernel/XFS header
6813 # versions where they both try to define 'struct fsxattr':
6814 # xfs headers will not try to redefine structs from linux headers
6815 # if this macro is set.
6816 if test "$have_fsxattr" = "yes" ; then
6817 echo "HAVE_FSXATTR=y" >> $config_host_mak
6819 if test "$have_copy_file_range" = "yes" ; then
6820 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6822 if test "$vte" = "yes" ; then
6823 echo "CONFIG_VTE=y" >> $config_host_mak
6824 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6825 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6827 if test "$virglrenderer" = "yes" ; then
6828 echo "CONFIG_VIRGL=y" >> $config_host_mak
6829 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6830 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6832 if test "$xen" = "yes" ; then
6833 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6834 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6836 if test "$linux_aio" = "yes" ; then
6837 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6839 if test "$attr" = "yes" ; then
6840 echo "CONFIG_ATTR=y" >> $config_host_mak
6842 if test "$libattr" = "yes" ; then
6843 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6845 if test "$virtfs" = "yes" ; then
6846 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6848 if test "$mpath" = "yes" ; then
6849 echo "CONFIG_MPATH=y" >> $config_host_mak
6850 if test "$mpathpersist_new_api" = "yes"; then
6851 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6854 if test "$vhost_scsi" = "yes" ; then
6855 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6857 if test "$vhost_net" = "yes" ; then
6858 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6860 if test "$vhost_net_user" = "yes" ; then
6861 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6863 if test "$vhost_crypto" = "yes" ; then
6864 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6866 if test "$vhost_vsock" = "yes" ; then
6867 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6869 if test "$vhost_kernel" = "yes" ; then
6870 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6872 if test "$vhost_user" = "yes" ; then
6873 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6875 if test "$blobs" = "yes" ; then
6876 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6878 if test "$iovec" = "yes" ; then
6879 echo "CONFIG_IOVEC=y" >> $config_host_mak
6881 if test "$preadv" = "yes" ; then
6882 echo "CONFIG_PREADV=y" >> $config_host_mak
6884 if test "$fdt" != "no" ; then
6885 echo "CONFIG_FDT=y" >> $config_host_mak
6887 if test "$membarrier" = "yes" ; then
6888 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6890 if test "$signalfd" = "yes" ; then
6891 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6893 if test "$optreset" = "yes" ; then
6894 echo "HAVE_OPTRESET=y" >> $config_host_mak
6896 if test "$tcg" = "yes"; then
6897 echo "CONFIG_TCG=y" >> $config_host_mak
6898 if test "$tcg_interpreter" = "yes" ; then
6899 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6902 if test "$fdatasync" = "yes" ; then
6903 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6905 if test "$madvise" = "yes" ; then
6906 echo "CONFIG_MADVISE=y" >> $config_host_mak
6908 if test "$posix_madvise" = "yes" ; then
6909 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6911 if test "$posix_memalign" = "yes" ; then
6912 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6915 if test "$spice" = "yes" ; then
6916 echo "CONFIG_SPICE=y" >> $config_host_mak
6919 if test "$smartcard" = "yes" ; then
6920 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6921 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6922 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6925 if test "$libusb" = "yes" ; then
6926 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6927 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6928 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6931 if test "$usb_redir" = "yes" ; then
6932 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6933 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6934 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6937 if test "$opengl" = "yes" ; then
6938 echo "CONFIG_OPENGL=y" >> $config_host_mak
6939 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6940 if test "$opengl_dmabuf" = "yes" ; then
6941 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6945 if test "$gbm" = "yes" ; then
6946 echo "CONFIG_GBM=y" >> $config_host_mak
6947 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6948 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6952 if test "$malloc_trim" = "yes" ; then
6953 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6956 if test "$avx2_opt" = "yes" ; then
6957 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6960 if test "$lzo" = "yes" ; then
6961 echo "CONFIG_LZO=y" >> $config_host_mak
6964 if test "$snappy" = "yes" ; then
6965 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6968 if test "$bzip2" = "yes" ; then
6969 echo "CONFIG_BZIP2=y" >> $config_host_mak
6970 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6973 if test "$lzfse" = "yes" ; then
6974 echo "CONFIG_LZFSE=y" >> $config_host_mak
6975 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6978 if test "$libiscsi" = "yes" ; then
6979 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6980 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6981 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6984 if test "$libnfs" = "yes" ; then
6985 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6986 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6989 if test "$seccomp" = "yes"; then
6990 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6991 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6992 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6995 # XXX: suppress that
6996 if [ "$bsd" = "yes" ] ; then
6997 echo "CONFIG_BSD=y" >> $config_host_mak
7000 if test "$localtime_r" = "yes" ; then
7001 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7003 if test "$qom_cast_debug" = "yes" ; then
7004 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7006 if test "$rbd" = "yes" ; then
7007 echo "CONFIG_RBD=m" >> $config_host_mak
7008 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7009 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7012 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7013 if test "$coroutine_pool" = "yes" ; then
7014 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7015 else
7016 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7019 if test "$debug_stack_usage" = "yes" ; then
7020 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7023 if test "$crypto_afalg" = "yes" ; then
7024 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7027 if test "$open_by_handle_at" = "yes" ; then
7028 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7031 if test "$linux_magic_h" = "yes" ; then
7032 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7035 if test "$pragma_diagnostic_available" = "yes" ; then
7036 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7039 if test "$valgrind_h" = "yes" ; then
7040 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7043 if test "$have_asan_iface_fiber" = "yes" ; then
7044 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7047 if test "$has_environ" = "yes" ; then
7048 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7051 if test "$cpuid_h" = "yes" ; then
7052 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7055 if test "$int128" = "yes" ; then
7056 echo "CONFIG_INT128=y" >> $config_host_mak
7059 if test "$atomic128" = "yes" ; then
7060 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7063 if test "$cmpxchg128" = "yes" ; then
7064 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7067 if test "$atomic64" = "yes" ; then
7068 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7071 if test "$vector16" = "yes" ; then
7072 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7075 if test "$getauxval" = "yes" ; then
7076 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7079 if test "$glusterfs" = "yes" ; then
7080 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7081 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7082 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7085 if test "$glusterfs_xlator_opt" = "yes" ; then
7086 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7089 if test "$glusterfs_discard" = "yes" ; then
7090 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7093 if test "$glusterfs_fallocate" = "yes" ; then
7094 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7097 if test "$glusterfs_zerofill" = "yes" ; then
7098 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7101 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7102 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7105 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7106 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7109 if test "$libssh" = "yes" ; then
7110 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7111 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7112 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7115 if test "$live_block_migration" = "yes" ; then
7116 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7119 if test "$tpm" = "yes"; then
7120 echo 'CONFIG_TPM=y' >> $config_host_mak
7123 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7124 if have_backend "nop"; then
7125 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7127 if have_backend "simple"; then
7128 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7129 # Set the appropriate trace file.
7130 trace_file="\"$trace_file-\" FMT_pid"
7132 if have_backend "log"; then
7133 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7135 if have_backend "ust"; then
7136 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7138 if have_backend "dtrace"; then
7139 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7140 if test "$trace_backend_stap" = "yes" ; then
7141 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7144 if have_backend "ftrace"; then
7145 if test "$linux" = "yes" ; then
7146 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7147 else
7148 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7151 if have_backend "syslog"; then
7152 if test "$posix_syslog" = "yes" ; then
7153 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7154 else
7155 feature_not_found "syslog(trace backend)" "syslog not available"
7158 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7160 if test "$rdma" = "yes" ; then
7161 echo "CONFIG_RDMA=y" >> $config_host_mak
7162 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7165 if test "$pvrdma" = "yes" ; then
7166 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7169 if test "$have_rtnetlink" = "yes" ; then
7170 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7173 if test "$libxml2" = "yes" ; then
7174 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7175 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7176 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7179 if test "$replication" = "yes" ; then
7180 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7183 if test "$have_af_vsock" = "yes" ; then
7184 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7187 if test "$have_sysmacros" = "yes" ; then
7188 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7191 if test "$have_static_assert" = "yes" ; then
7192 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7195 if test "$have_utmpx" = "yes" ; then
7196 echo "HAVE_UTMPX=y" >> $config_host_mak
7198 if test "$have_getrandom" = "yes" ; then
7199 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7201 if test "$ivshmem" = "yes" ; then
7202 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7204 if test "$capstone" != "no" ; then
7205 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7207 if test "$debug_mutex" = "yes" ; then
7208 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7211 # Hold two types of flag:
7212 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7213 # a thread we have a handle to
7214 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7215 # platform
7216 if test "$pthread_setname_np_w_tid" = "yes" ; then
7217 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7218 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7219 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7220 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7221 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7224 if test "$vxhs" = "yes" ; then
7225 echo "CONFIG_VXHS=y" >> $config_host_mak
7226 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7229 if test "$libpmem" = "yes" ; then
7230 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7233 if test "$bochs" = "yes" ; then
7234 echo "CONFIG_BOCHS=y" >> $config_host_mak
7236 if test "$cloop" = "yes" ; then
7237 echo "CONFIG_CLOOP=y" >> $config_host_mak
7239 if test "$dmg" = "yes" ; then
7240 echo "CONFIG_DMG=y" >> $config_host_mak
7242 if test "$qcow1" = "yes" ; then
7243 echo "CONFIG_QCOW1=y" >> $config_host_mak
7245 if test "$vdi" = "yes" ; then
7246 echo "CONFIG_VDI=y" >> $config_host_mak
7248 if test "$vvfat" = "yes" ; then
7249 echo "CONFIG_VVFAT=y" >> $config_host_mak
7251 if test "$qed" = "yes" ; then
7252 echo "CONFIG_QED=y" >> $config_host_mak
7254 if test "$parallels" = "yes" ; then
7255 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7257 if test "$sheepdog" = "yes" ; then
7258 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7261 if test "$tcg_interpreter" = "yes"; then
7262 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7263 elif test "$ARCH" = "sparc64" ; then
7264 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7265 elif test "$ARCH" = "s390x" ; then
7266 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7267 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7268 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7269 elif test "$ARCH" = "ppc64" ; then
7270 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7271 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7272 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7273 else
7274 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7276 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7278 echo "TOOLS=$tools" >> $config_host_mak
7279 echo "ROMS=$roms" >> $config_host_mak
7280 echo "MAKE=$make" >> $config_host_mak
7281 echo "INSTALL=$install" >> $config_host_mak
7282 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7283 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7284 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7285 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7286 echo "PYTHON=$python" >> $config_host_mak
7287 echo "PYTHON2=$python2" >> $config_host_mak
7288 echo "CC=$cc" >> $config_host_mak
7289 if $iasl -h > /dev/null 2>&1; then
7290 echo "IASL=$iasl" >> $config_host_mak
7292 echo "HOST_CC=$host_cc" >> $config_host_mak
7293 echo "CXX=$cxx" >> $config_host_mak
7294 echo "OBJCC=$objcc" >> $config_host_mak
7295 echo "AR=$ar" >> $config_host_mak
7296 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7297 echo "AS=$as" >> $config_host_mak
7298 echo "CCAS=$ccas" >> $config_host_mak
7299 echo "CPP=$cpp" >> $config_host_mak
7300 echo "OBJCOPY=$objcopy" >> $config_host_mak
7301 echo "LD=$ld" >> $config_host_mak
7302 echo "RANLIB=$ranlib" >> $config_host_mak
7303 echo "NM=$nm" >> $config_host_mak
7304 echo "WINDRES=$windres" >> $config_host_mak
7305 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7306 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7307 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7308 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7309 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7310 if test "$sparse" = "yes" ; then
7311 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7312 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7313 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7314 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7315 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7317 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7318 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7319 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7320 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7321 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7322 echo "LIBS+=$LIBS" >> $config_host_mak
7323 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7324 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7325 echo "EXESUF=$EXESUF" >> $config_host_mak
7326 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7327 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7328 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7329 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7330 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7331 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7332 if test "$gcov" = "yes" ; then
7333 echo "CONFIG_GCOV=y" >> $config_host_mak
7334 echo "GCOV=$gcov_tool" >> $config_host_mak
7337 if test "$libudev" != "no"; then
7338 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7339 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7342 # use included Linux headers
7343 if test "$linux" = "yes" ; then
7344 mkdir -p linux-headers
7345 case "$cpu" in
7346 i386|x86_64|x32)
7347 linux_arch=x86
7349 ppc|ppc64|ppc64le)
7350 linux_arch=powerpc
7352 s390x)
7353 linux_arch=s390
7355 aarch64)
7356 linux_arch=arm64
7358 mips64)
7359 linux_arch=mips
7362 # For most CPUs the kernel architecture name and QEMU CPU name match.
7363 linux_arch="$cpu"
7365 esac
7366 # For non-KVM architectures we will not have asm headers
7367 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7368 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7372 for target in $target_list; do
7373 target_dir="$target"
7374 config_target_mak=$target_dir/config-target.mak
7375 target_name=$(echo $target | cut -d '-' -f 1)
7376 target_aligned_only="no"
7377 case "$target_name" in
7378 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7379 target_aligned_only="yes"
7381 esac
7382 target_bigendian="no"
7383 case "$target_name" in
7384 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7385 target_bigendian="yes"
7387 esac
7388 target_softmmu="no"
7389 target_user_only="no"
7390 target_linux_user="no"
7391 target_bsd_user="no"
7392 case "$target" in
7393 ${target_name}-softmmu)
7394 target_softmmu="yes"
7396 ${target_name}-linux-user)
7397 target_user_only="yes"
7398 target_linux_user="yes"
7400 ${target_name}-bsd-user)
7401 target_user_only="yes"
7402 target_bsd_user="yes"
7405 error_exit "Target '$target' not recognised"
7406 exit 1
7408 esac
7410 mkdir -p $target_dir
7411 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7413 bflt="no"
7414 mttcg="no"
7415 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7416 gdb_xml_files=""
7418 TARGET_ARCH="$target_name"
7419 TARGET_BASE_ARCH=""
7420 TARGET_ABI_DIR=""
7422 case "$target_name" in
7423 i386)
7424 mttcg="yes"
7425 gdb_xml_files="i386-32bit.xml"
7427 x86_64)
7428 TARGET_BASE_ARCH=i386
7429 mttcg="yes"
7430 gdb_xml_files="i386-64bit.xml"
7432 alpha)
7433 mttcg="yes"
7435 arm|armeb)
7436 TARGET_ARCH=arm
7437 bflt="yes"
7438 mttcg="yes"
7439 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7441 aarch64|aarch64_be)
7442 TARGET_ARCH=aarch64
7443 TARGET_BASE_ARCH=arm
7444 bflt="yes"
7445 mttcg="yes"
7446 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7448 cris)
7450 hppa)
7451 mttcg="yes"
7453 lm32)
7455 m68k)
7456 bflt="yes"
7457 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7459 microblaze|microblazeel)
7460 TARGET_ARCH=microblaze
7461 bflt="yes"
7462 echo "TARGET_ABI32=y" >> $config_target_mak
7464 mips|mipsel)
7465 mttcg="yes"
7466 TARGET_ARCH=mips
7467 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7469 mipsn32|mipsn32el)
7470 mttcg="yes"
7471 TARGET_ARCH=mips64
7472 TARGET_BASE_ARCH=mips
7473 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7474 echo "TARGET_ABI32=y" >> $config_target_mak
7476 mips64|mips64el)
7477 mttcg="yes"
7478 TARGET_ARCH=mips64
7479 TARGET_BASE_ARCH=mips
7480 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7482 moxie)
7484 nios2)
7486 or1k)
7487 TARGET_ARCH=openrisc
7488 TARGET_BASE_ARCH=openrisc
7490 ppc)
7491 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7493 ppc64)
7494 TARGET_BASE_ARCH=ppc
7495 TARGET_ABI_DIR=ppc
7496 mttcg=yes
7497 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7499 ppc64le)
7500 TARGET_ARCH=ppc64
7501 TARGET_BASE_ARCH=ppc
7502 TARGET_ABI_DIR=ppc
7503 mttcg=yes
7504 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7506 ppc64abi32)
7507 TARGET_ARCH=ppc64
7508 TARGET_BASE_ARCH=ppc
7509 TARGET_ABI_DIR=ppc
7510 echo "TARGET_ABI32=y" >> $config_target_mak
7511 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7513 riscv32)
7514 TARGET_BASE_ARCH=riscv
7515 TARGET_ABI_DIR=riscv
7516 mttcg=yes
7517 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7519 riscv64)
7520 TARGET_BASE_ARCH=riscv
7521 TARGET_ABI_DIR=riscv
7522 mttcg=yes
7523 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7525 sh4|sh4eb)
7526 TARGET_ARCH=sh4
7527 bflt="yes"
7529 sparc)
7531 sparc64)
7532 TARGET_BASE_ARCH=sparc
7534 sparc32plus)
7535 TARGET_ARCH=sparc64
7536 TARGET_BASE_ARCH=sparc
7537 TARGET_ABI_DIR=sparc
7538 echo "TARGET_ABI32=y" >> $config_target_mak
7540 s390x)
7541 mttcg=yes
7542 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7544 tilegx)
7546 tricore)
7548 unicore32)
7550 xtensa|xtensaeb)
7551 TARGET_ARCH=xtensa
7552 bflt="yes"
7553 mttcg="yes"
7556 error_exit "Unsupported target CPU"
7558 esac
7559 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7560 if [ "$TARGET_BASE_ARCH" = "" ]; then
7561 TARGET_BASE_ARCH=$TARGET_ARCH
7564 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7566 upper() {
7567 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7570 target_arch_name="$(upper $TARGET_ARCH)"
7571 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7572 echo "TARGET_NAME=$target_name" >> $config_target_mak
7573 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7574 if [ "$TARGET_ABI_DIR" = "" ]; then
7575 TARGET_ABI_DIR=$TARGET_ARCH
7577 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7578 if [ "$HOST_VARIANT_DIR" != "" ]; then
7579 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7582 if supported_xen_target $target; then
7583 echo "CONFIG_XEN=y" >> $config_target_mak
7584 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7585 if test "$xen_pci_passthrough" = yes; then
7586 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7588 else
7589 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7591 if supported_kvm_target $target; then
7592 echo "CONFIG_KVM=y" >> $config_target_mak
7593 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7594 else
7595 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7597 if supported_hax_target $target; then
7598 echo "CONFIG_HAX=y" >> $config_target_mak
7600 if supported_hvf_target $target; then
7601 echo "CONFIG_HVF=y" >> $config_target_mak
7603 if supported_whpx_target $target; then
7604 echo "CONFIG_WHPX=y" >> $config_target_mak
7606 if test "$target_aligned_only" = "yes" ; then
7607 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7609 if test "$target_bigendian" = "yes" ; then
7610 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7612 if test "$target_softmmu" = "yes" ; then
7613 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7614 if test "$mttcg" = "yes" ; then
7615 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7618 if test "$target_user_only" = "yes" ; then
7619 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7620 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7622 if test "$target_linux_user" = "yes" ; then
7623 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7625 list=""
7626 if test ! -z "$gdb_xml_files" ; then
7627 for x in $gdb_xml_files; do
7628 list="$list $source_path/gdb-xml/$x"
7629 done
7630 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7633 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7634 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7636 if test "$target_bsd_user" = "yes" ; then
7637 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7641 # generate QEMU_CFLAGS/LDFLAGS for targets
7643 cflags=""
7644 ldflags=""
7646 disas_config() {
7647 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7648 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7651 for i in $ARCH $TARGET_BASE_ARCH ; do
7652 case "$i" in
7653 alpha)
7654 disas_config "ALPHA"
7656 aarch64)
7657 if test -n "${cxx}"; then
7658 disas_config "ARM_A64"
7661 arm)
7662 disas_config "ARM"
7663 if test -n "${cxx}"; then
7664 disas_config "ARM_A64"
7667 cris)
7668 disas_config "CRIS"
7670 hppa)
7671 disas_config "HPPA"
7673 i386|x86_64|x32)
7674 disas_config "I386"
7676 lm32)
7677 disas_config "LM32"
7679 m68k)
7680 disas_config "M68K"
7682 microblaze*)
7683 disas_config "MICROBLAZE"
7685 mips*)
7686 disas_config "MIPS"
7687 if test -n "${cxx}"; then
7688 disas_config "NANOMIPS"
7691 moxie*)
7692 disas_config "MOXIE"
7694 nios2)
7695 disas_config "NIOS2"
7697 or1k)
7698 disas_config "OPENRISC"
7700 ppc*)
7701 disas_config "PPC"
7703 riscv*)
7704 disas_config "RISCV"
7706 s390*)
7707 disas_config "S390"
7709 sh4)
7710 disas_config "SH4"
7712 sparc*)
7713 disas_config "SPARC"
7715 xtensa*)
7716 disas_config "XTENSA"
7718 esac
7719 done
7720 if test "$tcg_interpreter" = "yes" ; then
7721 disas_config "TCI"
7724 case "$ARCH" in
7725 alpha)
7726 # Ensure there's only a single GP
7727 cflags="-msmall-data $cflags"
7729 esac
7731 if test "$gprof" = "yes" ; then
7732 echo "TARGET_GPROF=y" >> $config_target_mak
7733 if test "$target_linux_user" = "yes" ; then
7734 cflags="-p $cflags"
7735 ldflags="-p $ldflags"
7737 if test "$target_softmmu" = "yes" ; then
7738 ldflags="-p $ldflags"
7739 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7743 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7744 ldflags="$ldflags $textseg_ldflags"
7747 # Newer kernels on s390 check for an S390_PGSTE program header and
7748 # enable the pgste page table extensions in that case. This makes
7749 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7750 # header if
7751 # - we build on s390x
7752 # - we build the system emulation for s390x (qemu-system-s390x)
7753 # - KVM is enabled
7754 # - the linker supports --s390-pgste
7755 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7756 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7757 if ld_has --s390-pgste ; then
7758 ldflags="-Wl,--s390-pgste $ldflags"
7762 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7763 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7765 done # for target in $targets
7767 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7768 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7770 if [ "$fdt" = "git" ]; then
7771 echo "config-host.h: dtc/all" >> $config_host_mak
7773 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7774 echo "config-host.h: capstone/all" >> $config_host_mak
7776 if test -n "$LIBCAPSTONE"; then
7777 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7780 if test "$numa" = "yes"; then
7781 echo "CONFIG_NUMA=y" >> $config_host_mak
7784 if test "$ccache_cpp2" = "yes"; then
7785 echo "export CCACHE_CPP2=y" >> $config_host_mak
7788 # If we're using a separate build tree, set it up now.
7789 # DIRS are directories which we simply mkdir in the build tree;
7790 # LINKS are things to symlink back into the source tree
7791 # (these can be both files and directories).
7792 # Caution: do not add files or directories here using wildcards. This
7793 # will result in problems later if a new file matching the wildcard is
7794 # added to the source tree -- nothing will cause configure to be rerun
7795 # so the build tree will be missing the link back to the new file, and
7796 # tests might fail. Prefer to keep the relevant files in their own
7797 # directory and symlink the directory instead.
7798 DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
7799 DIRS="$DIRS tests/fp tests/qgraph"
7800 DIRS="$DIRS docs docs/interop fsdev scsi"
7801 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7802 DIRS="$DIRS roms/seabios roms/vgabios"
7803 LINKS="Makefile"
7804 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7805 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
7806 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7807 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7808 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7809 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7810 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7811 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7812 LINKS="$LINKS tests/acceptance tests/data"
7813 LINKS="$LINKS tests/qemu-iotests/check"
7814 LINKS="$LINKS python"
7815 for bios_file in \
7816 $source_path/pc-bios/*.bin \
7817 $source_path/pc-bios/*.lid \
7818 $source_path/pc-bios/*.rom \
7819 $source_path/pc-bios/*.dtb \
7820 $source_path/pc-bios/*.img \
7821 $source_path/pc-bios/openbios-* \
7822 $source_path/pc-bios/u-boot.* \
7823 $source_path/pc-bios/edk2-*.fd.bz2 \
7824 $source_path/pc-bios/palcode-*
7826 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7827 done
7828 mkdir -p $DIRS
7829 for f in $LINKS ; do
7830 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7831 symlink "$source_path/$f" "$f"
7833 done
7835 (for i in $cross_cc_vars; do
7836 export $i
7837 done
7838 export target_list source_path
7839 $source_path/tests/tcg/configure.sh)
7841 # temporary config to build submodules
7842 for rom in seabios vgabios ; do
7843 config_mak=roms/$rom/config.mak
7844 echo "# Automatically generated by configure - do not modify" > $config_mak
7845 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7846 echo "AS=$as" >> $config_mak
7847 echo "CCAS=$ccas" >> $config_mak
7848 echo "CC=$cc" >> $config_mak
7849 echo "BCC=bcc" >> $config_mak
7850 echo "CPP=$cpp" >> $config_mak
7851 echo "OBJCOPY=objcopy" >> $config_mak
7852 echo "IASL=$iasl" >> $config_mak
7853 echo "LD=$ld" >> $config_mak
7854 echo "RANLIB=$ranlib" >> $config_mak
7855 done
7857 # set up qemu-iotests in this build directory
7858 iotests_common_env="tests/qemu-iotests/common.env"
7860 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7861 echo >> "$iotests_common_env"
7862 echo "export PYTHON='$python'" >> "$iotests_common_env"
7864 # Save the configure command line for later reuse.
7865 cat <<EOD >config.status
7866 #!/bin/sh
7867 # Generated by configure.
7868 # Run this file to recreate the current configuration.
7869 # Compiler output produced by configure, useful for debugging
7870 # configure, is in config.log if it exists.
7873 preserve_env() {
7874 envname=$1
7876 eval envval=\$$envname
7878 if test -n "$envval"
7879 then
7880 echo "$envname='$envval'" >> config.status
7881 echo "export $envname" >> config.status
7882 else
7883 echo "unset $envname" >> config.status
7887 # Preserve various env variables that influence what
7888 # features/build target configure will detect
7889 preserve_env AR
7890 preserve_env AS
7891 preserve_env CC
7892 preserve_env CPP
7893 preserve_env CXX
7894 preserve_env INSTALL
7895 preserve_env LD
7896 preserve_env LD_LIBRARY_PATH
7897 preserve_env LIBTOOL
7898 preserve_env MAKE
7899 preserve_env NM
7900 preserve_env OBJCOPY
7901 preserve_env PATH
7902 preserve_env PKG_CONFIG
7903 preserve_env PKG_CONFIG_LIBDIR
7904 preserve_env PKG_CONFIG_PATH
7905 preserve_env PYTHON
7906 preserve_env SDL2_CONFIG
7907 preserve_env SMBD
7908 preserve_env STRIP
7909 preserve_env WINDRES
7911 printf "exec" >>config.status
7912 printf " '%s'" "$0" "$@" >>config.status
7913 echo ' "$@"' >>config.status
7914 chmod +x config.status
7916 rm -r "$TMPDIR1"