riscv: sifive_u: Update model and compatible strings in device tree
[qemu/ar7.git] / configure
blob30aad233d17c967b9a670ef2f5bec4c9af02532e
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 # check we support --no-pie first...
2025 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2026 CFLAGS_NOPIE="-fno-pie"
2027 LDFLAGS_NOPIE="-nopie"
2030 if compile_prog "-fPIE -DPIE" "-pie"; then
2031 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2032 LDFLAGS="-pie $LDFLAGS"
2033 pie="yes"
2034 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2035 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2037 else
2038 if test "$pie" = "yes"; then
2039 error_exit "PIE not available due to missing toolchain support"
2040 else
2041 echo "Disabling PIE due to missing toolchain support"
2042 pie="no"
2047 ##########################################
2048 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2049 # use i686 as default anyway, but for those that don't, an explicit
2050 # specification is necessary
2052 if test "$cpu" = "i386"; then
2053 cat > $TMPC << EOF
2054 static int sfaa(int *ptr)
2056 return __sync_fetch_and_and(ptr, 0);
2059 int main(void)
2061 int val = 42;
2062 val = __sync_val_compare_and_swap(&val, 0, 1);
2063 sfaa(&val);
2064 return val;
2067 if ! compile_prog "" "" ; then
2068 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2072 #########################################
2073 # Solaris specific configure tool chain decisions
2075 if test "$solaris" = "yes" ; then
2076 if has $install; then
2078 else
2079 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2080 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2081 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2083 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2084 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2085 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2086 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2088 if has ar; then
2090 else
2091 if test -f /usr/ccs/bin/ar ; then
2092 error_exit "No path includes ar" \
2093 "Add /usr/ccs/bin to your path and rerun configure"
2095 error_exit "No path includes ar"
2099 if test -z "${target_list+xxx}" ; then
2100 for target in $default_target_list; do
2101 supported_target $target 2>/dev/null && \
2102 target_list="$target_list $target"
2103 done
2104 target_list="${target_list# }"
2105 else
2106 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2107 for target in $target_list; do
2108 # Check that we recognised the target name; this allows a more
2109 # friendly error message than if we let it fall through.
2110 case " $default_target_list " in
2111 *" $target "*)
2114 error_exit "Unknown target name '$target'"
2116 esac
2117 supported_target $target || exit 1
2118 done
2121 # see if system emulation was really requested
2122 case " $target_list " in
2123 *"-softmmu "*) softmmu=yes
2125 *) softmmu=no
2127 esac
2129 feature_not_found() {
2130 feature=$1
2131 remedy=$2
2133 error_exit "User requested feature $feature" \
2134 "configure was not able to find it." \
2135 "$remedy"
2138 # ---
2139 # big/little endian test
2140 cat > $TMPC << EOF
2141 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2142 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2143 extern int foo(short *, short *);
2144 int main(int argc, char *argv[]) {
2145 return foo(big_endian, little_endian);
2149 if compile_object ; then
2150 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2151 bigendian="yes"
2152 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2153 bigendian="no"
2154 else
2155 echo big/little test failed
2157 else
2158 echo big/little test failed
2161 ##########################################
2162 # cocoa implies not SDL or GTK
2163 # (the cocoa UI code currently assumes it is always the active UI
2164 # and doesn't interact well with other UI frontend code)
2165 if test "$cocoa" = "yes"; then
2166 if test "$sdl" = "yes"; then
2167 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2169 if test "$gtk" = "yes"; then
2170 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2172 gtk=no
2173 sdl=no
2176 # Some versions of Mac OS X incorrectly define SIZE_MAX
2177 cat > $TMPC << EOF
2178 #include <stdint.h>
2179 #include <stdio.h>
2180 int main(int argc, char *argv[]) {
2181 return printf("%zu", SIZE_MAX);
2184 have_broken_size_max=no
2185 if ! compile_object -Werror ; then
2186 have_broken_size_max=yes
2189 ##########################################
2190 # L2TPV3 probe
2192 cat > $TMPC <<EOF
2193 #include <sys/socket.h>
2194 #include <linux/ip.h>
2195 int main(void) { return sizeof(struct mmsghdr); }
2197 if compile_prog "" "" ; then
2198 l2tpv3=yes
2199 else
2200 l2tpv3=no
2203 #########################################
2204 # vhost interdependencies and host support
2206 # vhost backends
2207 test "$vhost_user" = "" && vhost_user=yes
2208 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2209 error_exit "vhost-user isn't available on win32"
2211 test "$vhost_kernel" = "" && vhost_kernel=$linux
2212 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2213 error_exit "vhost-kernel is only available on Linux"
2216 # vhost-kernel devices
2217 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2218 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2219 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2221 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2222 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2223 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2226 # vhost-user backends
2227 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2228 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2229 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2231 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2232 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2233 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2236 # OR the vhost-kernel and vhost-user values for simplicity
2237 if test "$vhost_net" = ""; then
2238 test "$vhost_net_user" = "yes" && vhost_net=yes
2239 test "$vhost_kernel" = "yes" && vhost_net=yes
2242 ##########################################
2243 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2245 if test "$mingw32" = "yes"; then
2246 # Some versions of MinGW / Mingw-w64 lack localtime_r
2247 # and gmtime_r entirely.
2249 # Some versions of Mingw-w64 define a macro for
2250 # localtime_r/gmtime_r.
2252 # Some versions of Mingw-w64 will define functions
2253 # for localtime_r/gmtime_r, but only if you have
2254 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2255 # though, unistd.h and pthread.h both define
2256 # that for you.
2258 # So this #undef localtime_r and #include <unistd.h>
2259 # are not in fact redundant.
2260 cat > $TMPC << EOF
2261 #include <unistd.h>
2262 #include <time.h>
2263 #undef localtime_r
2264 int main(void) { localtime_r(NULL, NULL); return 0; }
2266 if compile_prog "" "" ; then
2267 localtime_r="yes"
2268 else
2269 localtime_r="no"
2273 ##########################################
2274 # pkg-config probe
2276 if ! has "$pkg_config_exe"; then
2277 error_exit "pkg-config binary '$pkg_config_exe' not found"
2280 ##########################################
2281 # NPTL probe
2283 if test "$linux_user" = "yes"; then
2284 cat > $TMPC <<EOF
2285 #include <sched.h>
2286 #include <linux/futex.h>
2287 int main(void) {
2288 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2289 #error bork
2290 #endif
2291 return 0;
2294 if ! compile_object ; then
2295 feature_not_found "nptl" "Install glibc and linux kernel headers."
2299 ##########################################
2300 # lzo check
2302 if test "$lzo" != "no" ; then
2303 cat > $TMPC << EOF
2304 #include <lzo/lzo1x.h>
2305 int main(void) { lzo_version(); return 0; }
2307 if compile_prog "" "-llzo2" ; then
2308 libs_softmmu="$libs_softmmu -llzo2"
2309 lzo="yes"
2310 else
2311 if test "$lzo" = "yes"; then
2312 feature_not_found "liblzo2" "Install liblzo2 devel"
2314 lzo="no"
2318 ##########################################
2319 # snappy check
2321 if test "$snappy" != "no" ; then
2322 cat > $TMPC << EOF
2323 #include <snappy-c.h>
2324 int main(void) { snappy_max_compressed_length(4096); return 0; }
2326 if compile_prog "" "-lsnappy" ; then
2327 libs_softmmu="$libs_softmmu -lsnappy"
2328 snappy="yes"
2329 else
2330 if test "$snappy" = "yes"; then
2331 feature_not_found "libsnappy" "Install libsnappy devel"
2333 snappy="no"
2337 ##########################################
2338 # bzip2 check
2340 if test "$bzip2" != "no" ; then
2341 cat > $TMPC << EOF
2342 #include <bzlib.h>
2343 int main(void) { BZ2_bzlibVersion(); return 0; }
2345 if compile_prog "" "-lbz2" ; then
2346 bzip2="yes"
2347 else
2348 if test "$bzip2" = "yes"; then
2349 feature_not_found "libbzip2" "Install libbzip2 devel"
2351 bzip2="no"
2355 ##########################################
2356 # lzfse check
2358 if test "$lzfse" != "no" ; then
2359 cat > $TMPC << EOF
2360 #include <lzfse.h>
2361 int main(void) { lzfse_decode_scratch_size(); return 0; }
2363 if compile_prog "" "-llzfse" ; then
2364 lzfse="yes"
2365 else
2366 if test "$lzfse" = "yes"; then
2367 feature_not_found "lzfse" "Install lzfse devel"
2369 lzfse="no"
2373 ##########################################
2374 # libseccomp check
2376 if test "$seccomp" != "no" ; then
2377 libseccomp_minver="2.3.0"
2378 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2379 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2380 seccomp_libs="$($pkg_config --libs libseccomp)"
2381 seccomp="yes"
2382 else
2383 if test "$seccomp" = "yes" ; then
2384 feature_not_found "libseccomp" \
2385 "Install libseccomp devel >= $libseccomp_minver"
2387 seccomp="no"
2390 ##########################################
2391 # xen probe
2393 if test "$xen" != "no" ; then
2394 # Check whether Xen library path is specified via --extra-ldflags to avoid
2395 # overriding this setting with pkg-config output. If not, try pkg-config
2396 # to obtain all needed flags.
2398 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2399 $pkg_config --exists xencontrol ; then
2400 xen_ctrl_version="$(printf '%d%02d%02d' \
2401 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2402 xen=yes
2403 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2404 xen_pc="$xen_pc xenevtchn xendevicemodel"
2405 if $pkg_config --exists xentoolcore; then
2406 xen_pc="$xen_pc xentoolcore"
2408 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2409 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2410 else
2412 xen_libs="-lxenstore -lxenctrl -lxenguest"
2413 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2415 # First we test whether Xen headers and libraries are available.
2416 # If no, we are done and there is no Xen support.
2417 # If yes, more tests are run to detect the Xen version.
2419 # Xen (any)
2420 cat > $TMPC <<EOF
2421 #include <xenctrl.h>
2422 int main(void) {
2423 return 0;
2426 if ! compile_prog "" "$xen_libs" ; then
2427 # Xen not found
2428 if test "$xen" = "yes" ; then
2429 feature_not_found "xen" "Install xen devel"
2431 xen=no
2433 # Xen unstable
2434 elif
2435 cat > $TMPC <<EOF &&
2436 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2437 #define __XEN_TOOLS__
2438 #include <xendevicemodel.h>
2439 #include <xenforeignmemory.h>
2440 int main(void) {
2441 xendevicemodel_handle *xd;
2442 xenforeignmemory_handle *xfmem;
2444 xd = xendevicemodel_open(0, 0);
2445 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2447 xfmem = xenforeignmemory_open(0, 0);
2448 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2450 return 0;
2453 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2454 then
2455 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2456 xen_ctrl_version=41100
2457 xen=yes
2458 elif
2459 cat > $TMPC <<EOF &&
2460 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2461 #include <xenforeignmemory.h>
2462 #include <xentoolcore.h>
2463 int main(void) {
2464 xenforeignmemory_handle *xfmem;
2466 xfmem = xenforeignmemory_open(0, 0);
2467 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2468 xentoolcore_restrict_all(0);
2470 return 0;
2473 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2474 then
2475 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2476 xen_ctrl_version=41000
2477 xen=yes
2478 elif
2479 cat > $TMPC <<EOF &&
2480 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2481 #define __XEN_TOOLS__
2482 #include <xendevicemodel.h>
2483 int main(void) {
2484 xendevicemodel_handle *xd;
2486 xd = xendevicemodel_open(0, 0);
2487 xendevicemodel_close(xd);
2489 return 0;
2492 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2493 then
2494 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2495 xen_ctrl_version=40900
2496 xen=yes
2497 elif
2498 cat > $TMPC <<EOF &&
2500 * If we have stable libs the we don't want the libxc compat
2501 * layers, regardless of what CFLAGS we may have been given.
2503 * Also, check if xengnttab_grant_copy_segment_t is defined and
2504 * grant copy operation is implemented.
2506 #undef XC_WANT_COMPAT_EVTCHN_API
2507 #undef XC_WANT_COMPAT_GNTTAB_API
2508 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2509 #include <xenctrl.h>
2510 #include <xenstore.h>
2511 #include <xenevtchn.h>
2512 #include <xengnttab.h>
2513 #include <xenforeignmemory.h>
2514 #include <stdint.h>
2515 #include <xen/hvm/hvm_info_table.h>
2516 #if !defined(HVM_MAX_VCPUS)
2517 # error HVM_MAX_VCPUS not defined
2518 #endif
2519 int main(void) {
2520 xc_interface *xc = NULL;
2521 xenforeignmemory_handle *xfmem;
2522 xenevtchn_handle *xe;
2523 xengnttab_handle *xg;
2524 xengnttab_grant_copy_segment_t* seg = NULL;
2526 xs_daemon_open();
2528 xc = xc_interface_open(0, 0, 0);
2529 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2530 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2531 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2532 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2534 xfmem = xenforeignmemory_open(0, 0);
2535 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2537 xe = xenevtchn_open(0, 0);
2538 xenevtchn_fd(xe);
2540 xg = xengnttab_open(0, 0);
2541 xengnttab_grant_copy(xg, 0, seg);
2543 return 0;
2546 compile_prog "" "$xen_libs $xen_stable_libs"
2547 then
2548 xen_ctrl_version=40800
2549 xen=yes
2550 elif
2551 cat > $TMPC <<EOF &&
2553 * If we have stable libs the we don't want the libxc compat
2554 * layers, regardless of what CFLAGS we may have been given.
2556 #undef XC_WANT_COMPAT_EVTCHN_API
2557 #undef XC_WANT_COMPAT_GNTTAB_API
2558 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2559 #include <xenctrl.h>
2560 #include <xenstore.h>
2561 #include <xenevtchn.h>
2562 #include <xengnttab.h>
2563 #include <xenforeignmemory.h>
2564 #include <stdint.h>
2565 #include <xen/hvm/hvm_info_table.h>
2566 #if !defined(HVM_MAX_VCPUS)
2567 # error HVM_MAX_VCPUS not defined
2568 #endif
2569 int main(void) {
2570 xc_interface *xc = NULL;
2571 xenforeignmemory_handle *xfmem;
2572 xenevtchn_handle *xe;
2573 xengnttab_handle *xg;
2575 xs_daemon_open();
2577 xc = xc_interface_open(0, 0, 0);
2578 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2579 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2580 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2581 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2583 xfmem = xenforeignmemory_open(0, 0);
2584 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2586 xe = xenevtchn_open(0, 0);
2587 xenevtchn_fd(xe);
2589 xg = xengnttab_open(0, 0);
2590 xengnttab_map_grant_ref(xg, 0, 0, 0);
2592 return 0;
2595 compile_prog "" "$xen_libs $xen_stable_libs"
2596 then
2597 xen_ctrl_version=40701
2598 xen=yes
2600 # Xen 4.6
2601 elif
2602 cat > $TMPC <<EOF &&
2603 #include <xenctrl.h>
2604 #include <xenstore.h>
2605 #include <stdint.h>
2606 #include <xen/hvm/hvm_info_table.h>
2607 #if !defined(HVM_MAX_VCPUS)
2608 # error HVM_MAX_VCPUS not defined
2609 #endif
2610 int main(void) {
2611 xc_interface *xc;
2612 xs_daemon_open();
2613 xc = xc_interface_open(0, 0, 0);
2614 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2615 xc_gnttab_open(NULL, 0);
2616 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2617 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2618 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2619 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2620 return 0;
2623 compile_prog "" "$xen_libs"
2624 then
2625 xen_ctrl_version=40600
2626 xen=yes
2628 # Xen 4.5
2629 elif
2630 cat > $TMPC <<EOF &&
2631 #include <xenctrl.h>
2632 #include <xenstore.h>
2633 #include <stdint.h>
2634 #include <xen/hvm/hvm_info_table.h>
2635 #if !defined(HVM_MAX_VCPUS)
2636 # error HVM_MAX_VCPUS not defined
2637 #endif
2638 int main(void) {
2639 xc_interface *xc;
2640 xs_daemon_open();
2641 xc = xc_interface_open(0, 0, 0);
2642 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2643 xc_gnttab_open(NULL, 0);
2644 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2645 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2646 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2647 return 0;
2650 compile_prog "" "$xen_libs"
2651 then
2652 xen_ctrl_version=40500
2653 xen=yes
2655 elif
2656 cat > $TMPC <<EOF &&
2657 #include <xenctrl.h>
2658 #include <xenstore.h>
2659 #include <stdint.h>
2660 #include <xen/hvm/hvm_info_table.h>
2661 #if !defined(HVM_MAX_VCPUS)
2662 # error HVM_MAX_VCPUS not defined
2663 #endif
2664 int main(void) {
2665 xc_interface *xc;
2666 xs_daemon_open();
2667 xc = xc_interface_open(0, 0, 0);
2668 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2669 xc_gnttab_open(NULL, 0);
2670 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2671 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2672 return 0;
2675 compile_prog "" "$xen_libs"
2676 then
2677 xen_ctrl_version=40200
2678 xen=yes
2680 else
2681 if test "$xen" = "yes" ; then
2682 feature_not_found "xen (unsupported version)" \
2683 "Install a supported xen (xen 4.2 or newer)"
2685 xen=no
2688 if test "$xen" = yes; then
2689 if test $xen_ctrl_version -ge 40701 ; then
2690 libs_softmmu="$xen_stable_libs $libs_softmmu"
2692 libs_softmmu="$xen_libs $libs_softmmu"
2697 if test "$xen_pci_passthrough" != "no"; then
2698 if test "$xen" = "yes" && test "$linux" = "yes"; then
2699 xen_pci_passthrough=yes
2700 else
2701 if test "$xen_pci_passthrough" = "yes"; then
2702 error_exit "User requested feature Xen PCI Passthrough" \
2703 " but this feature requires /sys from Linux"
2705 xen_pci_passthrough=no
2709 ##########################################
2710 # Windows Hypervisor Platform accelerator (WHPX) check
2711 if test "$whpx" != "no" ; then
2712 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2713 whpx="yes"
2714 else
2715 if test "$whpx" = "yes"; then
2716 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2718 whpx="no"
2722 ##########################################
2723 # Sparse probe
2724 if test "$sparse" != "no" ; then
2725 if has cgcc; then
2726 sparse=yes
2727 else
2728 if test "$sparse" = "yes" ; then
2729 feature_not_found "sparse" "Install sparse binary"
2731 sparse=no
2735 ##########################################
2736 # X11 probe
2737 if $pkg_config --exists "x11"; then
2738 have_x11=yes
2739 x11_cflags=$($pkg_config --cflags x11)
2740 x11_libs=$($pkg_config --libs x11)
2743 ##########################################
2744 # GTK probe
2746 if test "$gtk" != "no"; then
2747 gtkpackage="gtk+-3.0"
2748 gtkx11package="gtk+-x11-3.0"
2749 gtkversion="3.14.0"
2750 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2751 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2752 gtk_libs=$($pkg_config --libs $gtkpackage)
2753 gtk_version=$($pkg_config --modversion $gtkpackage)
2754 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2755 need_x11=yes
2756 gtk_cflags="$gtk_cflags $x11_cflags"
2757 gtk_libs="$gtk_libs $x11_libs"
2759 gtk="yes"
2760 elif test "$gtk" = "yes"; then
2761 feature_not_found "gtk" "Install gtk3-devel"
2762 else
2763 gtk="no"
2768 ##########################################
2769 # GNUTLS probe
2771 if test "$gnutls" != "no"; then
2772 pass="no"
2773 if $pkg_config --exists "gnutls >= 3.1.18"; then
2774 gnutls_cflags=$($pkg_config --cflags gnutls)
2775 gnutls_libs=$($pkg_config --libs gnutls)
2776 # Packaging for the static libraries is not always correct.
2777 # At least ubuntu 18.04 ships only shared libraries.
2778 write_c_skeleton
2779 if compile_prog "" "$gnutls_libs" ; then
2780 LIBS="$gnutls_libs $LIBS"
2781 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2782 pass="yes"
2785 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2786 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2787 else
2788 gnutls="$pass"
2793 # If user didn't give a --disable/enable-gcrypt flag,
2794 # then mark as disabled if user requested nettle
2795 # explicitly
2796 if test -z "$gcrypt"
2797 then
2798 if test "$nettle" = "yes"
2799 then
2800 gcrypt="no"
2804 # If user didn't give a --disable/enable-nettle flag,
2805 # then mark as disabled if user requested gcrypt
2806 # explicitly
2807 if test -z "$nettle"
2808 then
2809 if test "$gcrypt" = "yes"
2810 then
2811 nettle="no"
2815 has_libgcrypt() {
2816 if ! has "libgcrypt-config"
2817 then
2818 return 1
2821 if test -n "$cross_prefix"
2822 then
2823 host=$(libgcrypt-config --host)
2824 if test "$host-" != $cross_prefix
2825 then
2826 return 1
2830 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2831 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2833 if test $maj != 1 || test $min -lt 5
2834 then
2835 return 1
2838 return 0
2842 if test "$nettle" != "no"; then
2843 pass="no"
2844 if $pkg_config --exists "nettle >= 2.7.1"; then
2845 nettle_cflags=$($pkg_config --cflags nettle)
2846 nettle_libs=$($pkg_config --libs nettle)
2847 nettle_version=$($pkg_config --modversion nettle)
2848 # Link test to make sure the given libraries work (e.g for static).
2849 write_c_skeleton
2850 if compile_prog "" "$nettle_libs" ; then
2851 LIBS="$nettle_libs $LIBS"
2852 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2853 if test -z "$gcrypt"; then
2854 gcrypt="no"
2856 pass="yes"
2859 if test "$pass" = "no" && test "$nettle" = "yes"; then
2860 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2861 else
2862 nettle="$pass"
2866 if test "$gcrypt" != "no"; then
2867 pass="no"
2868 if has_libgcrypt; then
2869 gcrypt_cflags=$(libgcrypt-config --cflags)
2870 gcrypt_libs=$(libgcrypt-config --libs)
2871 # Debian has removed -lgpg-error from libgcrypt-config
2872 # as it "spreads unnecessary dependencies" which in
2873 # turn breaks static builds...
2874 if test "$static" = "yes"
2875 then
2876 gcrypt_libs="$gcrypt_libs -lgpg-error"
2879 # Link test to make sure the given libraries work (e.g for static).
2880 write_c_skeleton
2881 if compile_prog "" "$gcrypt_libs" ; then
2882 LIBS="$gcrypt_libs $LIBS"
2883 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2884 pass="yes"
2887 if test "$pass" = "yes"; then
2888 gcrypt="yes"
2889 cat > $TMPC << EOF
2890 #include <gcrypt.h>
2891 int main(void) {
2892 gcry_mac_hd_t handle;
2893 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2894 GCRY_MAC_FLAG_SECURE, NULL);
2895 return 0;
2898 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2899 gcrypt_hmac=yes
2901 elif test "$gcrypt" = "yes"; then
2902 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2903 else
2904 gcrypt="no"
2909 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2910 then
2911 error_exit "Only one of gcrypt & nettle can be enabled"
2914 ##########################################
2915 # libtasn1 - only for the TLS creds/session test suite
2917 tasn1=yes
2918 tasn1_cflags=""
2919 tasn1_libs=""
2920 if $pkg_config --exists "libtasn1"; then
2921 tasn1_cflags=$($pkg_config --cflags libtasn1)
2922 tasn1_libs=$($pkg_config --libs libtasn1)
2923 else
2924 tasn1=no
2928 ##########################################
2929 # PAM probe
2931 if test "$auth_pam" != "no"; then
2932 cat > $TMPC <<EOF
2933 #include <security/pam_appl.h>
2934 #include <stdio.h>
2935 int main(void) {
2936 const char *service_name = "qemu";
2937 const char *user = "frank";
2938 const struct pam_conv pam_conv = { 0 };
2939 pam_handle_t *pamh = NULL;
2940 pam_start(service_name, user, &pam_conv, &pamh);
2941 return 0;
2944 if compile_prog "" "-lpam" ; then
2945 auth_pam=yes
2946 else
2947 if test "$auth_pam" = "yes"; then
2948 feature_not_found "PAM" "Install PAM development package"
2949 else
2950 auth_pam=no
2955 ##########################################
2956 # getifaddrs (for tests/test-io-channel-socket )
2958 have_ifaddrs_h=yes
2959 if ! check_include "ifaddrs.h" ; then
2960 have_ifaddrs_h=no
2963 ##########################################
2964 # VTE probe
2966 if test "$vte" != "no"; then
2967 vteminversion="0.32.0"
2968 if $pkg_config --exists "vte-2.91"; then
2969 vtepackage="vte-2.91"
2970 else
2971 vtepackage="vte-2.90"
2973 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2974 vte_cflags=$($pkg_config --cflags $vtepackage)
2975 vte_libs=$($pkg_config --libs $vtepackage)
2976 vteversion=$($pkg_config --modversion $vtepackage)
2977 vte="yes"
2978 elif test "$vte" = "yes"; then
2979 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2980 else
2981 vte="no"
2985 ##########################################
2986 # SDL probe
2988 # Look for sdl configuration program (pkg-config or sdl2-config). Try
2989 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
2991 sdl_probe ()
2993 if $pkg_config sdl2 --exists; then
2994 sdlconfig="$pkg_config sdl2"
2995 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2996 elif has "$sdl2_config"; then
2997 sdlconfig="$sdl2_config"
2998 sdlversion=$($sdlconfig --version)
2999 else
3000 if test "$sdl" = "yes" ; then
3001 feature_not_found "sdl" "Install SDL2-devel"
3003 sdl=no
3004 # no need to do the rest
3005 return
3007 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3008 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3011 cat > $TMPC << EOF
3012 #include <SDL.h>
3013 #undef main /* We don't want SDL to override our main() */
3014 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3016 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3017 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3018 if test "$static" = "yes" ; then
3019 if $pkg_config sdl2 --exists; then
3020 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3021 else
3022 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3024 else
3025 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3027 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3028 sdl=yes
3030 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3031 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3032 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3033 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3034 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3036 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3038 else
3039 sdl=no
3041 fi # static link
3042 else # sdl not found
3043 if test "$sdl" = "yes" ; then
3044 feature_not_found "sdl" "Install SDL2 devel"
3046 sdl=no
3047 fi # sdl compile test
3050 sdl_image_probe ()
3052 if test "$sdl_image" != "no" ; then
3053 if $pkg_config SDL2_image --exists; then
3054 if test "$static" = "yes"; then
3055 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3056 else
3057 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3059 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3060 sdl_image=yes
3062 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3063 sdl_libs="$sdl_libs $sdl_image_libs"
3064 else
3065 if test "$sdl_image" = "yes" ; then
3066 feature_not_found "sdl_image" "Install SDL Image devel"
3067 else
3068 sdl_image=no
3074 if test "$sdl" != "no" ; then
3075 sdl_probe
3078 if test "$sdl" = "yes" ; then
3079 sdl_image_probe
3080 else
3081 if test "$sdl_image" = "yes"; then
3082 echo "warning: SDL Image requested, but SDL is not available, disabling"
3084 sdl_image=no
3087 if test "$sdl" = "yes" ; then
3088 cat > $TMPC <<EOF
3089 #include <SDL.h>
3090 #if defined(SDL_VIDEO_DRIVER_X11)
3091 #include <X11/XKBlib.h>
3092 #else
3093 #error No x11 support
3094 #endif
3095 int main(void) { return 0; }
3097 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3098 need_x11=yes
3099 sdl_cflags="$sdl_cflags $x11_cflags"
3100 sdl_libs="$sdl_libs $x11_libs"
3104 ##########################################
3105 # RDMA needs OpenFabrics libraries
3106 if test "$rdma" != "no" ; then
3107 cat > $TMPC <<EOF
3108 #include <rdma/rdma_cma.h>
3109 int main(void) { return 0; }
3111 rdma_libs="-lrdmacm -libverbs -libumad"
3112 if compile_prog "" "$rdma_libs" ; then
3113 rdma="yes"
3114 libs_softmmu="$libs_softmmu $rdma_libs"
3115 else
3116 if test "$rdma" = "yes" ; then
3117 error_exit \
3118 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3119 " Your options:" \
3120 " (1) Fast: Install infiniband packages (devel) from your distro." \
3121 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3122 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3124 rdma="no"
3128 ##########################################
3129 # PVRDMA detection
3131 cat > $TMPC <<EOF &&
3132 #include <sys/mman.h>
3135 main(void)
3137 char buf = 0;
3138 void *addr = &buf;
3139 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3141 return 0;
3145 if test "$rdma" = "yes" ; then
3146 case "$pvrdma" in
3148 if compile_prog "" ""; then
3149 pvrdma="yes"
3150 else
3151 pvrdma="no"
3154 "yes")
3155 if ! compile_prog "" ""; then
3156 error_exit "PVRDMA is not supported since mremap is not implemented"
3158 pvrdma="yes"
3160 "no")
3161 pvrdma="no"
3163 esac
3164 else
3165 if test "$pvrdma" = "yes" ; then
3166 error_exit "PVRDMA requires rdma suppport"
3168 pvrdma="no"
3171 ##########################################
3172 # VNC SASL detection
3173 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3174 cat > $TMPC <<EOF
3175 #include <sasl/sasl.h>
3176 #include <stdio.h>
3177 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3179 # Assuming Cyrus-SASL installed in /usr prefix
3180 vnc_sasl_cflags=""
3181 vnc_sasl_libs="-lsasl2"
3182 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3183 vnc_sasl=yes
3184 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3185 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3186 else
3187 if test "$vnc_sasl" = "yes" ; then
3188 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3190 vnc_sasl=no
3194 ##########################################
3195 # VNC JPEG detection
3196 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3197 cat > $TMPC <<EOF
3198 #include <stdio.h>
3199 #include <jpeglib.h>
3200 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3202 vnc_jpeg_cflags=""
3203 vnc_jpeg_libs="-ljpeg"
3204 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3205 vnc_jpeg=yes
3206 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3207 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3208 else
3209 if test "$vnc_jpeg" = "yes" ; then
3210 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3212 vnc_jpeg=no
3216 ##########################################
3217 # VNC PNG detection
3218 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3219 cat > $TMPC <<EOF
3220 //#include <stdio.h>
3221 #include <png.h>
3222 #include <stddef.h>
3223 int main(void) {
3224 png_structp png_ptr;
3225 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3226 return png_ptr != 0;
3229 if $pkg_config libpng --exists; then
3230 vnc_png_cflags=$($pkg_config libpng --cflags)
3231 vnc_png_libs=$($pkg_config libpng --libs)
3232 else
3233 vnc_png_cflags=""
3234 vnc_png_libs="-lpng"
3236 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3237 vnc_png=yes
3238 libs_softmmu="$vnc_png_libs $libs_softmmu"
3239 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3240 else
3241 if test "$vnc_png" = "yes" ; then
3242 feature_not_found "vnc-png" "Install libpng devel"
3244 vnc_png=no
3248 ##########################################
3249 # xkbcommon probe
3250 if test "$xkbcommon" != "no" ; then
3251 if $pkg_config xkbcommon --exists; then
3252 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3253 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3254 xkbcommon=yes
3255 else
3256 if test "$xkbcommon" = "yes" ; then
3257 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3259 xkbcommon=no
3264 ##########################################
3265 # xfsctl() probe, used for file-posix.c
3266 if test "$xfs" != "no" ; then
3267 cat > $TMPC << EOF
3268 #include <stddef.h> /* NULL */
3269 #include <xfs/xfs.h>
3270 int main(void)
3272 xfsctl(NULL, 0, 0, NULL);
3273 return 0;
3276 if compile_prog "" "" ; then
3277 xfs="yes"
3278 else
3279 if test "$xfs" = "yes" ; then
3280 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3282 xfs=no
3286 ##########################################
3287 # vde libraries probe
3288 if test "$vde" != "no" ; then
3289 vde_libs="-lvdeplug"
3290 cat > $TMPC << EOF
3291 #include <libvdeplug.h>
3292 int main(void)
3294 struct vde_open_args a = {0, 0, 0};
3295 char s[] = "";
3296 vde_open(s, s, &a);
3297 return 0;
3300 if compile_prog "" "$vde_libs" ; then
3301 vde=yes
3302 else
3303 if test "$vde" = "yes" ; then
3304 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3306 vde=no
3310 ##########################################
3311 # netmap support probe
3312 # Apart from looking for netmap headers, we make sure that the host API version
3313 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3314 # a minor/major version number. Minor new features will be marked with values up
3315 # to 15, and if something happens that requires a change to the backend we will
3316 # move above 15, submit the backend fixes and modify this two bounds.
3317 if test "$netmap" != "no" ; then
3318 cat > $TMPC << EOF
3319 #include <inttypes.h>
3320 #include <net/if.h>
3321 #include <net/netmap.h>
3322 #include <net/netmap_user.h>
3323 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3324 #error
3325 #endif
3326 int main(void) { return 0; }
3328 if compile_prog "" "" ; then
3329 netmap=yes
3330 else
3331 if test "$netmap" = "yes" ; then
3332 feature_not_found "netmap"
3334 netmap=no
3338 ##########################################
3339 # libcap-ng library probe
3340 if test "$cap_ng" != "no" ; then
3341 cap_libs="-lcap-ng"
3342 cat > $TMPC << EOF
3343 #include <cap-ng.h>
3344 int main(void)
3346 capng_capability_to_name(CAPNG_EFFECTIVE);
3347 return 0;
3350 if compile_prog "" "$cap_libs" ; then
3351 cap_ng=yes
3352 libs_tools="$cap_libs $libs_tools"
3353 else
3354 if test "$cap_ng" = "yes" ; then
3355 feature_not_found "cap_ng" "Install libcap-ng devel"
3357 cap_ng=no
3361 ##########################################
3362 # Sound support libraries probe
3364 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3365 for drv in $audio_drv_list; do
3366 case $drv in
3367 alsa | try-alsa)
3368 if $pkg_config alsa --exists; then
3369 alsa_libs=$($pkg_config alsa --libs)
3370 if test "$drv" = "try-alsa"; then
3371 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3373 else
3374 if test "$drv" = "try-alsa"; then
3375 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3376 else
3377 error_exit "$drv check failed" \
3378 "Make sure to have the $drv libs and headers installed."
3383 pa | try-pa)
3384 if $pkg_config libpulse --exists; then
3385 pulse_libs=$($pkg_config libpulse --libs)
3386 audio_pt_int="yes"
3387 if test "$drv" = "try-pa"; then
3388 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3390 else
3391 if test "$drv" = "try-pa"; then
3392 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3393 else
3394 error_exit "$drv check failed" \
3395 "Make sure to have the $drv libs and headers installed."
3400 sdl)
3401 if test "$sdl" = "no"; then
3402 error_exit "sdl not found or disabled, can not use sdl audio driver"
3406 try-sdl)
3407 if test "$sdl" = "no"; then
3408 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3409 else
3410 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3414 coreaudio)
3415 coreaudio_libs="-framework CoreAudio"
3418 dsound)
3419 dsound_libs="-lole32 -ldxguid"
3420 audio_win_int="yes"
3423 oss)
3424 oss_libs="$oss_lib"
3428 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3429 error_exit "Unknown driver '$drv' selected" \
3430 "Possible drivers are: $audio_possible_drivers"
3433 esac
3434 done
3436 ##########################################
3437 # BrlAPI probe
3439 if test "$brlapi" != "no" ; then
3440 brlapi_libs="-lbrlapi"
3441 cat > $TMPC << EOF
3442 #include <brlapi.h>
3443 #include <stddef.h>
3444 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3446 if compile_prog "" "$brlapi_libs" ; then
3447 brlapi=yes
3448 else
3449 if test "$brlapi" = "yes" ; then
3450 feature_not_found "brlapi" "Install brlapi devel"
3452 brlapi=no
3456 ##########################################
3457 # iconv probe
3458 if test "$iconv" != "no" ; then
3459 cat > $TMPC << EOF
3460 #include <iconv.h>
3461 int main(void) {
3462 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3463 return conv != (iconv_t) -1;
3466 iconv_prefix_list="/usr/local:/usr"
3467 iconv_lib_list=":-liconv"
3468 IFS=:
3469 for iconv_prefix in $iconv_prefix_list; do
3470 IFS=:
3471 iconv_cflags="-I$iconv_prefix/include"
3472 iconv_ldflags="-L$iconv_prefix/lib"
3473 for iconv_link in $iconv_lib_list; do
3474 unset IFS
3475 iconv_lib="$iconv_ldflags $iconv_link"
3476 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3477 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3478 iconv_found=yes
3479 break
3481 done
3482 if test "$iconv_found" = yes ; then
3483 break
3485 done
3486 if test "$iconv_found" = "yes" ; then
3487 iconv=yes
3488 else
3489 if test "$iconv" = "yes" ; then
3490 feature_not_found "iconv" "Install iconv devel"
3492 iconv=no
3496 ##########################################
3497 # curses probe
3498 if test "$iconv" = "no" ; then
3499 # curses will need iconv
3500 curses=no
3502 if test "$curses" != "no" ; then
3503 if test "$mingw32" = "yes" ; then
3504 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3505 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3506 else
3507 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3508 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3510 curses_found=no
3511 cat > $TMPC << EOF
3512 #include <locale.h>
3513 #include <curses.h>
3514 #include <wchar.h>
3515 #include <langinfo.h>
3516 int main(void) {
3517 const char *codeset;
3518 wchar_t wch = L'w';
3519 setlocale(LC_ALL, "");
3520 resize_term(0, 0);
3521 addwstr(L"wide chars\n");
3522 addnwstr(&wch, 1);
3523 add_wch(WACS_DEGREE);
3524 codeset = nl_langinfo(CODESET);
3525 return codeset != 0;
3528 IFS=:
3529 for curses_inc in $curses_inc_list; do
3530 # Make sure we get the wide character prototypes
3531 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3532 IFS=:
3533 for curses_lib in $curses_lib_list; do
3534 unset IFS
3535 if compile_prog "$curses_inc" "$curses_lib" ; then
3536 curses_found=yes
3537 break
3539 done
3540 if test "$curses_found" = yes ; then
3541 break
3543 done
3544 unset IFS
3545 if test "$curses_found" = "yes" ; then
3546 curses=yes
3547 else
3548 if test "$curses" = "yes" ; then
3549 feature_not_found "curses" "Install ncurses devel"
3551 curses=no
3555 ##########################################
3556 # curl probe
3557 if test "$curl" != "no" ; then
3558 if $pkg_config libcurl --exists; then
3559 curlconfig="$pkg_config libcurl"
3560 else
3561 curlconfig=curl-config
3563 cat > $TMPC << EOF
3564 #include <curl/curl.h>
3565 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3567 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3568 curl_libs=$($curlconfig --libs 2>/dev/null)
3569 if compile_prog "$curl_cflags" "$curl_libs" ; then
3570 curl=yes
3571 else
3572 if test "$curl" = "yes" ; then
3573 feature_not_found "curl" "Install libcurl devel"
3575 curl=no
3577 fi # test "$curl"
3579 ##########################################
3580 # bluez support probe
3581 if test "$bluez" != "no" ; then
3582 cat > $TMPC << EOF
3583 #include <bluetooth/bluetooth.h>
3584 int main(void) { return bt_error(0); }
3586 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3587 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3588 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3589 bluez=yes
3590 libs_softmmu="$bluez_libs $libs_softmmu"
3591 else
3592 if test "$bluez" = "yes" ; then
3593 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3595 bluez="no"
3599 ##########################################
3600 # glib support probe
3602 glib_req_ver=2.48
3603 glib_modules=gthread-2.0
3604 if test "$modules" = yes; then
3605 glib_modules="$glib_modules gmodule-export-2.0"
3608 # This workaround is required due to a bug in pkg-config file for glib as it
3609 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3611 if test "$static" = yes && test "$mingw32" = yes; then
3612 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3615 for i in $glib_modules; do
3616 if $pkg_config --atleast-version=$glib_req_ver $i; then
3617 glib_cflags=$($pkg_config --cflags $i)
3618 glib_libs=$($pkg_config --libs $i)
3619 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3620 LIBS="$glib_libs $LIBS"
3621 libs_qga="$glib_libs $libs_qga"
3622 else
3623 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3625 done
3627 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3628 gio=yes
3629 gio_cflags=$($pkg_config --cflags gio-2.0)
3630 gio_libs=$($pkg_config --libs gio-2.0)
3631 else
3632 gio=no
3635 # Sanity check that the current size_t matches the
3636 # size that glib thinks it should be. This catches
3637 # problems on multi-arch where people try to build
3638 # 32-bit QEMU while pointing at 64-bit glib headers
3639 cat > $TMPC <<EOF
3640 #include <glib.h>
3641 #include <unistd.h>
3643 #define QEMU_BUILD_BUG_ON(x) \
3644 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3646 int main(void) {
3647 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3648 return 0;
3652 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3653 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3654 "You probably need to set PKG_CONFIG_LIBDIR"\
3655 "to point to the right pkg-config files for your"\
3656 "build target"
3659 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3660 cat > $TMPC << EOF
3661 #include <glib.h>
3662 int main(void) { return 0; }
3664 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3665 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3666 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3667 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3671 #########################################
3672 # zlib check
3674 if test "$zlib" != "no" ; then
3675 if $pkg_config --exists zlib; then
3676 zlib_cflags=$($pkg_config --cflags zlib)
3677 zlib_libs=$($pkg_config --libs zlib)
3678 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3679 LIBS="$zlib_libs $LIBS"
3680 else
3681 cat > $TMPC << EOF
3682 #include <zlib.h>
3683 int main(void) { zlibVersion(); return 0; }
3685 if compile_prog "" "-lz" ; then
3686 LIBS="$LIBS -lz"
3687 else
3688 error_exit "zlib check failed" \
3689 "Make sure to have the zlib libs and headers installed."
3694 ##########################################
3695 # SHA command probe for modules
3696 if test "$modules" = yes; then
3697 shacmd_probe="sha1sum sha1 shasum"
3698 for c in $shacmd_probe; do
3699 if has $c; then
3700 shacmd="$c"
3701 break
3703 done
3704 if test "$shacmd" = ""; then
3705 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3709 ##########################################
3710 # pixman support probe
3712 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3713 pixman_cflags=
3714 pixman_libs=
3715 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3716 pixman_cflags=$($pkg_config --cflags pixman-1)
3717 pixman_libs=$($pkg_config --libs pixman-1)
3718 else
3719 error_exit "pixman >= 0.21.8 not present." \
3720 "Please install the pixman devel package."
3723 ##########################################
3724 # libmpathpersist probe
3726 if test "$mpath" != "no" ; then
3727 # probe for the new API
3728 cat > $TMPC <<EOF
3729 #include <libudev.h>
3730 #include <mpath_persist.h>
3731 unsigned mpath_mx_alloc_len = 1024;
3732 int logsink;
3733 static struct config *multipath_conf;
3734 extern struct udev *udev;
3735 extern struct config *get_multipath_config(void);
3736 extern void put_multipath_config(struct config *conf);
3737 struct udev *udev;
3738 struct config *get_multipath_config(void) { return multipath_conf; }
3739 void put_multipath_config(struct config *conf) { }
3741 int main(void) {
3742 udev = udev_new();
3743 multipath_conf = mpath_lib_init();
3744 return 0;
3747 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3748 mpathpersist=yes
3749 mpathpersist_new_api=yes
3750 else
3751 # probe for the old API
3752 cat > $TMPC <<EOF
3753 #include <libudev.h>
3754 #include <mpath_persist.h>
3755 unsigned mpath_mx_alloc_len = 1024;
3756 int logsink;
3757 int main(void) {
3758 struct udev *udev = udev_new();
3759 mpath_lib_init(udev);
3760 return 0;
3763 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3764 mpathpersist=yes
3765 mpathpersist_new_api=no
3766 else
3767 mpathpersist=no
3770 else
3771 mpathpersist=no
3774 ##########################################
3775 # libcap probe
3777 if test "$cap" != "no" ; then
3778 cat > $TMPC <<EOF
3779 #include <stdio.h>
3780 #include <sys/capability.h>
3781 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3783 if compile_prog "" "-lcap" ; then
3784 cap=yes
3785 else
3786 cap=no
3790 ##########################################
3791 # pthread probe
3792 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3794 pthread=no
3795 cat > $TMPC << EOF
3796 #include <pthread.h>
3797 static void *f(void *p) { return NULL; }
3798 int main(void) {
3799 pthread_t thread;
3800 pthread_create(&thread, 0, f, 0);
3801 return 0;
3804 if compile_prog "" "" ; then
3805 pthread=yes
3806 else
3807 for pthread_lib in $PTHREADLIBS_LIST; do
3808 if compile_prog "" "$pthread_lib" ; then
3809 pthread=yes
3810 found=no
3811 for lib_entry in $LIBS; do
3812 if test "$lib_entry" = "$pthread_lib"; then
3813 found=yes
3814 break
3816 done
3817 if test "$found" = "no"; then
3818 LIBS="$pthread_lib $LIBS"
3819 libs_qga="$pthread_lib $libs_qga"
3821 PTHREAD_LIB="$pthread_lib"
3822 break
3824 done
3827 if test "$mingw32" != yes && test "$pthread" = no; then
3828 error_exit "pthread check failed" \
3829 "Make sure to have the pthread libs and headers installed."
3832 # check for pthread_setname_np with thread id
3833 pthread_setname_np_w_tid=no
3834 cat > $TMPC << EOF
3835 #include <pthread.h>
3837 static void *f(void *p) { return NULL; }
3838 int main(void)
3840 pthread_t thread;
3841 pthread_create(&thread, 0, f, 0);
3842 pthread_setname_np(thread, "QEMU");
3843 return 0;
3846 if compile_prog "" "$pthread_lib" ; then
3847 pthread_setname_np_w_tid=yes
3850 # check for pthread_setname_np without thread id
3851 pthread_setname_np_wo_tid=no
3852 cat > $TMPC << EOF
3853 #include <pthread.h>
3855 static void *f(void *p) { pthread_setname_np("QEMU"); }
3856 int main(void)
3858 pthread_t thread;
3859 pthread_create(&thread, 0, f, 0);
3860 return 0;
3863 if compile_prog "" "$pthread_lib" ; then
3864 pthread_setname_np_wo_tid=yes
3867 ##########################################
3868 # rbd probe
3869 if test "$rbd" != "no" ; then
3870 cat > $TMPC <<EOF
3871 #include <stdio.h>
3872 #include <rbd/librbd.h>
3873 int main(void) {
3874 rados_t cluster;
3875 rados_create(&cluster, NULL);
3876 return 0;
3879 rbd_libs="-lrbd -lrados"
3880 if compile_prog "" "$rbd_libs" ; then
3881 rbd=yes
3882 else
3883 if test "$rbd" = "yes" ; then
3884 feature_not_found "rados block device" "Install librbd/ceph devel"
3886 rbd=no
3890 ##########################################
3891 # libssh probe
3892 if test "$libssh" != "no" ; then
3893 if $pkg_config --exists libssh; then
3894 libssh_cflags=$($pkg_config libssh --cflags)
3895 libssh_libs=$($pkg_config libssh --libs)
3896 libssh=yes
3897 else
3898 if test "$libssh" = "yes" ; then
3899 error_exit "libssh required for --enable-libssh"
3901 libssh=no
3905 ##########################################
3906 # Check for libssh 0.8
3907 # This is done like this instead of using the LIBSSH_VERSION_* and
3908 # SSH_VERSION_* macros because some distributions in the past shipped
3909 # snapshots of the future 0.8 from Git, and those snapshots did not
3910 # have updated version numbers (still referring to 0.7.0).
3912 if test "$libssh" = "yes"; then
3913 cat > $TMPC <<EOF
3914 #include <libssh/libssh.h>
3915 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3917 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3918 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3922 ##########################################
3923 # linux-aio probe
3925 if test "$linux_aio" != "no" ; then
3926 cat > $TMPC <<EOF
3927 #include <libaio.h>
3928 #include <sys/eventfd.h>
3929 #include <stddef.h>
3930 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3932 if compile_prog "" "-laio" ; then
3933 linux_aio=yes
3934 else
3935 if test "$linux_aio" = "yes" ; then
3936 feature_not_found "linux AIO" "Install libaio devel"
3938 linux_aio=no
3942 ##########################################
3943 # TPM emulation is only on POSIX
3945 if test "$tpm" = ""; then
3946 if test "$mingw32" = "yes"; then
3947 tpm=no
3948 else
3949 tpm=yes
3951 elif test "$tpm" = "yes"; then
3952 if test "$mingw32" = "yes" ; then
3953 error_exit "TPM emulation only available on POSIX systems"
3957 ##########################################
3958 # attr probe
3960 if test "$attr" != "no" ; then
3961 cat > $TMPC <<EOF
3962 #include <stdio.h>
3963 #include <sys/types.h>
3964 #ifdef CONFIG_LIBATTR
3965 #include <attr/xattr.h>
3966 #else
3967 #include <sys/xattr.h>
3968 #endif
3969 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3971 if compile_prog "" "" ; then
3972 attr=yes
3973 # Older distros have <attr/xattr.h>, and need -lattr:
3974 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3975 attr=yes
3976 LIBS="-lattr $LIBS"
3977 libattr=yes
3978 else
3979 if test "$attr" = "yes" ; then
3980 feature_not_found "ATTR" "Install libc6 or libattr devel"
3982 attr=no
3986 ##########################################
3987 # iovec probe
3988 cat > $TMPC <<EOF
3989 #include <sys/types.h>
3990 #include <sys/uio.h>
3991 #include <unistd.h>
3992 int main(void) { return sizeof(struct iovec); }
3994 iovec=no
3995 if compile_prog "" "" ; then
3996 iovec=yes
3999 ##########################################
4000 # preadv probe
4001 cat > $TMPC <<EOF
4002 #include <sys/types.h>
4003 #include <sys/uio.h>
4004 #include <unistd.h>
4005 int main(void) { return preadv(0, 0, 0, 0); }
4007 preadv=no
4008 if compile_prog "" "" ; then
4009 preadv=yes
4012 ##########################################
4013 # fdt probe
4014 # fdt support is mandatory for at least some target architectures,
4015 # so insist on it if we're building those system emulators.
4016 fdt_required=no
4017 for target in $target_list; do
4018 case $target in
4019 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4020 fdt_required=yes
4022 esac
4023 done
4025 if test "$fdt_required" = "yes"; then
4026 if test "$fdt" = "no"; then
4027 error_exit "fdt disabled but some requested targets require it." \
4028 "You can turn off fdt only if you also disable all the system emulation" \
4029 "targets which need it (by specifying a cut down --target-list)."
4031 fdt=yes
4034 if test "$fdt" != "no" ; then
4035 fdt_libs="-lfdt"
4036 # explicitly check for libfdt_env.h as it is missing in some stable installs
4037 # and test for required functions to make sure we are on a version >= 1.4.2
4038 cat > $TMPC << EOF
4039 #include <libfdt.h>
4040 #include <libfdt_env.h>
4041 int main(void) { fdt_check_full(NULL, 0); return 0; }
4043 if compile_prog "" "$fdt_libs" ; then
4044 # system DTC is good - use it
4045 fdt=system
4046 else
4047 # have GIT checkout, so activate dtc submodule
4048 if test -e "${source_path}/.git" ; then
4049 git_submodules="${git_submodules} dtc"
4051 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4052 fdt=git
4053 mkdir -p dtc
4054 if [ "$pwd_is_source_path" != "y" ] ; then
4055 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4056 symlink "$source_path/dtc/scripts" "dtc/scripts"
4058 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4059 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4060 fdt_libs="$fdt_libs"
4061 elif test "$fdt" = "yes" ; then
4062 # Not a git build & no libfdt found, prompt for system install
4063 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4064 "Please install the DTC (libfdt) devel package"
4065 else
4066 # don't have and don't want
4067 fdt_libs=
4068 fdt=no
4073 libs_softmmu="$libs_softmmu $fdt_libs"
4075 ##########################################
4076 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4078 gbm="no"
4079 if $pkg_config gbm; then
4080 gbm_cflags="$($pkg_config --cflags gbm)"
4081 gbm_libs="$($pkg_config --libs gbm)"
4082 gbm="yes"
4085 if test "$opengl" != "no" ; then
4086 opengl_pkgs="epoxy gbm"
4087 if $pkg_config $opengl_pkgs; then
4088 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4089 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4090 opengl=yes
4091 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4092 gtk_gl="yes"
4094 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4095 else
4096 if test "$opengl" = "yes" ; then
4097 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4099 opengl_cflags=""
4100 opengl_libs=""
4101 opengl=no
4105 if test "$opengl" = "yes"; then
4106 cat > $TMPC << EOF
4107 #include <epoxy/egl.h>
4108 #ifndef EGL_MESA_image_dma_buf_export
4109 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4110 #endif
4111 int main(void) { return 0; }
4113 if compile_prog "" "" ; then
4114 opengl_dmabuf=yes
4118 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4119 for target in $target_list; do
4120 case $target in
4121 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4122 need_x11=yes
4124 esac
4125 done
4128 ##########################################
4129 # libxml2 probe
4130 if test "$libxml2" != "no" ; then
4131 if $pkg_config --exists libxml-2.0; then
4132 libxml2="yes"
4133 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4134 libxml2_libs=$($pkg_config --libs libxml-2.0)
4135 else
4136 if test "$libxml2" = "yes"; then
4137 feature_not_found "libxml2" "Install libxml2 devel"
4139 libxml2="no"
4143 ##########################################
4144 # glusterfs probe
4145 if test "$glusterfs" != "no" ; then
4146 if $pkg_config --atleast-version=3 glusterfs-api; then
4147 glusterfs="yes"
4148 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4149 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4150 if $pkg_config --atleast-version=4 glusterfs-api; then
4151 glusterfs_xlator_opt="yes"
4153 if $pkg_config --atleast-version=5 glusterfs-api; then
4154 glusterfs_discard="yes"
4156 if $pkg_config --atleast-version=6 glusterfs-api; then
4157 glusterfs_fallocate="yes"
4158 glusterfs_zerofill="yes"
4160 cat > $TMPC << EOF
4161 #include <glusterfs/api/glfs.h>
4164 main(void)
4166 /* new glfs_ftruncate() passes two additional args */
4167 return glfs_ftruncate(NULL, 0, NULL, NULL);
4170 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4171 glusterfs_ftruncate_has_stat="yes"
4173 cat > $TMPC << EOF
4174 #include <glusterfs/api/glfs.h>
4176 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4177 static void
4178 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4182 main(void)
4184 glfs_io_cbk iocb = &glusterfs_iocb;
4185 iocb(NULL, 0 , NULL, NULL, NULL);
4186 return 0;
4189 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4190 glusterfs_iocb_has_stat="yes"
4192 else
4193 if test "$glusterfs" = "yes" ; then
4194 feature_not_found "GlusterFS backend support" \
4195 "Install glusterfs-api devel >= 3"
4197 glusterfs="no"
4201 # Check for inotify functions when we are building linux-user
4202 # emulator. This is done because older glibc versions don't
4203 # have syscall stubs for these implemented. In that case we
4204 # don't provide them even if kernel supports them.
4206 inotify=no
4207 cat > $TMPC << EOF
4208 #include <sys/inotify.h>
4211 main(void)
4213 /* try to start inotify */
4214 return inotify_init();
4217 if compile_prog "" "" ; then
4218 inotify=yes
4221 inotify1=no
4222 cat > $TMPC << EOF
4223 #include <sys/inotify.h>
4226 main(void)
4228 /* try to start inotify */
4229 return inotify_init1(0);
4232 if compile_prog "" "" ; then
4233 inotify1=yes
4236 # check if pipe2 is there
4237 pipe2=no
4238 cat > $TMPC << EOF
4239 #include <unistd.h>
4240 #include <fcntl.h>
4242 int main(void)
4244 int pipefd[2];
4245 return pipe2(pipefd, O_CLOEXEC);
4248 if compile_prog "" "" ; then
4249 pipe2=yes
4252 # check if accept4 is there
4253 accept4=no
4254 cat > $TMPC << EOF
4255 #include <sys/socket.h>
4256 #include <stddef.h>
4258 int main(void)
4260 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4261 return 0;
4264 if compile_prog "" "" ; then
4265 accept4=yes
4268 # check if tee/splice is there. vmsplice was added same time.
4269 splice=no
4270 cat > $TMPC << EOF
4271 #include <unistd.h>
4272 #include <fcntl.h>
4273 #include <limits.h>
4275 int main(void)
4277 int len, fd = 0;
4278 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4279 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4280 return 0;
4283 if compile_prog "" "" ; then
4284 splice=yes
4287 ##########################################
4288 # libnuma probe
4290 if test "$numa" != "no" ; then
4291 cat > $TMPC << EOF
4292 #include <numa.h>
4293 int main(void) { return numa_available(); }
4296 if compile_prog "" "-lnuma" ; then
4297 numa=yes
4298 libs_softmmu="-lnuma $libs_softmmu"
4299 else
4300 if test "$numa" = "yes" ; then
4301 feature_not_found "numa" "install numactl devel"
4303 numa=no
4307 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4308 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4309 exit 1
4312 # Even if malloc_trim() is available, these non-libc memory allocators
4313 # do not support it.
4314 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4315 if test "$malloc_trim" = "yes" ; then
4316 echo "Disabling malloc_trim with non-libc memory allocator"
4318 malloc_trim="no"
4321 #######################################
4322 # malloc_trim
4324 if test "$malloc_trim" != "no" ; then
4325 cat > $TMPC << EOF
4326 #include <malloc.h>
4327 int main(void) { malloc_trim(0); return 0; }
4329 if compile_prog "" "" ; then
4330 malloc_trim="yes"
4331 else
4332 malloc_trim="no"
4336 ##########################################
4337 # tcmalloc probe
4339 if test "$tcmalloc" = "yes" ; then
4340 cat > $TMPC << EOF
4341 #include <stdlib.h>
4342 int main(void) { malloc(1); return 0; }
4345 if compile_prog "" "-ltcmalloc" ; then
4346 LIBS="-ltcmalloc $LIBS"
4347 else
4348 feature_not_found "tcmalloc" "install gperftools devel"
4352 ##########################################
4353 # jemalloc probe
4355 if test "$jemalloc" = "yes" ; then
4356 cat > $TMPC << EOF
4357 #include <stdlib.h>
4358 int main(void) { malloc(1); return 0; }
4361 if compile_prog "" "-ljemalloc" ; then
4362 LIBS="-ljemalloc $LIBS"
4363 else
4364 feature_not_found "jemalloc" "install jemalloc devel"
4368 ##########################################
4369 # signalfd probe
4370 signalfd="no"
4371 cat > $TMPC << EOF
4372 #include <unistd.h>
4373 #include <sys/syscall.h>
4374 #include <signal.h>
4375 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4378 if compile_prog "" "" ; then
4379 signalfd=yes
4382 # check if optreset global is declared by <getopt.h>
4383 optreset="no"
4384 cat > $TMPC << EOF
4385 #include <getopt.h>
4386 int main(void) { return optreset; }
4389 if compile_prog "" "" ; then
4390 optreset=yes
4393 # check if eventfd is supported
4394 eventfd=no
4395 cat > $TMPC << EOF
4396 #include <sys/eventfd.h>
4398 int main(void)
4400 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4403 if compile_prog "" "" ; then
4404 eventfd=yes
4407 # check if memfd is supported
4408 memfd=no
4409 cat > $TMPC << EOF
4410 #include <sys/mman.h>
4412 int main(void)
4414 return memfd_create("foo", MFD_ALLOW_SEALING);
4417 if compile_prog "" "" ; then
4418 memfd=yes
4421 # check for usbfs
4422 have_usbfs=no
4423 if test "$linux_user" = "yes"; then
4424 cat > $TMPC << EOF
4425 #include <linux/usbdevice_fs.h>
4427 #ifndef USBDEVFS_GET_CAPABILITIES
4428 #error "USBDEVFS_GET_CAPABILITIES undefined"
4429 #endif
4431 #ifndef USBDEVFS_DISCONNECT_CLAIM
4432 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4433 #endif
4435 int main(void)
4437 return 0;
4440 if compile_prog "" ""; then
4441 have_usbfs=yes
4445 # check for fallocate
4446 fallocate=no
4447 cat > $TMPC << EOF
4448 #include <fcntl.h>
4450 int main(void)
4452 fallocate(0, 0, 0, 0);
4453 return 0;
4456 if compile_prog "" "" ; then
4457 fallocate=yes
4460 # check for fallocate hole punching
4461 fallocate_punch_hole=no
4462 cat > $TMPC << EOF
4463 #include <fcntl.h>
4464 #include <linux/falloc.h>
4466 int main(void)
4468 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4469 return 0;
4472 if compile_prog "" "" ; then
4473 fallocate_punch_hole=yes
4476 # check that fallocate supports range zeroing inside the file
4477 fallocate_zero_range=no
4478 cat > $TMPC << EOF
4479 #include <fcntl.h>
4480 #include <linux/falloc.h>
4482 int main(void)
4484 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4485 return 0;
4488 if compile_prog "" "" ; then
4489 fallocate_zero_range=yes
4492 # check for posix_fallocate
4493 posix_fallocate=no
4494 cat > $TMPC << EOF
4495 #include <fcntl.h>
4497 int main(void)
4499 posix_fallocate(0, 0, 0);
4500 return 0;
4503 if compile_prog "" "" ; then
4504 posix_fallocate=yes
4507 # check for sync_file_range
4508 sync_file_range=no
4509 cat > $TMPC << EOF
4510 #include <fcntl.h>
4512 int main(void)
4514 sync_file_range(0, 0, 0, 0);
4515 return 0;
4518 if compile_prog "" "" ; then
4519 sync_file_range=yes
4522 # check for linux/fiemap.h and FS_IOC_FIEMAP
4523 fiemap=no
4524 cat > $TMPC << EOF
4525 #include <sys/ioctl.h>
4526 #include <linux/fs.h>
4527 #include <linux/fiemap.h>
4529 int main(void)
4531 ioctl(0, FS_IOC_FIEMAP, 0);
4532 return 0;
4535 if compile_prog "" "" ; then
4536 fiemap=yes
4539 # check for dup3
4540 dup3=no
4541 cat > $TMPC << EOF
4542 #include <unistd.h>
4544 int main(void)
4546 dup3(0, 0, 0);
4547 return 0;
4550 if compile_prog "" "" ; then
4551 dup3=yes
4554 # check for ppoll support
4555 ppoll=no
4556 cat > $TMPC << EOF
4557 #include <poll.h>
4559 int main(void)
4561 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4562 ppoll(&pfd, 1, 0, 0);
4563 return 0;
4566 if compile_prog "" "" ; then
4567 ppoll=yes
4570 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4571 prctl_pr_set_timerslack=no
4572 cat > $TMPC << EOF
4573 #include <sys/prctl.h>
4575 int main(void)
4577 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4578 return 0;
4581 if compile_prog "" "" ; then
4582 prctl_pr_set_timerslack=yes
4585 # check for epoll support
4586 epoll=no
4587 cat > $TMPC << EOF
4588 #include <sys/epoll.h>
4590 int main(void)
4592 epoll_create(0);
4593 return 0;
4596 if compile_prog "" "" ; then
4597 epoll=yes
4600 # epoll_create1 is a later addition
4601 # so we must check separately for its presence
4602 epoll_create1=no
4603 cat > $TMPC << EOF
4604 #include <sys/epoll.h>
4606 int main(void)
4608 /* Note that we use epoll_create1 as a value, not as
4609 * a function being called. This is necessary so that on
4610 * old SPARC glibc versions where the function was present in
4611 * the library but not declared in the header file we will
4612 * fail the configure check. (Otherwise we will get a compiler
4613 * warning but not an error, and will proceed to fail the
4614 * qemu compile where we compile with -Werror.)
4616 return (int)(uintptr_t)&epoll_create1;
4619 if compile_prog "" "" ; then
4620 epoll_create1=yes
4623 # check for sendfile support
4624 sendfile=no
4625 cat > $TMPC << EOF
4626 #include <sys/sendfile.h>
4628 int main(void)
4630 return sendfile(0, 0, 0, 0);
4633 if compile_prog "" "" ; then
4634 sendfile=yes
4637 # check for timerfd support (glibc 2.8 and newer)
4638 timerfd=no
4639 cat > $TMPC << EOF
4640 #include <sys/timerfd.h>
4642 int main(void)
4644 return(timerfd_create(CLOCK_REALTIME, 0));
4647 if compile_prog "" "" ; then
4648 timerfd=yes
4651 # check for setns and unshare support
4652 setns=no
4653 cat > $TMPC << EOF
4654 #include <sched.h>
4656 int main(void)
4658 int ret;
4659 ret = setns(0, 0);
4660 ret = unshare(0);
4661 return ret;
4664 if compile_prog "" "" ; then
4665 setns=yes
4668 # clock_adjtime probe
4669 clock_adjtime=no
4670 cat > $TMPC <<EOF
4671 #include <time.h>
4673 int main(void)
4675 return clock_adjtime(0, 0);
4678 clock_adjtime=no
4679 if compile_prog "" "" ; then
4680 clock_adjtime=yes
4683 # syncfs probe
4684 syncfs=no
4685 cat > $TMPC <<EOF
4686 #include <unistd.h>
4688 int main(void)
4690 return syncfs(0);
4693 syncfs=no
4694 if compile_prog "" "" ; then
4695 syncfs=yes
4698 # Check we have a new enough version of sphinx-build
4699 has_sphinx_build() {
4700 # This is a bit awkward but works: create a trivial document and
4701 # try to run it with our configuration file (which enforces a
4702 # version requirement). This will fail if either
4703 # sphinx-build doesn't exist at all or if it is too old.
4704 mkdir -p "$TMPDIR1/sphinx"
4705 touch "$TMPDIR1/sphinx/index.rst"
4706 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4709 # Check if tools are available to build documentation.
4710 if test "$docs" != "no" ; then
4711 if has makeinfo && has pod2man && has_sphinx_build; then
4712 docs=yes
4713 else
4714 if test "$docs" = "yes" ; then
4715 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4717 docs=no
4721 # Search for bswap_32 function
4722 byteswap_h=no
4723 cat > $TMPC << EOF
4724 #include <byteswap.h>
4725 int main(void) { return bswap_32(0); }
4727 if compile_prog "" "" ; then
4728 byteswap_h=yes
4731 # Search for bswap32 function
4732 bswap_h=no
4733 cat > $TMPC << EOF
4734 #include <sys/endian.h>
4735 #include <sys/types.h>
4736 #include <machine/bswap.h>
4737 int main(void) { return bswap32(0); }
4739 if compile_prog "" "" ; then
4740 bswap_h=yes
4743 ##########################################
4744 # Do we have libiscsi >= 1.9.0
4745 if test "$libiscsi" != "no" ; then
4746 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4747 libiscsi="yes"
4748 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4749 libiscsi_libs=$($pkg_config --libs libiscsi)
4750 else
4751 if test "$libiscsi" = "yes" ; then
4752 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4754 libiscsi="no"
4758 ##########################################
4759 # Do we need libm
4760 cat > $TMPC << EOF
4761 #include <math.h>
4762 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4764 if compile_prog "" "" ; then
4766 elif compile_prog "" "-lm" ; then
4767 LIBS="-lm $LIBS"
4768 libs_qga="-lm $libs_qga"
4769 else
4770 error_exit "libm check failed"
4773 ##########################################
4774 # Do we need librt
4775 # uClibc provides 2 versions of clock_gettime(), one with realtime
4776 # support and one without. This means that the clock_gettime() don't
4777 # need -lrt. We still need it for timer_create() so we check for this
4778 # function in addition.
4779 cat > $TMPC <<EOF
4780 #include <signal.h>
4781 #include <time.h>
4782 int main(void) {
4783 timer_create(CLOCK_REALTIME, NULL, NULL);
4784 return clock_gettime(CLOCK_REALTIME, NULL);
4788 if compile_prog "" "" ; then
4790 # we need pthread for static linking. use previous pthread test result
4791 elif compile_prog "" "$pthread_lib -lrt" ; then
4792 LIBS="$LIBS -lrt"
4793 libs_qga="$libs_qga -lrt"
4796 # Check whether we need to link libutil for openpty()
4797 cat > $TMPC << EOF
4798 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4799 int main(void) { return openpty(0, 0, 0, 0, 0); }
4802 if ! compile_prog "" "" ; then
4803 if compile_prog "" "-lutil" ; then
4804 libs_softmmu="-lutil $libs_softmmu"
4805 libs_tools="-lutil $libs_tools"
4809 ##########################################
4810 # spice probe
4811 if test "$spice" != "no" ; then
4812 cat > $TMPC << EOF
4813 #include <spice.h>
4814 int main(void) { spice_server_new(); return 0; }
4816 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4817 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4818 if $pkg_config --atleast-version=0.12.5 spice-server && \
4819 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4820 compile_prog "$spice_cflags" "$spice_libs" ; then
4821 spice="yes"
4822 libs_softmmu="$libs_softmmu $spice_libs"
4823 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4824 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4825 spice_server_version=$($pkg_config --modversion spice-server)
4826 else
4827 if test "$spice" = "yes" ; then
4828 feature_not_found "spice" \
4829 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4831 spice="no"
4835 # check for smartcard support
4836 if test "$smartcard" != "no"; then
4837 if $pkg_config --atleast-version=2.5.1 libcacard; then
4838 libcacard_cflags=$($pkg_config --cflags libcacard)
4839 libcacard_libs=$($pkg_config --libs libcacard)
4840 smartcard="yes"
4841 else
4842 if test "$smartcard" = "yes"; then
4843 feature_not_found "smartcard" "Install libcacard devel"
4845 smartcard="no"
4849 # check for libusb
4850 if test "$libusb" != "no" ; then
4851 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4852 libusb="yes"
4853 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4854 libusb_libs=$($pkg_config --libs libusb-1.0)
4855 else
4856 if test "$libusb" = "yes"; then
4857 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4859 libusb="no"
4863 # check for usbredirparser for usb network redirection support
4864 if test "$usb_redir" != "no" ; then
4865 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4866 usb_redir="yes"
4867 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4868 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4869 else
4870 if test "$usb_redir" = "yes"; then
4871 feature_not_found "usb-redir" "Install usbredir devel"
4873 usb_redir="no"
4877 ##########################################
4878 # check if we have VSS SDK headers for win
4880 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4881 test "$vss_win32_sdk" != "no" ; then
4882 case "$vss_win32_sdk" in
4883 "") vss_win32_include="-isystem $source_path" ;;
4884 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4885 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4886 vss_win32_include="-isystem $source_path/.sdk/vss"
4887 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4889 *) vss_win32_include="-isystem $vss_win32_sdk"
4890 esac
4891 cat > $TMPC << EOF
4892 #define __MIDL_user_allocate_free_DEFINED__
4893 #include <inc/win2003/vss.h>
4894 int main(void) { return VSS_CTX_BACKUP; }
4896 if compile_prog "$vss_win32_include" "" ; then
4897 guest_agent_with_vss="yes"
4898 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4899 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4900 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4901 else
4902 if test "$vss_win32_sdk" != "" ; then
4903 echo "ERROR: Please download and install Microsoft VSS SDK:"
4904 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4905 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4906 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4907 echo "ERROR: The headers are extracted in the directory \`inc'."
4908 feature_not_found "VSS support"
4910 guest_agent_with_vss="no"
4914 ##########################################
4915 # lookup Windows platform SDK (if not specified)
4916 # The SDK is needed only to build .tlb (type library) file of guest agent
4917 # VSS provider from the source. It is usually unnecessary because the
4918 # pre-compiled .tlb file is included.
4920 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4921 test "$guest_agent_with_vss" = "yes" ; then
4922 if test -z "$win_sdk"; then
4923 programfiles="$PROGRAMFILES"
4924 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4925 if test -n "$programfiles"; then
4926 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4927 else
4928 feature_not_found "Windows SDK"
4930 elif test "$win_sdk" = "no"; then
4931 win_sdk=""
4935 ##########################################
4936 # check if mingw environment provides a recent ntddscsi.h
4937 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4938 cat > $TMPC << EOF
4939 #include <windows.h>
4940 #include <ntddscsi.h>
4941 int main(void) {
4942 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4943 #error Missing required ioctl definitions
4944 #endif
4945 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4946 return addr.Lun;
4949 if compile_prog "" "" ; then
4950 guest_agent_ntddscsi=yes
4951 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4955 ##########################################
4956 # virgl renderer probe
4958 if test "$virglrenderer" != "no" ; then
4959 cat > $TMPC << EOF
4960 #include <virglrenderer.h>
4961 int main(void) { virgl_renderer_poll(); return 0; }
4963 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4964 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4965 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4966 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4967 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4968 virglrenderer="yes"
4969 else
4970 if test "$virglrenderer" = "yes" ; then
4971 feature_not_found "virglrenderer"
4973 virglrenderer="no"
4977 ##########################################
4978 # capstone
4980 case "$capstone" in
4981 "" | yes)
4982 if $pkg_config capstone; then
4983 capstone=system
4984 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4985 capstone=git
4986 elif test -e "${source_path}/capstone/Makefile" ; then
4987 capstone=internal
4988 elif test -z "$capstone" ; then
4989 capstone=no
4990 else
4991 feature_not_found "capstone" "Install capstone devel or git submodule"
4995 system)
4996 if ! $pkg_config capstone; then
4997 feature_not_found "capstone" "Install capstone devel"
5000 esac
5002 case "$capstone" in
5003 git | internal)
5004 if test "$capstone" = git; then
5005 git_submodules="${git_submodules} capstone"
5007 mkdir -p capstone
5008 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5009 if test "$mingw32" = "yes"; then
5010 LIBCAPSTONE=capstone.lib
5011 else
5012 LIBCAPSTONE=libcapstone.a
5014 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5017 system)
5018 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5019 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5025 error_exit "Unknown state for capstone: $capstone"
5027 esac
5029 ##########################################
5030 # check if we have fdatasync
5032 fdatasync=no
5033 cat > $TMPC << EOF
5034 #include <unistd.h>
5035 int main(void) {
5036 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5037 return fdatasync(0);
5038 #else
5039 #error Not supported
5040 #endif
5043 if compile_prog "" "" ; then
5044 fdatasync=yes
5047 ##########################################
5048 # check if we have madvise
5050 madvise=no
5051 cat > $TMPC << EOF
5052 #include <sys/types.h>
5053 #include <sys/mman.h>
5054 #include <stddef.h>
5055 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5057 if compile_prog "" "" ; then
5058 madvise=yes
5061 ##########################################
5062 # check if we have posix_madvise
5064 posix_madvise=no
5065 cat > $TMPC << EOF
5066 #include <sys/mman.h>
5067 #include <stddef.h>
5068 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5070 if compile_prog "" "" ; then
5071 posix_madvise=yes
5074 ##########################################
5075 # check if we have posix_memalign()
5077 posix_memalign=no
5078 cat > $TMPC << EOF
5079 #include <stdlib.h>
5080 int main(void) {
5081 void *p;
5082 return posix_memalign(&p, 8, 8);
5085 if compile_prog "" "" ; then
5086 posix_memalign=yes
5089 ##########################################
5090 # check if we have posix_syslog
5092 posix_syslog=no
5093 cat > $TMPC << EOF
5094 #include <syslog.h>
5095 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5097 if compile_prog "" "" ; then
5098 posix_syslog=yes
5101 ##########################################
5102 # check if we have sem_timedwait
5104 sem_timedwait=no
5105 cat > $TMPC << EOF
5106 #include <semaphore.h>
5107 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5109 if compile_prog "" "" ; then
5110 sem_timedwait=yes
5113 ##########################################
5114 # check if we have strchrnul
5116 strchrnul=no
5117 cat > $TMPC << EOF
5118 #include <string.h>
5119 int main(void);
5120 // Use a haystack that the compiler shouldn't be able to constant fold
5121 char *haystack = (char*)&main;
5122 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5124 if compile_prog "" "" ; then
5125 strchrnul=yes
5128 ##########################################
5129 # check if trace backend exists
5131 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5132 if test "$?" -ne 0 ; then
5133 error_exit "invalid trace backends" \
5134 "Please choose supported trace backends."
5137 ##########################################
5138 # For 'ust' backend, test if ust headers are present
5139 if have_backend "ust"; then
5140 cat > $TMPC << EOF
5141 #include <lttng/tracepoint.h>
5142 int main(void) { return 0; }
5144 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5145 if $pkg_config lttng-ust --exists; then
5146 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5147 else
5148 lttng_ust_libs="-llttng-ust -ldl"
5150 if $pkg_config liburcu-bp --exists; then
5151 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5152 else
5153 urcu_bp_libs="-lurcu-bp"
5156 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5157 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5158 else
5159 error_exit "Trace backend 'ust' missing lttng-ust header files"
5163 ##########################################
5164 # For 'dtrace' backend, test if 'dtrace' command is present
5165 if have_backend "dtrace"; then
5166 if ! has 'dtrace' ; then
5167 error_exit "dtrace command is not found in PATH $PATH"
5169 trace_backend_stap="no"
5170 if has 'stap' ; then
5171 trace_backend_stap="yes"
5175 ##########################################
5176 # check and set a backend for coroutine
5178 # We prefer ucontext, but it's not always possible. The fallback
5179 # is sigcontext. On Windows the only valid backend is the Windows
5180 # specific one.
5182 ucontext_works=no
5183 if test "$darwin" != "yes"; then
5184 cat > $TMPC << EOF
5185 #include <ucontext.h>
5186 #ifdef __stub_makecontext
5187 #error Ignoring glibc stub makecontext which will always fail
5188 #endif
5189 int main(void) { makecontext(0, 0, 0); return 0; }
5191 if compile_prog "" "" ; then
5192 ucontext_works=yes
5196 if test "$coroutine" = ""; then
5197 if test "$mingw32" = "yes"; then
5198 coroutine=win32
5199 elif test "$ucontext_works" = "yes"; then
5200 coroutine=ucontext
5201 else
5202 coroutine=sigaltstack
5204 else
5205 case $coroutine in
5206 windows)
5207 if test "$mingw32" != "yes"; then
5208 error_exit "'windows' coroutine backend only valid for Windows"
5210 # Unfortunately the user visible backend name doesn't match the
5211 # coroutine-*.c filename for this case, so we have to adjust it here.
5212 coroutine=win32
5214 ucontext)
5215 if test "$ucontext_works" != "yes"; then
5216 feature_not_found "ucontext"
5219 sigaltstack)
5220 if test "$mingw32" = "yes"; then
5221 error_exit "only the 'windows' coroutine backend is valid for Windows"
5225 error_exit "unknown coroutine backend $coroutine"
5227 esac
5230 if test "$coroutine_pool" = ""; then
5231 coroutine_pool=yes
5234 if test "$debug_stack_usage" = "yes"; then
5235 if test "$coroutine_pool" = "yes"; then
5236 echo "WARN: disabling coroutine pool for stack usage debugging"
5237 coroutine_pool=no
5242 ##########################################
5243 # check if we have open_by_handle_at
5245 open_by_handle_at=no
5246 cat > $TMPC << EOF
5247 #include <fcntl.h>
5248 #if !defined(AT_EMPTY_PATH)
5249 # error missing definition
5250 #else
5251 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5252 #endif
5254 if compile_prog "" "" ; then
5255 open_by_handle_at=yes
5258 ########################################
5259 # check if we have linux/magic.h
5261 linux_magic_h=no
5262 cat > $TMPC << EOF
5263 #include <linux/magic.h>
5264 int main(void) {
5265 return 0;
5268 if compile_prog "" "" ; then
5269 linux_magic_h=yes
5272 ########################################
5273 # check whether we can disable warning option with a pragma (this is needed
5274 # to silence warnings in the headers of some versions of external libraries).
5275 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5276 # only a warning.
5278 # If we can't selectively disable warning in the code, disable -Werror so that
5279 # the build doesn't fail anyway.
5281 pragma_disable_unused_but_set=no
5282 cat > $TMPC << EOF
5283 #pragma GCC diagnostic push
5284 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5285 #pragma GCC diagnostic pop
5287 int main(void) {
5288 return 0;
5291 if compile_prog "-Werror" "" ; then
5292 pragma_diagnostic_available=yes
5293 else
5294 werror=no
5297 ########################################
5298 # check if we have valgrind/valgrind.h
5300 valgrind_h=no
5301 cat > $TMPC << EOF
5302 #include <valgrind/valgrind.h>
5303 int main(void) {
5304 return 0;
5307 if compile_prog "" "" ; then
5308 valgrind_h=yes
5311 ########################################
5312 # check if environ is declared
5314 has_environ=no
5315 cat > $TMPC << EOF
5316 #include <unistd.h>
5317 int main(void) {
5318 environ = 0;
5319 return 0;
5322 if compile_prog "" "" ; then
5323 has_environ=yes
5326 ########################################
5327 # check if cpuid.h is usable.
5329 cat > $TMPC << EOF
5330 #include <cpuid.h>
5331 int main(void) {
5332 unsigned a, b, c, d;
5333 int max = __get_cpuid_max(0, 0);
5335 if (max >= 1) {
5336 __cpuid(1, a, b, c, d);
5339 if (max >= 7) {
5340 __cpuid_count(7, 0, a, b, c, d);
5343 return 0;
5346 if compile_prog "" "" ; then
5347 cpuid_h=yes
5350 ##########################################
5351 # avx2 optimization requirement check
5353 # There is no point enabling this if cpuid.h is not usable,
5354 # since we won't be able to select the new routines.
5356 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5357 cat > $TMPC << EOF
5358 #pragma GCC push_options
5359 #pragma GCC target("avx2")
5360 #include <cpuid.h>
5361 #include <immintrin.h>
5362 static int bar(void *a) {
5363 __m256i x = *(__m256i *)a;
5364 return _mm256_testz_si256(x, x);
5366 int main(int argc, char *argv[]) { return bar(argv[0]); }
5368 if compile_object "" ; then
5369 avx2_opt="yes"
5370 else
5371 avx2_opt="no"
5375 ########################################
5376 # check if __[u]int128_t is usable.
5378 int128=no
5379 cat > $TMPC << EOF
5380 __int128_t a;
5381 __uint128_t b;
5382 int main (void) {
5383 a = a + b;
5384 b = a * b;
5385 a = a * a;
5386 return 0;
5389 if compile_prog "" "" ; then
5390 int128=yes
5393 #########################################
5394 # See if 128-bit atomic operations are supported.
5396 atomic128=no
5397 if test "$int128" = "yes"; then
5398 cat > $TMPC << EOF
5399 int main(void)
5401 unsigned __int128 x = 0, y = 0;
5402 y = __atomic_load_16(&x, 0);
5403 __atomic_store_16(&x, y, 0);
5404 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5405 return 0;
5408 if compile_prog "" "" ; then
5409 atomic128=yes
5413 cmpxchg128=no
5414 if test "$int128" = yes && test "$atomic128" = no; then
5415 cat > $TMPC << EOF
5416 int main(void)
5418 unsigned __int128 x = 0, y = 0;
5419 __sync_val_compare_and_swap_16(&x, y, x);
5420 return 0;
5423 if compile_prog "" "" ; then
5424 cmpxchg128=yes
5428 #########################################
5429 # See if 64-bit atomic operations are supported.
5430 # Note that without __atomic builtins, we can only
5431 # assume atomic loads/stores max at pointer size.
5433 cat > $TMPC << EOF
5434 #include <stdint.h>
5435 int main(void)
5437 uint64_t x = 0, y = 0;
5438 #ifdef __ATOMIC_RELAXED
5439 y = __atomic_load_8(&x, 0);
5440 __atomic_store_8(&x, y, 0);
5441 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5442 __atomic_exchange_8(&x, y, 0);
5443 __atomic_fetch_add_8(&x, y, 0);
5444 #else
5445 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5446 __sync_lock_test_and_set(&x, y);
5447 __sync_val_compare_and_swap(&x, y, 0);
5448 __sync_fetch_and_add(&x, y);
5449 #endif
5450 return 0;
5453 if compile_prog "" "" ; then
5454 atomic64=yes
5457 ########################################
5458 # See if 16-byte vector operations are supported.
5459 # Even without a vector unit the compiler may expand these.
5460 # There is a bug in old GCC for PPC that crashes here.
5461 # Unfortunately it's the system compiler for Centos 7.
5463 cat > $TMPC << EOF
5464 typedef unsigned char U1 __attribute__((vector_size(16)));
5465 typedef unsigned short U2 __attribute__((vector_size(16)));
5466 typedef unsigned int U4 __attribute__((vector_size(16)));
5467 typedef unsigned long long U8 __attribute__((vector_size(16)));
5468 typedef signed char S1 __attribute__((vector_size(16)));
5469 typedef signed short S2 __attribute__((vector_size(16)));
5470 typedef signed int S4 __attribute__((vector_size(16)));
5471 typedef signed long long S8 __attribute__((vector_size(16)));
5472 static U1 a1, b1;
5473 static U2 a2, b2;
5474 static U4 a4, b4;
5475 static U8 a8, b8;
5476 static S1 c1;
5477 static S2 c2;
5478 static S4 c4;
5479 static S8 c8;
5480 static int i;
5481 void helper(void *d, void *a, int shift, int i);
5482 void helper(void *d, void *a, int shift, int i)
5484 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5485 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5486 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5487 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5489 int main(void)
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 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5497 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5498 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5499 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5500 return 0;
5504 vector16=no
5505 if compile_prog "" "" ; then
5506 vector16=yes
5509 ########################################
5510 # check if getauxval is available.
5512 getauxval=no
5513 cat > $TMPC << EOF
5514 #include <sys/auxv.h>
5515 int main(void) {
5516 return getauxval(AT_HWCAP) == 0;
5519 if compile_prog "" "" ; then
5520 getauxval=yes
5523 ########################################
5524 # check if ccache is interfering with
5525 # semantic analysis of macros
5527 unset CCACHE_CPP2
5528 ccache_cpp2=no
5529 cat > $TMPC << EOF
5530 static const int Z = 1;
5531 #define fn() ({ Z; })
5532 #define TAUT(X) ((X) == Z)
5533 #define PAREN(X, Y) (X == Y)
5534 #define ID(X) (X)
5535 int main(int argc, char *argv[])
5537 int x = 0, y = 0;
5538 x = ID(x);
5539 x = fn();
5540 fn();
5541 if (PAREN(x, y)) return 0;
5542 if (TAUT(Z)) return 0;
5543 return 0;
5547 if ! compile_object "-Werror"; then
5548 ccache_cpp2=yes
5551 #################################################
5552 # clang does not support glibc + FORTIFY_SOURCE.
5554 if test "$fortify_source" != "no"; then
5555 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5556 fortify_source="no";
5557 elif test -n "$cxx" && has $cxx &&
5558 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5559 fortify_source="no";
5560 else
5561 fortify_source="yes"
5565 ###############################################
5566 # Check if copy_file_range is provided by glibc
5567 have_copy_file_range=no
5568 cat > $TMPC << EOF
5569 #include <unistd.h>
5570 int main(void) {
5571 copy_file_range(0, NULL, 0, NULL, 0, 0);
5572 return 0;
5575 if compile_prog "" "" ; then
5576 have_copy_file_range=yes
5579 ##########################################
5580 # check if struct fsxattr is available via linux/fs.h
5582 have_fsxattr=no
5583 cat > $TMPC << EOF
5584 #include <linux/fs.h>
5585 struct fsxattr foo;
5586 int main(void) {
5587 return 0;
5590 if compile_prog "" "" ; then
5591 have_fsxattr=yes
5594 ##########################################
5595 # check for usable membarrier system call
5596 if test "$membarrier" = "yes"; then
5597 have_membarrier=no
5598 if test "$mingw32" = "yes" ; then
5599 have_membarrier=yes
5600 elif test "$linux" = "yes" ; then
5601 cat > $TMPC << EOF
5602 #include <linux/membarrier.h>
5603 #include <sys/syscall.h>
5604 #include <unistd.h>
5605 #include <stdlib.h>
5606 int main(void) {
5607 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5608 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5609 exit(0);
5612 if compile_prog "" "" ; then
5613 have_membarrier=yes
5616 if test "$have_membarrier" = "no"; then
5617 feature_not_found "membarrier" "membarrier system call not available"
5619 else
5620 # Do not enable it by default even for Mingw32, because it doesn't
5621 # work on Wine.
5622 membarrier=no
5625 ##########################################
5626 # check if rtnetlink.h exists and is useful
5627 have_rtnetlink=no
5628 cat > $TMPC << EOF
5629 #include <linux/rtnetlink.h>
5630 int main(void) {
5631 return IFLA_PROTO_DOWN;
5634 if compile_prog "" "" ; then
5635 have_rtnetlink=yes
5638 ##########################################
5639 # check for usable AF_VSOCK environment
5640 have_af_vsock=no
5641 cat > $TMPC << EOF
5642 #include <errno.h>
5643 #include <sys/types.h>
5644 #include <sys/socket.h>
5645 #if !defined(AF_VSOCK)
5646 # error missing AF_VSOCK flag
5647 #endif
5648 #include <linux/vm_sockets.h>
5649 int main(void) {
5650 int sock, ret;
5651 struct sockaddr_vm svm;
5652 socklen_t len = sizeof(svm);
5653 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5654 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5655 if ((ret == -1) && (errno == ENOTCONN)) {
5656 return 0;
5658 return -1;
5661 if compile_prog "" "" ; then
5662 have_af_vsock=yes
5665 ##########################################
5666 # check for usable AF_ALG environment
5667 hava_afalg=no
5668 cat > $TMPC << EOF
5669 #include <errno.h>
5670 #include <sys/types.h>
5671 #include <sys/socket.h>
5672 #include <linux/if_alg.h>
5673 int main(void) {
5674 int sock;
5675 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5676 return sock;
5679 if compile_prog "" "" ; then
5680 have_afalg=yes
5682 if test "$crypto_afalg" = "yes"
5683 then
5684 if test "$have_afalg" != "yes"
5685 then
5686 error_exit "AF_ALG requested but could not be detected"
5691 #################################################
5692 # Check to see if we have the Hypervisor framework
5693 if [ "$darwin" = "yes" ] ; then
5694 cat > $TMPC << EOF
5695 #include <Hypervisor/hv.h>
5696 int main() { return 0;}
5698 if ! compile_object ""; then
5699 hvf='no'
5700 else
5701 hvf='yes'
5702 LDFLAGS="-framework Hypervisor $LDFLAGS"
5706 #################################################
5707 # Sparc implicitly links with --relax, which is
5708 # incompatible with -r, so --no-relax should be
5709 # given. It does no harm to give it on other
5710 # platforms too.
5712 # Note: the prototype is needed since QEMU_CFLAGS
5713 # contains -Wmissing-prototypes
5714 cat > $TMPC << EOF
5715 extern int foo(void);
5716 int foo(void) { return 0; }
5718 if ! compile_object ""; then
5719 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5721 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5722 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5723 LD_REL_FLAGS=$i
5724 break
5726 done
5727 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5728 feature_not_found "modules" "Cannot find how to build relocatable objects"
5731 ##########################################
5732 # check for sysmacros.h
5734 have_sysmacros=no
5735 cat > $TMPC << EOF
5736 #include <sys/sysmacros.h>
5737 int main(void) {
5738 return makedev(0, 0);
5741 if compile_prog "" "" ; then
5742 have_sysmacros=yes
5745 ##########################################
5746 # Veritas HyperScale block driver VxHS
5747 # Check if libvxhs is installed
5749 if test "$vxhs" != "no" ; then
5750 cat > $TMPC <<EOF
5751 #include <stdint.h>
5752 #include <qnio/qnio_api.h>
5754 void *vxhs_callback;
5756 int main(void) {
5757 iio_init(QNIO_VERSION, vxhs_callback);
5758 return 0;
5761 vxhs_libs="-lvxhs -lssl"
5762 if compile_prog "" "$vxhs_libs" ; then
5763 vxhs=yes
5764 else
5765 if test "$vxhs" = "yes" ; then
5766 feature_not_found "vxhs block device" "Install libvxhs See github"
5768 vxhs=no
5772 ##########################################
5773 # check for _Static_assert()
5775 have_static_assert=no
5776 cat > $TMPC << EOF
5777 _Static_assert(1, "success");
5778 int main(void) {
5779 return 0;
5782 if compile_prog "" "" ; then
5783 have_static_assert=yes
5786 ##########################################
5787 # check for utmpx.h, it is missing e.g. on OpenBSD
5789 have_utmpx=no
5790 cat > $TMPC << EOF
5791 #include <utmpx.h>
5792 struct utmpx user_info;
5793 int main(void) {
5794 return 0;
5797 if compile_prog "" "" ; then
5798 have_utmpx=yes
5801 ##########################################
5802 # check for getrandom()
5804 have_getrandom=no
5805 cat > $TMPC << EOF
5806 #include <sys/random.h>
5807 int main(void) {
5808 return getrandom(0, 0, GRND_NONBLOCK);
5811 if compile_prog "" "" ; then
5812 have_getrandom=yes
5815 ##########################################
5816 # checks for sanitizers
5818 have_asan=no
5819 have_ubsan=no
5820 have_asan_iface_h=no
5821 have_asan_iface_fiber=no
5823 if test "$sanitizers" = "yes" ; then
5824 write_c_skeleton
5825 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5826 have_asan=yes
5829 # we could use a simple skeleton for flags checks, but this also
5830 # detect the static linking issue of ubsan, see also:
5831 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5832 cat > $TMPC << EOF
5833 #include <stdlib.h>
5834 int main(void) {
5835 void *tmp = malloc(10);
5836 return *(int *)(tmp + 2);
5839 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5840 have_ubsan=yes
5843 if check_include "sanitizer/asan_interface.h" ; then
5844 have_asan_iface_h=yes
5847 cat > $TMPC << EOF
5848 #include <sanitizer/asan_interface.h>
5849 int main(void) {
5850 __sanitizer_start_switch_fiber(0, 0, 0);
5851 return 0;
5854 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5855 have_asan_iface_fiber=yes
5859 ##########################################
5860 # check for libpmem
5862 if test "$libpmem" != "no"; then
5863 if $pkg_config --exists "libpmem"; then
5864 libpmem="yes"
5865 libpmem_libs=$($pkg_config --libs libpmem)
5866 libpmem_cflags=$($pkg_config --cflags libpmem)
5867 libs_softmmu="$libs_softmmu $libpmem_libs"
5868 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5869 else
5870 if test "$libpmem" = "yes" ; then
5871 feature_not_found "libpmem" "Install nvml or pmdk"
5873 libpmem="no"
5877 ##########################################
5878 # check for slirp
5880 case "$slirp" in
5881 "" | yes)
5882 if $pkg_config slirp; then
5883 slirp=system
5884 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5885 slirp=git
5886 elif test -e "${source_path}/slirp/Makefile" ; then
5887 slirp=internal
5888 elif test -z "$slirp" ; then
5889 slirp=no
5890 else
5891 feature_not_found "slirp" "Install slirp devel or git submodule"
5895 system)
5896 if ! $pkg_config slirp; then
5897 feature_not_found "slirp" "Install slirp devel"
5900 esac
5902 case "$slirp" in
5903 git | internal)
5904 if test "$slirp" = git; then
5905 git_submodules="${git_submodules} slirp"
5907 mkdir -p slirp
5908 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5909 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5912 system)
5913 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5914 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5915 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5921 error_exit "Unknown state for slirp: $slirp"
5923 esac
5926 ##########################################
5927 # End of CC checks
5928 # After here, no more $cc or $ld runs
5930 write_c_skeleton
5932 if test "$gcov" = "yes" ; then
5933 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5934 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5935 elif test "$fortify_source" = "yes" ; then
5936 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5937 elif test "$debug" = "no"; then
5938 CFLAGS="-O2 $CFLAGS"
5941 if test "$have_asan" = "yes"; then
5942 CFLAGS="-fsanitize=address $CFLAGS"
5943 if test "$have_asan_iface_h" = "no" ; then
5944 echo "ASAN build enabled, but ASAN header missing." \
5945 "Without code annotation, the report may be inferior."
5946 elif test "$have_asan_iface_fiber" = "no" ; then
5947 echo "ASAN build enabled, but ASAN header is too old." \
5948 "Without code annotation, the report may be inferior."
5951 if test "$have_ubsan" = "yes"; then
5952 CFLAGS="-fsanitize=undefined $CFLAGS"
5955 ##########################################
5956 # Do we have libnfs
5957 if test "$libnfs" != "no" ; then
5958 if $pkg_config --atleast-version=1.9.3 libnfs; then
5959 libnfs="yes"
5960 libnfs_libs=$($pkg_config --libs libnfs)
5961 else
5962 if test "$libnfs" = "yes" ; then
5963 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5965 libnfs="no"
5969 ##########################################
5970 # Do we have libudev
5971 if test "$libudev" != "no" ; then
5972 if $pkg_config libudev && test "$static" != "yes"; then
5973 libudev="yes"
5974 libudev_libs=$($pkg_config --libs libudev)
5975 else
5976 libudev="no"
5980 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5981 if test "$werror" = "yes"; then
5982 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5985 if test "$solaris" = "no" ; then
5986 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5987 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5991 # test if pod2man has --utf8 option
5992 if pod2man --help | grep -q utf8; then
5993 POD2MAN="pod2man --utf8"
5994 else
5995 POD2MAN="pod2man"
5998 # Use ASLR, no-SEH and DEP if available
5999 if test "$mingw32" = "yes" ; then
6000 for flag in --dynamicbase --no-seh --nxcompat; do
6001 if ld_has $flag ; then
6002 LDFLAGS="-Wl,$flag $LDFLAGS"
6004 done
6007 # Disable OpenBSD W^X if available
6008 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6009 cat > $TMPC <<EOF
6010 int main(void) { return 0; }
6012 wx_ldflags="-Wl,-z,wxneeded"
6013 if compile_prog "" "$wx_ldflags"; then
6014 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6018 qemu_confdir=$sysconfdir$confsuffix
6019 qemu_moddir=$libdir$confsuffix
6020 qemu_datadir=$datadir$confsuffix
6021 qemu_localedir="$datadir/locale"
6022 qemu_icondir="$datadir/icons"
6023 qemu_desktopdir="$datadir/applications"
6025 # We can only support ivshmem if we have eventfd
6026 if [ "$eventfd" = "yes" ]; then
6027 ivshmem=yes
6030 tools=""
6031 if test "$want_tools" = "yes" ; then
6032 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6033 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6034 tools="qemu-nbd\$(EXESUF) $tools"
6036 if [ "$ivshmem" = "yes" ]; then
6037 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6039 if [ "$curl" = "yes" ]; then
6040 tools="elf2dmp\$(EXESUF) $tools"
6043 if test "$softmmu" = yes ; then
6044 if test "$linux" = yes; then
6045 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6046 virtfs=yes
6047 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6048 else
6049 if test "$virtfs" = yes; then
6050 error_exit "VirtFS requires libcap devel and libattr devel"
6052 virtfs=no
6054 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6055 mpath=yes
6056 else
6057 if test "$mpath" = yes; then
6058 error_exit "Multipath requires libmpathpersist devel"
6060 mpath=no
6062 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6063 else
6064 if test "$virtfs" = yes; then
6065 error_exit "VirtFS is supported only on Linux"
6067 virtfs=no
6068 if test "$mpath" = yes; then
6069 error_exit "Multipath is supported only on Linux"
6071 mpath=no
6073 if test "$xkbcommon" = "yes"; then
6074 tools="qemu-keymap\$(EXESUF) $tools"
6078 # Probe for guest agent support/options
6080 if [ "$guest_agent" != "no" ]; then
6081 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6082 guest_agent=no
6083 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6084 tools="qemu-ga\$(EXESUF) $tools"
6085 guest_agent=yes
6086 elif [ "$guest_agent" != yes ]; then
6087 guest_agent=no
6088 else
6089 error_exit "Guest agent is not supported on this platform"
6093 # Guest agent Window MSI package
6095 if test "$guest_agent" != yes; then
6096 if test "$guest_agent_msi" = yes; then
6097 error_exit "MSI guest agent package requires guest agent enabled"
6099 guest_agent_msi=no
6100 elif test "$mingw32" != "yes"; then
6101 if test "$guest_agent_msi" = "yes"; then
6102 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6104 guest_agent_msi=no
6105 elif ! has wixl; then
6106 if test "$guest_agent_msi" = "yes"; then
6107 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6109 guest_agent_msi=no
6110 else
6111 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6112 # disabled explicitly
6113 if test "$guest_agent_msi" != "no"; then
6114 guest_agent_msi=yes
6118 if test "$guest_agent_msi" = "yes"; then
6119 if test "$guest_agent_with_vss" = "yes"; then
6120 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6123 if test "$QEMU_GA_MANUFACTURER" = ""; then
6124 QEMU_GA_MANUFACTURER=QEMU
6127 if test "$QEMU_GA_DISTRO" = ""; then
6128 QEMU_GA_DISTRO=Linux
6131 if test "$QEMU_GA_VERSION" = ""; then
6132 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6135 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6137 case "$cpu" in
6138 x86_64)
6139 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6141 i386)
6142 QEMU_GA_MSI_ARCH="-D Arch=32"
6145 error_exit "CPU $cpu not supported for building installation package"
6147 esac
6150 # Mac OS X ships with a broken assembler
6151 roms=
6152 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6153 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6154 test "$softmmu" = yes ; then
6155 # Different host OS linkers have different ideas about the name of the ELF
6156 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6157 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6158 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6159 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6160 ld_i386_emulation="$emu"
6161 roms="optionrom"
6162 break
6164 done
6166 if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
6167 roms="$roms spapr-rtas"
6170 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6171 if test "$cpu" = "s390x" ; then
6172 write_c_skeleton
6173 if compile_prog "-march=z900" ""; then
6174 roms="$roms s390-ccw"
6178 # Probe for the need for relocating the user-only binary.
6179 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6180 textseg_addr=
6181 case "$cpu" in
6182 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6183 # ??? Rationale for choosing this address
6184 textseg_addr=0x60000000
6186 mips)
6187 # A 256M aligned address, high in the address space, with enough
6188 # room for the code_gen_buffer above it before the stack.
6189 textseg_addr=0x60000000
6191 esac
6192 if [ -n "$textseg_addr" ]; then
6193 cat > $TMPC <<EOF
6194 int main(void) { return 0; }
6196 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6197 if ! compile_prog "" "$textseg_ldflags"; then
6198 # In case ld does not support -Ttext-segment, edit the default linker
6199 # script via sed to set the .text start addr. This is needed on FreeBSD
6200 # at least.
6201 if ! $ld --verbose >/dev/null 2>&1; then
6202 error_exit \
6203 "We need to link the QEMU user mode binaries at a" \
6204 "specific text address. Unfortunately your linker" \
6205 "doesn't support either the -Ttext-segment option or" \
6206 "printing the default linker script with --verbose." \
6207 "If you don't want the user mode binaries, pass the" \
6208 "--disable-user option to configure."
6211 $ld --verbose | sed \
6212 -e '1,/==================================================/d' \
6213 -e '/==================================================/,$d' \
6214 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6215 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6216 textseg_ldflags="-Wl,-T../config-host.ld"
6221 # Check that the C++ compiler exists and works with the C compiler.
6222 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6223 if has $cxx; then
6224 cat > $TMPC <<EOF
6225 int c_function(void);
6226 int main(void) { return c_function(); }
6229 compile_object
6231 cat > $TMPCXX <<EOF
6232 extern "C" {
6233 int c_function(void);
6235 int c_function(void) { return 42; }
6238 update_cxxflags
6240 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6241 # C++ compiler $cxx works ok with C compiler $cc
6243 else
6244 echo "C++ compiler $cxx does not work with C compiler $cc"
6245 echo "Disabling C++ specific optional code"
6246 cxx=
6248 else
6249 echo "No C++ compiler available; disabling C++ specific optional code"
6250 cxx=
6253 echo_version() {
6254 if test "$1" = "yes" ; then
6255 echo "($2)"
6259 # prepend pixman and ftd flags after all config tests are done
6260 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6261 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6262 libs_softmmu="$pixman_libs $libs_softmmu"
6264 echo "Install prefix $prefix"
6265 echo "BIOS directory $(eval echo $qemu_datadir)"
6266 echo "firmware path $(eval echo $firmwarepath)"
6267 echo "binary directory $(eval echo $bindir)"
6268 echo "library directory $(eval echo $libdir)"
6269 echo "module directory $(eval echo $qemu_moddir)"
6270 echo "libexec directory $(eval echo $libexecdir)"
6271 echo "include directory $(eval echo $includedir)"
6272 echo "config directory $(eval echo $sysconfdir)"
6273 if test "$mingw32" = "no" ; then
6274 echo "local state directory $(eval echo $local_statedir)"
6275 echo "Manual directory $(eval echo $mandir)"
6276 echo "ELF interp prefix $interp_prefix"
6277 else
6278 echo "local state directory queried at runtime"
6279 echo "Windows SDK $win_sdk"
6281 echo "Source path $source_path"
6282 echo "GIT binary $git"
6283 echo "GIT submodules $git_submodules"
6284 echo "C compiler $cc"
6285 echo "Host C compiler $host_cc"
6286 echo "C++ compiler $cxx"
6287 echo "Objective-C compiler $objcc"
6288 echo "ARFLAGS $ARFLAGS"
6289 echo "CFLAGS $CFLAGS"
6290 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6291 echo "LDFLAGS $LDFLAGS"
6292 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6293 echo "make $make"
6294 echo "install $install"
6295 echo "python $python ($python_version)"
6296 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6297 if test "$slirp" != "no" ; then
6298 echo "smbd $smbd"
6300 echo "module support $modules"
6301 echo "host CPU $cpu"
6302 echo "host big endian $bigendian"
6303 echo "target list $target_list"
6304 echo "gprof enabled $gprof"
6305 echo "sparse enabled $sparse"
6306 echo "strip binaries $strip_opt"
6307 echo "profiler $profiler"
6308 echo "static build $static"
6309 if test "$darwin" = "yes" ; then
6310 echo "Cocoa support $cocoa"
6312 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6313 echo "SDL image support $sdl_image"
6314 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6315 echo "GTK GL support $gtk_gl"
6316 echo "VTE support $vte $(echo_version $vte $vteversion)"
6317 echo "TLS priority $tls_priority"
6318 echo "GNUTLS support $gnutls"
6319 echo "libgcrypt $gcrypt"
6320 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6321 echo "libtasn1 $tasn1"
6322 echo "PAM $auth_pam"
6323 echo "iconv support $iconv"
6324 echo "curses support $curses"
6325 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6326 echo "curl support $curl"
6327 echo "mingw32 support $mingw32"
6328 echo "Audio drivers $audio_drv_list"
6329 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6330 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6331 echo "VirtFS support $virtfs"
6332 echo "Multipath support $mpath"
6333 echo "VNC support $vnc"
6334 if test "$vnc" = "yes" ; then
6335 echo "VNC SASL support $vnc_sasl"
6336 echo "VNC JPEG support $vnc_jpeg"
6337 echo "VNC PNG support $vnc_png"
6339 echo "xen support $xen"
6340 if test "$xen" = "yes" ; then
6341 echo "xen ctrl version $xen_ctrl_version"
6343 echo "brlapi support $brlapi"
6344 echo "bluez support $bluez"
6345 echo "Documentation $docs"
6346 echo "PIE $pie"
6347 echo "vde support $vde"
6348 echo "netmap support $netmap"
6349 echo "Linux AIO support $linux_aio"
6350 echo "ATTR/XATTR support $attr"
6351 echo "Install blobs $blobs"
6352 echo "KVM support $kvm"
6353 echo "HAX support $hax"
6354 echo "HVF support $hvf"
6355 echo "WHPX support $whpx"
6356 echo "TCG support $tcg"
6357 if test "$tcg" = "yes" ; then
6358 echo "TCG debug enabled $debug_tcg"
6359 echo "TCG interpreter $tcg_interpreter"
6361 echo "malloc trim support $malloc_trim"
6362 echo "RDMA support $rdma"
6363 echo "PVRDMA support $pvrdma"
6364 echo "fdt support $fdt"
6365 echo "membarrier $membarrier"
6366 echo "preadv support $preadv"
6367 echo "fdatasync $fdatasync"
6368 echo "madvise $madvise"
6369 echo "posix_madvise $posix_madvise"
6370 echo "posix_memalign $posix_memalign"
6371 echo "libcap-ng support $cap_ng"
6372 echo "vhost-net support $vhost_net"
6373 echo "vhost-crypto support $vhost_crypto"
6374 echo "vhost-scsi support $vhost_scsi"
6375 echo "vhost-vsock support $vhost_vsock"
6376 echo "vhost-user support $vhost_user"
6377 echo "Trace backends $trace_backends"
6378 if have_backend "simple"; then
6379 echo "Trace output file $trace_file-<pid>"
6381 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6382 echo "rbd support $rbd"
6383 echo "xfsctl support $xfs"
6384 echo "smartcard support $smartcard"
6385 echo "libusb $libusb"
6386 echo "usb net redir $usb_redir"
6387 echo "OpenGL support $opengl"
6388 echo "OpenGL dmabufs $opengl_dmabuf"
6389 echo "libiscsi support $libiscsi"
6390 echo "libnfs support $libnfs"
6391 echo "build guest agent $guest_agent"
6392 echo "QGA VSS support $guest_agent_with_vss"
6393 echo "QGA w32 disk info $guest_agent_ntddscsi"
6394 echo "QGA MSI support $guest_agent_msi"
6395 echo "seccomp support $seccomp"
6396 echo "coroutine backend $coroutine"
6397 echo "coroutine pool $coroutine_pool"
6398 echo "debug stack usage $debug_stack_usage"
6399 echo "mutex debugging $debug_mutex"
6400 echo "crypto afalg $crypto_afalg"
6401 echo "GlusterFS support $glusterfs"
6402 echo "gcov $gcov_tool"
6403 echo "gcov enabled $gcov"
6404 echo "TPM support $tpm"
6405 echo "libssh support $libssh"
6406 echo "QOM debugging $qom_cast_debug"
6407 echo "Live block migration $live_block_migration"
6408 echo "lzo support $lzo"
6409 echo "snappy support $snappy"
6410 echo "bzip2 support $bzip2"
6411 echo "lzfse support $lzfse"
6412 echo "NUMA host support $numa"
6413 echo "libxml2 $libxml2"
6414 echo "tcmalloc support $tcmalloc"
6415 echo "jemalloc support $jemalloc"
6416 echo "avx2 optimization $avx2_opt"
6417 echo "replication support $replication"
6418 echo "VxHS block device $vxhs"
6419 echo "bochs support $bochs"
6420 echo "cloop support $cloop"
6421 echo "dmg support $dmg"
6422 echo "qcow v1 support $qcow1"
6423 echo "vdi support $vdi"
6424 echo "vvfat support $vvfat"
6425 echo "qed support $qed"
6426 echo "parallels support $parallels"
6427 echo "sheepdog support $sheepdog"
6428 echo "capstone $capstone"
6429 echo "libpmem support $libpmem"
6430 echo "libudev $libudev"
6431 echo "default devices $default_devices"
6433 if test "$supported_cpu" = "no"; then
6434 echo
6435 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6436 echo
6437 echo "CPU host architecture $cpu support is not currently maintained."
6438 echo "The QEMU project intends to remove support for this host CPU in"
6439 echo "a future release if nobody volunteers to maintain it and to"
6440 echo "provide a build host for our continuous integration setup."
6441 echo "configure has succeeded and you can continue to build, but"
6442 echo "if you care about QEMU on this platform you should contact"
6443 echo "us upstream at qemu-devel@nongnu.org."
6446 if test "$supported_os" = "no"; then
6447 echo
6448 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6449 echo
6450 echo "Host OS $targetos support is not currently maintained."
6451 echo "The QEMU project intends to remove support for this host OS in"
6452 echo "a future release if nobody volunteers to maintain it and to"
6453 echo "provide a build host for our continuous integration setup."
6454 echo "configure has succeeded and you can continue to build, but"
6455 echo "if you care about QEMU on this platform you should contact"
6456 echo "us upstream at qemu-devel@nongnu.org."
6459 # Note that if the Python conditional here evaluates True we will exit
6460 # with status 1 which is a shell 'false' value.
6461 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6462 echo
6463 echo "warning: Python 2 support is deprecated" >&2
6464 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6465 python2="y"
6468 config_host_mak="config-host.mak"
6470 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6472 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6473 echo >> $config_host_mak
6475 echo all: >> $config_host_mak
6476 echo "prefix=$prefix" >> $config_host_mak
6477 echo "bindir=$bindir" >> $config_host_mak
6478 echo "libdir=$libdir" >> $config_host_mak
6479 echo "libexecdir=$libexecdir" >> $config_host_mak
6480 echo "includedir=$includedir" >> $config_host_mak
6481 echo "mandir=$mandir" >> $config_host_mak
6482 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6483 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6484 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6485 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6486 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6487 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6488 if test "$mingw32" = "no" ; then
6489 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6491 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6492 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6493 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6494 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6495 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6496 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6497 echo "GIT=$git" >> $config_host_mak
6498 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6499 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6501 echo "ARCH=$ARCH" >> $config_host_mak
6503 if test "$default_devices" = "yes" ; then
6504 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6505 else
6506 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6508 if test "$debug_tcg" = "yes" ; then
6509 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6511 if test "$strip_opt" = "yes" ; then
6512 echo "STRIP=${strip}" >> $config_host_mak
6514 if test "$bigendian" = "yes" ; then
6515 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6517 if test "$mingw32" = "yes" ; then
6518 echo "CONFIG_WIN32=y" >> $config_host_mak
6519 rc_version=$(cat $source_path/VERSION)
6520 version_major=${rc_version%%.*}
6521 rc_version=${rc_version#*.}
6522 version_minor=${rc_version%%.*}
6523 rc_version=${rc_version#*.}
6524 version_subminor=${rc_version%%.*}
6525 version_micro=0
6526 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6527 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6528 if test "$guest_agent_with_vss" = "yes" ; then
6529 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6530 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6531 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6533 if test "$guest_agent_ntddscsi" = "yes" ; then
6534 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6536 if test "$guest_agent_msi" = "yes"; then
6537 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6538 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6539 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6540 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6541 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6542 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6543 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6545 else
6546 echo "CONFIG_POSIX=y" >> $config_host_mak
6549 if test "$linux" = "yes" ; then
6550 echo "CONFIG_LINUX=y" >> $config_host_mak
6553 if test "$darwin" = "yes" ; then
6554 echo "CONFIG_DARWIN=y" >> $config_host_mak
6557 if test "$solaris" = "yes" ; then
6558 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6560 if test "$haiku" = "yes" ; then
6561 echo "CONFIG_HAIKU=y" >> $config_host_mak
6563 if test "$static" = "yes" ; then
6564 echo "CONFIG_STATIC=y" >> $config_host_mak
6566 if test "$profiler" = "yes" ; then
6567 echo "CONFIG_PROFILER=y" >> $config_host_mak
6569 if test "$want_tools" = "yes" ; then
6570 echo "CONFIG_TOOLS=y" >> $config_host_mak
6572 if test "$slirp" != "no"; then
6573 echo "CONFIG_SLIRP=y" >> $config_host_mak
6574 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6575 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6576 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6578 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6579 echo "config-host.h: slirp/all" >> $config_host_mak
6581 if test "$vde" = "yes" ; then
6582 echo "CONFIG_VDE=y" >> $config_host_mak
6583 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6585 if test "$netmap" = "yes" ; then
6586 echo "CONFIG_NETMAP=y" >> $config_host_mak
6588 if test "$l2tpv3" = "yes" ; then
6589 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6591 if test "$cap_ng" = "yes" ; then
6592 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6594 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6595 for drv in $audio_drv_list; do
6596 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6597 case "$drv" in
6598 alsa | oss | pa | sdl)
6599 echo "$def=m" >> $config_host_mak ;;
6601 echo "$def=y" >> $config_host_mak ;;
6602 esac
6603 done
6604 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6605 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6606 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6607 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6608 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6609 if test "$audio_pt_int" = "yes" ; then
6610 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6612 if test "$audio_win_int" = "yes" ; then
6613 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6615 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6616 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6617 if test "$vnc" = "yes" ; then
6618 echo "CONFIG_VNC=y" >> $config_host_mak
6620 if test "$vnc_sasl" = "yes" ; then
6621 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6623 if test "$vnc_jpeg" = "yes" ; then
6624 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6626 if test "$vnc_png" = "yes" ; then
6627 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6629 if test "$xkbcommon" = "yes" ; then
6630 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6631 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6633 if test "$xfs" = "yes" ; then
6634 echo "CONFIG_XFS=y" >> $config_host_mak
6636 qemu_version=$(head $source_path/VERSION)
6637 echo "VERSION=$qemu_version" >>$config_host_mak
6638 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6639 echo "SRC_PATH=$source_path" >> $config_host_mak
6640 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6641 if [ "$docs" = "yes" ] ; then
6642 echo "BUILD_DOCS=yes" >> $config_host_mak
6644 if test "$modules" = "yes"; then
6645 # $shacmd can generate a hash started with digit, which the compiler doesn't
6646 # like as an symbol. So prefix it with an underscore
6647 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6648 echo "CONFIG_MODULES=y" >> $config_host_mak
6650 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6651 echo "CONFIG_X11=y" >> $config_host_mak
6652 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6653 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6655 if test "$sdl" = "yes" ; then
6656 echo "CONFIG_SDL=m" >> $config_host_mak
6657 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6658 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6659 if test "$sdl_image" = "yes" ; then
6660 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6663 if test "$cocoa" = "yes" ; then
6664 echo "CONFIG_COCOA=y" >> $config_host_mak
6666 if test "$iconv" = "yes" ; then
6667 echo "CONFIG_ICONV=y" >> $config_host_mak
6668 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6669 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6671 if test "$curses" = "yes" ; then
6672 echo "CONFIG_CURSES=m" >> $config_host_mak
6673 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6674 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6676 if test "$pipe2" = "yes" ; then
6677 echo "CONFIG_PIPE2=y" >> $config_host_mak
6679 if test "$accept4" = "yes" ; then
6680 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6682 if test "$splice" = "yes" ; then
6683 echo "CONFIG_SPLICE=y" >> $config_host_mak
6685 if test "$eventfd" = "yes" ; then
6686 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6688 if test "$memfd" = "yes" ; then
6689 echo "CONFIG_MEMFD=y" >> $config_host_mak
6691 if test "$have_usbfs" = "yes" ; then
6692 echo "CONFIG_USBFS=y" >> $config_host_mak
6694 if test "$fallocate" = "yes" ; then
6695 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6697 if test "$fallocate_punch_hole" = "yes" ; then
6698 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6700 if test "$fallocate_zero_range" = "yes" ; then
6701 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6703 if test "$posix_fallocate" = "yes" ; then
6704 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6706 if test "$sync_file_range" = "yes" ; then
6707 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6709 if test "$fiemap" = "yes" ; then
6710 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6712 if test "$dup3" = "yes" ; then
6713 echo "CONFIG_DUP3=y" >> $config_host_mak
6715 if test "$ppoll" = "yes" ; then
6716 echo "CONFIG_PPOLL=y" >> $config_host_mak
6718 if test "$prctl_pr_set_timerslack" = "yes" ; then
6719 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6721 if test "$epoll" = "yes" ; then
6722 echo "CONFIG_EPOLL=y" >> $config_host_mak
6724 if test "$epoll_create1" = "yes" ; then
6725 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6727 if test "$sendfile" = "yes" ; then
6728 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6730 if test "$timerfd" = "yes" ; then
6731 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6733 if test "$setns" = "yes" ; then
6734 echo "CONFIG_SETNS=y" >> $config_host_mak
6736 if test "$clock_adjtime" = "yes" ; then
6737 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6739 if test "$syncfs" = "yes" ; then
6740 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6742 if test "$inotify" = "yes" ; then
6743 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6745 if test "$inotify1" = "yes" ; then
6746 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6748 if test "$sem_timedwait" = "yes" ; then
6749 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6751 if test "$strchrnul" = "yes" ; then
6752 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6754 if test "$byteswap_h" = "yes" ; then
6755 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6757 if test "$bswap_h" = "yes" ; then
6758 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6760 if test "$curl" = "yes" ; then
6761 echo "CONFIG_CURL=m" >> $config_host_mak
6762 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6763 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6765 if test "$brlapi" = "yes" ; then
6766 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6767 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6769 if test "$bluez" = "yes" ; then
6770 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6771 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6773 if test "$gtk" = "yes" ; then
6774 echo "CONFIG_GTK=m" >> $config_host_mak
6775 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6776 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6777 if test "$gtk_gl" = "yes" ; then
6778 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6781 if test "$gio" = "yes" ; then
6782 echo "CONFIG_GIO=y" >> $config_host_mak
6783 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6784 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6786 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6787 if test "$gnutls" = "yes" ; then
6788 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6790 if test "$gcrypt" = "yes" ; then
6791 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6792 if test "$gcrypt_hmac" = "yes" ; then
6793 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6796 if test "$nettle" = "yes" ; then
6797 echo "CONFIG_NETTLE=y" >> $config_host_mak
6798 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6800 if test "$tasn1" = "yes" ; then
6801 echo "CONFIG_TASN1=y" >> $config_host_mak
6803 if test "$auth_pam" = "yes" ; then
6804 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6806 if test "$have_ifaddrs_h" = "yes" ; then
6807 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6809 if test "$have_broken_size_max" = "yes" ; then
6810 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6813 # Work around a system header bug with some kernel/XFS header
6814 # versions where they both try to define 'struct fsxattr':
6815 # xfs headers will not try to redefine structs from linux headers
6816 # if this macro is set.
6817 if test "$have_fsxattr" = "yes" ; then
6818 echo "HAVE_FSXATTR=y" >> $config_host_mak
6820 if test "$have_copy_file_range" = "yes" ; then
6821 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6823 if test "$vte" = "yes" ; then
6824 echo "CONFIG_VTE=y" >> $config_host_mak
6825 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6826 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6828 if test "$virglrenderer" = "yes" ; then
6829 echo "CONFIG_VIRGL=y" >> $config_host_mak
6830 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6831 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6833 if test "$xen" = "yes" ; then
6834 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6835 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6837 if test "$linux_aio" = "yes" ; then
6838 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6840 if test "$attr" = "yes" ; then
6841 echo "CONFIG_ATTR=y" >> $config_host_mak
6843 if test "$libattr" = "yes" ; then
6844 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6846 if test "$virtfs" = "yes" ; then
6847 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6849 if test "$mpath" = "yes" ; then
6850 echo "CONFIG_MPATH=y" >> $config_host_mak
6851 if test "$mpathpersist_new_api" = "yes"; then
6852 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6855 if test "$vhost_scsi" = "yes" ; then
6856 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6858 if test "$vhost_net" = "yes" ; then
6859 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6861 if test "$vhost_net_user" = "yes" ; then
6862 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6864 if test "$vhost_crypto" = "yes" ; then
6865 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6867 if test "$vhost_vsock" = "yes" ; then
6868 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6870 if test "$vhost_kernel" = "yes" ; then
6871 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6873 if test "$vhost_user" = "yes" ; then
6874 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6876 if test "$blobs" = "yes" ; then
6877 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6879 if test "$iovec" = "yes" ; then
6880 echo "CONFIG_IOVEC=y" >> $config_host_mak
6882 if test "$preadv" = "yes" ; then
6883 echo "CONFIG_PREADV=y" >> $config_host_mak
6885 if test "$fdt" != "no" ; then
6886 echo "CONFIG_FDT=y" >> $config_host_mak
6888 if test "$membarrier" = "yes" ; then
6889 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6891 if test "$signalfd" = "yes" ; then
6892 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6894 if test "$optreset" = "yes" ; then
6895 echo "HAVE_OPTRESET=y" >> $config_host_mak
6897 if test "$tcg" = "yes"; then
6898 echo "CONFIG_TCG=y" >> $config_host_mak
6899 if test "$tcg_interpreter" = "yes" ; then
6900 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6903 if test "$fdatasync" = "yes" ; then
6904 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6906 if test "$madvise" = "yes" ; then
6907 echo "CONFIG_MADVISE=y" >> $config_host_mak
6909 if test "$posix_madvise" = "yes" ; then
6910 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6912 if test "$posix_memalign" = "yes" ; then
6913 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6916 if test "$spice" = "yes" ; then
6917 echo "CONFIG_SPICE=y" >> $config_host_mak
6920 if test "$smartcard" = "yes" ; then
6921 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6922 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6923 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6926 if test "$libusb" = "yes" ; then
6927 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6928 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6929 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6932 if test "$usb_redir" = "yes" ; then
6933 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6934 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6935 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6938 if test "$opengl" = "yes" ; then
6939 echo "CONFIG_OPENGL=y" >> $config_host_mak
6940 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6941 if test "$opengl_dmabuf" = "yes" ; then
6942 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6946 if test "$gbm" = "yes" ; then
6947 echo "CONFIG_GBM=y" >> $config_host_mak
6948 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6949 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6953 if test "$malloc_trim" = "yes" ; then
6954 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6957 if test "$avx2_opt" = "yes" ; then
6958 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6961 if test "$lzo" = "yes" ; then
6962 echo "CONFIG_LZO=y" >> $config_host_mak
6965 if test "$snappy" = "yes" ; then
6966 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6969 if test "$bzip2" = "yes" ; then
6970 echo "CONFIG_BZIP2=y" >> $config_host_mak
6971 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6974 if test "$lzfse" = "yes" ; then
6975 echo "CONFIG_LZFSE=y" >> $config_host_mak
6976 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6979 if test "$libiscsi" = "yes" ; then
6980 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6981 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6982 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6985 if test "$libnfs" = "yes" ; then
6986 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6987 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6990 if test "$seccomp" = "yes"; then
6991 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6992 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6993 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6996 # XXX: suppress that
6997 if [ "$bsd" = "yes" ] ; then
6998 echo "CONFIG_BSD=y" >> $config_host_mak
7001 if test "$localtime_r" = "yes" ; then
7002 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7004 if test "$qom_cast_debug" = "yes" ; then
7005 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7007 if test "$rbd" = "yes" ; then
7008 echo "CONFIG_RBD=m" >> $config_host_mak
7009 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7010 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7013 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7014 if test "$coroutine_pool" = "yes" ; then
7015 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7016 else
7017 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7020 if test "$debug_stack_usage" = "yes" ; then
7021 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7024 if test "$crypto_afalg" = "yes" ; then
7025 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7028 if test "$open_by_handle_at" = "yes" ; then
7029 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7032 if test "$linux_magic_h" = "yes" ; then
7033 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7036 if test "$pragma_diagnostic_available" = "yes" ; then
7037 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7040 if test "$valgrind_h" = "yes" ; then
7041 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7044 if test "$have_asan_iface_fiber" = "yes" ; then
7045 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7048 if test "$has_environ" = "yes" ; then
7049 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7052 if test "$cpuid_h" = "yes" ; then
7053 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7056 if test "$int128" = "yes" ; then
7057 echo "CONFIG_INT128=y" >> $config_host_mak
7060 if test "$atomic128" = "yes" ; then
7061 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7064 if test "$cmpxchg128" = "yes" ; then
7065 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7068 if test "$atomic64" = "yes" ; then
7069 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7072 if test "$vector16" = "yes" ; then
7073 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7076 if test "$getauxval" = "yes" ; then
7077 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7080 if test "$glusterfs" = "yes" ; then
7081 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7082 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7083 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7086 if test "$glusterfs_xlator_opt" = "yes" ; then
7087 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7090 if test "$glusterfs_discard" = "yes" ; then
7091 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7094 if test "$glusterfs_fallocate" = "yes" ; then
7095 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7098 if test "$glusterfs_zerofill" = "yes" ; then
7099 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7102 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7103 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7106 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7107 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7110 if test "$libssh" = "yes" ; then
7111 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7112 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7113 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7116 if test "$live_block_migration" = "yes" ; then
7117 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7120 if test "$tpm" = "yes"; then
7121 echo 'CONFIG_TPM=y' >> $config_host_mak
7124 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7125 if have_backend "nop"; then
7126 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7128 if have_backend "simple"; then
7129 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7130 # Set the appropriate trace file.
7131 trace_file="\"$trace_file-\" FMT_pid"
7133 if have_backend "log"; then
7134 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7136 if have_backend "ust"; then
7137 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7139 if have_backend "dtrace"; then
7140 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7141 if test "$trace_backend_stap" = "yes" ; then
7142 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7145 if have_backend "ftrace"; then
7146 if test "$linux" = "yes" ; then
7147 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7148 else
7149 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7152 if have_backend "syslog"; then
7153 if test "$posix_syslog" = "yes" ; then
7154 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7155 else
7156 feature_not_found "syslog(trace backend)" "syslog not available"
7159 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7161 if test "$rdma" = "yes" ; then
7162 echo "CONFIG_RDMA=y" >> $config_host_mak
7163 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7166 if test "$pvrdma" = "yes" ; then
7167 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7170 if test "$have_rtnetlink" = "yes" ; then
7171 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7174 if test "$libxml2" = "yes" ; then
7175 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7176 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7177 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7180 if test "$replication" = "yes" ; then
7181 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7184 if test "$have_af_vsock" = "yes" ; then
7185 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7188 if test "$have_sysmacros" = "yes" ; then
7189 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7192 if test "$have_static_assert" = "yes" ; then
7193 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7196 if test "$have_utmpx" = "yes" ; then
7197 echo "HAVE_UTMPX=y" >> $config_host_mak
7199 if test "$have_getrandom" = "yes" ; then
7200 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7202 if test "$ivshmem" = "yes" ; then
7203 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7205 if test "$capstone" != "no" ; then
7206 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7208 if test "$debug_mutex" = "yes" ; then
7209 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7212 # Hold two types of flag:
7213 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7214 # a thread we have a handle to
7215 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7216 # platform
7217 if test "$pthread_setname_np_w_tid" = "yes" ; then
7218 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7219 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7220 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7221 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7222 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7225 if test "$vxhs" = "yes" ; then
7226 echo "CONFIG_VXHS=y" >> $config_host_mak
7227 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7230 if test "$libpmem" = "yes" ; then
7231 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7234 if test "$bochs" = "yes" ; then
7235 echo "CONFIG_BOCHS=y" >> $config_host_mak
7237 if test "$cloop" = "yes" ; then
7238 echo "CONFIG_CLOOP=y" >> $config_host_mak
7240 if test "$dmg" = "yes" ; then
7241 echo "CONFIG_DMG=y" >> $config_host_mak
7243 if test "$qcow1" = "yes" ; then
7244 echo "CONFIG_QCOW1=y" >> $config_host_mak
7246 if test "$vdi" = "yes" ; then
7247 echo "CONFIG_VDI=y" >> $config_host_mak
7249 if test "$vvfat" = "yes" ; then
7250 echo "CONFIG_VVFAT=y" >> $config_host_mak
7252 if test "$qed" = "yes" ; then
7253 echo "CONFIG_QED=y" >> $config_host_mak
7255 if test "$parallels" = "yes" ; then
7256 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7258 if test "$sheepdog" = "yes" ; then
7259 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7262 if test "$tcg_interpreter" = "yes"; then
7263 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7264 elif test "$ARCH" = "sparc64" ; then
7265 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7266 elif test "$ARCH" = "s390x" ; then
7267 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7268 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7269 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7270 elif test "$ARCH" = "ppc64" ; then
7271 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7272 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7273 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7274 else
7275 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7277 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7279 echo "TOOLS=$tools" >> $config_host_mak
7280 echo "ROMS=$roms" >> $config_host_mak
7281 echo "MAKE=$make" >> $config_host_mak
7282 echo "INSTALL=$install" >> $config_host_mak
7283 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7284 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7285 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7286 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7287 echo "PYTHON=$python" >> $config_host_mak
7288 echo "PYTHON2=$python2" >> $config_host_mak
7289 echo "CC=$cc" >> $config_host_mak
7290 if $iasl -h > /dev/null 2>&1; then
7291 echo "IASL=$iasl" >> $config_host_mak
7293 echo "HOST_CC=$host_cc" >> $config_host_mak
7294 echo "CXX=$cxx" >> $config_host_mak
7295 echo "OBJCC=$objcc" >> $config_host_mak
7296 echo "AR=$ar" >> $config_host_mak
7297 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7298 echo "AS=$as" >> $config_host_mak
7299 echo "CCAS=$ccas" >> $config_host_mak
7300 echo "CPP=$cpp" >> $config_host_mak
7301 echo "OBJCOPY=$objcopy" >> $config_host_mak
7302 echo "LD=$ld" >> $config_host_mak
7303 echo "RANLIB=$ranlib" >> $config_host_mak
7304 echo "NM=$nm" >> $config_host_mak
7305 echo "WINDRES=$windres" >> $config_host_mak
7306 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7307 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7308 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7309 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7310 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7311 if test "$sparse" = "yes" ; then
7312 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7313 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7314 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7315 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7316 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7318 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7319 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7320 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7321 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7322 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7323 echo "LIBS+=$LIBS" >> $config_host_mak
7324 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7325 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7326 echo "EXESUF=$EXESUF" >> $config_host_mak
7327 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7328 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7329 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7330 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7331 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7332 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7333 if test "$gcov" = "yes" ; then
7334 echo "CONFIG_GCOV=y" >> $config_host_mak
7335 echo "GCOV=$gcov_tool" >> $config_host_mak
7338 if test "$libudev" != "no"; then
7339 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7340 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7343 # use included Linux headers
7344 if test "$linux" = "yes" ; then
7345 mkdir -p linux-headers
7346 case "$cpu" in
7347 i386|x86_64|x32)
7348 linux_arch=x86
7350 ppc|ppc64|ppc64le)
7351 linux_arch=powerpc
7353 s390x)
7354 linux_arch=s390
7356 aarch64)
7357 linux_arch=arm64
7359 mips64)
7360 linux_arch=mips
7363 # For most CPUs the kernel architecture name and QEMU CPU name match.
7364 linux_arch="$cpu"
7366 esac
7367 # For non-KVM architectures we will not have asm headers
7368 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7369 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7373 for target in $target_list; do
7374 target_dir="$target"
7375 config_target_mak=$target_dir/config-target.mak
7376 target_name=$(echo $target | cut -d '-' -f 1)
7377 target_aligned_only="no"
7378 case "$target_name" in
7379 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7380 target_aligned_only="yes"
7382 esac
7383 target_bigendian="no"
7384 case "$target_name" in
7385 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7386 target_bigendian="yes"
7388 esac
7389 target_softmmu="no"
7390 target_user_only="no"
7391 target_linux_user="no"
7392 target_bsd_user="no"
7393 case "$target" in
7394 ${target_name}-softmmu)
7395 target_softmmu="yes"
7397 ${target_name}-linux-user)
7398 target_user_only="yes"
7399 target_linux_user="yes"
7401 ${target_name}-bsd-user)
7402 target_user_only="yes"
7403 target_bsd_user="yes"
7406 error_exit "Target '$target' not recognised"
7407 exit 1
7409 esac
7411 mkdir -p $target_dir
7412 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7414 bflt="no"
7415 mttcg="no"
7416 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7417 gdb_xml_files=""
7419 TARGET_ARCH="$target_name"
7420 TARGET_BASE_ARCH=""
7421 TARGET_ABI_DIR=""
7423 case "$target_name" in
7424 i386)
7425 mttcg="yes"
7426 gdb_xml_files="i386-32bit.xml"
7428 x86_64)
7429 TARGET_BASE_ARCH=i386
7430 mttcg="yes"
7431 gdb_xml_files="i386-64bit.xml"
7433 alpha)
7434 mttcg="yes"
7436 arm|armeb)
7437 TARGET_ARCH=arm
7438 bflt="yes"
7439 mttcg="yes"
7440 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7442 aarch64|aarch64_be)
7443 TARGET_ARCH=aarch64
7444 TARGET_BASE_ARCH=arm
7445 bflt="yes"
7446 mttcg="yes"
7447 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7449 cris)
7451 hppa)
7452 mttcg="yes"
7454 lm32)
7456 m68k)
7457 bflt="yes"
7458 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7460 microblaze|microblazeel)
7461 TARGET_ARCH=microblaze
7462 bflt="yes"
7463 echo "TARGET_ABI32=y" >> $config_target_mak
7465 mips|mipsel)
7466 mttcg="yes"
7467 TARGET_ARCH=mips
7468 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7470 mipsn32|mipsn32el)
7471 mttcg="yes"
7472 TARGET_ARCH=mips64
7473 TARGET_BASE_ARCH=mips
7474 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7475 echo "TARGET_ABI32=y" >> $config_target_mak
7477 mips64|mips64el)
7478 mttcg="yes"
7479 TARGET_ARCH=mips64
7480 TARGET_BASE_ARCH=mips
7481 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7483 moxie)
7485 nios2)
7487 or1k)
7488 TARGET_ARCH=openrisc
7489 TARGET_BASE_ARCH=openrisc
7491 ppc)
7492 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7494 ppc64)
7495 TARGET_BASE_ARCH=ppc
7496 TARGET_ABI_DIR=ppc
7497 mttcg=yes
7498 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7500 ppc64le)
7501 TARGET_ARCH=ppc64
7502 TARGET_BASE_ARCH=ppc
7503 TARGET_ABI_DIR=ppc
7504 mttcg=yes
7505 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7507 ppc64abi32)
7508 TARGET_ARCH=ppc64
7509 TARGET_BASE_ARCH=ppc
7510 TARGET_ABI_DIR=ppc
7511 echo "TARGET_ABI32=y" >> $config_target_mak
7512 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7514 riscv32)
7515 TARGET_BASE_ARCH=riscv
7516 TARGET_ABI_DIR=riscv
7517 mttcg=yes
7518 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7520 riscv64)
7521 TARGET_BASE_ARCH=riscv
7522 TARGET_ABI_DIR=riscv
7523 mttcg=yes
7524 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7526 sh4|sh4eb)
7527 TARGET_ARCH=sh4
7528 bflt="yes"
7530 sparc)
7532 sparc64)
7533 TARGET_BASE_ARCH=sparc
7535 sparc32plus)
7536 TARGET_ARCH=sparc64
7537 TARGET_BASE_ARCH=sparc
7538 TARGET_ABI_DIR=sparc
7539 echo "TARGET_ABI32=y" >> $config_target_mak
7541 s390x)
7542 mttcg=yes
7543 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7545 tilegx)
7547 tricore)
7549 unicore32)
7551 xtensa|xtensaeb)
7552 TARGET_ARCH=xtensa
7553 bflt="yes"
7554 mttcg="yes"
7557 error_exit "Unsupported target CPU"
7559 esac
7560 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7561 if [ "$TARGET_BASE_ARCH" = "" ]; then
7562 TARGET_BASE_ARCH=$TARGET_ARCH
7565 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7567 upper() {
7568 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7571 target_arch_name="$(upper $TARGET_ARCH)"
7572 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7573 echo "TARGET_NAME=$target_name" >> $config_target_mak
7574 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7575 if [ "$TARGET_ABI_DIR" = "" ]; then
7576 TARGET_ABI_DIR=$TARGET_ARCH
7578 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7579 if [ "$HOST_VARIANT_DIR" != "" ]; then
7580 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7583 if supported_xen_target $target; then
7584 echo "CONFIG_XEN=y" >> $config_target_mak
7585 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7586 if test "$xen_pci_passthrough" = yes; then
7587 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7589 else
7590 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7592 if supported_kvm_target $target; then
7593 echo "CONFIG_KVM=y" >> $config_target_mak
7594 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7595 else
7596 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7598 if supported_hax_target $target; then
7599 echo "CONFIG_HAX=y" >> $config_target_mak
7601 if supported_hvf_target $target; then
7602 echo "CONFIG_HVF=y" >> $config_target_mak
7604 if supported_whpx_target $target; then
7605 echo "CONFIG_WHPX=y" >> $config_target_mak
7607 if test "$target_aligned_only" = "yes" ; then
7608 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7610 if test "$target_bigendian" = "yes" ; then
7611 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7613 if test "$target_softmmu" = "yes" ; then
7614 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7615 if test "$mttcg" = "yes" ; then
7616 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7619 if test "$target_user_only" = "yes" ; then
7620 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7621 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7623 if test "$target_linux_user" = "yes" ; then
7624 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7626 list=""
7627 if test ! -z "$gdb_xml_files" ; then
7628 for x in $gdb_xml_files; do
7629 list="$list $source_path/gdb-xml/$x"
7630 done
7631 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7634 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7635 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7637 if test "$target_bsd_user" = "yes" ; then
7638 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7642 # generate QEMU_CFLAGS/LDFLAGS for targets
7644 cflags=""
7645 ldflags=""
7647 disas_config() {
7648 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7649 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7652 for i in $ARCH $TARGET_BASE_ARCH ; do
7653 case "$i" in
7654 alpha)
7655 disas_config "ALPHA"
7657 aarch64)
7658 if test -n "${cxx}"; then
7659 disas_config "ARM_A64"
7662 arm)
7663 disas_config "ARM"
7664 if test -n "${cxx}"; then
7665 disas_config "ARM_A64"
7668 cris)
7669 disas_config "CRIS"
7671 hppa)
7672 disas_config "HPPA"
7674 i386|x86_64|x32)
7675 disas_config "I386"
7677 lm32)
7678 disas_config "LM32"
7680 m68k)
7681 disas_config "M68K"
7683 microblaze*)
7684 disas_config "MICROBLAZE"
7686 mips*)
7687 disas_config "MIPS"
7688 if test -n "${cxx}"; then
7689 disas_config "NANOMIPS"
7692 moxie*)
7693 disas_config "MOXIE"
7695 nios2)
7696 disas_config "NIOS2"
7698 or1k)
7699 disas_config "OPENRISC"
7701 ppc*)
7702 disas_config "PPC"
7704 riscv*)
7705 disas_config "RISCV"
7707 s390*)
7708 disas_config "S390"
7710 sh4)
7711 disas_config "SH4"
7713 sparc*)
7714 disas_config "SPARC"
7716 xtensa*)
7717 disas_config "XTENSA"
7719 esac
7720 done
7721 if test "$tcg_interpreter" = "yes" ; then
7722 disas_config "TCI"
7725 case "$ARCH" in
7726 alpha)
7727 # Ensure there's only a single GP
7728 cflags="-msmall-data $cflags"
7730 esac
7732 if test "$gprof" = "yes" ; then
7733 echo "TARGET_GPROF=y" >> $config_target_mak
7734 if test "$target_linux_user" = "yes" ; then
7735 cflags="-p $cflags"
7736 ldflags="-p $ldflags"
7738 if test "$target_softmmu" = "yes" ; then
7739 ldflags="-p $ldflags"
7740 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7744 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7745 ldflags="$ldflags $textseg_ldflags"
7748 # Newer kernels on s390 check for an S390_PGSTE program header and
7749 # enable the pgste page table extensions in that case. This makes
7750 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7751 # header if
7752 # - we build on s390x
7753 # - we build the system emulation for s390x (qemu-system-s390x)
7754 # - KVM is enabled
7755 # - the linker supports --s390-pgste
7756 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7757 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7758 if ld_has --s390-pgste ; then
7759 ldflags="-Wl,--s390-pgste $ldflags"
7763 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7764 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7766 done # for target in $targets
7768 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7769 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7771 if [ "$fdt" = "git" ]; then
7772 echo "config-host.h: dtc/all" >> $config_host_mak
7774 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7775 echo "config-host.h: capstone/all" >> $config_host_mak
7777 if test -n "$LIBCAPSTONE"; then
7778 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7781 if test "$numa" = "yes"; then
7782 echo "CONFIG_NUMA=y" >> $config_host_mak
7785 if test "$ccache_cpp2" = "yes"; then
7786 echo "export CCACHE_CPP2=y" >> $config_host_mak
7789 # If we're using a separate build tree, set it up now.
7790 # DIRS are directories which we simply mkdir in the build tree;
7791 # LINKS are things to symlink back into the source tree
7792 # (these can be both files and directories).
7793 # Caution: do not add files or directories here using wildcards. This
7794 # will result in problems later if a new file matching the wildcard is
7795 # added to the source tree -- nothing will cause configure to be rerun
7796 # so the build tree will be missing the link back to the new file, and
7797 # tests might fail. Prefer to keep the relevant files in their own
7798 # directory and symlink the directory instead.
7799 DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
7800 DIRS="$DIRS tests/fp tests/qgraph"
7801 DIRS="$DIRS docs docs/interop fsdev scsi"
7802 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7803 DIRS="$DIRS roms/seabios roms/vgabios"
7804 LINKS="Makefile"
7805 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7806 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
7807 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7808 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7809 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7810 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7811 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7812 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7813 LINKS="$LINKS tests/acceptance tests/data"
7814 LINKS="$LINKS tests/qemu-iotests/check"
7815 LINKS="$LINKS python"
7816 for bios_file in \
7817 $source_path/pc-bios/*.bin \
7818 $source_path/pc-bios/*.lid \
7819 $source_path/pc-bios/*.rom \
7820 $source_path/pc-bios/*.dtb \
7821 $source_path/pc-bios/*.img \
7822 $source_path/pc-bios/openbios-* \
7823 $source_path/pc-bios/u-boot.* \
7824 $source_path/pc-bios/edk2-*.fd.bz2 \
7825 $source_path/pc-bios/palcode-*
7827 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7828 done
7829 mkdir -p $DIRS
7830 for f in $LINKS ; do
7831 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7832 symlink "$source_path/$f" "$f"
7834 done
7836 (for i in $cross_cc_vars; do
7837 export $i
7838 done
7839 export target_list source_path
7840 $source_path/tests/tcg/configure.sh)
7842 # temporary config to build submodules
7843 for rom in seabios vgabios ; do
7844 config_mak=roms/$rom/config.mak
7845 echo "# Automatically generated by configure - do not modify" > $config_mak
7846 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7847 echo "AS=$as" >> $config_mak
7848 echo "CCAS=$ccas" >> $config_mak
7849 echo "CC=$cc" >> $config_mak
7850 echo "BCC=bcc" >> $config_mak
7851 echo "CPP=$cpp" >> $config_mak
7852 echo "OBJCOPY=objcopy" >> $config_mak
7853 echo "IASL=$iasl" >> $config_mak
7854 echo "LD=$ld" >> $config_mak
7855 echo "RANLIB=$ranlib" >> $config_mak
7856 done
7858 # set up qemu-iotests in this build directory
7859 iotests_common_env="tests/qemu-iotests/common.env"
7861 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7862 echo >> "$iotests_common_env"
7863 echo "export PYTHON='$python'" >> "$iotests_common_env"
7865 # Save the configure command line for later reuse.
7866 cat <<EOD >config.status
7867 #!/bin/sh
7868 # Generated by configure.
7869 # Run this file to recreate the current configuration.
7870 # Compiler output produced by configure, useful for debugging
7871 # configure, is in config.log if it exists.
7874 preserve_env() {
7875 envname=$1
7877 eval envval=\$$envname
7879 if test -n "$envval"
7880 then
7881 echo "$envname='$envval'" >> config.status
7882 echo "export $envname" >> config.status
7883 else
7884 echo "unset $envname" >> config.status
7888 # Preserve various env variables that influence what
7889 # features/build target configure will detect
7890 preserve_env AR
7891 preserve_env AS
7892 preserve_env CC
7893 preserve_env CPP
7894 preserve_env CXX
7895 preserve_env INSTALL
7896 preserve_env LD
7897 preserve_env LD_LIBRARY_PATH
7898 preserve_env LIBTOOL
7899 preserve_env MAKE
7900 preserve_env NM
7901 preserve_env OBJCOPY
7902 preserve_env PATH
7903 preserve_env PKG_CONFIG
7904 preserve_env PKG_CONFIG_LIBDIR
7905 preserve_env PKG_CONFIG_PATH
7906 preserve_env PYTHON
7907 preserve_env SDL2_CONFIG
7908 preserve_env SMBD
7909 preserve_env STRIP
7910 preserve_env WINDRES
7912 printf "exec" >>config.status
7913 printf " '%s'" "$0" "$@" >>config.status
7914 echo ' "$@"' >>config.status
7915 chmod +x config.status
7917 rm -r "$TMPDIR1"