numa: move default mapping init to machine
[qemu/kevin.git] / configure
blob21944eaa0542b838aac6eb2c2ada10c0a484595f
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 error_exit() {
44 echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo
51 exit 1
54 do_compiler() {
55 # Run the compiler, capturing its output to the log. First argument
56 # is compiler binary to execute.
57 local compiler="$1"
58 shift
59 echo $compiler "$@" >> config.log
60 $compiler "$@" >> config.log 2>&1 || return $?
61 # Test passed. If this is an --enable-werror build, rerun
62 # the test with -Werror and bail out if it fails. This
63 # makes warning-generating-errors in configure test code
64 # obvious to developers.
65 if test "$werror" != "yes"; then
66 return 0
68 # Don't bother rerunning the compile if we were already using -Werror
69 case "$*" in
70 *-Werror*)
71 return 0
73 esac
74 echo $compiler -Werror "$@" >> config.log
75 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76 error_exit "configure test passed without -Werror but failed with -Werror." \
77 "This is probably a bug in the configure script. The failing command" \
78 "will be at the bottom of config.log." \
79 "You can run configure with --disable-werror to bypass this check."
82 do_cc() {
83 do_compiler "$cc" "$@"
86 do_cxx() {
87 do_compiler "$cxx" "$@"
90 update_cxxflags() {
91 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
92 # options which some versions of GCC's C++ compiler complain about
93 # because they only make sense for C programs.
94 QEMU_CXXFLAGS=
95 for arg in $QEMU_CFLAGS; do
96 case $arg in
97 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
98 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
101 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
103 esac
104 done
107 compile_object() {
108 local_cflags="$1"
109 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
112 compile_prog() {
113 local_cflags="$1"
114 local_ldflags="$2"
115 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
118 # symbolically link $1 to $2. Portable version of "ln -sf".
119 symlink() {
120 rm -rf "$2"
121 mkdir -p "$(dirname "$2")"
122 ln -s "$1" "$2"
125 # check whether a command is available to this shell (may be either an
126 # executable or a builtin)
127 has() {
128 type "$1" >/dev/null 2>&1
131 # search for an executable in PATH
132 path_of() {
133 local_command="$1"
134 local_ifs="$IFS"
135 local_dir=""
137 # pathname has a dir component?
138 if [ "${local_command#*/}" != "$local_command" ]; then
139 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
140 echo "$local_command"
141 return 0
144 if [ -z "$local_command" ]; then
145 return 1
148 IFS=:
149 for local_dir in $PATH; do
150 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
151 echo "$local_dir/$local_command"
152 IFS="${local_ifs:-$(printf ' \t\n')}"
153 return 0
155 done
156 # not found
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 1
161 have_backend () {
162 echo "$trace_backends" | grep "$1" >/dev/null
165 # default parameters
166 source_path=$(dirname "$0")
167 cpu=""
168 iasl="iasl"
169 interp_prefix="/usr/gnemul/qemu-%M"
170 static="no"
171 cross_prefix=""
172 audio_drv_list=""
173 block_drv_rw_whitelist=""
174 block_drv_ro_whitelist=""
175 host_cc="cc"
176 libs_softmmu=""
177 libs_tools=""
178 audio_pt_int=""
179 audio_win_int=""
180 cc_i386=i386-pc-linux-gnu-gcc
181 libs_qga=""
182 debug_info="yes"
183 stack_protector=""
185 # Don't accept a target_list environment variable.
186 unset target_list
188 # Default value for a variable defining feature "foo".
189 # * foo="no" feature will only be used if --enable-foo arg is given
190 # * foo="" feature will be searched for, and if found, will be used
191 # unless --disable-foo is given
192 # * foo="yes" this value will only be set by --enable-foo flag.
193 # feature will searched for,
194 # if not found, configure exits with error
196 # Always add --enable-foo and --disable-foo command line args.
197 # Distributions want to ensure that several features are compiled in, and it
198 # is impossible without a --enable-foo that exits if a feature is not found.
200 bluez=""
201 brlapi=""
202 curl=""
203 curses=""
204 docs=""
205 fdt=""
206 netmap="no"
207 pixman=""
208 sdl=""
209 sdlabi=""
210 virtfs=""
211 vnc="yes"
212 sparse="no"
213 vde=""
214 vnc_sasl=""
215 vnc_jpeg=""
216 vnc_png=""
217 xen=""
218 xen_ctrl_version=""
219 xen_pv_domain_build="no"
220 xen_pci_passthrough=""
221 linux_aio=""
222 cap_ng=""
223 attr=""
224 libattr=""
225 xfs=""
227 vhost_net="no"
228 vhost_scsi="no"
229 vhost_vsock="no"
230 kvm="no"
231 hax="no"
232 rdma=""
233 gprof="no"
234 debug_tcg="no"
235 debug="no"
236 fortify_source=""
237 strip_opt="yes"
238 tcg_interpreter="no"
239 bigendian="no"
240 mingw32="no"
241 gcov="no"
242 gcov_tool="gcov"
243 EXESUF=""
244 DSOSUF=".so"
245 LDFLAGS_SHARED="-shared"
246 modules="no"
247 prefix="/usr/local"
248 mandir="\${prefix}/share/man"
249 datadir="\${prefix}/share"
250 qemu_docdir="\${prefix}/share/doc/qemu"
251 bindir="\${prefix}/bin"
252 libdir="\${prefix}/lib"
253 libexecdir="\${prefix}/libexec"
254 includedir="\${prefix}/include"
255 sysconfdir="\${prefix}/etc"
256 local_statedir="\${prefix}/var"
257 confsuffix="/qemu"
258 slirp="yes"
259 oss_lib=""
260 bsd="no"
261 linux="no"
262 solaris="no"
263 profiler="no"
264 cocoa="no"
265 softmmu="yes"
266 linux_user="no"
267 bsd_user="no"
268 aix="no"
269 blobs="yes"
270 pkgversion=""
271 pie=""
272 qom_cast_debug="yes"
273 trace_backends="log"
274 trace_file="trace"
275 spice=""
276 rbd=""
277 smartcard=""
278 libusb=""
279 usb_redir=""
280 opengl=""
281 opengl_dmabuf="no"
282 avx2_opt="no"
283 zlib="yes"
284 lzo=""
285 snappy=""
286 bzip2=""
287 guest_agent=""
288 guest_agent_with_vss="no"
289 guest_agent_ntddscsi="no"
290 guest_agent_msi=""
291 vss_win32_sdk=""
292 win_sdk="no"
293 want_tools="yes"
294 libiscsi=""
295 libnfs=""
296 coroutine=""
297 coroutine_pool=""
298 debug_stack_usage="no"
299 seccomp=""
300 glusterfs=""
301 glusterfs_xlator_opt="no"
302 glusterfs_discard="no"
303 glusterfs_fallocate="no"
304 glusterfs_zerofill="no"
305 gtk=""
306 gtkabi=""
307 gtk_gl="no"
308 tls_priority="NORMAL"
309 gnutls=""
310 gnutls_rnd=""
311 nettle=""
312 nettle_kdf="no"
313 gcrypt=""
314 gcrypt_hmac="no"
315 gcrypt_kdf="no"
316 vte=""
317 virglrenderer=""
318 tpm="yes"
319 libssh2=""
320 live_block_migration="yes"
321 numa=""
322 tcmalloc="no"
323 jemalloc="no"
324 replication="yes"
325 vxhs=""
327 supported_cpu="no"
328 supported_os="no"
329 bogus_os="no"
331 # parse CC options first
332 for opt do
333 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
334 case "$opt" in
335 --cross-prefix=*) cross_prefix="$optarg"
337 --cc=*) CC="$optarg"
339 --cxx=*) CXX="$optarg"
341 --source-path=*) source_path="$optarg"
343 --cpu=*) cpu="$optarg"
345 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
346 EXTRA_CFLAGS="$optarg"
348 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
349 EXTRA_LDFLAGS="$optarg"
351 --enable-debug-info) debug_info="yes"
353 --disable-debug-info) debug_info="no"
355 esac
356 done
357 # OS specific
358 # Using uname is really, really broken. Once we have the right set of checks
359 # we can eliminate its usage altogether.
361 # Preferred compiler:
362 # ${CC} (if set)
363 # ${cross_prefix}gcc (if cross-prefix specified)
364 # system compiler
365 if test -z "${CC}${cross_prefix}"; then
366 cc="$host_cc"
367 else
368 cc="${CC-${cross_prefix}gcc}"
371 if test -z "${CXX}${cross_prefix}"; then
372 cxx="c++"
373 else
374 cxx="${CXX-${cross_prefix}g++}"
377 ar="${AR-${cross_prefix}ar}"
378 as="${AS-${cross_prefix}as}"
379 ccas="${CCAS-$cc}"
380 cpp="${CPP-$cc -E}"
381 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
382 ld="${LD-${cross_prefix}ld}"
383 nm="${NM-${cross_prefix}nm}"
384 strip="${STRIP-${cross_prefix}strip}"
385 windres="${WINDRES-${cross_prefix}windres}"
386 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
387 query_pkg_config() {
388 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
390 pkg_config=query_pkg_config
391 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
392 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
394 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
395 ARFLAGS="${ARFLAGS-rv}"
397 # default flags for all hosts
398 # We use -fwrapv to tell the compiler that we require a C dialect where
399 # left shift of signed integers is well defined and has the expected
400 # 2s-complement style results. (Both clang and gcc agree that it
401 # provides these semantics.)
402 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
403 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
404 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
405 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
406 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
407 if test "$debug_info" = "yes"; then
408 CFLAGS="-g $CFLAGS"
409 LDFLAGS="-g $LDFLAGS"
412 # make source path absolute
413 source_path=$(cd "$source_path"; pwd)
415 # running configure in the source tree?
416 # we know that's the case if configure is there.
417 if test -f "./configure"; then
418 pwd_is_source_path="y"
419 else
420 pwd_is_source_path="n"
423 check_define() {
424 cat > $TMPC <<EOF
425 #if !defined($1)
426 #error $1 not defined
427 #endif
428 int main(void) { return 0; }
430 compile_object
433 check_include() {
434 cat > $TMPC <<EOF
435 #include <$1>
436 int main(void) { return 0; }
438 compile_object
441 write_c_skeleton() {
442 cat > $TMPC <<EOF
443 int main(void) { return 0; }
447 if check_define __linux__ ; then
448 targetos="Linux"
449 elif check_define _WIN32 ; then
450 targetos='MINGW32'
451 elif check_define __OpenBSD__ ; then
452 targetos='OpenBSD'
453 elif check_define __sun__ ; then
454 targetos='SunOS'
455 elif check_define __HAIKU__ ; then
456 targetos='Haiku'
457 else
458 targetos=$(uname -s)
461 # Some host OSes need non-standard checks for which CPU to use.
462 # Note that these checks are broken for cross-compilation: if you're
463 # cross-compiling to one of these OSes then you'll need to specify
464 # the correct CPU with the --cpu option.
465 case $targetos in
466 Darwin)
467 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
468 # run 64-bit userspace code.
469 # If the user didn't specify a CPU explicitly and the kernel says this is
470 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
471 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
472 cpu="x86_64"
475 SunOS)
476 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
477 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
478 cpu="x86_64"
480 esac
482 if test ! -z "$cpu" ; then
483 # command line argument
485 elif check_define __i386__ ; then
486 cpu="i386"
487 elif check_define __x86_64__ ; then
488 if check_define __ILP32__ ; then
489 cpu="x32"
490 else
491 cpu="x86_64"
493 elif check_define __sparc__ ; then
494 if check_define __arch64__ ; then
495 cpu="sparc64"
496 else
497 cpu="sparc"
499 elif check_define _ARCH_PPC ; then
500 if check_define _ARCH_PPC64 ; then
501 cpu="ppc64"
502 else
503 cpu="ppc"
505 elif check_define __mips__ ; then
506 cpu="mips"
507 elif check_define __ia64__ ; then
508 cpu="ia64"
509 elif check_define __s390__ ; then
510 if check_define __s390x__ ; then
511 cpu="s390x"
512 else
513 cpu="s390"
515 elif check_define __arm__ ; then
516 cpu="arm"
517 elif check_define __aarch64__ ; then
518 cpu="aarch64"
519 else
520 cpu=$(uname -m)
523 ARCH=
524 # Normalise host CPU name and set ARCH.
525 # Note that this case should only have supported host CPUs, not guests.
526 case "$cpu" in
527 ppc|ppc64|s390|s390x|sparc64|x32)
528 cpu="$cpu"
529 supported_cpu="yes"
531 ia64)
532 cpu="$cpu"
534 i386|i486|i586|i686|i86pc|BePC)
535 cpu="i386"
536 supported_cpu="yes"
538 x86_64|amd64)
539 cpu="x86_64"
540 supported_cpu="yes"
542 armv*b|armv*l|arm)
543 cpu="arm"
544 supported_cpu="yes"
546 aarch64)
547 cpu="aarch64"
548 supported_cpu="yes"
550 mips*)
551 cpu="mips"
552 supported_cpu="yes"
554 sparc|sun4[cdmuv])
555 cpu="sparc"
556 supported_cpu="yes"
559 # This will result in either an error or falling back to TCI later
560 ARCH=unknown
562 esac
563 if test -z "$ARCH"; then
564 ARCH="$cpu"
567 # OS specific
569 # host *BSD for user mode
570 HOST_VARIANT_DIR=""
572 case $targetos in
573 MINGW32*)
574 mingw32="yes"
575 hax="yes"
576 audio_possible_drivers="dsound sdl"
577 if check_include dsound.h; then
578 audio_drv_list="dsound"
579 else
580 audio_drv_list=""
582 supported_os="yes"
584 GNU/kFreeBSD)
585 bsd="yes"
586 audio_drv_list="oss"
587 audio_possible_drivers="oss sdl pa"
589 FreeBSD)
590 bsd="yes"
591 make="${MAKE-gmake}"
592 audio_drv_list="oss"
593 audio_possible_drivers="oss sdl pa"
594 # needed for kinfo_getvmmap(3) in libutil.h
595 LIBS="-lutil $LIBS"
596 # needed for kinfo_getproc
597 libs_qga="-lutil $libs_qga"
598 netmap="" # enable netmap autodetect
599 HOST_VARIANT_DIR="freebsd"
600 supported_os="yes"
602 DragonFly)
603 bsd="yes"
604 make="${MAKE-gmake}"
605 audio_drv_list="oss"
606 audio_possible_drivers="oss sdl pa"
607 HOST_VARIANT_DIR="dragonfly"
609 NetBSD)
610 bsd="yes"
611 make="${MAKE-gmake}"
612 audio_drv_list="oss"
613 audio_possible_drivers="oss sdl"
614 oss_lib="-lossaudio"
615 HOST_VARIANT_DIR="netbsd"
616 supported_os="yes"
618 OpenBSD)
619 bsd="yes"
620 make="${MAKE-gmake}"
621 audio_drv_list="sdl"
622 audio_possible_drivers="sdl"
623 HOST_VARIANT_DIR="openbsd"
625 Darwin)
626 bsd="yes"
627 darwin="yes"
628 hax="yes"
629 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
630 if [ "$cpu" = "x86_64" ] ; then
631 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
632 LDFLAGS="-arch x86_64 $LDFLAGS"
634 cocoa="yes"
635 audio_drv_list="coreaudio"
636 audio_possible_drivers="coreaudio sdl"
637 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
638 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
639 # Disable attempts to use ObjectiveC features in os/object.h since they
640 # won't work when we're compiling with gcc as a C compiler.
641 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
642 HOST_VARIANT_DIR="darwin"
643 supported_os="yes"
645 SunOS)
646 solaris="yes"
647 make="${MAKE-gmake}"
648 install="${INSTALL-ginstall}"
649 ld="gld"
650 smbd="${SMBD-/usr/sfw/sbin/smbd}"
651 needs_libsunmath="no"
652 solarisrev=$(uname -r | cut -f2 -d.)
653 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
654 if test "$solarisrev" -le 9 ; then
655 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
656 needs_libsunmath="yes"
657 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
658 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
659 LIBS="-lsunmath $LIBS"
660 else
661 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
662 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
663 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
664 "Studio 11 can be downloaded from www.sun.com."
668 if test -f /usr/include/sys/soundcard.h ; then
669 audio_drv_list="oss"
671 audio_possible_drivers="oss sdl"
672 # needed for CMSG_ macros in sys/socket.h
673 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
674 # needed for TIOCWIN* defines in termios.h
675 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
676 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
677 solarisnetlibs="-lsocket -lnsl -lresolv"
678 LIBS="$solarisnetlibs $LIBS"
679 libs_qga="$solarisnetlibs $libs_qga"
681 AIX)
682 aix="yes"
683 make="${MAKE-gmake}"
685 Haiku)
686 haiku="yes"
687 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
688 LIBS="-lposix_error_mapper -lnetwork $LIBS"
690 Linux)
691 audio_drv_list="oss"
692 audio_possible_drivers="oss alsa sdl pa"
693 linux="yes"
694 linux_user="yes"
695 kvm="yes"
696 vhost_net="yes"
697 vhost_scsi="yes"
698 vhost_vsock="yes"
699 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
700 supported_os="yes"
703 # This is a fatal error, but don't report it yet, because we
704 # might be going to just print the --help text, or it might
705 # be the result of a missing compiler.
706 bogus_os="yes"
708 esac
710 if [ "$bsd" = "yes" ] ; then
711 if [ "$darwin" != "yes" ] ; then
712 bsd_user="yes"
716 : ${make=${MAKE-make}}
717 : ${install=${INSTALL-install}}
718 : ${python=${PYTHON-python}}
719 : ${smbd=${SMBD-/usr/sbin/smbd}}
721 # Default objcc to clang if available, otherwise use CC
722 if has clang; then
723 objcc=clang
724 else
725 objcc="$cc"
728 if test "$mingw32" = "yes" ; then
729 EXESUF=".exe"
730 DSOSUF=".dll"
731 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
732 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
733 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
734 # MinGW needs -mthreads for TLS and macro _MT.
735 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
736 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
737 write_c_skeleton;
738 if compile_prog "" "-liberty" ; then
739 LIBS="-liberty $LIBS"
741 prefix="c:/Program Files/QEMU"
742 mandir="\${prefix}"
743 datadir="\${prefix}"
744 qemu_docdir="\${prefix}"
745 bindir="\${prefix}"
746 sysconfdir="\${prefix}"
747 local_statedir=
748 confsuffix=""
749 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
752 werror=""
754 for opt do
755 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
756 case "$opt" in
757 --help|-h) show_help=yes
759 --version|-V) exec cat $source_path/VERSION
761 --prefix=*) prefix="$optarg"
763 --interp-prefix=*) interp_prefix="$optarg"
765 --source-path=*)
767 --cross-prefix=*)
769 --cc=*)
771 --host-cc=*) host_cc="$optarg"
773 --cxx=*)
775 --iasl=*) iasl="$optarg"
777 --objcc=*) objcc="$optarg"
779 --make=*) make="$optarg"
781 --install=*) install="$optarg"
783 --python=*) python="$optarg"
785 --gcov=*) gcov_tool="$optarg"
787 --smbd=*) smbd="$optarg"
789 --extra-cflags=*)
791 --extra-ldflags=*)
793 --enable-debug-info)
795 --disable-debug-info)
797 --enable-modules)
798 modules="yes"
800 --disable-modules)
801 modules="no"
803 --cpu=*)
805 --target-list=*) target_list="$optarg"
807 --enable-trace-backends=*) trace_backends="$optarg"
809 # XXX: backwards compatibility
810 --enable-trace-backend=*) trace_backends="$optarg"
812 --with-trace-file=*) trace_file="$optarg"
814 --enable-gprof) gprof="yes"
816 --enable-gcov) gcov="yes"
818 --static)
819 static="yes"
820 LDFLAGS="-static $LDFLAGS"
821 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
823 --mandir=*) mandir="$optarg"
825 --bindir=*) bindir="$optarg"
827 --libdir=*) libdir="$optarg"
829 --libexecdir=*) libexecdir="$optarg"
831 --includedir=*) includedir="$optarg"
833 --datadir=*) datadir="$optarg"
835 --with-confsuffix=*) confsuffix="$optarg"
837 --docdir=*) qemu_docdir="$optarg"
839 --sysconfdir=*) sysconfdir="$optarg"
841 --localstatedir=*) local_statedir="$optarg"
843 --sbindir=*|--sharedstatedir=*|\
844 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
845 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
846 # These switches are silently ignored, for compatibility with
847 # autoconf-generated configure scripts. This allows QEMU's
848 # configure to be used by RPM and similar macros that set
849 # lots of directory switches by default.
851 --with-system-pixman) pixman="system"
853 --without-system-pixman) pixman="internal"
855 --without-pixman) pixman="none"
857 --disable-sdl) sdl="no"
859 --enable-sdl) sdl="yes"
861 --with-sdlabi=*) sdlabi="$optarg"
863 --disable-qom-cast-debug) qom_cast_debug="no"
865 --enable-qom-cast-debug) qom_cast_debug="yes"
867 --disable-virtfs) virtfs="no"
869 --enable-virtfs) virtfs="yes"
871 --disable-vnc) vnc="no"
873 --enable-vnc) vnc="yes"
875 --oss-lib=*) oss_lib="$optarg"
877 --audio-drv-list=*) audio_drv_list="$optarg"
879 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
881 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
883 --enable-debug-tcg) debug_tcg="yes"
885 --disable-debug-tcg) debug_tcg="no"
887 --enable-debug)
888 # Enable debugging options that aren't excessively noisy
889 debug_tcg="yes"
890 debug="yes"
891 strip_opt="no"
892 fortify_source="no"
894 --enable-sparse) sparse="yes"
896 --disable-sparse) sparse="no"
898 --disable-strip) strip_opt="no"
900 --disable-vnc-sasl) vnc_sasl="no"
902 --enable-vnc-sasl) vnc_sasl="yes"
904 --disable-vnc-jpeg) vnc_jpeg="no"
906 --enable-vnc-jpeg) vnc_jpeg="yes"
908 --disable-vnc-png) vnc_png="no"
910 --enable-vnc-png) vnc_png="yes"
912 --disable-slirp) slirp="no"
914 --disable-vde) vde="no"
916 --enable-vde) vde="yes"
918 --disable-netmap) netmap="no"
920 --enable-netmap) netmap="yes"
922 --disable-xen) xen="no"
924 --enable-xen) xen="yes"
926 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
928 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
930 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
932 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
934 --disable-brlapi) brlapi="no"
936 --enable-brlapi) brlapi="yes"
938 --disable-bluez) bluez="no"
940 --enable-bluez) bluez="yes"
942 --disable-kvm) kvm="no"
944 --enable-kvm) kvm="yes"
946 --disable-hax) hax="no"
948 --enable-hax) hax="yes"
950 --disable-tcg-interpreter) tcg_interpreter="no"
952 --enable-tcg-interpreter) tcg_interpreter="yes"
954 --disable-cap-ng) cap_ng="no"
956 --enable-cap-ng) cap_ng="yes"
958 --disable-spice) spice="no"
960 --enable-spice) spice="yes"
962 --disable-libiscsi) libiscsi="no"
964 --enable-libiscsi) libiscsi="yes"
966 --disable-libnfs) libnfs="no"
968 --enable-libnfs) libnfs="yes"
970 --enable-profiler) profiler="yes"
972 --disable-cocoa) cocoa="no"
974 --enable-cocoa)
975 cocoa="yes" ;
976 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
978 --disable-system) softmmu="no"
980 --enable-system) softmmu="yes"
982 --disable-user)
983 linux_user="no" ;
984 bsd_user="no" ;
986 --enable-user) ;;
987 --disable-linux-user) linux_user="no"
989 --enable-linux-user) linux_user="yes"
991 --disable-bsd-user) bsd_user="no"
993 --enable-bsd-user) bsd_user="yes"
995 --enable-pie) pie="yes"
997 --disable-pie) pie="no"
999 --enable-werror) werror="yes"
1001 --disable-werror) werror="no"
1003 --enable-stack-protector) stack_protector="yes"
1005 --disable-stack-protector) stack_protector="no"
1007 --disable-curses) curses="no"
1009 --enable-curses) curses="yes"
1011 --disable-curl) curl="no"
1013 --enable-curl) curl="yes"
1015 --disable-fdt) fdt="no"
1017 --enable-fdt) fdt="yes"
1019 --disable-linux-aio) linux_aio="no"
1021 --enable-linux-aio) linux_aio="yes"
1023 --disable-attr) attr="no"
1025 --enable-attr) attr="yes"
1027 --disable-blobs) blobs="no"
1029 --with-pkgversion=*) pkgversion=" ($optarg)"
1031 --with-coroutine=*) coroutine="$optarg"
1033 --disable-coroutine-pool) coroutine_pool="no"
1035 --enable-coroutine-pool) coroutine_pool="yes"
1037 --enable-debug-stack-usage) debug_stack_usage="yes"
1039 --disable-docs) docs="no"
1041 --enable-docs) docs="yes"
1043 --disable-vhost-net) vhost_net="no"
1045 --enable-vhost-net) vhost_net="yes"
1047 --disable-vhost-scsi) vhost_scsi="no"
1049 --enable-vhost-scsi) vhost_scsi="yes"
1051 --disable-vhost-vsock) vhost_vsock="no"
1053 --enable-vhost-vsock) vhost_vsock="yes"
1055 --disable-opengl) opengl="no"
1057 --enable-opengl) opengl="yes"
1059 --disable-rbd) rbd="no"
1061 --enable-rbd) rbd="yes"
1063 --disable-xfsctl) xfs="no"
1065 --enable-xfsctl) xfs="yes"
1067 --disable-smartcard) smartcard="no"
1069 --enable-smartcard) smartcard="yes"
1071 --disable-libusb) libusb="no"
1073 --enable-libusb) libusb="yes"
1075 --disable-usb-redir) usb_redir="no"
1077 --enable-usb-redir) usb_redir="yes"
1079 --disable-zlib-test) zlib="no"
1081 --disable-lzo) lzo="no"
1083 --enable-lzo) lzo="yes"
1085 --disable-snappy) snappy="no"
1087 --enable-snappy) snappy="yes"
1089 --disable-bzip2) bzip2="no"
1091 --enable-bzip2) bzip2="yes"
1093 --enable-guest-agent) guest_agent="yes"
1095 --disable-guest-agent) guest_agent="no"
1097 --enable-guest-agent-msi) guest_agent_msi="yes"
1099 --disable-guest-agent-msi) guest_agent_msi="no"
1101 --with-vss-sdk) vss_win32_sdk=""
1103 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1105 --without-vss-sdk) vss_win32_sdk="no"
1107 --with-win-sdk) win_sdk=""
1109 --with-win-sdk=*) win_sdk="$optarg"
1111 --without-win-sdk) win_sdk="no"
1113 --enable-tools) want_tools="yes"
1115 --disable-tools) want_tools="no"
1117 --enable-seccomp) seccomp="yes"
1119 --disable-seccomp) seccomp="no"
1121 --disable-glusterfs) glusterfs="no"
1123 --enable-glusterfs) glusterfs="yes"
1125 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1126 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1128 --enable-vhdx|--disable-vhdx)
1129 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1131 --enable-uuid|--disable-uuid)
1132 echo "$0: $opt is obsolete, UUID support is always built" >&2
1134 --disable-gtk) gtk="no"
1136 --enable-gtk) gtk="yes"
1138 --tls-priority=*) tls_priority="$optarg"
1140 --disable-gnutls) gnutls="no"
1142 --enable-gnutls) gnutls="yes"
1144 --disable-nettle) nettle="no"
1146 --enable-nettle) nettle="yes"
1148 --disable-gcrypt) gcrypt="no"
1150 --enable-gcrypt) gcrypt="yes"
1152 --enable-rdma) rdma="yes"
1154 --disable-rdma) rdma="no"
1156 --with-gtkabi=*) gtkabi="$optarg"
1158 --disable-vte) vte="no"
1160 --enable-vte) vte="yes"
1162 --disable-virglrenderer) virglrenderer="no"
1164 --enable-virglrenderer) virglrenderer="yes"
1166 --disable-tpm) tpm="no"
1168 --enable-tpm) tpm="yes"
1170 --disable-libssh2) libssh2="no"
1172 --enable-libssh2) libssh2="yes"
1174 --disable-live-block-migration) live_block_migration="no"
1176 --enable-live-block-migration) live_block_migration="yes"
1178 --disable-numa) numa="no"
1180 --enable-numa) numa="yes"
1182 --disable-tcmalloc) tcmalloc="no"
1184 --enable-tcmalloc) tcmalloc="yes"
1186 --disable-jemalloc) jemalloc="no"
1188 --enable-jemalloc) jemalloc="yes"
1190 --disable-replication) replication="no"
1192 --enable-replication) replication="yes"
1194 --disable-vxhs) vxhs="no"
1196 --enable-vxhs) vxhs="yes"
1199 echo "ERROR: unknown option $opt"
1200 echo "Try '$0 --help' for more information"
1201 exit 1
1203 esac
1204 done
1206 case "$cpu" in
1207 ppc)
1208 CPU_CFLAGS="-m32"
1209 LDFLAGS="-m32 $LDFLAGS"
1211 ppc64)
1212 CPU_CFLAGS="-m64"
1213 LDFLAGS="-m64 $LDFLAGS"
1215 sparc)
1216 LDFLAGS="-m32 $LDFLAGS"
1217 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1219 sparc64)
1220 LDFLAGS="-m64 $LDFLAGS"
1221 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1223 s390)
1224 CPU_CFLAGS="-m31"
1225 LDFLAGS="-m31 $LDFLAGS"
1227 s390x)
1228 CPU_CFLAGS="-m64"
1229 LDFLAGS="-m64 $LDFLAGS"
1231 i386)
1232 CPU_CFLAGS="-m32"
1233 LDFLAGS="-m32 $LDFLAGS"
1234 cc_i386='$(CC) -m32'
1236 x86_64)
1237 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1238 # If we truly care, we should simply detect this case at
1239 # runtime and generate the fallback to serial emulation.
1240 CPU_CFLAGS="-m64 -mcx16"
1241 LDFLAGS="-m64 $LDFLAGS"
1242 cc_i386='$(CC) -m32'
1244 x32)
1245 CPU_CFLAGS="-mx32"
1246 LDFLAGS="-mx32 $LDFLAGS"
1247 cc_i386='$(CC) -m32'
1249 # No special flags required for other host CPUs
1250 esac
1252 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1253 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1255 # For user-mode emulation the host arch has to be one we explicitly
1256 # support, even if we're using TCI.
1257 if [ "$ARCH" = "unknown" ]; then
1258 bsd_user="no"
1259 linux_user="no"
1262 default_target_list=""
1264 mak_wilds=""
1266 if [ "$softmmu" = "yes" ]; then
1267 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1269 if [ "$linux_user" = "yes" ]; then
1270 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1272 if [ "$bsd_user" = "yes" ]; then
1273 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1276 for config in $mak_wilds; do
1277 default_target_list="${default_target_list} $(basename "$config" .mak)"
1278 done
1280 # Enumerate public trace backends for --help output
1281 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1283 if test x"$show_help" = x"yes" ; then
1284 cat << EOF
1286 Usage: configure [options]
1287 Options: [defaults in brackets after descriptions]
1289 Standard options:
1290 --help print this message
1291 --prefix=PREFIX install in PREFIX [$prefix]
1292 --interp-prefix=PREFIX where to find shared libraries, etc.
1293 use %M for cpu name [$interp_prefix]
1294 --target-list=LIST set target list (default: build everything)
1295 $(echo Available targets: $default_target_list | \
1296 fold -s -w 53 | sed -e 's/^/ /')
1298 Advanced options (experts only):
1299 --source-path=PATH path of source code [$source_path]
1300 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1301 --cc=CC use C compiler CC [$cc]
1302 --iasl=IASL use ACPI compiler IASL [$iasl]
1303 --host-cc=CC use C compiler CC [$host_cc] for code run at
1304 build time
1305 --cxx=CXX use C++ compiler CXX [$cxx]
1306 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1307 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1308 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1309 --make=MAKE use specified make [$make]
1310 --install=INSTALL use specified install [$install]
1311 --python=PYTHON use specified python [$python]
1312 --smbd=SMBD use specified smbd [$smbd]
1313 --static enable static build [$static]
1314 --mandir=PATH install man pages in PATH
1315 --datadir=PATH install firmware in PATH$confsuffix
1316 --docdir=PATH install documentation in PATH$confsuffix
1317 --bindir=PATH install binaries in PATH
1318 --libdir=PATH install libraries in PATH
1319 --sysconfdir=PATH install config in PATH$confsuffix
1320 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1321 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1322 --enable-debug enable common debug build options
1323 --disable-strip disable stripping binaries
1324 --disable-werror disable compilation abort on warning
1325 --disable-stack-protector disable compiler-provided stack protection
1326 --audio-drv-list=LIST set audio drivers list:
1327 Available drivers: $audio_possible_drivers
1328 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1329 --block-drv-rw-whitelist=L
1330 set block driver read-write whitelist
1331 (affects only QEMU, not qemu-img)
1332 --block-drv-ro-whitelist=L
1333 set block driver read-only whitelist
1334 (affects only QEMU, not qemu-img)
1335 --enable-trace-backends=B Set trace backend
1336 Available backends: $trace_backend_list
1337 --with-trace-file=NAME Full PATH,NAME of file to store traces
1338 Default:trace-<pid>
1339 --disable-slirp disable SLIRP userspace network connectivity
1340 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1341 --oss-lib path to OSS library
1342 --cpu=CPU Build for host CPU [$cpu]
1343 --with-coroutine=BACKEND coroutine backend. Supported options:
1344 ucontext, sigaltstack, windows
1345 --enable-gcov enable test coverage analysis with gcov
1346 --gcov=GCOV use specified gcov [$gcov_tool]
1347 --disable-blobs disable installing provided firmware blobs
1348 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1349 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1350 --tls-priority default TLS protocol/cipher priority string
1351 --enable-gprof QEMU profiling with gprof
1352 --enable-profiler profiler support
1353 --enable-xen-pv-domain-build
1354 xen pv domain builder
1355 --enable-debug-stack-usage
1356 track the maximum stack usage of stacks created by qemu_alloc_stack
1358 Optional features, enabled with --enable-FEATURE and
1359 disabled with --disable-FEATURE, default is enabled if available:
1361 system all system emulation targets
1362 user supported user emulation targets
1363 linux-user all linux usermode emulation targets
1364 bsd-user all BSD usermode emulation targets
1365 docs build documentation
1366 guest-agent build the QEMU Guest Agent
1367 guest-agent-msi build guest agent Windows MSI installation package
1368 pie Position Independent Executables
1369 modules modules support
1370 debug-tcg TCG debugging (default is disabled)
1371 debug-info debugging information
1372 sparse sparse checker
1374 gnutls GNUTLS cryptography support
1375 nettle nettle cryptography support
1376 gcrypt libgcrypt cryptography support
1377 sdl SDL UI
1378 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1379 gtk gtk UI
1380 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1381 vte vte support for the gtk UI
1382 curses curses UI
1383 vnc VNC UI support
1384 vnc-sasl SASL encryption for VNC server
1385 vnc-jpeg JPEG lossy compression for VNC server
1386 vnc-png PNG compression for VNC server
1387 cocoa Cocoa UI (Mac OS X only)
1388 virtfs VirtFS
1389 xen xen backend driver support
1390 xen-pci-passthrough
1391 brlapi BrlAPI (Braile)
1392 curl curl connectivity
1393 fdt fdt device tree
1394 bluez bluez stack connectivity
1395 kvm KVM acceleration support
1396 hax HAX acceleration support
1397 rdma RDMA-based migration support
1398 vde support for vde network
1399 netmap support for netmap network
1400 linux-aio Linux AIO support
1401 cap-ng libcap-ng support
1402 attr attr and xattr support
1403 vhost-net vhost-net acceleration support
1404 spice spice
1405 rbd rados block device (rbd)
1406 libiscsi iscsi support
1407 libnfs nfs support
1408 smartcard smartcard support (libcacard)
1409 libusb libusb (for usb passthrough)
1410 live-block-migration Block migration in the main migration stream
1411 usb-redir usb network redirection support
1412 lzo support of lzo compression library
1413 snappy support of snappy compression library
1414 bzip2 support of bzip2 compression library
1415 (for reading bzip2-compressed dmg images)
1416 seccomp seccomp support
1417 coroutine-pool coroutine freelist (better performance)
1418 glusterfs GlusterFS backend
1419 tpm TPM support
1420 libssh2 ssh block device support
1421 numa libnuma support
1422 tcmalloc tcmalloc support
1423 jemalloc jemalloc support
1424 replication replication support
1425 vhost-vsock virtio sockets device support
1426 opengl opengl support
1427 virglrenderer virgl rendering support
1428 xfsctl xfsctl support
1429 qom-cast-debug cast debugging support
1430 tools build qemu-io, qemu-nbd and qemu-image tools
1431 vxhs Veritas HyperScale vDisk backend support
1433 NOTE: The object files are built at the place where configure is launched
1435 exit 0
1438 if ! has $python; then
1439 error_exit "Python not found. Use --python=/path/to/python"
1442 # Note that if the Python conditional here evaluates True we will exit
1443 # with status 1 which is a shell 'false' value.
1444 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1445 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1446 "Note that Python 3 or later is not yet supported." \
1447 "Use --python=/path/to/python to specify a supported Python."
1450 # Suppress writing compiled files
1451 python="$python -B"
1453 # Now we have handled --enable-tcg-interpreter and know we're not just
1454 # printing the help message, bail out if the host CPU isn't supported.
1455 if test "$ARCH" = "unknown"; then
1456 if test "$tcg_interpreter" = "yes" ; then
1457 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1458 else
1459 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1463 # Consult white-list to determine whether to enable werror
1464 # by default. Only enable by default for git builds
1465 if test -z "$werror" ; then
1466 if test -d "$source_path/.git" -a \
1467 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1468 werror="yes"
1469 else
1470 werror="no"
1474 # check that the C compiler works.
1475 write_c_skeleton;
1476 if compile_object ; then
1477 : C compiler works ok
1478 else
1479 error_exit "\"$cc\" either does not exist or does not work"
1481 if ! compile_prog ; then
1482 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1485 if test "$bogus_os" = "yes"; then
1486 # Now that we know that we're not printing the help and that
1487 # the compiler works (so the results of the check_defines we used
1488 # to identify the OS are reliable), if we didn't recognize the
1489 # host OS we should stop now.
1490 error_exit "Unrecognized host OS $targetos"
1493 # Check that the C++ compiler exists and works with the C compiler
1494 if has $cxx; then
1495 cat > $TMPC <<EOF
1496 int c_function(void);
1497 int main(void) { return c_function(); }
1500 compile_object
1502 cat > $TMPCXX <<EOF
1503 extern "C" {
1504 int c_function(void);
1506 int c_function(void) { return 42; }
1509 update_cxxflags
1511 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1512 # C++ compiler $cxx works ok with C compiler $cc
1514 else
1515 echo "C++ compiler $cxx does not work with C compiler $cc"
1516 echo "Disabling C++ specific optional code"
1517 cxx=
1519 else
1520 echo "No C++ compiler available; disabling C++ specific optional code"
1521 cxx=
1524 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1525 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1526 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1527 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1528 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1529 gcc_flags="-Wno-string-plus-int $gcc_flags"
1530 # Note that we do not add -Werror to gcc_flags here, because that would
1531 # enable it for all configure tests. If a configure test failed due
1532 # to -Werror this would just silently disable some features,
1533 # so it's too error prone.
1535 cc_has_warning_flag() {
1536 write_c_skeleton;
1538 # Use the positive sense of the flag when testing for -Wno-wombat
1539 # support (gcc will happily accept the -Wno- form of unknown
1540 # warning options).
1541 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1542 compile_prog "-Werror $optflag" ""
1545 for flag in $gcc_flags; do
1546 if cc_has_warning_flag $flag ; then
1547 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1549 done
1551 if test "$stack_protector" != "no"; then
1552 cat > $TMPC << EOF
1553 int main(int argc, char *argv[])
1555 char arr[64], *p = arr, *c = argv[0];
1556 while (*c) {
1557 *p++ = *c++;
1559 return 0;
1562 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1563 sp_on=0
1564 for flag in $gcc_flags; do
1565 # We need to check both a compile and a link, since some compiler
1566 # setups fail only on a .c->.o compile and some only at link time
1567 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1568 compile_prog "-Werror $flag" ""; then
1569 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1570 sp_on=1
1571 break
1573 done
1574 if test "$stack_protector" = yes; then
1575 if test $sp_on = 0; then
1576 error_exit "Stack protector not supported"
1581 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1582 # large functions that use global variables. The bug is in all releases of
1583 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1584 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1585 cat > $TMPC << EOF
1586 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1587 int main(void) { return 0; }
1588 #else
1589 #error No bug in this compiler.
1590 #endif
1592 if compile_prog "-Werror -fno-gcse" "" ; then
1593 TRANSLATE_OPT_CFLAGS=-fno-gcse
1596 if test "$static" = "yes" ; then
1597 if test "$modules" = "yes" ; then
1598 error_exit "static and modules are mutually incompatible"
1600 if test "$pie" = "yes" ; then
1601 error_exit "static and pie are mutually incompatible"
1602 else
1603 pie="no"
1607 # Unconditional check for compiler __thread support
1608 cat > $TMPC << EOF
1609 static __thread int tls_var;
1610 int main(void) { return tls_var; }
1613 if ! compile_prog "-Werror" "" ; then
1614 error_exit "Your compiler does not support the __thread specifier for " \
1615 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1618 if test "$pie" = ""; then
1619 case "$cpu-$targetos" in
1620 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1623 pie="no"
1625 esac
1628 if test "$pie" != "no" ; then
1629 cat > $TMPC << EOF
1631 #ifdef __linux__
1632 # define THREAD __thread
1633 #else
1634 # define THREAD
1635 #endif
1637 static THREAD int tls_var;
1639 int main(void) { return tls_var; }
1642 if compile_prog "-fPIE -DPIE" "-pie"; then
1643 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1644 LDFLAGS="-pie $LDFLAGS"
1645 pie="yes"
1646 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1647 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1649 else
1650 if test "$pie" = "yes"; then
1651 error_exit "PIE not available due to missing toolchain support"
1652 else
1653 echo "Disabling PIE due to missing toolchain support"
1654 pie="no"
1658 if compile_prog "-Werror -fno-pie" "-nopie"; then
1659 CFLAGS_NOPIE="-fno-pie"
1660 LDFLAGS_NOPIE="-nopie"
1664 ##########################################
1665 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1666 # use i686 as default anyway, but for those that don't, an explicit
1667 # specification is necessary
1669 if test "$cpu" = "i386"; then
1670 cat > $TMPC << EOF
1671 static int sfaa(int *ptr)
1673 return __sync_fetch_and_and(ptr, 0);
1676 int main(void)
1678 int val = 42;
1679 val = __sync_val_compare_and_swap(&val, 0, 1);
1680 sfaa(&val);
1681 return val;
1684 if ! compile_prog "" "" ; then
1685 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1689 #########################################
1690 # Solaris specific configure tool chain decisions
1692 if test "$solaris" = "yes" ; then
1693 if has $install; then
1695 else
1696 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1697 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1698 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1700 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1701 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1702 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1703 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1705 if has ar; then
1707 else
1708 if test -f /usr/ccs/bin/ar ; then
1709 error_exit "No path includes ar" \
1710 "Add /usr/ccs/bin to your path and rerun configure"
1712 error_exit "No path includes ar"
1716 if test -z "${target_list+xxx}" ; then
1717 target_list="$default_target_list"
1718 else
1719 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1722 # Check that we recognised the target name; this allows a more
1723 # friendly error message than if we let it fall through.
1724 for target in $target_list; do
1725 case " $default_target_list " in
1726 *" $target "*)
1729 error_exit "Unknown target name '$target'"
1731 esac
1732 done
1734 # see if system emulation was really requested
1735 case " $target_list " in
1736 *"-softmmu "*) softmmu=yes
1738 *) softmmu=no
1740 esac
1742 feature_not_found() {
1743 feature=$1
1744 remedy=$2
1746 error_exit "User requested feature $feature" \
1747 "configure was not able to find it." \
1748 "$remedy"
1751 # ---
1752 # big/little endian test
1753 cat > $TMPC << EOF
1754 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1755 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1756 extern int foo(short *, short *);
1757 int main(int argc, char *argv[]) {
1758 return foo(big_endian, little_endian);
1762 if compile_object ; then
1763 if grep -q BiGeNdIaN $TMPO ; then
1764 bigendian="yes"
1765 elif grep -q LiTtLeEnDiAn $TMPO ; then
1766 bigendian="no"
1767 else
1768 echo big/little test failed
1770 else
1771 echo big/little test failed
1774 ##########################################
1775 # cocoa implies not SDL or GTK
1776 # (the cocoa UI code currently assumes it is always the active UI
1777 # and doesn't interact well with other UI frontend code)
1778 if test "$cocoa" = "yes"; then
1779 if test "$sdl" = "yes"; then
1780 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1782 if test "$gtk" = "yes"; then
1783 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1785 gtk=no
1786 sdl=no
1789 # Some versions of Mac OS X incorrectly define SIZE_MAX
1790 cat > $TMPC << EOF
1791 #include <stdint.h>
1792 #include <stdio.h>
1793 int main(int argc, char *argv[]) {
1794 return printf("%zu", SIZE_MAX);
1797 have_broken_size_max=no
1798 if ! compile_object -Werror ; then
1799 have_broken_size_max=yes
1802 ##########################################
1803 # L2TPV3 probe
1805 cat > $TMPC <<EOF
1806 #include <sys/socket.h>
1807 #include <linux/ip.h>
1808 int main(void) { return sizeof(struct mmsghdr); }
1810 if compile_prog "" "" ; then
1811 l2tpv3=yes
1812 else
1813 l2tpv3=no
1816 ##########################################
1817 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1819 if test "$mingw32" = "yes"; then
1820 # Some versions of MinGW / Mingw-w64 lack localtime_r
1821 # and gmtime_r entirely.
1823 # Some versions of Mingw-w64 define a macro for
1824 # localtime_r/gmtime_r.
1826 # Some versions of Mingw-w64 will define functions
1827 # for localtime_r/gmtime_r, but only if you have
1828 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1829 # though, unistd.h and pthread.h both define
1830 # that for you.
1832 # So this #undef localtime_r and #include <unistd.h>
1833 # are not in fact redundant.
1834 cat > $TMPC << EOF
1835 #include <unistd.h>
1836 #include <time.h>
1837 #undef localtime_r
1838 int main(void) { localtime_r(NULL, NULL); return 0; }
1840 if compile_prog "" "" ; then
1841 localtime_r="yes"
1842 else
1843 localtime_r="no"
1847 ##########################################
1848 # pkg-config probe
1850 if ! has "$pkg_config_exe"; then
1851 error_exit "pkg-config binary '$pkg_config_exe' not found"
1854 ##########################################
1855 # NPTL probe
1857 if test "$linux_user" = "yes"; then
1858 cat > $TMPC <<EOF
1859 #include <sched.h>
1860 #include <linux/futex.h>
1861 int main(void) {
1862 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1863 #error bork
1864 #endif
1865 return 0;
1868 if ! compile_object ; then
1869 feature_not_found "nptl" "Install glibc and linux kernel headers."
1873 ##########################################
1874 # avx2 optimization requirement check
1876 cat > $TMPC << EOF
1877 #pragma GCC push_options
1878 #pragma GCC target("avx2")
1879 #include <cpuid.h>
1880 #include <immintrin.h>
1881 static int bar(void *a) {
1882 __m256i x = *(__m256i *)a;
1883 return _mm256_testz_si256(x, x);
1885 int main(int argc, char *argv[]) { return bar(argv[0]); }
1887 if compile_object "" ; then
1888 avx2_opt="yes"
1891 #########################################
1892 # zlib check
1894 if test "$zlib" != "no" ; then
1895 cat > $TMPC << EOF
1896 #include <zlib.h>
1897 int main(void) { zlibVersion(); return 0; }
1899 if compile_prog "" "-lz" ; then
1901 else
1902 error_exit "zlib check failed" \
1903 "Make sure to have the zlib libs and headers installed."
1906 LIBS="$LIBS -lz"
1908 ##########################################
1909 # lzo check
1911 if test "$lzo" != "no" ; then
1912 cat > $TMPC << EOF
1913 #include <lzo/lzo1x.h>
1914 int main(void) { lzo_version(); return 0; }
1916 if compile_prog "" "-llzo2" ; then
1917 libs_softmmu="$libs_softmmu -llzo2"
1918 lzo="yes"
1919 else
1920 if test "$lzo" = "yes"; then
1921 feature_not_found "liblzo2" "Install liblzo2 devel"
1923 lzo="no"
1927 ##########################################
1928 # snappy check
1930 if test "$snappy" != "no" ; then
1931 cat > $TMPC << EOF
1932 #include <snappy-c.h>
1933 int main(void) { snappy_max_compressed_length(4096); return 0; }
1935 if compile_prog "" "-lsnappy" ; then
1936 libs_softmmu="$libs_softmmu -lsnappy"
1937 snappy="yes"
1938 else
1939 if test "$snappy" = "yes"; then
1940 feature_not_found "libsnappy" "Install libsnappy devel"
1942 snappy="no"
1946 ##########################################
1947 # bzip2 check
1949 if test "$bzip2" != "no" ; then
1950 cat > $TMPC << EOF
1951 #include <bzlib.h>
1952 int main(void) { BZ2_bzlibVersion(); return 0; }
1954 if compile_prog "" "-lbz2" ; then
1955 bzip2="yes"
1956 else
1957 if test "$bzip2" = "yes"; then
1958 feature_not_found "libbzip2" "Install libbzip2 devel"
1960 bzip2="no"
1964 ##########################################
1965 # libseccomp check
1967 if test "$seccomp" != "no" ; then
1968 case "$cpu" in
1969 i386|x86_64)
1970 libseccomp_minver="2.1.0"
1972 mips)
1973 libseccomp_minver="2.2.0"
1975 arm|aarch64)
1976 libseccomp_minver="2.2.3"
1978 ppc|ppc64)
1979 libseccomp_minver="2.3.0"
1982 libseccomp_minver=""
1984 esac
1986 if test "$libseccomp_minver" != "" &&
1987 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1988 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1989 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1990 seccomp="yes"
1991 else
1992 if test "$seccomp" = "yes" ; then
1993 if test "$libseccomp_minver" != "" ; then
1994 feature_not_found "libseccomp" \
1995 "Install libseccomp devel >= $libseccomp_minver"
1996 else
1997 feature_not_found "libseccomp" \
1998 "libseccomp is not supported for host cpu $cpu"
2001 seccomp="no"
2004 ##########################################
2005 # xen probe
2007 if test "$xen" != "no" ; then
2008 # Check whether Xen library path is specified via --extra-ldflags to avoid
2009 # overriding this setting with pkg-config output. If not, try pkg-config
2010 # to obtain all needed flags.
2012 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2013 $pkg_config --exists xencontrol ; then
2014 xen_ctrl_version="$(printf '%d%02d%02d' \
2015 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2016 xen=yes
2017 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2018 xen_pc="$xen_pc xenevtchn xendevicemodel"
2019 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2020 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2021 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2022 else
2024 xen_libs="-lxenstore -lxenctrl -lxenguest"
2025 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2027 # First we test whether Xen headers and libraries are available.
2028 # If no, we are done and there is no Xen support.
2029 # If yes, more tests are run to detect the Xen version.
2031 # Xen (any)
2032 cat > $TMPC <<EOF
2033 #include <xenctrl.h>
2034 int main(void) {
2035 return 0;
2038 if ! compile_prog "" "$xen_libs" ; then
2039 # Xen not found
2040 if test "$xen" = "yes" ; then
2041 feature_not_found "xen" "Install xen devel"
2043 xen=no
2045 # Xen unstable
2046 elif
2047 cat > $TMPC <<EOF &&
2048 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2049 #define __XEN_TOOLS__
2050 #include <xendevicemodel.h>
2051 int main(void) {
2052 xendevicemodel_handle *xd;
2054 xd = xendevicemodel_open(0, 0);
2055 xendevicemodel_close(xd);
2057 return 0;
2060 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2061 then
2062 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2063 xen_ctrl_version=40900
2064 xen=yes
2065 elif
2066 cat > $TMPC <<EOF &&
2068 * If we have stable libs the we don't want the libxc compat
2069 * layers, regardless of what CFLAGS we may have been given.
2071 * Also, check if xengnttab_grant_copy_segment_t is defined and
2072 * grant copy operation is implemented.
2074 #undef XC_WANT_COMPAT_EVTCHN_API
2075 #undef XC_WANT_COMPAT_GNTTAB_API
2076 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2077 #include <xenctrl.h>
2078 #include <xenstore.h>
2079 #include <xenevtchn.h>
2080 #include <xengnttab.h>
2081 #include <xenforeignmemory.h>
2082 #include <stdint.h>
2083 #include <xen/hvm/hvm_info_table.h>
2084 #if !defined(HVM_MAX_VCPUS)
2085 # error HVM_MAX_VCPUS not defined
2086 #endif
2087 int main(void) {
2088 xc_interface *xc = NULL;
2089 xenforeignmemory_handle *xfmem;
2090 xenevtchn_handle *xe;
2091 xengnttab_handle *xg;
2092 xen_domain_handle_t handle;
2093 xengnttab_grant_copy_segment_t* seg = NULL;
2095 xs_daemon_open();
2097 xc = xc_interface_open(0, 0, 0);
2098 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2099 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2100 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2101 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2102 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2104 xfmem = xenforeignmemory_open(0, 0);
2105 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2107 xe = xenevtchn_open(0, 0);
2108 xenevtchn_fd(xe);
2110 xg = xengnttab_open(0, 0);
2111 xengnttab_grant_copy(xg, 0, seg);
2113 return 0;
2116 compile_prog "" "$xen_libs $xen_stable_libs"
2117 then
2118 xen_ctrl_version=40800
2119 xen=yes
2120 elif
2121 cat > $TMPC <<EOF &&
2123 * If we have stable libs the we don't want the libxc compat
2124 * layers, regardless of what CFLAGS we may have been given.
2126 #undef XC_WANT_COMPAT_EVTCHN_API
2127 #undef XC_WANT_COMPAT_GNTTAB_API
2128 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2129 #include <xenctrl.h>
2130 #include <xenstore.h>
2131 #include <xenevtchn.h>
2132 #include <xengnttab.h>
2133 #include <xenforeignmemory.h>
2134 #include <stdint.h>
2135 #include <xen/hvm/hvm_info_table.h>
2136 #if !defined(HVM_MAX_VCPUS)
2137 # error HVM_MAX_VCPUS not defined
2138 #endif
2139 int main(void) {
2140 xc_interface *xc = NULL;
2141 xenforeignmemory_handle *xfmem;
2142 xenevtchn_handle *xe;
2143 xengnttab_handle *xg;
2144 xen_domain_handle_t handle;
2146 xs_daemon_open();
2148 xc = xc_interface_open(0, 0, 0);
2149 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2150 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2151 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2152 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2153 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2155 xfmem = xenforeignmemory_open(0, 0);
2156 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2158 xe = xenevtchn_open(0, 0);
2159 xenevtchn_fd(xe);
2161 xg = xengnttab_open(0, 0);
2162 xengnttab_map_grant_ref(xg, 0, 0, 0);
2164 return 0;
2167 compile_prog "" "$xen_libs $xen_stable_libs"
2168 then
2169 xen_ctrl_version=40701
2170 xen=yes
2171 elif
2172 cat > $TMPC <<EOF &&
2173 #include <xenctrl.h>
2174 #include <stdint.h>
2175 int main(void) {
2176 xc_interface *xc = NULL;
2177 xen_domain_handle_t handle;
2178 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2179 return 0;
2182 compile_prog "" "$xen_libs"
2183 then
2184 xen_ctrl_version=40700
2185 xen=yes
2187 # Xen 4.6
2188 elif
2189 cat > $TMPC <<EOF &&
2190 #include <xenctrl.h>
2191 #include <xenstore.h>
2192 #include <stdint.h>
2193 #include <xen/hvm/hvm_info_table.h>
2194 #if !defined(HVM_MAX_VCPUS)
2195 # error HVM_MAX_VCPUS not defined
2196 #endif
2197 int main(void) {
2198 xc_interface *xc;
2199 xs_daemon_open();
2200 xc = xc_interface_open(0, 0, 0);
2201 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2202 xc_gnttab_open(NULL, 0);
2203 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2204 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2205 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2206 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2207 return 0;
2210 compile_prog "" "$xen_libs"
2211 then
2212 xen_ctrl_version=40600
2213 xen=yes
2215 # Xen 4.5
2216 elif
2217 cat > $TMPC <<EOF &&
2218 #include <xenctrl.h>
2219 #include <xenstore.h>
2220 #include <stdint.h>
2221 #include <xen/hvm/hvm_info_table.h>
2222 #if !defined(HVM_MAX_VCPUS)
2223 # error HVM_MAX_VCPUS not defined
2224 #endif
2225 int main(void) {
2226 xc_interface *xc;
2227 xs_daemon_open();
2228 xc = xc_interface_open(0, 0, 0);
2229 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2230 xc_gnttab_open(NULL, 0);
2231 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2232 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2233 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2234 return 0;
2237 compile_prog "" "$xen_libs"
2238 then
2239 xen_ctrl_version=40500
2240 xen=yes
2242 elif
2243 cat > $TMPC <<EOF &&
2244 #include <xenctrl.h>
2245 #include <xenstore.h>
2246 #include <stdint.h>
2247 #include <xen/hvm/hvm_info_table.h>
2248 #if !defined(HVM_MAX_VCPUS)
2249 # error HVM_MAX_VCPUS not defined
2250 #endif
2251 int main(void) {
2252 xc_interface *xc;
2253 xs_daemon_open();
2254 xc = xc_interface_open(0, 0, 0);
2255 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2256 xc_gnttab_open(NULL, 0);
2257 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2258 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2259 return 0;
2262 compile_prog "" "$xen_libs"
2263 then
2264 xen_ctrl_version=40200
2265 xen=yes
2267 else
2268 if test "$xen" = "yes" ; then
2269 feature_not_found "xen (unsupported version)" \
2270 "Install a supported xen (xen 4.2 or newer)"
2272 xen=no
2275 if test "$xen" = yes; then
2276 if test $xen_ctrl_version -ge 40701 ; then
2277 libs_softmmu="$xen_stable_libs $libs_softmmu"
2279 libs_softmmu="$xen_libs $libs_softmmu"
2284 if test "$xen_pci_passthrough" != "no"; then
2285 if test "$xen" = "yes" && test "$linux" = "yes"; then
2286 xen_pci_passthrough=yes
2287 else
2288 if test "$xen_pci_passthrough" = "yes"; then
2289 error_exit "User requested feature Xen PCI Passthrough" \
2290 " but this feature requires /sys from Linux"
2292 xen_pci_passthrough=no
2296 if test "$xen_pv_domain_build" = "yes" &&
2297 test "$xen" != "yes"; then
2298 error_exit "User requested Xen PV domain builder support" \
2299 "which requires Xen support."
2302 ##########################################
2303 # Sparse probe
2304 if test "$sparse" != "no" ; then
2305 if has cgcc; then
2306 sparse=yes
2307 else
2308 if test "$sparse" = "yes" ; then
2309 feature_not_found "sparse" "Install sparse binary"
2311 sparse=no
2315 ##########################################
2316 # X11 probe
2317 x11_cflags=
2318 x11_libs=-lX11
2319 if $pkg_config --exists "x11"; then
2320 x11_cflags=$($pkg_config --cflags x11)
2321 x11_libs=$($pkg_config --libs x11)
2324 ##########################################
2325 # GTK probe
2327 if test "$gtkabi" = ""; then
2328 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2329 # Use 3.0 as a fallback if that is available.
2330 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2331 gtkabi=2.0
2332 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2333 gtkabi=3.0
2334 else
2335 gtkabi=2.0
2339 if test "$gtk" != "no"; then
2340 gtkpackage="gtk+-$gtkabi"
2341 gtkx11package="gtk+-x11-$gtkabi"
2342 if test "$gtkabi" = "3.0" ; then
2343 gtkversion="3.0.0"
2344 else
2345 gtkversion="2.18.0"
2347 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2348 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2349 gtk_libs=$($pkg_config --libs $gtkpackage)
2350 gtk_version=$($pkg_config --modversion $gtkpackage)
2351 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2352 gtk_cflags="$gtk_cflags $x11_cflags"
2353 gtk_libs="$gtk_libs $x11_libs"
2355 libs_softmmu="$gtk_libs $libs_softmmu"
2356 gtk="yes"
2357 elif test "$gtk" = "yes"; then
2358 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2359 else
2360 gtk="no"
2365 ##########################################
2366 # GNUTLS probe
2368 gnutls_works() {
2369 # Unfortunately some distros have bad pkg-config information for gnutls
2370 # such that it claims to exist but you get a compiler error if you try
2371 # to use the options returned by --libs. Specifically, Ubuntu for --static
2372 # builds doesn't work:
2373 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2375 # So sanity check the cflags/libs before assuming gnutls can be used.
2376 if ! $pkg_config --exists "gnutls"; then
2377 return 1
2380 write_c_skeleton
2381 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2384 gnutls_gcrypt=no
2385 gnutls_nettle=no
2386 if test "$gnutls" != "no"; then
2387 if gnutls_works; then
2388 gnutls_cflags=$($pkg_config --cflags gnutls)
2389 gnutls_libs=$($pkg_config --libs gnutls)
2390 libs_softmmu="$gnutls_libs $libs_softmmu"
2391 libs_tools="$gnutls_libs $libs_tools"
2392 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2393 gnutls="yes"
2395 # gnutls_rnd requires >= 2.11.0
2396 if $pkg_config --exists "gnutls >= 2.11.0"; then
2397 gnutls_rnd="yes"
2398 else
2399 gnutls_rnd="no"
2402 if $pkg_config --exists 'gnutls >= 3.0'; then
2403 gnutls_gcrypt=no
2404 gnutls_nettle=yes
2405 elif $pkg_config --exists 'gnutls >= 2.12'; then
2406 case $($pkg_config --libs --static gnutls) in
2407 *gcrypt*)
2408 gnutls_gcrypt=yes
2409 gnutls_nettle=no
2411 *nettle*)
2412 gnutls_gcrypt=no
2413 gnutls_nettle=yes
2416 gnutls_gcrypt=yes
2417 gnutls_nettle=no
2419 esac
2420 else
2421 gnutls_gcrypt=yes
2422 gnutls_nettle=no
2424 elif test "$gnutls" = "yes"; then
2425 feature_not_found "gnutls" "Install gnutls devel"
2426 else
2427 gnutls="no"
2428 gnutls_rnd="no"
2430 else
2431 gnutls_rnd="no"
2435 # If user didn't give a --disable/enable-gcrypt flag,
2436 # then mark as disabled if user requested nettle
2437 # explicitly, or if gnutls links to nettle
2438 if test -z "$gcrypt"
2439 then
2440 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2441 then
2442 gcrypt="no"
2446 # If user didn't give a --disable/enable-nettle flag,
2447 # then mark as disabled if user requested gcrypt
2448 # explicitly, or if gnutls links to gcrypt
2449 if test -z "$nettle"
2450 then
2451 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2452 then
2453 nettle="no"
2457 has_libgcrypt_config() {
2458 if ! has "libgcrypt-config"
2459 then
2460 return 1
2463 if test -n "$cross_prefix"
2464 then
2465 host=$(libgcrypt-config --host)
2466 if test "$host-" != $cross_prefix
2467 then
2468 return 1
2472 return 0
2475 if test "$gcrypt" != "no"; then
2476 if has_libgcrypt_config; then
2477 gcrypt_cflags=$(libgcrypt-config --cflags)
2478 gcrypt_libs=$(libgcrypt-config --libs)
2479 # Debian has remove -lgpg-error from libgcrypt-config
2480 # as it "spreads unnecessary dependencies" which in
2481 # turn breaks static builds...
2482 if test "$static" = "yes"
2483 then
2484 gcrypt_libs="$gcrypt_libs -lgpg-error"
2486 libs_softmmu="$gcrypt_libs $libs_softmmu"
2487 libs_tools="$gcrypt_libs $libs_tools"
2488 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2489 gcrypt="yes"
2490 if test -z "$nettle"; then
2491 nettle="no"
2494 cat > $TMPC << EOF
2495 #include <gcrypt.h>
2496 int main(void) {
2497 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2498 GCRY_MD_SHA256,
2499 NULL, 0, 0, 0, NULL);
2500 return 0;
2503 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2504 gcrypt_kdf=yes
2507 cat > $TMPC << EOF
2508 #include <gcrypt.h>
2509 int main(void) {
2510 gcry_mac_hd_t handle;
2511 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2512 GCRY_MAC_FLAG_SECURE, NULL);
2513 return 0;
2516 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2517 gcrypt_hmac=yes
2519 else
2520 if test "$gcrypt" = "yes"; then
2521 feature_not_found "gcrypt" "Install gcrypt devel"
2522 else
2523 gcrypt="no"
2529 if test "$nettle" != "no"; then
2530 if $pkg_config --exists "nettle"; then
2531 nettle_cflags=$($pkg_config --cflags nettle)
2532 nettle_libs=$($pkg_config --libs nettle)
2533 nettle_version=$($pkg_config --modversion nettle)
2534 libs_softmmu="$nettle_libs $libs_softmmu"
2535 libs_tools="$nettle_libs $libs_tools"
2536 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2537 nettle="yes"
2539 cat > $TMPC << EOF
2540 #include <stddef.h>
2541 #include <nettle/pbkdf2.h>
2542 int main(void) {
2543 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2544 return 0;
2547 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2548 nettle_kdf=yes
2550 else
2551 if test "$nettle" = "yes"; then
2552 feature_not_found "nettle" "Install nettle devel"
2553 else
2554 nettle="no"
2559 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2560 then
2561 error_exit "Only one of gcrypt & nettle can be enabled"
2564 ##########################################
2565 # libtasn1 - only for the TLS creds/session test suite
2567 tasn1=yes
2568 tasn1_cflags=""
2569 tasn1_libs=""
2570 if $pkg_config --exists "libtasn1"; then
2571 tasn1_cflags=$($pkg_config --cflags libtasn1)
2572 tasn1_libs=$($pkg_config --libs libtasn1)
2573 else
2574 tasn1=no
2578 ##########################################
2579 # getifaddrs (for tests/test-io-channel-socket )
2581 have_ifaddrs_h=yes
2582 if ! check_include "ifaddrs.h" ; then
2583 have_ifaddrs_h=no
2586 ##########################################
2587 # VTE probe
2589 if test "$vte" != "no"; then
2590 if test "$gtkabi" = "3.0"; then
2591 vteminversion="0.32.0"
2592 if $pkg_config --exists "vte-2.91"; then
2593 vtepackage="vte-2.91"
2594 else
2595 vtepackage="vte-2.90"
2597 else
2598 vtepackage="vte"
2599 vteminversion="0.24.0"
2601 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2602 vte_cflags=$($pkg_config --cflags $vtepackage)
2603 vte_libs=$($pkg_config --libs $vtepackage)
2604 vteversion=$($pkg_config --modversion $vtepackage)
2605 libs_softmmu="$vte_libs $libs_softmmu"
2606 vte="yes"
2607 elif test "$vte" = "yes"; then
2608 if test "$gtkabi" = "3.0"; then
2609 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2610 else
2611 feature_not_found "vte" "Install libvte devel"
2613 else
2614 vte="no"
2618 ##########################################
2619 # SDL probe
2621 # Look for sdl configuration program (pkg-config or sdl-config). Try
2622 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2624 if test "$sdlabi" = ""; then
2625 if $pkg_config --exists "sdl"; then
2626 sdlabi=1.2
2627 elif $pkg_config --exists "sdl2"; then
2628 sdlabi=2.0
2629 else
2630 sdlabi=1.2
2634 if test $sdlabi = "2.0"; then
2635 sdl_config=$sdl2_config
2636 sdlname=sdl2
2637 sdlconfigname=sdl2_config
2638 elif test $sdlabi = "1.2"; then
2639 sdlname=sdl
2640 sdlconfigname=sdl_config
2641 else
2642 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2645 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2646 sdl_config=$sdlconfigname
2649 if $pkg_config $sdlname --exists; then
2650 sdlconfig="$pkg_config $sdlname"
2651 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2652 elif has ${sdl_config}; then
2653 sdlconfig="$sdl_config"
2654 sdlversion=$($sdlconfig --version)
2655 else
2656 if test "$sdl" = "yes" ; then
2657 feature_not_found "sdl" "Install SDL devel"
2659 sdl=no
2661 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2662 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2665 sdl_too_old=no
2666 if test "$sdl" != "no" ; then
2667 cat > $TMPC << EOF
2668 #include <SDL.h>
2669 #undef main /* We don't want SDL to override our main() */
2670 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2672 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2673 if test "$static" = "yes" ; then
2674 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2675 else
2676 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2678 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2679 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2680 sdl_too_old=yes
2681 else
2682 sdl=yes
2685 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2686 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2687 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2688 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2689 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2691 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2693 else
2694 sdl=no
2696 fi # static link
2697 else # sdl not found
2698 if test "$sdl" = "yes" ; then
2699 feature_not_found "sdl" "Install SDL devel"
2701 sdl=no
2702 fi # sdl compile test
2705 if test "$sdl" = "yes" ; then
2706 cat > $TMPC <<EOF
2707 #include <SDL.h>
2708 #if defined(SDL_VIDEO_DRIVER_X11)
2709 #include <X11/XKBlib.h>
2710 #else
2711 #error No x11 support
2712 #endif
2713 int main(void) { return 0; }
2715 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2716 sdl_cflags="$sdl_cflags $x11_cflags"
2717 sdl_libs="$sdl_libs $x11_libs"
2719 libs_softmmu="$sdl_libs $libs_softmmu"
2722 ##########################################
2723 # RDMA needs OpenFabrics libraries
2724 if test "$rdma" != "no" ; then
2725 cat > $TMPC <<EOF
2726 #include <rdma/rdma_cma.h>
2727 int main(void) { return 0; }
2729 rdma_libs="-lrdmacm -libverbs"
2730 if compile_prog "" "$rdma_libs" ; then
2731 rdma="yes"
2732 libs_softmmu="$libs_softmmu $rdma_libs"
2733 else
2734 if test "$rdma" = "yes" ; then
2735 error_exit \
2736 " OpenFabrics librdmacm/libibverbs not present." \
2737 " Your options:" \
2738 " (1) Fast: Install infiniband packages from your distro." \
2739 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2740 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2742 rdma="no"
2747 ##########################################
2748 # VNC SASL detection
2749 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2750 cat > $TMPC <<EOF
2751 #include <sasl/sasl.h>
2752 #include <stdio.h>
2753 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2755 # Assuming Cyrus-SASL installed in /usr prefix
2756 vnc_sasl_cflags=""
2757 vnc_sasl_libs="-lsasl2"
2758 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2759 vnc_sasl=yes
2760 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2761 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2762 else
2763 if test "$vnc_sasl" = "yes" ; then
2764 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2766 vnc_sasl=no
2770 ##########################################
2771 # VNC JPEG detection
2772 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2773 cat > $TMPC <<EOF
2774 #include <stdio.h>
2775 #include <jpeglib.h>
2776 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2778 vnc_jpeg_cflags=""
2779 vnc_jpeg_libs="-ljpeg"
2780 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2781 vnc_jpeg=yes
2782 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2783 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2784 else
2785 if test "$vnc_jpeg" = "yes" ; then
2786 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2788 vnc_jpeg=no
2792 ##########################################
2793 # VNC PNG detection
2794 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2795 cat > $TMPC <<EOF
2796 //#include <stdio.h>
2797 #include <png.h>
2798 #include <stddef.h>
2799 int main(void) {
2800 png_structp png_ptr;
2801 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2802 return png_ptr != 0;
2805 if $pkg_config libpng --exists; then
2806 vnc_png_cflags=$($pkg_config libpng --cflags)
2807 vnc_png_libs=$($pkg_config libpng --libs)
2808 else
2809 vnc_png_cflags=""
2810 vnc_png_libs="-lpng"
2812 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2813 vnc_png=yes
2814 libs_softmmu="$vnc_png_libs $libs_softmmu"
2815 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2816 else
2817 if test "$vnc_png" = "yes" ; then
2818 feature_not_found "vnc-png" "Install libpng devel"
2820 vnc_png=no
2824 ##########################################
2825 # fnmatch() probe, used for ACL routines
2826 fnmatch="no"
2827 cat > $TMPC << EOF
2828 #include <fnmatch.h>
2829 int main(void)
2831 fnmatch("foo", "foo", 0);
2832 return 0;
2835 if compile_prog "" "" ; then
2836 fnmatch="yes"
2839 ##########################################
2840 # xfsctl() probe, used for file-posix.c
2841 if test "$xfs" != "no" ; then
2842 cat > $TMPC << EOF
2843 #include <stddef.h> /* NULL */
2844 #include <xfs/xfs.h>
2845 int main(void)
2847 xfsctl(NULL, 0, 0, NULL);
2848 return 0;
2851 if compile_prog "" "" ; then
2852 xfs="yes"
2853 else
2854 if test "$xfs" = "yes" ; then
2855 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2857 xfs=no
2861 ##########################################
2862 # vde libraries probe
2863 if test "$vde" != "no" ; then
2864 vde_libs="-lvdeplug"
2865 cat > $TMPC << EOF
2866 #include <libvdeplug.h>
2867 int main(void)
2869 struct vde_open_args a = {0, 0, 0};
2870 char s[] = "";
2871 vde_open(s, s, &a);
2872 return 0;
2875 if compile_prog "" "$vde_libs" ; then
2876 vde=yes
2877 libs_softmmu="$vde_libs $libs_softmmu"
2878 libs_tools="$vde_libs $libs_tools"
2879 else
2880 if test "$vde" = "yes" ; then
2881 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2883 vde=no
2887 ##########################################
2888 # netmap support probe
2889 # Apart from looking for netmap headers, we make sure that the host API version
2890 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2891 # a minor/major version number. Minor new features will be marked with values up
2892 # to 15, and if something happens that requires a change to the backend we will
2893 # move above 15, submit the backend fixes and modify this two bounds.
2894 if test "$netmap" != "no" ; then
2895 cat > $TMPC << EOF
2896 #include <inttypes.h>
2897 #include <net/if.h>
2898 #include <net/netmap.h>
2899 #include <net/netmap_user.h>
2900 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2901 #error
2902 #endif
2903 int main(void) { return 0; }
2905 if compile_prog "" "" ; then
2906 netmap=yes
2907 else
2908 if test "$netmap" = "yes" ; then
2909 feature_not_found "netmap"
2911 netmap=no
2915 ##########################################
2916 # libcap-ng library probe
2917 if test "$cap_ng" != "no" ; then
2918 cap_libs="-lcap-ng"
2919 cat > $TMPC << EOF
2920 #include <cap-ng.h>
2921 int main(void)
2923 capng_capability_to_name(CAPNG_EFFECTIVE);
2924 return 0;
2927 if compile_prog "" "$cap_libs" ; then
2928 cap_ng=yes
2929 libs_tools="$cap_libs $libs_tools"
2930 else
2931 if test "$cap_ng" = "yes" ; then
2932 feature_not_found "cap_ng" "Install libcap-ng devel"
2934 cap_ng=no
2938 ##########################################
2939 # Sound support libraries probe
2941 audio_drv_probe()
2943 drv=$1
2944 hdr=$2
2945 lib=$3
2946 exp=$4
2947 cfl=$5
2948 cat > $TMPC << EOF
2949 #include <$hdr>
2950 int main(void) { $exp }
2952 if compile_prog "$cfl" "$lib" ; then
2954 else
2955 error_exit "$drv check failed" \
2956 "Make sure to have the $drv libs and headers installed."
2960 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2961 for drv in $audio_drv_list; do
2962 case $drv in
2963 alsa)
2964 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2965 "return snd_pcm_close((snd_pcm_t *)0);"
2966 libs_softmmu="-lasound $libs_softmmu"
2970 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2971 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2972 libs_softmmu="-lpulse $libs_softmmu"
2973 audio_pt_int="yes"
2976 sdl)
2977 if test "$sdl" = "no"; then
2978 error_exit "sdl not found or disabled, can not use sdl audio driver"
2982 coreaudio)
2983 libs_softmmu="-framework CoreAudio $libs_softmmu"
2986 dsound)
2987 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2988 audio_win_int="yes"
2991 oss)
2992 libs_softmmu="$oss_lib $libs_softmmu"
2995 wav)
2996 # XXX: Probes for CoreAudio, DirectSound
3000 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3001 error_exit "Unknown driver '$drv' selected" \
3002 "Possible drivers are: $audio_possible_drivers"
3005 esac
3006 done
3008 ##########################################
3009 # BrlAPI probe
3011 if test "$brlapi" != "no" ; then
3012 brlapi_libs="-lbrlapi"
3013 cat > $TMPC << EOF
3014 #include <brlapi.h>
3015 #include <stddef.h>
3016 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3018 if compile_prog "" "$brlapi_libs" ; then
3019 brlapi=yes
3020 libs_softmmu="$brlapi_libs $libs_softmmu"
3021 else
3022 if test "$brlapi" = "yes" ; then
3023 feature_not_found "brlapi" "Install brlapi devel"
3025 brlapi=no
3029 ##########################################
3030 # curses probe
3031 if test "$curses" != "no" ; then
3032 if test "$mingw32" = "yes" ; then
3033 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3034 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3035 else
3036 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3037 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3039 curses_found=no
3040 cat > $TMPC << EOF
3041 #include <locale.h>
3042 #include <curses.h>
3043 #include <wchar.h>
3044 int main(void) {
3045 const char *s = curses_version();
3046 wchar_t wch = L'w';
3047 setlocale(LC_ALL, "");
3048 resize_term(0, 0);
3049 addwstr(L"wide chars\n");
3050 addnwstr(&wch, 1);
3051 add_wch(WACS_DEGREE);
3052 return s != 0;
3055 IFS=:
3056 for curses_inc in $curses_inc_list; do
3057 IFS=:
3058 for curses_lib in $curses_lib_list; do
3059 unset IFS
3060 if compile_prog "$curses_inc" "$curses_lib" ; then
3061 curses_found=yes
3062 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3063 libs_softmmu="$curses_lib $libs_softmmu"
3064 break
3066 done
3067 if test "$curses_found" = yes ; then
3068 break
3070 done
3071 unset IFS
3072 if test "$curses_found" = "yes" ; then
3073 curses=yes
3074 else
3075 if test "$curses" = "yes" ; then
3076 feature_not_found "curses" "Install ncurses devel"
3078 curses=no
3082 ##########################################
3083 # curl probe
3084 if test "$curl" != "no" ; then
3085 if $pkg_config libcurl --exists; then
3086 curlconfig="$pkg_config libcurl"
3087 else
3088 curlconfig=curl-config
3090 cat > $TMPC << EOF
3091 #include <curl/curl.h>
3092 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3094 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3095 curl_libs=$($curlconfig --libs 2>/dev/null)
3096 if compile_prog "$curl_cflags" "$curl_libs" ; then
3097 curl=yes
3098 else
3099 if test "$curl" = "yes" ; then
3100 feature_not_found "curl" "Install libcurl devel"
3102 curl=no
3104 fi # test "$curl"
3106 ##########################################
3107 # bluez support probe
3108 if test "$bluez" != "no" ; then
3109 cat > $TMPC << EOF
3110 #include <bluetooth/bluetooth.h>
3111 int main(void) { return bt_error(0); }
3113 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3114 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3115 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3116 bluez=yes
3117 libs_softmmu="$bluez_libs $libs_softmmu"
3118 else
3119 if test "$bluez" = "yes" ; then
3120 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3122 bluez="no"
3126 ##########################################
3127 # glib support probe
3129 if test "$mingw32" = yes; then
3130 glib_req_ver=2.30
3131 else
3132 glib_req_ver=2.22
3134 glib_modules=gthread-2.0
3135 if test "$modules" = yes; then
3136 glib_modules="$glib_modules gmodule-2.0"
3139 # This workaround is required due to a bug in pkg-config file for glib as it
3140 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3142 if test "$static" = yes -a "$mingw32" = yes; then
3143 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3146 for i in $glib_modules; do
3147 if $pkg_config --atleast-version=$glib_req_ver $i; then
3148 glib_cflags=$($pkg_config --cflags $i)
3149 glib_libs=$($pkg_config --libs $i)
3150 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3151 LIBS="$glib_libs $LIBS"
3152 libs_qga="$glib_libs $libs_qga"
3153 else
3154 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3156 done
3158 # Sanity check that the current size_t matches the
3159 # size that glib thinks it should be. This catches
3160 # problems on multi-arch where people try to build
3161 # 32-bit QEMU while pointing at 64-bit glib headers
3162 cat > $TMPC <<EOF
3163 #include <glib.h>
3164 #include <unistd.h>
3166 #define QEMU_BUILD_BUG_ON(x) \
3167 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3169 int main(void) {
3170 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3171 return 0;
3175 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3176 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3177 "You probably need to set PKG_CONFIG_LIBDIR"\
3178 "to point to the right pkg-config files for your"\
3179 "build target"
3182 # g_test_trap_subprocess added in 2.38. Used by some tests.
3183 glib_subprocess=yes
3184 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3185 glib_subprocess=no
3188 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3189 cat > $TMPC << EOF
3190 #include <glib.h>
3191 int main(void) { return 0; }
3193 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3194 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3195 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3196 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3200 ##########################################
3201 # SHA command probe for modules
3202 if test "$modules" = yes; then
3203 shacmd_probe="sha1sum sha1 shasum"
3204 for c in $shacmd_probe; do
3205 if has $c; then
3206 shacmd="$c"
3207 break
3209 done
3210 if test "$shacmd" = ""; then
3211 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3215 ##########################################
3216 # pixman support probe
3218 if test "$pixman" = ""; then
3219 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3220 pixman="none"
3221 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3222 pixman="system"
3223 else
3224 pixman="internal"
3227 if test "$pixman" = "none"; then
3228 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3229 error_exit "pixman disabled but system emulation or tools build" \
3230 "enabled. You can turn off pixman only if you also" \
3231 "disable all system emulation targets and the tools" \
3232 "build with '--disable-tools --disable-system'."
3234 pixman_cflags=
3235 pixman_libs=
3236 elif test "$pixman" = "system"; then
3237 # pixman version has been checked above
3238 pixman_cflags=$($pkg_config --cflags pixman-1)
3239 pixman_libs=$($pkg_config --libs pixman-1)
3240 else
3241 if test ! -d ${source_path}/pixman/pixman; then
3242 error_exit "pixman >= 0.21.8 not present. Your options:" \
3243 " (1) Preferred: Install the pixman devel package (any recent" \
3244 " distro should have packages as Xorg needs pixman too)." \
3245 " (2) Fetch the pixman submodule, using:" \
3246 " git submodule update --init pixman"
3248 mkdir -p pixman/pixman
3249 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3250 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3253 ##########################################
3254 # libcap probe
3256 if test "$cap" != "no" ; then
3257 cat > $TMPC <<EOF
3258 #include <stdio.h>
3259 #include <sys/capability.h>
3260 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3262 if compile_prog "" "-lcap" ; then
3263 cap=yes
3264 else
3265 cap=no
3269 ##########################################
3270 # pthread probe
3271 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3273 pthread=no
3274 cat > $TMPC << EOF
3275 #include <pthread.h>
3276 static void *f(void *p) { return NULL; }
3277 int main(void) {
3278 pthread_t thread;
3279 pthread_create(&thread, 0, f, 0);
3280 return 0;
3283 if compile_prog "" "" ; then
3284 pthread=yes
3285 else
3286 for pthread_lib in $PTHREADLIBS_LIST; do
3287 if compile_prog "" "$pthread_lib" ; then
3288 pthread=yes
3289 found=no
3290 for lib_entry in $LIBS; do
3291 if test "$lib_entry" = "$pthread_lib"; then
3292 found=yes
3293 break
3295 done
3296 if test "$found" = "no"; then
3297 LIBS="$pthread_lib $LIBS"
3299 PTHREAD_LIB="$pthread_lib"
3300 break
3302 done
3305 if test "$mingw32" != yes -a "$pthread" = no; then
3306 error_exit "pthread check failed" \
3307 "Make sure to have the pthread libs and headers installed."
3310 # check for pthread_setname_np
3311 pthread_setname_np=no
3312 cat > $TMPC << EOF
3313 #include <pthread.h>
3315 static void *f(void *p) { return NULL; }
3316 int main(void)
3318 pthread_t thread;
3319 pthread_create(&thread, 0, f, 0);
3320 pthread_setname_np(thread, "QEMU");
3321 return 0;
3324 if compile_prog "" "$pthread_lib" ; then
3325 pthread_setname_np=yes
3328 ##########################################
3329 # rbd probe
3330 if test "$rbd" != "no" ; then
3331 cat > $TMPC <<EOF
3332 #include <stdio.h>
3333 #include <rbd/librbd.h>
3334 int main(void) {
3335 rados_t cluster;
3336 rados_create(&cluster, NULL);
3337 return 0;
3340 rbd_libs="-lrbd -lrados"
3341 if compile_prog "" "$rbd_libs" ; then
3342 rbd=yes
3343 else
3344 if test "$rbd" = "yes" ; then
3345 feature_not_found "rados block device" "Install librbd/ceph devel"
3347 rbd=no
3351 ##########################################
3352 # libssh2 probe
3353 min_libssh2_version=1.2.8
3354 if test "$libssh2" != "no" ; then
3355 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3356 libssh2_cflags=$($pkg_config libssh2 --cflags)
3357 libssh2_libs=$($pkg_config libssh2 --libs)
3358 libssh2=yes
3359 else
3360 if test "$libssh2" = "yes" ; then
3361 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3363 libssh2=no
3367 ##########################################
3368 # libssh2_sftp_fsync probe
3370 if test "$libssh2" = "yes"; then
3371 cat > $TMPC <<EOF
3372 #include <stdio.h>
3373 #include <libssh2.h>
3374 #include <libssh2_sftp.h>
3375 int main(void) {
3376 LIBSSH2_SESSION *session;
3377 LIBSSH2_SFTP *sftp;
3378 LIBSSH2_SFTP_HANDLE *sftp_handle;
3379 session = libssh2_session_init ();
3380 sftp = libssh2_sftp_init (session);
3381 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3382 libssh2_sftp_fsync (sftp_handle);
3383 return 0;
3386 # libssh2_cflags/libssh2_libs defined in previous test.
3387 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3388 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3392 ##########################################
3393 # linux-aio probe
3395 if test "$linux_aio" != "no" ; then
3396 cat > $TMPC <<EOF
3397 #include <libaio.h>
3398 #include <sys/eventfd.h>
3399 #include <stddef.h>
3400 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3402 if compile_prog "" "-laio" ; then
3403 linux_aio=yes
3404 else
3405 if test "$linux_aio" = "yes" ; then
3406 feature_not_found "linux AIO" "Install libaio devel"
3408 linux_aio=no
3412 ##########################################
3413 # TPM passthrough is only on x86 Linux
3415 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3416 tpm_passthrough=$tpm
3417 else
3418 tpm_passthrough=no
3421 ##########################################
3422 # attr probe
3424 if test "$attr" != "no" ; then
3425 cat > $TMPC <<EOF
3426 #include <stdio.h>
3427 #include <sys/types.h>
3428 #ifdef CONFIG_LIBATTR
3429 #include <attr/xattr.h>
3430 #else
3431 #include <sys/xattr.h>
3432 #endif
3433 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3435 if compile_prog "" "" ; then
3436 attr=yes
3437 # Older distros have <attr/xattr.h>, and need -lattr:
3438 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3439 attr=yes
3440 LIBS="-lattr $LIBS"
3441 libattr=yes
3442 else
3443 if test "$attr" = "yes" ; then
3444 feature_not_found "ATTR" "Install libc6 or libattr devel"
3446 attr=no
3450 ##########################################
3451 # iovec probe
3452 cat > $TMPC <<EOF
3453 #include <sys/types.h>
3454 #include <sys/uio.h>
3455 #include <unistd.h>
3456 int main(void) { return sizeof(struct iovec); }
3458 iovec=no
3459 if compile_prog "" "" ; then
3460 iovec=yes
3463 ##########################################
3464 # preadv probe
3465 cat > $TMPC <<EOF
3466 #include <sys/types.h>
3467 #include <sys/uio.h>
3468 #include <unistd.h>
3469 int main(void) { return preadv(0, 0, 0, 0); }
3471 preadv=no
3472 if compile_prog "" "" ; then
3473 preadv=yes
3476 ##########################################
3477 # fdt probe
3478 # fdt support is mandatory for at least some target architectures,
3479 # so insist on it if we're building those system emulators.
3480 fdt_required=no
3481 for target in $target_list; do
3482 case $target in
3483 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3484 fdt_required=yes
3486 esac
3487 done
3489 if test "$fdt_required" = "yes"; then
3490 if test "$fdt" = "no"; then
3491 error_exit "fdt disabled but some requested targets require it." \
3492 "You can turn off fdt only if you also disable all the system emulation" \
3493 "targets which need it (by specifying a cut down --target-list)."
3495 fdt=yes
3498 if test "$fdt" != "no" ; then
3499 fdt_libs="-lfdt"
3500 # explicitly check for libfdt_env.h as it is missing in some stable installs
3501 # and test for required functions to make sure we are on a version >= 1.4.2
3502 cat > $TMPC << EOF
3503 #include <libfdt.h>
3504 #include <libfdt_env.h>
3505 int main(void) { fdt_first_subnode(0, 0); return 0; }
3507 if compile_prog "" "$fdt_libs" ; then
3508 # system DTC is good - use it
3509 fdt=yes
3510 elif test -d ${source_path}/dtc/libfdt ; then
3511 # have submodule DTC - use it
3512 fdt=yes
3513 dtc_internal="yes"
3514 mkdir -p dtc
3515 if [ "$pwd_is_source_path" != "y" ] ; then
3516 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3517 symlink "$source_path/dtc/scripts" "dtc/scripts"
3519 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3520 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3521 elif test "$fdt" = "yes" ; then
3522 # have neither and want - prompt for system/submodule install
3523 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
3524 " (1) Preferred: Install the DTC (libfdt) devel package" \
3525 " (2) Fetch the DTC submodule, using:" \
3526 " git submodule update --init dtc"
3527 else
3528 # don't have and don't want
3529 fdt_libs=
3530 fdt=no
3534 libs_softmmu="$libs_softmmu $fdt_libs"
3536 ##########################################
3537 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3539 if test "$opengl" != "no" ; then
3540 opengl_pkgs="epoxy libdrm gbm"
3541 if $pkg_config $opengl_pkgs x11; then
3542 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3543 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3544 opengl=yes
3545 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3546 gtk_gl="yes"
3548 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3549 else
3550 if test "$opengl" = "yes" ; then
3551 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3553 opengl_cflags=""
3554 opengl_libs=""
3555 opengl=no
3559 if test "$opengl" = "yes"; then
3560 cat > $TMPC << EOF
3561 #include <epoxy/egl.h>
3562 #ifndef EGL_MESA_image_dma_buf_export
3563 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3564 #endif
3565 int main(void) { return 0; }
3567 if compile_prog "" "" ; then
3568 opengl_dmabuf=yes
3573 ##########################################
3574 # glusterfs probe
3575 if test "$glusterfs" != "no" ; then
3576 if $pkg_config --atleast-version=3 glusterfs-api; then
3577 glusterfs="yes"
3578 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3579 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3580 if $pkg_config --atleast-version=4 glusterfs-api; then
3581 glusterfs_xlator_opt="yes"
3583 if $pkg_config --atleast-version=5 glusterfs-api; then
3584 glusterfs_discard="yes"
3586 if $pkg_config --atleast-version=6 glusterfs-api; then
3587 glusterfs_fallocate="yes"
3588 glusterfs_zerofill="yes"
3590 else
3591 if test "$glusterfs" = "yes" ; then
3592 feature_not_found "GlusterFS backend support" \
3593 "Install glusterfs-api devel >= 3"
3595 glusterfs="no"
3599 # Check for inotify functions when we are building linux-user
3600 # emulator. This is done because older glibc versions don't
3601 # have syscall stubs for these implemented. In that case we
3602 # don't provide them even if kernel supports them.
3604 inotify=no
3605 cat > $TMPC << EOF
3606 #include <sys/inotify.h>
3609 main(void)
3611 /* try to start inotify */
3612 return inotify_init();
3615 if compile_prog "" "" ; then
3616 inotify=yes
3619 inotify1=no
3620 cat > $TMPC << EOF
3621 #include <sys/inotify.h>
3624 main(void)
3626 /* try to start inotify */
3627 return inotify_init1(0);
3630 if compile_prog "" "" ; then
3631 inotify1=yes
3634 # check if pipe2 is there
3635 pipe2=no
3636 cat > $TMPC << EOF
3637 #include <unistd.h>
3638 #include <fcntl.h>
3640 int main(void)
3642 int pipefd[2];
3643 return pipe2(pipefd, O_CLOEXEC);
3646 if compile_prog "" "" ; then
3647 pipe2=yes
3650 # check if accept4 is there
3651 accept4=no
3652 cat > $TMPC << EOF
3653 #include <sys/socket.h>
3654 #include <stddef.h>
3656 int main(void)
3658 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3659 return 0;
3662 if compile_prog "" "" ; then
3663 accept4=yes
3666 # check if tee/splice is there. vmsplice was added same time.
3667 splice=no
3668 cat > $TMPC << EOF
3669 #include <unistd.h>
3670 #include <fcntl.h>
3671 #include <limits.h>
3673 int main(void)
3675 int len, fd = 0;
3676 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3677 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3678 return 0;
3681 if compile_prog "" "" ; then
3682 splice=yes
3685 ##########################################
3686 # libnuma probe
3688 if test "$numa" != "no" ; then
3689 cat > $TMPC << EOF
3690 #include <numa.h>
3691 int main(void) { return numa_available(); }
3694 if compile_prog "" "-lnuma" ; then
3695 numa=yes
3696 libs_softmmu="-lnuma $libs_softmmu"
3697 else
3698 if test "$numa" = "yes" ; then
3699 feature_not_found "numa" "install numactl devel"
3701 numa=no
3705 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3706 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3707 exit 1
3710 ##########################################
3711 # tcmalloc probe
3713 if test "$tcmalloc" = "yes" ; then
3714 cat > $TMPC << EOF
3715 #include <stdlib.h>
3716 int main(void) { malloc(1); return 0; }
3719 if compile_prog "" "-ltcmalloc" ; then
3720 LIBS="-ltcmalloc $LIBS"
3721 else
3722 feature_not_found "tcmalloc" "install gperftools devel"
3726 ##########################################
3727 # jemalloc probe
3729 if test "$jemalloc" = "yes" ; then
3730 cat > $TMPC << EOF
3731 #include <stdlib.h>
3732 int main(void) { malloc(1); return 0; }
3735 if compile_prog "" "-ljemalloc" ; then
3736 LIBS="-ljemalloc $LIBS"
3737 else
3738 feature_not_found "jemalloc" "install jemalloc devel"
3742 ##########################################
3743 # signalfd probe
3744 signalfd="no"
3745 cat > $TMPC << EOF
3746 #include <unistd.h>
3747 #include <sys/syscall.h>
3748 #include <signal.h>
3749 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3752 if compile_prog "" "" ; then
3753 signalfd=yes
3756 # check if eventfd is supported
3757 eventfd=no
3758 cat > $TMPC << EOF
3759 #include <sys/eventfd.h>
3761 int main(void)
3763 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3766 if compile_prog "" "" ; then
3767 eventfd=yes
3770 # check if memfd is supported
3771 memfd=no
3772 cat > $TMPC << EOF
3773 #include <sys/memfd.h>
3775 int main(void)
3777 return memfd_create("foo", MFD_ALLOW_SEALING);
3780 if compile_prog "" "" ; then
3781 memfd=yes
3786 # check for fallocate
3787 fallocate=no
3788 cat > $TMPC << EOF
3789 #include <fcntl.h>
3791 int main(void)
3793 fallocate(0, 0, 0, 0);
3794 return 0;
3797 if compile_prog "" "" ; then
3798 fallocate=yes
3801 # check for fallocate hole punching
3802 fallocate_punch_hole=no
3803 cat > $TMPC << EOF
3804 #include <fcntl.h>
3805 #include <linux/falloc.h>
3807 int main(void)
3809 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3810 return 0;
3813 if compile_prog "" "" ; then
3814 fallocate_punch_hole=yes
3817 # check that fallocate supports range zeroing inside the file
3818 fallocate_zero_range=no
3819 cat > $TMPC << EOF
3820 #include <fcntl.h>
3821 #include <linux/falloc.h>
3823 int main(void)
3825 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3826 return 0;
3829 if compile_prog "" "" ; then
3830 fallocate_zero_range=yes
3833 # check for posix_fallocate
3834 posix_fallocate=no
3835 cat > $TMPC << EOF
3836 #include <fcntl.h>
3838 int main(void)
3840 posix_fallocate(0, 0, 0);
3841 return 0;
3844 if compile_prog "" "" ; then
3845 posix_fallocate=yes
3848 # check for sync_file_range
3849 sync_file_range=no
3850 cat > $TMPC << EOF
3851 #include <fcntl.h>
3853 int main(void)
3855 sync_file_range(0, 0, 0, 0);
3856 return 0;
3859 if compile_prog "" "" ; then
3860 sync_file_range=yes
3863 # check for linux/fiemap.h and FS_IOC_FIEMAP
3864 fiemap=no
3865 cat > $TMPC << EOF
3866 #include <sys/ioctl.h>
3867 #include <linux/fs.h>
3868 #include <linux/fiemap.h>
3870 int main(void)
3872 ioctl(0, FS_IOC_FIEMAP, 0);
3873 return 0;
3876 if compile_prog "" "" ; then
3877 fiemap=yes
3880 # check for dup3
3881 dup3=no
3882 cat > $TMPC << EOF
3883 #include <unistd.h>
3885 int main(void)
3887 dup3(0, 0, 0);
3888 return 0;
3891 if compile_prog "" "" ; then
3892 dup3=yes
3895 # check for ppoll support
3896 ppoll=no
3897 cat > $TMPC << EOF
3898 #include <poll.h>
3900 int main(void)
3902 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3903 ppoll(&pfd, 1, 0, 0);
3904 return 0;
3907 if compile_prog "" "" ; then
3908 ppoll=yes
3911 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3912 prctl_pr_set_timerslack=no
3913 cat > $TMPC << EOF
3914 #include <sys/prctl.h>
3916 int main(void)
3918 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3919 return 0;
3922 if compile_prog "" "" ; then
3923 prctl_pr_set_timerslack=yes
3926 # check for epoll support
3927 epoll=no
3928 cat > $TMPC << EOF
3929 #include <sys/epoll.h>
3931 int main(void)
3933 epoll_create(0);
3934 return 0;
3937 if compile_prog "" "" ; then
3938 epoll=yes
3941 # epoll_create1 is a later addition
3942 # so we must check separately for its presence
3943 epoll_create1=no
3944 cat > $TMPC << EOF
3945 #include <sys/epoll.h>
3947 int main(void)
3949 /* Note that we use epoll_create1 as a value, not as
3950 * a function being called. This is necessary so that on
3951 * old SPARC glibc versions where the function was present in
3952 * the library but not declared in the header file we will
3953 * fail the configure check. (Otherwise we will get a compiler
3954 * warning but not an error, and will proceed to fail the
3955 * qemu compile where we compile with -Werror.)
3957 return (int)(uintptr_t)&epoll_create1;
3960 if compile_prog "" "" ; then
3961 epoll_create1=yes
3964 # check for sendfile support
3965 sendfile=no
3966 cat > $TMPC << EOF
3967 #include <sys/sendfile.h>
3969 int main(void)
3971 return sendfile(0, 0, 0, 0);
3974 if compile_prog "" "" ; then
3975 sendfile=yes
3978 # check for timerfd support (glibc 2.8 and newer)
3979 timerfd=no
3980 cat > $TMPC << EOF
3981 #include <sys/timerfd.h>
3983 int main(void)
3985 return(timerfd_create(CLOCK_REALTIME, 0));
3988 if compile_prog "" "" ; then
3989 timerfd=yes
3992 # check for setns and unshare support
3993 setns=no
3994 cat > $TMPC << EOF
3995 #include <sched.h>
3997 int main(void)
3999 int ret;
4000 ret = setns(0, 0);
4001 ret = unshare(0);
4002 return ret;
4005 if compile_prog "" "" ; then
4006 setns=yes
4009 # clock_adjtime probe
4010 clock_adjtime=no
4011 cat > $TMPC <<EOF
4012 #include <time.h>
4014 int main(void)
4016 return clock_adjtime(0, 0);
4019 clock_adjtime=no
4020 if compile_prog "" "" ; then
4021 clock_adjtime=yes
4024 # syncfs probe
4025 syncfs=no
4026 cat > $TMPC <<EOF
4027 #include <unistd.h>
4029 int main(void)
4031 return syncfs(0);
4034 syncfs=no
4035 if compile_prog "" "" ; then
4036 syncfs=yes
4039 # Check if tools are available to build documentation.
4040 if test "$docs" != "no" ; then
4041 if has makeinfo && has pod2man; then
4042 docs=yes
4043 else
4044 if test "$docs" = "yes" ; then
4045 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4047 docs=no
4051 # Search for bswap_32 function
4052 byteswap_h=no
4053 cat > $TMPC << EOF
4054 #include <byteswap.h>
4055 int main(void) { return bswap_32(0); }
4057 if compile_prog "" "" ; then
4058 byteswap_h=yes
4061 # Search for bswap32 function
4062 bswap_h=no
4063 cat > $TMPC << EOF
4064 #include <sys/endian.h>
4065 #include <sys/types.h>
4066 #include <machine/bswap.h>
4067 int main(void) { return bswap32(0); }
4069 if compile_prog "" "" ; then
4070 bswap_h=yes
4073 ##########################################
4074 # Do we have libiscsi >= 1.9.0
4075 if test "$libiscsi" != "no" ; then
4076 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4077 libiscsi="yes"
4078 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4079 libiscsi_libs=$($pkg_config --libs libiscsi)
4080 else
4081 if test "$libiscsi" = "yes" ; then
4082 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4084 libiscsi="no"
4088 ##########################################
4089 # Do we need libm
4090 cat > $TMPC << EOF
4091 #include <math.h>
4092 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4094 if compile_prog "" "" ; then
4096 elif compile_prog "" "-lm" ; then
4097 LIBS="-lm $LIBS"
4098 libs_qga="-lm $libs_qga"
4099 else
4100 error_exit "libm check failed"
4103 ##########################################
4104 # Do we need librt
4105 # uClibc provides 2 versions of clock_gettime(), one with realtime
4106 # support and one without. This means that the clock_gettime() don't
4107 # need -lrt. We still need it for timer_create() so we check for this
4108 # function in addition.
4109 cat > $TMPC <<EOF
4110 #include <signal.h>
4111 #include <time.h>
4112 int main(void) {
4113 timer_create(CLOCK_REALTIME, NULL, NULL);
4114 return clock_gettime(CLOCK_REALTIME, NULL);
4118 if compile_prog "" "" ; then
4120 # we need pthread for static linking. use previous pthread test result
4121 elif compile_prog "" "$pthread_lib -lrt" ; then
4122 LIBS="$LIBS -lrt"
4123 libs_qga="$libs_qga -lrt"
4126 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4127 "$aix" != "yes" -a "$haiku" != "yes" ; then
4128 libs_softmmu="-lutil $libs_softmmu"
4131 ##########################################
4132 # spice probe
4133 if test "$spice" != "no" ; then
4134 cat > $TMPC << EOF
4135 #include <spice.h>
4136 int main(void) { spice_server_new(); return 0; }
4138 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4139 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4140 if $pkg_config --atleast-version=0.12.0 spice-server && \
4141 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4142 compile_prog "$spice_cflags" "$spice_libs" ; then
4143 spice="yes"
4144 libs_softmmu="$libs_softmmu $spice_libs"
4145 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4146 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4147 spice_server_version=$($pkg_config --modversion spice-server)
4148 else
4149 if test "$spice" = "yes" ; then
4150 feature_not_found "spice" \
4151 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4153 spice="no"
4157 # check for smartcard support
4158 smartcard_cflags=""
4159 if test "$smartcard" != "no"; then
4160 if $pkg_config libcacard; then
4161 libcacard_cflags=$($pkg_config --cflags libcacard)
4162 libcacard_libs=$($pkg_config --libs libcacard)
4163 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4164 libs_softmmu="$libs_softmmu $libcacard_libs"
4165 smartcard="yes"
4166 else
4167 if test "$smartcard" = "yes"; then
4168 feature_not_found "smartcard" "Install libcacard devel"
4170 smartcard="no"
4174 # check for libusb
4175 if test "$libusb" != "no" ; then
4176 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4177 libusb="yes"
4178 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4179 libusb_libs=$($pkg_config --libs libusb-1.0)
4180 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4181 libs_softmmu="$libs_softmmu $libusb_libs"
4182 else
4183 if test "$libusb" = "yes"; then
4184 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4186 libusb="no"
4190 # check for usbredirparser for usb network redirection support
4191 if test "$usb_redir" != "no" ; then
4192 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4193 usb_redir="yes"
4194 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4195 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4196 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4197 libs_softmmu="$libs_softmmu $usb_redir_libs"
4198 else
4199 if test "$usb_redir" = "yes"; then
4200 feature_not_found "usb-redir" "Install usbredir devel"
4202 usb_redir="no"
4206 ##########################################
4207 # check if we have VSS SDK headers for win
4209 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4210 case "$vss_win32_sdk" in
4211 "") vss_win32_include="-isystem $source_path" ;;
4212 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4213 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4214 vss_win32_include="-isystem $source_path/.sdk/vss"
4215 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4217 *) vss_win32_include="-isystem $vss_win32_sdk"
4218 esac
4219 cat > $TMPC << EOF
4220 #define __MIDL_user_allocate_free_DEFINED__
4221 #include <inc/win2003/vss.h>
4222 int main(void) { return VSS_CTX_BACKUP; }
4224 if compile_prog "$vss_win32_include" "" ; then
4225 guest_agent_with_vss="yes"
4226 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4227 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4228 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4229 else
4230 if test "$vss_win32_sdk" != "" ; then
4231 echo "ERROR: Please download and install Microsoft VSS SDK:"
4232 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4233 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4234 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4235 echo "ERROR: The headers are extracted in the directory \`inc'."
4236 feature_not_found "VSS support"
4238 guest_agent_with_vss="no"
4242 ##########################################
4243 # lookup Windows platform SDK (if not specified)
4244 # The SDK is needed only to build .tlb (type library) file of guest agent
4245 # VSS provider from the source. It is usually unnecessary because the
4246 # pre-compiled .tlb file is included.
4248 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4249 if test -z "$win_sdk"; then
4250 programfiles="$PROGRAMFILES"
4251 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4252 if test -n "$programfiles"; then
4253 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4254 else
4255 feature_not_found "Windows SDK"
4257 elif test "$win_sdk" = "no"; then
4258 win_sdk=""
4262 ##########################################
4263 # check if mingw environment provides a recent ntddscsi.h
4264 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4265 cat > $TMPC << EOF
4266 #include <windows.h>
4267 #include <ntddscsi.h>
4268 int main(void) {
4269 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4270 #error Missing required ioctl definitions
4271 #endif
4272 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4273 return addr.Lun;
4276 if compile_prog "" "" ; then
4277 guest_agent_ntddscsi=yes
4278 libs_qga="-lsetupapi $libs_qga"
4282 ##########################################
4283 # virgl renderer probe
4285 if test "$virglrenderer" != "no" ; then
4286 cat > $TMPC << EOF
4287 #include <virglrenderer.h>
4288 int main(void) { virgl_renderer_poll(); return 0; }
4290 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4291 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4292 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4293 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4294 virglrenderer="yes"
4295 else
4296 if test "$virglrenderer" = "yes" ; then
4297 feature_not_found "virglrenderer"
4299 virglrenderer="no"
4303 ##########################################
4304 # check if we have fdatasync
4306 fdatasync=no
4307 cat > $TMPC << EOF
4308 #include <unistd.h>
4309 int main(void) {
4310 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4311 return fdatasync(0);
4312 #else
4313 #error Not supported
4314 #endif
4317 if compile_prog "" "" ; then
4318 fdatasync=yes
4321 ##########################################
4322 # check if we have madvise
4324 madvise=no
4325 cat > $TMPC << EOF
4326 #include <sys/types.h>
4327 #include <sys/mman.h>
4328 #include <stddef.h>
4329 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4331 if compile_prog "" "" ; then
4332 madvise=yes
4335 ##########################################
4336 # check if we have posix_madvise
4338 posix_madvise=no
4339 cat > $TMPC << EOF
4340 #include <sys/mman.h>
4341 #include <stddef.h>
4342 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4344 if compile_prog "" "" ; then
4345 posix_madvise=yes
4348 ##########################################
4349 # check if we have posix_syslog
4351 posix_syslog=no
4352 cat > $TMPC << EOF
4353 #include <syslog.h>
4354 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4356 if compile_prog "" "" ; then
4357 posix_syslog=yes
4360 ##########################################
4361 # check if trace backend exists
4363 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4364 if test "$?" -ne 0 ; then
4365 error_exit "invalid trace backends" \
4366 "Please choose supported trace backends."
4369 ##########################################
4370 # For 'ust' backend, test if ust headers are present
4371 if have_backend "ust"; then
4372 cat > $TMPC << EOF
4373 #include <lttng/tracepoint.h>
4374 int main(void) { return 0; }
4376 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4377 if $pkg_config lttng-ust --exists; then
4378 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4379 else
4380 lttng_ust_libs="-llttng-ust -ldl"
4382 if $pkg_config liburcu-bp --exists; then
4383 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4384 else
4385 urcu_bp_libs="-lurcu-bp"
4388 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4389 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4390 else
4391 error_exit "Trace backend 'ust' missing lttng-ust header files"
4395 ##########################################
4396 # For 'dtrace' backend, test if 'dtrace' command is present
4397 if have_backend "dtrace"; then
4398 if ! has 'dtrace' ; then
4399 error_exit "dtrace command is not found in PATH $PATH"
4401 trace_backend_stap="no"
4402 if has 'stap' ; then
4403 trace_backend_stap="yes"
4407 ##########################################
4408 # check and set a backend for coroutine
4410 # We prefer ucontext, but it's not always possible. The fallback
4411 # is sigcontext. On Windows the only valid backend is the Windows
4412 # specific one.
4414 ucontext_works=no
4415 if test "$darwin" != "yes"; then
4416 cat > $TMPC << EOF
4417 #include <ucontext.h>
4418 #ifdef __stub_makecontext
4419 #error Ignoring glibc stub makecontext which will always fail
4420 #endif
4421 int main(void) { makecontext(0, 0, 0); return 0; }
4423 if compile_prog "" "" ; then
4424 ucontext_works=yes
4428 if test "$coroutine" = ""; then
4429 if test "$mingw32" = "yes"; then
4430 coroutine=win32
4431 elif test "$ucontext_works" = "yes"; then
4432 coroutine=ucontext
4433 else
4434 coroutine=sigaltstack
4436 else
4437 case $coroutine in
4438 windows)
4439 if test "$mingw32" != "yes"; then
4440 error_exit "'windows' coroutine backend only valid for Windows"
4442 # Unfortunately the user visible backend name doesn't match the
4443 # coroutine-*.c filename for this case, so we have to adjust it here.
4444 coroutine=win32
4446 ucontext)
4447 if test "$ucontext_works" != "yes"; then
4448 feature_not_found "ucontext"
4451 sigaltstack)
4452 if test "$mingw32" = "yes"; then
4453 error_exit "only the 'windows' coroutine backend is valid for Windows"
4457 error_exit "unknown coroutine backend $coroutine"
4459 esac
4462 if test "$coroutine_pool" = ""; then
4463 coroutine_pool=yes
4466 if test "$debug_stack_usage" = "yes"; then
4467 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4468 error_exit "stack usage debugging is not supported for $cpu"
4470 if test "$coroutine_pool" = "yes"; then
4471 echo "WARN: disabling coroutine pool for stack usage debugging"
4472 coroutine_pool=no
4477 ##########################################
4478 # check if we have open_by_handle_at
4480 open_by_handle_at=no
4481 cat > $TMPC << EOF
4482 #include <fcntl.h>
4483 #if !defined(AT_EMPTY_PATH)
4484 # error missing definition
4485 #else
4486 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4487 #endif
4489 if compile_prog "" "" ; then
4490 open_by_handle_at=yes
4493 ########################################
4494 # check if we have linux/magic.h
4496 linux_magic_h=no
4497 cat > $TMPC << EOF
4498 #include <linux/magic.h>
4499 int main(void) {
4500 return 0;
4503 if compile_prog "" "" ; then
4504 linux_magic_h=yes
4507 ########################################
4508 # check whether we can disable warning option with a pragma (this is needed
4509 # to silence warnings in the headers of some versions of external libraries).
4510 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4511 # only a warning.
4513 # If we can't selectively disable warning in the code, disable -Werror so that
4514 # the build doesn't fail anyway.
4516 pragma_disable_unused_but_set=no
4517 cat > $TMPC << EOF
4518 #pragma GCC diagnostic push
4519 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4520 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4521 #pragma GCC diagnostic pop
4523 int main(void) {
4524 return 0;
4527 if compile_prog "-Werror" "" ; then
4528 pragma_diagnostic_available=yes
4529 else
4530 werror=no
4533 ########################################
4534 # check if we have valgrind/valgrind.h
4536 valgrind_h=no
4537 cat > $TMPC << EOF
4538 #include <valgrind/valgrind.h>
4539 int main(void) {
4540 return 0;
4543 if compile_prog "" "" ; then
4544 valgrind_h=yes
4547 ########################################
4548 # check if environ is declared
4550 has_environ=no
4551 cat > $TMPC << EOF
4552 #include <unistd.h>
4553 int main(void) {
4554 environ = 0;
4555 return 0;
4558 if compile_prog "" "" ; then
4559 has_environ=yes
4562 ########################################
4563 # check if cpuid.h is usable.
4565 cpuid_h=no
4566 cat > $TMPC << EOF
4567 #include <cpuid.h>
4568 int main(void) {
4569 unsigned a, b, c, d;
4570 int max = __get_cpuid_max(0, 0);
4572 if (max >= 1) {
4573 __cpuid(1, a, b, c, d);
4576 if (max >= 7) {
4577 __cpuid_count(7, 0, a, b, c, d);
4580 return 0;
4583 if compile_prog "" "" ; then
4584 cpuid_h=yes
4587 ########################################
4588 # check if __[u]int128_t is usable.
4590 int128=no
4591 cat > $TMPC << EOF
4592 #if defined(__clang_major__) && defined(__clang_minor__)
4593 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4594 # error __int128_t does not work in CLANG before 3.2
4595 # endif
4596 #endif
4597 __int128_t a;
4598 __uint128_t b;
4599 int main (void) {
4600 a = a + b;
4601 b = a * b;
4602 a = a * a;
4603 return 0;
4606 if compile_prog "" "" ; then
4607 int128=yes
4610 #########################################
4611 # See if 128-bit atomic operations are supported.
4613 atomic128=no
4614 if test "$int128" = "yes"; then
4615 cat > $TMPC << EOF
4616 int main(void)
4618 unsigned __int128 x = 0, y = 0;
4619 y = __atomic_load_16(&x, 0);
4620 __atomic_store_16(&x, y, 0);
4621 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4622 return 0;
4625 if compile_prog "" "" ; then
4626 atomic128=yes
4630 #########################################
4631 # See if 64-bit atomic operations are supported.
4632 # Note that without __atomic builtins, we can only
4633 # assume atomic loads/stores max at pointer size.
4635 cat > $TMPC << EOF
4636 #include <stdint.h>
4637 int main(void)
4639 uint64_t x = 0, y = 0;
4640 #ifdef __ATOMIC_RELAXED
4641 y = __atomic_load_8(&x, 0);
4642 __atomic_store_8(&x, y, 0);
4643 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4644 __atomic_exchange_8(&x, y, 0);
4645 __atomic_fetch_add_8(&x, y, 0);
4646 #else
4647 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4648 __sync_lock_test_and_set(&x, y);
4649 __sync_val_compare_and_swap(&x, y, 0);
4650 __sync_fetch_and_add(&x, y);
4651 #endif
4652 return 0;
4655 if compile_prog "" "" ; then
4656 atomic64=yes
4659 ########################################
4660 # check if getauxval is available.
4662 getauxval=no
4663 cat > $TMPC << EOF
4664 #include <sys/auxv.h>
4665 int main(void) {
4666 return getauxval(AT_HWCAP) == 0;
4669 if compile_prog "" "" ; then
4670 getauxval=yes
4673 ########################################
4674 # check if ccache is interfering with
4675 # semantic analysis of macros
4677 unset CCACHE_CPP2
4678 ccache_cpp2=no
4679 cat > $TMPC << EOF
4680 static const int Z = 1;
4681 #define fn() ({ Z; })
4682 #define TAUT(X) ((X) == Z)
4683 #define PAREN(X, Y) (X == Y)
4684 #define ID(X) (X)
4685 int main(int argc, char *argv[])
4687 int x = 0, y = 0;
4688 x = ID(x);
4689 x = fn();
4690 fn();
4691 if (PAREN(x, y)) return 0;
4692 if (TAUT(Z)) return 0;
4693 return 0;
4697 if ! compile_object "-Werror"; then
4698 ccache_cpp2=yes
4701 #################################################
4702 # clang does not support glibc + FORTIFY_SOURCE.
4704 if test "$fortify_source" != "no"; then
4705 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4706 fortify_source="no";
4707 elif test -n "$cxx" &&
4708 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4709 fortify_source="no";
4710 else
4711 fortify_source="yes"
4715 ##########################################
4716 # check if struct fsxattr is available via linux/fs.h
4718 have_fsxattr=no
4719 cat > $TMPC << EOF
4720 #include <linux/fs.h>
4721 struct fsxattr foo;
4722 int main(void) {
4723 return 0;
4726 if compile_prog "" "" ; then
4727 have_fsxattr=yes
4730 ##########################################
4731 # check if rtnetlink.h exists and is useful
4732 have_rtnetlink=no
4733 cat > $TMPC << EOF
4734 #include <linux/rtnetlink.h>
4735 int main(void) {
4736 return IFLA_PROTO_DOWN;
4739 if compile_prog "" "" ; then
4740 have_rtnetlink=yes
4743 ##########################################
4744 # check for usable AF_VSOCK environment
4745 have_af_vsock=no
4746 cat > $TMPC << EOF
4747 #include <errno.h>
4748 #include <sys/types.h>
4749 #include <sys/socket.h>
4750 #if !defined(AF_VSOCK)
4751 # error missing AF_VSOCK flag
4752 #endif
4753 #include <linux/vm_sockets.h>
4754 int main(void) {
4755 int sock, ret;
4756 struct sockaddr_vm svm;
4757 socklen_t len = sizeof(svm);
4758 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4759 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4760 if ((ret == -1) && (errno == ENOTCONN)) {
4761 return 0;
4763 return -1;
4766 if compile_prog "" "" ; then
4767 have_af_vsock=yes
4770 #################################################
4771 # Sparc implicitly links with --relax, which is
4772 # incompatible with -r, so --no-relax should be
4773 # given. It does no harm to give it on other
4774 # platforms too.
4776 # Note: the prototype is needed since QEMU_CFLAGS
4777 # contains -Wmissing-prototypes
4778 cat > $TMPC << EOF
4779 extern int foo(void);
4780 int foo(void) { return 0; }
4782 if ! compile_object ""; then
4783 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4785 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4786 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4787 LD_REL_FLAGS=$i
4788 break
4790 done
4791 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4792 feature_not_found "modules" "Cannot find how to build relocatable objects"
4795 ##########################################
4796 # check for sysmacros.h
4798 have_sysmacros=no
4799 cat > $TMPC << EOF
4800 #include <sys/sysmacros.h>
4801 int main(void) {
4802 return makedev(0, 0);
4805 if compile_prog "" "" ; then
4806 have_sysmacros=yes
4809 ##########################################
4810 # Veritas HyperScale block driver VxHS
4811 # Check if libvxhs is installed
4813 if test "$vxhs" != "no" ; then
4814 cat > $TMPC <<EOF
4815 #include <stdint.h>
4816 #include <qnio/qnio_api.h>
4818 void *vxhs_callback;
4820 int main(void) {
4821 iio_init(QNIO_VERSION, vxhs_callback);
4822 return 0;
4825 vxhs_libs="-lvxhs -lssl"
4826 if compile_prog "" "$vxhs_libs" ; then
4827 vxhs=yes
4828 else
4829 if test "$vxhs" = "yes" ; then
4830 feature_not_found "vxhs block device" "Install libvxhs See github"
4832 vxhs=no
4836 ##########################################
4837 # check for _Static_assert()
4839 have_static_assert=no
4840 cat > $TMPC << EOF
4841 _Static_assert(1, "success");
4842 int main(void) {
4843 return 0;
4846 if compile_prog "" "" ; then
4847 have_static_assert=yes
4850 ##########################################
4851 # End of CC checks
4852 # After here, no more $cc or $ld runs
4854 if test "$gcov" = "yes" ; then
4855 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4856 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4857 elif test "$fortify_source" = "yes" ; then
4858 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4859 elif test "$debug" = "no"; then
4860 CFLAGS="-O2 $CFLAGS"
4863 ##########################################
4864 # Do we have libnfs
4865 if test "$libnfs" != "no" ; then
4866 if $pkg_config --atleast-version=1.9.3 libnfs; then
4867 libnfs="yes"
4868 libnfs_libs=$($pkg_config --libs libnfs)
4869 else
4870 if test "$libnfs" = "yes" ; then
4871 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4873 libnfs="no"
4877 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4878 if test "$werror" = "yes"; then
4879 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4882 if test "$solaris" = "no" ; then
4883 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4884 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4888 # test if pod2man has --utf8 option
4889 if pod2man --help | grep -q utf8; then
4890 POD2MAN="pod2man --utf8"
4891 else
4892 POD2MAN="pod2man"
4895 # Use ASLR, no-SEH and DEP if available
4896 if test "$mingw32" = "yes" ; then
4897 for flag in --dynamicbase --no-seh --nxcompat; do
4898 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4899 LDFLAGS="-Wl,$flag $LDFLAGS"
4901 done
4904 qemu_confdir=$sysconfdir$confsuffix
4905 qemu_moddir=$libdir$confsuffix
4906 qemu_datadir=$datadir$confsuffix
4907 qemu_localedir="$datadir/locale"
4909 tools=""
4910 if test "$want_tools" = "yes" ; then
4911 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4912 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4913 tools="qemu-nbd\$(EXESUF) $tools"
4914 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4917 if test "$softmmu" = yes ; then
4918 if test "$virtfs" != no ; then
4919 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4920 virtfs=yes
4921 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4922 else
4923 if test "$virtfs" = yes; then
4924 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4926 virtfs=no
4931 # Probe for guest agent support/options
4933 if [ "$guest_agent" != "no" ]; then
4934 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4935 tools="qemu-ga $tools"
4936 guest_agent=yes
4937 elif [ "$guest_agent" != yes ]; then
4938 guest_agent=no
4939 else
4940 error_exit "Guest agent is not supported on this platform"
4944 # Guest agent Window MSI package
4946 if test "$guest_agent" != yes; then
4947 if test "$guest_agent_msi" = yes; then
4948 error_exit "MSI guest agent package requires guest agent enabled"
4950 guest_agent_msi=no
4951 elif test "$mingw32" != "yes"; then
4952 if test "$guest_agent_msi" = "yes"; then
4953 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4955 guest_agent_msi=no
4956 elif ! has wixl; then
4957 if test "$guest_agent_msi" = "yes"; then
4958 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4960 guest_agent_msi=no
4961 else
4962 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4963 # disabled explicitly
4964 if test "$guest_agent_msi" != "no"; then
4965 guest_agent_msi=yes
4969 if test "$guest_agent_msi" = "yes"; then
4970 if test "$guest_agent_with_vss" = "yes"; then
4971 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4974 if test "$QEMU_GA_MANUFACTURER" = ""; then
4975 QEMU_GA_MANUFACTURER=QEMU
4978 if test "$QEMU_GA_DISTRO" = ""; then
4979 QEMU_GA_DISTRO=Linux
4982 if test "$QEMU_GA_VERSION" = ""; then
4983 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4986 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4988 case "$cpu" in
4989 x86_64)
4990 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4992 i386)
4993 QEMU_GA_MSI_ARCH="-D Arch=32"
4996 error_exit "CPU $cpu not supported for building installation package"
4998 esac
5001 # Mac OS X ships with a broken assembler
5002 roms=
5003 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5004 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5005 "$softmmu" = yes ; then
5006 # Different host OS linkers have different ideas about the name of the ELF
5007 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5008 # variant; and Windows uses i386pe.
5009 for emu in elf_i386 elf_i386_fbsd i386pe; do
5010 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5011 ld_i386_emulation="$emu"
5012 roms="optionrom"
5013 break
5015 done
5017 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5018 roms="$roms spapr-rtas"
5021 if test "$cpu" = "s390x" ; then
5022 roms="$roms s390-ccw"
5025 # Probe for the need for relocating the user-only binary.
5026 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5027 textseg_addr=
5028 case "$cpu" in
5029 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5030 # ??? Rationale for choosing this address
5031 textseg_addr=0x60000000
5033 mips)
5034 # A 256M aligned address, high in the address space, with enough
5035 # room for the code_gen_buffer above it before the stack.
5036 textseg_addr=0x60000000
5038 esac
5039 if [ -n "$textseg_addr" ]; then
5040 cat > $TMPC <<EOF
5041 int main(void) { return 0; }
5043 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5044 if ! compile_prog "" "$textseg_ldflags"; then
5045 # In case ld does not support -Ttext-segment, edit the default linker
5046 # script via sed to set the .text start addr. This is needed on FreeBSD
5047 # at least.
5048 if ! $ld --verbose >/dev/null 2>&1; then
5049 error_exit \
5050 "We need to link the QEMU user mode binaries at a" \
5051 "specific text address. Unfortunately your linker" \
5052 "doesn't support either the -Ttext-segment option or" \
5053 "printing the default linker script with --verbose." \
5054 "If you don't want the user mode binaries, pass the" \
5055 "--disable-user option to configure."
5058 $ld --verbose | sed \
5059 -e '1,/==================================================/d' \
5060 -e '/==================================================/,$d' \
5061 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5062 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5063 textseg_ldflags="-Wl,-T../config-host.ld"
5068 echo_version() {
5069 if test "$1" = "yes" ; then
5070 echo "($2)"
5074 # prepend pixman and ftd flags after all config tests are done
5075 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5076 libs_softmmu="$pixman_libs $libs_softmmu"
5078 echo "Install prefix $prefix"
5079 echo "BIOS directory $(eval echo $qemu_datadir)"
5080 echo "binary directory $(eval echo $bindir)"
5081 echo "library directory $(eval echo $libdir)"
5082 echo "module directory $(eval echo $qemu_moddir)"
5083 echo "libexec directory $(eval echo $libexecdir)"
5084 echo "include directory $(eval echo $includedir)"
5085 echo "config directory $(eval echo $sysconfdir)"
5086 if test "$mingw32" = "no" ; then
5087 echo "local state directory $(eval echo $local_statedir)"
5088 echo "Manual directory $(eval echo $mandir)"
5089 echo "ELF interp prefix $interp_prefix"
5090 else
5091 echo "local state directory queried at runtime"
5092 echo "Windows SDK $win_sdk"
5094 echo "Source path $source_path"
5095 echo "C compiler $cc"
5096 echo "Host C compiler $host_cc"
5097 echo "C++ compiler $cxx"
5098 echo "Objective-C compiler $objcc"
5099 echo "ARFLAGS $ARFLAGS"
5100 echo "CFLAGS $CFLAGS"
5101 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5102 echo "LDFLAGS $LDFLAGS"
5103 echo "make $make"
5104 echo "install $install"
5105 echo "python $python"
5106 if test "$slirp" = "yes" ; then
5107 echo "smbd $smbd"
5109 echo "module support $modules"
5110 echo "host CPU $cpu"
5111 echo "host big endian $bigendian"
5112 echo "target list $target_list"
5113 echo "tcg debug enabled $debug_tcg"
5114 echo "gprof enabled $gprof"
5115 echo "sparse enabled $sparse"
5116 echo "strip binaries $strip_opt"
5117 echo "profiler $profiler"
5118 echo "static build $static"
5119 if test "$darwin" = "yes" ; then
5120 echo "Cocoa support $cocoa"
5122 echo "pixman $pixman"
5123 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5124 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5125 echo "GTK GL support $gtk_gl"
5126 echo "VTE support $vte $(echo_version $vte $vteversion)"
5127 echo "TLS priority $tls_priority"
5128 echo "GNUTLS support $gnutls"
5129 echo "GNUTLS rnd $gnutls_rnd"
5130 echo "libgcrypt $gcrypt"
5131 echo "libgcrypt kdf $gcrypt_kdf"
5132 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5133 echo "nettle kdf $nettle_kdf"
5134 echo "libtasn1 $tasn1"
5135 echo "curses support $curses"
5136 echo "virgl support $virglrenderer"
5137 echo "curl support $curl"
5138 echo "mingw32 support $mingw32"
5139 echo "Audio drivers $audio_drv_list"
5140 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5141 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5142 echo "VirtFS support $virtfs"
5143 echo "VNC support $vnc"
5144 if test "$vnc" = "yes" ; then
5145 echo "VNC SASL support $vnc_sasl"
5146 echo "VNC JPEG support $vnc_jpeg"
5147 echo "VNC PNG support $vnc_png"
5149 if test -n "$sparc_cpu"; then
5150 echo "Target Sparc Arch $sparc_cpu"
5152 echo "xen support $xen"
5153 if test "$xen" = "yes" ; then
5154 echo "xen ctrl version $xen_ctrl_version"
5155 echo "pv dom build $xen_pv_domain_build"
5157 echo "brlapi support $brlapi"
5158 echo "bluez support $bluez"
5159 echo "Documentation $docs"
5160 echo "PIE $pie"
5161 echo "vde support $vde"
5162 echo "netmap support $netmap"
5163 echo "Linux AIO support $linux_aio"
5164 echo "ATTR/XATTR support $attr"
5165 echo "Install blobs $blobs"
5166 echo "KVM support $kvm"
5167 echo "HAX support $hax"
5168 echo "RDMA support $rdma"
5169 echo "TCG interpreter $tcg_interpreter"
5170 echo "fdt support $fdt"
5171 echo "preadv support $preadv"
5172 echo "fdatasync $fdatasync"
5173 echo "madvise $madvise"
5174 echo "posix_madvise $posix_madvise"
5175 echo "libcap-ng support $cap_ng"
5176 echo "vhost-net support $vhost_net"
5177 echo "vhost-scsi support $vhost_scsi"
5178 echo "vhost-vsock support $vhost_vsock"
5179 echo "Trace backends $trace_backends"
5180 if have_backend "simple"; then
5181 echo "Trace output file $trace_file-<pid>"
5183 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5184 echo "rbd support $rbd"
5185 echo "xfsctl support $xfs"
5186 echo "smartcard support $smartcard"
5187 echo "libusb $libusb"
5188 echo "usb net redir $usb_redir"
5189 echo "OpenGL support $opengl"
5190 echo "OpenGL dmabufs $opengl_dmabuf"
5191 echo "libiscsi support $libiscsi"
5192 echo "libnfs support $libnfs"
5193 echo "build guest agent $guest_agent"
5194 echo "QGA VSS support $guest_agent_with_vss"
5195 echo "QGA w32 disk info $guest_agent_ntddscsi"
5196 echo "QGA MSI support $guest_agent_msi"
5197 echo "seccomp support $seccomp"
5198 echo "coroutine backend $coroutine"
5199 echo "coroutine pool $coroutine_pool"
5200 echo "debug stack usage $debug_stack_usage"
5201 echo "GlusterFS support $glusterfs"
5202 echo "gcov $gcov_tool"
5203 echo "gcov enabled $gcov"
5204 echo "TPM support $tpm"
5205 echo "libssh2 support $libssh2"
5206 echo "TPM passthrough $tpm_passthrough"
5207 echo "QOM debugging $qom_cast_debug"
5208 echo "Live block migration $live_block_migration"
5209 echo "lzo support $lzo"
5210 echo "snappy support $snappy"
5211 echo "bzip2 support $bzip2"
5212 echo "NUMA host support $numa"
5213 echo "tcmalloc support $tcmalloc"
5214 echo "jemalloc support $jemalloc"
5215 echo "avx2 optimization $avx2_opt"
5216 echo "replication support $replication"
5217 echo "VxHS block device $vxhs"
5219 if test "$sdl_too_old" = "yes"; then
5220 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5223 if test "$supported_cpu" = "no"; then
5224 echo
5225 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5226 echo
5227 echo "CPU host architecture $cpu support is not currently maintained."
5228 echo "The QEMU project intends to remove support for this host CPU in"
5229 echo "a future release if nobody volunteers to maintain it and to"
5230 echo "provide a build host for our continuous integration setup."
5231 echo "configure has succeeded and you can continue to build, but"
5232 echo "if you care about QEMU on this platform you should contact"
5233 echo "us upstream at qemu-devel@nongnu.org."
5236 if test "$supported_os" = "no"; then
5237 echo
5238 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5239 echo
5240 echo "Host OS $targetos support is not currently maintained."
5241 echo "The QEMU project intends to remove support for this host OS in"
5242 echo "a future release if nobody volunteers to maintain it and to"
5243 echo "provide a build host for our continuous integration setup."
5244 echo "configure has succeeded and you can continue to build, but"
5245 echo "if you care about QEMU on this platform you should contact"
5246 echo "us upstream at qemu-devel@nongnu.org."
5249 config_host_mak="config-host.mak"
5251 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5253 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5254 echo >> $config_host_mak
5256 echo all: >> $config_host_mak
5257 echo "prefix=$prefix" >> $config_host_mak
5258 echo "bindir=$bindir" >> $config_host_mak
5259 echo "libdir=$libdir" >> $config_host_mak
5260 echo "libexecdir=$libexecdir" >> $config_host_mak
5261 echo "includedir=$includedir" >> $config_host_mak
5262 echo "mandir=$mandir" >> $config_host_mak
5263 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5264 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5265 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5266 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5267 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5268 if test "$mingw32" = "no" ; then
5269 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5271 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5272 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5273 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5274 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5275 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5277 echo "ARCH=$ARCH" >> $config_host_mak
5279 if test "$debug_tcg" = "yes" ; then
5280 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5282 if test "$strip_opt" = "yes" ; then
5283 echo "STRIP=${strip}" >> $config_host_mak
5285 if test "$bigendian" = "yes" ; then
5286 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5288 if test "$mingw32" = "yes" ; then
5289 echo "CONFIG_WIN32=y" >> $config_host_mak
5290 rc_version=$(cat $source_path/VERSION)
5291 version_major=${rc_version%%.*}
5292 rc_version=${rc_version#*.}
5293 version_minor=${rc_version%%.*}
5294 rc_version=${rc_version#*.}
5295 version_subminor=${rc_version%%.*}
5296 version_micro=0
5297 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5298 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5299 if test "$guest_agent_with_vss" = "yes" ; then
5300 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5301 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5302 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5304 if test "$guest_agent_ntddscsi" = "yes" ; then
5305 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5307 if test "$guest_agent_msi" = "yes"; then
5308 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5309 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5310 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5311 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5312 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5313 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5314 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5316 else
5317 echo "CONFIG_POSIX=y" >> $config_host_mak
5320 if test "$linux" = "yes" ; then
5321 echo "CONFIG_LINUX=y" >> $config_host_mak
5324 if test "$darwin" = "yes" ; then
5325 echo "CONFIG_DARWIN=y" >> $config_host_mak
5328 if test "$aix" = "yes" ; then
5329 echo "CONFIG_AIX=y" >> $config_host_mak
5332 if test "$solaris" = "yes" ; then
5333 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5334 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5335 if test "$needs_libsunmath" = "yes" ; then
5336 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5339 if test "$haiku" = "yes" ; then
5340 echo "CONFIG_HAIKU=y" >> $config_host_mak
5342 if test "$static" = "yes" ; then
5343 echo "CONFIG_STATIC=y" >> $config_host_mak
5345 if test "$profiler" = "yes" ; then
5346 echo "CONFIG_PROFILER=y" >> $config_host_mak
5348 if test "$slirp" = "yes" ; then
5349 echo "CONFIG_SLIRP=y" >> $config_host_mak
5350 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5352 if test "$vde" = "yes" ; then
5353 echo "CONFIG_VDE=y" >> $config_host_mak
5355 if test "$netmap" = "yes" ; then
5356 echo "CONFIG_NETMAP=y" >> $config_host_mak
5358 if test "$l2tpv3" = "yes" ; then
5359 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5361 if test "$cap_ng" = "yes" ; then
5362 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5364 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5365 for drv in $audio_drv_list; do
5366 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5367 echo "$def=y" >> $config_host_mak
5368 done
5369 if test "$audio_pt_int" = "yes" ; then
5370 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5372 if test "$audio_win_int" = "yes" ; then
5373 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5375 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5376 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5377 if test "$vnc" = "yes" ; then
5378 echo "CONFIG_VNC=y" >> $config_host_mak
5380 if test "$vnc_sasl" = "yes" ; then
5381 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5383 if test "$vnc_jpeg" = "yes" ; then
5384 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5386 if test "$vnc_png" = "yes" ; then
5387 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5389 if test "$fnmatch" = "yes" ; then
5390 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5392 if test "$xfs" = "yes" ; then
5393 echo "CONFIG_XFS=y" >> $config_host_mak
5395 qemu_version=$(head $source_path/VERSION)
5396 echo "VERSION=$qemu_version" >>$config_host_mak
5397 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5398 echo "SRC_PATH=$source_path" >> $config_host_mak
5399 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5400 if [ "$docs" = "yes" ] ; then
5401 echo "BUILD_DOCS=yes" >> $config_host_mak
5403 if test "$modules" = "yes"; then
5404 # $shacmd can generate a hash started with digit, which the compiler doesn't
5405 # like as an symbol. So prefix it with an underscore
5406 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5407 echo "CONFIG_MODULES=y" >> $config_host_mak
5409 if test "$sdl" = "yes" ; then
5410 echo "CONFIG_SDL=y" >> $config_host_mak
5411 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5412 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5414 if test "$cocoa" = "yes" ; then
5415 echo "CONFIG_COCOA=y" >> $config_host_mak
5417 if test "$curses" = "yes" ; then
5418 echo "CONFIG_CURSES=y" >> $config_host_mak
5420 if test "$pipe2" = "yes" ; then
5421 echo "CONFIG_PIPE2=y" >> $config_host_mak
5423 if test "$accept4" = "yes" ; then
5424 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5426 if test "$splice" = "yes" ; then
5427 echo "CONFIG_SPLICE=y" >> $config_host_mak
5429 if test "$eventfd" = "yes" ; then
5430 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5432 if test "$memfd" = "yes" ; then
5433 echo "CONFIG_MEMFD=y" >> $config_host_mak
5435 if test "$fallocate" = "yes" ; then
5436 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5438 if test "$fallocate_punch_hole" = "yes" ; then
5439 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5441 if test "$fallocate_zero_range" = "yes" ; then
5442 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5444 if test "$posix_fallocate" = "yes" ; then
5445 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5447 if test "$sync_file_range" = "yes" ; then
5448 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5450 if test "$fiemap" = "yes" ; then
5451 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5453 if test "$dup3" = "yes" ; then
5454 echo "CONFIG_DUP3=y" >> $config_host_mak
5456 if test "$ppoll" = "yes" ; then
5457 echo "CONFIG_PPOLL=y" >> $config_host_mak
5459 if test "$prctl_pr_set_timerslack" = "yes" ; then
5460 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5462 if test "$epoll" = "yes" ; then
5463 echo "CONFIG_EPOLL=y" >> $config_host_mak
5465 if test "$epoll_create1" = "yes" ; then
5466 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5468 if test "$sendfile" = "yes" ; then
5469 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5471 if test "$timerfd" = "yes" ; then
5472 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5474 if test "$setns" = "yes" ; then
5475 echo "CONFIG_SETNS=y" >> $config_host_mak
5477 if test "$clock_adjtime" = "yes" ; then
5478 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5480 if test "$syncfs" = "yes" ; then
5481 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5483 if test "$inotify" = "yes" ; then
5484 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5486 if test "$inotify1" = "yes" ; then
5487 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5489 if test "$byteswap_h" = "yes" ; then
5490 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5492 if test "$bswap_h" = "yes" ; then
5493 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5495 if test "$curl" = "yes" ; then
5496 echo "CONFIG_CURL=m" >> $config_host_mak
5497 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5498 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5500 if test "$brlapi" = "yes" ; then
5501 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5503 if test "$bluez" = "yes" ; then
5504 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5505 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5507 if test "$glib_subprocess" = "yes" ; then
5508 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5510 if test "$gtk" = "yes" ; then
5511 echo "CONFIG_GTK=y" >> $config_host_mak
5512 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5513 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5514 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5515 if test "$gtk_gl" = "yes" ; then
5516 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5519 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5520 if test "$gnutls" = "yes" ; then
5521 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5523 if test "$gnutls_rnd" = "yes" ; then
5524 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5526 if test "$gcrypt" = "yes" ; then
5527 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5528 if test "$gcrypt_hmac" = "yes" ; then
5529 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5531 if test "$gcrypt_kdf" = "yes" ; then
5532 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5535 if test "$nettle" = "yes" ; then
5536 echo "CONFIG_NETTLE=y" >> $config_host_mak
5537 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5538 if test "$nettle_kdf" = "yes" ; then
5539 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5542 if test "$tasn1" = "yes" ; then
5543 echo "CONFIG_TASN1=y" >> $config_host_mak
5545 if test "$have_ifaddrs_h" = "yes" ; then
5546 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5548 if test "$have_broken_size_max" = "yes" ; then
5549 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5552 # Work around a system header bug with some kernel/XFS header
5553 # versions where they both try to define 'struct fsxattr':
5554 # xfs headers will not try to redefine structs from linux headers
5555 # if this macro is set.
5556 if test "$have_fsxattr" = "yes" ; then
5557 echo "HAVE_FSXATTR=y" >> $config_host_mak
5559 if test "$vte" = "yes" ; then
5560 echo "CONFIG_VTE=y" >> $config_host_mak
5561 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5563 if test "$virglrenderer" = "yes" ; then
5564 echo "CONFIG_VIRGL=y" >> $config_host_mak
5565 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5566 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5568 if test "$xen" = "yes" ; then
5569 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5570 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5571 if test "$xen_pv_domain_build" = "yes" ; then
5572 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5575 if test "$linux_aio" = "yes" ; then
5576 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5578 if test "$attr" = "yes" ; then
5579 echo "CONFIG_ATTR=y" >> $config_host_mak
5581 if test "$libattr" = "yes" ; then
5582 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5584 if test "$virtfs" = "yes" ; then
5585 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5587 if test "$vhost_scsi" = "yes" ; then
5588 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5590 if test "$vhost_net" = "yes" ; then
5591 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5593 if test "$vhost_vsock" = "yes" ; then
5594 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5596 if test "$blobs" = "yes" ; then
5597 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5599 if test "$iovec" = "yes" ; then
5600 echo "CONFIG_IOVEC=y" >> $config_host_mak
5602 if test "$preadv" = "yes" ; then
5603 echo "CONFIG_PREADV=y" >> $config_host_mak
5605 if test "$fdt" = "yes" ; then
5606 echo "CONFIG_FDT=y" >> $config_host_mak
5608 if test "$signalfd" = "yes" ; then
5609 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5611 if test "$tcg_interpreter" = "yes" ; then
5612 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5614 if test "$fdatasync" = "yes" ; then
5615 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5617 if test "$madvise" = "yes" ; then
5618 echo "CONFIG_MADVISE=y" >> $config_host_mak
5620 if test "$posix_madvise" = "yes" ; then
5621 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5624 if test "$spice" = "yes" ; then
5625 echo "CONFIG_SPICE=y" >> $config_host_mak
5628 if test "$smartcard" = "yes" ; then
5629 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5632 if test "$libusb" = "yes" ; then
5633 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5636 if test "$usb_redir" = "yes" ; then
5637 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5640 if test "$opengl" = "yes" ; then
5641 echo "CONFIG_OPENGL=y" >> $config_host_mak
5642 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5643 if test "$opengl_dmabuf" = "yes" ; then
5644 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5648 if test "$avx2_opt" = "yes" ; then
5649 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5652 if test "$lzo" = "yes" ; then
5653 echo "CONFIG_LZO=y" >> $config_host_mak
5656 if test "$snappy" = "yes" ; then
5657 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5660 if test "$bzip2" = "yes" ; then
5661 echo "CONFIG_BZIP2=y" >> $config_host_mak
5662 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5665 if test "$libiscsi" = "yes" ; then
5666 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5667 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5668 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5671 if test "$libnfs" = "yes" ; then
5672 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5673 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5676 if test "$seccomp" = "yes"; then
5677 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5680 # XXX: suppress that
5681 if [ "$bsd" = "yes" ] ; then
5682 echo "CONFIG_BSD=y" >> $config_host_mak
5685 if test "$localtime_r" = "yes" ; then
5686 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5688 if test "$qom_cast_debug" = "yes" ; then
5689 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5691 if test "$rbd" = "yes" ; then
5692 echo "CONFIG_RBD=m" >> $config_host_mak
5693 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5694 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5697 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5698 if test "$coroutine_pool" = "yes" ; then
5699 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5700 else
5701 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5704 if test "$debug_stack_usage" = "yes" ; then
5705 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5708 if test "$open_by_handle_at" = "yes" ; then
5709 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5712 if test "$linux_magic_h" = "yes" ; then
5713 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5716 if test "$pragma_diagnostic_available" = "yes" ; then
5717 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5720 if test "$valgrind_h" = "yes" ; then
5721 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5724 if test "$has_environ" = "yes" ; then
5725 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5728 if test "$cpuid_h" = "yes" ; then
5729 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5732 if test "$int128" = "yes" ; then
5733 echo "CONFIG_INT128=y" >> $config_host_mak
5736 if test "$atomic128" = "yes" ; then
5737 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5740 if test "$atomic64" = "yes" ; then
5741 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5744 if test "$getauxval" = "yes" ; then
5745 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5748 if test "$glusterfs" = "yes" ; then
5749 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5750 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5751 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5754 if test "$glusterfs_xlator_opt" = "yes" ; then
5755 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5758 if test "$glusterfs_discard" = "yes" ; then
5759 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5762 if test "$glusterfs_fallocate" = "yes" ; then
5763 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
5766 if test "$glusterfs_zerofill" = "yes" ; then
5767 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5770 if test "$libssh2" = "yes" ; then
5771 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5772 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5773 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5776 if test "$live_block_migration" = "yes" ; then
5777 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5780 # USB host support
5781 if test "$libusb" = "yes"; then
5782 echo "HOST_USB=libusb legacy" >> $config_host_mak
5783 else
5784 echo "HOST_USB=stub" >> $config_host_mak
5787 # TPM passthrough support?
5788 if test "$tpm" = "yes"; then
5789 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5790 if test "$tpm_passthrough" = "yes"; then
5791 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5795 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5796 if have_backend "nop"; then
5797 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5799 if have_backend "simple"; then
5800 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5801 # Set the appropriate trace file.
5802 trace_file="\"$trace_file-\" FMT_pid"
5804 if have_backend "log"; then
5805 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5807 if have_backend "ust"; then
5808 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5810 if have_backend "dtrace"; then
5811 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5812 if test "$trace_backend_stap" = "yes" ; then
5813 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5816 if have_backend "ftrace"; then
5817 if test "$linux" = "yes" ; then
5818 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5819 else
5820 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5823 if have_backend "syslog"; then
5824 if test "$posix_syslog" = "yes" ; then
5825 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5826 else
5827 feature_not_found "syslog(trace backend)" "syslog not available"
5830 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5832 if test "$rdma" = "yes" ; then
5833 echo "CONFIG_RDMA=y" >> $config_host_mak
5836 if test "$have_rtnetlink" = "yes" ; then
5837 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5840 if test "$replication" = "yes" ; then
5841 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5844 if test "$have_af_vsock" = "yes" ; then
5845 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5848 if test "$have_sysmacros" = "yes" ; then
5849 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
5852 if test "$have_static_assert" = "yes" ; then
5853 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
5856 # Hold two types of flag:
5857 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5858 # a thread we have a handle to
5859 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5860 # platform
5861 if test "$pthread_setname_np" = "yes" ; then
5862 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5863 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5866 if test "$vxhs" = "yes" ; then
5867 echo "CONFIG_VXHS=y" >> $config_host_mak
5868 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
5871 if test "$tcg_interpreter" = "yes"; then
5872 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5873 elif test "$ARCH" = "sparc64" ; then
5874 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5875 elif test "$ARCH" = "s390x" ; then
5876 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5877 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5878 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5879 elif test "$ARCH" = "ppc64" ; then
5880 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5881 else
5882 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5884 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5886 echo "TOOLS=$tools" >> $config_host_mak
5887 echo "ROMS=$roms" >> $config_host_mak
5888 echo "MAKE=$make" >> $config_host_mak
5889 echo "INSTALL=$install" >> $config_host_mak
5890 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5891 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5892 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5893 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5894 echo "PYTHON=$python" >> $config_host_mak
5895 echo "CC=$cc" >> $config_host_mak
5896 if $iasl -h > /dev/null 2>&1; then
5897 echo "IASL=$iasl" >> $config_host_mak
5899 echo "CC_I386=$cc_i386" >> $config_host_mak
5900 echo "HOST_CC=$host_cc" >> $config_host_mak
5901 echo "CXX=$cxx" >> $config_host_mak
5902 echo "OBJCC=$objcc" >> $config_host_mak
5903 echo "AR=$ar" >> $config_host_mak
5904 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5905 echo "AS=$as" >> $config_host_mak
5906 echo "CCAS=$ccas" >> $config_host_mak
5907 echo "CPP=$cpp" >> $config_host_mak
5908 echo "OBJCOPY=$objcopy" >> $config_host_mak
5909 echo "LD=$ld" >> $config_host_mak
5910 echo "NM=$nm" >> $config_host_mak
5911 echo "WINDRES=$windres" >> $config_host_mak
5912 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5913 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5914 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5915 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5916 if test "$sparse" = "yes" ; then
5917 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5918 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5919 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5920 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5921 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5923 if test "$cross_prefix" != ""; then
5924 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5925 else
5926 echo "AUTOCONF_HOST := " >> $config_host_mak
5928 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5929 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5930 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5931 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5932 echo "LIBS+=$LIBS" >> $config_host_mak
5933 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5934 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5935 echo "EXESUF=$EXESUF" >> $config_host_mak
5936 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5937 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5938 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5939 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5940 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5941 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5942 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5943 if test "$gcov" = "yes" ; then
5944 echo "CONFIG_GCOV=y" >> $config_host_mak
5945 echo "GCOV=$gcov_tool" >> $config_host_mak
5948 # use included Linux headers
5949 if test "$linux" = "yes" ; then
5950 mkdir -p linux-headers
5951 case "$cpu" in
5952 i386|x86_64|x32)
5953 linux_arch=x86
5955 ppcemb|ppc|ppc64)
5956 linux_arch=powerpc
5958 s390x)
5959 linux_arch=s390
5961 aarch64)
5962 linux_arch=arm64
5964 mips64)
5965 linux_arch=mips
5968 # For most CPUs the kernel architecture name and QEMU CPU name match.
5969 linux_arch="$cpu"
5971 esac
5972 # For non-KVM architectures we will not have asm headers
5973 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5974 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5978 for target in $target_list; do
5979 target_dir="$target"
5980 config_target_mak=$target_dir/config-target.mak
5981 target_name=$(echo $target | cut -d '-' -f 1)
5982 target_bigendian="no"
5984 case "$target_name" in
5985 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5986 target_bigendian=yes
5988 esac
5989 target_softmmu="no"
5990 target_user_only="no"
5991 target_linux_user="no"
5992 target_bsd_user="no"
5993 case "$target" in
5994 ${target_name}-softmmu)
5995 target_softmmu="yes"
5997 ${target_name}-linux-user)
5998 if test "$linux" != "yes" ; then
5999 error_exit "Target '$target' is only available on a Linux host"
6001 target_user_only="yes"
6002 target_linux_user="yes"
6004 ${target_name}-bsd-user)
6005 if test "$bsd" != "yes" ; then
6006 error_exit "Target '$target' is only available on a BSD host"
6008 target_user_only="yes"
6009 target_bsd_user="yes"
6012 error_exit "Target '$target' not recognised"
6013 exit 1
6015 esac
6017 mkdir -p $target_dir
6018 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6020 bflt="no"
6021 mttcg="no"
6022 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6023 gdb_xml_files=""
6025 TARGET_ARCH="$target_name"
6026 TARGET_BASE_ARCH=""
6027 TARGET_ABI_DIR=""
6029 case "$target_name" in
6030 i386)
6031 gdb_xml_files="i386-32bit-core.xml"
6033 x86_64)
6034 TARGET_BASE_ARCH=i386
6035 gdb_xml_files="i386-64bit-core.xml"
6037 alpha)
6038 mttcg="yes"
6040 arm|armeb)
6041 TARGET_ARCH=arm
6042 bflt="yes"
6043 mttcg="yes"
6044 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6046 aarch64)
6047 TARGET_BASE_ARCH=arm
6048 bflt="yes"
6049 mttcg="yes"
6050 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6052 cris)
6054 hppa)
6056 lm32)
6058 m68k)
6059 bflt="yes"
6060 gdb_xml_files="cf-core.xml cf-fp.xml"
6062 microblaze|microblazeel)
6063 TARGET_ARCH=microblaze
6064 bflt="yes"
6066 mips|mipsel)
6067 TARGET_ARCH=mips
6068 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6070 mipsn32|mipsn32el)
6071 TARGET_ARCH=mips64
6072 TARGET_BASE_ARCH=mips
6073 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6074 echo "TARGET_ABI32=y" >> $config_target_mak
6076 mips64|mips64el)
6077 TARGET_ARCH=mips64
6078 TARGET_BASE_ARCH=mips
6079 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6081 moxie)
6083 nios2)
6085 or1k)
6086 TARGET_ARCH=openrisc
6087 TARGET_BASE_ARCH=openrisc
6089 ppc)
6090 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6092 ppcemb)
6093 TARGET_BASE_ARCH=ppc
6094 TARGET_ABI_DIR=ppc
6095 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6097 ppc64)
6098 TARGET_BASE_ARCH=ppc
6099 TARGET_ABI_DIR=ppc
6100 mttcg=yes
6101 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6103 ppc64le)
6104 TARGET_ARCH=ppc64
6105 TARGET_BASE_ARCH=ppc
6106 TARGET_ABI_DIR=ppc
6107 mttcg=yes
6108 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6110 ppc64abi32)
6111 TARGET_ARCH=ppc64
6112 TARGET_BASE_ARCH=ppc
6113 TARGET_ABI_DIR=ppc
6114 echo "TARGET_ABI32=y" >> $config_target_mak
6115 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6117 sh4|sh4eb)
6118 TARGET_ARCH=sh4
6119 bflt="yes"
6121 sparc)
6123 sparc64)
6124 TARGET_BASE_ARCH=sparc
6126 sparc32plus)
6127 TARGET_ARCH=sparc64
6128 TARGET_BASE_ARCH=sparc
6129 TARGET_ABI_DIR=sparc
6130 echo "TARGET_ABI32=y" >> $config_target_mak
6132 s390x)
6133 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
6135 tilegx)
6137 tricore)
6139 unicore32)
6141 xtensa|xtensaeb)
6142 TARGET_ARCH=xtensa
6145 error_exit "Unsupported target CPU"
6147 esac
6148 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6149 if [ "$TARGET_BASE_ARCH" = "" ]; then
6150 TARGET_BASE_ARCH=$TARGET_ARCH
6153 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6155 upper() {
6156 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6159 target_arch_name="$(upper $TARGET_ARCH)"
6160 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6161 echo "TARGET_NAME=$target_name" >> $config_target_mak
6162 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6163 if [ "$TARGET_ABI_DIR" = "" ]; then
6164 TARGET_ABI_DIR=$TARGET_ARCH
6166 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6167 if [ "$HOST_VARIANT_DIR" != "" ]; then
6168 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6170 case "$target_name" in
6171 i386|x86_64)
6172 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6173 echo "CONFIG_XEN=y" >> $config_target_mak
6174 if test "$xen_pci_passthrough" = yes; then
6175 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6180 esac
6181 case "$target_name" in
6182 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
6183 # Make sure the target and host cpus are compatible
6184 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6185 \( "$target_name" = "$cpu" -o \
6186 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6187 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6188 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6189 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6190 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6191 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
6192 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6193 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6194 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
6195 echo "CONFIG_KVM=y" >> $config_target_mak
6196 if test "$vhost_net" = "yes" ; then
6197 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6198 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6201 esac
6202 if test "$hax" = "yes" ; then
6203 if test "$target_softmmu" = "yes" ; then
6204 case "$target_name" in
6205 i386|x86_64)
6206 echo "CONFIG_HAX=y" >> $config_target_mak
6208 esac
6211 if test "$target_bigendian" = "yes" ; then
6212 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6214 if test "$target_softmmu" = "yes" ; then
6215 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6216 if test "$mttcg" = "yes" ; then
6217 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6220 if test "$target_user_only" = "yes" ; then
6221 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6222 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6224 if test "$target_linux_user" = "yes" ; then
6225 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6227 list=""
6228 if test ! -z "$gdb_xml_files" ; then
6229 for x in $gdb_xml_files; do
6230 list="$list $source_path/gdb-xml/$x"
6231 done
6232 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6235 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6236 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6238 if test "$target_bsd_user" = "yes" ; then
6239 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6242 # generate QEMU_CFLAGS/LDFLAGS for targets
6244 cflags=""
6245 ldflags=""
6247 disas_config() {
6248 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6249 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6252 for i in $ARCH $TARGET_BASE_ARCH ; do
6253 case "$i" in
6254 alpha)
6255 disas_config "ALPHA"
6257 aarch64)
6258 if test -n "${cxx}"; then
6259 disas_config "ARM_A64"
6262 arm)
6263 disas_config "ARM"
6264 if test -n "${cxx}"; then
6265 disas_config "ARM_A64"
6268 cris)
6269 disas_config "CRIS"
6271 hppa)
6272 disas_config "HPPA"
6274 i386|x86_64|x32)
6275 disas_config "I386"
6277 ia64*)
6278 disas_config "IA64"
6280 lm32)
6281 disas_config "LM32"
6283 m68k)
6284 disas_config "M68K"
6286 microblaze*)
6287 disas_config "MICROBLAZE"
6289 mips*)
6290 disas_config "MIPS"
6292 moxie*)
6293 disas_config "MOXIE"
6295 nios2)
6296 disas_config "NIOS2"
6298 or1k)
6299 disas_config "OPENRISC"
6301 ppc*)
6302 disas_config "PPC"
6304 s390*)
6305 disas_config "S390"
6307 sh4)
6308 disas_config "SH4"
6310 sparc*)
6311 disas_config "SPARC"
6313 xtensa*)
6314 disas_config "XTENSA"
6316 esac
6317 done
6318 if test "$tcg_interpreter" = "yes" ; then
6319 disas_config "TCI"
6322 case "$ARCH" in
6323 alpha)
6324 # Ensure there's only a single GP
6325 cflags="-msmall-data $cflags"
6327 esac
6329 if test "$gprof" = "yes" ; then
6330 echo "TARGET_GPROF=yes" >> $config_target_mak
6331 if test "$target_linux_user" = "yes" ; then
6332 cflags="-p $cflags"
6333 ldflags="-p $ldflags"
6335 if test "$target_softmmu" = "yes" ; then
6336 ldflags="-p $ldflags"
6337 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6341 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6342 ldflags="$ldflags $textseg_ldflags"
6345 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6346 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6348 done # for target in $targets
6350 if [ "$pixman" = "internal" ]; then
6351 echo "config-host.h: subdir-pixman" >> $config_host_mak
6354 if [ "$dtc_internal" = "yes" ]; then
6355 echo "config-host.h: subdir-dtc" >> $config_host_mak
6358 if test "$numa" = "yes"; then
6359 echo "CONFIG_NUMA=y" >> $config_host_mak
6362 if test "$ccache_cpp2" = "yes"; then
6363 echo "export CCACHE_CPP2=y" >> $config_host_mak
6366 # build tree in object directory in case the source is not in the current directory
6367 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6368 DIRS="$DIRS docs fsdev"
6369 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6370 DIRS="$DIRS roms/seabios roms/vgabios"
6371 DIRS="$DIRS qapi-generated"
6372 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6373 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6374 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6375 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6376 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6377 FILES="$FILES pc-bios/s390-ccw/Makefile"
6378 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6379 FILES="$FILES pc-bios/qemu-icon.bmp"
6380 for bios_file in \
6381 $source_path/pc-bios/*.bin \
6382 $source_path/pc-bios/*.lid \
6383 $source_path/pc-bios/*.aml \
6384 $source_path/pc-bios/*.rom \
6385 $source_path/pc-bios/*.dtb \
6386 $source_path/pc-bios/*.img \
6387 $source_path/pc-bios/openbios-* \
6388 $source_path/pc-bios/u-boot.* \
6389 $source_path/pc-bios/palcode-*
6391 FILES="$FILES pc-bios/$(basename $bios_file)"
6392 done
6393 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6395 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6396 done
6397 mkdir -p $DIRS
6398 for f in $FILES ; do
6399 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6400 symlink "$source_path/$f" "$f"
6402 done
6404 # temporary config to build submodules
6405 for rom in seabios vgabios ; do
6406 config_mak=roms/$rom/config.mak
6407 echo "# Automatically generated by configure - do not modify" > $config_mak
6408 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6409 echo "AS=$as" >> $config_mak
6410 echo "CCAS=$ccas" >> $config_mak
6411 echo "CC=$cc" >> $config_mak
6412 echo "BCC=bcc" >> $config_mak
6413 echo "CPP=$cpp" >> $config_mak
6414 echo "OBJCOPY=objcopy" >> $config_mak
6415 echo "IASL=$iasl" >> $config_mak
6416 echo "LD=$ld" >> $config_mak
6417 done
6419 # set up tests data directory
6420 if [ ! -e tests/data ]; then
6421 symlink "$source_path/tests/data" tests/data
6424 # set up qemu-iotests in this build directory
6425 iotests_common_env="tests/qemu-iotests/common.env"
6426 iotests_check="tests/qemu-iotests/check"
6428 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6429 echo >> "$iotests_common_env"
6430 echo "export PYTHON='$python'" >> "$iotests_common_env"
6432 if [ ! -e "$iotests_check" ]; then
6433 symlink "$source_path/$iotests_check" "$iotests_check"
6436 # Save the configure command line for later reuse.
6437 cat <<EOD >config.status
6438 #!/bin/sh
6439 # Generated by configure.
6440 # Run this file to recreate the current configuration.
6441 # Compiler output produced by configure, useful for debugging
6442 # configure, is in config.log if it exists.
6444 printf "exec" >>config.status
6445 printf " '%s'" "$0" "$@" >>config.status
6446 echo ' "$@"' >>config.status
6447 chmod +x config.status
6449 rm -r "$TMPDIR1"